{"version":3,"sources":["../../../src/parser/nodes/objects.ts"],"sourcesContent":["import Definitions    from '../../core/definitions';\r\nimport InternetObject from '../../core/internet-object';\r\nimport { Position } from '../../core/positions';\r\nimport Token from '../tokenizer/tokens';\r\nimport ContainerNode  from './containers';\r\nimport ErrorNode      from './error';\r\nimport MemberNode     from './members';\r\n\r\nclass ObjectNode extends ContainerNode {\r\n  openBracket?: Token;\r\n  closeBracket?: Token;\r\n\r\n  constructor(children: Array<MemberNode | undefined> = [], openBracket?: Token, closeBracket?: Token) {\r\n    super('object', children);\r\n\r\n    if (openBracket) {\r\n      this.openBracket = openBracket;\r\n    }\r\n\r\n    if (closeBracket) {\r\n      this.closeBracket = closeBracket;\r\n    }\r\n  }\r\n\r\n  toObject(defs?: Definitions): any {\r\n    const value: any = {};\r\n    let index = 0;\r\n    for (const child of this.children as Array<MemberNode>) {\r\n      if (child && child.value) {\r\n        if (child.key) {\r\n          value[child.key.value as string] = child.value.toValue(defs);\r\n        } else {\r\n          value[index] = child.value.toValue(defs);\r\n        }\r\n      } else {\r\n        value[index] = undefined;\r\n      }\r\n\r\n      index++;\r\n    }\r\n    return value;\r\n  }\r\n\r\n  getStartPos(): Position {\r\n    if (this.openBracket) {\r\n      return this.openBracket.getStartPos();\r\n    }\r\n\r\n    return this.children[0]?.getStartPos() ?? Position.unknown;\r\n  }\r\n\r\n  getEndPos(): Position {\r\n    if (this.closeBracket) {\r\n      return this.closeBracket.getEndPos();\r\n    }\r\n\r\n    return this.children[this.children.length - 1]?.getEndPos() ?? Position.unknown;\r\n  }\r\n\r\n  toValue (defs?: Definitions): InternetObject {\r\n    const o = new InternetObject();\r\n    for (let i=0; i<this.children.length; i++) {\r\n      const member = this.children[i] as MemberNode;\r\n      if (member && member.value) {\r\n        if (member.key) {\r\n          // o[member.key.value] = member.value.toValue(defs);\r\n          o.set(member.key.value as string, member.value.toValue(defs));\r\n        } else {\r\n          o.set(i.toString(), member.value.toValue(defs))\r\n        }\r\n      }\r\n    }\r\n\r\n    return o;\r\n  }\r\n\r\n  // Utility Methods\r\n  isEmpty(): boolean {\r\n    return this.children.length === 0 || this.children.every(child => child === undefined);\r\n  }\r\n\r\n  toDebugString(): string {\r\n    const memberStrings = this.children.map((child, index) => {\r\n      if (!child) return `[${index}]: undefined`;\r\n\r\n      const member = child as MemberNode;\r\n      const keyStr = member.key ? member.key.value : `[${index}]`;\r\n      const valueStr = member.value ?\r\n        (typeof member.value.toValue === 'function' ?\r\n          JSON.stringify(member.value.toValue()) :\r\n          String(member.value)) :\r\n        'undefined';\r\n\r\n      return `${keyStr}: ${valueStr}`;\r\n    });\r\n\r\n    return `ObjectNode { ${memberStrings.join(', ')} }`;\r\n  }\r\n\r\n  hasKey(key: string): boolean {\r\n    return this.children.some(child => {\r\n      if (!child) return false;\r\n      const member = child as MemberNode;\r\n      return member.key && member.key.value === key;\r\n    });\r\n  }\r\n\r\n  getKeys(): string[] {\r\n    const keys: string[] = [];\r\n    this.children.forEach((child, index) => {\r\n      if (child) {\r\n        const member = child as MemberNode;\r\n        if (member.key) {\r\n          keys.push(member.key.value as string);\r\n        } else {\r\n          keys.push(index.toString());\r\n        }\r\n      }\r\n    });\r\n    return keys;\r\n  }\r\n\r\n  isValid(): boolean {\r\n    // An object is valid if none of its members contain ErrorNodes\r\n    return this.children.every(child => {\r\n      if (!child) return true; // undefined members are considered valid\r\n\r\n      const member = child as MemberNode;\r\n\r\n      // Check if the member value is an ErrorNode\r\n      if (member.value instanceof ErrorNode) {\r\n        return false;\r\n      }\r\n\r\n      // Check if the member key is an ErrorNode (though this is less common)\r\n      if (member.key instanceof ErrorNode) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n  }\r\n}\r\n\r\nexport default ObjectNode;"],"mappings":"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","names":["ContainerNode","InternetObject","ErrorNode"]}