@atsumell/trace-weave 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +99 -0
  3. package/README.md +105 -0
  4. package/dist/ai/index.d.ts +32 -0
  5. package/dist/ai/index.js +121 -0
  6. package/dist/ai/index.js.map +1 -0
  7. package/dist/builder/index.d.ts +26 -0
  8. package/dist/builder/index.js +47 -0
  9. package/dist/builder/index.js.map +1 -0
  10. package/dist/chunk-35PKIXFV.js +90 -0
  11. package/dist/chunk-35PKIXFV.js.map +1 -0
  12. package/dist/chunk-AS6LZLUH.js +32 -0
  13. package/dist/chunk-AS6LZLUH.js.map +1 -0
  14. package/dist/chunk-B4SEKVLL.js +29 -0
  15. package/dist/chunk-B4SEKVLL.js.map +1 -0
  16. package/dist/chunk-EICHUHZH.js +689 -0
  17. package/dist/chunk-EICHUHZH.js.map +1 -0
  18. package/dist/chunk-WIW3TVEK.js +324 -0
  19. package/dist/chunk-WIW3TVEK.js.map +1 -0
  20. package/dist/compiler/index.d.ts +19 -0
  21. package/dist/compiler/index.js +24 -0
  22. package/dist/compiler/index.js.map +1 -0
  23. package/dist/core/index.d.ts +5 -0
  24. package/dist/core/index.js +37 -0
  25. package/dist/core/index.js.map +1 -0
  26. package/dist/fast-check/index.d.ts +34 -0
  27. package/dist/fast-check/index.js +64 -0
  28. package/dist/fast-check/index.js.map +1 -0
  29. package/dist/formula-document-ChXznpvJ.d.ts +99 -0
  30. package/dist/formula-expr-DAHklv9S.d.ts +111 -0
  31. package/dist/monitor/index.d.ts +23 -0
  32. package/dist/monitor/index.js +251 -0
  33. package/dist/monitor/index.js.map +1 -0
  34. package/dist/patterns/index.d.ts +61 -0
  35. package/dist/patterns/index.js +57 -0
  36. package/dist/patterns/index.js.map +1 -0
  37. package/dist/prepare-CrKEArDt.d.ts +8 -0
  38. package/dist/runtime-Do1rQFhQ.d.ts +9 -0
  39. package/dist/types-xatgZlwH.d.ts +35 -0
  40. package/dist/values-CEF1lKTL.d.ts +48 -0
  41. package/dist/verdict-DYG0WE3o.d.ts +7 -0
  42. package/dist/vitest/index.d.ts +24 -0
  43. package/dist/vitest/index.js +40 -0
  44. package/dist/vitest/index.js.map +1 -0
  45. package/package.json +95 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/monitor/eval-common.ts","../src/monitor/unsupported.ts","../src/monitor/time.ts","../src/monitor/evaluate-finite.ts","../src/monitor/evaluate.ts","../src/monitor/diagnostics.ts","../src/monitor/run-oracle.ts"],"sourcesContent":["import type { NodeId } from \"../core/ids.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\nimport type { JsonValue, ValueExprArg } from \"../core/values.js\";\n\nexport type EvalEnv = Map<string, JsonValue>;\n\nexport function envKey(env: EvalEnv): string {\n\tconst entries = [...env.entries()].sort(([left], [right]) => left.localeCompare(right));\n\treturn JSON.stringify(entries);\n}\n\nexport function cacheKey(nodeId: NodeId, pos: number, env: EvalEnv): string {\n\treturn `${nodeId}:${pos}:${envKey(env)}`;\n}\n\nexport function resolveArg<TEvent>(\n\targ: ValueExprArg,\n\tevent: TEvent,\n\truntime: MonitorRuntime<TEvent>,\n): JsonValue {\n\tif (arg.kind === \"literal\") {\n\t\treturn arg.value;\n\t}\n\n\tconst selectorFn = runtime.selectors[arg.selectorId];\n\tif (!selectorFn) {\n\t\treturn null;\n\t}\n\n\treturn selectorFn(event);\n}\n\nexport function jsonEqual(a: JsonValue, b: JsonValue): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (a === null || b === null) {\n\t\treturn a === b;\n\t}\n\n\tif (typeof a !== typeof b) {\n\t\treturn false;\n\t}\n\n\tif (typeof a !== \"object\") {\n\t\treturn a === b;\n\t}\n\n\tif (Array.isArray(a)) {\n\t\tif (!Array.isArray(b) || a.length !== b.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn a.every((value, index) => jsonEqual(value, b[index]!));\n\t}\n\n\tif (Array.isArray(b)) {\n\t\treturn false;\n\t}\n\n\tconst aObject = a as Record<string, JsonValue>;\n\tconst bObject = b as Record<string, JsonValue>;\n\tconst aKeys = Object.keys(aObject).sort();\n\tconst bKeys = Object.keys(bObject).sort();\n\tif (aKeys.length !== bKeys.length) {\n\t\treturn false;\n\t}\n\n\treturn aKeys.every(\n\t\t(key, index) => key === bKeys[index] && jsonEqual(aObject[key]!, bObject[key]!),\n\t);\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\n\nexport const WITHIN_MS_RUNTIME_MESSAGE =\n\t\"withinMs requires MonitorRuntime.timestamp to be defined and return event timestamps in milliseconds.\";\n\nexport const WITHIN_MS_TIMESTAMP_MESSAGE =\n\t\"MonitorRuntime.timestamp must return a finite number of milliseconds for every event.\";\n\nexport const WITHIN_MS_NON_MONOTONIC_MESSAGE =\n\t\"MonitorRuntime.timestamp must be non-decreasing across the trace when using withinMs.\";\n\nexport function usesWithinMs(doc: FormulaDocument): boolean {\n\tfor (const node of Object.values(doc.nodes)) {\n\t\tif (node.kind === \"withinMs\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function assertWithinMsRuntimeSupport<TEvent>(\n\tdoc: FormulaDocument,\n\truntime: MonitorRuntime<TEvent>,\n): void {\n\tif (usesWithinMs(doc) && !runtime.timestamp) {\n\t\tthrow new Error(WITHIN_MS_RUNTIME_MESSAGE);\n\t}\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\nimport {\n\tWITHIN_MS_NON_MONOTONIC_MESSAGE,\n\tWITHIN_MS_TIMESTAMP_MESSAGE,\n\tassertWithinMsRuntimeSupport,\n\tusesWithinMs,\n} from \"./unsupported.js\";\n\nexport function getTimestamp<TEvent>(runtime: MonitorRuntime<TEvent>, event: TEvent): number {\n\tconst timestamp = runtime.timestamp?.(event);\n\tif (timestamp === undefined || !Number.isFinite(timestamp)) {\n\t\tthrow new Error(WITHIN_MS_TIMESTAMP_MESSAGE);\n\t}\n\treturn timestamp;\n}\n\nexport function assertTimeSupportForTrace<TEvent>(\n\tdoc: FormulaDocument,\n\truntime: MonitorRuntime<TEvent>,\n\ttrace: readonly TEvent[],\n): void {\n\tif (!usesWithinMs(doc)) return;\n\tassertWithinMsRuntimeSupport(doc, runtime);\n\n\tlet previous = Number.NEGATIVE_INFINITY;\n\tfor (const event of trace) {\n\t\tconst current = getTimestamp(runtime, event);\n\t\tif (current < previous) {\n\t\t\tthrow new Error(WITHIN_MS_NON_MONOTONIC_MESSAGE);\n\t\t}\n\t\tprevious = current;\n\t}\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { FormulaNode } from \"../core/formula-node.js\";\nimport type { NodeId } from \"../core/ids.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\nimport type { Verdict } from \"../core/verdict.js\";\nimport { andV, impliesV, notV, orV } from \"../core/verdict.js\";\nimport { type EvalEnv, cacheKey, jsonEqual, resolveArg } from \"./eval-common.js\";\nimport { assertTimeSupportForTrace, getTimestamp } from \"./time.js\";\n\nexport interface FiniteEvalContext<TEvent> {\n\treadonly doc: FormulaDocument;\n\treadonly runtime: MonitorRuntime<TEvent>;\n\treadonly trace: readonly TEvent[];\n\treadonly cache: Map<string, Verdict>;\n}\n\nexport function createFiniteEvalContext<TEvent>(\n\tdoc: FormulaDocument,\n\truntime: MonitorRuntime<TEvent>,\n\ttrace: readonly TEvent[],\n): FiniteEvalContext<TEvent> {\n\tassertTimeSupportForTrace(doc, runtime, trace);\n\n\treturn {\n\t\tdoc,\n\t\truntime,\n\t\ttrace,\n\t\tcache: new Map(),\n\t};\n}\n\nexport function evaluateFiniteFormula<TEvent>(\n\tdoc: FormulaDocument,\n\truntime: MonitorRuntime<TEvent>,\n\ttrace: readonly TEvent[],\n): Verdict {\n\tconst ctx = createFiniteEvalContext(doc, runtime, trace);\n\treturn evaluateFiniteNode(ctx, doc.root, 0, new Map());\n}\n\nexport function evaluateFiniteNode<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnodeId: NodeId,\n\tpos: number,\n\tenv: EvalEnv,\n): Verdict {\n\tconst entryKey = cacheKey(nodeId, pos, env);\n\tconst cached = ctx.cache.get(entryKey);\n\tif (cached !== undefined) {\n\t\treturn cached;\n\t}\n\n\tconst node = ctx.doc.nodes[nodeId];\n\tif (!node) {\n\t\treturn \"violated\";\n\t}\n\n\t// Prevent infinite recursion by marking the current evaluation as open.\n\tctx.cache.set(entryKey, \"pending\");\n\tconst verdict = evaluateFiniteNodeInner(ctx, node, pos, env);\n\tctx.cache.set(entryKey, verdict);\n\treturn verdict;\n}\n\nfunction evaluateFiniteNodeInner<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnode: FormulaNode,\n\tpos: number,\n\tenv: EvalEnv,\n): Verdict {\n\tconst len = ctx.trace.length;\n\n\tswitch (node.kind) {\n\t\tcase \"literal\":\n\t\t\treturn node.value ? \"satisfied\" : \"violated\";\n\n\t\tcase \"predicate\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst predicateFn = ctx.runtime.predicates[node.predicateId];\n\t\t\tif (!predicateFn) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst event = ctx.trace[pos]!;\n\t\t\tconst args = (node.args ?? []).map((arg) => resolveArg(arg, event, ctx.runtime));\n\t\t\treturn predicateFn(event, args) ? \"satisfied\" : \"violated\";\n\t\t}\n\n\t\tcase \"when\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst captured = env.get(node.captureName as string);\n\t\t\tif (captured === undefined) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst selectorFn = ctx.runtime.selectors[node.selectorId];\n\t\t\tif (!selectorFn) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst currentValue = selectorFn(ctx.trace[pos]!);\n\t\t\tif (!jsonEqual(captured, currentValue)) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\treturn evaluateFiniteNode(ctx, node.child, pos, env);\n\t\t}\n\n\t\tcase \"capture\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst selectorFn = ctx.runtime.selectors[node.selectorId];\n\t\t\tif (!selectorFn) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst nextEnv = new Map(env);\n\t\t\tnextEnv.set(node.captureName as string, selectorFn(ctx.trace[pos]!));\n\t\t\treturn evaluateFiniteNode(ctx, node.child, pos, nextEnv);\n\t\t}\n\n\t\tcase \"not\":\n\t\t\treturn notV(evaluateFiniteNode(ctx, node.child, pos, env));\n\n\t\tcase \"and\": {\n\t\t\tlet result: Verdict = \"satisfied\";\n\t\t\tfor (const childId of node.children) {\n\t\t\t\tresult = andV(result, evaluateFiniteNode(ctx, childId, pos, env));\n\t\t\t\tif (result === \"violated\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tcase \"or\": {\n\t\t\tlet result: Verdict = \"violated\";\n\t\t\tfor (const childId of node.children) {\n\t\t\t\tresult = orV(result, evaluateFiniteNode(ctx, childId, pos, env));\n\t\t\t\tif (result === \"satisfied\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tcase \"implies\":\n\t\t\treturn impliesV(\n\t\t\t\tevaluateFiniteNode(ctx, node.left, pos, env),\n\t\t\t\tevaluateFiniteNode(ctx, node.right, pos, env),\n\t\t\t);\n\n\t\tcase \"always\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"satisfied\";\n\t\t\t}\n\n\t\t\tlet result: Verdict = \"satisfied\";\n\t\t\tfor (let step = pos; step < len; step++) {\n\t\t\t\tresult = andV(result, evaluateFiniteNode(ctx, node.child, step, env));\n\t\t\t\tif (result === \"violated\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tcase \"eventually\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tlet result: Verdict = \"violated\";\n\t\t\tfor (let step = pos; step < len; step++) {\n\t\t\t\tresult = orV(result, evaluateFiniteNode(ctx, node.child, step, env));\n\t\t\t\tif (result === \"satisfied\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tcase \"next\":\n\t\t\treturn pos + 1 >= len ? \"violated\" : evaluateFiniteNode(ctx, node.child, pos + 1, env);\n\n\t\tcase \"weakNext\":\n\t\t\treturn pos + 1 >= len ? \"satisfied\" : evaluateFiniteNode(ctx, node.child, pos + 1, env);\n\n\t\tcase \"until\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tlet leftAccumulator: Verdict = \"satisfied\";\n\t\t\tfor (let step = pos; step < len; step++) {\n\t\t\t\tconst rightVerdict = evaluateFiniteNode(ctx, node.right, step, env);\n\t\t\t\tif (rightVerdict === \"satisfied\" && leftAccumulator === \"satisfied\") {\n\t\t\t\t\treturn \"satisfied\";\n\t\t\t\t}\n\n\t\t\t\tconst leftVerdict = evaluateFiniteNode(ctx, node.left, step, env);\n\t\t\t\tleftAccumulator = step === pos ? leftVerdict : andV(leftAccumulator, leftVerdict);\n\t\t\t\tif (leftAccumulator === \"violated\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn \"violated\";\n\t\t}\n\n\t\tcase \"release\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"satisfied\";\n\t\t\t}\n\n\t\t\tlet allRight: Verdict = \"satisfied\";\n\t\t\tfor (let step = pos; step < len; step++) {\n\t\t\t\tallRight = andV(allRight, evaluateFiniteNode(ctx, node.right, step, env));\n\t\t\t\tconst leftVerdict = evaluateFiniteNode(ctx, node.left, step, env);\n\t\t\t\tif (leftVerdict === \"satisfied\" && allRight === \"satisfied\") {\n\t\t\t\t\treturn \"satisfied\";\n\t\t\t\t}\n\t\t\t\tif (allRight === \"violated\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn allRight === \"satisfied\" ? \"satisfied\" : \"violated\";\n\t\t}\n\n\t\tcase \"once\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tfor (let step = pos; step >= 0; step--) {\n\t\t\t\tif (evaluateFiniteNode(ctx, node.child, step, env) === \"satisfied\") {\n\t\t\t\t\treturn \"satisfied\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn \"violated\";\n\t\t}\n\n\t\tcase \"historically\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"satisfied\";\n\t\t\t}\n\n\t\t\tfor (let step = 0; step <= pos; step++) {\n\t\t\t\tif (evaluateFiniteNode(ctx, node.child, step, env) === \"violated\") {\n\t\t\t\t\treturn \"violated\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn \"satisfied\";\n\t\t}\n\n\t\tcase \"since\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tfor (let witness = pos; witness >= 0; witness--) {\n\t\t\t\tif (evaluateFiniteNode(ctx, node.right, witness, env) !== \"satisfied\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet leftOk: Verdict = \"satisfied\";\n\t\t\t\tfor (let step = witness + 1; step <= pos; step++) {\n\t\t\t\t\tleftOk = andV(leftOk, evaluateFiniteNode(ctx, node.left, step, env));\n\t\t\t\t\tif (leftOk === \"violated\") {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (leftOk === \"satisfied\") {\n\t\t\t\t\treturn \"satisfied\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn \"violated\";\n\t\t}\n\n\t\tcase \"withinSteps\": {\n\t\t\tconst upper = Math.min(pos + node.steps, len);\n\t\t\tfor (let step = pos; step < upper; step++) {\n\t\t\t\tif (evaluateFiniteNode(ctx, node.child, step, env) === \"satisfied\") {\n\t\t\t\t\treturn \"satisfied\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"violated\";\n\t\t}\n\n\t\tcase \"withinMs\": {\n\t\t\tif (pos >= len) {\n\t\t\t\treturn \"violated\";\n\t\t\t}\n\n\t\t\tconst startTs = getTimestamp(ctx.runtime, ctx.trace[pos]!);\n\t\t\tfor (let step = pos; step < len; step++) {\n\t\t\t\tconst currentTs = getTimestamp(ctx.runtime, ctx.trace[step]!);\n\t\t\t\tif (currentTs - startTs > node.ms) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (evaluateFiniteNode(ctx, node.child, step, env) === \"satisfied\") {\n\t\t\t\t\treturn \"satisfied\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn \"violated\";\n\t\t}\n\t}\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\nimport type { Verdict } from \"../core/verdict.js\";\nimport { evaluateFiniteFormula } from \"./evaluate-finite.js\";\n\nexport function evaluateFormula<TEvent>(\n\tdoc: FormulaDocument,\n\truntime: MonitorRuntime<TEvent>,\n\ttrace: readonly TEvent[],\n): Verdict {\n\treturn evaluateFiniteFormula(doc, runtime, trace);\n}\n","import { print } from \"../compiler/printer.js\";\nimport type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { FormulaNode } from \"../core/formula-node.js\";\nimport { type ActivationId, type NodeId, activationId } from \"../core/ids.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\nimport type { JsonValue } from \"../core/values.js\";\nimport type { Verdict } from \"../core/verdict.js\";\nimport { andV } from \"../core/verdict.js\";\nimport { type EvalEnv, envKey, jsonEqual } from \"./eval-common.js\";\nimport {\n\ttype FiniteEvalContext,\n\tcreateFiniteEvalContext,\n\tevaluateFiniteNode,\n} from \"./evaluate-finite.js\";\nimport { getTimestamp } from \"./time.js\";\nimport type { CounterexampleReport, ObligationSnapshot } from \"./types.js\";\n\nexport function buildCounterexampleReport<TEvent>(\n\tdoc: FormulaDocument,\n\truntime: MonitorRuntime<TEvent>,\n\ttrace: readonly TEvent[],\n): CounterexampleReport | null {\n\tconst ctx = createFiniteEvalContext(doc, runtime, trace);\n\tconst env: EvalEnv = new Map();\n\tconst verdict = evaluateFiniteNode(ctx, doc.root, 0, env);\n\tif (verdict !== \"violated\") {\n\t\treturn null;\n\t}\n\n\tconst failurePath: ObligationSnapshot[] = [];\n\tcollectFailurePath(ctx, doc.root, 0, env, failurePath);\n\n\treturn {\n\t\tverdict: \"violated\",\n\t\tfailurePath,\n\t\ttraceSlice: trace.map((event, i) => ({ step: i + 1, event })),\n\t\tsummary: `Formula violated: ${print(doc)}`,\n\t};\n}\n\nfunction collectFailurePath<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnodeId: NodeId,\n\tpos: number,\n\tenv: EvalEnv,\n\tpath: ObligationSnapshot[],\n): void {\n\tconst verdict = evaluateFiniteNode(ctx, nodeId, pos, env);\n\tpath.push({\n\t\tnodeId,\n\t\tactivationId: toActivationId(nodeId, pos, env),\n\t\tverdict,\n\t\tstep: pos,\n\t});\n\n\tconst node = ctx.doc.nodes[nodeId];\n\tif (!node) {\n\t\treturn;\n\t}\n\n\tswitch (node.kind) {\n\t\tcase \"literal\":\n\t\tcase \"predicate\":\n\t\t\treturn;\n\n\t\tcase \"when\": {\n\t\t\tif (pos >= ctx.trace.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst captured = env.get(node.captureName as string);\n\t\t\tif (captured === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selectorFn = ctx.runtime.selectors[node.selectorId];\n\t\t\tif (!selectorFn) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst currentVal = selectorFn(ctx.trace[pos]!);\n\t\t\tif (!jsonEqual(captured, currentVal)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcollectFailurePath(ctx, node.child, pos, env, path);\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"capture\": {\n\t\t\tif (pos >= ctx.trace.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selectorFn = ctx.runtime.selectors[node.selectorId];\n\t\t\tif (!selectorFn) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst nextEnv = new Map(env);\n\t\t\tnextEnv.set(node.captureName as string, selectorFn(ctx.trace[pos]!));\n\t\t\tcollectFailurePath(ctx, node.child, pos, nextEnv, path);\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"not\":\n\t\t\tcollectFailurePath(ctx, node.child, pos, env, path);\n\t\t\treturn;\n\n\t\tcase \"and\":\n\t\tcase \"or\": {\n\t\t\tconst childId = pickBooleanChild(ctx, node, pos, env, verdict);\n\t\t\tif (childId) {\n\t\t\t\tcollectFailurePath(ctx, childId, pos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"implies\": {\n\t\t\tconst leftVerdict = evaluateFiniteNode(ctx, node.left, pos, env);\n\t\t\tconst rightVerdict = evaluateFiniteNode(ctx, node.right, pos, env);\n\t\t\tif (verdict === \"violated\") {\n\t\t\t\tcollectFailurePath(ctx, node.right, pos, env, path);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rightVerdict === \"satisfied\") {\n\t\t\t\tcollectFailurePath(ctx, node.right, pos, env, path);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (leftVerdict !== verdict || rightVerdict === \"pending\") {\n\t\t\t\tcollectFailurePath(ctx, node.left, pos, env, path);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"always\": {\n\t\t\tconst childPos =\n\t\t\t\tverdict === \"violated\"\n\t\t\t\t\t? findFirstPosition(ctx, node.child, pos, ctx.trace.length - 1, env, \"violated\")\n\t\t\t\t\t: pos < ctx.trace.length\n\t\t\t\t\t\t? pos\n\t\t\t\t\t\t: null;\n\t\t\tif (childPos !== null) {\n\t\t\t\tcollectFailurePath(ctx, node.child, childPos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"eventually\": {\n\t\t\tconst childPos =\n\t\t\t\tverdict === \"satisfied\"\n\t\t\t\t\t? findFirstPosition(ctx, node.child, pos, ctx.trace.length - 1, env, \"satisfied\")\n\t\t\t\t\t: findLastPosition(ctx, node.child, pos, ctx.trace.length - 1, env, \"violated\");\n\t\t\tif (childPos !== null) {\n\t\t\t\tcollectFailurePath(ctx, node.child, childPos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"next\":\n\t\tcase \"weakNext\":\n\t\t\tif (pos + 1 < ctx.trace.length) {\n\t\t\t\tcollectFailurePath(ctx, node.child, pos + 1, env, path);\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase \"until\": {\n\t\t\tconst witness = findUntilFailureOrWitness(ctx, node, pos, env, verdict);\n\t\t\tif (witness) {\n\t\t\t\tcollectFailurePath(ctx, witness.nodeId, witness.pos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"release\": {\n\t\t\tconst witness = findReleaseFailureOrWitness(ctx, node, pos, env, verdict);\n\t\t\tif (witness) {\n\t\t\t\tcollectFailurePath(ctx, witness.nodeId, witness.pos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"once\": {\n\t\t\tconst childPos =\n\t\t\t\tverdict === \"satisfied\"\n\t\t\t\t\t? findLastPosition(ctx, node.child, 0, pos, env, \"satisfied\")\n\t\t\t\t\t: pos < ctx.trace.length\n\t\t\t\t\t\t? pos\n\t\t\t\t\t\t: null;\n\t\t\tif (childPos !== null) {\n\t\t\t\tcollectFailurePath(ctx, node.child, childPos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"historically\": {\n\t\t\tconst childPos =\n\t\t\t\tverdict === \"violated\"\n\t\t\t\t\t? findFirstPosition(ctx, node.child, 0, pos, env, \"violated\")\n\t\t\t\t\t: pos < ctx.trace.length\n\t\t\t\t\t\t? pos\n\t\t\t\t\t\t: null;\n\t\t\tif (childPos !== null) {\n\t\t\t\tcollectFailurePath(ctx, node.child, childPos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"since\": {\n\t\t\tconst witness = findSinceFailureOrWitness(ctx, node, pos, env, verdict);\n\t\t\tif (witness) {\n\t\t\t\tcollectFailurePath(ctx, witness.nodeId, witness.pos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"withinSteps\": {\n\t\t\tconst upper = Math.min(pos + node.steps - 1, ctx.trace.length - 1);\n\t\t\tconst childPos =\n\t\t\t\tverdict === \"satisfied\"\n\t\t\t\t\t? findFirstPosition(ctx, node.child, pos, upper, env, \"satisfied\")\n\t\t\t\t\t: findLastPosition(ctx, node.child, pos, upper, env, \"violated\");\n\t\t\tif (childPos !== null) {\n\t\t\t\tcollectFailurePath(ctx, node.child, childPos, env, path);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcase \"withinMs\": {\n\t\t\tif (pos >= ctx.trace.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst startTs = getTimestamp(ctx.runtime, ctx.trace[pos]!);\n\t\t\tlet lastInBudget: number | null = null;\n\t\t\tfor (let i = pos; i < ctx.trace.length; i++) {\n\t\t\t\tconst currentTs = getTimestamp(ctx.runtime, ctx.trace[i]!);\n\t\t\t\tif (currentTs - startTs > node.ms) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlastInBudget = i;\n\t\t\t\tif (\n\t\t\t\t\tverdict === \"satisfied\" &&\n\t\t\t\t\tevaluateFiniteNode(ctx, node.child, i, env) === \"satisfied\"\n\t\t\t\t) {\n\t\t\t\t\tcollectFailurePath(ctx, node.child, i, env, path);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (verdict === \"violated\" && lastInBudget !== null) {\n\t\t\t\tconst childPos = findLastPosition(ctx, node.child, pos, lastInBudget, env, \"violated\");\n\t\t\t\tif (childPos !== null) {\n\t\t\t\t\tcollectFailurePath(ctx, node.child, childPos, env, path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction pickBooleanChild<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnode: Extract<FormulaNode, { kind: \"and\" | \"or\" }>,\n\tpos: number,\n\tenv: EvalEnv,\n\tverdict: Verdict,\n): NodeId | null {\n\tfor (const childId of node.children) {\n\t\tconst childVerdict = evaluateFiniteNode(ctx, childId, pos, env);\n\t\tif (verdict === \"violated\" && childVerdict === \"violated\") {\n\t\t\treturn childId;\n\t\t}\n\t\tif (verdict === \"satisfied\" && childVerdict === \"satisfied\") {\n\t\t\treturn childId;\n\t\t}\n\t\tif (verdict === \"pending\" && childVerdict === \"pending\") {\n\t\t\treturn childId;\n\t\t}\n\t}\n\treturn node.children[0] ?? null;\n}\n\nfunction findUntilFailureOrWitness<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnode: Extract<FormulaNode, { kind: \"until\" }>,\n\tpos: number,\n\tenv: EvalEnv,\n\tverdict: Verdict,\n): { readonly nodeId: NodeId; readonly pos: number } | null {\n\tif (pos >= ctx.trace.length) {\n\t\treturn null;\n\t}\n\n\tlet leftAcc: Verdict = \"satisfied\";\n\tfor (let j = pos; j < ctx.trace.length; j++) {\n\t\tconst rightVerdict = evaluateFiniteNode(ctx, node.right, j, env);\n\t\tif (rightVerdict === \"satisfied\" && leftAcc === \"satisfied\") {\n\t\t\treturn verdict === \"satisfied\" ? { nodeId: node.right, pos: j } : null;\n\t\t}\n\n\t\tconst leftVerdict = evaluateFiniteNode(ctx, node.left, j, env);\n\t\tif (verdict === \"violated\" && leftAcc === \"satisfied\" && leftVerdict === \"violated\") {\n\t\t\treturn { nodeId: node.left, pos: j };\n\t\t}\n\t\tleftAcc = j === pos ? leftVerdict : andV(leftAcc, leftVerdict);\n\t\tif (leftAcc === \"violated\") {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (verdict === \"violated\") {\n\t\tconst rightPos = findLastPosition(ctx, node.right, pos, ctx.trace.length - 1, env, \"violated\");\n\t\tif (rightPos !== null) {\n\t\t\treturn { nodeId: node.right, pos: rightPos };\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction findReleaseFailureOrWitness<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnode: Extract<FormulaNode, { kind: \"release\" }>,\n\tpos: number,\n\tenv: EvalEnv,\n\tverdict: Verdict,\n): { readonly nodeId: NodeId; readonly pos: number } | null {\n\tif (pos >= ctx.trace.length) {\n\t\treturn null;\n\t}\n\n\tlet allRight: Verdict = \"satisfied\";\n\tfor (let j = pos; j < ctx.trace.length; j++) {\n\t\tconst rightVerdict = evaluateFiniteNode(ctx, node.right, j, env);\n\t\tif (verdict === \"violated\" && allRight === \"satisfied\" && rightVerdict === \"violated\") {\n\t\t\treturn { nodeId: node.right, pos: j };\n\t\t}\n\n\t\tallRight = andV(allRight, rightVerdict);\n\t\tconst leftVerdict = evaluateFiniteNode(ctx, node.left, j, env);\n\t\tif (leftVerdict === \"satisfied\" && allRight === \"satisfied\") {\n\t\t\treturn verdict === \"satisfied\" ? { nodeId: node.left, pos: j } : null;\n\t\t}\n\t\tif (allRight === \"violated\") {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (verdict === \"satisfied\" && pos < ctx.trace.length) {\n\t\treturn { nodeId: node.right, pos };\n\t}\n\n\treturn null;\n}\n\nfunction findSinceFailureOrWitness<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnode: Extract<FormulaNode, { kind: \"since\" }>,\n\tpos: number,\n\tenv: EvalEnv,\n\tverdict: Verdict,\n): { readonly nodeId: NodeId; readonly pos: number } | null {\n\tif (pos >= ctx.trace.length) {\n\t\treturn null;\n\t}\n\n\tfor (let j = pos; j >= 0; j--) {\n\t\tconst rightVerdict = evaluateFiniteNode(ctx, node.right, j, env);\n\t\tif (rightVerdict === \"satisfied\") {\n\t\t\tlet leftOk: Verdict = \"satisfied\";\n\t\t\tfor (let i = j + 1; i <= pos; i++) {\n\t\t\t\tconst leftVerdict = evaluateFiniteNode(ctx, node.left, i, env);\n\t\t\t\tif (verdict === \"violated\" && leftVerdict === \"violated\") {\n\t\t\t\t\treturn { nodeId: node.left, pos: i };\n\t\t\t\t}\n\t\t\t\tleftOk = andV(leftOk, leftVerdict);\n\t\t\t\tif (leftOk === \"violated\") {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (leftOk === \"satisfied\") {\n\t\t\t\treturn verdict === \"satisfied\" ? { nodeId: node.right, pos: j } : null;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (verdict === \"violated\") {\n\t\tconst rightPos = findFirstPosition(ctx, node.right, 0, pos, env, \"violated\");\n\t\tif (rightPos !== null) {\n\t\t\treturn { nodeId: node.right, pos: rightPos };\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction findFirstPosition<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnodeId: NodeId,\n\tstart: number,\n\tend: number,\n\tenv: EvalEnv,\n\tverdict: Verdict,\n): number | null {\n\tif (start > end) {\n\t\treturn null;\n\t}\n\tfor (let pos = start; pos <= end; pos++) {\n\t\tif (evaluateFiniteNode(ctx, nodeId, pos, env) === verdict) {\n\t\t\treturn pos;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction findLastPosition<TEvent>(\n\tctx: FiniteEvalContext<TEvent>,\n\tnodeId: NodeId,\n\tstart: number,\n\tend: number,\n\tenv: EvalEnv,\n\tverdict: Verdict,\n): number | null {\n\tif (start > end) {\n\t\treturn null;\n\t}\n\tfor (let pos = end; pos >= start; pos--) {\n\t\tif (evaluateFiniteNode(ctx, nodeId, pos, env) === verdict) {\n\t\t\treturn pos;\n\t\t}\n\t}\n\treturn null;\n}\nfunction toActivationId(nodeId: NodeId, pos: number, env: EvalEnv): ActivationId {\n\treturn activationId(`${nodeId}:${pos}:${encodeURIComponent(envKey(env))}`);\n}\n","import { compile } from \"../compiler/compile.js\";\nimport { print } from \"../compiler/printer.js\";\nimport { validate } from \"../compiler/validate.js\";\nimport type { FormulaExpr } from \"../core/formula-expr.js\";\nimport type { MonitorRuntime } from \"../core/runtime.js\";\nimport { buildCounterexampleReport } from \"./diagnostics.js\";\nimport { evaluateFormula } from \"./evaluate.js\";\nimport type { CounterexampleReport, OracleRunResult } from \"./types.js\";\n\nexport function runOracle<TEvent>(\n\tformula: FormulaExpr,\n\truntime: MonitorRuntime<TEvent>,\n\ttrace: readonly TEvent[],\n): OracleRunResult {\n\tconst doc = compile(formula);\n\n\tconst errors = validate(doc);\n\tif (errors.length > 0) {\n\t\tconst messages = errors.map((e) => `${e.nodeId}: ${e.message}`).join(\"; \");\n\t\tthrow new Error(`Invalid formula: ${messages}`);\n\t}\n\n\tconst verdict = evaluateFormula(doc, runtime, trace);\n\n\tconst report: CounterexampleReport | null =\n\t\tverdict === \"violated\"\n\t\t\t? (buildCounterexampleReport(doc, runtime, trace) ?? {\n\t\t\t\t\tverdict: \"violated\",\n\t\t\t\t\tfailurePath: [],\n\t\t\t\t\ttraceSlice: trace.map((event, i) => ({ step: i + 1, event })),\n\t\t\t\t\tsummary: `Formula violated: ${print(doc)}`,\n\t\t\t\t})\n\t\t\t: null;\n\n\treturn {\n\t\tverdict,\n\t\tsteps: trace.length,\n\t\treport,\n\t};\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,324 @@
