{"version":3,"sources":["../../../src/schema/types/object.ts"],"sourcesContent":["import Definitions          from '../../core/definitions';\r\nimport InternetObject       from '../../core/internet-object';\r\nimport ValidationError      from '../../errors/io-validation-error';\r\nimport IOError              from '../../errors/io-error';\r\nimport ErrorCodes           from '../../errors/io-error-codes';\r\nimport ObjectNode           from '../../parser/nodes/objects'\r\nimport Node                 from '../../parser/nodes/nodes';\r\nimport TokenNode            from '../../parser/nodes/tokens';\r\nimport compileObject        from '../../schema/compile-object';\r\nimport processObject        from '../../schema/object-processor';\r\nimport Schema               from '../../schema/schema';\r\nimport TypeDef              from '../../schema/typedef';\r\nimport TypedefRegistry      from '../../schema/typedef-registry';\r\nimport doCommonTypeCheck    from './common-type';\r\nimport MemberDef            from './memberdef';\r\n\r\nconst schema = new Schema(\r\n  \"object\",\r\n  { type:     { type: \"string\", optional: false, null: false, choices: [\"object\"] } },\r\n  { default:  { type: \"object\", optional: true,  null: false } },\r\n  { schema:   { type: \"object\", optional: true,  null: false, __schema: true } },\r\n  { optional: { type: \"bool\",   optional: true } },\r\n  { null:     { type: \"bool\",   optional: true } },\r\n)\r\n\r\n/**\r\n * Represents the ObjectTypeDef which is reponsible for parsing,\r\n * validating, loading and serializing Objects.\r\n */\r\nclass ObjectDef implements TypeDef {\r\n  private _names: any = null\r\n\r\n  /**\r\n   * Returns the type this instance is going to handle.\r\n   * Always returns object\r\n   */\r\n  get type() { return 'object' }\r\n\r\n  static get types() { return ['object'] }\r\n\r\n  get schema() { return schema }\r\n\r\n  /**\r\n   * Parses the object in IO format into JavaScript object.\r\n   */\r\n  parse = (node: Node, memberDef: MemberDef, defs?: Definitions): any => {\r\n    return this._process(node, memberDef, defs)\r\n  }\r\n\r\n  /**\r\n   * Load: Validates a JavaScript object against the schema\r\n   */\r\n  load = (value: any, memberDef: MemberDef, defs?: Definitions): any => {\r\n    const { value: checkedValue, changed } = doCommonTypeCheck(memberDef, value, undefined, defs)\r\n    if (changed) return checkedValue\r\n\r\n    // Type check\r\n    if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n      throw new ValidationError(\r\n        ErrorCodes.invalidObject,\r\n        `Expecting an object value for '${memberDef.path}' but found ${Array.isArray(value) ? 'array' : typeof value}`\r\n      )\r\n    }\r\n\r\n    const schema = memberDef.schema\r\n    if (!schema) {\r\n      // No schema - return value as-is for open objects\r\n      return value\r\n    }\r\n\r\n    // Process object with schema using internal helper\r\n    return this._loadObject(value, schema, memberDef.path || '', defs)\r\n  }\r\n\r\n  /**\r\n   * Stringify: Converts a JavaScript object to IO text format\r\n   * Returns undefined if value is undefined (signals to skip this field)\r\n   */\r\n  stringify = (value: any, memberDef: MemberDef, defs?: Definitions): string | undefined => {\r\n    const { value: checkedValue, changed } = doCommonTypeCheck(memberDef, value, undefined, defs)\r\n    if (changed) {\r\n      if (checkedValue === null) return 'N'\r\n      if (checkedValue === undefined) return undefined  // Skip this field entirely\r\n      value = checkedValue\r\n    }\r\n\r\n    // Type check\r\n    if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n      throw new ValidationError(\r\n        ErrorCodes.invalidObject,\r\n        `Expecting an object value for '${memberDef.path}' but found ${Array.isArray(value) ? 'array' : typeof value}`\r\n      )\r\n    }\r\n\r\n    // Resolve schema - it might be a Schema instance, a variable reference (TokenNode), or schemaRef string\r\n    let schema = this._resolveSchema(memberDef.schema, defs)\r\n\r\n    // If no schema from memberDef.schema, check schemaRef\r\n    if (!schema && memberDef.schemaRef && defs) {\r\n      schema = this._resolveSchema(memberDef.schemaRef, defs)\r\n    }\r\n\r\n    return this._stringifyObject(value, schema, memberDef.path || '', defs)\r\n  }\r\n\r\n  /**\r\n   * Internal helper to load and validate a plain JS object according to schema\r\n   */\r\n  private _loadObject(data: any, schema: Schema, basePath: string, defs?: Definitions): any {\r\n    const result: any = {}\r\n    const processedNames = new Set<string>()\r\n\r\n    // Process schema-defined members\r\n    for (const name of schema.names) {\r\n      const memberDef = this._resolveMemberDefVariables(schema.defs[name], defs)\r\n      memberDef.path = basePath ? `${basePath}.${name}` : name\r\n      const value = data[name]\r\n\r\n      const typeDef = TypedefRegistry.get(memberDef.type)\r\n      if (!typeDef) {\r\n        throw new IOError(ErrorCodes.invalidType, `Type '${memberDef.type}' is not registered.`)\r\n      }\r\n\r\n      // Use load() method if available\r\n      if ('load' in typeDef && typeof typeDef.load === 'function') {\r\n        const loadedValue = typeDef.load(value, memberDef, defs)\r\n        if (loadedValue !== undefined) {\r\n          result[name] = loadedValue\r\n        }\r\n      } else {\r\n        // Fallback for types without load()\r\n        if (value !== undefined) {\r\n          result[name] = value\r\n        } else if (memberDef.default !== undefined) {\r\n          result[name] = memberDef.default\r\n        } else if (!memberDef.optional) {\r\n          throw new ValidationError(\r\n            ErrorCodes.valueRequired,\r\n            `Value required for field '${memberDef.path}'`\r\n          )\r\n        }\r\n      }\r\n\r\n      processedNames.add(name)\r\n    }\r\n\r\n    // Handle additional properties\r\n    if (schema.open) {\r\n      for (const key in data) {\r\n        if (!processedNames.has(key)) {\r\n          let extraMemberDef: MemberDef\r\n          if (typeof schema.open === 'object' && schema.open.type) {\r\n            extraMemberDef = { ...schema.open, path: basePath ? `${basePath}.${key}` : key }\r\n          } else {\r\n            extraMemberDef = { type: 'any', path: basePath ? `${basePath}.${key}` : key }\r\n          }\r\n\r\n          const typeDef = TypedefRegistry.get(extraMemberDef.type)\r\n          if (typeDef && 'load' in typeDef && typeof typeDef.load === 'function') {\r\n            const loadedValue = typeDef.load(data[key], extraMemberDef, defs)\r\n            if (loadedValue !== undefined) {\r\n              result[key] = loadedValue\r\n            }\r\n          } else {\r\n            result[key] = data[key]\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Check for unexpected properties in closed schemas\r\n      for (const key in data) {\r\n        if (!processedNames.has(key)) {\r\n          throw new ValidationError(\r\n            ErrorCodes.unknownMember,\r\n            `The ${schema.name ? `${schema.name} ` : ''}schema does not define a member named '${key}'.`\r\n          )\r\n        }\r\n      }\r\n    }\r\n\r\n    return result\r\n  }\r\n\r\n  /**\r\n   * Internal helper to stringify an object according to schema\r\n   */\r\n  private _stringifyObject(data: any, schema: Schema | undefined, basePath: string, defs?: Definitions): string {\r\n    const parts: string[] = []\r\n\r\n    if (schema) {\r\n      // Stringify in schema order\r\n      for (const name of schema.names) {\r\n        const memberDef = this._resolveMemberDefVariables(schema.defs[name], defs)\r\n        memberDef.path = basePath ? `${basePath}.${name}` : name\r\n        const value = data[name]\r\n\r\n        const typeDef = TypedefRegistry.get(memberDef.type)\r\n        if (typeDef && 'stringify' in typeDef && typeof typeDef.stringify === 'function') {\r\n          // Use auto format (default) - it safely handles all cases\r\n          // stringify returns undefined to signal \"skip this field\" (missing optional)\r\n          const strValue = typeDef.stringify(value, memberDef, defs)\r\n          parts.push(strValue ?? '')  // Empty placeholder for positional format\r\n        } else {\r\n          // Fallback\r\n          if (value === null) {\r\n            parts.push('N')\r\n          } else if (value === undefined) {\r\n            parts.push('')  // Empty placeholder for positional format\r\n          } else {\r\n            parts.push(JSON.stringify(value))\r\n          }\r\n        }\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      // Handle additional properties for open schemas\r\n      if (schema.open) {\r\n        const schemaNames = new Set(schema.names)\r\n        for (const key in data) {\r\n          if (!schemaNames.has(key)) {\r\n            const value = data[key]\r\n            const extraPath = basePath ? `${basePath}.${key}` : key\r\n\r\n            // Skip undefined values for extra properties\r\n            if (value === undefined) continue\r\n\r\n            let strValue: string\r\n            if (value === null) {\r\n              strValue = 'N'\r\n            } else if (typeof value === 'string') {\r\n              const stringDef = TypedefRegistry.get('string')\r\n              if (stringDef && 'stringify' in stringDef && typeof stringDef.stringify === 'function') {\r\n                strValue = stringDef.stringify(value, { type: 'string', path: extraPath, format: 'auto' } as MemberDef, defs) ?? value\r\n              } else {\r\n                strValue = JSON.stringify(value)\r\n              }\r\n            } else {\r\n              strValue = JSON.stringify(value)\r\n            }\r\n            parts.push(`${key}: ${strValue}`)\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // No schema - output all properties\r\n      for (const key in data) {\r\n        const value = data[key]\r\n\r\n        // Skip undefined values\r\n        if (value === undefined) continue\r\n\r\n        let strValue: string\r\n        if (value === null) {\r\n          strValue = 'N'\r\n        } else if (typeof value === 'string') {\r\n          strValue = value\r\n        } else if (typeof value === 'boolean') {\r\n          strValue = value ? 'T' : 'F'\r\n        } else {\r\n          strValue = JSON.stringify(value)\r\n        }\r\n        parts.push(`${key}: ${strValue}`)\r\n      }\r\n    }\r\n\r\n    return `{${parts.join(', ')}}`\r\n  }\r\n\r\n  /**\r\n   * Resolves a schema reference - handles both Schema instances and variable references\r\n   */\r\n  private _resolveSchema(schema: Schema | TokenNode | string | undefined, defs?: Definitions): Schema | undefined {\r\n    if (!schema) return undefined\r\n\r\n    // Already a Schema instance\r\n    if (schema instanceof Schema) return schema\r\n\r\n    // TokenNode with variable reference (e.g., $employee)\r\n    if (schema instanceof TokenNode) {\r\n      if (typeof schema.value === 'string' && schema.value.startsWith('$') && defs) {\r\n        const resolved = defs.getV(schema.value)\r\n        if (resolved instanceof Schema) return resolved\r\n        // Recursively resolve if it's another reference\r\n        return this._resolveSchema(resolved, defs)\r\n      }\r\n      return undefined\r\n    }\r\n\r\n    // String variable reference\r\n    if (typeof schema === 'string' && schema.startsWith('$') && defs) {\r\n      const resolved = defs.getV(schema)\r\n      if (resolved instanceof Schema) return resolved\r\n      return this._resolveSchema(resolved, defs)\r\n    }\r\n\r\n    return undefined\r\n  }\r\n\r\n  /**\r\n   * Resolves variable references in memberDef fields\r\n   */\r\n  private _resolveMemberDefVariables(memberDef: MemberDef, defs?: Definitions): MemberDef {\r\n    if (!memberDef || !defs) return { ...memberDef }\r\n\r\n    const resolved = { ...memberDef }\r\n\r\n    // Resolve default value if it's a variable reference\r\n    if (typeof resolved.default === 'string' && resolved.default.startsWith('@')) {\r\n      resolved.default = defs.getV(resolved.default)\r\n      if (resolved.default instanceof TokenNode) {\r\n        resolved.default = resolved.default.value\r\n      }\r\n    }\r\n\r\n    // Resolve choices if they contain variable references\r\n    if (Array.isArray(resolved.choices)) {\r\n      resolved.choices = resolved.choices.map(choice => {\r\n        if (typeof choice === 'string' && choice.startsWith('@')) {\r\n          let resolved = defs.getV(choice)\r\n          return resolved instanceof TokenNode ? resolved.value : resolved\r\n        }\r\n        return choice\r\n      })\r\n    }\r\n\r\n    // Resolve min/max if they're variable references\r\n    if (typeof resolved.min === 'string' && resolved.min.startsWith('@')) {\r\n      resolved.min = defs.getV(resolved.min)\r\n      if (resolved.min instanceof TokenNode) {\r\n        resolved.min = resolved.min.value\r\n      }\r\n    }\r\n    if (typeof resolved.max === 'string' && resolved.max.startsWith('@')) {\r\n      resolved.max = defs.getV(resolved.max)\r\n      if (resolved.max instanceof TokenNode) {\r\n        resolved.max = resolved.max.value\r\n      }\r\n    }\r\n\r\n    return resolved\r\n  }\r\n\r\n  // Process the parse and load requests\r\n  private _process = (\r\n    node: Node, memberDef: MemberDef, defs?: Definitions\r\n  ) => {\r\n    const valueNode = defs?.getV(node) || node\r\n    const { value, changed } = doCommonTypeCheck(memberDef, valueNode, node, defs)\r\n\r\n    if (changed) {\r\n      return value\r\n    }\r\n\r\n    // Resolve schema - it might be a TokenNode reference (e.g., $schemaName)\r\n    let schema = this._resolveSchema(memberDef.schema, defs)\r\n\r\n    if (valueNode instanceof ObjectNode === false) {\r\n      throw new ValidationError(ErrorCodes.invalidObject, `Expecting an object value for '${memberDef.path}'`, node)\r\n    }\r\n\r\n    if (valueNode === node) {\r\n      if (memberDef.__schema) {\r\n        return compileObject(memberDef.path || \"\", valueNode as ObjectNode, defs)\r\n      }\r\n\r\n      if (!schema) {\r\n        schema = new Schema(memberDef.path || \"\")\r\n        schema.open = true\r\n      }\r\n      return processObject(valueNode as ObjectNode, schema, defs)\r\n    }\r\n\r\n    // valueNode fetched from defs. Hence, in case of an error, replace the\r\n    // error position with the original node.\r\n    if (!schema) {\r\n      schema = new Schema(memberDef.path || \"\")\r\n      schema.open = true\r\n    }\r\n\r\n    try {\r\n      return processObject(valueNode as ObjectNode, schema, defs)\r\n    } catch (err) {\r\n      if (err instanceof ValidationError) {\r\n        err.positionRange = node\r\n      }\r\n      throw err\r\n    }\r\n  }\r\n}\r\n\r\nexport default ObjectDef\r\n"],"mappings":"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","names":["Schema","doCommonTypeCheck","ValidationError","ErrorCodes","schema","TypedefRegistry","IOError","TokenNode","resolved","ObjectNode","compileObject","processObject"]}