@lokascript/compilation-service 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +183 -3
- package/dist/{chunk-LXJYTL2X.js → chunk-5CZBYL6A.js} +2 -2
- package/dist/{chunk-KSCHIK5T.js → chunk-TVK2OFIB.js} +3 -3
- package/dist/{core-parser-adapter-W5UPZR4X-ITTRTOJ2.js → core-parser-adapter-W5UPZR4X-AIVYD5RA.js} +2 -2
- package/dist/dist-GFKFJKU6.js +27074 -0
- package/dist/dist-GFKFJKU6.js.map +1 -0
- package/dist/{dist-XADOFCYJ.js → dist-HDVJKXUX.js} +3 -3
- package/dist/http.cjs +15774 -72242
- package/dist/http.cjs.map +1 -1
- package/dist/http.js +1 -1
- package/dist/index.cjs +15785 -72253
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{multilingual-7ZY36WEO.js → multilingual-VYI3FTN7.js} +104 -100
- package/dist/multilingual-VYI3FTN7.js.map +1 -0
- package/package.json +5 -5
- package/dist/dist-4V3R5I35.js +0 -83958
- package/dist/dist-4V3R5I35.js.map +0 -1
- package/dist/multilingual-7ZY36WEO.js.map +0 -1
- /package/dist/{chunk-LXJYTL2X.js.map → chunk-5CZBYL6A.js.map} +0 -0
- /package/dist/{chunk-KSCHIK5T.js.map → chunk-TVK2OFIB.js.map} +0 -0
- /package/dist/{core-parser-adapter-W5UPZR4X-ITTRTOJ2.js.map → core-parser-adapter-W5UPZR4X-AIVYD5RA.js.map} +0 -0
- /package/dist/{dist-XADOFCYJ.js.map → dist-HDVJKXUX.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/parser/semantic-integration.ts","../../src/utils/debug.ts","../../src/multilingual/bridge.ts","../../intent/dist/index.js","../../src/multilingual/schema-roles.ts","../../src/multilingual/index.ts"],"sourcesContent":[null,null,null,"// src/types.ts\nfunction createLiteral(value, dataType) {\n return dataType ? { type: \"literal\", value, dataType } : { type: \"literal\", value };\n}\nfunction createSelector(value, selectorKind) {\n return selectorKind ? { type: \"selector\", value, selectorKind } : { type: \"selector\", value };\n}\nfunction createReference(value) {\n return { type: \"reference\", value };\n}\nfunction createPropertyPath(object, property) {\n return { type: \"property-path\", object, property };\n}\nfunction createExpression(raw) {\n return { type: \"expression\", raw };\n}\nfunction createFlag(name, enabled = true) {\n return { type: \"flag\", name, enabled };\n}\nfunction createCommandNode(action, roles, metadata) {\n const rolesMap = roles instanceof Map ? roles : new Map(Object.entries(roles));\n const node = { kind: \"command\", action, roles: rolesMap };\n return metadata ? { ...node, metadata } : node;\n}\nfunction createEventHandlerNode(action, roles, body, metadata, eventModifiers) {\n const rolesMap = roles instanceof Map ? roles : new Map(Object.entries(roles));\n return {\n kind: \"event-handler\",\n action,\n roles: rolesMap,\n body,\n ...eventModifiers && { eventModifiers },\n ...metadata && { metadata }\n };\n}\nfunction createConditionalNode(action, roles, thenBranch, elseBranch, metadata) {\n const rolesMap = roles instanceof Map ? roles : new Map(Object.entries(roles));\n return {\n kind: \"conditional\",\n action,\n roles: rolesMap,\n thenBranch,\n ...elseBranch && { elseBranch },\n ...metadata && { metadata }\n };\n}\nfunction createCompoundNode(statements, chainType = \"sequential\", metadata) {\n const base = {\n kind: \"compound\",\n action: \"compound\",\n roles: /* @__PURE__ */ new Map(),\n statements,\n chainType\n };\n return metadata ? { ...base, metadata } : base;\n}\nfunction createLoopNode(action, roles, loopVariant, body, loopVariable, indexVariable, metadata) {\n const rolesMap = roles instanceof Map ? roles : new Map(Object.entries(roles));\n return {\n kind: \"loop\",\n action,\n roles: rolesMap,\n loopVariant,\n body,\n ...loopVariable && { loopVariable },\n ...indexVariable && { indexVariable },\n ...metadata && { metadata }\n };\n}\nfunction createTryNode(body, catchBranch, finallyBranch, metadata) {\n return {\n kind: \"command\",\n action: \"try\",\n roles: /* @__PURE__ */ new Map(),\n body,\n ...catchBranch && catchBranch.length > 0 ? { catchBranch } : {},\n ...finallyBranch && finallyBranch.length > 0 ? { finallyBranch } : {},\n ...metadata ? { metadata } : {}\n };\n}\nfunction createAsyncNode(variant, asyncBody, metadata) {\n return {\n kind: \"command\",\n action: variant,\n roles: /* @__PURE__ */ new Map(),\n asyncVariant: variant,\n asyncBody,\n ...metadata ? { metadata } : {}\n };\n}\nfunction createMatchNode(roles, arms, defaultArm, metadata) {\n const rolesMap = roles instanceof Map ? roles : new Map(Object.entries(roles));\n return {\n kind: \"command\",\n action: \"match\",\n roles: rolesMap,\n arms,\n ...defaultArm && defaultArm.length > 0 ? { defaultArm } : {},\n ...metadata ? { metadata } : {}\n };\n}\nfunction extractValue(value) {\n if (value.type === \"flag\") return value.name;\n if (\"raw\" in value && value.raw !== void 0) return String(value.raw);\n if (\"value\" in value && value.value !== void 0) return String(value.value);\n if (value.type === \"property-path\") return `${extractValue(value.object)}.${value.property}`;\n return \"\";\n}\nfunction getRoleValue(node, role) {\n return node.roles.get(role);\n}\nfunction extractRoleValue(node, role) {\n const value = node.roles.get(role);\n if (!value) return \"\";\n return extractValue(value);\n}\n\n// src/diagnostics.ts\nfunction createDiagnosticCollector() {\n const diagnostics = [];\n function addWithSeverity(severity, message, options) {\n const diag = {\n message,\n severity,\n ...options?.code != null && { code: options.code },\n ...options?.line != null && { line: options.line },\n ...options?.column != null && { column: options.column },\n ...options?.source != null && { source: options.source },\n ...options?.suggestions != null && options.suggestions.length > 0 && { suggestions: options.suggestions }\n };\n diagnostics.push(diag);\n }\n return {\n error(messageOrCode, messageOrOptions, options) {\n if (typeof messageOrOptions === \"string\") {\n addWithSeverity(\"error\", messageOrOptions, { ...options, code: messageOrCode });\n } else {\n addWithSeverity(\"error\", messageOrCode, messageOrOptions);\n }\n },\n warning(message, options) {\n addWithSeverity(\"warning\", message, options);\n },\n info(message, options) {\n addWithSeverity(\"info\", message, options);\n },\n add(diagnostic) {\n diagnostics.push(diagnostic);\n },\n hasErrors() {\n return diagnostics.some((d) => d.severity === \"error\");\n },\n getDiagnostics() {\n return diagnostics;\n },\n toResult() {\n let errors = 0;\n let warnings = 0;\n let infos = 0;\n for (const d of diagnostics) {\n if (d.severity === \"error\") errors++;\n else if (d.severity === \"warning\") warnings++;\n else infos++;\n }\n return {\n ok: errors === 0,\n diagnostics,\n summary: { errors, warnings, infos }\n };\n }\n };\n}\nfunction fromError(error, options) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n message,\n severity: \"error\",\n ...options?.code != null && { code: options.code },\n ...options?.line != null && { line: options.line },\n ...options?.column != null && { column: options.column },\n ...options?.source != null && { source: options.source },\n ...options?.suggestions != null && options.suggestions.length > 0 && { suggestions: options.suggestions }\n };\n}\nfunction filterBySeverity(diagnostics, severity) {\n return diagnostics.filter((d) => d.severity === severity);\n}\n\n// src/schema.ts\nfunction defineCommand(schema) {\n if (typeof schema !== \"object\" || schema === null) {\n throw new TypeError(`defineCommand: expected a schema object, got ${describeValue(schema)}.`);\n }\n if (typeof schema.action !== \"string\" || schema.action.length === 0) {\n throw new TypeError(\n `defineCommand: 'action' must be a non-empty string (got ${describeValue(schema.action)}).`\n );\n }\n if (!Array.isArray(schema.roles)) {\n throw new TypeError(\n `defineCommand(\"${schema.action}\"): 'roles' must be an array of RoleSpec (got ${describeValue(schema.roles)}). Build entries with defineRole().`\n );\n }\n for (const [index, role] of schema.roles.entries()) {\n if (typeof role !== \"object\" || role === null || typeof role.role !== \"string\") {\n throw new TypeError(\n `defineCommand(\"${schema.action}\"): roles[${index}] must be a RoleSpec with a string 'role' field (got ${describeValue(role)}). Build it with defineRole().`\n );\n }\n }\n return {\n description: schema.description || `${schema.action} command`,\n category: schema.category || \"general\",\n primaryRole: schema.primaryRole || schema.roles[0]?.role || \"patient\",\n ...schema,\n action: schema.action,\n roles: schema.roles\n };\n}\nfunction defineRole(role) {\n return {\n description: role.description || `${role.role} role`,\n ...role,\n role: role.role,\n required: role.required,\n expectedTypes: role.expectedTypes\n };\n}\nfunction getRoleSpec(schema, role) {\n if (!schema || !Array.isArray(schema.roles)) return void 0;\n return schema.roles.find((r) => r.role === role);\n}\nfunction describeValue(value) {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `an array of length ${value.length}`;\n if (typeof value === \"string\") return `the string ${JSON.stringify(value)}`;\n if (typeof value === \"object\") return \"an object\";\n return typeof value === \"undefined\" ? \"undefined\" : String(value);\n}\n\n// src/inference/infer-roles.ts\nfunction inferRolesFromSchema(schema, args, modifiers, target, adapter) {\n const roles = {};\n const skipTokens = new Set(schema.argSkipTokens ?? []);\n const usedArgIndices = /* @__PURE__ */ new Set();\n for (const role of schema.roles) {\n const markers = englishMarkers(role);\n if (markers.length === 0) continue;\n let matched = tryModifierMarkers(role, markers, modifiers, adapter);\n if (!matched) {\n matched = tryArgMarkers(role, markers, args, skipTokens, usedArgIndices, adapter);\n }\n if (matched) {\n roles[role.role] = matched.value;\n if (role.methodCarrier) {\n roles[role.methodCarrier] = adapter.createLiteralValue(matched.matchedMarker);\n }\n }\n }\n if (target !== void 0) {\n const tgtRole = schema.targetRole ?? \"destination\";\n if (roles[tgtRole] === void 0) {\n roles[tgtRole] = adapter.convertValue(target);\n }\n }\n const positionalRoles = schema.roles.filter((r) => englishMarkers(r).length === 0 && roles[r.role] === void 0).sort((a, b) => (a.svoPosition ?? 99) - (b.svoPosition ?? 99));\n let cursor = 0;\n for (const role of positionalRoles) {\n while (cursor < args.length) {\n if (usedArgIndices.has(cursor)) {\n cursor++;\n continue;\n }\n const name = adapter.getIdentifierName(args[cursor]);\n if (name !== void 0 && skipTokens.has(name)) {\n cursor++;\n continue;\n }\n roles[role.role] = adapter.convertValue(args[cursor]);\n usedArgIndices.add(cursor);\n cursor++;\n break;\n }\n }\n return roles;\n}\nfunction englishMarkers(role) {\n const primary = role.markerOverride?.en;\n const variants = role.markerVariants?.en ?? [];\n const out = [];\n if (typeof primary === \"string\" && primary !== \"\") out.push(primary);\n for (const v of variants) if (v !== \"\") out.push(v);\n return out;\n}\nfunction tryModifierMarkers(_role, markers, modifiers, adapter) {\n if (!modifiers) return void 0;\n for (const m of markers) {\n if (!(m in modifiers)) continue;\n const raw = modifiers[m];\n if (raw === void 0 || raw === null) continue;\n if (typeof raw === \"string\") {\n return { value: adapter.createLiteralValue(raw), matchedMarker: m };\n }\n if (typeof raw === \"object\" && \"type\" in raw) {\n return { value: adapter.convertValue(raw), matchedMarker: m };\n }\n }\n return void 0;\n}\nfunction tryArgMarkers(_role, markers, args, skipTokens, usedArgIndices, adapter) {\n const sorted = [...markers].sort((a, b) => b.split(/\\s+/).length - a.split(/\\s+/).length);\n for (const marker of sorted) {\n const words = marker.split(/\\s+/).filter((w) => w.length > 0);\n if (words.length === 0) continue;\n for (let i = 0; i + words.length <= args.length; i++) {\n let allMatch = true;\n for (let w = 0; w < words.length; w++) {\n if (usedArgIndices.has(i + w)) {\n allMatch = false;\n break;\n }\n const name = adapter.getIdentifierName(args[i + w]);\n if (name !== words[w]) {\n allMatch = false;\n break;\n }\n }\n if (!allMatch) continue;\n for (let v = i + words.length; v < args.length; v++) {\n if (usedArgIndices.has(v)) continue;\n const name = adapter.getIdentifierName(args[v]);\n if (name !== void 0 && skipTokens.has(name)) continue;\n for (let w = 0; w < words.length; w++) usedArgIndices.add(i + w);\n usedArgIndices.add(v);\n return { value: adapter.convertValue(args[v]), matchedMarker: marker };\n }\n }\n }\n return void 0;\n}\n\n// src/ir/references.ts\nvar DEFAULT_REFERENCES = /* @__PURE__ */ new Set([\n \"me\",\n \"you\",\n \"it\",\n \"result\",\n \"event\",\n \"target\",\n \"body\",\n // DOM context globals — as reference-typed as `body`, and already advertised as\n // references by core's REFERENCE_KEYWORDS and the parser's PROPERTY_ACCESS_BASES.\n // Without them here, a foreign surface (ja ドキュメント, es documento) lexes as a\n // keyword but fails isValidReference, degrades to a literal, and leaks verbatim.\n \"document\",\n \"window\",\n \"detail\"\n]);\nfunction isValidReference(value, referenceSet = DEFAULT_REFERENCES) {\n return referenceSet.has(value);\n}\n\n// src/ir/parser.ts\nvar STRUCTURAL_ROLES = /* @__PURE__ */ new Set([\n \"body\",\n \"then\",\n \"else\",\n \"condition\",\n \"loop-body\",\n \"variable\",\n \"catch\",\n \"finally\"\n]);\nfunction parseExplicit(input, options = {}) {\n const trimmed = input.trim();\n const collect = options.collectDiagnostics === true;\n const diagnostics = [];\n if (!trimmed.startsWith(\"[\") || !trimmed.endsWith(\"]\")) {\n throw new Error(\"Explicit syntax must be wrapped in brackets: [command role:value ...]\");\n }\n const content = trimmed.slice(1, -1).trim();\n if (!content) {\n throw new Error(\"Empty explicit statement\");\n }\n const tokens = tokenizeExplicit(content);\n if (tokens.length === 0) {\n throw new Error(\"No command specified in explicit statement\");\n }\n const command = tokens[0].toLowerCase();\n const roles = /* @__PURE__ */ new Map();\n const refSet = options.referenceSet ?? DEFAULT_REFERENCES;\n const schema = options.schemaLookup?.getSchema(command);\n const validRoleNames = schema ? new Set(schema.roles.map((r) => r.role)) : null;\n for (let i = 1; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.startsWith(\"+\") || token.startsWith(\"~\")) {\n const enabled = token.startsWith(\"+\");\n const flagName = token.slice(1);\n if (!flagName) {\n if (collect) {\n diagnostics.push({\n severity: \"error\",\n code: \"EMPTY_FLAG\",\n message: `Empty flag name: \"${token}\"`,\n source: \"schema\"\n });\n continue;\n }\n throw new Error(`Empty flag name: \"${token}\"`);\n }\n if (validRoleNames && !validRoleNames.has(flagName)) {\n if (collect) {\n diagnostics.push({\n severity: \"error\",\n code: \"UNKNOWN_FLAG\",\n message: `Unknown flag \"${flagName}\" for command \"${command}\"`,\n source: \"schema\",\n suggestions: [...validRoleNames].map((r) => `+${r}`)\n });\n roles.set(flagName, createFlag(flagName, enabled));\n continue;\n }\n throw new Error(\n `Unknown flag \"${flagName}\" for command \"${command}\". Valid roles: ${[...validRoleNames].join(\", \")}`\n );\n }\n roles.set(flagName, createFlag(flagName, enabled));\n continue;\n }\n const colonIndex = token.indexOf(\":\");\n if (colonIndex === -1) {\n if (collect) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ROLE_FORMAT\",\n message: `Invalid role format: \"${token}\". Expected role:value or +flag`,\n source: \"schema\"\n });\n continue;\n }\n throw new Error(`Invalid role format: \"${token}\". Expected role:value or +flag`);\n }\n const roleName = token.slice(0, colonIndex);\n if (validRoleNames && !STRUCTURAL_ROLES.has(roleName) && !validRoleNames.has(roleName)) {\n if (collect) {\n diagnostics.push({\n severity: \"error\",\n code: \"UNKNOWN_ROLE\",\n message: `Unknown role \"${roleName}\" for command \"${command}\"`,\n source: \"schema\",\n suggestions: [...validRoleNames]\n });\n } else {\n throw new Error(\n `Unknown role \"${roleName}\" for command \"${command}\". Valid roles: ${[...validRoleNames].join(\", \")}`\n );\n }\n }\n const role = roleName;\n const valueStr = token.slice(colonIndex + 1);\n if (STRUCTURAL_ROLES.has(roleName) && valueStr.startsWith(\"[\")) {\n const nestedEnd = findMatchingBracket(token, colonIndex + 1);\n const nestedSyntax = token.slice(colonIndex + 1, nestedEnd + 1);\n roles.set(role, { type: \"expression\", raw: nestedSyntax });\n continue;\n }\n const value = parseExplicitValue(valueStr, refSet);\n roles.set(role, value);\n }\n if (schema && command !== \"on\") {\n for (const roleSpec of schema.roles) {\n if (roleSpec.required && !roles.has(roleSpec.role) && !roleSpec.default) {\n if (collect) {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_REQUIRED_ROLE\",\n message: `Missing required role \"${roleSpec.role}\" for command \"${command}\": ${roleSpec.description}`,\n source: \"schema\"\n });\n } else {\n throw new Error(\n `Missing required role \"${roleSpec.role}\" for command \"${command}\": ${roleSpec.description}`\n );\n }\n }\n }\n }\n const attachDiagnostics = (node) => {\n if (diagnostics.length === 0) return node;\n return { ...node, diagnostics };\n };\n switch (command) {\n case \"on\": {\n const eventValue = roles.get(\"event\");\n if (!eventValue) {\n if (collect) {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_EVENT_ROLE\",\n message: \"Event handler requires event role: [on event:click ...]\",\n source: \"schema\"\n });\n return attachDiagnostics(\n createEventHandlerNode(\"on\", roles, [], { sourceLanguage: \"explicit\" })\n );\n }\n throw new Error(\"Event handler requires event role: [on event:click ...]\");\n }\n const body = extractStructuralBody(roles, \"body\", options);\n roles.delete(\"body\");\n return attachDiagnostics(\n createEventHandlerNode(\"on\", roles, body, { sourceLanguage: \"explicit\" })\n );\n }\n case \"if\": {\n const thenBranch = extractStructuralBody(roles, \"then\", options);\n const elseBranch = extractStructuralBody(roles, \"else\", options);\n roles.delete(\"then\");\n roles.delete(\"else\");\n return attachDiagnostics(\n createConditionalNode(\n command,\n roles,\n thenBranch,\n elseBranch.length > 0 ? elseBranch : void 0,\n { sourceLanguage: \"explicit\" }\n )\n );\n }\n case \"repeat\": {\n const loopBody = extractStructuralBody(roles, \"loop-body\", options);\n const loopVariantValue = roles.get(\"loop-variant\");\n const variableValue = roles.get(\"variable\");\n const indexVariableValue = roles.get(\"index-variable\");\n roles.delete(\"loop-body\");\n roles.delete(\"loop-variant\");\n roles.delete(\"variable\");\n roles.delete(\"index-variable\");\n let variant;\n if (loopVariantValue && loopVariantValue.type === \"literal\" && typeof loopVariantValue.value === \"string\") {\n variant = loopVariantValue.value;\n } else if (roles.has(\"quantity\")) {\n variant = \"times\";\n } else if (roles.has(\"source\")) {\n variant = \"for\";\n } else if (roles.has(\"condition\")) {\n variant = \"while\";\n } else {\n variant = \"forever\";\n }\n const loopVariable = variableValue?.type === \"literal\" && typeof variableValue.value === \"string\" ? variableValue.value : variableValue?.type === \"expression\" ? variableValue.raw : void 0;\n const indexVariable = indexVariableValue?.type === \"literal\" && typeof indexVariableValue.value === \"string\" ? indexVariableValue.value : void 0;\n return attachDiagnostics(\n createLoopNode(command, roles, variant, loopBody, loopVariable, indexVariable, {\n sourceLanguage: \"explicit\"\n })\n );\n }\n default:\n return attachDiagnostics(createCommandNode(command, roles, { sourceLanguage: \"explicit\" }));\n }\n}\nfunction isExplicitSyntax(input) {\n const trimmed = input.trim();\n return trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\");\n}\nvar CHAIN_KEYWORDS = /* @__PURE__ */ new Set([\"then\", \"and\", \"async\", \"sequential\"]);\nfunction splitCompoundSegments(input) {\n const segments = [];\n let chainType = null;\n let current = \"\";\n let bracketDepth = 0;\n let inString = false;\n let stringChar = \"\";\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n if (inString) {\n current += char;\n if (char === stringChar && input[i - 1] !== \"\\\\\") inString = false;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n inString = true;\n stringChar = char;\n current += char;\n continue;\n }\n if (char === \"[\") {\n bracketDepth++;\n current += char;\n continue;\n }\n if (char === \"]\") {\n bracketDepth--;\n current += char;\n if (bracketDepth === 0) {\n const rest = input.slice(i + 1);\n const pipeMatch = rest.match(/^\\s*\\|>\\s*/);\n if (pipeMatch) {\n segments.push(current.trim());\n current = \"\";\n chainType ?? (chainType = \"pipe\");\n i += pipeMatch[0].length;\n continue;\n }\n const keywordMatch = rest.match(/^\\s+(then|and|async|sequential)\\s+/);\n if (keywordMatch && CHAIN_KEYWORDS.has(keywordMatch[1])) {\n segments.push(current.trim());\n current = \"\";\n chainType ?? (chainType = keywordMatch[1]);\n i += keywordMatch[0].length;\n continue;\n }\n }\n continue;\n }\n current += char;\n }\n if (current.trim()) segments.push(current.trim());\n return { segments, chainType };\n}\nfunction parseCompound(input, options) {\n const trimmed = input.trim();\n const { annotations, remainder } = extractAnnotations(trimmed);\n const { segments, chainType } = splitCompoundSegments(remainder);\n let node;\n if (segments.length <= 1) {\n node = parseExplicit(segments[0] || remainder, options);\n } else {\n const statements = segments.map((seg) => parseExplicit(seg, options));\n node = createCompoundNode(statements, chainType ?? \"sequential\");\n }\n if (annotations.length > 0) return { ...node, annotations };\n return node;\n}\nfunction extractAnnotations(input) {\n const annotations = [];\n let pos = 0;\n while (pos < input.length) {\n while (pos < input.length && (input[pos] === \" \" || input[pos] === \"\t\")) pos++;\n if (pos >= input.length || input[pos] !== \"@\") break;\n pos++;\n const nameStart = pos;\n while (pos < input.length && /[A-Za-z0-9\\-_]/.test(input[pos])) pos++;\n const name = input.slice(nameStart, pos);\n if (!name) break;\n let value;\n if (pos < input.length && input[pos] === \"(\") {\n pos++;\n const valueStart = pos;\n if (pos < input.length && (input[pos] === '\"' || input[pos] === \"'\")) {\n const quote = input[pos];\n pos++;\n while (pos < input.length && input[pos] !== quote) {\n if (input[pos] === \"\\\\\") pos++;\n pos++;\n }\n pos++;\n value = input.slice(valueStart + 1, pos - 1);\n } else {\n while (pos < input.length && input[pos] !== \")\") pos++;\n value = input.slice(valueStart, pos);\n }\n if (pos < input.length && input[pos] === \")\") pos++;\n }\n annotations.push(value !== void 0 ? { name, value } : { name });\n }\n return { annotations, remainder: input.slice(pos).trim() };\n}\nvar VERSION_HEADER_RE = /^#!lse\\s+(\\d+\\.\\d+(?:\\.\\d+)?)\\s*$/;\nfunction parseDocument(input, options) {\n const lines = input.split(\"\\n\");\n let lseVersion = \"1.0\";\n const nodes = [];\n let startLine = 0;\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim();\n if (!trimmed) continue;\n const versionMatch = trimmed.match(VERSION_HEADER_RE);\n if (versionMatch) {\n lseVersion = versionMatch[1];\n startLine = i + 1;\n }\n break;\n }\n for (let i = startLine; i < lines.length; i++) {\n const trimmed = lines[i].trim();\n if (!trimmed) continue;\n if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"#\") && !trimmed.startsWith(\"#!\"))\n continue;\n nodes.push(parseCompound(trimmed, options));\n }\n return { lseVersion, nodes };\n}\nfunction isCompoundSyntax(input) {\n const { segments } = splitCompoundSegments(input.trim());\n return segments.length > 1;\n}\nfunction isDocumentSyntax(input) {\n const trimmed = input.trim();\n if (trimmed.includes(\"\\n\")) return true;\n if (VERSION_HEADER_RE.test(trimmed)) return true;\n if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"#\") && !trimmed.startsWith(\"#!\"))\n return true;\n return false;\n}\nfunction extractStructuralBody(roles, roleName, options) {\n const value = roles.get(roleName);\n if (!value) return [];\n if (value.type === \"expression\") return [parseExplicit(value.raw, options)];\n return [];\n}\nfunction hasUnquotedCombinator(value) {\n let quote = \"\";\n for (const ch of value) {\n if (quote) {\n if (ch === quote) quote = \"\";\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \" \" || ch === \">\" || ch === \"+\" || ch === \"~\" || ch === \",\") return true;\n }\n return false;\n}\nfunction inferSelectorKind(value) {\n if (!value) return void 0;\n if (hasUnquotedCombinator(value)) return \"complex\";\n if (value.startsWith(\"#\")) return \"id\";\n if (value.startsWith(\".\")) return \"class\";\n if (value.startsWith(\"[\")) return \"attribute\";\n if (value.startsWith(\"*\")) return \"element\";\n return void 0;\n}\nfunction unescapeString(s) {\n if (!s.includes(\"\\\\\")) return s;\n let out = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \"\\\\\" && i + 1 < s.length) {\n const next = s[i + 1];\n const mapped = next === \"\\\\\" ? \"\\\\\" : next === '\"' ? '\"' : next === \"'\" ? \"'\" : next === \"n\" ? \"\\n\" : next === \"r\" ? \"\\r\" : next === \"t\" ? \"\t\" : \"\";\n if (mapped) {\n out += mapped;\n i++;\n continue;\n }\n }\n out += s[i];\n }\n return out;\n}\nfunction tokenizeExplicit(content) {\n const tokens = [];\n let current = \"\";\n let inString = false;\n let stringChar = \"\";\n let inSelector = false;\n let bracketDepth = 0;\n for (let i = 0; i < content.length; i++) {\n const char = content[i];\n if (inString) {\n current += char;\n if (char === stringChar) {\n let backslashes = 0;\n for (let j = i - 1; j >= 0 && content[j] === \"\\\\\"; j--) backslashes++;\n if (backslashes % 2 === 0) inString = false;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") {\n inString = true;\n stringChar = char;\n current += char;\n continue;\n }\n if (inSelector) {\n current += char;\n if (char === \">\" && current.endsWith(\"/>\")) inSelector = false;\n continue;\n }\n if (char === \"<\" && (current === \"\" || current.endsWith(\":\"))) {\n inSelector = true;\n current += char;\n continue;\n }\n if (char === \"[\") {\n bracketDepth++;\n current += char;\n continue;\n }\n if (char === \"]\") {\n bracketDepth--;\n current += char;\n continue;\n }\n if (char === \" \" && bracketDepth === 0) {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n continue;\n }\n current += char;\n }\n if (current) tokens.push(current);\n return tokens;\n}\nfunction parseExplicitValue(valueStr, referenceSet) {\n if (valueStr.startsWith(\"<\")) {\n if (!valueStr.endsWith(\"/>\")) {\n throw new Error(`Unterminated selector literal: \"${valueStr}\". Expected a closing \"/>\"`);\n }\n const inner = valueStr.slice(1, -2);\n if (!inner) throw new Error(`Empty selector literal: \"${valueStr}\"`);\n return createSelector(inner, inferSelectorKind(inner));\n }\n if (valueStr.startsWith(\"#\") || valueStr.startsWith(\".\") || valueStr.startsWith(\"[\") || valueStr.startsWith(\"@\") || valueStr.startsWith(\"*\")) {\n return createSelector(valueStr, inferSelectorKind(valueStr));\n }\n if (valueStr.startsWith('\"') || valueStr.startsWith(\"'\")) {\n return createLiteral(unescapeString(valueStr.slice(1, -1)), \"string\");\n }\n if (valueStr === \"true\") return createLiteral(true, \"boolean\");\n if (valueStr === \"false\") return createLiteral(false, \"boolean\");\n const lowerRef = valueStr.toLowerCase();\n if (isValidReference(lowerRef, referenceSet)) return createReference(lowerRef);\n const numMatch = valueStr.match(/^(-?\\d+(?:\\.\\d+)?)(ms|s|m|h)?$/);\n if (numMatch) {\n const num = parseFloat(numMatch[1]);\n const suffix = numMatch[2];\n if (suffix) return createLiteral(valueStr, \"duration\");\n return createLiteral(num, \"number\");\n }\n return createLiteral(valueStr);\n}\nfunction findMatchingBracket(str, start) {\n let depth = 0;\n for (let i = start; i < str.length; i++) {\n if (str[i] === \"[\") depth++;\n else if (str[i] === \"]\") {\n depth--;\n if (depth === 0) return i;\n }\n }\n return str.length - 1;\n}\n\n// src/ir/renderer.ts\nfunction renderExplicit(node) {\n let result;\n if (node.kind === \"compound\") {\n const compoundNode = node;\n result = compoundNode.statements.map((stmt) => renderExplicit(stmt)).join(` ${compoundNode.chainType} `);\n } else {\n result = renderBracketCommand(node);\n }\n if (node.annotations && node.annotations.length > 0) {\n const annParts = node.annotations.map(\n (ann) => ann.value !== void 0 ? `@${ann.name}(${ann.value})` : `@${ann.name}`\n );\n return annParts.join(\" \") + \" \" + result;\n }\n return result;\n}\nfunction renderDocument(envelope) {\n const lines = [];\n if (envelope.lseVersion && envelope.lseVersion !== \"1.0\") {\n lines.push(`#!lse ${envelope.lseVersion}`);\n }\n for (const node of envelope.nodes) {\n lines.push(renderExplicit(node));\n }\n return lines.join(\"\\n\");\n}\nfunction renderBracketCommand(node) {\n const parts = [node.action];\n for (const [role, value] of node.roles) {\n if (value.type === \"flag\") {\n parts.push(value.enabled ? `+${value.name}` : `~${value.name}`);\n } else {\n parts.push(`${role}:${valueToString(value)}`);\n }\n }\n if (node.kind === \"event-handler\") {\n const eventNode = node;\n if (eventNode.body && eventNode.body.length > 0) {\n parts.push(`body:${eventNode.body.map((n) => renderExplicit(n)).join(\" \")}`);\n }\n }\n if (node.kind === \"conditional\") {\n const condNode = node;\n if (condNode.thenBranch && condNode.thenBranch.length > 0) {\n parts.push(`then:${condNode.thenBranch.map((n) => renderExplicit(n)).join(\" \")}`);\n }\n if (condNode.elseBranch && condNode.elseBranch.length > 0) {\n parts.push(`else:${condNode.elseBranch.map((n) => renderExplicit(n)).join(\" \")}`);\n }\n }\n if (node.kind === \"loop\") {\n const loopNode = node;\n if (loopNode.loopVariant) parts.push(`loop-variant:${loopNode.loopVariant}`);\n if (loopNode.loopVariable) parts.push(`variable:${loopNode.loopVariable}`);\n if (loopNode.indexVariable) parts.push(`index-variable:${loopNode.indexVariable}`);\n if (loopNode.body && loopNode.body.length > 0) {\n parts.push(`loop-body:${loopNode.body.map((n) => renderExplicit(n)).join(\" \")}`);\n }\n }\n if (node.kind === \"command\") {\n const cmd = node;\n if (cmd.body && cmd.body.length > 0)\n parts.push(`body:${cmd.body.map((n) => renderExplicit(n)).join(\" \")}`);\n if (cmd.catchBranch && cmd.catchBranch.length > 0)\n parts.push(`catch:${cmd.catchBranch.map((n) => renderExplicit(n)).join(\" \")}`);\n if (cmd.finallyBranch && cmd.finallyBranch.length > 0)\n parts.push(`finally:${cmd.finallyBranch.map((n) => renderExplicit(n)).join(\" \")}`);\n if (cmd.asyncVariant) parts.push(`async-variant:${cmd.asyncVariant}`);\n if (cmd.asyncBody && cmd.asyncBody.length > 0)\n parts.push(`async-body:${cmd.asyncBody.map((n) => renderExplicit(n)).join(\" \")}`);\n }\n return `[${parts.join(\" \")}]`;\n}\nfunction needsSelectorWrap(value) {\n if (value.includes(\" \")) return true;\n const first = value[0];\n return !(first === \"#\" || first === \".\" || first === \"@\" || first === \"*\");\n}\nfunction valueToString(value) {\n switch (value.type) {\n case \"literal\":\n if (typeof value.value === \"string\") {\n if (value.dataType === \"string\" || /\\s/.test(value.value))\n return JSON.stringify(value.value);\n return value.value;\n }\n return String(value.value);\n case \"selector\":\n if (!value.value) return value.value;\n return needsSelectorWrap(value.value) ? `<${value.value}/>` : value.value;\n case \"reference\":\n return value.value;\n case \"property-path\":\n return `${valueToString(value.object)}'s ${value.property}`;\n case \"expression\":\n return value.raw;\n case \"flag\":\n return value.name;\n }\n}\n\n// src/ir/protocol.ts\nfunction toProtocolJSON(node) {\n const roles = rolesToProtocol(node.roles);\n let result;\n switch (node.kind) {\n case \"command\": {\n const cmd = node;\n result = { kind: \"command\", action: node.action, roles };\n if (cmd.body && cmd.body.length > 0) result.body = cmd.body.map(toProtocolJSON);\n if (cmd.catchBranch && cmd.catchBranch.length > 0)\n result.catchBranch = cmd.catchBranch.map(toProtocolJSON);\n if (cmd.finallyBranch && cmd.finallyBranch.length > 0)\n result.finallyBranch = cmd.finallyBranch.map(toProtocolJSON);\n if (cmd.asyncVariant) result.asyncVariant = cmd.asyncVariant;\n if (cmd.asyncBody && cmd.asyncBody.length > 0)\n result.asyncBody = cmd.asyncBody.map(toProtocolJSON);\n if (cmd.arms && cmd.arms.length > 0) {\n result.arms = cmd.arms.map((arm) => ({\n pattern: valueToProtocol(arm.pattern),\n body: arm.body.map(toProtocolJSON)\n }));\n }\n if (cmd.defaultArm && cmd.defaultArm.length > 0)\n result.defaultArm = cmd.defaultArm.map(toProtocolJSON);\n break;\n }\n case \"event-handler\": {\n const eh = node;\n if (canEmitCompactTrigger(eh)) {\n const body = eh.body[0];\n const eventValue = eh.roles.get(\"event\");\n const eventName = eventValue.value;\n const trigger = {\n event: eventName\n };\n const triggerModifiers = serializeEventModifiers(eh.eventModifiers);\n if (triggerModifiers) trigger.modifiers = triggerModifiers;\n result = {\n action: body.action,\n roles: rolesToProtocol(body.roles),\n trigger\n };\n break;\n }\n result = {\n kind: \"event-handler\",\n action: node.action,\n roles,\n body: eh.body.map(toProtocolJSON)\n };\n break;\n }\n case \"compound\": {\n const c = node;\n result = {\n kind: \"compound\",\n action: \"compound\",\n statements: c.statements.map(toProtocolJSON),\n chainType: c.chainType\n };\n break;\n }\n case \"conditional\": {\n const cond = node;\n result = { kind: \"command\", action: node.action, roles };\n result.thenBranch = cond.thenBranch.map(toProtocolJSON);\n if (cond.elseBranch && cond.elseBranch.length > 0)\n result.elseBranch = cond.elseBranch.map(toProtocolJSON);\n break;\n }\n case \"loop\": {\n const loop = node;\n result = { kind: \"command\", action: node.action, roles };\n result.loopVariant = loop.loopVariant;\n result.loopBody = loop.body.map(toProtocolJSON);\n if (loop.loopVariable) result.loopVariable = loop.loopVariable;\n if (loop.indexVariable) result.indexVariable = loop.indexVariable;\n break;\n }\n }\n if (node.annotations && node.annotations.length > 0) {\n result.annotations = node.annotations.map(\n (a) => a.value !== void 0 ? { name: a.name, value: a.value } : { name: a.name }\n );\n }\n if (node.diagnostics && node.diagnostics.length > 0) {\n result.diagnostics = node.diagnostics.map((d) => {\n const json = { level: d.severity, message: d.message };\n if (d.role) json.role = d.role;\n if (d.code) json.code = d.code;\n if (d.source) json.source = d.source;\n if (d.suggestions && d.suggestions.length > 0) json.suggestions = [...d.suggestions];\n return json;\n });\n }\n return result;\n}\nfunction rolesToProtocol(roles) {\n const result = {};\n for (const [role, value] of roles) result[role] = valueToProtocol(value);\n return result;\n}\nfunction valueToProtocol(value) {\n switch (value.type) {\n case \"selector\": {\n const PROTOCOL_SELECTOR_KINDS = /* @__PURE__ */ new Set([\n \"id\",\n \"class\",\n \"attribute\",\n \"element\",\n \"complex\"\n ]);\n const sk = \"selectorKind\" in value ? value.selectorKind : void 0;\n const sv = { type: \"selector\", value: value.value };\n if (sk && PROTOCOL_SELECTOR_KINDS.has(sk))\n sv.selectorKind = sk;\n return sv;\n }\n case \"literal\":\n return value.dataType ? { type: \"literal\", value: value.value, dataType: value.dataType } : { type: \"literal\", value: value.value };\n case \"reference\":\n return { type: \"reference\", value: value.value };\n case \"expression\":\n return { type: \"expression\", raw: value.raw };\n case \"property-path\":\n return { type: \"expression\", raw: extractValue(value) };\n case \"flag\":\n return { type: \"flag\", name: value.name, enabled: value.enabled };\n }\n}\nfunction canEmitCompactTrigger(eh) {\n if (!eh.body || eh.body.length !== 1) return false;\n const body = eh.body[0];\n if (body.kind !== \"command\") return false;\n const cmd = body;\n if (cmd.body && cmd.body.length > 0) return false;\n if (cmd.catchBranch && cmd.catchBranch.length > 0) return false;\n if (cmd.finallyBranch && cmd.finallyBranch.length > 0) return false;\n if (cmd.asyncVariant) return false;\n if (cmd.asyncBody && cmd.asyncBody.length > 0) return false;\n if (cmd.arms && cmd.arms.length > 0) return false;\n if (cmd.defaultArm && cmd.defaultArm.length > 0) return false;\n const eventValue = eh.roles.get(\"event\");\n if (!eventValue || eventValue.type !== \"literal\") return false;\n if (typeof eventValue.value !== \"string\") return false;\n if (cmd.roles.has(\"event\")) return false;\n if (eh.additionalEvents && eh.additionalEvents.length > 0) return false;\n if (eh.parameterNames && eh.parameterNames.length > 0) return false;\n if (eh.annotations && eh.annotations.length > 0) return false;\n if (eh.diagnostics && eh.diagnostics.length > 0) return false;\n if (cmd.annotations && cmd.annotations.length > 0) return false;\n if (cmd.diagnostics && cmd.diagnostics.length > 0) return false;\n return true;\n}\nfunction serializeEventModifiers(mods) {\n if (!mods) return void 0;\n const out = {};\n if (mods.once) out.once = true;\n if (typeof mods.debounce === \"number\") out.debounce = mods.debounce;\n if (typeof mods.throttle === \"number\") out.throttle = mods.throttle;\n if (mods.queue) out.queue = mods.queue;\n return Object.keys(out).length > 0 ? out : void 0;\n}\nfunction fromProtocolJSON(json) {\n const roles = new Map(\n Object.entries(json.roles ?? {}).map(([role, val]) => [role, valueFromProtocol(val)])\n );\n const annotations = json.annotations?.map(\n (a) => a.value !== void 0 ? { name: a.name, value: a.value } : { name: a.name }\n );\n const diagnostics = json.diagnostics?.map((d) => ({\n severity: d.level,\n message: d.message,\n ...d.role ? { role: d.role } : {},\n ...d.code ? { code: d.code } : {},\n ...d.source ? { source: d.source } : {},\n ...d.suggestions && d.suggestions.length > 0 ? { suggestions: d.suggestions } : {}\n }));\n if (json.trigger) {\n const eventName = json.trigger.event;\n roles.set(\"event\", createLiteral(eventName, \"string\"));\n const bodyRoles = new Map(roles);\n bodyRoles.delete(\"event\");\n const bodyNode = createCommandNode(json.action, bodyRoles);\n const node = createEventHandlerNode(\n \"on\",\n roles,\n [bodyNode],\n { sourceLanguage: \"json\" },\n json.trigger.modifiers ?? {}\n );\n return applyV12Metadata(node, annotations, diagnostics);\n }\n const kind = json.kind ?? \"command\";\n if (kind === \"event-handler\") {\n const body = (json.body ?? []).map(fromProtocolJSON);\n return applyV12Metadata(\n createEventHandlerNode(json.action, roles, body),\n annotations,\n diagnostics\n );\n }\n if (kind === \"compound\") {\n const statements = (json.statements ?? []).map(fromProtocolJSON);\n return applyV12Metadata(\n createCompoundNode(statements, json.chainType ?? \"sequential\"),\n annotations,\n diagnostics\n );\n }\n if (json.thenBranch && json.thenBranch.length > 0) {\n const thenBranch = json.thenBranch.map(fromProtocolJSON);\n const elseBranch = json.elseBranch ? json.elseBranch.map(fromProtocolJSON) : void 0;\n return applyV12Metadata(\n createConditionalNode(json.action, roles, thenBranch, elseBranch),\n annotations,\n diagnostics\n );\n }\n if (json.loopVariant) {\n const loopBody = (json.loopBody ?? []).map(fromProtocolJSON);\n return applyV12Metadata(\n createLoopNode(\n json.action,\n roles,\n json.loopVariant,\n loopBody,\n json.loopVariable,\n json.indexVariable\n ),\n annotations,\n diagnostics\n );\n }\n if (json.catchBranch || json.finallyBranch) {\n const body = (json.body ?? []).map(fromProtocolJSON);\n const catchBranch = json.catchBranch ? json.catchBranch.map(fromProtocolJSON) : void 0;\n const finallyBranch = json.finallyBranch ? json.finallyBranch.map(fromProtocolJSON) : void 0;\n return applyV12Metadata(\n createTryNode(body, catchBranch, finallyBranch),\n annotations,\n diagnostics\n );\n }\n if (json.asyncVariant) {\n const asyncBody = (json.asyncBody ?? []).map(fromProtocolJSON);\n return applyV12Metadata(\n createAsyncNode(json.asyncVariant, asyncBody),\n annotations,\n diagnostics\n );\n }\n if (json.arms && json.arms.length > 0) {\n const arms = json.arms.map((arm) => ({\n pattern: valueFromProtocol(arm.pattern),\n body: arm.body.map(fromProtocolJSON)\n }));\n const defaultArm = json.defaultArm ? json.defaultArm.map(fromProtocolJSON) : void 0;\n return applyV12Metadata(createMatchNode(roles, arms, defaultArm), annotations, diagnostics);\n }\n if (json.body && json.body.length > 0 && kind === \"command\") {\n return applyV12Metadata(\n createTryNode(json.body.map(fromProtocolJSON)),\n annotations,\n diagnostics\n );\n }\n return applyV12Metadata(createCommandNode(json.action, roles), annotations, diagnostics);\n}\nfunction applyV12Metadata(node, annotations, diagnostics) {\n if ((!annotations || annotations.length === 0) && (!diagnostics || diagnostics.length === 0))\n return node;\n return {\n ...node,\n ...annotations && annotations.length > 0 ? { annotations } : {},\n ...diagnostics && diagnostics.length > 0 ? { diagnostics } : {}\n };\n}\nfunction valueFromProtocol(value) {\n switch (value.type) {\n case \"selector\":\n return createSelector(String(value.value ?? \"\"), value.selectorKind);\n case \"literal\":\n return createLiteral(\n value.value !== void 0 ? value.value : \"\",\n value.dataType\n );\n case \"reference\":\n return createReference(String(value.value ?? \"\"));\n case \"expression\":\n return createExpression(value.raw ?? String(value.value ?? \"\"));\n case \"flag\":\n return createFlag(\n value.name ?? String(value.value ?? \"\"),\n value.enabled ?? (typeof value.value === \"boolean\" ? value.value : true)\n );\n case \"property-path\":\n return createExpression(String(value.value ?? value.raw ?? \"\"));\n }\n}\nfunction toEnvelopeJSON(envelope) {\n const result = {\n lseVersion: envelope.lseVersion,\n nodes: envelope.nodes.map(toProtocolJSON)\n };\n if (envelope.features && envelope.features.length > 0) result.features = [...envelope.features];\n return result;\n}\nfunction fromEnvelopeJSON(json) {\n return {\n lseVersion: json.lseVersion,\n ...json.features && json.features.length > 0 ? { features: json.features } : {},\n nodes: json.nodes.map(fromProtocolJSON)\n };\n}\nfunction isEnvelope(json) {\n return typeof json === \"object\" && json !== null && \"lseVersion\" in json && \"nodes\" in json && Array.isArray(json.nodes);\n}\nvar VALID_KINDS = /* @__PURE__ */ new Set([\"command\", \"event-handler\", \"compound\"]);\nvar VALID_VALUE_TYPES = /* @__PURE__ */ new Set([\n \"selector\",\n \"literal\",\n \"reference\",\n \"expression\",\n \"property-path\",\n \"flag\"\n]);\nvar VALID_CHAIN_TYPES = /* @__PURE__ */ new Set([\"then\", \"and\", \"async\", \"sequential\", \"pipe\"]);\nvar VALID_ASYNC_VARIANTS = /* @__PURE__ */ new Set([\"all\", \"race\"]);\nvar VALID_DIAGNOSTIC_LEVELS = /* @__PURE__ */ new Set([\"error\", \"warning\", \"info\"]);\nfunction validateProtocolJSON(json) {\n const diagnostics = [];\n if (typeof json !== \"object\" || json === null) {\n return [{ severity: \"error\", code: \"INVALID_ROOT\", message: \"Root must be a JSON object\" }];\n }\n const node = json;\n const kind = \"kind\" in node ? String(node.kind) : \"command\";\n if (\"kind\" in node && !VALID_KINDS.has(kind)) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_KIND\",\n message: `Invalid kind \"${node.kind}\". Must be one of: command, event-handler, compound`\n });\n }\n if (!(\"action\" in node)) {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_ACTION\",\n message: \"Missing required field: action\"\n });\n } else if (typeof node.action !== \"string\" || node.action.length === 0) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ACTION\",\n message: \"action must be a non-empty string\"\n });\n }\n if (!(\"roles\" in node) && kind !== \"compound\") {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_ROLES\",\n message: \"Missing required field: roles\"\n });\n } else if (\"roles\" in node && (typeof node.roles !== \"object\" || node.roles === null || Array.isArray(node.roles))) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ROLES\",\n message: \"roles must be a plain object\"\n });\n } else if (\"roles\" in node && node.roles) {\n for (const [role, value] of Object.entries(node.roles)) {\n if (typeof value !== \"object\" || value === null) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ROLE_VALUE\",\n message: `Role \"${role}\" value must be an object`\n });\n continue;\n }\n const v = value;\n if (!(\"type\" in v) || !VALID_VALUE_TYPES.has(String(v.type))) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_VALUE_TYPE\",\n message: `Role \"${role}\" has invalid type \"${v.type}\"`\n });\n }\n if (v.type === \"flag\") {\n if (typeof v.name !== \"string\" && !(\"value\" in v))\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_FLAG_NAME\",\n message: `Flag role \"${role}\" missing required field: name (or value)`\n });\n if (typeof v.enabled !== \"boolean\" && !(\"value\" in v))\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_FLAG_ENABLED\",\n message: `Flag role \"${role}\" missing required field: enabled (or value)`\n });\n }\n if (v.type === \"expression\" && typeof v.raw !== \"string\" && !(\"value\" in v)) {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_EXPRESSION_RAW\",\n message: `Expression role \"${role}\" missing required field: raw (or value)`\n });\n }\n }\n }\n if (\"trigger\" in node && node.trigger) {\n const trigger = node.trigger;\n if (typeof trigger !== \"object\" || trigger === null) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_TRIGGER\",\n message: \"trigger must be an object\"\n });\n } else if (!trigger.event || typeof trigger.event !== \"string\") {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_TRIGGER\",\n message: \"trigger.event is required and must be a non-empty string\"\n });\n }\n }\n if (kind === \"event-handler\" && !(\"trigger\" in node)) {\n if (!(\"body\" in node) || !Array.isArray(node.body)) {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_BODY\",\n message: \"event-handler node requires a body array\"\n });\n }\n }\n if (kind === \"compound\") {\n if (!(\"statements\" in node) || !Array.isArray(node.statements)) {\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_STATEMENTS\",\n message: \"compound node requires a statements array\"\n });\n }\n if (\"chainType\" in node && !VALID_CHAIN_TYPES.has(String(node.chainType))) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_CHAIN_TYPE\",\n message: `Invalid chainType \"${node.chainType}\"`\n });\n }\n }\n if (\"diagnostics\" in node && !Array.isArray(node.diagnostics)) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_DIAGNOSTICS\",\n message: \"diagnostics must be an array\"\n });\n }\n if (\"annotations\" in node) {\n if (!Array.isArray(node.annotations)) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ANNOTATIONS\",\n message: \"annotations must be an array\"\n });\n } else {\n for (let i = 0; i < node.annotations.length; i++) {\n const a = node.annotations[i];\n if (!a || typeof a !== \"object\") {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ANNOTATION_ENTRY\",\n message: `annotations[${i}] must be an object`\n });\n continue;\n }\n if (typeof a.name !== \"string\" || a.name.length === 0)\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_ANNOTATION_NAME\",\n message: `annotations[${i}] missing required field: name`\n });\n }\n }\n }\n if (\"asyncVariant\" in node && !VALID_ASYNC_VARIANTS.has(String(node.asyncVariant))) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ASYNC_VARIANT\",\n message: `Invalid asyncVariant \"${node.asyncVariant}\". Must be \"all\" or \"race\"`\n });\n }\n if (\"arms\" in node) {\n if (!Array.isArray(node.arms)) {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ARMS\",\n message: \"arms must be an array\"\n });\n } else {\n for (let i = 0; i < node.arms.length; i++) {\n const arm = node.arms[i];\n if (!arm || typeof arm !== \"object\") {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_ARM_ENTRY\",\n message: `arms[${i}] must be an object`\n });\n continue;\n }\n if (!arm.pattern || typeof arm.pattern !== \"object\")\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_ARM_PATTERN\",\n message: `arms[${i}] missing required field: pattern`\n });\n if (!Array.isArray(arm.body))\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_ARM_BODY\",\n message: `arms[${i}] missing required field: body (array)`\n });\n }\n }\n }\n if (\"diagnostics\" in node && Array.isArray(node.diagnostics)) {\n for (let i = 0; i < node.diagnostics.length; i++) {\n const d = node.diagnostics[i];\n if (!d || typeof d !== \"object\") {\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_DIAGNOSTIC_ENTRY\",\n message: `diagnostics[${i}] must be an object`\n });\n continue;\n }\n if (!VALID_DIAGNOSTIC_LEVELS.has(String(d.level)))\n diagnostics.push({\n severity: \"error\",\n code: \"INVALID_DIAGNOSTIC_LEVEL\",\n message: `diagnostics[${i}].level must be \"error\", \"warning\", or \"info\"`\n });\n if (typeof d.message !== \"string\")\n diagnostics.push({\n severity: \"error\",\n code: \"MISSING_DIAGNOSTIC_MESSAGE\",\n message: `diagnostics[${i}] missing required field: message`\n });\n }\n }\n return diagnostics;\n}\nexport {\n DEFAULT_REFERENCES,\n STRUCTURAL_ROLES,\n createAsyncNode,\n createCommandNode,\n createCompoundNode,\n createConditionalNode,\n createDiagnosticCollector,\n createEventHandlerNode,\n createExpression,\n createFlag,\n createLiteral,\n createLoopNode,\n createMatchNode,\n createPropertyPath,\n createReference,\n createSelector,\n createTryNode,\n defineCommand,\n defineRole,\n extractRoleValue,\n extractValue,\n filterBySeverity,\n fromEnvelopeJSON,\n fromError,\n fromProtocolJSON,\n getRoleSpec,\n getRoleValue,\n inferRolesFromSchema,\n isCompoundSyntax,\n isDocumentSyntax,\n isEnvelope,\n isExplicitSyntax,\n isValidReference,\n parseCompound,\n parseDocument,\n parseExplicit,\n renderDocument,\n renderExplicit,\n toEnvelopeJSON,\n toProtocolJSON,\n validateProtocolJSON\n};\n//# sourceMappingURL=index.js.map",null,null],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|