@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.
- package/package.json +10 -9
- package/src/HoloScript2DParser.js +227 -0
- package/src/HoloScript2DParser.ts +5 -0
- package/src/HoloScriptCodeParser.js +1102 -0
- package/src/HoloScriptCodeParser.ts +145 -20
- package/src/HoloScriptDebugger.js +458 -0
- package/src/HoloScriptParser.js +338 -0
- package/src/HoloScriptPlusParser.js +371 -0
- package/src/HoloScriptPlusParser.ts +543 -0
- package/src/HoloScriptRuntime.js +1399 -0
- package/src/HoloScriptRuntime.test.js +351 -0
- package/src/HoloScriptRuntime.ts +257 -3
- package/src/HoloScriptTypeChecker.js +356 -0
- package/src/__tests__/GraphicsServices.test.js +357 -0
- package/src/__tests__/GraphicsServices.test.ts +427 -0
- package/src/__tests__/HoloScriptPlusParser.test.js +317 -0
- package/src/__tests__/HoloScriptPlusParser.test.ts +392 -0
- package/src/__tests__/integration.test.js +336 -0
- package/src/__tests__/performance.bench.js +218 -0
- package/src/__tests__/type-checker.test.js +60 -0
- package/src/__tests__/type-checker.test.ts +73 -0
- package/src/index.js +217 -0
- package/src/index.ts +158 -18
- package/src/interop/Interoperability.js +413 -0
- package/src/interop/Interoperability.ts +494 -0
- package/src/logger.js +42 -0
- package/src/parser/EnhancedParser.js +205 -0
- package/src/parser/EnhancedParser.ts +251 -0
- package/src/parser/HoloScriptPlusParser.js +928 -0
- package/src/parser/HoloScriptPlusParser.ts +1089 -0
- package/src/runtime/HoloScriptPlusRuntime.js +674 -0
- package/src/runtime/HoloScriptPlusRuntime.ts +861 -0
- package/src/runtime/PerformanceTelemetry.js +323 -0
- package/src/runtime/PerformanceTelemetry.ts +467 -0
- package/src/runtime/RuntimeOptimization.js +361 -0
- package/src/runtime/RuntimeOptimization.ts +416 -0
- package/src/services/HololandGraphicsPipelineService.js +506 -0
- package/src/services/HololandGraphicsPipelineService.ts +662 -0
- package/src/services/PlatformPerformanceOptimizer.js +356 -0
- package/src/services/PlatformPerformanceOptimizer.ts +503 -0
- package/src/state/ReactiveState.js +427 -0
- package/src/state/ReactiveState.ts +572 -0
- package/src/tools/DeveloperExperience.js +376 -0
- package/src/tools/DeveloperExperience.ts +438 -0
- package/src/traits/AIDriverTrait.js +322 -0
- package/src/traits/AIDriverTrait.test.js +329 -0
- package/src/traits/AIDriverTrait.test.ts +357 -0
- package/src/traits/AIDriverTrait.ts +474 -0
- package/src/traits/LightingTrait.js +313 -0
- package/src/traits/LightingTrait.test.js +410 -0
- package/src/traits/LightingTrait.test.ts +462 -0
- package/src/traits/LightingTrait.ts +505 -0
- package/src/traits/MaterialTrait.js +194 -0
- package/src/traits/MaterialTrait.test.js +286 -0
- package/src/traits/MaterialTrait.test.ts +329 -0
- package/src/traits/MaterialTrait.ts +324 -0
- package/src/traits/RenderingTrait.js +356 -0
- package/src/traits/RenderingTrait.test.js +363 -0
- package/src/traits/RenderingTrait.test.ts +427 -0
- package/src/traits/RenderingTrait.ts +555 -0
- package/src/traits/VRTraitSystem.js +740 -0
- package/src/traits/VRTraitSystem.ts +1040 -0
- package/src/traits/VoiceInputTrait.js +284 -0
- package/src/traits/VoiceInputTrait.test.js +226 -0
- package/src/traits/VoiceInputTrait.test.ts +252 -0
- package/src/traits/VoiceInputTrait.ts +401 -0
- package/src/types/AdvancedTypeSystem.js +226 -0
- package/src/types/AdvancedTypeSystem.ts +494 -0
- package/src/types/HoloScriptPlus.d.ts +853 -0
- package/src/types.js +6 -0
- package/src/types.ts +96 -1
- package/tsconfig.json +1 -1
- package/tsup.config.d.ts +2 -0
- package/tsup.config.js +18 -0
- package/LICENSE +0 -21
- package/dist/chunk-3X2EGU7Z.cjs +0 -52
- package/dist/chunk-3X2EGU7Z.cjs.map +0 -1
- package/dist/chunk-723TPVHD.js +0 -1074
- package/dist/chunk-723TPVHD.js.map +0 -1
- package/dist/chunk-EOKNAVDO.cjs +0 -424
- package/dist/chunk-EOKNAVDO.cjs.map +0 -1
- package/dist/chunk-HQZ3HUMY.js +0 -1087
- package/dist/chunk-HQZ3HUMY.js.map +0 -1
- package/dist/chunk-KWYIVRIH.js +0 -344
- package/dist/chunk-KWYIVRIH.js.map +0 -1
- package/dist/chunk-LKH4ZAN6.js +0 -421
- package/dist/chunk-LKH4ZAN6.js.map +0 -1
- package/dist/chunk-SATNCODL.js +0 -45
- package/dist/chunk-SATNCODL.js.map +0 -1
- package/dist/chunk-VMZN4EVR.cjs +0 -347
- package/dist/chunk-VMZN4EVR.cjs.map +0 -1
- package/dist/chunk-VV3UUUYP.cjs +0 -1089
- package/dist/chunk-VV3UUUYP.cjs.map +0 -1
- package/dist/chunk-XRYTSQHZ.cjs +0 -1076
- package/dist/chunk-XRYTSQHZ.cjs.map +0 -1
- package/dist/debugger.cjs +0 -19
- package/dist/debugger.cjs.map +0 -1
- package/dist/debugger.d.cts +0 -171
- package/dist/debugger.d.ts +0 -171
- package/dist/debugger.js +0 -6
- package/dist/debugger.js.map +0 -1
- package/dist/index.cjs +0 -755
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -169
- package/dist/index.d.ts +0 -169
- package/dist/index.js +0 -699
- package/dist/index.js.map +0 -1
- package/dist/parser.cjs +0 -13
- package/dist/parser.cjs.map +0 -1
- package/dist/parser.d.cts +0 -154
- package/dist/parser.d.ts +0 -154
- package/dist/parser.js +0 -4
- package/dist/parser.js.map +0 -1
- package/dist/runtime.cjs +0 -13
- package/dist/runtime.cjs.map +0 -1
- package/dist/runtime.d.cts +0 -147
- package/dist/runtime.d.ts +0 -147
- package/dist/runtime.js +0 -4
- package/dist/runtime.js.map +0 -1
- package/dist/type-checker.cjs +0 -16
- package/dist/type-checker.cjs.map +0 -1
- package/dist/type-checker.d.cts +0 -105
- package/dist/type-checker.d.ts +0 -105
- package/dist/type-checker.js +0 -3
- package/dist/type-checker.js.map +0 -1
- package/dist/types-WQSk1Qs2.d.cts +0 -238
- 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"]}
|
package/dist/chunk-EOKNAVDO.cjs
DELETED
|
@@ -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"]}
|