@atom-workflow-agent/workflow-compiler 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.
- package/LICENSE +201 -0
- package/README.md +30 -0
- package/README.zh-CN.md +30 -0
- package/dist/compiler/compile-workflow.d.ts +19 -0
- package/dist/compiler/compile-workflow.d.ts.map +1 -0
- package/dist/compiler/compile-workflow.js +865 -0
- package/dist/compiler/compile-workflow.js.map +1 -0
- package/dist/errors/workflow-compilation-error.d.ts +8 -0
- package/dist/errors/workflow-compilation-error.d.ts.map +1 -0
- package/dist/errors/workflow-compilation-error.js +15 -0
- package/dist/errors/workflow-compilation-error.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/normalization/canonical-json.d.ts +5 -0
- package/dist/normalization/canonical-json.d.ts.map +1 -0
- package/dist/normalization/canonical-json.js +27 -0
- package/dist/normalization/canonical-json.js.map +1 -0
- package/dist/validation/control-graph.d.ts +19 -0
- package/dist/validation/control-graph.d.ts.map +1 -0
- package/dist/validation/control-graph.js +215 -0
- package/dist/validation/control-graph.js.map +1 -0
- package/dist/validation/graph.d.ts +7 -0
- package/dist/validation/graph.d.ts.map +1 -0
- package/dist/validation/graph.js +92 -0
- package/dist/validation/graph.js.map +1 -0
- package/dist/validation/json-schema.d.ts +27 -0
- package/dist/validation/json-schema.d.ts.map +1 -0
- package/dist/validation/json-schema.js +345 -0
- package/dist/validation/json-schema.js.map +1 -0
- package/dist/validation/references.d.ts +32 -0
- package/dist/validation/references.d.ts.map +1 -0
- package/dist/validation/references.js +40 -0
- package/dist/validation/references.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { JsonSchema, JsonValue } from "@atom-workflow-agent/contracts";
|
|
2
|
+
export type JsonSchemaNode = JsonValue;
|
|
3
|
+
export declare function dereferenceSchema(node: JsonSchemaNode, root: JsonSchema, visited?: Set<string>): JsonSchemaNode;
|
|
4
|
+
export declare function schemaTypes(rawNode: JsonSchemaNode, root: JsonSchema): ReadonlySet<string>;
|
|
5
|
+
export declare function schemaAcceptsLiteral(rawNode: JsonSchemaNode, value: JsonValue, root: JsonSchema): boolean;
|
|
6
|
+
export declare function schemasCompatible(rawSource: JsonSchemaNode, rawTarget: JsonSchemaNode, sourceRoot: JsonSchema, targetRoot: JsonSchema): boolean;
|
|
7
|
+
export declare function childSchemaForProperty(rawNode: JsonSchemaNode, property: string, root: JsonSchema): JsonSchemaNode | undefined;
|
|
8
|
+
export declare function itemSchema(rawNode: JsonSchemaNode, root: JsonSchema): JsonSchemaNode | undefined;
|
|
9
|
+
export declare function requiredProperties(rawNode: JsonSchemaNode, root: JsonSchema): readonly string[];
|
|
10
|
+
/**
|
|
11
|
+
* Resolves required object properties after applying a literal discriminator
|
|
12
|
+
* already present in the bound value. This lets one Atom express operations
|
|
13
|
+
* such as `{operation:"inject"}` and
|
|
14
|
+
* `{operation:"restore", transaction:...}` without splitting the capability
|
|
15
|
+
* into multiple Atom keys.
|
|
16
|
+
*/
|
|
17
|
+
export declare function requiredPropertiesForValue(rawNode: JsonSchemaNode, root: JsonSchema, value: Readonly<Record<string, JsonValue>>): readonly string[];
|
|
18
|
+
export declare function resolveSchemaPath(rawNode: JsonSchemaNode, path: readonly string[], root: JsonSchema): JsonSchemaNode | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Returns whether every instance accepted by `rawNode` contains `path`.
|
|
21
|
+
* A strict Workflow reference is only safe when its source path is guaranteed;
|
|
22
|
+
* optional values must be omitted from the consumer input or made explicit by
|
|
23
|
+
* control flow before they are referenced.
|
|
24
|
+
*/
|
|
25
|
+
export declare function schemaPathGuaranteed(rawNode: JsonSchemaNode, path: readonly string[], root: JsonSchema): boolean;
|
|
26
|
+
export declare function inferSchema(values: readonly JsonValue[]): JsonSchemaNode;
|
|
27
|
+
//# sourceMappingURL=json-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/validation/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE5E,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC;AAgBvC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,UAAU,EAChB,OAAO,cAAoB,GAC1B,cAAc,CAUhB;AAOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAoB1F;AAcD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,UAAU,GACf,OAAO,CA8DT;AAMD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,GACrB,OAAO,CAsDT;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,GACf,cAAc,GAAG,SAAS,CAW5B;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,CAKhG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,CAI/F;AAeD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GACzC,SAAS,MAAM,EAAE,CAgBnB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,UAAU,GACf,cAAc,GAAG,SAAS,CAe5B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,UAAU,GACf,OAAO,CAuBT;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,cAAc,CAIxE"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
const ALL_TYPES = new Set(["null", "boolean", "object", "array", "number", "integer", "string"]);
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function equalJson(left, right) {
|
|
6
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
7
|
+
}
|
|
8
|
+
function pointerSegment(value) {
|
|
9
|
+
return value.replaceAll("~1", "/").replaceAll("~0", "~");
|
|
10
|
+
}
|
|
11
|
+
export function dereferenceSchema(node, root, visited = new Set()) {
|
|
12
|
+
if (!isRecord(node) || typeof node.$ref !== "string" || !node.$ref.startsWith("#/"))
|
|
13
|
+
return node;
|
|
14
|
+
if (visited.has(node.$ref))
|
|
15
|
+
return false;
|
|
16
|
+
visited.add(node.$ref);
|
|
17
|
+
let current = root;
|
|
18
|
+
for (const segment of node.$ref.slice(2).split("/").map(pointerSegment)) {
|
|
19
|
+
if (!isRecord(current) || !(segment in current))
|
|
20
|
+
return false;
|
|
21
|
+
current = current[segment];
|
|
22
|
+
}
|
|
23
|
+
return dereferenceSchema(current, root, visited);
|
|
24
|
+
}
|
|
25
|
+
function alternatives(node, keyword) {
|
|
26
|
+
if (!isRecord(node) || !Array.isArray(node[keyword]))
|
|
27
|
+
return [];
|
|
28
|
+
return node[keyword];
|
|
29
|
+
}
|
|
30
|
+
export function schemaTypes(rawNode, root) {
|
|
31
|
+
const node = dereferenceSchema(rawNode, root);
|
|
32
|
+
if (node === false)
|
|
33
|
+
return new Set();
|
|
34
|
+
if (node === true || !isRecord(node))
|
|
35
|
+
return ALL_TYPES;
|
|
36
|
+
if (typeof node.type === "string")
|
|
37
|
+
return new Set([node.type]);
|
|
38
|
+
if (Array.isArray(node.type))
|
|
39
|
+
return new Set(node.type.filter((value) => typeof value === "string"));
|
|
40
|
+
if ("const" in node)
|
|
41
|
+
return new Set([jsonType(node.const)]);
|
|
42
|
+
if (Array.isArray(node.enum))
|
|
43
|
+
return new Set(node.enum.map(jsonType));
|
|
44
|
+
const unions = [...alternatives(node, "anyOf"), ...alternatives(node, "oneOf")];
|
|
45
|
+
if (unions.length > 0) {
|
|
46
|
+
return new Set(unions.flatMap((alternative) => [...schemaTypes(alternative, root)]));
|
|
47
|
+
}
|
|
48
|
+
if (alternatives(node, "allOf").length > 0) {
|
|
49
|
+
const sets = alternatives(node, "allOf").map((alternative) => schemaTypes(alternative, root));
|
|
50
|
+
return new Set([...sets[0]].filter((type) => sets.every((set) => set.has(type))));
|
|
51
|
+
}
|
|
52
|
+
if ("properties" in node || "required" in node)
|
|
53
|
+
return new Set(["object"]);
|
|
54
|
+
if ("items" in node)
|
|
55
|
+
return new Set(["array"]);
|
|
56
|
+
return ALL_TYPES;
|
|
57
|
+
}
|
|
58
|
+
function jsonType(value) {
|
|
59
|
+
if (value === null)
|
|
60
|
+
return "null";
|
|
61
|
+
if (Array.isArray(value))
|
|
62
|
+
return "array";
|
|
63
|
+
if (typeof value === "number" && Number.isInteger(value))
|
|
64
|
+
return "integer";
|
|
65
|
+
return typeof value;
|
|
66
|
+
}
|
|
67
|
+
function typeAccepted(types, value) {
|
|
68
|
+
const type = jsonType(value);
|
|
69
|
+
return types.has(type) || type === "integer" && types.has("number");
|
|
70
|
+
}
|
|
71
|
+
export function schemaAcceptsLiteral(rawNode, value, root) {
|
|
72
|
+
const node = dereferenceSchema(rawNode, root);
|
|
73
|
+
if (node === true)
|
|
74
|
+
return true;
|
|
75
|
+
if (node === false || !isRecord(node))
|
|
76
|
+
return false;
|
|
77
|
+
const anyOf = alternatives(node, "anyOf");
|
|
78
|
+
if (anyOf.length > 0 && !anyOf.some((candidate) => schemaAcceptsLiteral(candidate, value, root)))
|
|
79
|
+
return false;
|
|
80
|
+
const oneOf = alternatives(node, "oneOf");
|
|
81
|
+
if (oneOf.length > 0 && oneOf.filter((candidate) => schemaAcceptsLiteral(candidate, value, root)).length !== 1)
|
|
82
|
+
return false;
|
|
83
|
+
const allOf = alternatives(node, "allOf");
|
|
84
|
+
if (allOf.length > 0 && !allOf.every((candidate) => schemaAcceptsLiteral(candidate, value, root)))
|
|
85
|
+
return false;
|
|
86
|
+
if (node.not !== undefined && schemaAcceptsLiteral(node.not, value, root))
|
|
87
|
+
return false;
|
|
88
|
+
if (!typeAccepted(schemaTypes(node, root), value))
|
|
89
|
+
return false;
|
|
90
|
+
if ("const" in node && !equalJson(node.const, value))
|
|
91
|
+
return false;
|
|
92
|
+
if (Array.isArray(node.enum) && !node.enum.some((candidate) => equalJson(candidate, value)))
|
|
93
|
+
return false;
|
|
94
|
+
if (typeof value === "string") {
|
|
95
|
+
if (typeof node.minLength === "number" && value.length < node.minLength)
|
|
96
|
+
return false;
|
|
97
|
+
if (typeof node.maxLength === "number" && value.length > node.maxLength)
|
|
98
|
+
return false;
|
|
99
|
+
if (typeof node.pattern === "string") {
|
|
100
|
+
try {
|
|
101
|
+
if (!new RegExp(node.pattern, "u").test(value))
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (node.format === "uri") {
|
|
109
|
+
try {
|
|
110
|
+
new URL(value);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (typeof value === "number") {
|
|
118
|
+
if (typeof node.minimum === "number" && value < node.minimum)
|
|
119
|
+
return false;
|
|
120
|
+
if (typeof node.maximum === "number" && value > node.maximum)
|
|
121
|
+
return false;
|
|
122
|
+
if (typeof node.exclusiveMinimum === "number" && value <= node.exclusiveMinimum)
|
|
123
|
+
return false;
|
|
124
|
+
if (typeof node.exclusiveMaximum === "number" && value >= node.exclusiveMaximum)
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
if (Array.isArray(value)) {
|
|
128
|
+
if (typeof node.minItems === "number" && value.length < node.minItems)
|
|
129
|
+
return false;
|
|
130
|
+
if (typeof node.maxItems === "number" && value.length > node.maxItems)
|
|
131
|
+
return false;
|
|
132
|
+
if (node.items !== undefined && !value.every((item) => schemaAcceptsLiteral(node.items, item, root)))
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
136
|
+
const properties = isRecord(node.properties) ? node.properties : {};
|
|
137
|
+
const required = Array.isArray(node.required)
|
|
138
|
+
? node.required.filter((item) => typeof item === "string")
|
|
139
|
+
: [];
|
|
140
|
+
if (required.some((property) => !(property in value)))
|
|
141
|
+
return false;
|
|
142
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
143
|
+
if (properties[key] !== undefined) {
|
|
144
|
+
if (!schemaAcceptsLiteral(properties[key], nested, root))
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
else if (node.additionalProperties === false) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
else if (node.additionalProperties !== undefined && node.additionalProperties !== true) {
|
|
151
|
+
if (!schemaAcceptsLiteral(node.additionalProperties, nested, root))
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
function typeSubset(source, target) {
|
|
159
|
+
return [...source].every((type) => target.has(type) || type === "integer" && target.has("number"));
|
|
160
|
+
}
|
|
161
|
+
export function schemasCompatible(rawSource, rawTarget, sourceRoot, targetRoot) {
|
|
162
|
+
const source = dereferenceSchema(rawSource, sourceRoot);
|
|
163
|
+
const target = dereferenceSchema(rawTarget, targetRoot);
|
|
164
|
+
if (source === false || target === true)
|
|
165
|
+
return true;
|
|
166
|
+
if (source === true)
|
|
167
|
+
return false;
|
|
168
|
+
if (target === false || !isRecord(source) || !isRecord(target))
|
|
169
|
+
return false;
|
|
170
|
+
const sourceUnion = [...alternatives(source, "anyOf"), ...alternatives(source, "oneOf")];
|
|
171
|
+
if (sourceUnion.length > 0) {
|
|
172
|
+
return sourceUnion.every((candidate) => schemasCompatible(candidate, target, sourceRoot, targetRoot));
|
|
173
|
+
}
|
|
174
|
+
const sourceAll = alternatives(source, "allOf");
|
|
175
|
+
if (sourceAll.length > 0) {
|
|
176
|
+
return sourceAll.every((candidate) => schemasCompatible(candidate, target, sourceRoot, targetRoot));
|
|
177
|
+
}
|
|
178
|
+
const targetAny = [...alternatives(target, "anyOf"), ...alternatives(target, "oneOf")];
|
|
179
|
+
if (targetAny.length > 0) {
|
|
180
|
+
return targetAny.some((candidate) => schemasCompatible(source, candidate, sourceRoot, targetRoot));
|
|
181
|
+
}
|
|
182
|
+
const targetAll = alternatives(target, "allOf");
|
|
183
|
+
if (targetAll.length > 0) {
|
|
184
|
+
return targetAll.every((candidate) => schemasCompatible(source, candidate, sourceRoot, targetRoot));
|
|
185
|
+
}
|
|
186
|
+
if ("const" in source)
|
|
187
|
+
return schemaAcceptsLiteral(target, source.const, targetRoot);
|
|
188
|
+
if (Array.isArray(source.enum))
|
|
189
|
+
return source.enum.every((value) => schemaAcceptsLiteral(target, value, targetRoot));
|
|
190
|
+
if (!typeSubset(schemaTypes(source, sourceRoot), schemaTypes(target, targetRoot)))
|
|
191
|
+
return false;
|
|
192
|
+
const targetTypes = schemaTypes(target, targetRoot);
|
|
193
|
+
if (targetTypes.has("object") && targetTypes.size === 1) {
|
|
194
|
+
const sourceProperties = isRecord(source.properties) ? source.properties : {};
|
|
195
|
+
const targetProperties = isRecord(target.properties) ? target.properties : {};
|
|
196
|
+
const sourceRequired = new Set(Array.isArray(source.required) ? source.required.filter((item) => typeof item === "string") : []);
|
|
197
|
+
const targetRequired = Array.isArray(target.required) ? target.required.filter((item) => typeof item === "string") : [];
|
|
198
|
+
for (const property of targetRequired) {
|
|
199
|
+
if (!sourceRequired.has(property) || sourceProperties[property] === undefined || targetProperties[property] === undefined)
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
for (const [property, sourceProperty] of Object.entries(sourceProperties)) {
|
|
203
|
+
const targetProperty = targetProperties[property];
|
|
204
|
+
if (targetProperty !== undefined) {
|
|
205
|
+
if (!schemasCompatible(sourceProperty, targetProperty, sourceRoot, targetRoot))
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
else if (target.additionalProperties === false) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
else if (target.additionalProperties !== undefined && target.additionalProperties !== true) {
|
|
212
|
+
if (!schemasCompatible(sourceProperty, target.additionalProperties, sourceRoot, targetRoot))
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (source.additionalProperties !== false && target.additionalProperties === false)
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
if (targetTypes.has("array") && targetTypes.size === 1 && target.items !== undefined) {
|
|
220
|
+
if (source.items === undefined || !schemasCompatible(source.items, target.items, sourceRoot, targetRoot))
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
export function childSchemaForProperty(rawNode, property, root) {
|
|
226
|
+
const node = dereferenceSchema(rawNode, root);
|
|
227
|
+
if (node === true)
|
|
228
|
+
return true;
|
|
229
|
+
if (node === false || !isRecord(node))
|
|
230
|
+
return undefined;
|
|
231
|
+
if (isRecord(node.properties)) {
|
|
232
|
+
const nested = node.properties[property];
|
|
233
|
+
if (nested !== undefined)
|
|
234
|
+
return nested;
|
|
235
|
+
}
|
|
236
|
+
if (node.additionalProperties === true || node.additionalProperties === undefined)
|
|
237
|
+
return true;
|
|
238
|
+
if (node.additionalProperties !== false)
|
|
239
|
+
return node.additionalProperties;
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
export function itemSchema(rawNode, root) {
|
|
243
|
+
const node = dereferenceSchema(rawNode, root);
|
|
244
|
+
if (node === true)
|
|
245
|
+
return true;
|
|
246
|
+
if (node === false || !isRecord(node) || node.items === undefined)
|
|
247
|
+
return undefined;
|
|
248
|
+
return node.items;
|
|
249
|
+
}
|
|
250
|
+
export function requiredProperties(rawNode, root) {
|
|
251
|
+
const node = dereferenceSchema(rawNode, root);
|
|
252
|
+
if (!isRecord(node) || !Array.isArray(node.required))
|
|
253
|
+
return [];
|
|
254
|
+
return node.required.filter((item) => typeof item === "string");
|
|
255
|
+
}
|
|
256
|
+
function discriminatorAlternativeMatches(rawNode, value, root) {
|
|
257
|
+
const node = dereferenceSchema(rawNode, root);
|
|
258
|
+
if (!isRecord(node) || !isRecord(node.properties))
|
|
259
|
+
return false;
|
|
260
|
+
const discriminators = Object.entries(node.properties).filter(([, propertySchema]) => isRecord(propertySchema) && "const" in propertySchema);
|
|
261
|
+
return discriminators.length > 0 && discriminators.every(([property, propertySchema]) => property in value && equalJson(propertySchema.const, value[property]));
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Resolves required object properties after applying a literal discriminator
|
|
265
|
+
* already present in the bound value. This lets one Atom express operations
|
|
266
|
+
* such as `{operation:"inject"}` and
|
|
267
|
+
* `{operation:"restore", transaction:...}` without splitting the capability
|
|
268
|
+
* into multiple Atom keys.
|
|
269
|
+
*/
|
|
270
|
+
export function requiredPropertiesForValue(rawNode, root, value) {
|
|
271
|
+
const node = dereferenceSchema(rawNode, root);
|
|
272
|
+
if (!isRecord(node))
|
|
273
|
+
return [];
|
|
274
|
+
const required = new Set(requiredProperties(node, root));
|
|
275
|
+
for (const candidate of alternatives(node, "allOf")) {
|
|
276
|
+
for (const property of requiredPropertiesForValue(candidate, root, value))
|
|
277
|
+
required.add(property);
|
|
278
|
+
}
|
|
279
|
+
for (const keyword of ["oneOf", "anyOf"]) {
|
|
280
|
+
const matches = alternatives(node, keyword).filter((candidate) => discriminatorAlternativeMatches(candidate, value, root));
|
|
281
|
+
if (matches.length === 1) {
|
|
282
|
+
for (const property of requiredPropertiesForValue(matches[0], root, value))
|
|
283
|
+
required.add(property);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return [...required].sort();
|
|
287
|
+
}
|
|
288
|
+
export function resolveSchemaPath(rawNode, path, root) {
|
|
289
|
+
let current = rawNode;
|
|
290
|
+
for (const segment of path) {
|
|
291
|
+
const types = schemaTypes(current, root);
|
|
292
|
+
if (types.has("array") && /^\d+$/.test(segment)) {
|
|
293
|
+
const nested = itemSchema(current, root);
|
|
294
|
+
if (nested === undefined)
|
|
295
|
+
return undefined;
|
|
296
|
+
current = nested;
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const nested = childSchemaForProperty(current, segment, root);
|
|
300
|
+
if (nested === undefined)
|
|
301
|
+
return undefined;
|
|
302
|
+
current = nested;
|
|
303
|
+
}
|
|
304
|
+
return current;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Returns whether every instance accepted by `rawNode` contains `path`.
|
|
308
|
+
* A strict Workflow reference is only safe when its source path is guaranteed;
|
|
309
|
+
* optional values must be omitted from the consumer input or made explicit by
|
|
310
|
+
* control flow before they are referenced.
|
|
311
|
+
*/
|
|
312
|
+
export function schemaPathGuaranteed(rawNode, path, root) {
|
|
313
|
+
if (path.length === 0)
|
|
314
|
+
return true;
|
|
315
|
+
const node = dereferenceSchema(rawNode, root);
|
|
316
|
+
if (node === true || node === false || !isRecord(node))
|
|
317
|
+
return false;
|
|
318
|
+
const unions = [...alternatives(node, "anyOf"), ...alternatives(node, "oneOf")];
|
|
319
|
+
if (unions.length > 0)
|
|
320
|
+
return unions.every((candidate) => schemaPathGuaranteed(candidate, path, root));
|
|
321
|
+
const intersections = alternatives(node, "allOf");
|
|
322
|
+
if (intersections.length > 0)
|
|
323
|
+
return intersections.some((candidate) => schemaPathGuaranteed(candidate, path, root));
|
|
324
|
+
const [segment, ...rest] = path;
|
|
325
|
+
if (schemaTypes(node, root).has("array") && /^\d+$/.test(segment)) {
|
|
326
|
+
const index = Number(segment);
|
|
327
|
+
const nested = itemSchema(node, root);
|
|
328
|
+
return nested !== undefined
|
|
329
|
+
&& typeof node.minItems === "number"
|
|
330
|
+
&& node.minItems > index
|
|
331
|
+
&& schemaPathGuaranteed(nested, rest, root);
|
|
332
|
+
}
|
|
333
|
+
if (!requiredProperties(node, root).includes(segment))
|
|
334
|
+
return false;
|
|
335
|
+
const nested = childSchemaForProperty(node, segment, root);
|
|
336
|
+
return nested !== undefined && schemaPathGuaranteed(nested, rest, root);
|
|
337
|
+
}
|
|
338
|
+
export function inferSchema(values) {
|
|
339
|
+
if (values.length === 0)
|
|
340
|
+
return true;
|
|
341
|
+
if (values.length === 1)
|
|
342
|
+
return { const: values[0] };
|
|
343
|
+
return { anyOf: values.map((value) => ({ const: value })) };
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/validation/json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { JsonValue, WorkflowReference } from "@atom-workflow-agent/contracts";
|
|
2
|
+
export type ParsedWorkflowReference = {
|
|
3
|
+
readonly kind: "workflow-input";
|
|
4
|
+
readonly path: readonly string[];
|
|
5
|
+
} | {
|
|
6
|
+
readonly kind: "dependency-output";
|
|
7
|
+
readonly nodeId: string;
|
|
8
|
+
readonly path: readonly string[];
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: "map-item";
|
|
11
|
+
readonly path: readonly string[];
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: "map-index";
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: "edge-source-output";
|
|
16
|
+
readonly path: readonly string[];
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: "activation-output";
|
|
19
|
+
readonly nodeId: string;
|
|
20
|
+
readonly path: readonly string[];
|
|
21
|
+
};
|
|
22
|
+
export declare function isReferenceCandidate(value: JsonValue): value is Record<string, JsonValue> & {
|
|
23
|
+
$ref: JsonValue;
|
|
24
|
+
};
|
|
25
|
+
export declare function parseWorkflowReference(reference: WorkflowReference): ParsedWorkflowReference;
|
|
26
|
+
export declare function valueAtPath(root: JsonValue | Readonly<Record<string, JsonValue>>, path: readonly string[]): {
|
|
27
|
+
found: true;
|
|
28
|
+
value: JsonValue;
|
|
29
|
+
} | {
|
|
30
|
+
found: false;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=references.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/validation/references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACjG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEtG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAE/G;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,iBAAiB,GAAG,uBAAuB,CAa5F;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EACrD,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAetD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export function isReferenceCandidate(value) {
|
|
2
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) && "$ref" in value;
|
|
3
|
+
}
|
|
4
|
+
export function parseWorkflowReference(reference) {
|
|
5
|
+
const segments = reference.$ref.split(".");
|
|
6
|
+
if (segments[0] === "workflow")
|
|
7
|
+
return { kind: "workflow-input", path: segments.slice(2) };
|
|
8
|
+
if (segments[0] === "dependencies") {
|
|
9
|
+
return { kind: "dependency-output", nodeId: segments[1], path: segments.slice(3) };
|
|
10
|
+
}
|
|
11
|
+
if (segments[0] === "map") {
|
|
12
|
+
return segments[1] === "index"
|
|
13
|
+
? { kind: "map-index" }
|
|
14
|
+
: { kind: "map-item", path: segments.slice(2) };
|
|
15
|
+
}
|
|
16
|
+
if (segments[0] === "node")
|
|
17
|
+
return { kind: "edge-source-output", path: segments.slice(2) };
|
|
18
|
+
return { kind: "activation-output", nodeId: segments[1], path: segments.slice(5) };
|
|
19
|
+
}
|
|
20
|
+
export function valueAtPath(root, path) {
|
|
21
|
+
let current = root;
|
|
22
|
+
for (const segment of path) {
|
|
23
|
+
if (Array.isArray(current)) {
|
|
24
|
+
if (!/^\d+$/.test(segment))
|
|
25
|
+
return { found: false };
|
|
26
|
+
const index = Number(segment);
|
|
27
|
+
if (!(index in current))
|
|
28
|
+
return { found: false };
|
|
29
|
+
current = current[index];
|
|
30
|
+
}
|
|
31
|
+
else if (current !== null && typeof current === "object" && segment in current) {
|
|
32
|
+
current = current[segment];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return { found: false };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { found: true, value: current };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/validation/references.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,oBAAoB,CAAC,KAAgB;IACnD,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAA4B;IACjE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;IACD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO;YAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;YACvB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAqD,EACrD,IAAuB;IAEvB,IAAI,OAAO,GAAc,IAAiB,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACjD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACjF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@atom-workflow-agent/workflow-compiler",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Strict validation and immutable compilation of workflow specifications.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/joekbits/atom-workflow-agent.git",
|
|
9
|
+
"directory": "packages/workflow-compiler"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/joekbits/atom-workflow-agent/tree/main/packages/workflow-compiler#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/joekbits/atom-workflow-agent/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"workflow",
|
|
17
|
+
"compiler",
|
|
18
|
+
"validation"
|
|
19
|
+
],
|
|
20
|
+
"type": "module",
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md",
|
|
24
|
+
"README.zh-CN.md"
|
|
25
|
+
],
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/index.js"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public",
|
|
34
|
+
"provenance": true
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=22"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@atom-workflow-agent/contracts": "0.1.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@atom-workflow-agent/atom-sdk": "0.1.0"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc -p tsconfig.json",
|
|
47
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
48
|
+
"test": "vitest run"
|
|
49
|
+
}
|
|
50
|
+
}
|