{"version":3,"sources":["../../src/schema/schema-utils.ts"],"sourcesContent":["import Schema from './schema';\r\nimport MemberDef from './types/memberdef';\r\n\r\nexport class SchemaUtils {\r\n  /**\r\n   * Creates a deep clone of the schema.\r\n   * @deprecated Use immutable Schema class instead\r\n   */\r\n  static cloneSchema(schema: Schema): Schema {\r\n    const builder = Schema.create(schema.name).setOpen(schema.open);\r\n\r\n    for (const name of schema.names) {\r\n      const memberDef = schema.get(name);\r\n      if (memberDef) {\r\n        builder.addMember(name, { ...memberDef });\r\n      }\r\n    }\r\n\r\n    return builder.build();\r\n  }\r\n\r\n  /**\r\n   * Merges two schemas into a new schema.\r\n   * Extension schema members override base schema members with same name.\r\n   */\r\n  static mergeSchemas(base: Schema, extension: Schema): Schema {\r\n    const builder = Schema.create(`${base.name}_${extension.name}`);\r\n\r\n    // Add base members\r\n    for (const name of base.names) {\r\n      const memberDef = base.get(name);\r\n      if (memberDef) {\r\n        builder.addMember(name, memberDef);\r\n      }\r\n    }\r\n\r\n    // Add extension members (override if exists)\r\n    for (const name of extension.names) {\r\n      const memberDef = extension.get(name);\r\n      if (memberDef) {\r\n        // Remove existing if present\r\n        if (base.has(name)) {\r\n          // In builder pattern, we'd need to support member replacement\r\n          // For now, create new builder without conflicting members\r\n        }\r\n        builder.addMember(name, memberDef);\r\n      }\r\n    }\r\n\r\n    // Canonicalize open property: if either is MemberDef, prefer MemberDef, else true/false\r\n    let open: boolean | MemberDef = false;\r\n    if (typeof base.open !== 'boolean') {\r\n      open = base.open;\r\n    } else if (typeof extension.open !== 'boolean') {\r\n      open = extension.open;\r\n    } else {\r\n      open = base.open || extension.open;\r\n    }\r\n    return builder.setOpen(open).build();\r\n  }\r\n\r\n  /**\r\n   * Gets schema metrics for analysis.\r\n   */\r\n  static getSchemaMetrics(schema: Schema): SchemaMetrics {\r\n    return {\r\n      memberCount: schema.memberCount,\r\n      isOpen: schema.open,\r\n      typeDistribution: this.getTypeDistribution(schema)\r\n    };\r\n  }\r\n\r\n  private static getTypeDistribution(schema: Schema): Record<string, number> {\r\n    const distribution: Record<string, number> = {};\r\n\r\n    for (const name of schema.names) {\r\n      const memberDef = schema.get(name);\r\n      if (memberDef) {\r\n        distribution[memberDef.type] = (distribution[memberDef.type] || 0) + 1;\r\n      }\r\n    }\r\n\r\n    return distribution;\r\n  }\r\n}\r\n\r\nexport interface SchemaMetrics {\r\n  memberCount: number;\r\n  isOpen: boolean | MemberDef;\r\n  typeDistribution: Record<string, number>;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AAGZ,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,OAAO,YAAY,QAAwB;AACzC,UAAM,UAAU,cAAAA,QAAO,OAAO,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI;AAE9D,eAAW,QAAQ,OAAO,OAAO;AAC/B,YAAM,YAAY,OAAO,IAAI,IAAI;AACjC,UAAI,WAAW;AACb,gBAAQ,UAAU,MAAM,EAAE,GAAG,UAAU,CAAC;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,aAAa,MAAc,WAA2B;AAC3D,UAAM,UAAU,cAAAA,QAAO,OAAO,GAAG,KAAK,IAAI,IAAI,UAAU,IAAI,EAAE;AAG9D,eAAW,QAAQ,KAAK,OAAO;AAC7B,YAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,UAAI,WAAW;AACb,gBAAQ,UAAU,MAAM,SAAS;AAAA,MACnC;AAAA,IACF;AAGA,eAAW,QAAQ,UAAU,OAAO;AAClC,YAAM,YAAY,UAAU,IAAI,IAAI;AACpC,UAAI,WAAW;AAEb,YAAI,KAAK,IAAI,IAAI,GAAG;AAAA,QAGpB;AACA,gBAAQ,UAAU,MAAM,SAAS;AAAA,MACnC;AAAA,IACF;AAGA,QAAI,OAA4B;AAChC,QAAI,OAAO,KAAK,SAAS,WAAW;AAClC,aAAO,KAAK;AAAA,IACd,WAAW,OAAO,UAAU,SAAS,WAAW;AAC9C,aAAO,UAAU;AAAA,IACnB,OAAO;AACL,aAAO,KAAK,QAAQ,UAAU;AAAA,IAChC;AACA,WAAO,QAAQ,QAAQ,IAAI,EAAE,MAAM;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,QAA+B;AACrD,WAAO;AAAA,MACL,aAAa,OAAO;AAAA,MACpB,QAAQ,OAAO;AAAA,MACf,kBAAkB,KAAK,oBAAoB,MAAM;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,OAAe,oBAAoB,QAAwC;AACzE,UAAM,eAAuC,CAAC;AAE9C,eAAW,QAAQ,OAAO,OAAO;AAC/B,YAAM,YAAY,OAAO,IAAI,IAAI;AACjC,UAAI,WAAW;AACb,qBAAa,UAAU,IAAI,KAAK,aAAa,UAAU,IAAI,KAAK,KAAK;AAAA,MACvE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;","names":["Schema"]}