{"version":3,"sources":["../../src/facade/stringify.ts"],"sourcesContent":["import Definitions from '../core/definitions';\r\nimport InternetObject from '../core/internet-object';\r\nimport Collection from '../core/collection';\r\nimport Document from '../core/document';\r\nimport Decimal from '../core/decimal/decimal';\r\nimport Schema from '../schema/schema';\r\nimport MemberDef from '../schema/types/memberdef';\r\nimport TypedefRegistry from '../schema/typedef-registry';\r\nimport { quoteExtraPropertyString } from '../utils/string-formatter';\r\nimport { IO_MARKERS } from './serialization-constants';\r\nimport { stringifyDocument } from './stringify-document';\r\nimport { formatRecord, createIndentString, FormatContext } from './io-formatter';\r\n\r\n/**\r\n * Stringify options for controlling output format\r\n */\r\nexport interface StringifyOptions {\r\n  /**\r\n   * The name of the schema to use from definitions.\r\n   * If provided, the schema will be looked up by this name in the definitions.\r\n   * If not provided, uses `defs.defaultSchema` (`$schema`).\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const io = stringify(user, defs, { schemaName: '$User' });\r\n   * ```\r\n   */\r\n  schemaName?: string;\r\n\r\n  /**\r\n   * Indentation for pretty printing (number of spaces or string)\r\n   * If omitted, output is compact (single line)\r\n   */\r\n  indent?: number | string;\r\n\r\n  /**\r\n   * Skip error objects in collections\r\n   * Default: false (includes errors in output)\r\n   */\r\n  skipErrors?: boolean;\r\n\r\n  /**\r\n   * Include type annotations in output\r\n   * Default: false (values only)\r\n   */\r\n  includeTypes?: boolean;\r\n\r\n  /**\r\n   * Include header section with definitions (for Document only)\r\n   * Default: false (data only)\r\n   */\r\n  includeHeader?: boolean;\r\n}\r\n\r\n/**\r\n * Serialize an InternetObject, Collection, or Document to Internet Object text format.\r\n *\r\n * This is the high-level API for converting validated data back to IO format.\r\n * Uses TypeDef.stringify() methods to serialize each field according to type rules.\r\n *\r\n * ## Overload Patterns\r\n *\r\n * 1. `stringify(value)` - Schema-less serialization (no validation)\r\n * 2. `stringify(value, defs)` - Uses `defs.defaultSchema` ($schema) for type info\r\n * 3. `stringify(value, options)` - Schema-less with formatting options\r\n * 4. `stringify(value, defs, options)` - Full control with schema from defs\r\n *\r\n * ## Schema Resolution\r\n *\r\n * When `defs` is provided, the schema is resolved in this order:\r\n * 1. `options.schemaName` → `defs.get(schemaName)` (pick specific schema)\r\n * 2. `defs.defaultSchema` → Uses `$schema` from definitions\r\n * 3. No schema → Schema-less mode (values only, no validation)\r\n *\r\n * @param value - InternetObject, Collection, or Document to serialize\r\n * @param defs - Optional definitions for schema and variable resolution\r\n * @param options - Optional formatting options (includes `schemaName` to pick specific schema)\r\n * @returns Internet Object text representation\r\n *\r\n * @example\r\n * ```typescript\r\n * // Schema-less stringify\r\n * const obj = new InternetObject();\r\n * obj.set('name', 'Alice');\r\n * obj.set('age', 28);\r\n * const text = stringify(obj);\r\n * // Output: \"Alice, 28\"\r\n *\r\n * // Stringify with definitions (uses $schema)\r\n * const defs = new Definitions();\r\n * defs.set('$schema', userSchema);\r\n * const text = stringify(obj, defs);\r\n *\r\n * // Stringify with specific schema from defs\r\n * const text = stringify(obj, defs, { schemaName: '$Address' });\r\n *\r\n * // Stringify a document\r\n * const doc = parse(ioText, null);\r\n * const text = stringify(doc);\r\n *\r\n * // Stringify with pretty printing\r\n * const text = stringify(obj, defs, { indent: 2 });\r\n *\r\n * // Stringify a collection\r\n * const collection = new Collection([obj1, obj2, obj3]);\r\n * const text = stringify(collection, defs);\r\n * ```\r\n */\r\n// Overload 1: Schema-less serialization\r\nexport function stringify(value: InternetObject | Collection<InternetObject> | Document | any): string;\r\n// Overload 2: With definitions (uses defs.defaultSchema)\r\nexport function stringify(value: InternetObject | Collection<InternetObject> | Document | any, defs: Definitions): string;\r\n// Overload 3: Schema-less with options\r\nexport function stringify(value: InternetObject | Collection<InternetObject> | Document | any, options: StringifyOptions): string;\r\n// Overload 4: Full control with definitions and options\r\nexport function stringify(value: InternetObject | Collection<InternetObject> | Document | any, defs: Definitions, options: StringifyOptions): string;\r\nexport function stringify(\r\n  value: InternetObject | Collection<InternetObject> | Document | any,\r\n  defsOrOptions?: Definitions | StringifyOptions,\r\n  options?: StringifyOptions\r\n): string {\r\n  // Resolve arguments\r\n  let defs: Definitions | undefined;\r\n  let opts: StringifyOptions | undefined;\r\n\r\n  if (defsOrOptions instanceof Definitions) {\r\n    defs = defsOrOptions;\r\n    opts = options;\r\n  } else if (defsOrOptions && typeof defsOrOptions === 'object') {\r\n    // It's options (StringifyOptions)\r\n    opts = defsOrOptions as StringifyOptions;\r\n  }\r\n\r\n  // Handle Document (IODocument) - delegate to stringifyDocument\r\n  if (value instanceof Document) {\r\n\r\n    // Build document options\r\n    let docOptions: any = opts ? { ...opts } : {};\r\n\r\n    // Default behavior: if includeHeader is not specified, use includeTypes to determine\r\n    if (docOptions.includeHeader === undefined) {\r\n      docOptions.includeHeader = docOptions.includeTypes ?? false;\r\n    }\r\n\r\n    return stringifyDocument(value, docOptions);\r\n  }\r\n\r\n  // Resolve schema from definitions\r\n  // Priority: options.schemaName → defs.defaultSchema → no schema\r\n  let schema: Schema | undefined;\r\n  if (defs) {\r\n    if (opts?.schemaName) {\r\n      const namedSchema = defs.getV(opts.schemaName);\r\n      if (namedSchema instanceof Schema) {\r\n        schema = namedSchema;\r\n      }\r\n    } else if (defs.defaultSchema) {\r\n      schema = defs.defaultSchema;\r\n    }\r\n  }\r\n\r\n  // Handle Collection\r\n  if (value instanceof Collection) {\r\n    return stringifyCollection(value, schema, defs, opts);\r\n  }\r\n\r\n  // Handle InternetObject\r\n  if (value instanceof InternetObject) {\r\n    return stringifyObject(value, schema, defs, opts);\r\n  }\r\n\r\n  // Handle plain values\r\n  return JSON.stringify(value);\r\n}\r\n\r\n/**\r\n * Stringify a value of 'any' type by inferring from its JavaScript type\r\n */\r\nfunction stringifyAnyValue(val: any, defs?: Definitions): string {\r\n  // Handle primitives first\r\n  if (val === null) return IO_MARKERS.NULL;\r\n  if (val === undefined) return IO_MARKERS.NULL;\r\n\r\n  // Handle boolean\r\n  if (typeof val === 'boolean') {\r\n    const boolDef = TypedefRegistry.get('bool');\r\n    if (boolDef && 'stringify' in boolDef && typeof boolDef.stringify === 'function') {\r\n      return boolDef.stringify(val, { type: 'bool', path: '', optional: false, null: false } as any) ?? (val ? IO_MARKERS.TRUE : IO_MARKERS.FALSE);\r\n    }\r\n    return val ? IO_MARKERS.TRUE : IO_MARKERS.FALSE;\r\n  }\r\n\r\n  // Handle number\r\n  if (typeof val === 'number') {\r\n    return String(val);\r\n  }\r\n\r\n  // Handle Decimal\r\n  if (val instanceof Decimal) {\r\n    return val.toString() + 'm';\r\n  }\r\n\r\n  // Handle string - use auto format for smart quoting\r\n  if (typeof val === 'string') {\r\n    const stringDef = TypedefRegistry.get('string');\r\n    if (stringDef && 'stringify' in stringDef && typeof stringDef.stringify === 'function') {\r\n      const memberDef: MemberDef = {\r\n        type: 'string',\r\n        path: '',\r\n        optional: false,\r\n        null: false,\r\n        format: 'auto',  // Use auto format for smart quoting (quotes ambiguous values like numbers, bools)\r\n        escapeLines: false,\r\n        encloser: '\"'\r\n      } as any;\r\n      return stringDef.stringify(val, memberDef) ?? val;\r\n    }\r\n    return val;\r\n  }\r\n\r\n  // Handle Date - check if it's date-only or datetime\r\n  if (val instanceof Date) {\r\n    const dateDef = TypedefRegistry.get('date');\r\n    if (dateDef && 'stringify' in dateDef && typeof dateDef.stringify === 'function') {\r\n      return (dateDef.stringify as any)(val) ?? val.toISOString();\r\n    }\r\n    // Fallback: format as date-only d\"YYYY-MM-DD\"\r\n    const year = val.getFullYear();\r\n    const month = String(val.getMonth() + 1).padStart(2, '0');\r\n    const day = String(val.getDate()).padStart(2, '0');\r\n    return `d\"${year}-${month}-${day}\"`;\r\n  }\r\n\r\n  // Handle array\r\n  if (Array.isArray(val)) {\r\n    const items = val.map(item => stringifyAnyValue(item, defs));\r\n    return `[${items.join(', ')}]`;\r\n  }\r\n\r\n  // Handle object (including InternetObject)\r\n  if (val instanceof InternetObject) {\r\n    const objContent = stringifyObject(val, undefined, defs, {});\r\n    return `{${objContent}}`;  // Wrap in braces\r\n  }\r\n\r\n  // Handle plain object - output values only in order, like {val1, val2, val3}\r\n  if (typeof val === 'object') {\r\n    const items: string[] = [];\r\n    for (const k in val) {\r\n      if (val.hasOwnProperty(k)) {\r\n        items.push(stringifyAnyValue(val[k], defs));\r\n      }\r\n    }\r\n    return `{${items.join(', ')}}`;\r\n  }\r\n\r\n  // Fallback\r\n  return JSON.stringify(val);\r\n}\r\n\r\n/**\r\n * Stringify an InternetObject to IO text format.\r\n * @internal Used by stringifyDocument for section serialization.\r\n */\r\nexport function stringifyObject(\r\n  obj: InternetObject,\r\n  schema?: Schema,\r\n  defs?: Definitions,\r\n  options?: StringifyOptions\r\n): string {\r\n  const indent = options?.indent;\r\n  const includeTypes = options?.includeTypes ?? false;\r\n\r\n  // Use smart formatter for formatted output (when indent is specified)\r\n  // This handles proper line breaks only where needed (expanding arrays/objects)\r\n  if (indent !== undefined && !includeTypes) {\r\n    const indentStr = createIndentString(indent);\r\n    const ctx: FormatContext = {\r\n      indentStr,\r\n      level: 0,\r\n      defs: defs ?? new Definitions(),\r\n      isNested: false\r\n    };\r\n    return formatRecord(obj, schema, ctx);\r\n  }\r\n\r\n  // Fallback to original logic for compact mode or includeTypes\r\n  const parts: string[] = [];\r\n  if (schema) {\r\n    // First output members in schema order regardless of insertion order.\r\n    const handled = new Set<string>();\r\n    for (const name of schema.names) {\r\n      const memberDef: MemberDef | undefined = schema.defs[name];\r\n      const hasValue = obj.has(name);\r\n      if (hasValue) {\r\n        const val = obj.get(name);\r\n        const typeDef = memberDef ? TypedefRegistry.get(memberDef.type) : undefined;\r\n        let strValue: string | undefined;\r\n        if (memberDef && typeDef && 'stringify' in typeDef && typeof typeDef.stringify === 'function') {\r\n          const effectiveMemberDef = { ...memberDef };\r\n          if (memberDef.type === 'string' && !memberDef.format) {\r\n            effectiveMemberDef.format = 'auto';  // Use auto for smart quoting (quotes numbers, bools, etc.)\r\n          }\r\n          strValue = (typeDef.stringify as any)(val, effectiveMemberDef, defs);\r\n        } else if (memberDef && (memberDef.type === 'any' || memberDef.type === 'object')) {\r\n          strValue = stringifyAnyValue(val, defs);\r\n        } else {\r\n          strValue = stringifyAnyValue(val, defs);\r\n        }\r\n        // undefined means \"skip this field\" - use empty placeholder for positional format\r\n        if (includeTypes) {\r\n          if (strValue !== undefined) {\r\n            parts.push(`${name}: ${strValue}`);\r\n          }\r\n        } else {\r\n          parts.push(strValue ?? '');\r\n        }\r\n      } else {\r\n        // Missing optional member with no default: preserve positional placeholder by emitting empty slot when includeTypes is false.\r\n        if (!includeTypes) {\r\n          const md = memberDef as any;\r\n          if (md?.optional && md?.default === undefined) {\r\n            parts.push('');\r\n          }\r\n        }\r\n      }\r\n      handled.add(name);\r\n    }\r\n\r\n    // Trim trailing empty values (missing optional fields at the end)\r\n    while (parts.length > 0 && parts[parts.length - 1] === '') {\r\n      parts.pop();\r\n    }\r\n\r\n    // Append any additional properties (wildcard or open schema extras) in original insertion order after core schema fields.\r\n    for (const [key, val] of obj.entries()) {\r\n      if (!key) continue;\r\n      if (handled.has(key)) continue; // already output\r\n      const memberDef: MemberDef | undefined = schema.defs[key];\r\n      // For extras there is typically no memberDef (unless explicit definition outside names array)\r\n      const typeDef = memberDef ? TypedefRegistry.get(memberDef.type) : undefined;\r\n      let strValue: string | undefined;\r\n      if (memberDef && typeDef && 'stringify' in typeDef && typeof typeDef.stringify === 'function') {\r\n        const effectiveMemberDef = { ...memberDef };\r\n        if (memberDef.type === 'string' && !memberDef.format) {\r\n          effectiveMemberDef.format = 'auto';  // Use auto for smart quoting (quotes numbers, bools, etc.)\r\n        }\r\n        strValue = (typeDef.stringify as any)(val, effectiveMemberDef, defs);\r\n      } else if (typeof val === 'string') {\r\n        // Quote extra string properties using regular string format\r\n        strValue = quoteExtraPropertyString(val);\r\n      } else {\r\n        strValue = stringifyAnyValue(val, defs);\r\n      }\r\n      // Extras should retain key label even when includeTypes is false (desired output for wildcard properties)\r\n      // Skip if undefined (missing optional)\r\n      if (strValue !== undefined) {\r\n        parts.push(`${key}: ${strValue}`);\r\n      }\r\n    }\r\n  } else {\r\n    // No schema: fall back to insertion order\r\n    for (const [key, val] of obj.entries()) {\r\n      // if (!key) continue; // Allow positional arguments\r\n      const strValue = stringifyAnyValue(val, defs);\r\n      if (includeTypes && key) {\r\n        parts.push(`${key}: ${strValue}`);\r\n      } else {\r\n        parts.push(strValue);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Format output\r\n  // Note: IO format doesn't wrap top-level objects in braces like JSON.\r\n  // For formatted output, we use newlines between fields but no outer braces.\r\n  if (typeof indent === 'number' && indent > 0) {\r\n    return parts.join(',\\n');\r\n  } else if (typeof indent === 'string') {\r\n    return parts.join(',\\n');\r\n  } else {\r\n    return parts.join(', ');\r\n  }\r\n}\r\n\r\n/**\r\n * Stringify a Collection to IO text format.\r\n * @internal Used by stringifyDocument for section serialization.\r\n */\r\nexport function stringifyCollection(\r\n  collection: Collection<InternetObject>,\r\n  schema?: Schema,\r\n  defs?: Definitions,\r\n  options?: StringifyOptions\r\n): string {\r\n  const parts: string[] = [];\r\n  const skipErrors = options?.skipErrors ?? false;\r\n\r\n  for (const item of collection) {\r\n    // Skip error objects if requested\r\n    if (skipErrors && item && typeof item === 'object' && (item as any).__error === true) {\r\n      continue;\r\n    }\r\n\r\n    if (item instanceof InternetObject) {\r\n      parts.push(stringifyObject(item, schema, defs, options));\r\n    } else {\r\n      // Handle error objects or other items\r\n      if (item && typeof item === 'object' && (item as any).__error === true) {\r\n        parts.push(`<error: ${(item as any).message}>`);\r\n      } else {\r\n        parts.push(JSON.stringify(item));\r\n      }\r\n    }\r\n  }\r\n\r\n  // Format as collection\r\n  if (options?.indent) {\r\n    return '[\\n  ' + parts.join(',\\n  ') + '\\n]';\r\n  } else {\r\n    return '[' + parts.join(', ') + ']';\r\n  }\r\n}\r\n\r\n// Note: resolveSchema helper is no longer needed - schema resolution is done in the main stringify function\r\n"],"mappings":"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","names":["Definitions","Document","Schema","Collection","InternetObject","TypedefRegistry","Decimal"]}