@darkhorseprojects/circuitry 0.4.1 → 0.4.3

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/graph.d.ts CHANGED
@@ -1,23 +1,29 @@
1
1
  export declare const CIRCUITRY_SPEC_VERSION: "0.4";
2
- export type CircuitrySpecVersion = typeof CIRCUITRY_SPEC_VERSION;
3
- export type CircuitrySchema = "str" | "int" | "float" | "bool" | "list" | "dict" | Record<string, unknown>;
4
- export type CircuitryInputKind = "text" | "file" | "url" | "image" | "uri" | "data" | string;
5
- export type CircuitryInputSpec = {
6
- type?: CircuitryInputKind;
7
- required?: boolean;
8
- default?: unknown;
9
- label?: string;
2
+ export type CircuitryGraph = {
3
+ circuitry: "0.4";
4
+ title?: string;
10
5
  description?: string;
11
- mime?: string;
12
- mimeType?: string;
6
+ imports?: CircuitryImport[];
7
+ inputs?: Record<string, CircuitryInputSpec>;
8
+ entry?: string;
9
+ entries?: Record<string, string>;
10
+ resources: Record<string, CircuitryResource>;
11
+ outputs?: Record<string, CircuitryOutput>;
12
+ [key: `x-${string}`]: unknown;
13
13
  };
14
- export type CircuitryGraphArg = CircuitryInputSpec;
15
- export type CircuitryRuntimeInputs = Record<string, unknown>;
16
14
  export type CircuitryImport = {
17
15
  path: string;
18
16
  resources?: "*" | string[] | Record<string, string>;
19
17
  prefix?: string;
20
18
  };
19
+ export type CircuitryInputSpec = {
20
+ type?: string;
21
+ required?: boolean;
22
+ default?: unknown;
23
+ label?: string;
24
+ description?: string;
25
+ mime?: string;
26
+ };
21
27
  export type CircuitryResource = {
22
28
  type: string;
23
29
  label?: string;
@@ -28,180 +34,39 @@ export type CircuitryResource = {
28
34
  path?: string;
29
35
  uri?: string;
30
36
  mime?: string;
31
- mimeType?: string;
32
- data?: Record<string, unknown>;
33
37
  identity?: string;
34
- model?: string;
35
38
  instructions?: string;
36
- personality?: string;
37
- context?: string;
38
39
  tools?: string[];
39
- skills?: string[];
40
40
  graph?: string;
41
41
  entry?: string;
42
42
  expect?: CircuitrySchema;
43
43
  [key: `x-${string}`]: unknown;
44
44
  };
45
- export type CircuitryResourceEntry = CircuitryResource;
46
- export type CircuitryResourceText = CircuitryResource & {
47
- type: "text";
48
- };
49
- export type CircuitryResourceAgent = CircuitryResource & {
50
- type: "agent";
51
- };
52
- export type CircuitryResourceTool = CircuitryResource & {
53
- type: "tool";
54
- };
55
- export type CircuitryResourceData = CircuitryResource;
56
45
  export type CircuitryOutput = {
57
46
  from: string;
47
+ schema?: CircuitrySchema;
58
48
  type?: string;
59
49
  mime?: string;
60
- schema?: CircuitrySchema;
61
- };
62
- export type CircuitryRuntime = Record<string, unknown>;
63
- export type CircuitryGraphValidation = Record<string, unknown>;
64
- export type CircuitryGraph = {
65
- circuitry: CircuitrySpecVersion | string;
66
- id?: string;
67
- title?: string;
68
- description?: string;
69
- imports?: CircuitryImport[];
70
- inputs?: Record<string, CircuitryInputSpec>;
71
- args?: Record<string, CircuitryInputSpec>;
72
- entry?: string;
73
- entries?: Record<string, string>;
74
- resources?: Record<string, CircuitryResourceEntry>;
75
- outputs?: Record<string, CircuitryOutput>;
76
- nodes?: CircuitryNode[];
77
- edges?: CircuitryEdge[];
78
- runtime?: CircuitryRuntime;
79
- validation?: CircuitryGraphValidation;
80
- metadata?: Record<string, unknown>;
81
- [key: `x-${string}`]: unknown;
82
- };
83
- export type LoadedCircuitryBundle = {
84
- circuitryBundle: CircuitrySpecVersion;
85
- graph: CircuitryGraph;
86
- origins: Record<string, string>;
87
50
  };
51
+ export type CircuitrySchema = "str" | "int" | "float" | "bool" | "list" | "dict" | Record<string, unknown>;
88
52
  export type CircuitryValidationIssue = {
89
53
  code: string;
90
54
  message: string;
91
- path?: Array<string | number>;
55
+ path: Array<string | number>;
92
56
  };
93
57
  export type CircuitryValidationResult = {
94
58
  ok: boolean;
95
- errors: CircuitryValidationIssue[];
96
- standard: Required<CircuitryValidationStandard>;
97
- };
98
- export type CircuitryValidationStandard = {
99
- version?: CircuitrySpecVersion | string;
100
- requireSpecVersion?: boolean;
101
- };
102
- export declare const DEFAULT_CIRCUITRY_VALIDATION_STANDARD: {
103
- readonly version: "0.4";
104
- readonly requireSpecVersion: true;
59
+ issues: CircuitryValidationIssue[];
105
60
  };
106
61
  export type CircuitryDependency = {
107
62
  from: string;
108
63
  to: string;
109
- name?: string;
110
- };
111
- export type CircuitryInspection = {
112
- version: string;
113
- title?: string;
114
- entry?: string;
115
- entries: Record<string, string>;
116
- inputs: string[];
117
- resources: string[];
118
- outputs: string[];
119
- dependencies: CircuitryDependency[];
120
- };
121
- export declare const createCircuitryValidationStandard: (standard?: CircuitryValidationStandard) => Required<CircuitryValidationStandard>;
122
- export declare const getResourceInputs: (resource: CircuitryResourceEntry) => CircuitryDependency[];
123
- export declare const getCircuitryDependencies: (graph: CircuitryGraph) => CircuitryDependency[];
124
- export declare const getCircuitryDependents: (graph: CircuitryGraph, resourceId: string) => string[];
125
- export declare const getCircuitryRunSet: (graph: CircuitryGraph, entry?: string | undefined) => string[];
126
- export declare const toposortCircuitryResources: (graph: CircuitryGraph, entry?: string) => string[];
127
- export declare const resolveCircuitrySource: (graph: CircuitryGraph) => CircuitryGraph;
128
- export declare const applyCircuitryRuntimeInputs: (graph: CircuitryGraph, inputs?: CircuitryRuntimeInputs) => CircuitryGraph;
129
- export declare const validateCircuitrySource: (graph: unknown, standard?: CircuitryValidationStandard) => CircuitryValidationResult;
130
- export declare const validateCircuitryGraphWithStandard: (graph: unknown, standard?: CircuitryValidationStandard) => CircuitryValidationResult;
131
- export declare const validateCircuitryExecutionGraphWithStandard: (graph: unknown, standard?: CircuitryValidationStandard) => CircuitryValidationResult;
132
- export declare const validateCircuitryGraph: (graph: unknown, standard?: CircuitryValidationStandard) => string[];
133
- export declare const inspectCircuitrySource: (graph: CircuitryGraph) => CircuitryInspection;
134
- export declare const parseCircuitrySource: (value: unknown) => CircuitryGraph;
135
- export declare const isUriInput: (input: {
136
- type?: string;
137
- uri?: string;
138
- path?: string;
139
- }) => boolean;
140
- export type CircuitryNodeKind = "agent" | "input" | "tool" | "output" | string;
141
- export type CircuitryEdgeKind = "dependency" | "context" | "message" | "control" | string;
142
- export type CircuitryExpectFieldType = "str" | "int" | "float" | "bool" | "list" | "dict" | (string & {});
143
- export type CircuitryExpectField = {
144
- type: CircuitryExpectFieldType;
145
- contains?: string;
146
- items?: CircuitrySchema | CircuitryExpectFieldType;
147
- optional?: boolean;
148
- };
149
- export interface CircuitryExpectSchema {
150
- [key: string]: CircuitryExpectField | CircuitryExpectFieldType | CircuitryExpectSchema;
151
- }
152
- export type CircuitryAgent = {
153
- uses?: string;
154
- model?: string;
155
- tools?: string[];
156
- identity?: string;
157
- personality?: string;
158
- instructions?: string;
159
- context?: string;
160
- };
161
- export type CircuitryInput = {
162
- id: string;
163
- type: CircuitryInputKind;
164
- label?: string;
165
- value?: string;
166
- uri?: string;
167
- mimeType?: string;
168
- data?: Record<string, unknown>;
169
- };
170
- export type CircuitryNode = {
171
- id: string;
172
- kind: CircuitryNodeKind;
173
- label: string;
174
- agent?: CircuitryAgent;
175
- input?: Omit<CircuitryInput, "id">;
176
- skills?: string[];
177
- expect?: CircuitryExpectSchema;
178
- data?: Record<string, unknown>;
179
- view?: Record<string, unknown>;
180
- };
181
- export type CircuitryEdge = {
182
- id?: string;
183
- from: string;
184
- to: string;
185
- kind?: CircuitryEdgeKind;
186
- label?: string;
187
- data?: Record<string, unknown>;
188
- };
189
- export type CircuitrySandboxProvider = string;
190
- export type CircuitryRuntimeProvider = string;
191
- export type CircuitryBuiltInValidationRule = string;
192
- export type CircuitryValidationRuleEntry = string | {
193
- rule: string;
194
- executableKinds?: string[];
195
- };
196
- export type CircuitryAgentPreset = {
197
- name: string;
198
- description?: string;
199
- model?: string;
200
- personality?: string;
201
- instructions: string;
202
- metadata?: Record<string, unknown>;
203
- };
204
- export declare const normalizeCircuitryGraph: (graph: CircuitryGraph) => CircuitryGraph & {
205
- nodes?: CircuitryNode[];
206
- edges?: CircuitryEdge[];
207
64
  };
65
+ export declare function assertObject(value: unknown, label: string): asserts value is Record<string, unknown>;
66
+ export declare function asCircuitryGraph(value: unknown): CircuitryGraph;
67
+ export declare function getCircuitryDependencies(graph: CircuitryGraph): CircuitryDependency[];
68
+ export declare function getCircuitryRunSet(graph: CircuitryGraph, entry?: string | undefined): string[];
69
+ export declare function toposortCircuitryResources(graph: CircuitryGraph, entry?: string | undefined): string[];
70
+ export declare function inspectCircuitrySource(graph: CircuitryGraph): string;
71
+ export declare function validateCircuitrySource(value: unknown): CircuitryValidationResult;
72
+ export declare function dependencyValues(inputs: string[] | Record<string, string> | undefined): string[];
package/dist/graph.js ADDED
@@ -0,0 +1,193 @@
1
+ export const CIRCUITRY_SPEC_VERSION = "0.4";
2
+ export function assertObject(value, label) {
3
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
4
+ throw new Error(`${label} must be an object`);
5
+ }
6
+ }
7
+ export function asCircuitryGraph(value) {
8
+ assertObject(value, "Circuitry graph");
9
+ return value;
10
+ }
11
+ export function getCircuitryDependencies(graph) {
12
+ const dependencies = [];
13
+ for (const [to, resource] of Object.entries(graph.resources ?? {})) {
14
+ for (const from of dependencyValues(resource.inputs)) {
15
+ dependencies.push({ from, to });
16
+ }
17
+ }
18
+ return dependencies;
19
+ }
20
+ export function getCircuitryRunSet(graph, entry = graph.entry) {
21
+ if (!entry)
22
+ return [];
23
+ const seen = new Set();
24
+ const visit = (id) => {
25
+ if (seen.has(id))
26
+ return;
27
+ seen.add(id);
28
+ const resource = graph.resources[id];
29
+ if (!resource)
30
+ return;
31
+ for (const dep of dependencyValues(resource.inputs))
32
+ visit(dep);
33
+ };
34
+ visit(entry);
35
+ return [...seen];
36
+ }
37
+ export function toposortCircuitryResources(graph, entry = graph.entry) {
38
+ const selected = new Set(getCircuitryRunSet(graph, entry));
39
+ const temporary = new Set();
40
+ const permanent = new Set();
41
+ const order = [];
42
+ const visit = (id) => {
43
+ if (!selected.has(id) || permanent.has(id))
44
+ return;
45
+ if (temporary.has(id))
46
+ throw new Error(`cycle detected at ${id}`);
47
+ temporary.add(id);
48
+ const resource = graph.resources[id];
49
+ if (resource) {
50
+ for (const dep of dependencyValues(resource.inputs))
51
+ visit(dep);
52
+ }
53
+ temporary.delete(id);
54
+ permanent.add(id);
55
+ order.push(id);
56
+ };
57
+ if (entry)
58
+ visit(entry);
59
+ return order;
60
+ }
61
+ export function inspectCircuitrySource(graph) {
62
+ const resources = Object.keys(graph.resources ?? {});
63
+ const lines = [
64
+ `${graph.title ?? "Circuitry graph"}`,
65
+ `version: ${graph.circuitry}`,
66
+ `resources: ${resources.length}`,
67
+ `entry: ${graph.entry ?? "(none)"}`,
68
+ ];
69
+ if (graph.entries && Object.keys(graph.entries).length)
70
+ lines.push(`entries: ${Object.keys(graph.entries).join(", ")}`);
71
+ if (graph.inputs && Object.keys(graph.inputs).length)
72
+ lines.push(`inputs: ${Object.keys(graph.inputs).join(", ")}`);
73
+ if (graph.outputs && Object.keys(graph.outputs).length)
74
+ lines.push(`outputs: ${Object.keys(graph.outputs).join(", ")}`);
75
+ lines.push("", "resources:");
76
+ for (const id of resources) {
77
+ const resource = graph.resources[id];
78
+ const deps = dependencyValues(resource.inputs);
79
+ lines.push(` - ${id}: ${resource.type}${deps.length ? ` <- ${deps.join(", ")}` : ""}`);
80
+ }
81
+ return `${lines.join("\n")}\n`;
82
+ }
83
+ export function validateCircuitrySource(value) {
84
+ const issues = [];
85
+ const issue = (code, message, path) => issues.push({ code, message, path });
86
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
87
+ issue("invalid_graph", "graph must be an object", []);
88
+ return { ok: false, issues };
89
+ }
90
+ const graph = value;
91
+ if (graph.circuitry !== CIRCUITRY_SPEC_VERSION) {
92
+ issue("invalid_version", `circuitry must be ${CIRCUITRY_SPEC_VERSION}`, ["circuitry"]);
93
+ }
94
+ if ("nodes" in graph)
95
+ issue("forbidden_nodes", "nodes are not part of Circuitry 0.4", ["nodes"]);
96
+ if ("edges" in graph)
97
+ issue("forbidden_edges", "edges are not part of Circuitry 0.4", ["edges"]);
98
+ if ("args" in graph)
99
+ issue("forbidden_args", "args are not part of Circuitry 0.4; use inputs", ["args"]);
100
+ if ("runtime" in graph)
101
+ issue("forbidden_runtime", "runtime is not a core Circuitry field; use runtime config or x-*", ["runtime"]);
102
+ if (!graph.resources || typeof graph.resources !== "object" || Array.isArray(graph.resources)) {
103
+ issue("missing_resources", "resources must be an object", ["resources"]);
104
+ return { ok: false, issues };
105
+ }
106
+ const resources = graph.resources;
107
+ const resourceIds = new Set(Object.keys(resources));
108
+ const publicInputIds = new Set(Object.keys(graph.inputs ?? {}));
109
+ if (graph.entry && !resourceIds.has(graph.entry))
110
+ issue("unknown_entry", `entry ${graph.entry} does not exist`, ["entry"]);
111
+ if (graph.entries) {
112
+ for (const [name, target] of Object.entries(graph.entries)) {
113
+ if (!resourceIds.has(target))
114
+ issue("unknown_entry_alias", `entry ${name} targets unknown resource ${target}`, ["entries", name]);
115
+ }
116
+ }
117
+ for (const [id, resource] of Object.entries(resources)) {
118
+ if (!resource || typeof resource !== "object" || Array.isArray(resource)) {
119
+ issue("invalid_resource", `resource ${id} must be an object`, ["resources", id]);
120
+ continue;
121
+ }
122
+ if (!resource.type || typeof resource.type !== "string") {
123
+ issue("missing_resource_type", `resource ${id} missing type`, ["resources", id, "type"]);
124
+ }
125
+ if (resource.inputs !== undefined && !Array.isArray(resource.inputs) && (typeof resource.inputs !== "object" || resource.inputs === null)) {
126
+ issue("invalid_resource_inputs", `resource ${id} inputs must be an array or object`, ["resources", id, "inputs"]);
127
+ }
128
+ for (const from of dependencyValues(resource.inputs)) {
129
+ if (from === id)
130
+ issue("self_dependency", `resource ${id} depends on itself`, ["resources", id, "inputs"]);
131
+ if (!resourceIds.has(from))
132
+ issue("unknown_resource_input", `resource ${id} depends on unknown resource ${from}`, ["resources", id, "inputs"]);
133
+ }
134
+ if (resource.type === "input") {
135
+ if (!resource.from)
136
+ issue("missing_input_from", `input resource ${id} missing from`, ["resources", id, "from"]);
137
+ else if (!publicInputIds.has(resource.from))
138
+ issue("unknown_input_from", `input resource ${id} references unknown graph input ${resource.from}`, ["resources", id, "from"]);
139
+ }
140
+ if (resource.type === "run" && !resource.graph) {
141
+ issue("missing_run_graph", `run resource ${id} missing graph`, ["resources", id, "graph"]);
142
+ }
143
+ const valueSources = [resource.value !== undefined, resource.path !== undefined, resource.uri !== undefined].filter(Boolean).length;
144
+ if ((resource.type === "text" || resource.type === "data") && valueSources > 1) {
145
+ issue("ambiguous_value_source", `resource ${id} must not combine value, path, and uri`, ["resources", id]);
146
+ }
147
+ }
148
+ for (const [name, output] of Object.entries(graph.outputs ?? {})) {
149
+ if (!output || typeof output !== "object" || Array.isArray(output) || typeof output.from !== "string" || !output.from) {
150
+ issue("invalid_output", `output ${name} must have from`, ["outputs", name]);
151
+ continue;
152
+ }
153
+ const root = output.from.split(".")[0];
154
+ if (!resourceIds.has(root))
155
+ issue("unknown_output_source", `output ${name} references unknown resource ${root}`, ["outputs", name, "from"]);
156
+ }
157
+ for (const cycle of findCycles(resources))
158
+ issue("cycle", `resource dependency cycle: ${cycle.join(" -> ")}`, ["resources"]);
159
+ return { ok: issues.length === 0, issues };
160
+ }
161
+ export function dependencyValues(inputs) {
162
+ if (!inputs)
163
+ return [];
164
+ return Array.isArray(inputs) ? inputs : Object.values(inputs);
165
+ }
166
+ function findCycles(resources) {
167
+ const cycles = [];
168
+ const visiting = new Set();
169
+ const visited = new Set();
170
+ const stack = [];
171
+ const visit = (id) => {
172
+ if (visited.has(id))
173
+ return;
174
+ if (visiting.has(id)) {
175
+ const start = stack.indexOf(id);
176
+ cycles.push([...stack.slice(start), id]);
177
+ return;
178
+ }
179
+ visiting.add(id);
180
+ stack.push(id);
181
+ for (const dep of dependencyValues(resources[id]?.inputs)) {
182
+ if (resources[dep])
183
+ visit(dep);
184
+ }
185
+ stack.pop();
186
+ visiting.delete(id);
187
+ visited.add(id);
188
+ };
189
+ for (const id of Object.keys(resources))
190
+ visit(id);
191
+ return cycles;
192
+ }
193
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAc,CAAC;AAiFrD,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,KAAa;IACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,YAAY,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACvC,OAAO,KAAuB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAqB;IAC5D,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAqB,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,CAAC;IACb,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAqB,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK;IACnF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QACnD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,IAAI,KAAK;QAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAqB;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG;QACZ,GAAG,KAAK,CAAC,KAAK,IAAI,iBAAiB,EAAE;QACrC,YAAY,KAAK,CAAC,SAAS,EAAE;QAC7B,cAAc,SAAS,CAAC,MAAM,EAAE;QAChC,UAAU,KAAK,CAAC,KAAK,IAAI,QAAQ,EAAE;KACpC,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxH,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpH,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,IAA4B,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpH,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,eAAe,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,KAAK,GAAG,KAAiD,CAAC;IAEhE,IAAI,KAAK,CAAC,SAAS,KAAK,sBAAsB,EAAE,CAAC;QAC/C,KAAK,CAAC,iBAAiB,EAAE,qBAAqB,sBAAsB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,OAAO,IAAI,KAAK;QAAE,KAAK,CAAC,iBAAiB,EAAE,qCAAqC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACjG,IAAI,OAAO,IAAI,KAAK;QAAE,KAAK,CAAC,iBAAiB,EAAE,qCAAqC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACjG,IAAI,MAAM,IAAI,KAAK;QAAE,KAAK,CAAC,gBAAgB,EAAE,gDAAgD,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACzG,IAAI,SAAS,IAAI,KAAK;QAAE,KAAK,CAAC,mBAAmB,EAAE,kEAAkE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9F,KAAK,CAAC,mBAAmB,EAAE,6BAA6B,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACzE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAA8C,CAAC;IACvE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAEhE,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,eAAe,EAAE,SAAS,KAAK,CAAC,KAAK,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3H,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,KAAK,CAAC,qBAAqB,EAAE,SAAS,IAAI,6BAA6B,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QACpI,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,KAAK,CAAC,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACjF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxD,KAAK,CAAC,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1I,KAAK,CAAC,yBAAyB,EAAE,YAAY,EAAE,oCAAoC,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,IAAI,IAAI,KAAK,EAAE;gBAAE,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3G,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,wBAAwB,EAAE,YAAY,EAAE,gCAAgC,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjJ,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,KAAK,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;iBAC3G,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,mCAAmC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9K,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC/C,KAAK,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACpI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC/E,KAAK,CAAC,wBAAwB,EAAE,YAAY,EAAE,wCAAwC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACtH,KAAK,CAAC,gBAAgB,EAAE,UAAU,IAAI,iBAAiB,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,uBAAuB,EAAE,UAAU,IAAI,gCAAgC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9I,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,OAAO,EAAE,8BAA8B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAE7H,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAqD;IACpF,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAAC,SAA4C;IAC9D,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YAC1D,IAAI,SAAS,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./graph";
2
- export * from "./yaml";
3
- export * from "./resolve";
1
+ export * from "./graph.js";
2
+ export * from "./resolve.js";
3
+ export * from "./yaml.js";