@holoscript/core 1.0.0-alpha.1 → 2.0.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 (127) hide show
  1. package/package.json +10 -9
  2. package/src/HoloScript2DParser.js +227 -0
  3. package/src/HoloScript2DParser.ts +5 -0
  4. package/src/HoloScriptCodeParser.js +1102 -0
  5. package/src/HoloScriptCodeParser.ts +145 -20
  6. package/src/HoloScriptDebugger.js +458 -0
  7. package/src/HoloScriptParser.js +338 -0
  8. package/src/HoloScriptPlusParser.js +371 -0
  9. package/src/HoloScriptPlusParser.ts +543 -0
  10. package/src/HoloScriptRuntime.js +1399 -0
  11. package/src/HoloScriptRuntime.test.js +351 -0
  12. package/src/HoloScriptRuntime.ts +257 -3
  13. package/src/HoloScriptTypeChecker.js +356 -0
  14. package/src/__tests__/GraphicsServices.test.js +357 -0
  15. package/src/__tests__/GraphicsServices.test.ts +427 -0
  16. package/src/__tests__/HoloScriptPlusParser.test.js +317 -0
  17. package/src/__tests__/HoloScriptPlusParser.test.ts +392 -0
  18. package/src/__tests__/integration.test.js +336 -0
  19. package/src/__tests__/performance.bench.js +218 -0
  20. package/src/__tests__/type-checker.test.js +60 -0
  21. package/src/__tests__/type-checker.test.ts +73 -0
  22. package/src/index.js +217 -0
  23. package/src/index.ts +158 -18
  24. package/src/interop/Interoperability.js +413 -0
  25. package/src/interop/Interoperability.ts +494 -0
  26. package/src/logger.js +42 -0
  27. package/src/parser/EnhancedParser.js +205 -0
  28. package/src/parser/EnhancedParser.ts +251 -0
  29. package/src/parser/HoloScriptPlusParser.js +928 -0
  30. package/src/parser/HoloScriptPlusParser.ts +1089 -0
  31. package/src/runtime/HoloScriptPlusRuntime.js +674 -0
  32. package/src/runtime/HoloScriptPlusRuntime.ts +861 -0
  33. package/src/runtime/PerformanceTelemetry.js +323 -0
  34. package/src/runtime/PerformanceTelemetry.ts +467 -0
  35. package/src/runtime/RuntimeOptimization.js +361 -0
  36. package/src/runtime/RuntimeOptimization.ts +416 -0
  37. package/src/services/HololandGraphicsPipelineService.js +506 -0
  38. package/src/services/HololandGraphicsPipelineService.ts +662 -0
  39. package/src/services/PlatformPerformanceOptimizer.js +356 -0
  40. package/src/services/PlatformPerformanceOptimizer.ts +503 -0
  41. package/src/state/ReactiveState.js +427 -0
  42. package/src/state/ReactiveState.ts +572 -0
  43. package/src/tools/DeveloperExperience.js +376 -0
  44. package/src/tools/DeveloperExperience.ts +438 -0
  45. package/src/traits/AIDriverTrait.js +322 -0
  46. package/src/traits/AIDriverTrait.test.js +329 -0
  47. package/src/traits/AIDriverTrait.test.ts +357 -0
  48. package/src/traits/AIDriverTrait.ts +474 -0
  49. package/src/traits/LightingTrait.js +313 -0
  50. package/src/traits/LightingTrait.test.js +410 -0
  51. package/src/traits/LightingTrait.test.ts +462 -0
  52. package/src/traits/LightingTrait.ts +505 -0
  53. package/src/traits/MaterialTrait.js +194 -0
  54. package/src/traits/MaterialTrait.test.js +286 -0
  55. package/src/traits/MaterialTrait.test.ts +329 -0
  56. package/src/traits/MaterialTrait.ts +324 -0
  57. package/src/traits/RenderingTrait.js +356 -0
  58. package/src/traits/RenderingTrait.test.js +363 -0
  59. package/src/traits/RenderingTrait.test.ts +427 -0
  60. package/src/traits/RenderingTrait.ts +555 -0
  61. package/src/traits/VRTraitSystem.js +740 -0
  62. package/src/traits/VRTraitSystem.ts +1040 -0
  63. package/src/traits/VoiceInputTrait.js +284 -0
  64. package/src/traits/VoiceInputTrait.test.js +226 -0
  65. package/src/traits/VoiceInputTrait.test.ts +252 -0
  66. package/src/traits/VoiceInputTrait.ts +401 -0
  67. package/src/types/AdvancedTypeSystem.js +226 -0
  68. package/src/types/AdvancedTypeSystem.ts +494 -0
  69. package/src/types/HoloScriptPlus.d.ts +853 -0
  70. package/src/types.js +6 -0
  71. package/src/types.ts +96 -1
  72. package/tsconfig.json +1 -1
  73. package/tsup.config.d.ts +2 -0
  74. package/tsup.config.js +18 -0
  75. package/LICENSE +0 -21
  76. package/dist/chunk-3X2EGU7Z.cjs +0 -52
  77. package/dist/chunk-3X2EGU7Z.cjs.map +0 -1
  78. package/dist/chunk-723TPVHD.js +0 -1074
  79. package/dist/chunk-723TPVHD.js.map +0 -1
  80. package/dist/chunk-EOKNAVDO.cjs +0 -424
  81. package/dist/chunk-EOKNAVDO.cjs.map +0 -1
  82. package/dist/chunk-HQZ3HUMY.js +0 -1087
  83. package/dist/chunk-HQZ3HUMY.js.map +0 -1
  84. package/dist/chunk-KWYIVRIH.js +0 -344
  85. package/dist/chunk-KWYIVRIH.js.map +0 -1
  86. package/dist/chunk-LKH4ZAN6.js +0 -421
  87. package/dist/chunk-LKH4ZAN6.js.map +0 -1
  88. package/dist/chunk-SATNCODL.js +0 -45
  89. package/dist/chunk-SATNCODL.js.map +0 -1
  90. package/dist/chunk-VMZN4EVR.cjs +0 -347
  91. package/dist/chunk-VMZN4EVR.cjs.map +0 -1
  92. package/dist/chunk-VV3UUUYP.cjs +0 -1089
  93. package/dist/chunk-VV3UUUYP.cjs.map +0 -1
  94. package/dist/chunk-XRYTSQHZ.cjs +0 -1076
  95. package/dist/chunk-XRYTSQHZ.cjs.map +0 -1
  96. package/dist/debugger.cjs +0 -19
  97. package/dist/debugger.cjs.map +0 -1
  98. package/dist/debugger.d.cts +0 -171
  99. package/dist/debugger.d.ts +0 -171
  100. package/dist/debugger.js +0 -6
  101. package/dist/debugger.js.map +0 -1
  102. package/dist/index.cjs +0 -755
  103. package/dist/index.cjs.map +0 -1
  104. package/dist/index.d.cts +0 -169
  105. package/dist/index.d.ts +0 -169
  106. package/dist/index.js +0 -699
  107. package/dist/index.js.map +0 -1
  108. package/dist/parser.cjs +0 -13
  109. package/dist/parser.cjs.map +0 -1
  110. package/dist/parser.d.cts +0 -154
  111. package/dist/parser.d.ts +0 -154
  112. package/dist/parser.js +0 -4
  113. package/dist/parser.js.map +0 -1
  114. package/dist/runtime.cjs +0 -13
  115. package/dist/runtime.cjs.map +0 -1
  116. package/dist/runtime.d.cts +0 -147
  117. package/dist/runtime.d.ts +0 -147
  118. package/dist/runtime.js +0 -4
  119. package/dist/runtime.js.map +0 -1
  120. package/dist/type-checker.cjs +0 -16
  121. package/dist/type-checker.cjs.map +0 -1
  122. package/dist/type-checker.d.cts +0 -105
  123. package/dist/type-checker.d.ts +0 -105
  124. package/dist/type-checker.js +0 -3
  125. package/dist/type-checker.js.map +0 -1
  126. package/dist/types-WQSk1Qs2.d.cts +0 -238
  127. package/dist/types-WQSk1Qs2.d.ts +0 -238
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/HoloScriptCodeParser.ts"],"names":["exports"],"mappings":"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","file":"chunk-723TPVHD.js","sourcesContent":["/**\n * HoloScript Code Parser\n *\n * Parses HoloScript code strings into AST nodes that can be executed\n * by the HoloScriptRuntime.\n *\n * Syntax Reference:\n * - orb <name> { properties }\n * - function <name>(<params>): <return> { body }\n * - connect <from> to <to> [as <type>]\n * - gate <name> { condition, true_path, false_path }\n * - stream <name> from <source> { transformations }\n */\n\nimport { logger } from './logger';\nimport type {\n ASTNode,\n OrbNode,\n MethodNode,\n ParameterNode,\n ConnectionNode,\n GateNode,\n StreamNode,\n SpatialPosition,\n HologramProperties,\n ForLoopNode,\n WhileLoopNode,\n ForEachLoopNode,\n ImportNode,\n ExportNode,\n VariableDeclarationNode,\n DataCellNode,\n DataCellType,\n DataZoneNode,\n} from './types';\n\n// Security configuration\nconst CODE_SECURITY_CONFIG = {\n maxCodeLength: 50000,\n maxBlocks: 100,\n maxNestingDepth: 10,\n suspiciousKeywords: [\n 'process', 'require', 'eval', 'import', 'constructor',\n 'prototype', '__proto__', 'fs', 'child_process', 'exec', 'spawn',\n ],\n};\n\nexport interface ParseResult {\n success: boolean;\n ast: ASTNode[];\n errors: ParseError[];\n warnings: string[];\n}\n\nexport interface ParseError {\n line: number;\n column: number;\n message: string;\n}\n\ninterface Token {\n type: 'keyword' | 'identifier' | 'number' | 'string' | 'operator' | 'punctuation' | 'newline';\n value: string;\n line: number;\n column: number;\n}\n\nexport class HoloScriptCodeParser {\n private errors: ParseError[] = [];\n private warnings: string[] = [];\n private tokens: Token[] = [];\n private position: number = 0;\n\n /**\n * Parse HoloScript code string into AST\n */\n parse(code: string): ParseResult {\n this.errors = [];\n this.warnings = [];\n this.tokens = [];\n this.position = 0;\n\n // Security: Check code length\n if (code.length > CODE_SECURITY_CONFIG.maxCodeLength) {\n return {\n success: false,\n ast: [],\n errors: [{ line: 0, column: 0, message: `Code exceeds max length (${CODE_SECURITY_CONFIG.maxCodeLength})` }],\n warnings: [],\n };\n }\n\n // Security: Check for suspicious keywords\n for (const keyword of CODE_SECURITY_CONFIG.suspiciousKeywords) {\n if (code.toLowerCase().includes(keyword)) {\n logger.warn('Suspicious keyword detected', { keyword });\n return {\n success: false,\n ast: [],\n errors: [{ line: 0, column: 0, message: `Suspicious keyword detected: ${keyword}` }],\n warnings: [],\n };\n }\n }\n\n try {\n // Tokenize\n this.tokens = this.tokenize(code);\n\n // Parse tokens into AST\n const ast = this.parseProgram();\n\n return {\n success: this.errors.length === 0,\n ast,\n errors: this.errors,\n warnings: this.warnings,\n };\n } catch (error) {\n return {\n success: false,\n ast: [],\n errors: [{ line: 0, column: 0, message: String(error) }],\n warnings: this.warnings,\n };\n }\n }\n\n /**\n * Tokenize code into tokens\n */\n private tokenize(code: string): Token[] {\n const tokens: Token[] = [];\n let line = 1;\n let column = 1;\n let i = 0;\n\n const keywords = [\n 'orb', 'function', 'connect', 'to', 'as', 'gate', 'stream', 'from', 'through', 'return',\n 'if', 'else', 'nexus', 'building', 'pillar', 'foundation',\n // Phase 2: Loop constructs\n 'for', 'while', 'forEach', 'in', 'of', 'break', 'continue',\n // Phase 2: Module system\n 'import', 'export', 'module', 'use',\n // Phase 2: Type system\n 'type', 'interface', 'extends', 'implements',\n // Phase 2: Async\n 'async', 'await', 'spawn', 'parallel',\n // Phase 2: Object-oriented\n 'class', 'new', 'this', 'super', 'static', 'private', 'public',\n // Phase 2: Error handling\n 'try', 'catch', 'finally', 'throw',\n // Phase 2: Constants\n 'const', 'let', 'var',\n // Phase B: Data cells\n 'data_cell', 'data_zone', 'data_source', 'refresh', 'position_offset', 'props',\n ];\n\n while (i < code.length) {\n const char = code[i];\n\n // Skip whitespace (except newlines)\n if (char === ' ' || char === '\\t' || char === '\\r') {\n i++;\n column++;\n continue;\n }\n\n // Newline\n if (char === '\\n') {\n tokens.push({ type: 'newline', value: '\\n', line, column });\n line++;\n column = 1;\n i++;\n continue;\n }\n\n // Comments (skip)\n if (char === '/' && code[i + 1] === '/') {\n while (i < code.length && code[i] !== '\\n') {\n i++;\n }\n continue;\n }\n\n // String\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let str = '';\n const startCol = column;\n i++;\n column++;\n\n while (i < code.length && code[i] !== quote) {\n if (code[i] === '\\\\' && i + 1 < code.length) {\n str += code[i + 1];\n i += 2;\n column += 2;\n } else {\n str += code[i];\n i++;\n column++;\n }\n }\n\n i++; // Skip closing quote\n column++;\n\n tokens.push({ type: 'string', value: str, line, column: startCol });\n continue;\n }\n\n // Number\n if (/[0-9]/.test(char) || (char === '-' && /[0-9]/.test(code[i + 1]))) {\n let num = '';\n const startCol = column;\n\n while (i < code.length && /[0-9.\\-]/.test(code[i])) {\n num += code[i];\n i++;\n column++;\n }\n\n tokens.push({ type: 'number', value: num, line, column: startCol });\n continue;\n }\n\n // Identifier or keyword\n if (/[a-zA-Z_]/.test(char)) {\n let ident = '';\n const startCol = column;\n\n while (i < code.length && /[a-zA-Z0-9_]/.test(code[i])) {\n ident += code[i];\n i++;\n column++;\n }\n\n const isKeyword = keywords.includes(ident.toLowerCase());\n tokens.push({\n type: isKeyword ? 'keyword' : 'identifier',\n value: ident,\n line,\n column: startCol,\n });\n continue;\n }\n\n // Multi-character operators (must check before single-char)\n const multiCharOps = ['===', '!==', '==', '!=', '>=', '<=', '&&', '||', '++', '--', '+=', '-=', '*=', '/=', '%=', '=>', '->'];\n let foundMultiOp = false;\n for (const op of multiCharOps) {\n if (code.substring(i, i + op.length) === op) {\n tokens.push({ type: 'operator', value: op, line, column });\n i += op.length;\n column += op.length;\n foundMultiOp = true;\n break;\n }\n }\n if (foundMultiOp) continue;\n\n // Operators and punctuation\n const punctuation = ['{', '}', '(', ')', '[', ']', ':', ',', '.', ';', '=', '<', '>', '+', '-', '*', '/', '%', '!', '&', '|', '?'];\n if (punctuation.includes(char)) {\n tokens.push({ type: 'punctuation', value: char, line, column });\n i++;\n column++;\n continue;\n }\n\n // Unknown character - skip\n i++;\n column++;\n }\n\n return tokens;\n }\n\n /**\n * Parse program (list of declarations)\n */\n private parseProgram(): ASTNode[] {\n const nodes: ASTNode[] = [];\n let blockCount = 0;\n\n while (this.position < this.tokens.length) {\n // Skip newlines\n while (this.currentToken()?.type === 'newline') {\n this.advance();\n }\n\n if (this.position >= this.tokens.length) break;\n\n // Security: limit blocks\n blockCount++;\n if (blockCount > CODE_SECURITY_CONFIG.maxBlocks) {\n this.errors.push({ line: 0, column: 0, message: 'Too many blocks in program' });\n break;\n }\n\n const node = this.parseDeclaration();\n if (node) {\n nodes.push(node);\n }\n }\n\n return nodes;\n }\n\n /**\n * Parse a single declaration\n */\n private parseDeclaration(): ASTNode | null {\n const token = this.currentToken();\n if (!token) return null;\n\n if (token.type === 'keyword') {\n switch (token.value.toLowerCase()) {\n case 'orb':\n return this.parseOrb();\n case 'function':\n return this.parseFunction();\n case 'connect':\n return this.parseConnection();\n case 'gate':\n case 'if':\n return this.parseGate();\n case 'stream':\n return this.parseStream();\n case 'nexus':\n return this.parseNexus();\n case 'building':\n case 'class':\n return this.parseBuilding();\n // Phase 2: Loop constructs\n case 'for':\n return this.parseForLoop();\n case 'while':\n return this.parseWhileLoop();\n case 'foreach':\n return this.parseForEachLoop();\n // Phase 2: Module system\n case 'import':\n return this.parseImport();\n case 'export':\n return this.parseExport();\n // Phase 2: Variable declarations\n case 'const':\n case 'let':\n case 'var':\n return this.parseVariableDeclaration();\n // Phase B: Data cells\n case 'data_cell':\n return this.parseDataCell();\n case 'data_zone':\n return this.parseDataZone();\n default:\n this.advance();\n return null;\n }\n }\n\n // Skip unrecognized tokens\n this.advance();\n return null;\n }\n\n /**\n * Parse for loop: for (init; condition; update) { body }\n */\n private parseForLoop(): ForLoopNode | null {\n this.expect('keyword', 'for');\n\n if (!this.check('punctuation', '(')) {\n this.errors.push({ line: 0, column: 0, message: 'Expected ( after for' });\n return null;\n }\n this.advance();\n\n // Parse init, condition, update (simplified - collect as strings)\n let init = '', condition = '', update = '';\n let depth = 0;\n\n // Parse init (until first ;)\n while (this.position < this.tokens.length) {\n const t = this.currentToken();\n if (!t) break;\n if (t.value === ';' && depth === 0) { this.advance(); break; }\n if (t.value === '(') depth++;\n if (t.value === ')') depth--;\n init += t.value + ' ';\n this.advance();\n }\n\n // Parse condition (until second ;)\n depth = 0;\n while (this.position < this.tokens.length) {\n const t = this.currentToken();\n if (!t) break;\n if (t.value === ';' && depth === 0) { this.advance(); break; }\n if (t.value === '(') depth++;\n if (t.value === ')') depth--;\n condition += t.value + ' ';\n this.advance();\n }\n\n // Parse update (until ))\n depth = 0;\n while (this.position < this.tokens.length) {\n const t = this.currentToken();\n if (!t) break;\n if (t.value === ')' && depth === 0) { this.advance(); break; }\n if (t.value === '(') depth++;\n if (t.value === ')') depth--;\n update += t.value + ' ';\n this.advance();\n }\n\n // Parse body\n const body: ASTNode[] = [];\n if (this.check('punctuation', '{')) {\n this.advance();\n let braceDepth = 1;\n while (braceDepth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) braceDepth++;\n if (this.check('punctuation', '}')) braceDepth--;\n this.advance();\n }\n }\n\n return {\n type: 'for-loop',\n init: init.trim(),\n condition: condition.trim(),\n update: update.trim(),\n body,\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n /**\n * Parse while loop: while (condition) { body }\n */\n private parseWhileLoop(): WhileLoopNode | null {\n this.expect('keyword', 'while');\n\n let condition = '';\n if (this.check('punctuation', '(')) {\n this.advance();\n let depth = 1;\n while (depth > 0 && this.position < this.tokens.length) {\n const t = this.currentToken();\n if (!t) break;\n if (t.value === '(') depth++;\n if (t.value === ')') { depth--; if (depth === 0) { this.advance(); break; } }\n condition += t.value + ' ';\n this.advance();\n }\n }\n\n // Parse body\n if (this.check('punctuation', '{')) {\n this.advance();\n let braceDepth = 1;\n while (braceDepth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) braceDepth++;\n if (this.check('punctuation', '}')) braceDepth--;\n this.advance();\n }\n }\n\n return {\n type: 'while-loop',\n condition: condition.trim(),\n body: [],\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n /**\n * Parse forEach loop: forEach item in collection { body }\n */\n private parseForEachLoop(): ForEachLoopNode | null {\n this.expect('keyword', 'forEach');\n\n const variable = this.expectIdentifier();\n this.expect('keyword', 'in');\n const collection = this.expectIdentifier();\n\n // Parse body\n if (this.check('punctuation', '{')) {\n this.advance();\n let braceDepth = 1;\n while (braceDepth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) braceDepth++;\n if (this.check('punctuation', '}')) braceDepth--;\n this.advance();\n }\n }\n\n return {\n type: 'foreach-loop',\n variable: variable || 'item',\n collection: collection || 'items',\n body: [],\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n /**\n * Parse import: import { x, y } from \"module\"\n */\n private parseImport(): ImportNode | null {\n this.expect('keyword', 'import');\n\n const imports: string[] = [];\n let modulePath = '';\n let defaultImport: string | undefined;\n\n // Check for default import or named imports\n if (this.check('punctuation', '{')) {\n this.advance();\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\n const name = this.expectIdentifier();\n if (name) imports.push(name);\n if (this.check('punctuation', ',')) this.advance();\n }\n this.expect('punctuation', '}');\n } else {\n // Default import\n defaultImport = this.expectIdentifier() || undefined;\n }\n\n // from \"module\"\n if (this.check('keyword', 'from')) {\n this.advance();\n const pathToken = this.currentToken();\n if (pathToken?.type === 'string') {\n modulePath = pathToken.value;\n this.advance();\n }\n }\n\n return {\n type: 'import',\n imports,\n defaultImport,\n modulePath,\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n /**\n * Parse export: export { x, y } or export function/orb\n */\n private parseExport(): ExportNode | null {\n this.expect('keyword', 'export');\n\n // Check if exporting a declaration\n const next = this.currentToken();\n if (next?.type === 'keyword') {\n const declaration = this.parseDeclaration();\n return {\n type: 'export',\n declaration: declaration || undefined,\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n // Named exports\n const exports: string[] = [];\n if (this.check('punctuation', '{')) {\n this.advance();\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\n const name = this.expectIdentifier();\n if (name) exports.push(name);\n if (this.check('punctuation', ',')) this.advance();\n }\n this.expect('punctuation', '}');\n }\n\n return {\n type: 'export',\n exports,\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n /**\n * Parse variable declaration: const/let/var name = value\n */\n private parseVariableDeclaration(): VariableDeclarationNode | null {\n const kindToken = this.currentToken()?.value.toLowerCase();\n const kind: 'const' | 'let' | 'var' = kindToken === 'let' ? 'let' : kindToken === 'var' ? 'var' : 'const';\n this.advance();\n\n const name = this.expectIdentifier();\n if (!name) return null;\n\n let dataType: string | undefined;\n if (this.check('punctuation', ':')) {\n this.advance();\n dataType = this.expectIdentifier() || undefined;\n }\n\n let value: unknown;\n if (this.check('punctuation', '=')) {\n this.advance();\n const valueToken = this.currentToken();\n if (valueToken?.type === 'string') {\n value = valueToken.value;\n this.advance();\n } else if (valueToken?.type === 'number') {\n value = parseFloat(valueToken.value);\n this.advance();\n } else if (valueToken?.type === 'identifier') {\n if (valueToken.value === 'true') value = true;\n else if (valueToken.value === 'false') value = false;\n else value = valueToken.value;\n this.advance();\n } else if (this.check('punctuation', '[')) {\n value = this.parseArray();\n } else if (this.check('punctuation', '{')) {\n value = this.parseObject();\n }\n }\n\n return {\n type: 'variable-declaration',\n kind,\n name,\n dataType,\n value,\n position: { x: 0, y: 0, z: 0 },\n };\n }\n\n /**\n * Parse data_cell declaration\n *\n * Syntax:\n * data_cell {\n * type: \"metric\"\n * data_source: \"/api/cpu\"\n * refresh: 5s\n * position_offset: [0, 1, 0]\n * props: {\n * label: \"CPU Usage\"\n * style: { color: \"#00ffff\", glow: 0.5 }\n * }\n * }\n */\n private parseDataCell(): DataCellNode | null {\n const startToken = this.currentToken();\n this.expect('keyword', 'data_cell');\n\n const node: DataCellNode = {\n type: 'data_cell',\n cellType: 'text',\n props: {},\n position: { x: 0, y: 0, z: 0 },\n line: startToken?.line,\n column: startToken?.column,\n };\n\n if (this.check('punctuation', '{')) {\n this.advance();\n\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\n this.skipNewlines();\n if (this.check('punctuation', '}')) break;\n\n const prop = this.parseProperty();\n if (prop) {\n switch (prop.key) {\n case 'type':\n node.cellType = prop.value as DataCellType;\n break;\n case 'data_source':\n node.dataSource = String(prop.value);\n break;\n case 'refresh':\n // Handle \"5s\" or \"300ms\" format\n const refreshStr = String(prop.value);\n if (refreshStr.endsWith('ms')) {\n node.refresh = parseInt(refreshStr.replace('ms', ''), 10) / 1000;\n } else if (refreshStr.endsWith('s')) {\n node.refresh = parseInt(refreshStr.replace('s', ''), 10);\n } else {\n node.refresh = parseFloat(refreshStr);\n }\n break;\n case 'position_offset':\n if (Array.isArray(prop.value) && prop.value.length === 3) {\n node.positionOffset = prop.value.map(Number) as [number, number, number];\n }\n break;\n case 'position':\n if (Array.isArray(prop.value) && prop.value.length === 3) {\n node.position = {\n x: Number(prop.value[0]),\n y: Number(prop.value[1]),\n z: Number(prop.value[2]),\n };\n } else if (typeof prop.value === 'object') {\n node.position = this.parsePosition(prop.value);\n }\n break;\n case 'props':\n if (typeof prop.value === 'object' && prop.value !== null) {\n node.props = { ...node.props, ...prop.value as Record<string, unknown> };\n }\n break;\n default:\n // Add other properties to props\n node.props[prop.key] = prop.value;\n }\n }\n\n this.skipNewlines();\n }\n\n this.expect('punctuation', '}');\n }\n\n return node;\n }\n\n /**\n * Parse data_zone declaration containing multiple data_cells\n *\n * Syntax:\n * data_zone bridge_metrics {\n * position: [0, 2, 0]\n * orientation: face_captain\n *\n * data_cell { ... }\n * data_cell { ... }\n * }\n */\n private parseDataZone(): DataZoneNode | null {\n const startToken = this.currentToken();\n this.expect('keyword', 'data_zone');\n\n const name = this.expectIdentifier();\n if (!name) return null;\n\n const node: DataZoneNode = {\n type: 'data_zone',\n name,\n cells: [],\n position: { x: 0, y: 0, z: 0 },\n line: startToken?.line,\n column: startToken?.column,\n };\n\n if (this.check('punctuation', '{')) {\n this.advance();\n\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\n this.skipNewlines();\n if (this.check('punctuation', '}')) break;\n\n // Check for nested data_cell\n if (this.check('keyword', 'data_cell')) {\n const cell = this.parseDataCell();\n if (cell) {\n node.cells.push(cell);\n }\n } else {\n // Parse zone-level properties\n const prop = this.parseProperty();\n if (prop) {\n switch (prop.key) {\n case 'position':\n if (Array.isArray(prop.value) && prop.value.length === 3) {\n node.position = {\n x: Number(prop.value[0]),\n y: Number(prop.value[1]),\n z: Number(prop.value[2]),\n };\n } else if (typeof prop.value === 'object') {\n node.position = this.parsePosition(prop.value);\n }\n break;\n case 'orientation':\n node.orientation = String(prop.value);\n break;\n }\n }\n }\n\n this.skipNewlines();\n }\n\n this.expect('punctuation', '}');\n }\n\n return node;\n }\n\n /**\n * Parse orb declaration\n */\n private parseOrb(): OrbNode | null {\n this.expect('keyword', 'orb');\n const name = this.expectIdentifier();\n if (!name) return null;\n\n const properties: Record<string, unknown> = {};\n let position: SpatialPosition | undefined;\n let hologram: HologramProperties | undefined;\n\n if (this.check('punctuation', '{')) {\n this.advance(); // {\n\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\n this.skipNewlines();\n if (this.check('punctuation', '}')) break;\n\n const prop = this.parseProperty();\n if (prop) {\n // Handle special properties\n if (prop.key === 'position' || prop.key === 'at') {\n position = this.parsePosition(prop.value);\n } else if (prop.key === 'color' || prop.key === 'glow' || prop.key === 'size') {\n hologram = hologram || { shape: 'orb', color: '#00ffff', size: 1, glow: true, interactive: true };\n if (prop.key === 'color') hologram.color = String(prop.value);\n if (prop.key === 'glow') hologram.glow = Boolean(prop.value);\n if (prop.key === 'size') hologram.size = Number(prop.value);\n } else {\n properties[prop.key] = prop.value;\n }\n }\n\n this.skipNewlines();\n }\n\n this.expect('punctuation', '}');\n }\n\n return {\n type: 'orb',\n name,\n position: position || { x: 0, y: 0, z: 0 },\n hologram: hologram || { shape: 'orb', color: '#00ffff', size: 1, glow: true, interactive: true },\n properties,\n methods: [],\n };\n }\n\n /**\n * Parse function declaration\n */\n private parseFunction(): MethodNode | null {\n this.expect('keyword', 'function');\n const name = this.expectIdentifier();\n if (!name) return null;\n\n const parameters: ParameterNode[] = [];\n let returnType: string | undefined;\n\n // Parse parameters\n if (this.check('punctuation', '(')) {\n this.advance(); // (\n\n while (!this.check('punctuation', ')') && this.position < this.tokens.length) {\n const paramName = this.expectIdentifier();\n if (!paramName) break;\n\n let paramType = 'any';\n if (this.check('punctuation', ':')) {\n this.advance(); // :\n paramType = this.expectIdentifier() || 'any';\n }\n\n parameters.push({\n type: 'parameter',\n name: paramName,\n dataType: paramType,\n });\n\n if (this.check('punctuation', ',')) {\n this.advance();\n }\n }\n\n this.expect('punctuation', ')');\n }\n\n // Parse return type\n if (this.check('punctuation', ':')) {\n this.advance();\n returnType = this.expectIdentifier() || undefined;\n }\n\n // Parse body\n const body: ASTNode[] = [];\n if (this.check('punctuation', '{')) {\n this.advance(); // {\n // Skip body parsing for now - just find closing brace\n let depth = 1;\n while (depth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) depth++;\n if (this.check('punctuation', '}')) depth--;\n this.advance();\n }\n }\n\n return {\n type: 'method',\n name,\n parameters,\n body,\n returnType,\n position: { x: 0, y: 0, z: 0 },\n hologram: { shape: 'cube', color: '#ff6b35', size: 1.5, glow: true, interactive: true },\n };\n }\n\n /**\n * Parse connection\n */\n private parseConnection(): ConnectionNode | null {\n this.expect('keyword', 'connect');\n const from = this.expectIdentifier();\n if (!from) return null;\n\n this.expect('keyword', 'to');\n const to = this.expectIdentifier();\n if (!to) return null;\n\n let dataType = 'any';\n if (this.check('keyword', 'as')) {\n this.advance();\n const typeStr = this.currentToken();\n if (typeStr?.type === 'string' || typeStr?.type === 'identifier') {\n dataType = typeStr.value;\n this.advance();\n }\n }\n\n return {\n type: 'connection',\n from,\n to,\n dataType,\n bidirectional: false,\n };\n }\n\n /**\n * Parse gate (conditional)\n */\n private parseGate(): GateNode | null {\n this.expect('keyword', 'gate');\n this.expectIdentifier(); // Gate name (consumed but not currently stored)\n\n let condition = '';\n if (this.check('punctuation', '(')) {\n this.advance();\n // Parse condition expression\n while (!this.check('punctuation', ')') && this.position < this.tokens.length) {\n const token = this.currentToken();\n if (token) condition += token.value + ' ';\n this.advance();\n }\n this.expect('punctuation', ')');\n }\n\n // Parse body if present\n if (this.check('punctuation', '{')) {\n this.advance();\n let depth = 1;\n while (depth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) depth++;\n if (this.check('punctuation', '}')) depth--;\n this.advance();\n }\n }\n\n return {\n type: 'gate',\n condition: condition.trim(),\n truePath: [],\n falsePath: [],\n position: { x: 0, y: 0, z: 0 },\n hologram: { shape: 'pyramid', color: '#4ecdc4', size: 1, glow: true, interactive: true },\n };\n }\n\n /**\n * Parse stream\n */\n private parseStream(): StreamNode | null {\n this.expect('keyword', 'stream');\n const name = this.expectIdentifier();\n if (!name) return null;\n\n let source = 'unknown';\n if (this.check('keyword', 'from')) {\n this.advance();\n source = this.expectIdentifier() || 'unknown';\n }\n\n // Parse body if present\n if (this.check('punctuation', '{')) {\n this.advance();\n let depth = 1;\n while (depth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) depth++;\n if (this.check('punctuation', '}')) depth--;\n this.advance();\n }\n }\n\n return {\n type: 'stream',\n name,\n source,\n transformations: [],\n position: { x: 0, y: 0, z: 0 },\n hologram: { shape: 'cylinder', color: '#45b7d1', size: 2, glow: true, interactive: true },\n };\n }\n\n /**\n * Parse nexus (multi-agent hub)\n */\n private parseNexus(): ASTNode | null {\n this.expect('keyword', 'nexus');\n const name = this.expectIdentifier();\n if (!name) return null;\n\n if (this.check('punctuation', '{')) {\n this.advance();\n let depth = 1;\n while (depth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) depth++;\n if (this.check('punctuation', '}')) depth--;\n this.advance();\n }\n }\n\n return {\n type: 'nexus',\n position: { x: 0, y: 0, z: 0 },\n hologram: { shape: 'sphere', color: '#9b59b6', size: 3, glow: true, interactive: true },\n };\n }\n\n /**\n * Parse building (class-like)\n */\n private parseBuilding(): ASTNode | null {\n this.expect('keyword', 'building');\n const name = this.expectIdentifier();\n if (!name) return null;\n\n if (this.check('punctuation', '{')) {\n this.advance();\n let depth = 1;\n while (depth > 0 && this.position < this.tokens.length) {\n if (this.check('punctuation', '{')) depth++;\n if (this.check('punctuation', '}')) depth--;\n this.advance();\n }\n }\n\n return {\n type: 'building',\n position: { x: 0, y: 0, z: 0 },\n hologram: { shape: 'cube', color: '#e74c3c', size: 4, glow: true, interactive: true },\n };\n }\n\n /**\n * Parse a property (key: value)\n */\n private parseProperty(): { key: string; value: unknown } | null {\n const key = this.expectIdentifier();\n if (!key) return null;\n\n if (!this.check('punctuation', ':')) {\n return { key, value: true }; // Flag-style property\n }\n\n this.advance(); // :\n\n const valueToken = this.currentToken();\n if (!valueToken) return null;\n\n let value: unknown;\n if (valueToken.type === 'string') {\n value = valueToken.value;\n this.advance();\n } else if (valueToken.type === 'number') {\n value = parseFloat(valueToken.value);\n this.advance();\n } else if (valueToken.type === 'identifier') {\n if (valueToken.value === 'true') value = true;\n else if (valueToken.value === 'false') value = false;\n else value = valueToken.value;\n this.advance();\n } else if (this.check('punctuation', '[')) {\n value = this.parseArray();\n } else if (this.check('punctuation', '{')) {\n value = this.parseObject();\n } else {\n value = valueToken.value;\n this.advance();\n }\n\n return { key, value };\n }\n\n /**\n * Parse array [...]\n */\n private parseArray(): unknown[] {\n const arr: unknown[] = [];\n this.expect('punctuation', '[');\n\n while (!this.check('punctuation', ']') && this.position < this.tokens.length) {\n const token = this.currentToken();\n if (token?.type === 'string' || token?.type === 'number' || token?.type === 'identifier') {\n if (token.type === 'number') {\n arr.push(parseFloat(token.value));\n } else {\n arr.push(token.value);\n }\n this.advance();\n }\n\n if (this.check('punctuation', ',')) {\n this.advance();\n }\n }\n\n this.expect('punctuation', ']');\n return arr;\n }\n\n /**\n * Parse object {...}\n */\n private parseObject(): Record<string, unknown> {\n const obj: Record<string, unknown> = {};\n this.expect('punctuation', '{');\n\n while (!this.check('punctuation', '}') && this.position < this.tokens.length) {\n this.skipNewlines();\n if (this.check('punctuation', '}')) break;\n\n const prop = this.parseProperty();\n if (prop) {\n obj[prop.key] = prop.value;\n }\n\n this.skipNewlines();\n if (this.check('punctuation', ',')) {\n this.advance();\n }\n }\n\n this.expect('punctuation', '}');\n return obj;\n }\n\n /**\n * Parse position from value\n */\n private parsePosition(value: unknown): SpatialPosition {\n if (typeof value === 'object' && value !== null) {\n const v = value as Record<string, unknown>;\n return {\n x: Number(v.x) || 0,\n y: Number(v.y) || 0,\n z: Number(v.z) || 0,\n };\n }\n return { x: 0, y: 0, z: 0 };\n }\n\n // Helper methods\n\n private currentToken(): Token | undefined {\n return this.tokens[this.position];\n }\n\n private advance(): Token | undefined {\n return this.tokens[this.position++];\n }\n\n private check(type: string, value?: string): boolean {\n const token = this.currentToken();\n if (!token) return false;\n if (token.type !== type) return false;\n if (value !== undefined && token.value.toLowerCase() !== value.toLowerCase()) return false;\n return true;\n }\n\n private expect(type: string, value?: string): boolean {\n if (this.check(type, value)) {\n this.advance();\n return true;\n }\n const token = this.currentToken();\n this.errors.push({\n line: token?.line || 0,\n column: token?.column || 0,\n message: `Expected ${type}${value ? ` '${value}'` : ''}, got ${token?.type || 'EOF'} '${token?.value || ''}'`,\n });\n return false;\n }\n\n private expectIdentifier(): string | null {\n const token = this.currentToken();\n if (token?.type === 'identifier' || token?.type === 'keyword') {\n this.advance();\n return token.value;\n }\n this.errors.push({\n line: token?.line || 0,\n column: token?.column || 0,\n message: `Expected identifier, got ${token?.type || 'EOF'}`,\n });\n return null;\n }\n\n private skipNewlines(): void {\n while (this.currentToken()?.type === 'newline') {\n this.advance();\n }\n }\n}\n"]}
@@ -1,424 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkXRYTSQHZ_cjs = require('./chunk-XRYTSQHZ.cjs');
4
- var chunkVV3UUUYP_cjs = require('./chunk-VV3UUUYP.cjs');
5
-
6
- // src/HoloScriptDebugger.ts
7
- var HoloScriptDebugger = class {
8
- constructor(runtime) {
9
- this.breakpoints = /* @__PURE__ */ new Map();
10
- this.callStack = [];
11
- this.currentAST = [];
12
- this.currentNodeIndex = 0;
13
- this.frameIdCounter = 0;
14
- this.breakpointIdCounter = 0;
15
- this.eventHandlers = /* @__PURE__ */ new Map();
16
- this.state = {
17
- status: "stopped",
18
- currentLine: 0,
19
- currentColumn: 0,
20
- currentNode: null,
21
- callStack: [],
22
- breakpoints: []
23
- };
24
- this.runtime = runtime || new chunkVV3UUUYP_cjs.HoloScriptRuntime();
25
- this.parser = new chunkXRYTSQHZ_cjs.HoloScriptCodeParser();
26
- }
27
- /**
28
- * Load source code for debugging
29
- */
30
- loadSource(code, file) {
31
- const parseResult = this.parser.parse(code);
32
- if (!parseResult.success) {
33
- return {
34
- success: false,
35
- errors: parseResult.errors.map((e) => `Line ${e.line}: ${e.message}`)
36
- };
37
- }
38
- this.currentAST = parseResult.ast;
39
- this.currentNodeIndex = 0;
40
- this.state.status = "stopped";
41
- this.callStack = [];
42
- if (file) {
43
- for (const node of this.currentAST) {
44
- node.file = file;
45
- }
46
- }
47
- return { success: true };
48
- }
49
- /**
50
- * Set a breakpoint at a line
51
- */
52
- setBreakpoint(line, options = {}) {
53
- const id = `bp_${++this.breakpointIdCounter}`;
54
- const breakpoint = {
55
- id,
56
- line,
57
- column: options.column,
58
- condition: options.condition,
59
- hitCount: 0,
60
- enabled: options.enabled !== false,
61
- file: options.file
62
- };
63
- this.breakpoints.set(id, breakpoint);
64
- this.updateBreakpointList();
65
- return breakpoint;
66
- }
67
- /**
68
- * Remove a breakpoint by ID
69
- */
70
- removeBreakpoint(id) {
71
- const removed = this.breakpoints.delete(id);
72
- if (removed) {
73
- this.updateBreakpointList();
74
- }
75
- return removed;
76
- }
77
- /**
78
- * Remove all breakpoints at a line
79
- */
80
- removeBreakpointsAtLine(line) {
81
- let removed = 0;
82
- for (const [id, bp] of this.breakpoints) {
83
- if (bp.line === line) {
84
- this.breakpoints.delete(id);
85
- removed++;
86
- }
87
- }
88
- if (removed > 0) {
89
- this.updateBreakpointList();
90
- }
91
- return removed;
92
- }
93
- /**
94
- * Toggle breakpoint enabled state
95
- */
96
- toggleBreakpoint(id) {
97
- const bp = this.breakpoints.get(id);
98
- if (bp) {
99
- bp.enabled = !bp.enabled;
100
- this.updateBreakpointList();
101
- return bp.enabled;
102
- }
103
- return false;
104
- }
105
- /**
106
- * Get all breakpoints
107
- */
108
- getBreakpoints() {
109
- return Array.from(this.breakpoints.values());
110
- }
111
- /**
112
- * Clear all breakpoints
113
- */
114
- clearBreakpoints() {
115
- this.breakpoints.clear();
116
- this.updateBreakpointList();
117
- }
118
- /**
119
- * Start debugging from the beginning
120
- */
121
- async start() {
122
- this.currentNodeIndex = 0;
123
- this.callStack = [];
124
- this.frameIdCounter = 0;
125
- this.runtime.reset();
126
- this.state.status = "running";
127
- await this.runUntilBreakpoint();
128
- }
129
- /**
130
- * Continue execution until next breakpoint or end
131
- */
132
- async continue() {
133
- if (this.state.status !== "paused") return;
134
- this.state.status = "running";
135
- this.currentNodeIndex++;
136
- await this.runUntilBreakpoint();
137
- }
138
- /**
139
- * Step into the next node
140
- */
141
- async stepInto() {
142
- if (this.state.status !== "paused") return;
143
- this.state.status = "stepping";
144
- await this.executeStep("into");
145
- }
146
- /**
147
- * Step over the current node
148
- */
149
- async stepOver() {
150
- if (this.state.status !== "paused") return;
151
- this.state.status = "stepping";
152
- await this.executeStep("over");
153
- }
154
- /**
155
- * Step out of the current function
156
- */
157
- async stepOut() {
158
- if (this.state.status !== "paused") return;
159
- this.state.status = "stepping";
160
- await this.executeStep("out");
161
- }
162
- /**
163
- * Stop debugging
164
- */
165
- stop() {
166
- this.state.status = "stopped";
167
- this.callStack = [];
168
- this.currentNodeIndex = 0;
169
- this.emitEvent({ type: "state-change", data: { status: "stopped" } });
170
- }
171
- /**
172
- * Pause execution
173
- */
174
- pause() {
175
- if (this.state.status === "running") {
176
- this.state.status = "paused";
177
- this.emitEvent({ type: "state-change", data: { status: "paused" } });
178
- }
179
- }
180
- /**
181
- * Get current debug state
182
- */
183
- getState() {
184
- return { ...this.state };
185
- }
186
- /**
187
- * Get call stack
188
- */
189
- getCallStack() {
190
- return [...this.callStack];
191
- }
192
- /**
193
- * Get variables at a specific stack frame
194
- */
195
- getVariables(frameId) {
196
- if (frameId !== void 0) {
197
- const frame = this.callStack.find((f) => f.id === frameId);
198
- return frame?.variables || /* @__PURE__ */ new Map();
199
- }
200
- return new Map(this.runtime.getContext().variables);
201
- }
202
- /**
203
- * Evaluate an expression in the current context
204
- */
205
- async evaluate(expression) {
206
- try {
207
- const varValue = this.runtime.getVariable(expression);
208
- if (varValue !== void 0) {
209
- return { value: varValue };
210
- }
211
- const parseResult = this.parser.parse(expression);
212
- if (!parseResult.success) {
213
- return { value: void 0, error: parseResult.errors[0]?.message };
214
- }
215
- const results = await this.runtime.executeProgram(parseResult.ast);
216
- const lastResult = results[results.length - 1];
217
- return { value: lastResult?.output };
218
- } catch (error) {
219
- return { value: void 0, error: String(error) };
220
- }
221
- }
222
- /**
223
- * Set a watch expression
224
- */
225
- watch(expression) {
226
- const id = `watch_${Date.now()}`;
227
- return { id, expression };
228
- }
229
- /**
230
- * Register an event handler
231
- */
232
- on(event, handler) {
233
- if (!this.eventHandlers.has(event)) {
234
- this.eventHandlers.set(event, []);
235
- }
236
- this.eventHandlers.get(event).push(handler);
237
- }
238
- /**
239
- * Remove an event handler
240
- */
241
- off(event, handler) {
242
- const handlers = this.eventHandlers.get(event);
243
- if (handlers) {
244
- const index = handlers.indexOf(handler);
245
- if (index !== -1) {
246
- handlers.splice(index, 1);
247
- }
248
- }
249
- }
250
- /**
251
- * Get the underlying runtime
252
- */
253
- getRuntime() {
254
- return this.runtime;
255
- }
256
- // Private methods
257
- async runUntilBreakpoint() {
258
- while (this.currentNodeIndex < this.currentAST.length) {
259
- if (this.state.status === "stopped") break;
260
- const node = this.currentAST[this.currentNodeIndex];
261
- if (this.shouldBreakAt(node)) {
262
- this.state.status = "paused";
263
- this.updateCurrentState(node);
264
- const bp = this.findBreakpointAtLine(node.line ?? 0);
265
- if (bp) {
266
- bp.hitCount++;
267
- this.emitEvent({
268
- type: "breakpoint-hit",
269
- data: { breakpoint: bp, node, line: node.line ?? 0 }
270
- });
271
- }
272
- return;
273
- }
274
- await this.executeNode(node);
275
- this.currentNodeIndex++;
276
- }
277
- this.state.status = "stopped";
278
- this.emitEvent({ type: "state-change", data: { status: "stopped", reason: "complete" } });
279
- }
280
- async executeStep(mode) {
281
- const startStackDepth = this.callStack.length;
282
- if (this.currentNodeIndex >= this.currentAST.length) {
283
- this.state.status = "stopped";
284
- return;
285
- }
286
- const node = this.currentAST[this.currentNodeIndex];
287
- switch (mode) {
288
- case "into":
289
- await this.executeNode(node);
290
- this.currentNodeIndex++;
291
- break;
292
- case "over":
293
- await this.executeNode(node);
294
- this.currentNodeIndex++;
295
- break;
296
- case "out":
297
- while (this.currentNodeIndex < this.currentAST.length) {
298
- await this.executeNode(this.currentAST[this.currentNodeIndex]);
299
- this.currentNodeIndex++;
300
- if (this.callStack.length < startStackDepth) {
301
- break;
302
- }
303
- }
304
- break;
305
- }
306
- if (this.currentNodeIndex < this.currentAST.length) {
307
- this.state.status = "paused";
308
- this.updateCurrentState(this.currentAST[this.currentNodeIndex]);
309
- this.emitEvent({
310
- type: "step-complete",
311
- data: { mode, node: this.currentAST[this.currentNodeIndex] }
312
- });
313
- } else {
314
- this.state.status = "stopped";
315
- this.emitEvent({ type: "state-change", data: { status: "stopped", reason: "complete" } });
316
- }
317
- }
318
- async executeNode(node) {
319
- if (node.type === "function") {
320
- const funcNode = node;
321
- this.pushStackFrame(funcNode.name, node);
322
- }
323
- try {
324
- const result = await this.runtime.executeNode(node);
325
- if (!result.success && result.error) {
326
- this.emitEvent({
327
- type: "exception",
328
- data: { error: result.error, node, line: node.line }
329
- });
330
- }
331
- if (result.output !== void 0) {
332
- this.emitEvent({
333
- type: "output",
334
- data: { output: result.output, node }
335
- });
336
- }
337
- } catch (error) {
338
- this.emitEvent({
339
- type: "exception",
340
- data: { error: String(error), node, line: node.line }
341
- });
342
- }
343
- if (node.type === "function") {
344
- this.popStackFrame();
345
- }
346
- }
347
- shouldBreakAt(node) {
348
- const line = node.line;
349
- for (const bp of this.breakpoints.values()) {
350
- if (!bp.enabled) continue;
351
- if (bp.line !== line) continue;
352
- if (bp.condition) {
353
- try {
354
- const value = this.runtime.getVariable(bp.condition);
355
- if (!value) continue;
356
- } catch {
357
- continue;
358
- }
359
- }
360
- return true;
361
- }
362
- return false;
363
- }
364
- findBreakpointAtLine(line) {
365
- for (const bp of this.breakpoints.values()) {
366
- if (bp.line === line && bp.enabled) {
367
- return bp;
368
- }
369
- }
370
- return null;
371
- }
372
- pushStackFrame(name, node) {
373
- const frame = {
374
- id: ++this.frameIdCounter,
375
- name,
376
- file: node.file,
377
- line: node.line ?? 0,
378
- column: node.column ?? 0,
379
- variables: new Map(this.runtime.getContext().variables),
380
- node
381
- };
382
- this.callStack.push(frame);
383
- this.state.callStack = [...this.callStack];
384
- }
385
- popStackFrame() {
386
- const frame = this.callStack.pop();
387
- this.state.callStack = [...this.callStack];
388
- return frame;
389
- }
390
- updateCurrentState(node) {
391
- this.state.currentLine = node.line ?? 0;
392
- this.state.currentColumn = node.column ?? 0;
393
- this.state.currentNode = node;
394
- }
395
- updateBreakpointList() {
396
- this.state.breakpoints = Array.from(this.breakpoints.values());
397
- }
398
- emitEvent(event) {
399
- const handlers = this.eventHandlers.get(event.type) || [];
400
- for (const handler of handlers) {
401
- try {
402
- handler(event);
403
- } catch (error) {
404
- console.error("Debug event handler error:", error);
405
- }
406
- }
407
- const allHandlers = this.eventHandlers.get("all") || [];
408
- for (const handler of allHandlers) {
409
- try {
410
- handler(event);
411
- } catch (error) {
412
- console.error("Debug event handler error:", error);
413
- }
414
- }
415
- }
416
- };
417
- function createDebugger(runtime) {
418
- return new HoloScriptDebugger(runtime);
419
- }
420
-
421
- exports.HoloScriptDebugger = HoloScriptDebugger;
422
- exports.createDebugger = createDebugger;
423
- //# sourceMappingURL=chunk-EOKNAVDO.cjs.map
424
- //# sourceMappingURL=chunk-EOKNAVDO.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/HoloScriptDebugger.ts"],"names":["HoloScriptRuntime","HoloScriptCodeParser"],"mappings":"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","file":"chunk-EOKNAVDO.cjs","sourcesContent":["/**\n * HoloScript Debugger\n *\n * Step-through debugging with breakpoints, call stack inspection,\n * and variable watch capabilities.\n */\n\nimport { HoloScriptRuntime } from './HoloScriptRuntime';\nimport { HoloScriptCodeParser } from './HoloScriptCodeParser';\nimport type { ASTNode } from './types';\n\nexport interface Breakpoint {\n id: string;\n line: number;\n column?: number;\n condition?: string;\n hitCount: number;\n enabled: boolean;\n file?: string;\n}\n\nexport interface StackFrame {\n id: number;\n name: string;\n file?: string;\n line: number;\n column: number;\n variables: Map<string, unknown>;\n node: ASTNode;\n}\n\nexport interface DebugState {\n status: 'running' | 'paused' | 'stopped' | 'stepping';\n currentLine: number;\n currentColumn: number;\n currentNode: ASTNode | null;\n callStack: StackFrame[];\n breakpoints: Breakpoint[];\n}\n\nexport type StepMode = 'into' | 'over' | 'out';\n\nexport interface DebugEvent {\n type: 'breakpoint-hit' | 'step-complete' | 'exception' | 'output' | 'state-change';\n data: unknown;\n}\n\ntype DebugEventHandler = (event: DebugEvent) => void;\n\n/**\n * HoloScript Debugger with breakpoints and step-through execution\n */\nexport class HoloScriptDebugger {\n private runtime: HoloScriptRuntime;\n private parser: HoloScriptCodeParser;\n private breakpoints: Map<string, Breakpoint> = new Map();\n private callStack: StackFrame[] = [];\n private currentAST: ASTNode[] = [];\n private currentNodeIndex: number = 0;\n private frameIdCounter: number = 0;\n private breakpointIdCounter: number = 0;\n private eventHandlers: Map<string, DebugEventHandler[]> = new Map();\n\n private state: DebugState = {\n status: 'stopped',\n currentLine: 0,\n currentColumn: 0,\n currentNode: null,\n callStack: [],\n breakpoints: [],\n };\n\n constructor(runtime?: HoloScriptRuntime) {\n this.runtime = runtime || new HoloScriptRuntime();\n this.parser = new HoloScriptCodeParser();\n }\n\n /**\n * Load source code for debugging\n */\n loadSource(code: string, file?: string): { success: boolean; errors?: string[] } {\n const parseResult = this.parser.parse(code);\n\n if (!parseResult.success) {\n return {\n success: false,\n errors: parseResult.errors.map(e => `Line ${e.line}: ${e.message}`),\n };\n }\n\n this.currentAST = parseResult.ast;\n this.currentNodeIndex = 0;\n this.state.status = 'stopped';\n this.callStack = [];\n\n // Store file reference in nodes\n if (file) {\n for (const node of this.currentAST) {\n (node as ASTNode & { file?: string }).file = file;\n }\n }\n\n return { success: true };\n }\n\n /**\n * Set a breakpoint at a line\n */\n setBreakpoint(line: number, options: Partial<Breakpoint> = {}): Breakpoint {\n const id = `bp_${++this.breakpointIdCounter}`;\n const breakpoint: Breakpoint = {\n id,\n line,\n column: options.column,\n condition: options.condition,\n hitCount: 0,\n enabled: options.enabled !== false,\n file: options.file,\n };\n\n this.breakpoints.set(id, breakpoint);\n this.updateBreakpointList();\n\n return breakpoint;\n }\n\n /**\n * Remove a breakpoint by ID\n */\n removeBreakpoint(id: string): boolean {\n const removed = this.breakpoints.delete(id);\n if (removed) {\n this.updateBreakpointList();\n }\n return removed;\n }\n\n /**\n * Remove all breakpoints at a line\n */\n removeBreakpointsAtLine(line: number): number {\n let removed = 0;\n for (const [id, bp] of this.breakpoints) {\n if (bp.line === line) {\n this.breakpoints.delete(id);\n removed++;\n }\n }\n if (removed > 0) {\n this.updateBreakpointList();\n }\n return removed;\n }\n\n /**\n * Toggle breakpoint enabled state\n */\n toggleBreakpoint(id: string): boolean {\n const bp = this.breakpoints.get(id);\n if (bp) {\n bp.enabled = !bp.enabled;\n this.updateBreakpointList();\n return bp.enabled;\n }\n return false;\n }\n\n /**\n * Get all breakpoints\n */\n getBreakpoints(): Breakpoint[] {\n return Array.from(this.breakpoints.values());\n }\n\n /**\n * Clear all breakpoints\n */\n clearBreakpoints(): void {\n this.breakpoints.clear();\n this.updateBreakpointList();\n }\n\n /**\n * Start debugging from the beginning\n */\n async start(): Promise<void> {\n this.currentNodeIndex = 0;\n this.callStack = [];\n this.frameIdCounter = 0;\n this.runtime.reset();\n this.state.status = 'running';\n\n await this.runUntilBreakpoint();\n }\n\n /**\n * Continue execution until next breakpoint or end\n */\n async continue(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'running';\n this.currentNodeIndex++;\n await this.runUntilBreakpoint();\n }\n\n /**\n * Step into the next node\n */\n async stepInto(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'stepping';\n await this.executeStep('into');\n }\n\n /**\n * Step over the current node\n */\n async stepOver(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'stepping';\n await this.executeStep('over');\n }\n\n /**\n * Step out of the current function\n */\n async stepOut(): Promise<void> {\n if (this.state.status !== 'paused') return;\n\n this.state.status = 'stepping';\n await this.executeStep('out');\n }\n\n /**\n * Stop debugging\n */\n stop(): void {\n this.state.status = 'stopped';\n this.callStack = [];\n this.currentNodeIndex = 0;\n this.emitEvent({ type: 'state-change', data: { status: 'stopped' } });\n }\n\n /**\n * Pause execution\n */\n pause(): void {\n if (this.state.status === 'running') {\n this.state.status = 'paused';\n this.emitEvent({ type: 'state-change', data: { status: 'paused' } });\n }\n }\n\n /**\n * Get current debug state\n */\n getState(): DebugState {\n return { ...this.state };\n }\n\n /**\n * Get call stack\n */\n getCallStack(): StackFrame[] {\n return [...this.callStack];\n }\n\n /**\n * Get variables at a specific stack frame\n */\n getVariables(frameId?: number): Map<string, unknown> {\n if (frameId !== undefined) {\n const frame = this.callStack.find(f => f.id === frameId);\n return frame?.variables || new Map();\n }\n\n // Return all variables from runtime context\n return new Map(this.runtime.getContext().variables);\n }\n\n /**\n * Evaluate an expression in the current context\n */\n async evaluate(expression: string): Promise<{ value: unknown; error?: string }> {\n try {\n // Try to evaluate as a variable lookup first\n const varValue = this.runtime.getVariable(expression);\n if (varValue !== undefined) {\n return { value: varValue };\n }\n\n // Try to parse and execute as an expression\n const parseResult = this.parser.parse(expression);\n if (!parseResult.success) {\n return { value: undefined, error: parseResult.errors[0]?.message };\n }\n\n // Execute the expression\n const results = await this.runtime.executeProgram(parseResult.ast);\n const lastResult = results[results.length - 1];\n\n return { value: lastResult?.output };\n } catch (error) {\n return { value: undefined, error: String(error) };\n }\n }\n\n /**\n * Set a watch expression\n */\n watch(expression: string): { id: string; expression: string } {\n const id = `watch_${Date.now()}`;\n return { id, expression };\n }\n\n /**\n * Register an event handler\n */\n on(event: string, handler: DebugEventHandler): void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, []);\n }\n this.eventHandlers.get(event)!.push(handler);\n }\n\n /**\n * Remove an event handler\n */\n off(event: string, handler: DebugEventHandler): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n const index = handlers.indexOf(handler);\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n }\n }\n\n /**\n * Get the underlying runtime\n */\n getRuntime(): HoloScriptRuntime {\n return this.runtime;\n }\n\n // Private methods\n\n private async runUntilBreakpoint(): Promise<void> {\n while (this.currentNodeIndex < this.currentAST.length) {\n if (this.state.status === 'stopped') break;\n\n const node = this.currentAST[this.currentNodeIndex];\n\n // Check for breakpoint\n if (this.shouldBreakAt(node)) {\n this.state.status = 'paused';\n this.updateCurrentState(node);\n\n const bp = this.findBreakpointAtLine(node.line ?? 0);\n if (bp) {\n bp.hitCount++;\n this.emitEvent({\n type: 'breakpoint-hit',\n data: { breakpoint: bp, node, line: node.line ?? 0 },\n });\n }\n return;\n }\n\n // Execute the node\n await this.executeNode(node);\n this.currentNodeIndex++;\n }\n\n // Execution complete\n this.state.status = 'stopped';\n this.emitEvent({ type: 'state-change', data: { status: 'stopped', reason: 'complete' } });\n }\n\n private async executeStep(mode: StepMode): Promise<void> {\n const startStackDepth = this.callStack.length;\n\n if (this.currentNodeIndex >= this.currentAST.length) {\n this.state.status = 'stopped';\n return;\n }\n\n const node = this.currentAST[this.currentNodeIndex];\n\n switch (mode) {\n case 'into':\n // Execute one node, stepping into function calls\n await this.executeNode(node);\n this.currentNodeIndex++;\n break;\n\n case 'over':\n // Execute one node, treating function calls as single steps\n await this.executeNode(node);\n this.currentNodeIndex++;\n break;\n\n case 'out':\n // Execute until we leave the current stack frame\n while (this.currentNodeIndex < this.currentAST.length) {\n await this.executeNode(this.currentAST[this.currentNodeIndex]);\n this.currentNodeIndex++;\n\n if (this.callStack.length < startStackDepth) {\n break;\n }\n }\n break;\n }\n\n // Update state after step\n if (this.currentNodeIndex < this.currentAST.length) {\n this.state.status = 'paused';\n this.updateCurrentState(this.currentAST[this.currentNodeIndex]);\n this.emitEvent({\n type: 'step-complete',\n data: { mode, node: this.currentAST[this.currentNodeIndex] },\n });\n } else {\n this.state.status = 'stopped';\n this.emitEvent({ type: 'state-change', data: { status: 'stopped', reason: 'complete' } });\n }\n }\n\n private async executeNode(node: ASTNode): Promise<void> {\n // Push stack frame for functions\n if (node.type === 'function') {\n const funcNode = node as ASTNode & { name: string };\n this.pushStackFrame(funcNode.name, node);\n }\n\n try {\n // Execute via runtime\n const result = await this.runtime.executeNode(node);\n\n if (!result.success && result.error) {\n this.emitEvent({\n type: 'exception',\n data: { error: result.error, node, line: node.line },\n });\n }\n\n if (result.output !== undefined) {\n this.emitEvent({\n type: 'output',\n data: { output: result.output, node },\n });\n }\n } catch (error) {\n this.emitEvent({\n type: 'exception',\n data: { error: String(error), node, line: node.line },\n });\n }\n\n // Pop stack frame when function completes\n if (node.type === 'function') {\n this.popStackFrame();\n }\n }\n\n private shouldBreakAt(node: ASTNode): boolean {\n const line = node.line;\n\n for (const bp of this.breakpoints.values()) {\n if (!bp.enabled) continue;\n if (bp.line !== line) continue;\n\n // Check condition if present\n if (bp.condition) {\n try {\n const value = this.runtime.getVariable(bp.condition);\n if (!value) continue;\n } catch {\n continue;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n private findBreakpointAtLine(line: number): Breakpoint | null {\n for (const bp of this.breakpoints.values()) {\n if (bp.line === line && bp.enabled) {\n return bp;\n }\n }\n return null;\n }\n\n private pushStackFrame(name: string, node: ASTNode): void {\n const frame: StackFrame = {\n id: ++this.frameIdCounter,\n name,\n file: (node as ASTNode & { file?: string }).file,\n line: node.line ?? 0,\n column: node.column ?? 0,\n variables: new Map(this.runtime.getContext().variables),\n node,\n };\n\n this.callStack.push(frame);\n this.state.callStack = [...this.callStack];\n }\n\n private popStackFrame(): StackFrame | undefined {\n const frame = this.callStack.pop();\n this.state.callStack = [...this.callStack];\n return frame;\n }\n\n private updateCurrentState(node: ASTNode): void {\n this.state.currentLine = node.line ?? 0;\n this.state.currentColumn = node.column ?? 0;\n this.state.currentNode = node;\n }\n\n private updateBreakpointList(): void {\n this.state.breakpoints = Array.from(this.breakpoints.values());\n }\n\n private emitEvent(event: DebugEvent): void {\n const handlers = this.eventHandlers.get(event.type) || [];\n for (const handler of handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error('Debug event handler error:', error);\n }\n }\n\n // Also emit to 'all' handlers\n const allHandlers = this.eventHandlers.get('all') || [];\n for (const handler of allHandlers) {\n try {\n handler(event);\n } catch (error) {\n console.error('Debug event handler error:', error);\n }\n }\n }\n}\n\n/**\n * Create a debugger instance\n */\nexport function createDebugger(runtime?: HoloScriptRuntime): HoloScriptDebugger {\n return new HoloScriptDebugger(runtime);\n}\n"]}