1
+ import {
2
+ nodeId
3
+ } from "./chunk-B4SEKVLL.js";
4
+
5
+ // src/compiler/hash.ts
6
+ var FNV_OFFSET = 2166136261;
7
+ var FNV_PRIME = 16777619;
8
+ function fnv1a(input) {
9
+ let hash = FNV_OFFSET;
10
+ for (let i = 0; i < input.length; i++) {
11
+ const code = input.charCodeAt(i);
12
+ if (code > 255) {
13
+ hash ^= code >> 8;
14
+ hash = Math.imul(hash, FNV_PRIME) >>> 0;
15
+ hash ^= code & 255;
16
+ } else {
17
+ hash ^= code;
18
+ }
19
+ hash = Math.imul(hash, FNV_PRIME) >>> 0;
20
+ }
21
+ return hash;
22
+ }
23
+ function contentHash(input) {
24
+ return fnv1a(input).toString(16).padStart(8, "0");
25
+ }
26
+
27
+ // src/compiler/compile.ts
28
+ function canonicalKey(node) {
29
+ return JSON.stringify(node);
30
+ }
31
+ function addNode(ctx, node, expr) {
32
+ const key = canonicalKey(node);
33
+ const id = nodeId(contentHash(key));
34
+ if (!Object.hasOwn(ctx.nodes, id)) {
35
+ ctx.nodes[id] = node;
36
+ if (expr.meta) {
37
+ ctx.provenance[id] = {
38
+ nodeId: id,
39
+ origin: "user",
40
+ sourceExprKind: expr.kind,
41
+ meta: expr.meta
42
+ };
43
+ }
44
+ }
45
+ return id;
46
+ }
47
+ function flattenVariadic(exprs, kind, ctx) {
48
+ const result = [];
49
+ for (const expr of exprs) {
50
+ if (expr.kind === kind) {
51
+ result.push(...flattenVariadic(expr.children, kind, ctx));
52
+ } else {
53
+ result.push(compileExpr(expr, ctx));
54
+ }
55
+ }
56
+ return result;
57
+ }
58
+ function sortNodeIds(ids) {
59
+ return [...ids].sort((a, b) => a.localeCompare(b));
60
+ }
61
+ function compileExpr(expr, ctx) {
62
+ switch (expr.kind) {
63
+ case "literal":
64
+ return addNode(ctx, { kind: "literal", value: expr.value }, expr);
65
+ case "predicate": {
66
+ const node = expr.args ? { kind: "predicate", predicateId: expr.predicateId, args: expr.args } : { kind: "predicate", predicateId: expr.predicateId };
67
+ return addNode(ctx, node, expr);
68
+ }
69
+ case "when": {
70
+ const child = compileExpr(expr.child, ctx);
71
+ return addNode(
72
+ ctx,
73
+ { kind: "when", captureName: expr.captureName, selectorId: expr.selectorId, child },
74
+ expr
75
+ );
76
+ }
77
+ case "capture": {
78
+ const child = compileExpr(expr.child, ctx);
79
+ return addNode(
80
+ ctx,
81
+ {
82
+ kind: "capture",
83
+ captureName: expr.captureName,
84
+ selectorId: expr.selectorId,
85
+ child
86
+ },
87
+ expr
88
+ );
89
+ }
90
+ case "not": {
91
+ const child = compileExpr(expr.child, ctx);
92
+ return addNode(ctx, { kind: "not", child }, expr);
93
+ }
94
+ case "and": {
95
+ const children = sortNodeIds(flattenVariadic(expr.children, "and", ctx));
96
+ return addNode(ctx, { kind: "and", children }, expr);
97
+ }
98
+ case "or": {
99
+ const children = sortNodeIds(flattenVariadic(expr.children, "or", ctx));
100
+ return addNode(ctx, { kind: "or", children }, expr);
101
+ }
102
+ case "implies": {
103
+ const left = compileExpr(expr.left, ctx);
104
+ const right = compileExpr(expr.right, ctx);
105
+ return addNode(ctx, { kind: "implies", left, right }, expr);
106
+ }
107
+ case "always": {
108
+ const child = compileExpr(expr.child, ctx);
109
+ return addNode(ctx, { kind: "always", child }, expr);
110
+ }
111
+ case "eventually": {
112
+ const child = compileExpr(expr.child, ctx);
113
+ return addNode(ctx, { kind: "eventually", child }, expr);
114
+ }
115
+ case "next": {
116
+ const child = compileExpr(expr.child, ctx);
117
+ return addNode(ctx, { kind: "next", child }, expr);
118
+ }
119
+ case "weakNext": {
120
+ const child = compileExpr(expr.child, ctx);
121
+ return addNode(ctx, { kind: "weakNext", child }, expr);
122
+ }
123
+ case "until": {
124
+ const left = compileExpr(expr.left, ctx);
125
+ const right = compileExpr(expr.right, ctx);
126
+ return addNode(ctx, { kind: "until", left, right }, expr);
127
+ }
128
+ case "release": {
129
+ const left = compileExpr(expr.left, ctx);
130
+ const right = compileExpr(expr.right, ctx);
131
+ return addNode(ctx, { kind: "release", left, right }, expr);
132
+ }
133
+ case "once": {
134
+ const child = compileExpr(expr.child, ctx);
135
+ return addNode(ctx, { kind: "once", child }, expr);
136
+ }
137
+ case "historically": {
138
+ const child = compileExpr(expr.child, ctx);
139
+ return addNode(ctx, { kind: "historically", child }, expr);
140
+ }
141
+ case "since": {
142
+ const left = compileExpr(expr.left, ctx);
143
+ const right = compileExpr(expr.right, ctx);
144
+ return addNode(ctx, { kind: "since", left, right }, expr);
145
+ }
146
+ case "withinSteps": {
147
+ const child = compileExpr(expr.child, ctx);
148
+ return addNode(ctx, { kind: "withinSteps", steps: expr.steps, child }, expr);
149
+ }
150
+ case "withinMs": {
151
+ const child = compileExpr(expr.child, ctx);
152
+ return addNode(ctx, { kind: "withinMs", ms: expr.ms, child }, expr);
153
+ }
154
+ }
155
+ }
156
+ function compile(expr) {
157
+ const ctx = { nodes: {}, provenance: {} };
158
+ const root = compileExpr(expr, ctx);
159
+ return {
160
+ schemaVersion: 1,
161
+ root,
162
+ nodes: ctx.nodes,
163
+ ...Object.keys(ctx.provenance).length > 0 ? { provenance: ctx.provenance } : {}
164
+ };
165
+ }
166
+
167
+ // src/compiler/validate.ts
168
+ function validate(doc) {
169
+ const errors = [];
170
+ function walk(nid, scopedCaptures) {
171
+ const node = doc.nodes[nid];
172
+ if (!node) {
173
+ errors.push({ nodeId: nid, message: `Node ${nid} not found in document` });
174
+ return;
175
+ }
176
+ switch (node.kind) {
177
+ case "capture": {
178
+ const name = node.captureName;
179
+ if (scopedCaptures.has(name)) {
180
+ errors.push({
181
+ nodeId: nid,
182
+ message: `Capture name "${name}" shadows an outer capture`
183
+ });
184
+ }
185
+ const inner = new Set(scopedCaptures);
186
+ inner.add(name);
187
+ walk(node.child, inner);
188
+ break;
189
+ }
190
+ case "when": {
191
+ const name = node.captureName;
192
+ if (!scopedCaptures.has(name)) {
193
+ errors.push({
194
+ nodeId: nid,
195
+ message: `When references capture "${name}" which is not in scope`
196
+ });
197
+ }
198
+ walk(node.child, scopedCaptures);
199
+ break;
200
+ }
201
+ case "withinSteps":
202
+ if (node.steps <= 0 || !Number.isInteger(node.steps)) {
203
+ errors.push({
204
+ nodeId: nid,
205
+ message: `withinSteps requires a positive integer, got ${node.steps}`
206
+ });
207
+ }
208
+ walk(node.child, scopedCaptures);
209
+ break;
210
+ case "withinMs":
211
+ if (!Number.isFinite(node.ms) || node.ms <= 0) {
212
+ errors.push({
213
+ nodeId: nid,
214
+ message: `withinMs requires a positive number, got ${node.ms}`
215
+ });
216
+ }
217
+ walk(node.child, scopedCaptures);
218
+ break;
219
+ case "not":
220
+ case "always":
221
+ case "eventually":
222
+ case "next":
223
+ case "weakNext":
224
+ case "once":
225
+ case "historically":
226
+ walk(node.child, scopedCaptures);
227
+ break;
228
+ case "and":
229
+ case "or":
230
+ for (const child of node.children) {
231
+ walk(child, scopedCaptures);
232
+ }
233
+ break;
234
+ case "implies":
235
+ case "until":
236
+ case "release":
237
+ case "since":
238
+ walk(node.left, scopedCaptures);
239
+ walk(node.right, scopedCaptures);
240
+ break;
241
+ case "literal":
242
+ case "predicate":
243
+ break;
244
+ }
245
+ }
246
+ walk(doc.root, /* @__PURE__ */ new Set());
247
+ return errors;
248
+ }
249
+
250
+ // src/compiler/printer.ts
251
+ function needsParens(node) {
252
+ switch (node.kind) {
253
+ case "and":
254
+ case "or":
255
+ case "implies":
256
+ case "until":
257
+ case "release":
258
+ case "since":
259
+ return true;
260
+ default:
261
+ return false;
262
+ }
263
+ }
264
+ function printNode(nid, doc) {
265
+ const node = doc.nodes[nid];
266
+ if (!node) return `<unknown:${nid}>`;
267
+ function child(cid) {
268
+ const cnode = doc.nodes[cid];
269
+ const s = printNode(cid, doc);
270
+ return cnode && needsParens(cnode) ? `(${s})` : s;
271
+ }
272
+ switch (node.kind) {
273
+ case "literal":
274
+ return node.value ? "true" : "false";
275
+ case "predicate":
276
+ return node.args && node.args.length > 0 ? `${node.predicateId}(${node.args.map((a) => a.kind === "literal" ? JSON.stringify(a.value) : `$${a.selectorId}`).join(", ")})` : String(node.predicateId);
277
+ case "when":
278
+ return `when(${node.captureName}, $${node.selectorId}, ${child(node.child)})`;
279
+ case "capture":
280
+ return `capture(${node.captureName}, $${node.selectorId}, ${child(node.child)})`;
281
+ case "not":
282
+ return `!${child(node.child)}`;
283
+ case "and":
284
+ return node.children.map((c) => child(c)).join(" & ");
285
+ case "or":
286
+ return node.children.map((c) => child(c)).join(" | ");
287
+ case "implies":
288
+ return `${child(node.left)} -> ${child(node.right)}`;
289
+ case "always":
290
+ return `G ${child(node.child)}`;
291
+ case "eventually":
292
+ return `F ${child(node.child)}`;
293
+ case "next":
294
+ return `X ${child(node.child)}`;
295
+ case "weakNext":
296
+ return `Xw ${child(node.child)}`;
297
+ case "until":
298
+ return `${child(node.left)} U ${child(node.right)}`;
299
+ case "release":
300
+ return `${child(node.left)} R ${child(node.right)}`;
301
+ case "once":
302
+ return `P ${child(node.child)}`;
303
+ case "historically":
304
+ return `H ${child(node.child)}`;
305
+ case "since":
306
+ return `${child(node.left)} S ${child(node.right)}`;
307
+ case "withinSteps":
308
+ return `within[${node.steps}] ${child(node.child)}`;
309
+ case "withinMs":
310
+ return `withinMs[${node.ms}] ${child(node.child)}`;
311
+ }
312
+ }
313
+ function print(doc) {
314
+ return printNode(doc.root, doc);
315
+ }
316
+
317
+ export {
318
+ fnv1a,
319
+ contentHash,
320
+ compile,
321
+ validate,
322
+ print
323
+ };
324
+ //# sourceMappingURL=chunk-WIW3TVEK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/compiler/hash.ts","../src/compiler/compile.ts","../src/compiler/validate.ts","../src/compiler/printer.ts"],"sourcesContent":["const FNV_OFFSET = 0x811c9dc5;\nconst FNV_PRIME = 0x01000193;\n\nexport function fnv1a(input: string): number {\n\tlet hash = FNV_OFFSET;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst code = input.charCodeAt(i);\n\t\t// Handle UTF-16: XOR both bytes for codes > 0xFF\n\t\tif (code > 0xff) {\n\t\t\thash ^= code >> 8;\n\t\t\thash = Math.imul(hash, FNV_PRIME) >>> 0;\n\t\t\thash ^= code & 0xff;\n\t\t} else {\n\t\t\thash ^= code;\n\t\t}\n\t\thash = Math.imul(hash, FNV_PRIME) >>> 0;\n\t}\n\treturn hash;\n}\n\nexport function contentHash(input: string): string {\n\treturn fnv1a(input).toString(16).padStart(8, \"0\");\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { FormulaExpr } from \"../core/formula-expr.js\";\nimport type { FormulaNode } from \"../core/formula-node.js\";\nimport type { NodeId } from \"../core/ids.js\";\nimport { nodeId } from \"../core/ids.js\";\nimport type { NodeProvenance } from \"../core/meta.js\";\nimport { contentHash } from \"./hash.js\";\n\ninterface CompileContext {\n\tnodes: Record<string, FormulaNode>;\n\tprovenance: Record<string, NodeProvenance>;\n}\n\nfunction canonicalKey(node: FormulaNode): string {\n\treturn JSON.stringify(node);\n}\n\nfunction addNode(ctx: CompileContext, node: FormulaNode, expr: FormulaExpr): NodeId {\n\tconst key = canonicalKey(node);\n\tconst id = nodeId(contentHash(key));\n\tif (!Object.hasOwn(ctx.nodes, id)) {\n\t\tctx.nodes[id] = node;\n\t\tif (expr.meta) {\n\t\t\tctx.provenance[id] = {\n\t\t\t\tnodeId: id,\n\t\t\t\torigin: \"user\",\n\t\t\t\tsourceExprKind: expr.kind,\n\t\t\t\tmeta: expr.meta,\n\t\t\t};\n\t\t}\n\t}\n\treturn id;\n}\n\nfunction flattenVariadic(\n\texprs: readonly FormulaExpr[],\n\tkind: \"and\" | \"or\",\n\tctx: CompileContext,\n): NodeId[] {\n\tconst result: NodeId[] = [];\n\tfor (const expr of exprs) {\n\t\tif (expr.kind === kind) {\n\t\t\tresult.push(...flattenVariadic(expr.children, kind, ctx));\n\t\t} else {\n\t\t\tresult.push(compileExpr(expr, ctx));\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction sortNodeIds(ids: NodeId[]): NodeId[] {\n\treturn [...ids].sort((a, b) => a.localeCompare(b));\n}\n\nfunction compileExpr(expr: FormulaExpr, ctx: CompileContext): NodeId {\n\tswitch (expr.kind) {\n\t\tcase \"literal\":\n\t\t\treturn addNode(ctx, { kind: \"literal\", value: expr.value }, expr);\n\n\t\tcase \"predicate\": {\n\t\t\tconst node: FormulaNode = expr.args\n\t\t\t\t? { kind: \"predicate\", predicateId: expr.predicateId, args: expr.args }\n\t\t\t\t: { kind: \"predicate\", predicateId: expr.predicateId };\n\t\t\treturn addNode(ctx, node, expr);\n\t\t}\n\n\t\tcase \"when\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(\n\t\t\t\tctx,\n\t\t\t\t{ kind: \"when\", captureName: expr.captureName, selectorId: expr.selectorId, child },\n\t\t\t\texpr,\n\t\t\t);\n\t\t}\n\n\t\tcase \"capture\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(\n\t\t\t\tctx,\n\t\t\t\t{\n\t\t\t\t\tkind: \"capture\",\n\t\t\t\t\tcaptureName: expr.captureName,\n\t\t\t\t\tselectorId: expr.selectorId,\n\t\t\t\t\tchild,\n\t\t\t\t},\n\t\t\t\texpr,\n\t\t\t);\n\t\t}\n\n\t\tcase \"not\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"not\", child }, expr);\n\t\t}\n\n\t\tcase \"and\": {\n\t\t\tconst children = sortNodeIds(flattenVariadic(expr.children, \"and\", ctx));\n\t\t\treturn addNode(ctx, { kind: \"and\", children }, expr);\n\t\t}\n\n\t\tcase \"or\": {\n\t\t\tconst children = sortNodeIds(flattenVariadic(expr.children, \"or\", ctx));\n\t\t\treturn addNode(ctx, { kind: \"or\", children }, expr);\n\t\t}\n\n\t\tcase \"implies\": {\n\t\t\tconst left = compileExpr(expr.left, ctx);\n\t\t\tconst right = compileExpr(expr.right, ctx);\n\t\t\treturn addNode(ctx, { kind: \"implies\", left, right }, expr);\n\t\t}\n\n\t\tcase \"always\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"always\", child }, expr);\n\t\t}\n\n\t\tcase \"eventually\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"eventually\", child }, expr);\n\t\t}\n\n\t\tcase \"next\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"next\", child }, expr);\n\t\t}\n\n\t\tcase \"weakNext\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"weakNext\", child }, expr);\n\t\t}\n\n\t\tcase \"until\": {\n\t\t\tconst left = compileExpr(expr.left, ctx);\n\t\t\tconst right = compileExpr(expr.right, ctx);\n\t\t\treturn addNode(ctx, { kind: \"until\", left, right }, expr);\n\t\t}\n\n\t\tcase \"release\": {\n\t\t\tconst left = compileExpr(expr.left, ctx);\n\t\t\tconst right = compileExpr(expr.right, ctx);\n\t\t\treturn addNode(ctx, { kind: \"release\", left, right }, expr);\n\t\t}\n\n\t\tcase \"once\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"once\", child }, expr);\n\t\t}\n\n\t\tcase \"historically\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"historically\", child }, expr);\n\t\t}\n\n\t\tcase \"since\": {\n\t\t\tconst left = compileExpr(expr.left, ctx);\n\t\t\tconst right = compileExpr(expr.right, ctx);\n\t\t\treturn addNode(ctx, { kind: \"since\", left, right }, expr);\n\t\t}\n\n\t\tcase \"withinSteps\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"withinSteps\", steps: expr.steps, child }, expr);\n\t\t}\n\n\t\tcase \"withinMs\": {\n\t\t\tconst child = compileExpr(expr.child, ctx);\n\t\t\treturn addNode(ctx, { kind: \"withinMs\", ms: expr.ms, child }, expr);\n\t\t}\n\t}\n}\n\nexport function compile(expr: FormulaExpr): FormulaDocument {\n\tconst ctx: CompileContext = { nodes: {}, provenance: {} };\n\tconst root = compileExpr(expr, ctx);\n\treturn {\n\t\tschemaVersion: 1,\n\t\troot,\n\t\tnodes: ctx.nodes as Record<NodeId, FormulaNode>,\n\t\t...(Object.keys(ctx.provenance).length > 0\n\t\t\t? { provenance: ctx.provenance as Record<NodeId, NodeProvenance> }\n\t\t\t: {}),\n\t};\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { NodeId } from \"../core/ids.js\";\n\nexport interface ValidationError {\n\treadonly nodeId: NodeId;\n\treadonly message: string;\n}\n\nexport function validate(doc: FormulaDocument): ValidationError[] {\n\tconst errors: ValidationError[] = [];\n\n\tfunction walk(nid: NodeId, scopedCaptures: Set<string>): void {\n\t\tconst node = doc.nodes[nid];\n\t\tif (!node) {\n\t\t\terrors.push({ nodeId: nid, message: `Node ${nid} not found in document` });\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (node.kind) {\n\t\t\tcase \"capture\": {\n\t\t\t\tconst name = node.captureName as string;\n\t\t\t\tif (scopedCaptures.has(name)) {\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tnodeId: nid,\n\t\t\t\t\t\tmessage: `Capture name \"${name}\" shadows an outer capture`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst inner = new Set(scopedCaptures);\n\t\t\t\tinner.add(name);\n\t\t\t\twalk(node.child, inner);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"when\": {\n\t\t\t\tconst name = node.captureName as string;\n\t\t\t\tif (!scopedCaptures.has(name)) {\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tnodeId: nid,\n\t\t\t\t\t\tmessage: `When references capture \"${name}\" which is not in scope`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\twalk(node.child, scopedCaptures);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"withinSteps\":\n\t\t\t\tif (node.steps <= 0 || !Number.isInteger(node.steps)) {\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tnodeId: nid,\n\t\t\t\t\t\tmessage: `withinSteps requires a positive integer, got ${node.steps}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\twalk(node.child, scopedCaptures);\n\t\t\t\tbreak;\n\n\t\t\tcase \"withinMs\":\n\t\t\t\tif (!Number.isFinite(node.ms) || node.ms <= 0) {\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tnodeId: nid,\n\t\t\t\t\t\tmessage: `withinMs requires a positive number, got ${node.ms}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\twalk(node.child, scopedCaptures);\n\t\t\t\tbreak;\n\n\t\t\tcase \"not\":\n\t\t\tcase \"always\":\n\t\t\tcase \"eventually\":\n\t\t\tcase \"next\":\n\t\t\tcase \"weakNext\":\n\t\t\tcase \"once\":\n\t\t\tcase \"historically\":\n\t\t\t\twalk(node.child, scopedCaptures);\n\t\t\t\tbreak;\n\n\t\t\tcase \"and\":\n\t\t\tcase \"or\":\n\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\twalk(child, scopedCaptures);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"implies\":\n\t\t\tcase \"until\":\n\t\t\tcase \"release\":\n\t\t\tcase \"since\":\n\t\t\t\twalk(node.left, scopedCaptures);\n\t\t\t\twalk(node.right, scopedCaptures);\n\t\t\t\tbreak;\n\n\t\t\tcase \"literal\":\n\t\t\tcase \"predicate\":\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\twalk(doc.root, new Set());\n\treturn errors;\n}\n","import type { FormulaDocument } from \"../core/formula-document.js\";\nimport type { FormulaNode } from \"../core/formula-node.js\";\nimport type { NodeId } from \"../core/ids.js\";\n\nfunction needsParens(node: FormulaNode): boolean {\n\tswitch (node.kind) {\n\t\tcase \"and\":\n\t\tcase \"or\":\n\t\tcase \"implies\":\n\t\tcase \"until\":\n\t\tcase \"release\":\n\t\tcase \"since\":\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction printNode(nid: NodeId, doc: FormulaDocument): string {\n\tconst node = doc.nodes[nid];\n\tif (!node) return `<unknown:${nid}>`;\n\n\tfunction child(cid: NodeId): string {\n\t\tconst cnode = doc.nodes[cid];\n\t\tconst s = printNode(cid, doc);\n\t\treturn cnode && needsParens(cnode) ? `(${s})` : s;\n\t}\n\n\tswitch (node.kind) {\n\t\tcase \"literal\":\n\t\t\treturn node.value ? \"true\" : \"false\";\n\t\tcase \"predicate\":\n\t\t\treturn node.args && node.args.length > 0\n\t\t\t\t? `${node.predicateId}(${node.args.map((a) => (a.kind === \"literal\" ? JSON.stringify(a.value) : `$${a.selectorId}`)).join(\", \")})`\n\t\t\t\t: String(node.predicateId);\n\t\tcase \"when\":\n\t\t\treturn `when(${node.captureName}, $${node.selectorId}, ${child(node.child)})`;\n\t\tcase \"capture\":\n\t\t\treturn `capture(${node.captureName}, $${node.selectorId}, ${child(node.child)})`;\n\t\tcase \"not\":\n\t\t\treturn `!${child(node.child)}`;\n\t\tcase \"and\":\n\t\t\treturn node.children.map((c) => child(c)).join(\" & \");\n\t\tcase \"or\":\n\t\t\treturn node.children.map((c) => child(c)).join(\" | \");\n\t\tcase \"implies\":\n\t\t\treturn `${child(node.left)} -> ${child(node.right)}`;\n\t\tcase \"always\":\n\t\t\treturn `G ${child(node.child)}`;\n\t\tcase \"eventually\":\n\t\t\treturn `F ${child(node.child)}`;\n\t\tcase \"next\":\n\t\t\treturn `X ${child(node.child)}`;\n\t\tcase \"weakNext\":\n\t\t\treturn `Xw ${child(node.child)}`;\n\t\tcase \"until\":\n\t\t\treturn `${child(node.left)} U ${child(node.right)}`;\n\t\tcase \"release\":\n\t\t\treturn `${child(node.left)} R ${child(node.right)}`;\n\t\tcase \"once\":\n\t\t\treturn `P ${child(node.child)}`;\n\t\tcase \"historically\":\n\t\t\treturn `H ${child(node.child)}`;\n\t\tcase \"since\":\n\t\t\treturn `${child(node.left)} S ${child(node.right)}`;\n\t\tcase \"withinSteps\":\n\t\t\treturn `within[${node.steps}] ${child(node.child)}`;\n\t\tcase \"withinMs\":\n\t\t\treturn `withinMs[${node.ms}] ${child(node.child)}`;\n\t}\n}\n\nexport function print(doc: FormulaDocument): string {\n\treturn printNode(doc.root, doc);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,19 @@
1
+ import { F as FormulaDocument } from '../formula-document-ChXznpvJ.js';
2
+ import { F as FormulaExpr } from '../formula-expr-DAHklv9S.js';
3
+ export { C as CompiledFormula, p as prepare } from '../prepare-CrKEArDt.js';
4
+ import { N as NodeId } from '../values-CEF1lKTL.js';
5
+
6
+ declare function compile(expr: FormulaExpr): FormulaDocument;
7
+
8
+ declare function fnv1a(input: string): number;
9
+ declare function contentHash(input: string): string;
10
+
11
+ interface ValidationError {
12
+ readonly nodeId: NodeId;
13
+ readonly message: string;
14
+ }
15
+ declare function validate(doc: FormulaDocument): ValidationError[];
16
+
17
+ declare function print(doc: FormulaDocument): string;
18
+
19
+ export { type ValidationError, compile, contentHash, fnv1a, print, validate };
@@ -0,0 +1,24 @@
1
+ import {
2
+ compile,
3
+ contentHash,
4
+ fnv1a,
5
+ print,
6
+ validate
7
+ } from "../chunk-WIW3TVEK.js";
8
+ import "../chunk-B4SEKVLL.js";
9
+
10
+ // src/compiler/prepare.ts
11
+ function prepare(doc) {
12
+ return {
13
+ document: doc
14
+ };
15
+ }
16
+ export {
17
+ compile,
18
+ contentHash,
19
+ fnv1a,
20
+ prepare,
21
+ print,
22
+ validate
23
+ };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/compiler/prepare.ts"],"sourcesContent":["import type { FormulaDocument } from \"../core/formula-document.js\";\n\nexport interface CompiledFormula {\n\treadonly document: FormulaDocument;\n}\n\nexport function prepare(doc: FormulaDocument): CompiledFormula {\n\treturn {\n\t\tdocument: doc,\n\t};\n}\n"],"mappings":";;;;;;;;;;AAMO,SAAS,QAAQ,KAAuC;AAC9D,SAAO;AAAA,IACN,UAAU;AAAA,EACX;AACD;","names":[]}
@@ -0,0 +1,5 @@
1
+ export { V as Verdict, a as andV, i as impliesV, n as notV, o as orV } from '../verdict-DYG0WE3o.js';
2
+ export { A as ActivationId, C as CaptureName, E as EnvId, F as FormulaMeta, J as JsonValue, N as NodeId, a as NodeProvenance, P as PredicateId, S as SelectorId, b as SourceSpan, V as ValueExprArg, c as activationId, d as captureName, e as current, f as envId, n as nodeId, p as predicateId, s as selectorId, v as value } from '../values-CEF1lKTL.js';
3
+ export { A as AlwaysExpr, a as AndExpr, C as CaptureExpr, E as EventuallyExpr, F as FormulaExpr, H as HistoricallyExpr, I as ImpliesExpr, L as LiteralExpr, N as NextExpr, b as NotExpr, O as OnceExpr, c as OrExpr, P as PredicateExpr, R as ReleaseExpr, S as SinceExpr, U as UntilExpr, W as WeakNextExpr, d as WhenExpr, e as WithinMsExpr, f as WithinStepsExpr } from '../formula-expr-DAHklv9S.js';
4
+ export { A as AlwaysNode, a as AndNode, C as CaptureNode, E as EventuallyNode, F as FormulaDocument, b as FormulaNode, H as HistoricallyNode, I as ImpliesNode, L as LiteralNode, N as NextNode, c as NotNode, O as OnceNode, d as OrNode, P as PredicateNode, R as ReleaseNode, S as SinceNode, U as UntilNode, W as WeakNextNode, e as WhenNode, f as WithinMsNode, g as WithinStepsNode } from '../formula-document-ChXznpvJ.js';
5
+ export { M as MonitorRuntime } from '../runtime-Do1rQFhQ.js';
@@ -0,0 +1,37 @@
1
+ import {
2
+ andV,
3
+ impliesV,
4
+ notV,
5
+ orV
6
+ } from "../chunk-AS6LZLUH.js";
7
+ import {
8
+ activationId,
9
+ captureName,
10
+ envId,
11
+ nodeId,
12
+ predicateId,
13
+ selectorId
14
+ } from "../chunk-B4SEKVLL.js";
15
+
16
+ // src/core/values.ts
17
+ function current(selectorId2) {
18
+ return { kind: "currentSelector", selectorId: selectorId2 };
19
+ }
20
+ function value(v) {
21
+ return { kind: "literal", value: v };
22
+ }
23
+ export {
24
+ activationId,
25
+ andV,
26
+ captureName,
27
+ current,
28
+ envId,
29
+ impliesV,
30
+ nodeId,
31
+ notV,
32
+ orV,
33
+ predicateId,
34
+ selectorId,
35
+ value
36
+ };
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/values.ts"],"sourcesContent":["import type { SelectorId } from \"./ids.js\";\n\nexport type JsonValue =\n\t| string\n\t| number\n\t| boolean\n\t| null\n\t| readonly JsonValue[]\n\t| { readonly [key: string]: JsonValue };\n\nexport type ValueExprArg =\n\t| { readonly kind: \"currentSelector\"; readonly selectorId: SelectorId }\n\t| { readonly kind: \"literal\"; readonly value: JsonValue };\n\nexport function current(selectorId: SelectorId): ValueExprArg {\n\treturn { kind: \"currentSelector\", selectorId };\n}\n\nexport function value(v: JsonValue): ValueExprArg {\n\treturn { kind: \"literal\", value: v };\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAcO,SAAS,QAAQA,aAAsC;AAC7D,SAAO,EAAE,MAAM,mBAAmB,YAAAA,YAAW;AAC9C;AAEO,SAAS,MAAM,GAA4B;AACjD,SAAO,EAAE,MAAM,WAAW,OAAO,EAAE;AACpC;","names":["selectorId"]}
@@ -0,0 +1,34 @@
1
+ import * as fc from 'fast-check';
2
+ import { F as FormulaExpr } from '../formula-expr-DAHklv9S.js';
3
+ import { M as MonitorRuntime } from '../runtime-Do1rQFhQ.js';
4
+ import '../values-CEF1lKTL.js';
5
+
6
+ interface TraceConfig<TEvent> {
7
+ readonly eventArbitrary: fc.Arbitrary<TEvent>;
8
+ readonly minLength?: number;
9
+ readonly maxLength?: number;
10
+ }
11
+ declare function traceArbitrary<TEvent>(config: TraceConfig<TEvent>): fc.Arbitrary<TEvent[]>;
12
+
13
+ interface TraceEvent<TModel> {
14
+ readonly type: string;
15
+ readonly payload?: unknown;
16
+ readonly modelBefore?: TModel;
17
+ readonly modelAfter?: TModel;
18
+ }
19
+ interface CommandAdapterConfig<TModel extends object, TReal> {
20
+ readonly commands: fc.Arbitrary<fc.Command<TModel, TReal>>[];
21
+ readonly initialModel: () => TModel;
22
+ readonly initialReal: () => TReal;
23
+ }
24
+ declare function commandAdapter<TModel extends object, TReal>(config: CommandAdapterConfig<TModel, TReal>): fc.Arbitrary<TraceEvent<TModel>[]>;
25
+
26
+ interface TracePropertyConfig<TEvent> {
27
+ readonly formula: FormulaExpr;
28
+ readonly runtime: MonitorRuntime<TEvent>;
29
+ readonly traceArbitrary: fc.Arbitrary<TEvent[]>;
30
+ }
31
+ declare function traceProperty<TEvent>(config: TracePropertyConfig<TEvent>): fc.IPropertyWithHooks<[TEvent[]]>;
32
+ declare function commandProperty<TEvent>(formula: FormulaExpr, runtime: MonitorRuntime<TEvent>, commandArbitrary: fc.Arbitrary<TEvent[]>): fc.IPropertyWithHooks<[TEvent[]]>;
33
+
34
+ export { type CommandAdapterConfig, type TraceConfig, type TraceEvent, type TracePropertyConfig, commandAdapter, commandProperty, traceArbitrary, traceProperty };