{"version":3,"sources":["../src/template-funcs.ts"],"sourcesContent":["import Definitions      from './core/definitions';\r\nimport Document         from './core/document';\r\nimport InternetObject from './core/internet-object';\r\nimport ASTParser from './parser/ast-parser';\r\nimport parse            from './parser/index';\r\nimport parseDefinitions from './parser/parse-defs';\r\nimport Tokenizer from './parser/tokenizer';\r\nimport Schema from './schema/schema';\r\nimport parseSchema from './schema/parse-schema';\r\n\r\n/**\r\n * Parses a string (template literal) as an Internet Object document and returns a Document instance.\r\n *\r\n * @example\r\n *   const doc = ioDocument`\r\n *     name, age\r\n *     ---\r\n *     ~ Alice, 30\r\n *     ~ Bob, 40\r\n *   `;\r\n *\r\n * @param {TemplateStringsArray} strings - Template string segments.\r\n * @param {...any} args - Interpolated values.\r\n * @returns {Document} Parsed Document instance.\r\n */\r\nexport function ioDocument(strings: TemplateStringsArray, ...args: any[]): Document {\r\n  const input = strings.reduce((acc, str, i) => {\r\n    return acc + str + (args[i] === undefined ? '' : args[i]);\r\n  }, '');\r\n\r\n  return parse(input, null);\r\n}\r\n\r\n/**\r\n * Tag function for parsing a document with external definitions (such as variables or schema).\r\n *\r\n * @example\r\n *   const defs = ioDefinitions`~ $schema: { name, age }`;\r\n *   const doc = ioDocument.with(defs)`\r\n *     ~ Alice, 30\r\n *     ~ Bob, 40\r\n *   `;\r\n *\r\n * @param {Definitions | Schema | string | null} defs - External definitions (variables, schema).\r\n * @param {Error[]} [errorCollector] - Optional array to collect validation errors.\r\n * @returns {function(TemplateStringsArray, ...any[]): Document} A tag function for parsing with definitions.\r\n */\r\nioDocument.with = (defs: Definitions | Schema | string | null, errorCollector?: Error[]): (strings: TemplateStringsArray, ...args: any[]) => Document => {\r\n  return (strings: TemplateStringsArray, ...args: any[]) => {\r\n    const input = strings.reduce((acc, str, i) => {\r\n      return acc + str + (args[i] === undefined ? '' : args[i]);\r\n    }, '');\r\n\r\n    return parse(input, defs, errorCollector);\r\n  }\r\n}\r\n\r\n/**\r\n * Parses a string (template literal) as an Internet Object document and returns a plain JavaScript object or array.\r\n *\r\n * @example\r\n *   const obj = ioObject`name, age --- ~ Alice, 30`;\r\n *   // obj: [{ name: 'Alice', age: 30 }]\r\n *\r\n * @param {TemplateStringsArray} strings - Template string segments.\r\n * @param {...any} args - Interpolated values.\r\n * @returns {any} Parsed JavaScript object or array.\r\n */\r\nexport function ioObject(strings: TemplateStringsArray, ...args: any[]): InternetObject | null {\r\n  const input = strings.reduce((acc, str, i) => {\r\n    return acc + str + (args[i] === undefined ? '' : args[i]);\r\n  }, '');\r\n\r\n  // Tokenize the source\r\n  const tokenizer = new Tokenizer(input);\r\n  const tokens    = tokenizer.tokenize();\r\n\r\n  const parser    = new ASTParser(tokens);\r\n  const docNode   = parser.parse();\r\n\r\n  return docNode.firstChild?.firstChildObject?.toValue() || null;\r\n}\r\n\r\n/**\r\n * Parses a string and returns an Internet Object instance with external definitions (variables, schema, etc.).\r\n *\r\n * @example\r\n *   const defs = ioDefinitions`\r\n *     ~ $schema: { name, age }\r\n *    ~ @foo: 123\r\n *  `;\r\n *  const obj = ioObject.with(defs)`Alice, 30`;\r\n * @param {Definitions | Schema | string | null} defs - External definitions (variables, schema).\r\n * @param {Error[]} [errorCollector] - Optional array to collect validation errors.\r\n * @return {function(TemplateStringsArray, ...any[]): any} A tag function for parsing with definitions.\r\n */\r\nioObject.with = (defs: Definitions | Schema | string | null, errorCollector?: Error[]): (strings: TemplateStringsArray, ...args: any[]) => InternetObject | null => {\r\n  return (strings: TemplateStringsArray, ...args: any[]) => {\r\n    const input = strings.reduce((acc, str, i) => {\r\n      return acc + str + (args[i] === undefined ? '' : args[i]);\r\n    }, '');\r\n\r\n    return parse(input, defs, errorCollector).toJSON();\r\n  }\r\n}\r\n\r\n/**\r\n * Parses a string (template literal) as Internet Object definitions (variables, schema, etc.).\r\n *\r\n * @example\r\n *   const defs = ioDefinitions`\r\n *     ~ $schema: { name, age }\r\n *     ~ @foo: 123\r\n *   `;\r\n *\r\n * @param {TemplateStringsArray} strings - Template string segments.\r\n * @param {...any} args - Interpolated values.\r\n * @returns {Definitions|null} Parsed Definitions instance, or null if invalid.\r\n */\r\nexport function ioDefinitions(strings: TemplateStringsArray, ...args: any[]): Definitions | null {\r\n  const input = strings.reduce((acc, str, i) => {\r\n    return acc + str + (args[i] === undefined ? '' : args[i]);\r\n  }, '');\r\n\r\n  return parseDefinitions(input, null);\r\n}\r\n\r\n/**\r\n * Parses an inline schema (template literal) and returns a Schema instance.\r\n *\r\n * @example\r\n *   const schema = ioSchema`{ name: string, age: int }`;\r\n *\r\n * @param {TemplateStringsArray} strings - Template string segments.\r\n * @param {...any} args - Interpolated values.\r\n * @returns {Schema} Parsed Schema instance.\r\n */\r\nexport function ioSchema(strings: TemplateStringsArray, ...args: any[]): Schema {\r\n  const input = strings.reduce((acc, str, i) => {\r\n    return acc + str + (args[i] === undefined ? '' : args[i]);\r\n  }, '');\r\n\r\n  return parseSchema(input, null);\r\n}\r\n\r\n/**\r\n * Parses a schema with external/parent definitions to allow $schema references.\r\n *\r\n * @example\r\n *   const defs = ioDefinitions`~ $Address: { street: string }`;\r\n *   const schema = ioSchema.with(defs)`{ addresses: [$Address] }`;\r\n */\r\nioSchema.with = (parentDefs: Definitions | null): (strings: TemplateStringsArray, ...args: any[]) => Schema => {\r\n  return (strings: TemplateStringsArray, ...args: any[]) => {\r\n    const input = strings.reduce((acc, str, i) => {\r\n      return acc + str + (args[i] === undefined ? '' : args[i]);\r\n    }, '');\r\n\r\n    return parseSchema(input, parentDefs);\r\n  }\r\n}\r\n\r\n/**\r\n * Parses definitions with external/parent definitions to extend or merge.\r\n *\r\n * @example\r\n *   const baseDefs = ioDefinitions`~ $base: { id: int }`;\r\n *   const extendedDefs = ioDefinitions.with(baseDefs)`\r\n *     ~ $user: { $base, name: string }\r\n *   `;\r\n *\r\n * @param {Definitions | null} parentDefs - Parent definitions to extend.\r\n * @returns {function(TemplateStringsArray, ...any[]): Definitions | null} A tag function for parsing with parent definitions.\r\n */\r\nioDefinitions.with = (parentDefs: Definitions | null): (strings: TemplateStringsArray, ...args: any[]) => Definitions | null => {\r\n  return (strings: TemplateStringsArray, ...args: any[]) => {\r\n    const input = strings.reduce((acc, str, i) => {\r\n      return acc + str + (args[i] === undefined ? '' : args[i]);\r\n    }, '');\r\n\r\n    return parseDefinitions(input, parentDefs);\r\n  }\r\n}\r\n\r\n/**\r\n * ## Internet Object Facade\r\n *\r\n * Unified API for all core Internet Object functionality.\r\n *\r\n * ### Aliases:\r\n * - `doc` ➔ `ioDocument`\r\n * - `defs` ➔ `ioDefinitions`\r\n * - `object` ➔ `ioObject`\r\n * - Full names also available: `document`, `definitions`\r\n *\r\n * @example\r\n *   import io from 'internet-object';\r\n *   const doc = io.doc`name, age --- ~ Alice, 30`;\r\n *   const defs = io.defs`$schema: { name, age }`;\r\n *\r\n * @property {typeof ioDocument} doc      - Alias for ioDocument (preferred usage)\r\n * @property {typeof ioObject} object     - Alias for ioObject (preferred usage)\r\n * @property {typeof ioDefinitions} defs  - Alias for ioDefinitions (preferred usage)\r\n * @property {typeof ioDocument} document - Full name for ioDocument\r\n * @property {typeof ioDefinitions} definitions - Full name for ioDefinitions\r\n */\r\nconst io = {\r\n  // Short, ergonomic aliases\r\n  doc: ioDocument,\r\n  object: ioObject,\r\n  defs: ioDefinitions,\r\n  schema: ioSchema,\r\n\r\n  // Full names for discoverability\r\n  document: ioDocument,\r\n  definitions: ioDefinitions,\r\n};\r\n\r\nexport default io;\r\n"],"mappings":"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","names":["parse","Tokenizer","ASTParser","parseDefinitions","parseSchema"]}