@tsplc/compiler 0.2.4 → 0.2.5
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/backends/codesys/http.ts +3 -2
- package/dist/codesys.js +2 -3
- package/dist/codesys.js.map +3 -3
- package/package.json +6 -6
package/backends/codesys/http.ts
CHANGED
|
@@ -298,7 +298,6 @@ END_VAR
|
|
|
298
298
|
VAR
|
|
299
299
|
remoteAddress : NBS.IPv4Address;
|
|
300
300
|
remoteIP : NBS.IIPAddress := remoteAddress;
|
|
301
|
-
serverHost : STRING(255) := ${quote(endpoint.host)};
|
|
302
301
|
resolver : NBS.ResolveHostname := (itfAsyncProperty:=${network});
|
|
303
302
|
${endpoint.tls ? `certificateVerifier : ${name}_CertificateVerifier;\n tlsContext : NBS.TLSContext := (itfCertVerifer:=certificateVerifier,sUseCaseName:='tsPLC HTTPS',ePurpose:=NBS.PURPOSE.CLIENT_SIDE,sTLSVersion:='1.2',sHostname:=${quote(endpoint.host)},udiVerificationMode:=2);` : ""}
|
|
304
303
|
client : NBS.TCP_Client := (itfAsyncProperty:=${network},itfIPAddress:=remoteAddress,uiPort:=${endpoint.port},udiTimeOut:=${endpoint.timeoutMs * 1000}${endpoint.tls ? ",itfTLSContext:=tlsContext" : ""});
|
|
@@ -325,6 +324,8 @@ VAR
|
|
|
325
324
|
index : UINT;
|
|
326
325
|
END_VAR
|
|
327
326
|
`,
|
|
327
|
+
// The host goes in the resolver call, not an initial value: an online change keeps the values
|
|
328
|
+
// an instance already holds, so a changed host would otherwise wait for a download.
|
|
328
329
|
implementation: `IF NOT ${port("start")} OR ${port("cancel")} THEN
|
|
329
330
|
resolver(xExecute:=FALSE,itfIPAddress:=remoteIP);client(xEnable:=FALSE); writer(xExecute:=FALSE); reader(xEnable:=FALSE); timeout(IN:=FALSE);
|
|
330
331
|
stage:=0; ${port("busy")}:=FALSE; ${port("done")}:=FALSE; ${port("error")}:=0;
|
|
@@ -344,7 +345,7 @@ timeout(IN:=stage<90,PT:=T#${endpoint.timeoutMs}ms);
|
|
|
344
345
|
IF timeout.Q THEN ${port("error")}:=2; stage:=90; END_IF;
|
|
345
346
|
${port("busy")}:=stage<90;
|
|
346
347
|
IF stage=10 THEN
|
|
347
|
-
resolver(xExecute:=TRUE,sHostname
|
|
348
|
+
resolver(xExecute:=TRUE,sHostname:=${quote(endpoint.host)},itfIPAddress:=remoteIP);
|
|
348
349
|
IF resolver.xError THEN ${port("error")}:=5;stage:=90;ELSIF resolver.xDone THEN stage:=1;END_IF;
|
|
349
350
|
END_IF;
|
|
350
351
|
IF stage=1 THEN
|
package/dist/codesys.js
CHANGED
|
@@ -770,7 +770,6 @@ END_VAR
|
|
|
770
770
|
VAR
|
|
771
771
|
remoteAddress : NBS.IPv4Address;
|
|
772
772
|
remoteIP : NBS.IIPAddress := remoteAddress;
|
|
773
|
-
serverHost : STRING(255) := ${quote(endpoint.host)};
|
|
774
773
|
resolver : NBS.ResolveHostname := (itfAsyncProperty:=${network});
|
|
775
774
|
${endpoint.tls ? `certificateVerifier : ${name}_CertificateVerifier;
|
|
776
775
|
tlsContext : NBS.TLSContext := (itfCertVerifer:=certificateVerifier,sUseCaseName:='tsPLC HTTPS',ePurpose:=NBS.PURPOSE.CLIENT_SIDE,sTLSVersion:='1.2',sHostname:=${quote(endpoint.host)},udiVerificationMode:=2);` : ""}
|
|
@@ -823,7 +822,7 @@ timeout(IN:=stage<90,PT:=T#${endpoint.timeoutMs}ms);
|
|
|
823
822
|
IF timeout.Q THEN ${port("error")}:=2; stage:=90; END_IF;
|
|
824
823
|
${port("busy")}:=stage<90;
|
|
825
824
|
IF stage=10 THEN
|
|
826
|
-
resolver(xExecute:=TRUE,sHostname
|
|
825
|
+
resolver(xExecute:=TRUE,sHostname:=${quote(endpoint.host)},itfIPAddress:=remoteIP);
|
|
827
826
|
IF resolver.xError THEN ${port("error")}:=5;stage:=90;ELSIF resolver.xDone THEN stage:=1;END_IF;
|
|
828
827
|
END_IF;
|
|
829
828
|
IF stage=1 THEN
|
|
@@ -2583,5 +2582,5 @@ export {
|
|
|
2583
2582
|
publicationSelectors
|
|
2584
2583
|
};
|
|
2585
2584
|
|
|
2586
|
-
//# debugId=
|
|
2585
|
+
//# debugId=ADC5FCAD73E0D40364756E2164756E21
|
|
2587
2586
|
//# sourceMappingURL=codesys.js.map
|
package/dist/codesys.js.map
CHANGED
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"import {\n instancedBlock,\n type Constant,\n type CoreExpression,\n type CorePath,\n type CoreStatement,\n type Deployment,\n type Diagnostic,\n isVerifiedCore,\n type PlcType,\n type SourceSpan,\n type VerifiedCoreModule,\n} from \"@tsplc/compiler/ir\";\nimport { type CodesysOptions, optionsSchema } from \"./config.ts\";\nimport { ioLayout } from \"@tsplc/typegen/hardware\";\nimport { iecSpelling, isStoragePath, resolveStoragePath, type StorageBinding } from \"./io-paths.ts\";\nimport { isIecIdentifier } from \"./names.ts\";\nimport { storageLayout } from \"./storage.ts\";\nimport { validateHttpLayout, resolveHttpEndpoint, type HttpEndpoint } from \"./http.ts\";\nimport { accessedStorage } from \"./task-access.ts\";\nimport { resolvePublication } from \"./publication.ts\";\nimport type { Publication } from \"@tsplc/config\";\n\n// Only this planner can admit a target configuration for emission. Cloning a\n// branded-looking object does not give it membership in this private identity set.\nconst planned: unique symbol = Symbol(\"CODESYS plan\");\nexport interface CodesysPlan {\n readonly [planned]: true;\n readonly core: VerifiedCoreModule;\n readonly deployment: Deployment;\n readonly options: CodesysOptions;\n /** `io` keys that name authored storage, resolved against the verified types. */\n readonly storageBindings: readonly StorageBinding[];\n readonly publication: Publication;\n readonly http: Readonly<Record<string, HttpEndpoint>>;\n}\nconst plans = new WeakSet<object>();\nexport function diagnostic(message: string, span?: SourceSpan): Diagnostic {\n return { origin: \"backend\", code: \"PLC7001\", severity: \"error\", message, ...(span && { span }) };\n}\nexport function isCodesysPlan(plan: CodesysPlan): boolean {\n return plans.has(plan);\n}\n\nexport function planCodesys(\n core: VerifiedCoreModule,\n deployment: Deployment,\n value: unknown,\n): { plan?: CodesysPlan; diagnostics: readonly Diagnostic[] } {\n if (!isVerifiedCore(core))\n return { diagnostics: [diagnostic(\"CODESYS requires a verified, normalized core module.\")] };\n\n const parsed = optionsSchema.safeParse(value);\n if (!parsed.success)\n return {\n diagnostics: parsed.error.issues.map((issue) =>\n diagnostic(`${issue.path.join(\".\")}: ${issue.message}`),\n ),\n };\n\n const backgroundTasks = new Map<string, Deployment[\"tasks\"][number]>();\n for (const program of core.programs) {\n if (!program.background) continue;\n const { priority, intervalNanoseconds } = program.background;\n const name = `TsplcBackground_${priority}_${BigInt(intervalNanoseconds) / 1000000n}`;\n const existing = backgroundTasks.get(name);\n backgroundTasks.set(name, {\n name,\n priority,\n intervalNanoseconds,\n programs: [...(existing?.programs ?? []), program.name],\n });\n }\n deployment = { tasks: [...deployment.tasks, ...backgroundTasks.values()] };\n const options = parsed.data;\n const diagnostics: Diagnostic[] = [];\n const report = (message: string, span?: SourceSpan): void => {\n diagnostics.push(diagnostic(message, span));\n };\n const callerTasks = deployment.tasks;\n for (const continuation of core.programs.filter((program) => program.continuation)) {\n const scope = continuation.continuation!;\n const root = core.variables.find(\n (variable) => variable.name === scope.instance && variable.span.file === scope.file,\n );\n if (!root) {\n report(`Missing continuation owner ${scope.instance}.`);\n continue;\n }\n const owners = callerTasks.filter((task) =>\n task.programs.some((name) => {\n const program = core.programs.find((program) => program.name === name);\n if (!program || program.background) return false;\n const fn = core.functions.find((fn) => fn.id === program.entry);\n return fn && accessedStorage(fn, core).has(root.id);\n }),\n );\n if (owners.length !== 1) {\n report(\n `Continuation owner ${scope.instance} must belong to exactly one caller task.`,\n root.span,\n );\n continue;\n }\n deployment = {\n tasks: deployment.tasks.map((task) =>\n task.name === owners[0]!.name\n ? { ...task, programs: [...task.programs, continuation.name] }\n : task,\n ),\n };\n }\n const http = new Map<string, HttpEndpoint>();\n for (const block of core.blocks)\n if (block.runtime?.kind === \"http\" || block.runtime?.kind === \"rpc\") {\n try {\n validateHttpLayout(block, new Map(core.types.map((type) => [type.id, type])));\n http.set(\n block.id,\n block.runtime.kind === \"rpc\"\n ? {\n transport: \"opcua\",\n host: \"\",\n port: 0,\n authority: \"\",\n path: block.runtime.path,\n token: \"\",\n timeoutMs: options.http.timeoutMs,\n tls: false,\n }\n : resolveHttpEndpoint(block.runtime.url, options.http),\n );\n } catch (cause) {\n report(cause instanceof Error ? cause.message : String(cause), block.span);\n }\n }\n\n const storageBindings = validateIo(core, options, report);\n validateTasks(core, deployment, report);\n validateStorage(core, options, report);\n validateConstants(core, report);\n const { publication, errors } = resolvePublication(core, options.publish);\n for (const error of errors) report(error);\n\n if (diagnostics.length) return { diagnostics };\n\n const plan: CodesysPlan = Object.freeze({\n core,\n deployment: structuredClone(deployment),\n options: structuredClone(options),\n storageBindings,\n publication,\n http: Object.fromEntries(http),\n [planned]: true as const,\n });\n // Parsed options can contain nested engineering settings; detach and freeze the complete plan.\n const freeze = (value: unknown): void => {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return;\n for (const child of Object.values(value)) freeze(child);\n Object.freeze(value);\n };\n freeze(plan.deployment);\n freeze(plan.options);\n freeze(plan.storageBindings);\n freeze(plan.publication);\n plans.add(plan);\n return { plan, diagnostics: [] };\n}\n\ntype Report = (message: string, span?: SourceSpan) => void;\n\n/** Validate every `io` binding and return the ones that name authored storage. */\nfunction validateIo(\n core: VerifiedCoreModule,\n options: CodesysOptions,\n report: Report,\n): StorageBinding[] {\n // Compare physical bindings as bit intervals, regardless of their spelling.\n // Different widths can still overlap.\n const types = new Map(core.types.map((type) => [type.id, type]));\n const targets: {\n name: string;\n binding: CodesysOptions[\"io\"][string];\n type: PlcType;\n region: \"I\" | \"Q\";\n span?: SourceSpan;\n }[] = [];\n const names = new Set<string>();\n for (const item of core.variables.filter(\n (item) => item.storage === \"input\" || item.storage === \"output\",\n )) {\n if (names.has(item.name))\n report(`Ambiguous I/O name ${item.name}; logical I/O names must be unique.`, item.span);\n names.add(item.name);\n const binding = Object.hasOwn(options.io, item.name) ? options.io[item.name] : undefined;\n if (!binding) {\n report(`Missing I/O binding for ${item.name}.`, item.span);\n continue;\n }\n targets.push({\n name: item.name,\n binding,\n type: types.get(item.type)!,\n region: item.storage === \"input\" ? \"I\" : \"Q\",\n span: item.span,\n });\n }\n\n const scheduled = new Set<string>();\n for (const program of core.programs) {\n const fn = core.functions.find((item) => item.id === program.entry)!;\n for (const id of accessedStorage(fn, core)) scheduled.add(id);\n }\n const storageBindings: StorageBinding[] = [];\n for (const [name, binding] of Object.entries(options.io)) {\n if (names.has(name)) continue;\n if (!isStoragePath(name)) {\n report(`Unknown I/O binding ${name}.`);\n continue;\n }\n const resolved = resolveStoragePath(core, name);\n if (\"error\" in resolved) {\n report(resolved.error);\n continue;\n }\n const overlapping = storageBindings.find((other) => nested(other, resolved));\n if (overlapping) report(`${name} overlaps the binding ${overlapping.key}.`);\n if (!scheduled.has(resolved.root.id))\n report(\n `${name}: no scheduled program uses ${resolved.root.name}, so it would never be copied.`,\n );\n storageBindings.push(resolved);\n targets.push({\n name,\n binding,\n type: resolved.type,\n region: binding.address[1] === \"I\" ? \"I\" : \"Q\",\n });\n }\n\n const addresses: {\n region: string;\n start: bigint;\n end: bigint;\n name: string;\n shared?: boolean;\n }[] = [];\n for (const { name, binding, type, region, span } of targets) {\n // An array binds at its first element; the remaining elements follow at\n // consecutive addresses of the same width, like an EDS byte/word span.\n const array = type.kind === \"array\" ? type : undefined;\n const element = array ? types.get(array.element) : type;\n // Typegen spells channels as IEC types; equal layouts bind (an EDS UINT flag word into a WORD).\n const layout = ioLayout(iecSpelling(type, types) ?? \"\");\n if (binding.type && (!layout || ioLayout(binding.type) !== layout))\n report(`I/O type mismatch for ${name}: ${type.id} cannot bind to ${binding.type}.`, span);\n if (!binding.address.startsWith(`%${region}`))\n report(`Wrong address region for ${name}: expected %${region}X.`, span);\n const match = /^%([IQ])([XBWD])([0-9]+)(?:\\.([0-7]))?$/.exec(binding.address);\n if (!match) continue;\n if (region === \"I\" && element?.kind === \"float\")\n report(\n \"Floating logical inputs require an explicit runtime nonfinite policy, which is not supported yet.\",\n span,\n );\n if (array && element?.kind === \"bool\")\n report(\n `BOOL arrays are not bit-packed in CODESYS I/O; bind each element of ${name} separately.`,\n span,\n );\n const size = match[2] === \"X\" ? 1 : match[2] === \"B\" ? 8 : match[2] === \"W\" ? 16 : 32;\n if (ioBits(element) !== size) report(`Address size does not match ${name}:${type.id}.`, span);\n // CODESYS numbers %IW/%ID by element: %IW12 is bytes 24-25. See verify.py.\n const unit = size === 1 ? 8n : BigInt(size);\n const offset = BigInt(match[3]!);\n const start = offset * unit + BigInt(match[4] ?? 0),\n end = start + BigInt(size) * BigInt(array?.length ?? 1);\n if (binding.inverted && (region !== \"I\" || element?.kind !== \"bool\" || array))\n report(`Only a BOOL input can be inverted: ${name}.`, span);\n if (binding.shared && region !== \"I\") report(`Only an input can be shared: ${name}.`, span);\n const collision = addresses.find(\n (address) =>\n address.region === match[1] &&\n address.start < end &&\n start < address.end &&\n !(binding.shared && address.shared && address.start === start && address.end === end),\n );\n if (collision)\n report(`Overlapping I/O address ${binding.address} with ${collision.name}.`, span);\n addresses.push({ region: match[1]!, start, end, name, shared: binding.shared });\n if (offset > 0x7fff_ffffn) report(`I/O offset is too large: ${binding.address}.`, span);\n }\n return storageBindings;\n}\n\n/** Two storage bindings conflict when one target contains the other. */\nfunction nested(left: StorageBinding, right: StorageBinding): boolean {\n return (\n left.root.id === right.root.id &&\n left.segments.every((a, index) => {\n const b = right.segments[index];\n if (!b) return true;\n return a.kind === \"field\"\n ? b.kind === \"field\" && a.name === b.name\n : b.kind === \"index\" && a.value === b.value;\n })\n );\n}\n\n/** Width of one bound element; BOOL is a single bit, numeric scalars their storage width. */\nfunction ioBits(type: PlcType | undefined): number {\n if (type?.kind === \"bool\") return 1;\n return type && \"bits\" in type ? type.bits : 0;\n}\n\nfunction validateTasks(core: VerifiedCoreModule, deployment: Deployment, report: Report): void {\n // One cyclic task owns each mutable storage root, including transitive calls\n // and borrowed globals. Sharing state within an ordered task remains valid.\n const programs = new Map(core.programs.map((program) => [program.name, program]));\n const assignment = new Map<string, string>();\n const taskNames = new Set<string>();\n const stateOwners = new Map<string, string>();\n const globals = new Map(core.variables.map((item) => [item.id, item]));\n const functions = new Map(core.functions.map((item) => [item.id, item]));\n const blockRuntimes = new Map(\n core.types.flatMap((type) =>\n type.kind === \"block\"\n ? [[type.id, core.blocks.find((block) => block.id === type.block)?.runtime?.kind] as const]\n : [],\n ),\n );\n for (const task of deployment.tasks) {\n if (!isIecIdentifier(task.name)) report(`Invalid task name ${task.name}.`);\n if (taskNames.has(task.name.toUpperCase())) report(`Duplicate task name ${task.name}.`);\n taskNames.add(task.name.toUpperCase());\n if (!Number.isInteger(task.priority) || task.priority < 0 || task.priority > 31)\n report(`Task ${task.name} priority must be 0..31.`);\n if (!/^[1-9][0-9]*$/.test(task.intervalNanoseconds))\n report(`Invalid task interval for ${task.name}.`);\n else {\n const ns = BigInt(task.intervalNanoseconds);\n if (ns % 1_000_000n || ns > 4_294_967_295_000_000n)\n report(`Task ${task.name} requires an exact positive TIME interval in milliseconds.`);\n }\n if (!task.programs.length) report(`Task ${task.name} has no programs.`);\n for (const name of task.programs) {\n const program = programs.get(name);\n if (!program) {\n report(`Unknown task program ${name}.`);\n continue;\n }\n if (assignment.has(name)) report(`Program ${name} must belong to exactly one task.`);\n assignment.set(name, task.name);\n const fn = functions.get(program.entry);\n if (!fn) throw new Error(\"Verified core has a missing entry.\");\n const host =\n program.background &&\n core.variables.find(\n (item) =>\n item.name === program.background?.worker &&\n item.span.file === fn.span.file &&\n blockRuntimes.get(item.type) === \"backgroundHost\",\n );\n for (const id of accessedStorage(fn, core, host ? host.id : undefined)) {\n const item = globals.get(id);\n if (!item || item.storage === \"constant\") continue;\n if (blockRuntimes.get(item.type) === \"mailbox\") continue;\n const ownsWorker =\n program.background?.worker === item.name && item.span.file === fn.span.file;\n if (program.background && (!ownsWorker || item.id === host?.id))\n report(\n `Background task ${program.name} accesses scan-owned storage ${item.name}; pass value snapshots through the mailbox.`,\n item.span,\n );\n const owner = stateOwners.get(id);\n if (owner && owner !== task.name)\n report(\n `Storage ${item.name} is shared across cyclic tasks ${owner} and ${task.name}.`,\n item.span,\n );\n stateOwners.set(id, task.name);\n }\n }\n }\n for (const name of programs.keys())\n if (!assignment.has(name)) report(`Program ${name} has no cyclic task.`);\n}\n\nfunction validateStorage(core: VerifiedCoreModule, options: CodesysOptions, report: Report): void {\n const programs = new Map(core.programs.map((program) => [program.name, program]));\n if (core.blocks.some((block) => block.standard === \"Blinker\")) {\n for (const target of Object.values(options.programNames ?? {})) {\n if (target.toUpperCase() === \"UTIL\")\n report(`IEC object name ${target} shadows the Util library namespace required by Blinker.`);\n }\n }\n const explicitNames = new Set<string>();\n for (const [name, target] of Object.entries(options.programNames ?? {})) {\n if (!programs.has(name)) report(`Unknown program name override ${name}.`);\n if (explicitNames.has(target.toUpperCase())) report(`Duplicate IEC program name ${target}.`);\n explicitNames.add(target.toUpperCase());\n }\n const types = new Map(core.types.map((type) => [type.id, type]));\n const blocks = new Map(core.blocks.map((block) => [block.id, block]));\n\n // InOut addresses must not survive a retained restart, including nested children.\n const blockHasInOut = (id: string): boolean => {\n const block = blocks.get(id)!;\n return (\n block.inputs.some((input) => input.mode === \"inOut\") ||\n block.state.some((field) => {\n const type = instancedBlock(field.type, types);\n return type !== undefined && blockHasInOut(type.block);\n })\n );\n };\n\n const layout = storageLayout(core);\n for (const block of core.blocks)\n if (layout.retainedBlocks.has(block.id) && blockHasInOut(block.id))\n report(\n \"Retained function blocks cannot contain direct or nested InOut references.\",\n block.span,\n );\n for (const variable of core.variables) {\n const type = instancedBlock(variable.type, types);\n if (variable.retain && type && blockHasInOut(type.block))\n report(\n \"Retained function blocks cannot contain direct or nested InOut references.\",\n variable.span,\n );\n }\n}\n\nfunction validateConstants(core: VerifiedCoreModule, report: Report): void {\n const types = new Map(core.types.map((type) => [type.id, type]));\n const constant = (value: Constant, id: string, span?: SourceSpan): void => {\n const type = types.get(id)!;\n if (type.kind === \"string\" && value.kind === \"string\") {\n if (\n type.encoding === \"utf8\" &&\n [...value.value].some(\n (character) => character.charCodeAt(0) === 0 || character.charCodeAt(0) > 127,\n )\n )\n report(\n \"Non-ASCII STRING literals require a verified project-wide UTF8 setting; this profile supports ASCII literals.\",\n span,\n );\n if (type.encoding === \"utf16\" && /[\\uD800-\\uDFFF]/.test(value.value))\n report(\"CODESYS WSTRING uses UCS-2 and cannot represent surrogate code units.\", span);\n }\n if (type.kind === \"array\" && value.kind === \"array\")\n for (const item of value.items) constant(item, type.element, span);\n if (type.kind === \"record\" && value.kind === \"record\")\n for (const field of type.fields) constant(value.fields[field.name]!, field.type, span);\n };\n const constantsInPath = (path: CorePath = []): void => {\n for (const segment of path) if (segment.kind === \"index\") constantsInExpression(segment.value);\n };\n const constantsInExpression = (value: CoreExpression): void => {\n if (value.kind === \"constant\") constant(value.value, value.type, value.span);\n if (value.kind === \"load\") constantsInPath(value.path);\n if (value.kind === \"borrow\") constantsInPath(value.place.path);\n if (value.kind === \"unary\" || value.kind === \"convert\") constantsInExpression(value.operand);\n if (value.kind === \"binary\") {\n constantsInExpression(value.left);\n constantsInExpression(value.right);\n }\n };\n const constantsInBody = (items: readonly CoreStatement[]): void => {\n for (const item of items) {\n if (item.kind === \"assign\") {\n constantsInExpression(item.value);\n constantsInPath(item.path);\n }\n if (item.kind === \"if\") {\n constantsInExpression(item.condition);\n constantsInBody(item.then);\n constantsInBody(item.else);\n }\n if (item.kind === \"switch\") {\n constantsInExpression(item.value);\n item.cases.forEach((branch) => {\n for (const value of branch.values) constant(value, item.value.type, item.span);\n constantsInBody(branch.body);\n });\n constantsInBody(item.fallback);\n }\n if (item.kind === \"for\") constantsInBody(item.body);\n if (item.kind === \"invoke\") {\n if (item.index) constantsInExpression(item.index);\n item.arguments.forEach(constantsInExpression);\n }\n if (item.kind === \"blockUpdate\") {\n if (item.index) constantsInExpression(item.index);\n Object.values(item.inputs).forEach(constantsInExpression);\n }\n if (item.kind === \"return\" && item.value) constantsInExpression(item.value);\n }\n };\n core.variables.forEach((variable) => {\n if (variable.initial) constant(variable.initial, variable.type, variable.span);\n });\n for (const fn of core.functions) constantsInBody(fn.body);\n core.blocks.forEach((block) => {\n [...block.outputs, ...block.state, ...block.locals].forEach((variable) => {\n if (variable.initial) constant(variable.initial, variable.type, variable.span);\n });\n constantsInBody(block.body);\n });\n}\n",
|
|
11
11
|
"import type { PlcType, Variable, VerifiedCoreModule } from \"@tsplc/compiler/ir\";\nimport { type IoTarget, ioLayout } from \"@tsplc/typegen/hardware\";\nimport { moduleName } from \"./storage.ts\";\n\ntype StorageSegment =\n { kind: \"field\"; record: string; name: string } | { kind: \"index\"; value: number };\n\n/** An `io` key that names a field of authored module storage, e.g. `PlantIO.Motor.Output.Run`. */\nexport interface StorageBinding {\n key: string;\n root: Variable;\n segments: readonly StorageSegment[];\n type: PlcType;\n}\n\nconst pathPattern = /^([\\w$-]+)\\.([A-Za-z_$][\\w$]*)((?:\\.[A-Za-z_$][\\w$]*|\\[-?\\d+\\])*)$/;\n\nexport const isStoragePath = (key: string): boolean => key.includes(\".\") || key.includes(\"[\");\n\n/** Resolve a storage path against verified types; the error explains the first unresolvable segment. */\nexport function resolveStoragePath(\n core: VerifiedCoreModule,\n key: string,\n): StorageBinding | { error: string } {\n const match = pathPattern.exec(key);\n if (!match) return { error: `${key}: expected Module.variable followed by .field or [index].` };\n const [, module, name, rest] = match;\n const roots = core.variables.filter(\n (item) => item.storage === \"module\" && item.name === name && moduleName(item) === module,\n );\n if (roots.length !== 1)\n return {\n error: roots.length\n ? `${key}: ${module}.${name} is declared by more than one module named ${module}.`\n : `${key}: no mutable module variable ${module}.${name}.`,\n };\n const root = roots[0]!;\n const types = new Map(core.types.map((type) => [type.id, type]));\n let type = types.get(root.type)!;\n const segments: StorageSegment[] = [];\n for (const [, field, index] of rest!.matchAll(/\\.([A-Za-z_$][\\w$]*)|\\[(-?\\d+)\\]/g)) {\n if (field !== undefined) {\n const member = type.kind === \"record\" ? type.fields.find((f) => f.name === field) : undefined;\n if (!member) return { error: `${key}: no field ${field}.` };\n segments.push({ kind: \"field\", record: type.id, name: field });\n type = types.get(member.type)!;\n } else {\n const value = Number(index);\n if (type.kind !== \"array\") return { error: `${key}: ${index} indexes a non-array value.` };\n if (value < type.lowerBound || value >= type.lowerBound + type.length)\n return {\n error: `${key}: index ${value} is outside ${type.lowerBound}..${type.lowerBound + type.length - 1}.`,\n };\n segments.push({ kind: \"index\", value });\n type = types.get(type.element)!;\n }\n }\n return { key, root, segments, type };\n}\n\n/** IEC spelling of a bindable type, as typegen spells channels; undefined for records, enums, strings. */\nexport function iecSpelling(\n type: PlcType,\n types: ReadonlyMap<string, PlcType>,\n): string | undefined {\n if (\n type.kind === \"bool\" ||\n type.kind === \"integer\" ||\n type.kind === \"bits\" ||\n type.kind === \"float\"\n )\n return type.id;\n if (type.kind !== \"array\") return undefined;\n const element = iecSpelling(types.get(type.element)!, types);\n const upper = type.lowerBound + type.length - 1;\n return element && !element.startsWith(\"ARRAY\")\n ? `ARRAY[${type.lowerBound}..${upper}] OF ${element}`\n : undefined;\n}\n\n/** Every key an `io` mapping may use: logical IO names and paths into mutable module storage. */\nexport function ioTargets(core: VerifiedCoreModule): IoTarget[] {\n const types = new Map(core.types.map((type) => [type.id, type]));\n const targets: IoTarget[] = [];\n const add = (key: string, type: PlcType) => {\n const layout = ioLayout(iecSpelling(type, types) ?? \"\");\n if (layout) targets.push({ key, layout });\n };\n const visit = (key: string, type: PlcType): void => {\n add(key, type);\n if (type.kind === \"record\")\n for (const field of type.fields) visit(`${key}.${field.name}`, types.get(field.type)!);\n // Typegen writes keys as template literal types, so any index matches here.\n if (type.kind === \"array\") visit(`${key}[` + \"${number}\" + \"]\", types.get(type.element)!);\n };\n for (const variable of core.variables) {\n if (variable.storage === \"input\" || variable.storage === \"output\")\n add(variable.name, types.get(variable.type)!);\n else if (variable.storage === \"module\")\n visit(`${moduleName(variable)}.${variable.name}`, types.get(variable.type)!);\n }\n return targets;\n}\n",
|
|
12
12
|
"import { basename } from \"node:path\";\nimport { instancedBlock, type Variable, type VerifiedCoreModule } from \"@tsplc/compiler/ir\";\n\ninterface GlobalList {\n id: string;\n module: string;\n storage: \"constants\" | \"retained\" | \"state\";\n variables: Variable[];\n}\n\n/** The source module that owns a module-level variable: its file name without extension. */\nexport const moduleName = (variable: Variable): string =>\n basename(variable.span.file).replace(/\\.[^.]+$/, \"\");\n\n/** CODESYS promotes an enclosing instance when private child state is retained. */\nexport function storageLayout(core: VerifiedCoreModule) {\n const types = new Map(core.types.map((type) => [type.id, type]));\n const blocks = new Map(core.blocks.map((block) => [block.id, block]));\n const retention = new Map<string, boolean>();\n const blockRetained = (id: string): boolean => {\n const cached = retention.get(id);\n if (cached !== undefined) return cached;\n const block = blocks.get(id);\n if (!block) throw new Error(\"Missing verified block during retention planning.\");\n const retained = block.state.some((field) => {\n const type = instancedBlock(field.type, types);\n return field.retain || (type !== undefined && blockRetained(type.block));\n });\n retention.set(id, retained);\n return retained;\n };\n\n const retainedBlocks = new Set(\n core.blocks.filter((block) => blockRetained(block.id)).map((block) => block.id),\n );\n const retainedVariables = new Set(\n [...core.variables, ...core.blocks.flatMap((block) => block.state)]\n .filter((variable) => {\n const type = instancedBlock(variable.type, types);\n return variable.retain || (type !== undefined && retainedBlocks.has(type.block));\n })\n .map((variable) => variable.id),\n );\n\n const groups = new Map<string, GlobalList>();\n for (const variable of core.variables) {\n if (variable.storage === \"input\" || variable.storage === \"output\") continue;\n const storage =\n variable.storage === \"constant\"\n ? \"constants\"\n : retainedVariables.has(variable.id)\n ? \"retained\"\n : \"state\";\n const id = `${variable.span.file}:${storage}`;\n let group = groups.get(id);\n if (!group) {\n group = { id, module: moduleName(variable), storage, variables: [] };\n groups.set(id, group);\n }\n group.variables.push(variable);\n }\n return { retainedBlocks, retainedVariables, globalLists: [...groups.values()] };\n}\n",
|
|
13
|
-
"import type { CoreFunctionBlock, GeneratedObject, PlcType } from \"@tsplc/compiler/ir\";\nimport type { HttpOptions } from \"@tsplc/config\";\nimport type { CodesysTypes } from \"./types.ts\";\n\nexport const opcuaServiceCapacity = 16;\n\nexport interface HttpEndpoint {\n transport?: \"http\" | \"opcua\";\n host: string;\n port: number;\n authority: string;\n path: string;\n token: string;\n timeoutMs: number;\n tls: boolean;\n}\nexport const resolveHttpEndpoint = (value: string, input: HttpOptions): HttpEndpoint => {\n const url = new URL(value);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.hash ||\n url.hostname.includes(\":\")\n )\n throw new Error(\n \"fetch requires an HTTP(S) URL with an IPv4 address or DNS hostname, without credentials or fragment.\",\n );\n if (\n (url.pathname + url.search).length > 2048 ||\n url.hostname.length > 253 ||\n Number(url.port || (url.protocol === \"https:\" ? 443 : 80)) === 0\n )\n throw new Error(\"HTTP URL exceeds the native host/path limits or has an invalid port.\");\n let token = \"\";\n const origins = new Set<string>();\n for (const credential of input.credentials) {\n const configured = process.env[credential.originEnv],\n secret = process.env[credential.bearerTokenEnv];\n if (!configured || !secret)\n throw new Error(\n `HTTP credentials require ${credential.originEnv} and ${credential.bearerTokenEnv}.`,\n );\n const origin = new URL(configured);\n if (\n ![\"http:\", \"https:\"].includes(origin.protocol) ||\n origin.username ||\n origin.password ||\n origin.pathname !== \"/\" ||\n origin.search ||\n origin.hash\n )\n throw new Error(\n `HTTP credential origin ${credential.originEnv} must contain only a scheme, host and port.`,\n );\n if (origins.has(origin.origin)) throw new Error(\"HTTP credential origins must be unique.\");\n origins.add(origin.origin);\n if (/[\\r\\n\\0]/.test(secret) || secret.length > 512)\n throw new Error(`Invalid bearer token in ${credential.bearerTokenEnv}.`);\n if (origin.origin === url.origin) token = secret;\n }\n return {\n host: url.hostname,\n port: Number(url.port || (url.protocol === \"https:\" ? 443 : 80)),\n authority: url.host,\n path: url.pathname + url.search,\n token,\n timeoutMs: input.timeoutMs,\n tls: url.protocol === \"https:\",\n };\n};\nconst quote = (text: string) =>\n \"'\" +\n text.replaceAll(\"$\", \"$$\").replaceAll(\"'\", \"$'\").replaceAll(\"\\r\", \"$R\").replaceAll(\"\\n\", \"$N\") +\n \"'\";\n\nconst httpLayouts = (block: CoreFunctionBlock, types: ReadonlyMap<string, PlcType>) => {\n const request = block.inputs.find((v) => v.name === \"request\"),\n response = block.outputs.find((v) => v.name === \"result\");\n if (!request || !response) throw new Error(\"Missing HTTP record ports.\");\n const requestLayout = types.get(request.type),\n responseLayout = types.get(response.type);\n if (\n requestLayout?.kind !== \"record\" ||\n responseLayout?.kind !== \"record\" ||\n responseLayout.fields.length === 0 ||\n responseLayout.fields.length > 31\n )\n throw new Error(\"HTTP requires closed request/response records with 1..31 response fields.\");\n const scalarSize = (id: string): number => {\n const type = types.get(id);\n if (type?.kind === \"string\" && type.encoding === \"utf8\" && type.capacity <= 2048)\n return type.capacity * 6 + 2;\n if (type?.kind === \"bool\") return 5;\n if (type?.kind === \"enum\")\n return Math.max(...type.members.map((member) => member.value.length));\n if ((type?.kind === \"integer\" || type?.kind === \"bits\") && type.bits <= 32) {\n const signed = type.kind === \"integer\" && type.signed;\n return String(signed ? -(2 ** (type.bits - 1)) : 2 ** type.bits - 1).length;\n }\n throw new Error(\n \"HTTP JSON supports bounded UTF-8 strings, BOOL, enums, and integers up to 32 bits.\",\n );\n };\n const recordSize = (record: typeof requestLayout, response: boolean) =>\n 2 +\n record.fields.reduce((size, field) => {\n const type = types.get(field.type);\n const valueSize =\n type?.kind === \"array\" && !response\n ? 2 + type.length * (scalarSize(type.element) + 1)\n : scalarSize(field.type);\n return size + field.name.length + 4 + valueSize;\n }, 0);\n if (recordSize(requestLayout, false) > 2048 || recordSize(responseLayout, true) > 2048)\n throw new Error(\n \"The worst-case HTTP JSON payload exceeds the native 2048-byte buffer; reduce record/string/array bounds.\",\n );\n return { request, response, requestLayout, responseLayout };\n};\nexport const validateHttpLayout = (\n block: CoreFunctionBlock,\n types: ReadonlyMap<string, PlcType>,\n): void => {\n httpLayouts(block, types);\n};\n\n/** Native transport and typed JSON codecs; no application protocol lives here. */\nexport const emitHttp = (\n block: CoreFunctionBlock,\n name: string,\n fields: ReadonlyMap<string, string>,\n types: ReadonlyMap<string, PlcType>,\n target: CodesysTypes,\n endpoint: HttpEndpoint,\n network: string,\n rpcGlobal?: string,\n): GeneratedObject => {\n const port = (label: string) => {\n const variable = [...block.inputs, ...block.outputs].find((v) => v.name === label);\n if (!variable) throw new Error(\"Missing HTTP port \" + label);\n return fields.get(variable.id)!;\n };\n const { request, response, requestLayout, responseLayout } = httpLayouts(block, types);\n const encode = (typeId: string, value: string): string => {\n const type = types.get(typeId)!;\n if (type.kind === \"array\")\n return Array.from(\n { length: type.length },\n (_, i) =>\n `${i ? \"Append(',');\" : \"\"}${encode(type.element, `${value}[${i + type.lowerBound}]`)}`,\n ).join(\"\\n\");\n if (type.kind === \"string\" && type.encoding === \"utf8\" && type.capacity <= 2048)\n return `WriteString(${value});`;\n if (type.kind === \"bool\")\n return `IF ${value} THEN Append('true'); ELSE Append('false'); END_IF;`;\n if (type.kind === \"enum\") return `Append(DINT_TO_STRING(TO_DINT(${value})));`;\n if (type.kind === \"bits\" && type.bits <= 32)\n return `Append(UDINT_TO_STRING(TO_UDINT(${value})));`;\n if (type.kind === \"integer\" && type.bits <= 32)\n return `Append(${target.name(typeId)}_TO_STRING(${value}));`;\n throw new Error(\n \"HTTP JSON supports bounded UTF-8 strings, BOOL, enums, integers up to 32 bits and fixed arrays.\",\n );\n };\n const requestCode = requestLayout.fields\n .map((field, i) => {\n const type = types.get(field.type)!,\n value = `${port(\"request\")}.${target.field(request.type, field.name)}`;\n return `Append(${quote((i ? \",\" : \"\") + '\"' + field.name + '\":')});${type.kind === \"array\" ? \"Append('[');\" : \"\"}${encode(field.type, value)}${type.kind === \"array\" ? \"Append(']');\" : \"\"}`;\n })\n .join(\"\\n\");\n const responseCode = responseLayout.fields\n .map((field, i) => {\n const type = types.get(field.type)!,\n value = `${port(\"result\")}.${target.field(response.type, field.name)}`;\n let decode: string;\n if (type.kind === \"string\" && type.encoding === \"utf8\" && type.capacity <= 2048)\n decode = `ReadString(); IF ByteLength(token) > ${type.capacity} THEN malformed := TRUE; ELSE ${value} := token; END_IF;`;\n else if (type.kind === \"bool\")\n decode = `IF MatchLiteral('true') THEN ${value}:=TRUE; ELSIF MatchLiteral('false') THEN ${value}:=FALSE; ELSE malformed:=TRUE;END_IF;`;\n else if (\n ((type.kind === \"integer\" || type.kind === \"bits\") && type.bits <= 32) ||\n type.kind === \"enum\"\n ) {\n const signed = type.kind === \"enum\" || (type.kind === \"integer\" && type.signed),\n bits = type.kind === \"enum\" ? 32 : type.bits;\n const min = signed ? -(2 ** (bits - 1)) : 0,\n max = signed ? 2 ** (bits - 1) - 1 : 2 ** bits - 1;\n decode = `ReadInteger(); IF numberValue < ${min} OR numberValue > ${max} THEN malformed:=TRUE; ELSE `;\n if (type.kind === \"enum\")\n decode += `CASE numberValue OF ${type.members.map((m) => `${m.value}: ${value}:=${target.name(field.type)}.${target.field(field.type, m.name)};`).join(\" \")} ELSE malformed:=TRUE; END_CASE;`;\n else decode += `${value}:=TO_${target.name(field.type)}(numberValue);`;\n decode += \" END_IF;\";\n } else throw new Error(\"HTTP responses currently require flat scalar records.\");\n return `${i === 0 ? \"IF\" : \"ELSIF\"} part = ${quote(field.name)} THEN IF (seen AND SHL(DWORD#1,${i})) <> 0 THEN malformed:=TRUE; END_IF; seen:=seen OR SHL(DWORD#1,${i}); ${decode}`;\n })\n .join(\"\\n\");\n const inputs = block.inputs\n .map((v) => `${fields.get(v.id)} : ${target.name(v.type)};`)\n .join(\"\\n\");\n const outputs = block.outputs\n .map((v) => `${fields.get(v.id)} : ${target.name(v.type)};`)\n .join(\"\\n\");\n const decodeResponse = `cursor:=1;malformed:=FALSE;seen:=0;\nSkipWhitespace();Expect(123);SkipWhitespace();\nWHILE cursor<=TO_UINT(ByteLength(payload)) AND NOT malformed DO\n IF payload[cursor-1]=125 THEN cursor:=cursor+1;EXIT;END_IF;\n ReadString();part:=token;SkipWhitespace();Expect(58);SkipWhitespace();\n ${responseCode} ELSE malformed:=TRUE;END_IF;\n SkipWhitespace();\n IF payload[cursor-1]=44 THEN cursor:=cursor+1;SkipWhitespace();IF payload[cursor-1]=125 THEN malformed:=TRUE;END_IF;\n ELSIF payload[cursor-1]<>125 THEN malformed:=TRUE;END_IF;\nEND_WHILE;\nSkipWhitespace();\nIF malformed OR cursor<>TO_UINT(ByteLength(payload))+1 OR seen<>DWORD#${2 ** responseLayout.fields.length - 1} THEN ${port(\"error\")}:=4;END_IF;`;\n if (endpoint.transport === \"opcua\") {\n if (!rpcGlobal) throw new Error(\"Missing OPC UA RPC global.\");\n const channel = (field: string, index = \"slotIndex\") => `${rpcGlobal}.${field}[${index}]`;\n return {\n id: block.id,\n kind: \"functionBlock\",\n name,\n declaration: `FUNCTION_BLOCK ${name}\nVAR_INPUT ${inputs} END_VAR\nVAR_OUTPUT ${outputs} END_VAR\nVAR\n timeout:TON;stage:UINT;slotIndex:UINT;candidate:UINT;\n identity:STRING(64);epoch:STRING(32);prefix:STRING(80);\n payload:STRING(2048);token:STRING(2048);part:STRING(2048);\n cursor:UINT;malformed:BOOL;seen:DWORD;numberValue:LINT;tokenUsed:UINT;\nEND_VAR`,\n implementation: `IF NOT ${port(\"start\")} OR ${port(\"cancel\")} THEN\n IF slotIndex>0 THEN ${channel(\"requestIds\")}:='';${channel(\"requests\")}:='';${channel(\"inUse\")}:=0;END_IF;\n slotIndex:=0;stage:=0;timeout(IN:=FALSE);${port(\"busy\")}:=FALSE;${port(\"done\")}:=FALSE;${port(\"error\")}:=0;RETURN;\nEND_IF;\nIF stage=0 THEN\n FOR candidate:=1 TO ${opcuaServiceCapacity} DO\n (* __COMPARE_AND_SWAP can fail spuriously on ARM64; retry while the slot reads free. *)\n WHILE slotIndex=0 AND ${channel(\"epochs\", \"candidate\")}<>'' AND ${channel(\"inUse\", \"candidate\")}=0 DO\n IF __COMPARE_AND_SWAP(ADR(${channel(\"inUse\", \"candidate\")}),0,1) THEN slotIndex:=candidate;END_IF;\n END_WHILE;\n IF slotIndex>0 THEN EXIT;END_IF;\n END_FOR;\n IF slotIndex=0 THEN ${port(\"error\")}:=7;stage:=90;\n ELSE\n ${channel(\"sequence\")}:=${channel(\"sequence\")}+1;\n IF ${channel(\"sequence\")}=0 THEN ${channel(\"epochs\")}:='';${port(\"error\")}:=5;stage:=90;\n ELSE\n epoch:=${channel(\"epochs\")};identity:=CONCAT(CONCAT(epoch,':'),UDINT_TO_STRING(${channel(\"sequence\")}));\n prefix:=CONCAT(identity,'|');payload:='';malformed:=FALSE;\n Append('{');${requestCode}Append('}');\n IF malformed THEN ${port(\"error\")}:=3;stage:=90;\n ELSIF ByteLength(payload)+LEN(prefix)>2048 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n FOR candidate:=0 TO LEN(prefix)-1 DO ${channel(\"requests\")}[candidate]:=prefix[candidate];END_FOR;\n FOR candidate:=0 TO ByteLength(payload)-1 DO ${channel(\"requests\")}[candidate+LEN(prefix)]:=payload[candidate];END_FOR;\n ${channel(\"requests\")}[ByteLength(payload)+LEN(prefix)]:=0;${channel(\"requestIds\")}:=identity;stage:=1;\n END_IF;\n END_IF;\n END_IF;\nEND_IF;\ntimeout(IN:=stage<90,PT:=T#${endpoint.timeoutMs}ms);\nIF timeout.Q THEN ${port(\"error\")}:=2;stage:=90;END_IF;\nIF stage=1 THEN\n IF ${channel(\"epochs\")}<>epoch THEN ${port(\"error\")}:=5;stage:=90;\n ELSIF ${channel(\"replyIds\")}=identity AND_THEN LEFT(${channel(\"replies\")},LEN(prefix))=prefix THEN\n payload:='';cursor:=LEN(prefix);\n IF ByteLength(${channel(\"replies\")})<cursor+4 THEN ${port(\"error\")}:=4;\n ELSIF ${channel(\"replies\")}[cursor]<>48 OR ${channel(\"replies\")}[cursor+1]<>124 THEN ${port(\"error\")}:=5;\n ELSE\n FOR candidate:=cursor+2 TO ByteLength(${channel(\"replies\")})-1 DO payload[candidate-cursor-2]:=${channel(\"replies\")}[candidate];END_FOR;\n payload[ByteLength(${channel(\"replies\")})-cursor-2]:=0;\n ${decodeResponse}\n END_IF;\n stage:=90;\n END_IF;\nEND_IF;\n${port(\"busy\")}:=stage<90;\nIF stage=90 THEN\n IF slotIndex>0 THEN ${channel(\"requestIds\")}:='';${channel(\"requests\")}:='';${channel(\"inUse\")}:=0;slotIndex:=0;END_IF;\n timeout(IN:=FALSE);${port(\"busy\")}:=FALSE;${port(\"done\")}:=TRUE;\nEND_IF;`,\n };\n }\n // Helpers are emitted as native methods under the HTTP block by the emitter.\n return {\n id: block.id,\n kind: \"functionBlock\",\n name,\n declaration: `FUNCTION_BLOCK ${name}\nVAR_INPUT\n${inputs}\nEND_VAR\nVAR_OUTPUT\n${outputs}\nEND_VAR\nVAR\n remoteAddress : NBS.IPv4Address;\n remoteIP : NBS.IIPAddress := remoteAddress;\n serverHost : STRING(255) := ${quote(endpoint.host)};\n resolver : NBS.ResolveHostname := (itfAsyncProperty:=${network});\n ${endpoint.tls ? `certificateVerifier : ${name}_CertificateVerifier;\\n tlsContext : NBS.TLSContext := (itfCertVerifer:=certificateVerifier,sUseCaseName:='tsPLC HTTPS',ePurpose:=NBS.PURPOSE.CLIENT_SIDE,sTLSVersion:='1.2',sHostname:=${quote(endpoint.host)},udiVerificationMode:=2);` : \"\"}\n client : NBS.TCP_Client := (itfAsyncProperty:=${network},itfIPAddress:=remoteAddress,uiPort:=${endpoint.port},udiTimeOut:=${endpoint.timeoutMs * 1000}${endpoint.tls ? \",itfTLSContext:=tlsContext\" : \"\"});\n writer : NBS.TCP_Write;\n reader : NBS.TCP_Read;\n timeout : TON;\n stage : UINT;\n wire : STRING(8192);\n received : STRING(8192);\n chunk : ARRAY[0..8191] OF BYTE;\n payload : STRING(2048);\n token : STRING(2048);\n part : STRING(2048);\n used : UINT;\n headerEnd : UINT;\n contentLength : DINT;\n status : UINT;\n cursor : UINT;\n malformed : BOOL;\n seen : DWORD;\n numberValue : LINT;\n wireUsed : UINT;\n tokenUsed : UINT;\n index : UINT;\nEND_VAR\n`,\n implementation: `IF NOT ${port(\"start\")} OR ${port(\"cancel\")} THEN\n resolver(xExecute:=FALSE,itfIPAddress:=remoteIP);client(xEnable:=FALSE); writer(xExecute:=FALSE); reader(xEnable:=FALSE); timeout(IN:=FALSE);\n stage:=0; ${port(\"busy\")}:=FALSE; ${port(\"done\")}:=FALSE; ${port(\"error\")}:=0;\n RETURN;\nEND_IF;\nIF stage=0 THEN\n payload:=''; malformed:=FALSE; used:=0; received:='';\n ${block.runtime?.kind === \"http\" && block.runtime.json ? `Append('{'); ${requestCode} Append('}');` : \"\"}\n IF malformed THEN ${port(\"error\")}:=3; stage:=90;\n ELSE\n wire:='';wireUsed:=0;\n AppendWire(${quote((block.runtime?.kind === \"http\" ? block.runtime.method : \"GET\") + \" \" + endpoint.path + \" HTTP/1.1\\r\\nHost: \" + endpoint.authority + \"\\r\\n\" + (endpoint.token ? \"Authorization: Bearer \" + endpoint.token + \"\\r\\n\" : \"\") + (block.runtime?.kind === \"http\" && block.runtime.json ? \"Content-Type: application/json\\r\\n\" : \"\") + \"Accept: application/json\\r\\nConnection: close\\r\\nContent-Length: \")});\n AppendWire(UINT_TO_STRING(ByteLength(payload)));AppendWire('$R$N$R$N');AppendWire(payload); stage:=10;\n END_IF;\nEND_IF;\ntimeout(IN:=stage<90,PT:=T#${endpoint.timeoutMs}ms);\nIF timeout.Q THEN ${port(\"error\")}:=2; stage:=90; END_IF;\n${port(\"busy\")}:=stage<90;\nIF stage=10 THEN\n resolver(xExecute:=TRUE,sHostname:=serverHost,itfIPAddress:=remoteIP);\n IF resolver.xError THEN ${port(\"error\")}:=5;stage:=90;ELSIF resolver.xDone THEN stage:=1;END_IF;\nEND_IF;\nIF stage=1 THEN\n client(xEnable:=TRUE);\n IF client.xError THEN ${port(\"error\")}:=${endpoint.tls ? 6 : 5};stage:=90; ELSIF client.xActive THEN stage:=2;END_IF;\nEND_IF;\nIF stage=2 THEN\n writer(xExecute:=TRUE,itfConnection:=client.itfConnection,pData:=ADR(wire),udiSize:=UINT_TO_UDINT(wireUsed));\n IF writer.xError THEN ${port(\"error\")}:=5;stage:=90;ELSIF writer.xDone THEN stage:=3;END_IF;\nEND_IF;\nIF stage=3 THEN\n IF used>=8191 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n reader(xEnable:=TRUE,itfConnection:=client.itfConnection,pData:=ADR(chunk),udiSize:=8191);\n IF reader.xError THEN ${port(\"error\")}:=5;stage:=90;\n ELSIF reader.xReady AND reader.udiCount>0 THEN\n IF TO_UDINT(used)+reader.udiCount>8191 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n FOR index:=0 TO TO_UINT(reader.udiCount)-1 DO received[used+index]:=chunk[index];END_FOR;\n used:=used+TO_UINT(reader.udiCount);received[used]:=0;\n FindHeaders();\n IF headerEnd=0 AND used>4096 THEN ${port(\"error\")}:=3;stage:=90;END_IF;\n IF headerEnd>0 THEN\n IF headerEnd>4096 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n ReadHeaders();\n IF malformed OR contentLength<0 OR contentLength>2048 THEN ${port(\"error\")}:=3;stage:=90;\n ELSIF TO_DINT(used)>=TO_DINT(headerEnd)+3+contentLength THEN\n IF status<200 OR status>=300 THEN ${port(\"error\")}:=10000+status;stage:=90;\n ELSE\n payload:='';IF contentLength>0 THEN FOR index:=0 TO TO_UINT(contentLength)-1 DO payload[index]:=received[headerEnd+3+index]; END_FOR;END_IF;payload[TO_UINT(contentLength)]:=0; ${decodeResponse}\n stage:=90;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\nEND_IF;\nIF stage=90 THEN\n resolver(xExecute:=FALSE,itfIPAddress:=remoteIP);client(xEnable:=FALSE);writer(xExecute:=FALSE);reader(xEnable:=FALSE);timeout(IN:=FALSE);\n ${port(\"busy\")}:=FALSE;${port(\"done\")}:=TRUE;\nEND_IF;\n`,\n };\n};\n\nexport const httpCertificateVerifier = (\n owner: string,\n name: string,\n endpoint: HttpEndpoint,\n): GeneratedObject[] => {\n if (!endpoint.tls) return [];\n const id = `${owner}:certificateVerifier`;\n // NBS represents certificate handles as pointers; verification keeps the native trust result.\n const ipv4 = /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(endpoint.host);\n return [\n {\n id,\n kind: \"functionBlock\",\n name: `${name}_CertificateVerifier`,\n declaration: `FUNCTION_BLOCK ${name}_CertificateVerifier IMPLEMENTS NBS.ICertificateVerifier\nVAR\n hostname:STRING(255):=${quote(endpoint.host)};\n ${ipv4 ? `address:ARRAY[0..3] OF BYTE := [${endpoint.host.split(\".\").join(\",\")}];` : \"\"}\nEND_VAR`,\n implementation: \"\",\n },\n {\n id: `${id}:VerifyCertificate`,\n parent: id,\n kind: \"method\",\n name: \"VerifyCertificate\",\n declaration: `METHOD PUBLIC VerifyCertificate : UDINT\nVAR_INPUT hCert:POINTER TO BYTE;eCurState:UDINT;END_VAR\nVAR matched:BOOL;result:UDINT;END_VAR`,\n implementation: `VerifyCertificate:=eCurState;\nIF eCurState<>0 THEN RETURN;END_IF;\nmatched:=CmpX509Cert_Implementation.${ipv4 ? \"X509CertCheckIP(hCert,ADR(address),0,ADR(result))\" : \"X509CertCheckHost(hCert,ADR(hostname),4,ADR(result))\"};\nIF result<>0 THEN VerifyCertificate:=result;ELSIF NOT matched THEN VerifyCertificate:=1;END_IF;`,\n },\n ];\n};\n\nexport const httpMethods = (\n owner: string,\n transport: \"http\" | \"opcua\" = \"http\",\n): GeneratedObject[] => {\n const method = (\n name: string,\n declaration: string,\n implementation: string,\n result?: string,\n ): GeneratedObject => ({\n id: `${owner}:${name}`,\n parent: owner,\n kind: \"method\",\n name,\n declaration: `METHOD PRIVATE ${name}${result ? ` : ${result}` : \"\"}\\n${declaration}`,\n implementation,\n });\n return [\n // Standard string helpers accept STRING(255); native buffers must retain their full byte length.\n method(\n \"ByteLength\",\n \"VAR_INPUT value:STRING(8192);END_VAR\\nVAR i:UINT;END_VAR\",\n \"ByteLength:=0;FOR i:=0 TO 8191 DO IF value[i]=0 THEN ByteLength:=i;RETURN;END_IF;END_FOR;ByteLength:=8192;\",\n \"UINT\",\n ),\n method(\n \"Append\",\n \"VAR_INPUT value : STRING(2048); END_VAR\\nVAR offset:UINT;i:UINT;END_VAR\",\n `offset:=TO_UINT(ByteLength(payload));IF offset+TO_UINT(ByteLength(value))>2048 THEN malformed:=TRUE; ELSE IF ByteLength(value)>0 THEN FOR i:=0 TO TO_UINT(ByteLength(value))-1 DO payload[offset+i]:=value[i];END_FOR;END_IF;payload[offset+TO_UINT(ByteLength(value))]:=0;END_IF;`,\n ),\n method(\n \"AppendWire\",\n \"VAR_INPUT value:STRING(8192);END_VAR\\nVAR i:UINT;END_VAR\",\n `IF wireUsed+TO_UINT(ByteLength(value))>8191 THEN malformed:=TRUE;RETURN;END_IF;IF ByteLength(value)>0 THEN FOR i:=0 TO TO_UINT(ByteLength(value))-1 DO wire[wireUsed+i]:=value[i];END_FOR;END_IF;wireUsed:=wireUsed+TO_UINT(ByteLength(value));wire[wireUsed]:=0;`,\n ),\n method(\n \"FindHeaders\",\n \"VAR i:UINT;END_VAR\",\n `headerEnd:=0;IF used<4 THEN RETURN;END_IF;\nFOR i:=0 TO used-4 DO IF received[i]=13 AND received[i+1]=10 AND received[i+2]=13 AND received[i+3]=10 THEN headerEnd:=i+1;RETURN;END_IF;END_FOR;`,\n ),\n method(\n \"MatchLiteral\",\n \"VAR_INPUT value:STRING(8);END_VAR\\nVAR i:UINT;size:UINT;END_VAR\",\n `MatchLiteral:=FALSE;size:=TO_UINT(ByteLength(value));IF cursor+size-1>TO_UINT(ByteLength(payload)) THEN RETURN;END_IF;\nFOR i:=0 TO size-1 DO IF payload[cursor-1+i]<>value[i] THEN RETURN;END_IF;END_FOR;cursor:=cursor+size;MatchLiteral:=TRUE;`,\n \"BOOL\",\n ),\n method(\n \"ReadHeaders\",\n `VAR lineStart:UINT;lineEnd:UINT;i:UINT;j:UINT;key:STRING(64);octet:BYTE;found:BOOL;digits:UINT;END_VAR`,\n `malformed:=FALSE;found:=FALSE;contentLength:=-1;\nIF LEFT(received,9)<>'HTTP/1.1 ' AND LEFT(received,9)<>'HTTP/1.0 ' THEN malformed:=TRUE;RETURN;END_IF;\nstatus:=0;FOR i:=9 TO 11 DO IF received[i]<48 OR received[i]>57 THEN malformed:=TRUE;RETURN;END_IF;status:=status*10+TO_UINT(received[i]-48);END_FOR;\nlineStart:=1;\nWHILE lineStart<headerEnd DO\n lineEnd:=lineStart;WHILE lineEnd<headerEnd AND received[lineEnd-1]<>13 DO lineEnd:=lineEnd+1;END_WHILE;\n key:='';j:=0;i:=lineStart;\n WHILE i<lineEnd AND received[i-1]<>58 AND j<63 DO octet:=received[i-1];IF octet>=65 AND octet<=90 THEN octet:=octet+32;END_IF;key[j]:=octet;j:=j+1;i:=i+1;END_WHILE;key[j]:=0;\n IF key='transfer-encoding' THEN malformed:=TRUE;RETURN;END_IF;\n IF key='content-length' THEN\n IF found THEN malformed:=TRUE;RETURN;END_IF;found:=TRUE;contentLength:=0;digits:=0;i:=i+1;\n WHILE i<lineEnd AND received[i-1]=32 DO i:=i+1;END_WHILE;\n WHILE i<lineEnd DO octet:=received[i-1];IF octet<48 OR octet>57 OR digits>=5 THEN malformed:=TRUE;RETURN;END_IF;contentLength:=contentLength*10+TO_DINT(octet-48);digits:=digits+1;i:=i+1;END_WHILE;\n IF digits=0 THEN malformed:=TRUE;RETURN;END_IF;\n END_IF;\n lineStart:=lineEnd+2;\nEND_WHILE;`,\n ),\n method(\n \"WriteString\",\n `VAR_INPUT value : STRING(2048); END_VAR\\nVAR i:UINT; one:STRING(1); hex:STRING(16):='0123456789abcdef'; END_VAR`,\n `Append('\"');IF ByteLength(value)>0 THEN FOR i:=0 TO ByteLength(value)-1 DO\n one[0]:=value[i];one[1]:=0;\n IF value[i]=34 OR value[i]=92 THEN Append('\\\\');Append(one);\n ELSIF value[i]<32 THEN Append('\\\\u00');one[0]:=hex[SHR(value[i],4)];Append(one);one[0]:=hex[value[i] AND 15];Append(one);\n ELSE Append(one);END_IF;\n END_FOR;END_IF;Append('\"');`,\n ),\n method(\n \"SkipWhitespace\",\n \"\",\n `WHILE cursor<=TO_UINT(ByteLength(payload)) DO IF payload[cursor-1]<>32 AND payload[cursor-1]<>9 AND payload[cursor-1]<>10 AND payload[cursor-1]<>13 THEN EXIT;END_IF;cursor:=cursor+1;END_WHILE;`,\n ),\n method(\n \"Expect\",\n \"VAR_INPUT value:BYTE; END_VAR\",\n `IF cursor>TO_UINT(ByteLength(payload)) OR_ELSE payload[cursor-1]<>value THEN malformed:=TRUE;ELSE cursor:=cursor+1;END_IF;`,\n ),\n method(\n \"TokenByte\",\n \"VAR_INPUT value:BYTE;END_VAR\",\n `IF tokenUsed>=2048 OR value=0 THEN malformed:=TRUE;RETURN;END_IF;token[tokenUsed]:=value;tokenUsed:=tokenUsed+1;token[tokenUsed]:=0;`,\n ),\n method(\n \"ReadHex\",\n \"VAR value:UDINT;i:UINT;octet:BYTE;END_VAR\",\n `numberValue:=0;FOR i:=1 TO 4 DO\nIF cursor>TO_UINT(ByteLength(payload)) THEN malformed:=TRUE;RETURN;END_IF;\noctet:=payload[cursor-1];cursor:=cursor+1;\nIF octet>=48 AND octet<=57 THEN value:=TO_UDINT(octet-48);ELSIF octet>=65 AND octet<=70 THEN value:=TO_UDINT(octet-55);ELSIF octet>=97 AND octet<=102 THEN value:=TO_UDINT(octet-87);ELSE malformed:=TRUE;RETURN;END_IF;\nnumberValue:=numberValue*16+TO_LINT(value);END_FOR;`,\n ),\n method(\n \"ReadString\",\n `VAR octet:BYTE;point:UDINT;high:UDINT;END_VAR`,\n `token:='';tokenUsed:=0;Expect(34);\nWHILE cursor<=TO_UINT(ByteLength(payload)) AND NOT malformed DO\n octet:=payload[cursor-1];cursor:=cursor+1;\n IF octet=34 THEN ValidateUtf8();RETURN;END_IF;\n IF octet=92 THEN\n IF cursor>TO_UINT(ByteLength(payload)) THEN malformed:=TRUE;RETURN;END_IF;\n octet:=payload[cursor-1];cursor:=cursor+1;\n CASE octet OF\n 34,47,92: TokenByte(octet);\n 98:TokenByte(8);102:TokenByte(12);110:TokenByte(10);114:TokenByte(13);116:TokenByte(9);\n 117:\n ReadHex();point:=TO_UDINT(numberValue);\n IF point>=55296 AND point<=56319 THEN\n high:=point;Expect(92);Expect(117);ReadHex();\n IF numberValue<56320 OR numberValue>57343 THEN malformed:=TRUE;RETURN;END_IF;\n point:=65536+(high-55296)*1024+TO_UDINT(numberValue)-56320;\n ELSIF point>=56320 AND point<=57343 THEN malformed:=TRUE;RETURN;END_IF;\n IF point<128 THEN TokenByte(TO_BYTE(point));\n ELSIF point<2048 THEN TokenByte(TO_BYTE(192+SHR(point,6)));TokenByte(TO_BYTE(128+(point AND 63)));\n ELSIF point<65536 THEN TokenByte(TO_BYTE(224+SHR(point,12)));TokenByte(TO_BYTE(128+(SHR(point,6) AND 63)));TokenByte(TO_BYTE(128+(point AND 63)));\n ELSE TokenByte(TO_BYTE(240+SHR(point,18)));TokenByte(TO_BYTE(128+(SHR(point,12) AND 63)));TokenByte(TO_BYTE(128+(SHR(point,6) AND 63)));TokenByte(TO_BYTE(128+(point AND 63)));END_IF;\n ELSE malformed:=TRUE;RETURN;\n END_CASE;\n ELSIF octet<32 THEN malformed:=TRUE;RETURN;ELSE TokenByte(octet);END_IF;\nEND_WHILE;malformed:=TRUE;`,\n ),\n method(\n \"ValidateUtf8\",\n \"VAR i:UINT;j:UINT;count:UINT;first:BYTE;next:BYTE;END_VAR\",\n `i:=0;\nWHILE i<tokenUsed AND NOT malformed DO\n first:=token[i];\n IF first<128 THEN i:=i+1;\n ELSE\n IF first>=194 AND first<=223 THEN count:=1;ELSIF first>=224 AND first<=239 THEN count:=2;ELSIF first>=240 AND first<=244 THEN count:=3;ELSE malformed:=TRUE;RETURN;END_IF;\n IF i+count>=tokenUsed THEN malformed:=TRUE;RETURN;END_IF;\n next:=token[i+1];\n IF (first=224 AND next<160) OR (first=237 AND next>=160) OR (first=240 AND next<144) OR (first=244 AND next>=144) THEN malformed:=TRUE;RETURN;END_IF;\n FOR j:=1 TO count DO IF token[i+j]<128 OR token[i+j]>191 THEN malformed:=TRUE;RETURN;END_IF;END_FOR;\n i:=i+count+1;\n END_IF;\nEND_WHILE;`,\n ),\n method(\n \"ReadInteger\",\n \"VAR negative:BOOL;digits:UINT;octet:BYTE;END_VAR\",\n `numberValue:=0;negative:=FALSE;digits:=0;\nIF payload[cursor-1]=45 THEN negative:=TRUE;cursor:=cursor+1;END_IF;\nWHILE cursor<=TO_UINT(ByteLength(payload)) DO\n octet:=payload[cursor-1];IF octet<48 OR octet>57 THEN EXIT;END_IF;\n IF digits>=10 THEN malformed:=TRUE;RETURN;END_IF;\n IF digits>0 AND numberValue=0 THEN malformed:=TRUE;RETURN;END_IF;numberValue:=numberValue*10+TO_LINT(octet-48);digits:=digits+1;cursor:=cursor+1;\nEND_WHILE;\nIF digits=0 THEN malformed:=TRUE;END_IF;IF negative THEN numberValue:=-numberValue;END_IF;`,\n ),\n ].filter(\n (item) =>\n transport === \"http\" || ![\"AppendWire\", \"FindHeaders\", \"ReadHeaders\"].includes(item.name),\n );\n};\n",
|
|
13
|
+
"import type { CoreFunctionBlock, GeneratedObject, PlcType } from \"@tsplc/compiler/ir\";\nimport type { HttpOptions } from \"@tsplc/config\";\nimport type { CodesysTypes } from \"./types.ts\";\n\nexport const opcuaServiceCapacity = 16;\n\nexport interface HttpEndpoint {\n transport?: \"http\" | \"opcua\";\n host: string;\n port: number;\n authority: string;\n path: string;\n token: string;\n timeoutMs: number;\n tls: boolean;\n}\nexport const resolveHttpEndpoint = (value: string, input: HttpOptions): HttpEndpoint => {\n const url = new URL(value);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.hash ||\n url.hostname.includes(\":\")\n )\n throw new Error(\n \"fetch requires an HTTP(S) URL with an IPv4 address or DNS hostname, without credentials or fragment.\",\n );\n if (\n (url.pathname + url.search).length > 2048 ||\n url.hostname.length > 253 ||\n Number(url.port || (url.protocol === \"https:\" ? 443 : 80)) === 0\n )\n throw new Error(\"HTTP URL exceeds the native host/path limits or has an invalid port.\");\n let token = \"\";\n const origins = new Set<string>();\n for (const credential of input.credentials) {\n const configured = process.env[credential.originEnv],\n secret = process.env[credential.bearerTokenEnv];\n if (!configured || !secret)\n throw new Error(\n `HTTP credentials require ${credential.originEnv} and ${credential.bearerTokenEnv}.`,\n );\n const origin = new URL(configured);\n if (\n ![\"http:\", \"https:\"].includes(origin.protocol) ||\n origin.username ||\n origin.password ||\n origin.pathname !== \"/\" ||\n origin.search ||\n origin.hash\n )\n throw new Error(\n `HTTP credential origin ${credential.originEnv} must contain only a scheme, host and port.`,\n );\n if (origins.has(origin.origin)) throw new Error(\"HTTP credential origins must be unique.\");\n origins.add(origin.origin);\n if (/[\\r\\n\\0]/.test(secret) || secret.length > 512)\n throw new Error(`Invalid bearer token in ${credential.bearerTokenEnv}.`);\n if (origin.origin === url.origin) token = secret;\n }\n return {\n host: url.hostname,\n port: Number(url.port || (url.protocol === \"https:\" ? 443 : 80)),\n authority: url.host,\n path: url.pathname + url.search,\n token,\n timeoutMs: input.timeoutMs,\n tls: url.protocol === \"https:\",\n };\n};\nconst quote = (text: string) =>\n \"'\" +\n text.replaceAll(\"$\", \"$$\").replaceAll(\"'\", \"$'\").replaceAll(\"\\r\", \"$R\").replaceAll(\"\\n\", \"$N\") +\n \"'\";\n\nconst httpLayouts = (block: CoreFunctionBlock, types: ReadonlyMap<string, PlcType>) => {\n const request = block.inputs.find((v) => v.name === \"request\"),\n response = block.outputs.find((v) => v.name === \"result\");\n if (!request || !response) throw new Error(\"Missing HTTP record ports.\");\n const requestLayout = types.get(request.type),\n responseLayout = types.get(response.type);\n if (\n requestLayout?.kind !== \"record\" ||\n responseLayout?.kind !== \"record\" ||\n responseLayout.fields.length === 0 ||\n responseLayout.fields.length > 31\n )\n throw new Error(\"HTTP requires closed request/response records with 1..31 response fields.\");\n const scalarSize = (id: string): number => {\n const type = types.get(id);\n if (type?.kind === \"string\" && type.encoding === \"utf8\" && type.capacity <= 2048)\n return type.capacity * 6 + 2;\n if (type?.kind === \"bool\") return 5;\n if (type?.kind === \"enum\")\n return Math.max(...type.members.map((member) => member.value.length));\n if ((type?.kind === \"integer\" || type?.kind === \"bits\") && type.bits <= 32) {\n const signed = type.kind === \"integer\" && type.signed;\n return String(signed ? -(2 ** (type.bits - 1)) : 2 ** type.bits - 1).length;\n }\n throw new Error(\n \"HTTP JSON supports bounded UTF-8 strings, BOOL, enums, and integers up to 32 bits.\",\n );\n };\n const recordSize = (record: typeof requestLayout, response: boolean) =>\n 2 +\n record.fields.reduce((size, field) => {\n const type = types.get(field.type);\n const valueSize =\n type?.kind === \"array\" && !response\n ? 2 + type.length * (scalarSize(type.element) + 1)\n : scalarSize(field.type);\n return size + field.name.length + 4 + valueSize;\n }, 0);\n if (recordSize(requestLayout, false) > 2048 || recordSize(responseLayout, true) > 2048)\n throw new Error(\n \"The worst-case HTTP JSON payload exceeds the native 2048-byte buffer; reduce record/string/array bounds.\",\n );\n return { request, response, requestLayout, responseLayout };\n};\nexport const validateHttpLayout = (\n block: CoreFunctionBlock,\n types: ReadonlyMap<string, PlcType>,\n): void => {\n httpLayouts(block, types);\n};\n\n/** Native transport and typed JSON codecs; no application protocol lives here. */\nexport const emitHttp = (\n block: CoreFunctionBlock,\n name: string,\n fields: ReadonlyMap<string, string>,\n types: ReadonlyMap<string, PlcType>,\n target: CodesysTypes,\n endpoint: HttpEndpoint,\n network: string,\n rpcGlobal?: string,\n): GeneratedObject => {\n const port = (label: string) => {\n const variable = [...block.inputs, ...block.outputs].find((v) => v.name === label);\n if (!variable) throw new Error(\"Missing HTTP port \" + label);\n return fields.get(variable.id)!;\n };\n const { request, response, requestLayout, responseLayout } = httpLayouts(block, types);\n const encode = (typeId: string, value: string): string => {\n const type = types.get(typeId)!;\n if (type.kind === \"array\")\n return Array.from(\n { length: type.length },\n (_, i) =>\n `${i ? \"Append(',');\" : \"\"}${encode(type.element, `${value}[${i + type.lowerBound}]`)}`,\n ).join(\"\\n\");\n if (type.kind === \"string\" && type.encoding === \"utf8\" && type.capacity <= 2048)\n return `WriteString(${value});`;\n if (type.kind === \"bool\")\n return `IF ${value} THEN Append('true'); ELSE Append('false'); END_IF;`;\n if (type.kind === \"enum\") return `Append(DINT_TO_STRING(TO_DINT(${value})));`;\n if (type.kind === \"bits\" && type.bits <= 32)\n return `Append(UDINT_TO_STRING(TO_UDINT(${value})));`;\n if (type.kind === \"integer\" && type.bits <= 32)\n return `Append(${target.name(typeId)}_TO_STRING(${value}));`;\n throw new Error(\n \"HTTP JSON supports bounded UTF-8 strings, BOOL, enums, integers up to 32 bits and fixed arrays.\",\n );\n };\n const requestCode = requestLayout.fields\n .map((field, i) => {\n const type = types.get(field.type)!,\n value = `${port(\"request\")}.${target.field(request.type, field.name)}`;\n return `Append(${quote((i ? \",\" : \"\") + '\"' + field.name + '\":')});${type.kind === \"array\" ? \"Append('[');\" : \"\"}${encode(field.type, value)}${type.kind === \"array\" ? \"Append(']');\" : \"\"}`;\n })\n .join(\"\\n\");\n const responseCode = responseLayout.fields\n .map((field, i) => {\n const type = types.get(field.type)!,\n value = `${port(\"result\")}.${target.field(response.type, field.name)}`;\n let decode: string;\n if (type.kind === \"string\" && type.encoding === \"utf8\" && type.capacity <= 2048)\n decode = `ReadString(); IF ByteLength(token) > ${type.capacity} THEN malformed := TRUE; ELSE ${value} := token; END_IF;`;\n else if (type.kind === \"bool\")\n decode = `IF MatchLiteral('true') THEN ${value}:=TRUE; ELSIF MatchLiteral('false') THEN ${value}:=FALSE; ELSE malformed:=TRUE;END_IF;`;\n else if (\n ((type.kind === \"integer\" || type.kind === \"bits\") && type.bits <= 32) ||\n type.kind === \"enum\"\n ) {\n const signed = type.kind === \"enum\" || (type.kind === \"integer\" && type.signed),\n bits = type.kind === \"enum\" ? 32 : type.bits;\n const min = signed ? -(2 ** (bits - 1)) : 0,\n max = signed ? 2 ** (bits - 1) - 1 : 2 ** bits - 1;\n decode = `ReadInteger(); IF numberValue < ${min} OR numberValue > ${max} THEN malformed:=TRUE; ELSE `;\n if (type.kind === \"enum\")\n decode += `CASE numberValue OF ${type.members.map((m) => `${m.value}: ${value}:=${target.name(field.type)}.${target.field(field.type, m.name)};`).join(\" \")} ELSE malformed:=TRUE; END_CASE;`;\n else decode += `${value}:=TO_${target.name(field.type)}(numberValue);`;\n decode += \" END_IF;\";\n } else throw new Error(\"HTTP responses currently require flat scalar records.\");\n return `${i === 0 ? \"IF\" : \"ELSIF\"} part = ${quote(field.name)} THEN IF (seen AND SHL(DWORD#1,${i})) <> 0 THEN malformed:=TRUE; END_IF; seen:=seen OR SHL(DWORD#1,${i}); ${decode}`;\n })\n .join(\"\\n\");\n const inputs = block.inputs\n .map((v) => `${fields.get(v.id)} : ${target.name(v.type)};`)\n .join(\"\\n\");\n const outputs = block.outputs\n .map((v) => `${fields.get(v.id)} : ${target.name(v.type)};`)\n .join(\"\\n\");\n const decodeResponse = `cursor:=1;malformed:=FALSE;seen:=0;\nSkipWhitespace();Expect(123);SkipWhitespace();\nWHILE cursor<=TO_UINT(ByteLength(payload)) AND NOT malformed DO\n IF payload[cursor-1]=125 THEN cursor:=cursor+1;EXIT;END_IF;\n ReadString();part:=token;SkipWhitespace();Expect(58);SkipWhitespace();\n ${responseCode} ELSE malformed:=TRUE;END_IF;\n SkipWhitespace();\n IF payload[cursor-1]=44 THEN cursor:=cursor+1;SkipWhitespace();IF payload[cursor-1]=125 THEN malformed:=TRUE;END_IF;\n ELSIF payload[cursor-1]<>125 THEN malformed:=TRUE;END_IF;\nEND_WHILE;\nSkipWhitespace();\nIF malformed OR cursor<>TO_UINT(ByteLength(payload))+1 OR seen<>DWORD#${2 ** responseLayout.fields.length - 1} THEN ${port(\"error\")}:=4;END_IF;`;\n if (endpoint.transport === \"opcua\") {\n if (!rpcGlobal) throw new Error(\"Missing OPC UA RPC global.\");\n const channel = (field: string, index = \"slotIndex\") => `${rpcGlobal}.${field}[${index}]`;\n return {\n id: block.id,\n kind: \"functionBlock\",\n name,\n declaration: `FUNCTION_BLOCK ${name}\nVAR_INPUT ${inputs} END_VAR\nVAR_OUTPUT ${outputs} END_VAR\nVAR\n timeout:TON;stage:UINT;slotIndex:UINT;candidate:UINT;\n identity:STRING(64);epoch:STRING(32);prefix:STRING(80);\n payload:STRING(2048);token:STRING(2048);part:STRING(2048);\n cursor:UINT;malformed:BOOL;seen:DWORD;numberValue:LINT;tokenUsed:UINT;\nEND_VAR`,\n implementation: `IF NOT ${port(\"start\")} OR ${port(\"cancel\")} THEN\n IF slotIndex>0 THEN ${channel(\"requestIds\")}:='';${channel(\"requests\")}:='';${channel(\"inUse\")}:=0;END_IF;\n slotIndex:=0;stage:=0;timeout(IN:=FALSE);${port(\"busy\")}:=FALSE;${port(\"done\")}:=FALSE;${port(\"error\")}:=0;RETURN;\nEND_IF;\nIF stage=0 THEN\n FOR candidate:=1 TO ${opcuaServiceCapacity} DO\n (* __COMPARE_AND_SWAP can fail spuriously on ARM64; retry while the slot reads free. *)\n WHILE slotIndex=0 AND ${channel(\"epochs\", \"candidate\")}<>'' AND ${channel(\"inUse\", \"candidate\")}=0 DO\n IF __COMPARE_AND_SWAP(ADR(${channel(\"inUse\", \"candidate\")}),0,1) THEN slotIndex:=candidate;END_IF;\n END_WHILE;\n IF slotIndex>0 THEN EXIT;END_IF;\n END_FOR;\n IF slotIndex=0 THEN ${port(\"error\")}:=7;stage:=90;\n ELSE\n ${channel(\"sequence\")}:=${channel(\"sequence\")}+1;\n IF ${channel(\"sequence\")}=0 THEN ${channel(\"epochs\")}:='';${port(\"error\")}:=5;stage:=90;\n ELSE\n epoch:=${channel(\"epochs\")};identity:=CONCAT(CONCAT(epoch,':'),UDINT_TO_STRING(${channel(\"sequence\")}));\n prefix:=CONCAT(identity,'|');payload:='';malformed:=FALSE;\n Append('{');${requestCode}Append('}');\n IF malformed THEN ${port(\"error\")}:=3;stage:=90;\n ELSIF ByteLength(payload)+LEN(prefix)>2048 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n FOR candidate:=0 TO LEN(prefix)-1 DO ${channel(\"requests\")}[candidate]:=prefix[candidate];END_FOR;\n FOR candidate:=0 TO ByteLength(payload)-1 DO ${channel(\"requests\")}[candidate+LEN(prefix)]:=payload[candidate];END_FOR;\n ${channel(\"requests\")}[ByteLength(payload)+LEN(prefix)]:=0;${channel(\"requestIds\")}:=identity;stage:=1;\n END_IF;\n END_IF;\n END_IF;\nEND_IF;\ntimeout(IN:=stage<90,PT:=T#${endpoint.timeoutMs}ms);\nIF timeout.Q THEN ${port(\"error\")}:=2;stage:=90;END_IF;\nIF stage=1 THEN\n IF ${channel(\"epochs\")}<>epoch THEN ${port(\"error\")}:=5;stage:=90;\n ELSIF ${channel(\"replyIds\")}=identity AND_THEN LEFT(${channel(\"replies\")},LEN(prefix))=prefix THEN\n payload:='';cursor:=LEN(prefix);\n IF ByteLength(${channel(\"replies\")})<cursor+4 THEN ${port(\"error\")}:=4;\n ELSIF ${channel(\"replies\")}[cursor]<>48 OR ${channel(\"replies\")}[cursor+1]<>124 THEN ${port(\"error\")}:=5;\n ELSE\n FOR candidate:=cursor+2 TO ByteLength(${channel(\"replies\")})-1 DO payload[candidate-cursor-2]:=${channel(\"replies\")}[candidate];END_FOR;\n payload[ByteLength(${channel(\"replies\")})-cursor-2]:=0;\n ${decodeResponse}\n END_IF;\n stage:=90;\n END_IF;\nEND_IF;\n${port(\"busy\")}:=stage<90;\nIF stage=90 THEN\n IF slotIndex>0 THEN ${channel(\"requestIds\")}:='';${channel(\"requests\")}:='';${channel(\"inUse\")}:=0;slotIndex:=0;END_IF;\n timeout(IN:=FALSE);${port(\"busy\")}:=FALSE;${port(\"done\")}:=TRUE;\nEND_IF;`,\n };\n }\n // Helpers are emitted as native methods under the HTTP block by the emitter.\n return {\n id: block.id,\n kind: \"functionBlock\",\n name,\n declaration: `FUNCTION_BLOCK ${name}\nVAR_INPUT\n${inputs}\nEND_VAR\nVAR_OUTPUT\n${outputs}\nEND_VAR\nVAR\n remoteAddress : NBS.IPv4Address;\n remoteIP : NBS.IIPAddress := remoteAddress;\n resolver : NBS.ResolveHostname := (itfAsyncProperty:=${network});\n ${endpoint.tls ? `certificateVerifier : ${name}_CertificateVerifier;\\n tlsContext : NBS.TLSContext := (itfCertVerifer:=certificateVerifier,sUseCaseName:='tsPLC HTTPS',ePurpose:=NBS.PURPOSE.CLIENT_SIDE,sTLSVersion:='1.2',sHostname:=${quote(endpoint.host)},udiVerificationMode:=2);` : \"\"}\n client : NBS.TCP_Client := (itfAsyncProperty:=${network},itfIPAddress:=remoteAddress,uiPort:=${endpoint.port},udiTimeOut:=${endpoint.timeoutMs * 1000}${endpoint.tls ? \",itfTLSContext:=tlsContext\" : \"\"});\n writer : NBS.TCP_Write;\n reader : NBS.TCP_Read;\n timeout : TON;\n stage : UINT;\n wire : STRING(8192);\n received : STRING(8192);\n chunk : ARRAY[0..8191] OF BYTE;\n payload : STRING(2048);\n token : STRING(2048);\n part : STRING(2048);\n used : UINT;\n headerEnd : UINT;\n contentLength : DINT;\n status : UINT;\n cursor : UINT;\n malformed : BOOL;\n seen : DWORD;\n numberValue : LINT;\n wireUsed : UINT;\n tokenUsed : UINT;\n index : UINT;\nEND_VAR\n`,\n // The host goes in the resolver call, not an initial value: an online change keeps the values\n // an instance already holds, so a changed host would otherwise wait for a download.\n implementation: `IF NOT ${port(\"start\")} OR ${port(\"cancel\")} THEN\n resolver(xExecute:=FALSE,itfIPAddress:=remoteIP);client(xEnable:=FALSE); writer(xExecute:=FALSE); reader(xEnable:=FALSE); timeout(IN:=FALSE);\n stage:=0; ${port(\"busy\")}:=FALSE; ${port(\"done\")}:=FALSE; ${port(\"error\")}:=0;\n RETURN;\nEND_IF;\nIF stage=0 THEN\n payload:=''; malformed:=FALSE; used:=0; received:='';\n ${block.runtime?.kind === \"http\" && block.runtime.json ? `Append('{'); ${requestCode} Append('}');` : \"\"}\n IF malformed THEN ${port(\"error\")}:=3; stage:=90;\n ELSE\n wire:='';wireUsed:=0;\n AppendWire(${quote((block.runtime?.kind === \"http\" ? block.runtime.method : \"GET\") + \" \" + endpoint.path + \" HTTP/1.1\\r\\nHost: \" + endpoint.authority + \"\\r\\n\" + (endpoint.token ? \"Authorization: Bearer \" + endpoint.token + \"\\r\\n\" : \"\") + (block.runtime?.kind === \"http\" && block.runtime.json ? \"Content-Type: application/json\\r\\n\" : \"\") + \"Accept: application/json\\r\\nConnection: close\\r\\nContent-Length: \")});\n AppendWire(UINT_TO_STRING(ByteLength(payload)));AppendWire('$R$N$R$N');AppendWire(payload); stage:=10;\n END_IF;\nEND_IF;\ntimeout(IN:=stage<90,PT:=T#${endpoint.timeoutMs}ms);\nIF timeout.Q THEN ${port(\"error\")}:=2; stage:=90; END_IF;\n${port(\"busy\")}:=stage<90;\nIF stage=10 THEN\n resolver(xExecute:=TRUE,sHostname:=${quote(endpoint.host)},itfIPAddress:=remoteIP);\n IF resolver.xError THEN ${port(\"error\")}:=5;stage:=90;ELSIF resolver.xDone THEN stage:=1;END_IF;\nEND_IF;\nIF stage=1 THEN\n client(xEnable:=TRUE);\n IF client.xError THEN ${port(\"error\")}:=${endpoint.tls ? 6 : 5};stage:=90; ELSIF client.xActive THEN stage:=2;END_IF;\nEND_IF;\nIF stage=2 THEN\n writer(xExecute:=TRUE,itfConnection:=client.itfConnection,pData:=ADR(wire),udiSize:=UINT_TO_UDINT(wireUsed));\n IF writer.xError THEN ${port(\"error\")}:=5;stage:=90;ELSIF writer.xDone THEN stage:=3;END_IF;\nEND_IF;\nIF stage=3 THEN\n IF used>=8191 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n reader(xEnable:=TRUE,itfConnection:=client.itfConnection,pData:=ADR(chunk),udiSize:=8191);\n IF reader.xError THEN ${port(\"error\")}:=5;stage:=90;\n ELSIF reader.xReady AND reader.udiCount>0 THEN\n IF TO_UDINT(used)+reader.udiCount>8191 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n FOR index:=0 TO TO_UINT(reader.udiCount)-1 DO received[used+index]:=chunk[index];END_FOR;\n used:=used+TO_UINT(reader.udiCount);received[used]:=0;\n FindHeaders();\n IF headerEnd=0 AND used>4096 THEN ${port(\"error\")}:=3;stage:=90;END_IF;\n IF headerEnd>0 THEN\n IF headerEnd>4096 THEN ${port(\"error\")}:=3;stage:=90;\n ELSE\n ReadHeaders();\n IF malformed OR contentLength<0 OR contentLength>2048 THEN ${port(\"error\")}:=3;stage:=90;\n ELSIF TO_DINT(used)>=TO_DINT(headerEnd)+3+contentLength THEN\n IF status<200 OR status>=300 THEN ${port(\"error\")}:=10000+status;stage:=90;\n ELSE\n payload:='';IF contentLength>0 THEN FOR index:=0 TO TO_UINT(contentLength)-1 DO payload[index]:=received[headerEnd+3+index]; END_FOR;END_IF;payload[TO_UINT(contentLength)]:=0; ${decodeResponse}\n stage:=90;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\n END_IF;\nEND_IF;\nIF stage=90 THEN\n resolver(xExecute:=FALSE,itfIPAddress:=remoteIP);client(xEnable:=FALSE);writer(xExecute:=FALSE);reader(xEnable:=FALSE);timeout(IN:=FALSE);\n ${port(\"busy\")}:=FALSE;${port(\"done\")}:=TRUE;\nEND_IF;\n`,\n };\n};\n\nexport const httpCertificateVerifier = (\n owner: string,\n name: string,\n endpoint: HttpEndpoint,\n): GeneratedObject[] => {\n if (!endpoint.tls) return [];\n const id = `${owner}:certificateVerifier`;\n // NBS represents certificate handles as pointers; verification keeps the native trust result.\n const ipv4 = /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(endpoint.host);\n return [\n {\n id,\n kind: \"functionBlock\",\n name: `${name}_CertificateVerifier`,\n declaration: `FUNCTION_BLOCK ${name}_CertificateVerifier IMPLEMENTS NBS.ICertificateVerifier\nVAR\n hostname:STRING(255):=${quote(endpoint.host)};\n ${ipv4 ? `address:ARRAY[0..3] OF BYTE := [${endpoint.host.split(\".\").join(\",\")}];` : \"\"}\nEND_VAR`,\n implementation: \"\",\n },\n {\n id: `${id}:VerifyCertificate`,\n parent: id,\n kind: \"method\",\n name: \"VerifyCertificate\",\n declaration: `METHOD PUBLIC VerifyCertificate : UDINT\nVAR_INPUT hCert:POINTER TO BYTE;eCurState:UDINT;END_VAR\nVAR matched:BOOL;result:UDINT;END_VAR`,\n implementation: `VerifyCertificate:=eCurState;\nIF eCurState<>0 THEN RETURN;END_IF;\nmatched:=CmpX509Cert_Implementation.${ipv4 ? \"X509CertCheckIP(hCert,ADR(address),0,ADR(result))\" : \"X509CertCheckHost(hCert,ADR(hostname),4,ADR(result))\"};\nIF result<>0 THEN VerifyCertificate:=result;ELSIF NOT matched THEN VerifyCertificate:=1;END_IF;`,\n },\n ];\n};\n\nexport const httpMethods = (\n owner: string,\n transport: \"http\" | \"opcua\" = \"http\",\n): GeneratedObject[] => {\n const method = (\n name: string,\n declaration: string,\n implementation: string,\n result?: string,\n ): GeneratedObject => ({\n id: `${owner}:${name}`,\n parent: owner,\n kind: \"method\",\n name,\n declaration: `METHOD PRIVATE ${name}${result ? ` : ${result}` : \"\"}\\n${declaration}`,\n implementation,\n });\n return [\n // Standard string helpers accept STRING(255); native buffers must retain their full byte length.\n method(\n \"ByteLength\",\n \"VAR_INPUT value:STRING(8192);END_VAR\\nVAR i:UINT;END_VAR\",\n \"ByteLength:=0;FOR i:=0 TO 8191 DO IF value[i]=0 THEN ByteLength:=i;RETURN;END_IF;END_FOR;ByteLength:=8192;\",\n \"UINT\",\n ),\n method(\n \"Append\",\n \"VAR_INPUT value : STRING(2048); END_VAR\\nVAR offset:UINT;i:UINT;END_VAR\",\n `offset:=TO_UINT(ByteLength(payload));IF offset+TO_UINT(ByteLength(value))>2048 THEN malformed:=TRUE; ELSE IF ByteLength(value)>0 THEN FOR i:=0 TO TO_UINT(ByteLength(value))-1 DO payload[offset+i]:=value[i];END_FOR;END_IF;payload[offset+TO_UINT(ByteLength(value))]:=0;END_IF;`,\n ),\n method(\n \"AppendWire\",\n \"VAR_INPUT value:STRING(8192);END_VAR\\nVAR i:UINT;END_VAR\",\n `IF wireUsed+TO_UINT(ByteLength(value))>8191 THEN malformed:=TRUE;RETURN;END_IF;IF ByteLength(value)>0 THEN FOR i:=0 TO TO_UINT(ByteLength(value))-1 DO wire[wireUsed+i]:=value[i];END_FOR;END_IF;wireUsed:=wireUsed+TO_UINT(ByteLength(value));wire[wireUsed]:=0;`,\n ),\n method(\n \"FindHeaders\",\n \"VAR i:UINT;END_VAR\",\n `headerEnd:=0;IF used<4 THEN RETURN;END_IF;\nFOR i:=0 TO used-4 DO IF received[i]=13 AND received[i+1]=10 AND received[i+2]=13 AND received[i+3]=10 THEN headerEnd:=i+1;RETURN;END_IF;END_FOR;`,\n ),\n method(\n \"MatchLiteral\",\n \"VAR_INPUT value:STRING(8);END_VAR\\nVAR i:UINT;size:UINT;END_VAR\",\n `MatchLiteral:=FALSE;size:=TO_UINT(ByteLength(value));IF cursor+size-1>TO_UINT(ByteLength(payload)) THEN RETURN;END_IF;\nFOR i:=0 TO size-1 DO IF payload[cursor-1+i]<>value[i] THEN RETURN;END_IF;END_FOR;cursor:=cursor+size;MatchLiteral:=TRUE;`,\n \"BOOL\",\n ),\n method(\n \"ReadHeaders\",\n `VAR lineStart:UINT;lineEnd:UINT;i:UINT;j:UINT;key:STRING(64);octet:BYTE;found:BOOL;digits:UINT;END_VAR`,\n `malformed:=FALSE;found:=FALSE;contentLength:=-1;\nIF LEFT(received,9)<>'HTTP/1.1 ' AND LEFT(received,9)<>'HTTP/1.0 ' THEN malformed:=TRUE;RETURN;END_IF;\nstatus:=0;FOR i:=9 TO 11 DO IF received[i]<48 OR received[i]>57 THEN malformed:=TRUE;RETURN;END_IF;status:=status*10+TO_UINT(received[i]-48);END_FOR;\nlineStart:=1;\nWHILE lineStart<headerEnd DO\n lineEnd:=lineStart;WHILE lineEnd<headerEnd AND received[lineEnd-1]<>13 DO lineEnd:=lineEnd+1;END_WHILE;\n key:='';j:=0;i:=lineStart;\n WHILE i<lineEnd AND received[i-1]<>58 AND j<63 DO octet:=received[i-1];IF octet>=65 AND octet<=90 THEN octet:=octet+32;END_IF;key[j]:=octet;j:=j+1;i:=i+1;END_WHILE;key[j]:=0;\n IF key='transfer-encoding' THEN malformed:=TRUE;RETURN;END_IF;\n IF key='content-length' THEN\n IF found THEN malformed:=TRUE;RETURN;END_IF;found:=TRUE;contentLength:=0;digits:=0;i:=i+1;\n WHILE i<lineEnd AND received[i-1]=32 DO i:=i+1;END_WHILE;\n WHILE i<lineEnd DO octet:=received[i-1];IF octet<48 OR octet>57 OR digits>=5 THEN malformed:=TRUE;RETURN;END_IF;contentLength:=contentLength*10+TO_DINT(octet-48);digits:=digits+1;i:=i+1;END_WHILE;\n IF digits=0 THEN malformed:=TRUE;RETURN;END_IF;\n END_IF;\n lineStart:=lineEnd+2;\nEND_WHILE;`,\n ),\n method(\n \"WriteString\",\n `VAR_INPUT value : STRING(2048); END_VAR\\nVAR i:UINT; one:STRING(1); hex:STRING(16):='0123456789abcdef'; END_VAR`,\n `Append('\"');IF ByteLength(value)>0 THEN FOR i:=0 TO ByteLength(value)-1 DO\n one[0]:=value[i];one[1]:=0;\n IF value[i]=34 OR value[i]=92 THEN Append('\\\\');Append(one);\n ELSIF value[i]<32 THEN Append('\\\\u00');one[0]:=hex[SHR(value[i],4)];Append(one);one[0]:=hex[value[i] AND 15];Append(one);\n ELSE Append(one);END_IF;\n END_FOR;END_IF;Append('\"');`,\n ),\n method(\n \"SkipWhitespace\",\n \"\",\n `WHILE cursor<=TO_UINT(ByteLength(payload)) DO IF payload[cursor-1]<>32 AND payload[cursor-1]<>9 AND payload[cursor-1]<>10 AND payload[cursor-1]<>13 THEN EXIT;END_IF;cursor:=cursor+1;END_WHILE;`,\n ),\n method(\n \"Expect\",\n \"VAR_INPUT value:BYTE; END_VAR\",\n `IF cursor>TO_UINT(ByteLength(payload)) OR_ELSE payload[cursor-1]<>value THEN malformed:=TRUE;ELSE cursor:=cursor+1;END_IF;`,\n ),\n method(\n \"TokenByte\",\n \"VAR_INPUT value:BYTE;END_VAR\",\n `IF tokenUsed>=2048 OR value=0 THEN malformed:=TRUE;RETURN;END_IF;token[tokenUsed]:=value;tokenUsed:=tokenUsed+1;token[tokenUsed]:=0;`,\n ),\n method(\n \"ReadHex\",\n \"VAR value:UDINT;i:UINT;octet:BYTE;END_VAR\",\n `numberValue:=0;FOR i:=1 TO 4 DO\nIF cursor>TO_UINT(ByteLength(payload)) THEN malformed:=TRUE;RETURN;END_IF;\noctet:=payload[cursor-1];cursor:=cursor+1;\nIF octet>=48 AND octet<=57 THEN value:=TO_UDINT(octet-48);ELSIF octet>=65 AND octet<=70 THEN value:=TO_UDINT(octet-55);ELSIF octet>=97 AND octet<=102 THEN value:=TO_UDINT(octet-87);ELSE malformed:=TRUE;RETURN;END_IF;\nnumberValue:=numberValue*16+TO_LINT(value);END_FOR;`,\n ),\n method(\n \"ReadString\",\n `VAR octet:BYTE;point:UDINT;high:UDINT;END_VAR`,\n `token:='';tokenUsed:=0;Expect(34);\nWHILE cursor<=TO_UINT(ByteLength(payload)) AND NOT malformed DO\n octet:=payload[cursor-1];cursor:=cursor+1;\n IF octet=34 THEN ValidateUtf8();RETURN;END_IF;\n IF octet=92 THEN\n IF cursor>TO_UINT(ByteLength(payload)) THEN malformed:=TRUE;RETURN;END_IF;\n octet:=payload[cursor-1];cursor:=cursor+1;\n CASE octet OF\n 34,47,92: TokenByte(octet);\n 98:TokenByte(8);102:TokenByte(12);110:TokenByte(10);114:TokenByte(13);116:TokenByte(9);\n 117:\n ReadHex();point:=TO_UDINT(numberValue);\n IF point>=55296 AND point<=56319 THEN\n high:=point;Expect(92);Expect(117);ReadHex();\n IF numberValue<56320 OR numberValue>57343 THEN malformed:=TRUE;RETURN;END_IF;\n point:=65536+(high-55296)*1024+TO_UDINT(numberValue)-56320;\n ELSIF point>=56320 AND point<=57343 THEN malformed:=TRUE;RETURN;END_IF;\n IF point<128 THEN TokenByte(TO_BYTE(point));\n ELSIF point<2048 THEN TokenByte(TO_BYTE(192+SHR(point,6)));TokenByte(TO_BYTE(128+(point AND 63)));\n ELSIF point<65536 THEN TokenByte(TO_BYTE(224+SHR(point,12)));TokenByte(TO_BYTE(128+(SHR(point,6) AND 63)));TokenByte(TO_BYTE(128+(point AND 63)));\n ELSE TokenByte(TO_BYTE(240+SHR(point,18)));TokenByte(TO_BYTE(128+(SHR(point,12) AND 63)));TokenByte(TO_BYTE(128+(SHR(point,6) AND 63)));TokenByte(TO_BYTE(128+(point AND 63)));END_IF;\n ELSE malformed:=TRUE;RETURN;\n END_CASE;\n ELSIF octet<32 THEN malformed:=TRUE;RETURN;ELSE TokenByte(octet);END_IF;\nEND_WHILE;malformed:=TRUE;`,\n ),\n method(\n \"ValidateUtf8\",\n \"VAR i:UINT;j:UINT;count:UINT;first:BYTE;next:BYTE;END_VAR\",\n `i:=0;\nWHILE i<tokenUsed AND NOT malformed DO\n first:=token[i];\n IF first<128 THEN i:=i+1;\n ELSE\n IF first>=194 AND first<=223 THEN count:=1;ELSIF first>=224 AND first<=239 THEN count:=2;ELSIF first>=240 AND first<=244 THEN count:=3;ELSE malformed:=TRUE;RETURN;END_IF;\n IF i+count>=tokenUsed THEN malformed:=TRUE;RETURN;END_IF;\n next:=token[i+1];\n IF (first=224 AND next<160) OR (first=237 AND next>=160) OR (first=240 AND next<144) OR (first=244 AND next>=144) THEN malformed:=TRUE;RETURN;END_IF;\n FOR j:=1 TO count DO IF token[i+j]<128 OR token[i+j]>191 THEN malformed:=TRUE;RETURN;END_IF;END_FOR;\n i:=i+count+1;\n END_IF;\nEND_WHILE;`,\n ),\n method(\n \"ReadInteger\",\n \"VAR negative:BOOL;digits:UINT;octet:BYTE;END_VAR\",\n `numberValue:=0;negative:=FALSE;digits:=0;\nIF payload[cursor-1]=45 THEN negative:=TRUE;cursor:=cursor+1;END_IF;\nWHILE cursor<=TO_UINT(ByteLength(payload)) DO\n octet:=payload[cursor-1];IF octet<48 OR octet>57 THEN EXIT;END_IF;\n IF digits>=10 THEN malformed:=TRUE;RETURN;END_IF;\n IF digits>0 AND numberValue=0 THEN malformed:=TRUE;RETURN;END_IF;numberValue:=numberValue*10+TO_LINT(octet-48);digits:=digits+1;cursor:=cursor+1;\nEND_WHILE;\nIF digits=0 THEN malformed:=TRUE;END_IF;IF negative THEN numberValue:=-numberValue;END_IF;`,\n ),\n ].filter(\n (item) =>\n transport === \"http\" || ![\"AppendWire\", \"FindHeaders\", \"ReadHeaders\"].includes(item.name),\n );\n};\n",
|
|
14
14
|
"import { instancedBlock } from \"@tsplc/compiler/ir\";\nimport type {\n CoreExpression,\n CoreFunction,\n CorePath,\n CoreStatement,\n VerifiedCoreModule,\n} from \"@tsplc/compiler/ir\";\n\n// Follow both helper calls and instance updates. Borrow addresses count as storage\n// access, so scheduling cannot accidentally give one mutable record two owners.\nexport function accessedStorage(\n fn: CoreFunction,\n core: VerifiedCoreModule,\n scheduledHost?: string,\n): Set<string> {\n // Only the generated entry's worker call may borrow its host. Ordinary calls\n // reached through the async body still count as access to scan-owned storage.\n const scheduledCall = fn.body.find(\n (item) => item.kind === \"invoke\" && item.instance === scheduledHost,\n );\n const result = new Set<string>(),\n seen = new Set<string>();\n const functions = new Map(core.functions.map((item) => [item.id, item]));\n const blocks = new Map(core.blocks.map((item) => [item.id, item]));\n const types = new Map(core.types.map((item) => [item.id, item]));\n const variables = new Map(\n [\n ...core.variables,\n ...core.functions.flatMap((item) => [...item.parameters, ...item.locals]),\n ...core.blocks.flatMap((item) => [\n ...item.inputs,\n ...item.outputs,\n ...item.state,\n ...item.locals,\n ]),\n ].map((item) => [item.id, item]),\n );\n\n const path = (segments: CorePath = []): void => {\n segments.forEach((segment) => {\n if (segment.kind === \"index\") expression(segment.value);\n });\n };\n\n const expression = (value: CoreExpression): void => {\n if (value.kind === \"load\") {\n result.add(value.root);\n path(value.path);\n }\n if (value.kind === \"borrow\") {\n result.add(value.place.root);\n path(value.place.path);\n }\n if (value.kind === \"unary\" || value.kind === \"convert\") expression(value.operand);\n if (value.kind === \"binary\") {\n expression(value.left);\n expression(value.right);\n }\n };\n\n const body = (items: readonly CoreStatement[]): void => {\n for (const item of items) {\n if (item.kind === \"assign\") {\n result.add(item.root);\n path(item.path);\n expression(item.value);\n }\n if (item.kind === \"if\") {\n expression(item.condition);\n body(item.then);\n body(item.else);\n }\n if (item.kind === \"switch\") {\n expression(item.value);\n for (const branch of item.cases) body(branch.body);\n body(item.fallback);\n }\n if (item.kind === \"for\") {\n if (item.dynamic) {\n expression(item.dynamic.start);\n expression(item.dynamic.limit);\n }\n result.add(item.counter);\n body(item.body);\n }\n if (item.kind === \"return\" && item.value) expression(item.value);\n if (item.kind === \"invoke\") {\n if (item.instance && item !== scheduledCall) result.add(item.instance);\n if (item.index) expression(item.index);\n item.arguments.forEach(expression);\n if (item.destination) result.add(item.destination);\n const called = functions.get(item.function);\n if (called && !seen.has(called.id)) {\n seen.add(called.id);\n body(called.body);\n }\n }\n if (item.kind === \"blockUpdate\") {\n result.add(item.instance);\n if (item.index) expression(item.index);\n Object.values(item.inputs).forEach(expression);\n const variable = variables.get(item.instance);\n if (!variable) throw new Error(\"Missing verified instance during task planning.\");\n const type = instancedBlock(variable.type, types);\n const block = type && blocks.get(type.block);\n if (block && !seen.has(block.id)) {\n seen.add(block.id);\n body(block.body);\n }\n }\n }\n };\n\n seen.add(fn.id);\n body(fn.body);\n return result;\n}\n",
|
|
15
15
|
"import type { Publication } from \"@tsplc/config\";\nimport type { VerifiedCoreModule } from \"@tsplc/compiler/ir\";\nimport { moduleName } from \"./storage.ts\";\n\nconst globals = (core: VerifiedCoreModule) =>\n core.variables.filter((variable) => variable.storage === \"module\" && variable.exported);\n\n/** Source names are independent of CODESYS name allocation and the active build target. */\nexport const publicationSelectors = (core: VerifiedCoreModule): string[] => {\n const variables = globals(core);\n return [\n ...new Set(\n variables.flatMap((variable) => [\n moduleName(variable),\n `${moduleName(variable)}.${variable.name}`,\n ]),\n ),\n ].sort();\n};\n\nexport const resolvePublication = (\n core: VerifiedCoreModule,\n policy: Publication,\n): { publication: Publication; errors: string[] } => {\n const variables = globals(core);\n const errors: string[] = [];\n const select = (selectors: readonly string[]) => {\n const selected = new Set(\n variables.filter((variable) => variable.exposure).map((variable) => variable.id),\n );\n const seen = new Set<string>();\n for (const selector of selectors) {\n if (seen.has(selector)) errors.push(`Duplicate publication selector ${selector}.`);\n seen.add(selector);\n const candidates = variables.filter(\n (variable) =>\n selector === moduleName(variable) ||\n selector === `${moduleName(variable)}.${variable.name}`,\n );\n if (!candidates.length) {\n errors.push(\n `Unknown publication selector ${selector}; select an exported mutable global or its module.`,\n );\n continue;\n }\n if (new Set(candidates.map((variable) => variable.span.file)).size !== 1) {\n errors.push(`Ambiguous publication selector ${selector}.`);\n continue;\n }\n for (const variable of candidates) selected.add(variable.id);\n }\n return variables.filter((variable) => selected.has(variable.id)).map((variable) => variable.id);\n };\n const publication = {\n production: select(policy.production),\n development: select(policy.development),\n };\n return { publication, errors };\n};\n",
|
|
16
16
|
"import { instancedBlock } from \"@tsplc/compiler/ir\";\nimport type { Constant, GeneratedObject, PlcType } from \"@tsplc/compiler/ir\";\nimport { Names } from \"./names.ts\";\nimport { scalarLiteral } from \"./numeric.ts\";\n\nexport class CodesysTypes {\n readonly objects: GeneratedObject[] = [];\n private readonly names = new Map<string, string>();\n private readonly fields = new Map<string, Map<string, string>>();\n\n constructor(\n private readonly types: ReadonlyMap<string, PlcType>,\n names: Names,\n blockNames: ReadonlyMap<string, string>,\n ) {\n // Register every type and member name before following layout dependencies.\n for (const type of types.values()) {\n if (type.kind === \"block\") {\n const name = blockNames.get(type.block);\n if (!name) throw new Error(\"Missing verified block name\");\n this.names.set(type.id, name);\n }\n if ([\"record\", \"array\", \"enum\", \"string\"].includes(type.kind)) {\n const label = type.id.split(\":\").at(-1)!;\n if (type.kind === \"record\" || type.kind === \"enum\") {\n const prefix = type.kind === \"record\" ? \"ST\" : \"E\";\n this.names.set(type.id, names.allocateObject(prefix, label));\n } else this.names.set(type.id, names.allocate(`T_${label}`));\n }\n if (type.kind === \"record\" || type.kind === \"enum\") {\n const names = new Names(),\n fields = new Map<string, string>();\n for (const member of type.kind === \"record\" ? type.fields : type.members) {\n fields.set(member.name, names.allocate(member.name, true));\n }\n this.fields.set(type.id, fields);\n }\n }\n\n // A block array is declared in place: a function block cannot be a data type's element.\n for (const type of types.values())\n if (type.kind === \"array\" && instancedBlock(type.id, types))\n this.names.set(\n type.id,\n `ARRAY[${type.lowerBound}..${type.lowerBound + type.length - 1}] OF ${this.name(type.element)}`,\n );\n\n // Verified layouts are acyclic. Emit child DUTs first, then their containing DUT.\n const emitted = new Set<string>();\n const emit = (type: PlcType): void => {\n if (instancedBlock(type.id, types) || !this.names.has(type.id) || emitted.has(type.id))\n return;\n if (type.kind === \"array\") emit(this.type(type.element));\n if (type.kind === \"record\") {\n for (const field of type.fields) emit(this.type(field.type));\n }\n emitted.add(type.id);\n const name = this.name(type.id);\n let declaration: string;\n if (type.kind === \"record\") {\n const fields = type.fields\n .map((field) => ` ${this.field(type.id, field.name)} : ${this.name(field.type)};`)\n .join(\"\\n\");\n declaration = `TYPE ${name} :\nSTRUCT\n${fields}\nEND_STRUCT\nEND_TYPE\n`;\n } else if (type.kind === \"array\") {\n declaration = `TYPE ${name} : ARRAY[${type.lowerBound}..${type.lowerBound + type.length - 1}] OF ${this.name(type.element)};\nEND_TYPE\n`;\n } else if (type.kind === \"string\") {\n declaration = `TYPE ${name} : ${type.encoding === \"utf8\" ? \"STRING\" : \"WSTRING\"}(${type.capacity});\nEND_TYPE\n`;\n } else if (type.kind === \"enum\") {\n const members = type.members\n .map((member) => ` ${this.field(type.id, member.name)} := ${member.value}`)\n .join(\",\\n\");\n declaration = `{attribute 'qualified_only'}\n{attribute 'strict'}\nTYPE ${name} : (\n${members}\n) DINT;\nEND_TYPE\n`;\n } else throw new Error(\"Unsupported verified data type\");\n this.objects.push({ id: type.id, kind: \"dataType\", name, declaration });\n };\n for (const type of types.values()) emit(type);\n }\n\n private type(id: string): PlcType {\n const type = this.types.get(id);\n if (!type) throw new Error(\"Missing verified type\");\n return type;\n }\n\n name(id: string): string {\n return this.names.get(id) ?? id;\n }\n\n field(id: string, name: string): string {\n const field = this.fields.get(id)?.get(name);\n if (!field) throw new Error(\"Missing verified field\");\n return field;\n }\n\n declarationInitializer(value: Constant, id: string): string {\n const type = this.type(id);\n // Our DUT fields have no custom initializers. CODESYS initializes their\n // numbers/BOOL/strings to zero/false/empty, including nested arrays/records.\n // Keep explicit nonzero enum members and signed floating zero: omission must\n // not change the initial value selected by PLC semantics.\n if ((type.kind === \"record\" || type.kind === \"array\") && this.isZero(value)) return \"\";\n return ` := ${this.literal(value, id)}`;\n }\n\n private isZero(value: Constant): boolean {\n if (value.kind === \"bool\") return !value.value;\n if (value.kind === \"integer\") return value.value === \"0\";\n if (value.kind === \"float\") return Object.is(value.value, 0);\n if (value.kind === \"string\") return value.value === \"\";\n if (value.kind === \"array\") return value.items.every((item) => this.isZero(item));\n if (value.kind === \"record\")\n return Object.values(value.fields).every((item) => this.isZero(item));\n // Time/calendar values remain explicit without relying on target defaults.\n return false;\n }\n\n literal(value: Constant, id: string): string {\n const type = this.type(id);\n if (type.kind === \"enum\" && value.kind === \"integer\") {\n const member = type.members.find((member) => member.value === value.value);\n if (!member) throw new Error(\"Missing verified enum member\");\n return `${this.name(id)}.${this.field(id, member.name)}`;\n }\n if (type.kind === \"string\" && value.kind === \"string\") {\n const wide = type.encoding === \"utf16\",\n quote = wide ? '\"' : \"'\";\n let text = \"\";\n for (const char of value.value) {\n const code = char.charCodeAt(0);\n if (char === \"$\") text += \"$$\";\n else if (char === quote) text += `$${char}`;\n else if (code < 32 || code === 127)\n text += `$${code\n .toString(16)\n .toUpperCase()\n .padStart(wide ? 4 : 2, \"0\")}`;\n else text += char;\n }\n return `${quote}${text}${quote}`;\n }\n if (type.kind === \"array\" && value.kind === \"array\") {\n return `[${value.items.map((item) => this.literal(item, type.element)).join(\", \")}]`;\n }\n if (type.kind === \"record\" && value.kind === \"record\") {\n const fields = type.fields.map((field) => {\n const initial = value.fields[field.name];\n if (!initial) throw new Error(\"Missing verified record initializer\");\n return `${this.field(id, field.name)} := ${this.literal(initial, field.type)}`;\n });\n return `(${fields.join(\", \")})`;\n }\n if (type.kind === \"duration\" && value.kind === \"duration\") {\n return `T#${BigInt(value.nanoseconds) / 1_000_000n}ms`;\n }\n if (type.kind === \"calendar\" && value.kind === \"calendar\") {\n if (type.domain === \"date\") return `D#${value.value}`;\n if (type.domain === \"timeOfDay\") return `TOD#${value.value}`;\n return `DT#${value.value.replace(\"T\", \"-\")}`;\n }\n return scalarLiteral(value, id);\n }\n}\n",
|
|
17
17
|
"import type { Diagnostic, EmitResult } from \"@tsplc/compiler/ir\";\nimport { CodesysCompilerError } from \"@tsplc/build\";\nimport type { SourceMapping } from \"./emit.ts\";\n\ntype MappedBundle = Pick<EmitResult, \"objects\"> & { mappings: readonly SourceMapping[] };\n\n/** Map verified vendor locations; preserve raw context for everything else. */\nexport function diagnoseCodesys(cause: unknown, bundle: MappedBundle): readonly Diagnostic[] {\n const notes: string[] = [];\n let current = cause;\n while (current instanceof Error) {\n if (current instanceof CodesysCompilerError && current.diagnostics.length) {\n return current.diagnostics.map((item) => {\n // Observed in CODESYS 3.5 SP22. position itself is an opaque vendor value.\n const location =\n item.positionText &&\n /^Line ([1-9][0-9]*)(?:, Column ([1-9][0-9]*))? \\((Decl|Impl)\\)$/.exec(item.positionText);\n const identity = item.object;\n let objectPath: string | undefined;\n if (identity && identity.path.at(-1) === identity.name) {\n const relative = identity.applicationPath;\n if (\n Array.isArray(relative) &&\n relative.length > 0 &&\n relative.every((part) => typeof part === \"string\") &&\n identity.isApplicationChild === (relative.length === 1) &&\n identity.path.length > relative.length &&\n identity.path.slice(-relative.length).every((part, index) => part === relative[index])\n ) {\n objectPath = relative.join(\"/\");\n } else if (\n relative === undefined &&\n identity.isApplicationChild === true &&\n identity.path.length >= 2\n ) {\n // A verified immediate Application parent proves the root identity.\n objectPath = identity.name;\n }\n }\n const objects = objectPath\n ? bundle.objects.flatMap((object) => {\n const declaration =\n object.sourcePath ??\n (object.implementation === undefined\n ? `${object.name}.st`\n : `${object.name}/declaration.st`);\n const nativePath = (\n object.kind === \"method\"\n ? declaration.replace(/\\/methods\\/([^/]+\\/declaration\\.st)$/, \"/$1\")\n : declaration\n ).replace(object.implementation === undefined ? /\\.st$/ : /\\/declaration\\.st$/, \"\");\n return object.name === identity?.name && nativePath === objectPath\n ? [{ object, declaration }]\n : [];\n })\n : [];\n const match = objects.length === 1 ? objects[0] : undefined;\n const section = location?.[3] === \"Decl\" ? \"declaration\" : \"implementation\";\n const path =\n section === \"declaration\"\n ? match?.declaration\n : match?.object.implementation !== undefined\n ? match.declaration.replace(/declaration\\.st$/, \"implementation.st\")\n : undefined;\n const mappings =\n location && path\n ? bundle.mappings.filter(\n (mapping) => mapping.path === path && mapping.line === Number(location[1]),\n )\n : [];\n const mapping = mappings.length === 1 ? mappings[0] : undefined;\n return {\n origin: \"vendor\",\n code: \"PLC8001\",\n severity: \"error\",\n message: item.text,\n ...(mapping && { span: mapping.span }),\n notes: [\n ...notes,\n ...(location && path\n ? [\n \"Generated ST: \" +\n path +\n \":\" +\n location[1] +\n (location[2] ? `:${location[2]}` : \"\"),\n ]\n : []),\n `CODESYS diagnostic: ${JSON.stringify(item)}`,\n ],\n };\n });\n }\n notes.push(current.message);\n if (current.cause === undefined) break;\n current = current.cause;\n if (!(current instanceof Error)) notes.push(String(current));\n }\n return [\n {\n origin: \"vendor\",\n code: \"PLC8001\",\n severity: \"error\",\n message: cause instanceof Error ? cause.message : String(cause),\n ...(notes.length > 1 && { notes: notes.slice(1) }),\n },\n ];\n}\n"
|
|
18
18
|
],
|
|
19
|
-
"mappings": "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",
|
|
20
|
-
"debugId": "
|
|
19
|
+
"mappings": "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",
|
|
20
|
+
"debugId": "ADC5FCAD73E0D40364756E2164756E21",
|
|
21
21
|
"names": []
|
|
22
22
|
}
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"url": "git+https://github.com/livingforjesus/tsplc.git",
|
|
18
18
|
"directory": "packages/compiler"
|
|
19
19
|
},
|
|
20
|
-
"version": "0.2.
|
|
20
|
+
"version": "0.2.5",
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
@@ -90,14 +90,14 @@
|
|
|
90
90
|
"bun": ">=1.4.3"
|
|
91
91
|
},
|
|
92
92
|
"dependencies": {
|
|
93
|
-
"@tsplc/agent": "0.2.
|
|
94
|
-
"@tsplc/build": "0.2.
|
|
95
|
-
"@tsplc/config": "0.2.
|
|
96
|
-
"@tsplc/typegen": "0.2.
|
|
93
|
+
"@tsplc/agent": "0.2.5",
|
|
94
|
+
"@tsplc/build": "0.2.5",
|
|
95
|
+
"@tsplc/config": "0.2.5",
|
|
96
|
+
"@tsplc/typegen": "0.2.5",
|
|
97
97
|
"typescript": "6.0.3",
|
|
98
98
|
"zod": "4.3.6",
|
|
99
99
|
"@types/bun": "1.4.2",
|
|
100
|
-
"@tsplc/server": "0.2.
|
|
100
|
+
"@tsplc/server": "0.2.5"
|
|
101
101
|
},
|
|
102
102
|
"bin": {
|
|
103
103
|
"tsplc": "./dist/cli.js"
|