@holoscript/core 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/chunk-2XXE34KS.js +344 -0
  2. package/dist/chunk-2XXE34KS.js.map +1 -0
  3. package/dist/chunk-3X2EGU7Z.cjs +52 -0
  4. package/dist/chunk-3X2EGU7Z.cjs.map +1 -0
  5. package/dist/chunk-AFFVFO4D.js +1689 -0
  6. package/dist/chunk-AFFVFO4D.js.map +1 -0
  7. package/dist/chunk-DGUM43GV.js +10 -0
  8. package/dist/chunk-DGUM43GV.js.map +1 -0
  9. package/{src/HoloScriptDebugger.ts → dist/chunk-DOY73HDH.js} +118 -257
  10. package/dist/chunk-DOY73HDH.js.map +1 -0
  11. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  12. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  13. package/dist/chunk-L6VLNVKP.cjs +1691 -0
  14. package/dist/chunk-L6VLNVKP.cjs.map +1 -0
  15. package/dist/chunk-MFNO57XL.cjs +347 -0
  16. package/dist/chunk-MFNO57XL.cjs.map +1 -0
  17. package/dist/chunk-R75MREOS.cjs +424 -0
  18. package/dist/chunk-R75MREOS.cjs.map +1 -0
  19. package/dist/chunk-SATNCODL.js +45 -0
  20. package/dist/chunk-SATNCODL.js.map +1 -0
  21. package/dist/chunk-T57ZL7KR.cjs +1281 -0
  22. package/dist/chunk-T57ZL7KR.cjs.map +1 -0
  23. package/dist/chunk-U72GEJZT.js +1279 -0
  24. package/dist/chunk-U72GEJZT.js.map +1 -0
  25. package/dist/debugger.cjs +20 -0
  26. package/dist/debugger.cjs.map +1 -0
  27. package/dist/debugger.d.cts +171 -0
  28. package/dist/debugger.d.ts +171 -0
  29. package/dist/debugger.js +7 -0
  30. package/dist/debugger.js.map +1 -0
  31. package/dist/index.cjs +6803 -0
  32. package/dist/index.cjs.map +1 -0
  33. package/dist/index.d.cts +4093 -0
  34. package/dist/index.d.ts +4093 -0
  35. package/dist/index.js +6715 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/parser.cjs +14 -0
  38. package/dist/parser.cjs.map +1 -0
  39. package/dist/parser.d.cts +172 -0
  40. package/dist/parser.d.ts +172 -0
  41. package/dist/parser.js +5 -0
  42. package/dist/parser.js.map +1 -0
  43. package/dist/runtime.cjs +14 -0
  44. package/dist/runtime.cjs.map +1 -0
  45. package/dist/runtime.d.cts +200 -0
  46. package/dist/runtime.d.ts +200 -0
  47. package/dist/runtime.js +5 -0
  48. package/dist/runtime.js.map +1 -0
  49. package/dist/type-checker.cjs +17 -0
  50. package/dist/type-checker.cjs.map +1 -0
  51. package/dist/type-checker.d.cts +105 -0
  52. package/dist/type-checker.d.ts +105 -0
  53. package/dist/type-checker.js +4 -0
  54. package/dist/type-checker.js.map +1 -0
  55. package/dist/types-4h8cbtF_.d.cts +329 -0
  56. package/dist/types-4h8cbtF_.d.ts +329 -0
  57. package/package.json +17 -13
  58. package/src/HoloScript2DParser.js +0 -227
  59. package/src/HoloScript2DParser.ts +0 -261
  60. package/src/HoloScriptCodeParser.js +0 -1102
  61. package/src/HoloScriptCodeParser.ts +0 -1188
  62. package/src/HoloScriptDebugger.js +0 -458
  63. package/src/HoloScriptParser.js +0 -338
  64. package/src/HoloScriptParser.ts +0 -397
  65. package/src/HoloScriptPlusParser.js +0 -371
  66. package/src/HoloScriptPlusParser.ts +0 -543
  67. package/src/HoloScriptRuntime.js +0 -1399
  68. package/src/HoloScriptRuntime.test.js +0 -351
  69. package/src/HoloScriptRuntime.test.ts +0 -436
  70. package/src/HoloScriptRuntime.ts +0 -1653
  71. package/src/HoloScriptTypeChecker.js +0 -356
  72. package/src/HoloScriptTypeChecker.ts +0 -475
  73. package/src/__tests__/GraphicsServices.test.js +0 -357
  74. package/src/__tests__/GraphicsServices.test.ts +0 -427
  75. package/src/__tests__/HoloScriptPlusParser.test.js +0 -317
  76. package/src/__tests__/HoloScriptPlusParser.test.ts +0 -392
  77. package/src/__tests__/integration.test.js +0 -336
  78. package/src/__tests__/integration.test.ts +0 -416
  79. package/src/__tests__/performance.bench.js +0 -218
  80. package/src/__tests__/performance.bench.ts +0 -262
  81. package/src/__tests__/type-checker.test.js +0 -60
  82. package/src/__tests__/type-checker.test.ts +0 -73
  83. package/src/index.js +0 -217
  84. package/src/index.ts +0 -426
  85. package/src/interop/Interoperability.js +0 -413
  86. package/src/interop/Interoperability.ts +0 -494
  87. package/src/logger.js +0 -42
  88. package/src/logger.ts +0 -57
  89. package/src/parser/EnhancedParser.js +0 -205
  90. package/src/parser/EnhancedParser.ts +0 -251
  91. package/src/parser/HoloScriptPlusParser.js +0 -928
  92. package/src/parser/HoloScriptPlusParser.ts +0 -1089
  93. package/src/runtime/HoloScriptPlusRuntime.js +0 -674
  94. package/src/runtime/HoloScriptPlusRuntime.ts +0 -861
  95. package/src/runtime/PerformanceTelemetry.js +0 -323
  96. package/src/runtime/PerformanceTelemetry.ts +0 -467
  97. package/src/runtime/RuntimeOptimization.js +0 -361
  98. package/src/runtime/RuntimeOptimization.ts +0 -416
  99. package/src/services/HololandGraphicsPipelineService.js +0 -506
  100. package/src/services/HololandGraphicsPipelineService.ts +0 -662
  101. package/src/services/PlatformPerformanceOptimizer.js +0 -356
  102. package/src/services/PlatformPerformanceOptimizer.ts +0 -503
  103. package/src/state/ReactiveState.js +0 -427
  104. package/src/state/ReactiveState.ts +0 -572
  105. package/src/tools/DeveloperExperience.js +0 -376
  106. package/src/tools/DeveloperExperience.ts +0 -438
  107. package/src/traits/AIDriverTrait.js +0 -322
  108. package/src/traits/AIDriverTrait.test.js +0 -329
  109. package/src/traits/AIDriverTrait.test.ts +0 -357
  110. package/src/traits/AIDriverTrait.ts +0 -474
  111. package/src/traits/LightingTrait.js +0 -313
  112. package/src/traits/LightingTrait.test.js +0 -410
  113. package/src/traits/LightingTrait.test.ts +0 -462
  114. package/src/traits/LightingTrait.ts +0 -505
  115. package/src/traits/MaterialTrait.js +0 -194
  116. package/src/traits/MaterialTrait.test.js +0 -286
  117. package/src/traits/MaterialTrait.test.ts +0 -329
  118. package/src/traits/MaterialTrait.ts +0 -324
  119. package/src/traits/RenderingTrait.js +0 -356
  120. package/src/traits/RenderingTrait.test.js +0 -363
  121. package/src/traits/RenderingTrait.test.ts +0 -427
  122. package/src/traits/RenderingTrait.ts +0 -555
  123. package/src/traits/VRTraitSystem.js +0 -740
  124. package/src/traits/VRTraitSystem.ts +0 -1040
  125. package/src/traits/VoiceInputTrait.js +0 -284
  126. package/src/traits/VoiceInputTrait.test.js +0 -226
  127. package/src/traits/VoiceInputTrait.test.ts +0 -252
  128. package/src/traits/VoiceInputTrait.ts +0 -401
  129. package/src/types/AdvancedTypeSystem.js +0 -226
  130. package/src/types/AdvancedTypeSystem.ts +0 -494
  131. package/src/types/HoloScriptPlus.d.ts +0 -853
  132. package/src/types.js +0 -6
  133. package/src/types.ts +0 -369
  134. package/tsconfig.json +0 -23
  135. package/tsup.config.d.ts +0 -2
  136. package/tsup.config.js +0 -18
  137. package/tsup.config.ts +0 -19
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/HoloScriptCodeParser.ts"],"names":["exports"],"mappings":"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","file":"chunk-U72GEJZT.js","sourcesContent":["/**\r\n * HoloScript Code Parser\r\n *\r\n * Parses HoloScript code strings into AST nodes that can be executed\r\n * by the HoloScriptRuntime.\r\n *\r\n * Syntax Reference:\r\n * - orb <name> { properties }\r\n * - function <name>(<params>): <return> { body }\r\n * - connect <from> to <to> [as <type>]\r\n * - gate <name> { condition, true_path, false_path }\r\n * - stream <name> from <source> { transformations }\r\n */\r\n\r\nimport { logger } from './logger';\r\nimport type {\r\n ASTNode,\r\n OrbNode,\r\n MethodNode,\r\n ParameterNode,\r\n ConnectionNode,\r\n GateNode,\r\n StreamNode,\r\n SpatialPosition,\r\n HologramProperties,\r\n ForLoopNode,\r\n WhileLoopNode,\r\n ForEachLoopNode,\r\n ImportNode,\r\n ExportNode,\r\n VariableDeclarationNode,\r\n ScaleNode,\r\n FocusNode,\r\n EnvironmentNode,\r\n TemplateNode,\r\n HoloScriptValue,\r\n HSPlusDirective,\r\n} from './types';\r\ntype CompositionNode = any;\r\ntype TransformationNode = any;\r\n// @ts-ignore\r\nconst _c: CompositionNode = {} as any;\r\n// @ts-ignore\r\nconst _t: TransformationNode = {} as any;\r\n\r\n// Security configuration\r\nconst CODE_SECURITY_CONFIG = {\r\n maxCodeLength: 50000,\r\n maxBlocks: 100,\r\n maxNestingDepth: 10,\r\n suspiciousKeywords: [\r\n 'process', 'require', 'eval', 'import', 'constructor',\r\n 'prototype', '__proto__', 'fs', 'child_process', 'exec', 'spawn',\r\n ],\r\n};\r\n\r\nexport interface ParseResult {\r\n success: boolean;\r\n ast: ASTNode[];\r\n errors: ParseError[];\r\n warnings: string[];\r\n}\r\n\r\nexport interface ParseError {\r\n line: number;\r\n column: number;\r\n message: string;\r\n}\r\n\r\ninterface Token {\r\n type: 'keyword' | 'identifier' | 'number' | 'string' | 'operator' | 'punctuation' | 'newline';\r\n value: string;\r\n line: number;\r\n column: number;\r\n}\r\n\r\nexport class HoloScriptCodeParser {\r\n private errors: ParseError[] = [];\r\n private warnings: string[] = [];\r\n private tokens: Token[] = [];\r\n private position: number = 0;\r\n private keywordSet: Set<string>;\r\n\r\n constructor() {\r\n // Pre-compute keyword set for O(1) lookup instead of O(n) array search\r\n this.keywordSet = new Set([\r\n 'orb', 'function', 'connect', 'to', 'as', 'gate', 'stream', 'from', 'through', 'return',\r\n 'if', 'else', 'nexus', 'building', 'pillar', 'foundation',\r\n 'for', 'while', 'forEach', 'in', 'of', 'break', 'continue',\r\n 'import', 'export', 'module', 'use',\r\n 'type', 'interface', 'extends', 'implements',\r\n 'async', 'await', 'spawn', 'parallel',\r\n 'class', 'new', 'this', 'super', 'static', 'private', 'public',\r\n 'try', 'catch', 'finally', 'throw',\r\n 'const', 'let', 'var',\r\n 'animate', 'modify', 'pulse', 'move', 'show', 'hide',\r\n 'scale', 'focus', 'environment', 'composition', 'template', 'settings', 'chat'\r\n ]);\r\n }\r\n\r\n /**\r\n * Parse HoloScript code string into AST\r\n */\r\n parse(code: string): ParseResult {\r\n this.errors = [];\r\n this.warnings = [];\r\n this.tokens = [];\r\n this.position = 0;\r\n\r\n // Security: Check code length\r\n if (code.length > CODE_SECURITY_CONFIG.maxCodeLength) {\r\n return {\r\n success: false,\r\n ast: [],\r\n errors: [{ line: 0, column: 0, message: `Code exceeds max length (${CODE_SECURITY_CONFIG.maxCodeLength})` }],\r\n warnings: [],\r\n };\r\n }\r\n\r\n // Security: Check for suspicious keywords\r\n for (const keyword of CODE_SECURITY_CONFIG.suspiciousKeywords) {\r\n if (code.toLowerCase().includes(keyword)) {\r\n logger.warn('Suspicious keyword detected', { keyword });\r\n return {\r\n success: false,\r\n ast: [],\r\n errors: [{ line: 0, column: 0, message: `Suspicious keyword detected: ${keyword}` }],\r\n warnings: [],\r\n };\r\n }\r\n }\r\n\r\n try {\r\n // Tokenize\r\n this.tokens = this.tokenize(code);\r\n\r\n // Parse tokens into AST\r\n const ast = this.parseProgram();\r\n\r\n return {\r\n success: this.errors.length === 0,\r\n ast,\r\n errors: this.errors,\r\n warnings: this.warnings,\r\n };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n ast: [],\r\n errors: [{ line: 0, column: 0, message: String(error) }],\r\n warnings: this.warnings,\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Tokenize code into tokens\r\n */\r\n private tokenize(code: string): Token[] {\r\n const tokens: Token[] = [];\r\n let line = 1;\r\n let column = 1;\r\n let i = 0;\r\n\r\n while (i < code.length) {\r\n const char = code[i];\r\n\r\n // Skip whitespace (except newlines)\r\n if (char === ' ' || char === '\\t' || char === '\\r') {\r\n i++;\r\n column++;\r\n continue;\r\n }\r\n\r\n // Newline\r\n if (char === '\\n') {\r\n tokens.push({ type: 'newline', value: '\\n', line, column });\r\n line++;\r\n column = 1;\r\n i++;\r\n continue;\r\n }\r\n\r\n // Comments (skip)\r\n if (char === '/' && code[i + 1] === '/') {\r\n while (i < code.length && code[i] !== '\\n') {\r\n i++;\r\n }\r\n continue;\r\n }\r\n\r\n // String\r\n if (char === '\"' || char === \"'\") {\r\n const quote = char;\r\n let str = '';\r\n const startCol = column;\r\n i++;\r\n column++;\r\n\r\n while (i < code.length && code[i] !== quote) {\r\n if (code[i] === '\\\\' && i + 1 < code.length) {\r\n str += code[i + 1];\r\n i += 2;\r\n column += 2;\r\n } else {\r\n str += code[i];\r\n i++;\r\n column++;\r\n }\r\n }\r\n\r\n i++; // Skip closing quote\r\n column++;\r\n\r\n tokens.push({ type: 'string', value: str, line, column: startCol });\r\n continue;\r\n }\r\n\r\n // Number\r\n if (/[0-9]/.test(char) || (char === '-' && /[0-9]/.test(code[i + 1]))) {\r\n let num = '';\r\n const startCol = column;\r\n\r\n while (i < code.length && /[0-9.\\-]/.test(code[i])) {\r\n num += code[i];\r\n i++;\r\n column++;\r\n }\r\n\r\n tokens.push({ type: 'number', value: num, line, column: startCol });\r\n continue;\r\n }\r\n\r\n // Identifier or keyword\r\n if (/[a-zA-Z_]/.test(char)) {\r\n let ident = '';\r\n const startCol = column;\r\n\r\n while (i < code.length && /[a-zA-Z0-9_]/.test(code[i])) {\r\n ident += code[i];\r\n i++;\r\n column++;\r\n }\r\n\r\n const isKeyword = this.keywordSet.has(ident.toLowerCase());\r\n tokens.push({\r\n type: isKeyword ? 'keyword' : 'identifier',\r\n value: ident,\r\n line,\r\n column: startCol,\r\n });\r\n continue;\r\n }\r\n\r\n // Multi-character operators (must check before single-char)\r\n const multiCharOps = ['===', '!==', '==', '!=', '>=', '<=', '&&', '||', '++', '--', '+=', '-=', '*=', '/=', '%=', '=>', '->'];\r\n let foundMultiOp = false;\r\n for (const op of multiCharOps) {\r\n if (code.substring(i, i + op.length) === op) {\r\n tokens.push({ type: 'operator', value: op, line, column });\r\n i += op.length;\r\n column += op.length;\r\n foundMultiOp = true;\r\n break;\r\n }\r\n }\r\n if (foundMultiOp) continue;\r\n\r\n // Operators and punctuation\r\n const punctuation = ['{', '}', '(', ')', '[', ']', ':', ',', '.', ';', '=', '<', '>', '+', '-', '*', '/', '%', '!', '&', '|', '?', '#', '@'];\r\n if (punctuation.includes(char)) {\r\n tokens.push({ type: 'punctuation', value: char, line, column });\r\n i++;\r\n column++;\r\n continue;\r\n }\r\n\r\n // Unknown character - skip\r\n i++;\r\n column++;\r\n }\r\n\r\n return tokens;\r\n }\r\n\r\n /**\r\n * Parse program (list of declarations)\r\n */\r\n private parseProgram(): ASTNode[] {\r\n const nodes: ASTNode[] = [];\r\n let blockCount = 0;\r\n\r\n while (this.position < this.tokens.length) {\r\n // Skip newlines\r\n while (this.currentToken()?.type === 'newline') {\r\n this.advance();\r\n }\r\n\r\n if (this.position >= this.tokens.length) break;\r\n\r\n // Security: limit blocks\r\n blockCount++;\r\n if (blockCount > CODE_SECURITY_CONFIG.maxBlocks) {\r\n this.errors.push({ line: 0, column: 0, message: 'Too many blocks in program' });\r\n break;\r\n }\r\n\r\n const node = this.parseDeclaration();\r\n if (node) {\r\n nodes.push(node);\r\n }\r\n }\r\n\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Parse a single declaration\r\n */\r\n private parseDeclaration(): ASTNode | null {\r\n const token = this.currentToken();\r\n if (!token) return null;\r\n\r\n if (token.type === 'keyword') {\r\n switch (token.value.toLowerCase()) {\r\n case 'orb':\r\n case 'object':\r\n return this.parseOrb();\r\n case 'function':\r\n return this.parseFunction();\r\n case 'connect':\r\n return this.parseConnection();\r\n case 'gate':\r\n case 'if':\r\n return this.parseGate();\r\n case 'stream':\r\n return this.parseStream();\r\n case 'nexus':\r\n return this.parseNexus();\r\n case 'building':\r\n case 'class':\r\n return this.parseBuilding();\r\n // Phase 2: Loop constructs\r\n case 'for':\r\n return this.parseForLoop();\r\n case 'while':\r\n return this.parseWhileLoop();\r\n case 'foreach':\r\n return this.parseForEachLoop();\r\n // Phase 2: Module system\r\n case 'import':\r\n return this.parseImport();\r\n case 'export':\r\n return this.parseExport();\r\n // Phase 2: Variable declarations\r\n // UI Extensions\r\n case 'ui2d':\r\n case 'card':\r\n case 'metric':\r\n case 'button':\r\n case 'row':\r\n case 'col':\r\n case 'text':\r\n return this.parseUIElement();\r\n case 'const':\r\n case 'let':\r\n case 'var':\r\n return this.parseVariableDeclaration();\r\n // DSL-first commands (Phase 54)\r\n case 'animate':\r\n return this.parseAnimate();\r\n case 'modify':\r\n return this.parseModify();\r\n case 'scale':\r\n return this.parseScale();\r\n case 'focus':\r\n return this.parseFocus();\r\n case 'environment':\r\n return this.parseEnvironment();\r\n case 'composition':\r\n return this.parseComposition();\r\n case 'template':\r\n return this.parseTemplate();\r\n case 'settings':\r\n return this.parseSettings();\r\n case 'chat':\r\n return this.parseChat();\r\n default:\r\n this.advance();\r\n return null;\r\n }\r\n }\r\n\r\n // Skip unrecognized tokens\r\n this.advance();\r\n return null;\r\n }\r\n\r\n /**\r\n * Parse for loop: for (init; condition; update) { body }\r\n */\r\n private parseForLoop(): ForLoopNode | null {\r\n this.expect('keyword', 'for');\r\n\r\n if (!this.check('punctuation', '(')) {\r\n this.errors.push({ line: 0, column: 0, message: 'Expected ( after for' });\r\n return null;\r\n }\r\n this.advance();\r\n\r\n // Parse init, condition, update (simplified - collect as strings)\r\n let init = '', condition = '', update = '';\r\n let depth = 0;\r\n\r\n // Parse init (until first ;)\r\n while (this.position < this.tokens.length) {\r\n const t = this.currentToken();\r\n if (!t) break;\r\n if (t.value === ';' && depth === 0) { this.advance(); break; }\r\n if (t.value === '(') depth++;\r\n if (t.value === ')') depth--;\r\n init += t.value + ' ';\r\n this.advance();\r\n }\r\n\r\n // Parse condition (until second ;)\r\n depth = 0;\r\n while (this.position < this.tokens.length) {\r\n const t = this.currentToken();\r\n if (!t) break;\r\n if (t.value === ';' && depth === 0) { this.advance(); break; }\r\n if (t.value === '(') depth++;\r\n if (t.value === ')') depth--;\r\n condition += t.value + ' ';\r\n this.advance();\r\n }\r\n\r\n // Parse update (until ))\r\n depth = 0;\r\n while (this.position < this.tokens.length) {\r\n const t = this.currentToken();\r\n if (!t) break;\r\n if (t.value === ')' && depth === 0) { this.advance(); break; }\r\n if (t.value === '(') depth++;\r\n if (t.value === ')') depth--;\r\n update += t.value + ' ';\r\n this.advance();\r\n }\r\n\r\n // Parse body\r\n const body: ASTNode[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let braceDepth = 1;\r\n while (braceDepth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) braceDepth++;\r\n if (this.check('punctuation', '}')) braceDepth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'for-loop',\r\n init: init.trim(),\r\n condition: condition.trim(),\r\n update: update.trim(),\r\n body,\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n /**\r\n * Parse while loop: while (condition) { body }\r\n */\r\n private parseWhileLoop(): WhileLoopNode | null {\r\n this.expect('keyword', 'while');\r\n\r\n let condition = '';\r\n if (this.check('punctuation', '(')) {\r\n this.advance();\r\n let depth = 1;\r\n while (depth > 0 && this.position < this.tokens.length) {\r\n const t = this.currentToken();\r\n if (!t) break;\r\n if (t.value === '(') depth++;\r\n if (t.value === ')') { depth--; if (depth === 0) { this.advance(); break; } }\r\n condition += t.value + ' ';\r\n this.advance();\r\n }\r\n }\r\n\r\n // Parse body\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let braceDepth = 1;\r\n while (braceDepth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) braceDepth++;\r\n if (this.check('punctuation', '}')) braceDepth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'while-loop',\r\n condition: condition.trim(),\r\n body: [],\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n /**\r\n * Parse forEach loop: forEach item in collection { body }\r\n */\r\n private parseForEachLoop(): ForEachLoopNode | null {\r\n this.expect('keyword', 'forEach');\r\n\r\n const variable = this.expectIdentifier();\r\n this.expect('keyword', 'in');\r\n const collection = this.expectIdentifier();\r\n\r\n // Parse body\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let braceDepth = 1;\r\n while (braceDepth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) braceDepth++;\r\n if (this.check('punctuation', '}')) braceDepth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'foreach-loop',\r\n variable: variable || 'item',\r\n collection: collection || 'items',\r\n body: [],\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n /**\r\n * Parse import: import { x, y } from \"module\"\r\n */\r\n private parseImport(): ImportNode | null {\r\n this.expect('keyword', 'import');\r\n\r\n const imports: string[] = [];\r\n let modulePath = '';\r\n let defaultImport: string | undefined;\r\n\r\n // Check for default import or named imports\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n const name = this.expectIdentifier();\r\n if (name) imports.push(name);\r\n if (this.check('punctuation', ',')) this.advance();\r\n }\r\n this.expect('punctuation', '}');\r\n } else {\r\n // Default import\r\n defaultImport = this.expectIdentifier() || undefined;\r\n }\r\n\r\n // from \"module\"\r\n if (this.check('keyword', 'from')) {\r\n this.advance();\r\n const pathToken = this.currentToken();\r\n if (pathToken?.type === 'string') {\r\n modulePath = pathToken.value;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'import',\r\n imports,\r\n defaultImport,\r\n modulePath,\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n /**\r\n * Parse export: export { x, y } or export function/orb\r\n */\r\n private parseExport(): ExportNode | null {\r\n this.expect('keyword', 'export');\r\n\r\n // Check if exporting a declaration\r\n const next = this.currentToken();\r\n if (next?.type === 'keyword') {\r\n const declaration = this.parseDeclaration();\r\n return {\r\n type: 'export',\r\n declaration: declaration || undefined,\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n // Named exports\r\n const exports: string[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n const name = this.expectIdentifier();\r\n if (name) exports.push(name);\r\n if (this.check('punctuation', ',')) this.advance();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'export',\r\n exports,\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n /**\r\n * Parse variable declaration: const/let/var name = value\r\n */\r\n private parseVariableDeclaration(): VariableDeclarationNode | null {\r\n const kindToken = this.currentToken()?.value.toLowerCase();\r\n const kind: 'const' | 'let' | 'var' = kindToken === 'let' ? 'let' : kindToken === 'var' ? 'var' : 'const';\r\n this.advance();\r\n\r\n const name = this.expectIdentifier();\r\n if (!name) return null;\r\n\r\n let dataType: string | undefined;\r\n if (this.check('punctuation', ':')) {\r\n this.advance();\r\n dataType = this.expectIdentifier() || undefined;\r\n }\r\n\r\n let value: HoloScriptValue;\r\n if (this.check('punctuation', '=')) {\r\n this.advance();\r\n const valueToken = this.currentToken();\r\n if (valueToken?.type === 'string') {\r\n value = valueToken.value;\r\n this.advance();\r\n } else if (valueToken?.type === 'number') {\r\n value = parseFloat(valueToken.value);\r\n this.advance();\r\n } else if (valueToken?.type === 'identifier') {\r\n if (valueToken.value === 'true') value = true;\r\n else if (valueToken.value === 'false') value = false;\r\n else value = valueToken.value;\r\n this.advance();\r\n } else if (this.check('punctuation', '[')) {\r\n value = this.parseArray() as HoloScriptValue;\r\n } else if (this.check('punctuation', '{')) {\r\n value = this.parseObject() as HoloScriptValue;\r\n }\r\n }\r\n\r\n return {\r\n type: 'variable-declaration',\r\n kind,\r\n name,\r\n dataType,\r\n value,\r\n position: { x: 0, y: 0, z: 0 },\r\n };\r\n }\r\n\r\n /**\r\n * Parse orb declaration\r\n */\r\n private parseOrb(): OrbNode | null {\r\n const startToken = this.currentToken(); // Capture start token for line info\r\n \r\n // Support both 'orb' and 'object' keywords\r\n if (this.check('keyword', 'orb') || this.check('keyword', 'object')) {\r\n this.advance();\r\n } else {\r\n this.expect('keyword', 'orb'); // Fallback to standard error\r\n }\r\n\r\n let name = '';\r\n // Check for ID syntax: orb#id\r\n if (this.check('punctuation', '#')) {\r\n this.advance(); // #\r\n name = this.expectIdentifier() || `orb_${Date.now()}`;\r\n } else {\r\n name = this.expectIdentifier() || `orb_${Date.now()}`;\r\n }\r\n\r\n const properties: Record<string, HoloScriptValue> = {};\r\n const directives: HSPlusDirective[] = [];\r\n let position: SpatialPosition | undefined;\r\n let hologram: HologramProperties | undefined;\r\n\r\n if (this.check('punctuation', '{')) {\r\n this.advance(); // {\r\n\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n if (this.check('punctuation', '}')) break;\r\n\r\n const token = this.currentToken();\r\n if (token?.type === 'punctuation' && token.value === '@') {\r\n const directive = this.parseDirective();\r\n if (directive) directives.push(directive);\r\n } else {\r\n const prop = this.parseProperty();\r\n if (prop) {\r\n // Handle special properties\r\n if (prop.key === 'position' || prop.key === 'at') {\r\n position = this.parsePosition(prop.value);\r\n } else if (prop.key === 'color' || prop.key === 'glow' || prop.key === 'size') {\r\n hologram = hologram || { shape: 'orb', color: '#00ffff', size: 0.5, glow: true, interactive: true };\r\n if (prop.key === 'color') hologram.color = String(prop.value);\r\n if (prop.key === 'glow') hologram.glow = Boolean(prop.value);\r\n if (prop.key === 'size') hologram.size = Number(prop.value);\r\n } else {\r\n properties[prop.key] = prop.value;\r\n }\r\n }\r\n }\r\n\r\n this.skipNewlines();\r\n }\r\n\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'orb',\r\n name,\r\n position: position || { x: 0, y: 0, z: 0 },\r\n hologram: hologram || { shape: 'orb', color: '#00ffff', size: 0.5, glow: true, interactive: true },\r\n properties,\r\n directives: directives,\r\n methods: [],\r\n line: startToken?.line || 0,\r\n };\r\n }\r\n\r\n /**\r\n * Parse HoloScript+ directive: @name(...) or @name { ... }\r\n */\r\n private parseDirective(): HSPlusDirective | null {\r\n this.expect('punctuation', '@');\r\n const name = this.expectIdentifier();\r\n if (!name) return null;\r\n\r\n // Handle @state { ... }\r\n if (name === 'state') {\r\n const body = this.parseObject() as Record<string, HoloScriptValue>;\r\n return { type: 'state', body };\r\n }\r\n\r\n // Handle @on_... hooks\r\n if (name.startsWith('on_')) {\r\n let body = '';\r\n if (this.check('punctuation', '{')) {\r\n this.advance(); // {\r\n let braceDepth = 1;\r\n while (braceDepth > 0 && this.position < this.tokens.length) {\r\n const t = this.advance()!;\r\n if (t.value === '{') braceDepth++;\r\n if (t.value === '}') braceDepth--;\r\n if (braceDepth > 0) body += t.value + ' ';\r\n else if (braceDepth < 0) break; // Should not happen with valid syntax\r\n }\r\n } else {\r\n const t = this.advance();\r\n if (t) body = t.value;\r\n }\r\n return { type: 'lifecycle', hook: name as any, body };\r\n }\r\n\r\n // Default: handle as trait\r\n let config: Record<string, HoloScriptValue> = {};\r\n if (this.check('punctuation', '(')) {\r\n this.advance(); // (\r\n while (!this.check('punctuation', ')') && this.position < this.tokens.length) {\r\n const prop = this.parseProperty();\r\n if (prop) {\r\n config[prop.key] = prop.value;\r\n }\r\n if (this.check('punctuation', ',')) {\r\n this.advance();\r\n }\r\n }\r\n this.expect('punctuation', ')');\r\n } else if (this.check('punctuation', '{')) {\r\n config = this.parseObject() as Record<string, HoloScriptValue>;\r\n }\r\n\r\n return { type: 'trait', name: name as any, config };\r\n }\r\n\r\n /**\r\n * Parse function declaration\r\n */\r\n private parseFunction(): MethodNode | null {\r\n this.expect('keyword', 'function');\r\n const name = this.expectIdentifier();\r\n if (!name) return null;\r\n\r\n const parameters: ParameterNode[] = [];\r\n let returnType: string | undefined;\r\n\r\n // Parse parameters\r\n if (this.check('punctuation', '(')) {\r\n this.advance(); // (\r\n\r\n while (!this.check('punctuation', ')') && this.position < this.tokens.length) {\r\n const paramName = this.expectIdentifier();\r\n if (!paramName) break;\r\n\r\n let paramType = 'any';\r\n if (this.check('punctuation', ':')) {\r\n this.advance(); // :\r\n paramType = this.expectIdentifier() || 'any';\r\n }\r\n\r\n parameters.push({\r\n type: 'parameter',\r\n name: paramName,\r\n dataType: paramType,\r\n });\r\n\r\n if (this.check('punctuation', ',')) {\r\n this.advance();\r\n }\r\n }\r\n\r\n this.expect('punctuation', ')');\r\n }\r\n\r\n // Parse return type\r\n if (this.check('punctuation', ':')) {\r\n this.advance();\r\n returnType = this.expectIdentifier() || undefined;\r\n }\r\n\r\n // Parse body\r\n const body: ASTNode[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance(); // {\r\n // Skip body parsing for now - just find closing brace\r\n let depth = 1;\r\n while (depth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) depth++;\r\n if (this.check('punctuation', '}')) depth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'method',\r\n name,\r\n parameters,\r\n body,\r\n returnType,\r\n position: { x: 0, y: 0, z: 0 },\r\n hologram: { shape: 'cube', color: '#ff6b35', size: 1.5, glow: true, interactive: true },\r\n };\r\n }\r\n\r\n /**\r\n * Parse connection\r\n */\r\n private parseConnection(): ConnectionNode | null {\r\n this.expect('keyword', 'connect');\r\n const from = this.expectIdentifier();\r\n if (!from) return null;\r\n\r\n this.expect('keyword', 'to');\r\n const to = this.expectIdentifier();\r\n if (!to) return null;\r\n\r\n let dataType = 'any';\r\n if (this.check('keyword', 'as')) {\r\n this.advance();\r\n const typeStr = this.currentToken();\r\n if (typeStr?.type === 'string' || typeStr?.type === 'identifier') {\r\n dataType = typeStr.value;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'connection',\r\n from,\r\n to,\r\n dataType,\r\n bidirectional: false,\r\n };\r\n }\r\n\r\n /**\r\n * Parse scale block: scale <magnitude> { body }\r\n */\r\n private parseScale(): ScaleNode | null {\r\n this.expect('keyword', 'scale');\r\n const magnitude = (this.expectIdentifier() || 'standard') as ScaleNode['magnitude'];\r\n \r\n const multipliers: Record<string, number> = {\r\n 'galactic': 1000000,\r\n 'macro': 1000,\r\n 'standard': 1,\r\n 'micro': 0.001,\r\n 'atomic': 0.000001\r\n };\r\n\r\n const body: ASTNode[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n const node = this.parseDeclaration();\r\n if (node) body.push(node);\r\n this.skipNewlines();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'scale',\r\n magnitude,\r\n multiplier: multipliers[magnitude] || 1,\r\n body, \r\n position: { x: 0, y: 0, z: 0 }\r\n };\r\n }\r\n\r\n /**\r\n * Parse focus block: focus <target> { body }\r\n */\r\n private parseFocus(): FocusNode | null {\r\n this.expect('keyword', 'focus');\r\n const target = this.expectIdentifier() || 'origin';\r\n \r\n const body: ASTNode[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n const node = this.parseDeclaration();\r\n if (node) body.push(node);\r\n this.skipNewlines();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'focus',\r\n target,\r\n body,\r\n position: { x: 0, y: 0, z: 0 }\r\n };\r\n }\r\n\r\n /**\r\n * Parse environment declaration\r\n */\r\n private parseEnvironment(): EnvironmentNode | null {\r\n this.expect('keyword', 'environment');\r\n const settings: Record<string, HoloScriptValue> = {};\r\n \r\n // Parse settings until newline or }\r\n while (this.position < this.tokens.length && \r\n this.currentToken()?.type !== 'newline' && \r\n !this.check('punctuation', '}')) {\r\n const key = this.expectIdentifier();\r\n if (!key) break;\r\n settings[key] = this.parseLiteral() as HoloScriptValue;\r\n }\r\n\r\n return {\r\n type: 'environment',\r\n settings\r\n };\r\n }\r\n\r\n /**\r\n * Parse composition block\r\n */\r\n private parseComposition(): CompositionNode | null {\r\n this.expect('keyword', 'composition');\r\n const name = this.expectIdentifier() || 'unnamed';\r\n \r\n const children: ASTNode[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n const node = this.parseDeclaration();\r\n if (node) children.push(node);\r\n this.skipNewlines();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'composition',\r\n name,\r\n children\r\n };\r\n }\r\n\r\n /**\r\n * Parse template declaration\r\n */\r\n private parseTemplate(): TemplateNode | null {\r\n this.expect('keyword', 'template');\r\n const name = this.expectIdentifier() || 'template';\r\n \r\n const params: string[] = [];\r\n if (this.check('punctuation', '(')) {\r\n this.advance();\r\n while (!this.check('punctuation', ')') && this.position < this.tokens.length) {\r\n const p = this.expectIdentifier();\r\n if (p) params.push(p);\r\n if (this.check('punctuation', ',')) this.advance();\r\n }\r\n this.expect('punctuation', ')');\r\n }\r\n\r\n const body: ASTNode[] = [];\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n const node = this.parseDeclaration();\r\n if (node) body.push(node);\r\n this.skipNewlines();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'template',\r\n name,\r\n parameters: params,\r\n body\r\n };\r\n }\r\n\r\n /**\r\n * Parse gate (conditional)\r\n */\r\n private parseGate(): GateNode | null {\r\n this.expect('keyword', 'gate');\r\n this.expectIdentifier(); // Gate name (consumed but not currently stored)\r\n\r\n let condition = '';\r\n if (this.check('punctuation', '(')) {\r\n this.advance();\r\n // Parse condition expression\r\n while (!this.check('punctuation', ')') && this.position < this.tokens.length) {\r\n const token = this.currentToken();\r\n if (token) condition += token.value + ' ';\r\n this.advance();\r\n }\r\n this.expect('punctuation', ')');\r\n }\r\n\r\n // Parse body if present\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let depth = 1;\r\n while (depth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) depth++;\r\n if (this.check('punctuation', '}')) depth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'gate',\r\n condition: condition.trim(),\r\n truePath: [],\r\n falsePath: [],\r\n position: { x: 0, y: 0, z: 0 },\r\n hologram: { shape: 'pyramid', color: '#4ecdc4', size: 1, glow: true, interactive: true },\r\n };\r\n }\r\n\r\n /**\r\n * Parse stream\r\n */\r\n private parseStream(): StreamNode | null {\r\n this.expect('keyword', 'stream');\r\n const name = this.expectIdentifier();\r\n if (!name) return null;\r\n\r\n let source = 'unknown';\r\n if (this.check('keyword', 'from')) {\r\n this.advance();\r\n source = this.expectIdentifier() || 'unknown';\r\n }\r\n\r\n // Parse body if present\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let depth = 1;\r\n while (depth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) depth++;\r\n if (this.check('punctuation', '}')) depth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'stream',\r\n name,\r\n source,\r\n transformations: [],\r\n position: { x: 0, y: 0, z: 0 },\r\n hologram: { shape: 'cylinder', color: '#45b7d1', size: 2, glow: true, interactive: true },\r\n };\r\n }\r\n\r\n /**\r\n * Parse nexus (multi-agent hub)\r\n */\r\n private parseNexus(): ASTNode | null {\r\n this.expect('keyword', 'nexus');\r\n const name = this.expectIdentifier();\r\n if (!name) return null;\r\n\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let depth = 1;\r\n while (depth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) depth++;\r\n if (this.check('punctuation', '}')) depth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'nexus',\r\n position: { x: 0, y: 0, z: 0 },\r\n hologram: { shape: 'sphere', color: '#9b59b6', size: 3, glow: true, interactive: true },\r\n };\r\n }\r\n\r\n /**\r\n * Parse building (class-like)\r\n */\r\n private parseBuilding(): ASTNode | null {\r\n this.expect('keyword', 'building');\r\n const name = this.expectIdentifier();\r\n if (!name) return null;\r\n\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n let depth = 1;\r\n while (depth > 0 && this.position < this.tokens.length) {\r\n if (this.check('punctuation', '{')) depth++;\r\n if (this.check('punctuation', '}')) depth--;\r\n this.advance();\r\n }\r\n }\r\n\r\n return {\r\n type: 'building',\r\n position: { x: 0, y: 0, z: 0 },\r\n hologram: { shape: 'cube', color: '#e74c3c', size: 4, glow: true, interactive: true },\r\n };\r\n }\r\n\r\n /**\r\n * Parse a literal value (string, number, boolean, array, or object)\r\n */\r\n private parseLiteral(): unknown {\r\n const token = this.currentToken();\r\n if (!token) return null;\r\n\r\n if (token.type === 'string') {\r\n this.advance();\r\n return token.value;\r\n }\r\n\r\n if (token.type === 'number') {\r\n this.advance();\r\n return parseFloat(token.value);\r\n }\r\n\r\n if (token.type === 'identifier') {\r\n const val = token.value.toLowerCase();\r\n this.advance();\r\n if (val === 'true') return true;\r\n if (val === 'false') return false;\r\n if (val === 'null') return null;\r\n return token.value;\r\n }\r\n\r\n if (this.check('punctuation', '[')) {\r\n return this.parseArray();\r\n }\r\n\r\n if (this.check('punctuation', '{')) {\r\n return this.parseObject();\r\n }\r\n\r\n this.advance();\r\n return token.value;\r\n }\r\n\r\n /**\r\n * Parse a property (key: value)\r\n */\r\n private parseProperty(): { key: string; value: HoloScriptValue } | null {\r\n const key = this.expectIdentifier();\r\n if (!key) return null;\r\n\r\n if (!this.check('punctuation', ':')) {\r\n return { key, value: true }; // Flag-style property\r\n }\r\n\r\n this.advance(); // :\r\n\r\n const value = this.parseLiteral() as HoloScriptValue;\r\n\r\n return { key, value };\r\n }\r\n\r\n /**\r\n * Parse array [...]\r\n */\r\n private parseArray(): any[] {\r\n const arr: any[] = [];\r\n this.expect('punctuation', '[');\r\n\r\n while (!this.check('punctuation', ']') && this.position < this.tokens.length) {\r\n const token = this.currentToken();\r\n if (token?.type === 'string' || token?.type === 'number' || token?.type === 'identifier') {\r\n if (token.type === 'number') {\r\n arr.push(parseFloat(token.value));\r\n } else {\r\n arr.push(token.value);\r\n }\r\n this.advance();\r\n }\r\n\r\n if (this.check('punctuation', ',')) {\r\n this.advance();\r\n }\r\n }\r\n\r\n this.expect('punctuation', ']');\r\n return arr;\r\n }\r\n\r\n /**\r\n * Parse object {...}\r\n */\r\n private parseObject(): Record<string, unknown> {\r\n const obj: Record<string, unknown> = {};\r\n this.expect('punctuation', '{');\r\n\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n if (this.check('punctuation', '}')) break;\r\n\r\n const prop = this.parseProperty();\r\n if (prop) {\r\n obj[prop.key] = prop.value;\r\n }\r\n\r\n this.skipNewlines();\r\n if (this.check('punctuation', ',')) {\r\n this.advance();\r\n }\r\n }\r\n\r\n this.expect('punctuation', '}');\r\n return obj;\r\n }\r\n\r\n /**\r\n * Parse position from value\r\n */\r\n private parsePosition(value: unknown): SpatialPosition {\r\n if (Array.isArray(value)) {\r\n return {\r\n x: Number(value[0]) || 0,\r\n y: Number(value[1]) || 0,\r\n z: Number(value[2]) || 0,\r\n };\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const v = value as Record<string, unknown>;\r\n return {\r\n x: Number(v.x) || 0,\r\n y: Number(v.y) || 0,\r\n z: Number(v.z) || 0,\r\n };\r\n }\r\n return { x: 0, y: 0, z: 0 };\r\n }\r\n\r\n // Helper methods\r\n\r\n private currentToken(): Token | undefined {\r\n return this.tokens[this.position];\r\n }\r\n\r\n private advance(): Token | undefined {\r\n return this.tokens[this.position++];\r\n }\r\n\r\n private check(type: string, value?: string): boolean {\r\n const token = this.currentToken();\r\n if (!token) return false;\r\n if (token.type !== type) return false;\r\n if (value !== undefined && token.value.toLowerCase() !== value.toLowerCase()) return false;\r\n return true;\r\n }\r\n\r\n private expect(type: string, value?: string): boolean {\r\n if (this.check(type, value)) {\r\n this.advance();\r\n return true;\r\n }\r\n const token = this.currentToken();\r\n this.errors.push({\r\n line: token?.line || 0,\r\n column: token?.column || 0,\r\n message: `Expected ${type}${value ? ` '${value}'` : ''}, got ${token?.type || 'EOF'} '${token?.value || ''}'`,\r\n });\r\n return false;\r\n }\r\n\r\n private expectIdentifier(): string | null {\r\n const token = this.currentToken();\r\n if (token?.type === 'identifier' || token?.type === 'keyword') {\r\n this.advance();\r\n return token.value;\r\n }\r\n this.errors.push({\r\n line: token?.line || 0,\r\n column: token?.column || 0,\r\n message: `Expected identifier, got ${token?.type || 'EOF'}`,\r\n });\r\n return null;\r\n }\r\n\r\n /**\r\n * Parse animate command: animate target property: \"...\" from: 0 to: 1 duration: 1000\r\n */\r\n private parseAnimate(): ASTNode | null {\r\n this.expect('keyword', 'animate');\r\n const target = this.expectIdentifier();\r\n if (!target) return null;\r\n\r\n const properties: Record<string, HoloScriptValue> = {};\r\n\r\n // Parse inline properties\r\n while (this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n const t = this.currentToken();\r\n if (!t || t.type === 'newline' || (t.type === 'keyword' && this.keywordSet.has(t.value.toLowerCase()))) break;\r\n\r\n const prop = this.parseProperty();\r\n if (prop) {\r\n properties[prop.key] = prop.value;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n type: 'expression-statement',\r\n expression: `animate(\"${target}\", ${JSON.stringify(properties)})`,\r\n position: { x: 0, y: 0, z: 0 },\r\n } as ASTNode;\r\n }\r\n\r\n /**\r\n * Parse modify command: modify target { prop: value }\r\n */\r\n private parseModify(): ASTNode | null {\r\n this.expect('keyword', 'modify');\r\n const target = this.expectIdentifier();\r\n if (!target) return null;\r\n\r\n const properties: Record<string, HoloScriptValue> = {};\r\n\r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n if (this.check('punctuation', '}')) break;\r\n\r\n const prop = this.parseProperty();\r\n if (prop) {\r\n properties[prop.key] = prop.value;\r\n }\r\n this.skipNewlines();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n\r\n return {\r\n type: 'expression-statement',\r\n expression: `modify(\"${target}\", ${JSON.stringify(properties)})`,\r\n position: { x: 0, y: 0, z: 0 },\r\n } as ASTNode;\r\n }\r\n\r\n /**\r\n * Parse UI Element: ui2d dashboard#id { ... }\r\n */\r\n private parseUIElement(): ASTNode | null {\r\n const typeToken = this.currentToken();\r\n if (!typeToken) return null;\r\n \r\n const elementType = typeToken.value;\r\n this.advance();\r\n \r\n let elementId = `${elementType}_${Date.now()}`;\r\n \r\n // Check for ID syntax\r\n const token = this.currentToken();\r\n if (token?.type === 'punctuation' && token.value === '#') {\r\n this.advance(); \r\n const idToken = this.currentToken();\r\n if (idToken) {\r\n elementId = idToken.value;\r\n this.advance();\r\n }\r\n } else if (token?.type === 'identifier' && token.value.startsWith('#')) {\r\n elementId = token.value.slice(1) || elementId;\r\n this.advance();\r\n }\r\n \r\n const properties: Record<string, HoloScriptValue> = {};\r\n \r\n if (this.check('punctuation', '{')) {\r\n this.advance();\r\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\r\n this.skipNewlines();\r\n if (this.check('punctuation', '}')) break;\r\n \r\n const prop = this.parseProperty();\r\n if (prop) {\r\n properties[prop.key] = prop.value;\r\n }\r\n this.skipNewlines();\r\n }\r\n this.expect('punctuation', '}');\r\n }\r\n \r\n return {\r\n type: 'ui2d', \r\n name: elementType,\r\n properties: { id: elementId, ...properties },\r\n position: { x: 0, y: 0, z: 0 }\r\n } as ASTNode;\r\n }\r\n\r\n /**\r\n * Parse settings command: settings\r\n */\r\n private parseSettings(): ASTNode | null {\r\n this.expect('keyword', 'settings');\r\n return {\r\n type: 'expression-statement',\r\n expression: 'showSettings()',\r\n position: { x: 0, y: 0, z: 0 },\r\n } as ASTNode;\r\n }\r\n\r\n private parseChat(): ASTNode | null {\r\n this.expect('keyword', 'chat');\r\n return {\r\n type: 'expression-statement',\r\n expression: 'openChat()',\r\n position: { x: 0, y: 0, z: 0 },\r\n } as ASTNode;\r\n }\r\n\r\n private skipNewlines(): void {\r\n while (this.currentToken()?.type === 'newline') {\r\n this.advance();\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var chunkR75MREOS_cjs = require('./chunk-R75MREOS.cjs');
4
+ require('./chunk-T57ZL7KR.cjs');
5
+ require('./chunk-L6VLNVKP.cjs');
6
+ require('./chunk-3X2EGU7Z.cjs');
7
+ require('./chunk-JEQ2X3Z6.cjs');
8
+
9
+
10
+
11
+ Object.defineProperty(exports, "HoloScriptDebugger", {
12
+ enumerable: true,
13
+ get: function () { return chunkR75MREOS_cjs.HoloScriptDebugger; }
14
+ });
15
+ Object.defineProperty(exports, "createDebugger", {
16
+ enumerable: true,
17
+ get: function () { return chunkR75MREOS_cjs.createDebugger; }
18
+ });
19
+ //# sourceMappingURL=debugger.cjs.map
20
+ //# sourceMappingURL=debugger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"debugger.cjs"}
@@ -0,0 +1,171 @@
1
+ import { HoloScriptRuntime } from './runtime.cjs';
2
+ import { A as ASTNode } from './types-4h8cbtF_.cjs';
3
+
4
+ /**
5
+ * HoloScript Debugger
6
+ *
7
+ * Step-through debugging with breakpoints, call stack inspection,
8
+ * and variable watch capabilities.
9
+ */
10
+
11
+ interface Breakpoint {
12
+ id: string;
13
+ line: number;
14
+ column?: number;
15
+ condition?: string;
16
+ hitCount: number;
17
+ enabled: boolean;
18
+ file?: string;
19
+ }
20
+ interface StackFrame {
21
+ id: number;
22
+ name: string;
23
+ file?: string;
24
+ line: number;
25
+ column: number;
26
+ variables: Map<string, unknown>;
27
+ node: ASTNode;
28
+ }
29
+ interface DebugState {
30
+ status: 'running' | 'paused' | 'stopped' | 'stepping';
31
+ currentLine: number;
32
+ currentColumn: number;
33
+ currentNode: ASTNode | null;
34
+ callStack: StackFrame[];
35
+ breakpoints: Breakpoint[];
36
+ }
37
+ type StepMode = 'into' | 'over' | 'out';
38
+ interface DebugEvent {
39
+ type: 'breakpoint-hit' | 'step-complete' | 'exception' | 'output' | 'state-change';
40
+ data: unknown;
41
+ }
42
+ type DebugEventHandler = (event: DebugEvent) => void;
43
+ /**
44
+ * HoloScript Debugger with breakpoints and step-through execution
45
+ */
46
+ declare class HoloScriptDebugger {
47
+ private runtime;
48
+ private parser;
49
+ private breakpoints;
50
+ private callStack;
51
+ private currentAST;
52
+ private currentNodeIndex;
53
+ private frameIdCounter;
54
+ private breakpointIdCounter;
55
+ private eventHandlers;
56
+ private state;
57
+ constructor(runtime?: HoloScriptRuntime);
58
+ /**
59
+ * Load source code for debugging
60
+ */
61
+ loadSource(code: string, file?: string): {
62
+ success: boolean;
63
+ errors?: string[];
64
+ };
65
+ /**
66
+ * Set a breakpoint at a line
67
+ */
68
+ setBreakpoint(line: number, options?: Partial<Breakpoint>): Breakpoint;
69
+ /**
70
+ * Remove a breakpoint by ID
71
+ */
72
+ removeBreakpoint(id: string): boolean;
73
+ /**
74
+ * Remove all breakpoints at a line
75
+ */
76
+ removeBreakpointsAtLine(line: number): number;
77
+ /**
78
+ * Toggle breakpoint enabled state
79
+ */
80
+ toggleBreakpoint(id: string): boolean;
81
+ /**
82
+ * Get all breakpoints
83
+ */
84
+ getBreakpoints(): Breakpoint[];
85
+ /**
86
+ * Clear all breakpoints
87
+ */
88
+ clearBreakpoints(): void;
89
+ /**
90
+ * Start debugging from the beginning
91
+ */
92
+ start(): Promise<void>;
93
+ /**
94
+ * Continue execution until next breakpoint or end
95
+ */
96
+ continue(): Promise<void>;
97
+ /**
98
+ * Step into the next node
99
+ */
100
+ stepInto(): Promise<void>;
101
+ /**
102
+ * Step over the current node
103
+ */
104
+ stepOver(): Promise<void>;
105
+ /**
106
+ * Step out of the current function
107
+ */
108
+ stepOut(): Promise<void>;
109
+ /**
110
+ * Stop debugging
111
+ */
112
+ stop(): void;
113
+ /**
114
+ * Pause execution
115
+ */
116
+ pause(): void;
117
+ /**
118
+ * Get current debug state
119
+ */
120
+ getState(): DebugState;
121
+ /**
122
+ * Get call stack
123
+ */
124
+ getCallStack(): StackFrame[];
125
+ /**
126
+ * Get variables at a specific stack frame
127
+ */
128
+ getVariables(frameId?: number): Map<string, unknown>;
129
+ /**
130
+ * Evaluate an expression in the current context
131
+ */
132
+ evaluate(expression: string): Promise<{
133
+ value: unknown;
134
+ error?: string;
135
+ }>;
136
+ /**
137
+ * Set a watch expression
138
+ */
139
+ watch(expression: string): {
140
+ id: string;
141
+ expression: string;
142
+ };
143
+ /**
144
+ * Register an event handler
145
+ */
146
+ on(event: string, handler: DebugEventHandler): void;
147
+ /**
148
+ * Remove an event handler
149
+ */
150
+ off(event: string, handler: DebugEventHandler): void;
151
+ /**
152
+ * Get the underlying runtime
153
+ */
154
+ getRuntime(): HoloScriptRuntime;
155
+ private runUntilBreakpoint;
156
+ private executeStep;
157
+ private executeNode;
158
+ private shouldBreakAt;
159
+ private findBreakpointAtLine;
160
+ private pushStackFrame;
161
+ private popStackFrame;
162
+ private updateCurrentState;
163
+ private updateBreakpointList;
164
+ private emitEvent;
165
+ }
166
+ /**
167
+ * Create a debugger instance
168
+ */
169
+ declare function createDebugger(runtime?: HoloScriptRuntime): HoloScriptDebugger;
170
+
171
+ export { type Breakpoint, type DebugEvent, type DebugState, HoloScriptDebugger, type StackFrame, type StepMode, createDebugger };
@@ -0,0 +1,171 @@
1
+ import { HoloScriptRuntime } from './runtime.js';
2
+ import { A as ASTNode } from './types-4h8cbtF_.js';
3
+
4
+ /**
5
+ * HoloScript Debugger
6
+ *
7
+ * Step-through debugging with breakpoints, call stack inspection,
8
+ * and variable watch capabilities.
9
+ */
10
+
11
+ interface Breakpoint {
12
+ id: string;
13
+ line: number;
14
+ column?: number;
15
+ condition?: string;
16
+ hitCount: number;
17
+ enabled: boolean;
18
+ file?: string;
19
+ }
20
+ interface StackFrame {
21
+ id: number;
22
+ name: string;
23
+ file?: string;
24
+ line: number;
25
+ column: number;
26
+ variables: Map<string, unknown>;
27
+ node: ASTNode;
28
+ }
29
+ interface DebugState {
30
+ status: 'running' | 'paused' | 'stopped' | 'stepping';
31
+ currentLine: number;
32
+ currentColumn: number;
33
+ currentNode: ASTNode | null;
34
+ callStack: StackFrame[];
35
+ breakpoints: Breakpoint[];
36
+ }
37
+ type StepMode = 'into' | 'over' | 'out';
38
+ interface DebugEvent {
39
+ type: 'breakpoint-hit' | 'step-complete' | 'exception' | 'output' | 'state-change';
40
+ data: unknown;
41
+ }
42
+ type DebugEventHandler = (event: DebugEvent) => void;
43
+ /**
44
+ * HoloScript Debugger with breakpoints and step-through execution
45
+ */
46
+ declare class HoloScriptDebugger {
47
+ private runtime;
48
+ private parser;
49
+ private breakpoints;
50
+ private callStack;
51
+ private currentAST;
52
+ private currentNodeIndex;
53
+ private frameIdCounter;
54
+ private breakpointIdCounter;
55
+ private eventHandlers;
56
+ private state;
57
+ constructor(runtime?: HoloScriptRuntime);
58
+ /**
59
+ * Load source code for debugging
60
+ */
61
+ loadSource(code: string, file?: string): {
62
+ success: boolean;
63
+ errors?: string[];
64
+ };
65
+ /**
66
+ * Set a breakpoint at a line
67
+ */
68
+ setBreakpoint(line: number, options?: Partial<Breakpoint>): Breakpoint;
69
+ /**
70
+ * Remove a breakpoint by ID
71
+ */
72
+ removeBreakpoint(id: string): boolean;
73
+ /**
74
+ * Remove all breakpoints at a line
75
+ */
76
+ removeBreakpointsAtLine(line: number): number;
77
+ /**
78
+ * Toggle breakpoint enabled state
79
+ */
80
+ toggleBreakpoint(id: string): boolean;
81
+ /**
82
+ * Get all breakpoints
83
+ */
84
+ getBreakpoints(): Breakpoint[];
85
+ /**
86
+ * Clear all breakpoints
87
+ */
88
+ clearBreakpoints(): void;
89
+ /**
90
+ * Start debugging from the beginning
91
+ */
92
+ start(): Promise<void>;
93
+ /**
94
+ * Continue execution until next breakpoint or end
95
+ */
96
+ continue(): Promise<void>;
97
+ /**
98
+ * Step into the next node
99
+ */
100
+ stepInto(): Promise<void>;
101
+ /**
102
+ * Step over the current node
103
+ */
104
+ stepOver(): Promise<void>;
105
+ /**
106
+ * Step out of the current function
107
+ */
108
+ stepOut(): Promise<void>;
109
+ /**
110
+ * Stop debugging
111
+ */
112
+ stop(): void;
113
+ /**
114
+ * Pause execution
115
+ */
116
+ pause(): void;
117
+ /**
118
+ * Get current debug state
119
+ */
120
+ getState(): DebugState;
121
+ /**
122
+ * Get call stack
123
+ */
124
+ getCallStack(): StackFrame[];
125
+ /**
126
+ * Get variables at a specific stack frame
127
+ */
128
+ getVariables(frameId?: number): Map<string, unknown>;
129
+ /**
130
+ * Evaluate an expression in the current context
131
+ */
132
+ evaluate(expression: string): Promise<{
133
+ value: unknown;
134
+ error?: string;
135
+ }>;
136
+ /**
137
+ * Set a watch expression
138
+ */
139
+ watch(expression: string): {
140
+ id: string;
141
+ expression: string;
142
+ };
143
+ /**
144
+ * Register an event handler
145
+ */
146
+ on(event: string, handler: DebugEventHandler): void;
147
+ /**
148
+ * Remove an event handler
149
+ */
150
+ off(event: string, handler: DebugEventHandler): void;
151
+ /**
152
+ * Get the underlying runtime
153
+ */
154
+ getRuntime(): HoloScriptRuntime;
155
+ private runUntilBreakpoint;
156
+ private executeStep;
157
+ private executeNode;
158
+ private shouldBreakAt;
159
+ private findBreakpointAtLine;
160
+ private pushStackFrame;
161
+ private popStackFrame;
162
+ private updateCurrentState;
163
+ private updateBreakpointList;
164
+ private emitEvent;
165
+ }
166
+ /**
167
+ * Create a debugger instance
168
+ */
169
+ declare function createDebugger(runtime?: HoloScriptRuntime): HoloScriptDebugger;
170
+
171
+ export { type Breakpoint, type DebugEvent, type DebugState, HoloScriptDebugger, type StackFrame, type StepMode, createDebugger };
@@ -0,0 +1,7 @@
1
+ export { HoloScriptDebugger, createDebugger } from './chunk-DOY73HDH.js';
2
+ import './chunk-U72GEJZT.js';
3
+ import './chunk-AFFVFO4D.js';
4
+ import './chunk-SATNCODL.js';
5
+ import './chunk-DGUM43GV.js';
6
+ //# sourceMappingURL=debugger.js.map
7
+ //# sourceMappingURL=debugger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"debugger.js"}