{"version":3,"sources":["../../src/facade/load-inferred.ts"],"sourcesContent":["/**\r\n * Load JS data with inferred schema into Document\r\n *\r\n * This module provides the `loadInferred` function that automatically infers\r\n * schema definitions from plain JavaScript data and creates a complete Document.\r\n *\r\n * Unlike `load()` which requires explicit schema definitions, `loadInferred()`\r\n * analyzes the structure and types of your data to generate appropriate schemas.\r\n *\r\n * @module facade/load-inferred\r\n */\r\n\r\nimport Document from '../core/document';\r\nimport Header from '../core/header';\r\nimport Section from '../core/section';\r\nimport SectionCollection from '../core/section-collection';\r\nimport InternetObject from '../core/internet-object';\r\nimport Collection from '../core/collection';\r\nimport { inferDefs } from '../schema/utils/defs-inferrer';\r\nimport { loadObject as processObject, loadCollection as processCollection } from '../schema/load-processor';\r\n\r\n/**\r\n * Options for loadInferred function\r\n */\r\nexport interface LoadInferredOptions {\r\n  /**\r\n   * When true, throws on first validation error.\r\n   * When false (default), continues processing and collects errors.\r\n   * @default false\r\n   */\r\n  strict?: boolean;\r\n\r\n  /**\r\n   * Array to collect validation errors instead of throwing.\r\n   * Useful for processing collections where some items may be invalid.\r\n   */\r\n  errorCollector?: Error[];\r\n}\r\n\r\n/**\r\n * Load plain JavaScript data with **inferred schema** into a Document.\r\n *\r\n * This function analyzes the structure of your data and automatically generates\r\n * appropriate schema definitions. The resulting Document includes:\r\n * - A header with inferred `$schema` and nested schema definitions\r\n * - Validated data loaded according to the inferred schema\r\n *\r\n * ## When to use `loadInferred()`\r\n *\r\n * Use this function when:\r\n * - You have plain JS data and want schema inference\r\n * - You don't have pre-defined schema definitions\r\n * - You want to generate IO format with proper type hints\r\n *\r\n * ## When to use `load()` instead\r\n *\r\n * Use `load()` when:\r\n * - You have explicit schema definitions\r\n * - You need to validate against a specific schema\r\n * - You want to use a named schema from definitions\r\n *\r\n * @param data - Plain JavaScript object or array to load\r\n * @param options - Optional LoadInferredOptions (strict, errorCollector)\r\n * @returns Complete Document with header containing inferred definitions\r\n *\r\n * @example\r\n * ```typescript\r\n * // Simple - infer schema from data\r\n * const data = { name: 'Alice', age: 28 };\r\n * const doc = loadInferred(data);\r\n * // doc.header.schema has inferred schema { name: string, age: int }\r\n * // doc.header.definitions contains $schema\r\n *\r\n * // With nested objects\r\n * const data = {\r\n *   name: 'Alice',\r\n *   address: { city: 'NYC', zip: '10001' }\r\n * };\r\n * const doc = loadInferred(data);\r\n * // doc.header.definitions contains $schema and $address\r\n *\r\n * // Load array data\r\n * const users = [\r\n *   { name: 'Alice', age: 28 },\r\n *   { name: 'Bob', age: 35 }\r\n * ];\r\n * const doc = loadInferred(users);\r\n *\r\n * // With error collection\r\n * const errors: Error[] = [];\r\n * const doc = loadInferred(data, { errorCollector: errors });\r\n * ```\r\n */\r\n// Overload 1: Simple call with data only\r\nexport function loadInferred(data: any): Document;\r\n// Overload 2: With options\r\nexport function loadInferred(data: any, options: LoadInferredOptions): Document;\r\nexport function loadInferred(\r\n  data: any,\r\n  options?: LoadInferredOptions\r\n): Document {\r\n  // Infer definitions from the data structure\r\n  const { definitions, rootSchema } = inferDefs(data);\r\n\r\n  // Create header with inferred definitions\r\n  const header = new Header();\r\n  header.definitions.merge(definitions, true);\r\n  header.schema = rootSchema;\r\n\r\n  // Load the data using the inferred schema\r\n  let loadedData: InternetObject | Collection<InternetObject>;\r\n\r\n  if (Array.isArray(data)) {\r\n    loadedData = processCollection(data, rootSchema, definitions, options?.errorCollector);\r\n  } else {\r\n    loadedData = processObject(data, rootSchema, definitions);\r\n  }\r\n\r\n  // Create section\r\n  const section = new Section(loadedData, undefined, '$schema');\r\n  const sections = new SectionCollection();\r\n  sections.push(section);\r\n\r\n  // Create and return document\r\n  return new Document(header, sections);\r\n}\r\n\r\nexport default loadInferred;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,sBAAqB;AACrB,oBAAmB;AACnB,qBAAoB;AACpB,gCAA8B;AAG9B,2BAA0B;AAC1B,4BAAiF;AA8E1E,SAAS,aACd,MACA,SACU;AAEV,QAAM,EAAE,aAAa,WAAW,QAAI,gCAAU,IAAI;AAGlD,QAAM,SAAS,IAAI,cAAAA,QAAO;AAC1B,SAAO,YAAY,MAAM,aAAa,IAAI;AAC1C,SAAO,SAAS;AAGhB,MAAI;AAEJ,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,qBAAa,sBAAAC,gBAAkB,MAAM,YAAY,aAAa,SAAS,cAAc;AAAA,EACvF,OAAO;AACL,qBAAa,sBAAAC,YAAc,MAAM,YAAY,WAAW;AAAA,EAC1D;AAGA,QAAM,UAAU,IAAI,eAAAC,QAAQ,YAAY,QAAW,SAAS;AAC5D,QAAM,WAAW,IAAI,0BAAAC,QAAkB;AACvC,WAAS,KAAK,OAAO;AAGrB,SAAO,IAAI,gBAAAC,QAAS,QAAQ,QAAQ;AACtC;AAEA,IAAO,wBAAQ;","names":["Header","processCollection","processObject","Section","SectionCollection","Document"]}