{"version":3,"sources":["../../../src/schema/utils/additional-props-canonicalizer.ts"],"sourcesContent":["import MemberDef from '../types/memberdef';\r\nimport TokenNode from '../../parser/nodes/tokens';\r\nimport ObjectNode from '../../parser/nodes/objects';\r\nimport ArrayNode from '../../parser/nodes/array';\r\nimport TypedefRegistry from '../typedef-registry';\r\n\r\n/**\r\n * Converts additional property schema node to canonical MemberDef.\r\n * Supports: string, object, array, MemberDef with constraints, open forms,\r\n * and schema variable references ($schemaName).\r\n */\r\nexport function canonicalizeAdditionalProps(node: any, path: string = '*'): MemberDef {\r\n  // Switch on node type\r\n  if (node instanceof TokenNode) {\r\n    if (typeof node.value === 'string') {\r\n      // Built-in types (string, int, bool, etc.)\r\n      if (TypedefRegistry.isRegisteredType(node.value)) {\r\n        return { type: node.value, path };\r\n      }\r\n      // Open form: *\r\n      if (node.value === '*') {\r\n        return { type: 'any', path };\r\n      }\r\n      // Schema variable reference: $schemaName\r\n      // Store the TokenNode as schema for later resolution during processing\r\n      if (node.value.startsWith('$')) {\r\n        return { type: 'object', schema: node, path };\r\n      }\r\n    }\r\n    return { type: 'any', path };\r\n  }\r\n  if (node instanceof ObjectNode) {\r\n    // Open object form: {}\r\n    if (node.children.length === 0) {\r\n      return { type: 'object', path, open: true };\r\n    }\r\n    // Check if first child is a MemberNode with no key and value is TokenNode (type)\r\n    const firstChild = node.children[0] as import('../../parser/nodes/members').default;\r\n    if (firstChild && !firstChild.key && firstChild.value instanceof TokenNode) {\r\n      const typeToken = firstChild.value as TokenNode;\r\n      if (typeof typeToken.value === 'string') {\r\n        // Schema variable reference in object form: { $schemaName, ... }\r\n        if (typeToken.value.startsWith('$')) {\r\n          return { type: 'object', schema: typeToken, path };\r\n        }\r\n        if (TypedefRegistry.isRegisteredType(typeToken.value)) {\r\n          // Collect constraints from other children (MemberNode with key)\r\n          const memberDef: MemberDef = { type: typeToken.value, path };\r\n          for (let i = 1; i < node.children.length; i++) {\r\n            const child = node.children[i] as import('../../parser/nodes/members').default;\r\n            if (child && child.key && child.value instanceof TokenNode) {\r\n              (memberDef as any)[child.key.value as string] = (child.value as any).value;\r\n            }\r\n          }\r\n          return memberDef;\r\n        }\r\n      }\r\n    }\r\n    // MemberDef with constraints (fallback)\r\n    return { type: 'object', path };\r\n  }\r\n  if (node instanceof ArrayNode) {\r\n    // Open array form: []\r\n    if (node.children.length === 0) {\r\n      return { type: 'array', path, of: { type: 'any' } };\r\n    }\r\n    // Array of type: [string]\r\n    const child = node.children[0];\r\n    if (child instanceof TokenNode && typeof child.value === 'string') {\r\n      return { type: 'array', path, of: { type: child.value } };\r\n    }\r\n    return { type: 'array', path };\r\n  }\r\n  // Already a MemberDef or unknown node\r\n  if (typeof node === 'object' && (node as any).type) {\r\n    return { ...(node as any), path };\r\n  }\r\n  return { type: 'any', path };\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAsB;AACtB,qBAAuB;AACvB,mBAAsB;AACtB,8BAA4B;AAOrB,SAAS,4BAA4B,MAAW,OAAe,KAAgB;AAEpF,MAAI,gBAAgB,cAAAA,SAAW;AAC7B,QAAI,OAAO,KAAK,UAAU,UAAU;AAElC,UAAI,wBAAAC,QAAgB,iBAAiB,KAAK,KAAK,GAAG;AAChD,eAAO,EAAE,MAAM,KAAK,OAAO,KAAK;AAAA,MAClC;AAEA,UAAI,KAAK,UAAU,KAAK;AACtB,eAAO,EAAE,MAAM,OAAO,KAAK;AAAA,MAC7B;AAGA,UAAI,KAAK,MAAM,WAAW,GAAG,GAAG;AAC9B,eAAO,EAAE,MAAM,UAAU,QAAQ,MAAM,KAAK;AAAA,MAC9C;AAAA,IACF;AACA,WAAO,EAAE,MAAM,OAAO,KAAK;AAAA,EAC7B;AACA,MAAI,gBAAgB,eAAAC,SAAY;AAE9B,QAAI,KAAK,SAAS,WAAW,GAAG;AAC9B,aAAO,EAAE,MAAM,UAAU,MAAM,MAAM,KAAK;AAAA,IAC5C;AAEA,UAAM,aAAa,KAAK,SAAS,CAAC;AAClC,QAAI,cAAc,CAAC,WAAW,OAAO,WAAW,iBAAiB,cAAAF,SAAW;AAC1E,YAAM,YAAY,WAAW;AAC7B,UAAI,OAAO,UAAU,UAAU,UAAU;AAEvC,YAAI,UAAU,MAAM,WAAW,GAAG,GAAG;AACnC,iBAAO,EAAE,MAAM,UAAU,QAAQ,WAAW,KAAK;AAAA,QACnD;AACA,YAAI,wBAAAC,QAAgB,iBAAiB,UAAU,KAAK,GAAG;AAErD,gBAAM,YAAuB,EAAE,MAAM,UAAU,OAAO,KAAK;AAC3D,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,kBAAM,QAAQ,KAAK,SAAS,CAAC;AAC7B,gBAAI,SAAS,MAAM,OAAO,MAAM,iBAAiB,cAAAD,SAAW;AAC1D,cAAC,UAAkB,MAAM,IAAI,KAAe,IAAK,MAAM,MAAc;AAAA,YACvE;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,MAAM,UAAU,KAAK;AAAA,EAChC;AACA,MAAI,gBAAgB,aAAAG,SAAW;AAE7B,QAAI,KAAK,SAAS,WAAW,GAAG;AAC9B,aAAO,EAAE,MAAM,SAAS,MAAM,IAAI,EAAE,MAAM,MAAM,EAAE;AAAA,IACpD;AAEA,UAAM,QAAQ,KAAK,SAAS,CAAC;AAC7B,QAAI,iBAAiB,cAAAH,WAAa,OAAO,MAAM,UAAU,UAAU;AACjE,aAAO,EAAE,MAAM,SAAS,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM,EAAE;AAAA,IAC1D;AACA,WAAO,EAAE,MAAM,SAAS,KAAK;AAAA,EAC/B;AAEA,MAAI,OAAO,SAAS,YAAa,KAAa,MAAM;AAClD,WAAO,EAAE,GAAI,MAAc,KAAK;AAAA,EAClC;AACA,SAAO,EAAE,MAAM,OAAO,KAAK;AAC7B;","names":["TokenNode","TypedefRegistry","ObjectNode","ArrayNode"]}