@manifesto-ai/core 2.6.0 → 2.7.1
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/README.md +4 -4
- package/dist/index.d.ts +1750 -19
- package/dist/index.js +18480 -36
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
- package/dist/__tests__/apply.test.d.ts +0 -2
- package/dist/__tests__/apply.test.d.ts.map +0 -1
- package/dist/__tests__/apply.test.js +0 -320
- package/dist/__tests__/apply.test.js.map +0 -1
- package/dist/__tests__/defaults.test.d.ts +0 -2
- package/dist/__tests__/defaults.test.d.ts.map +0 -1
- package/dist/__tests__/defaults.test.js +0 -74
- package/dist/__tests__/defaults.test.js.map +0 -1
- package/dist/__tests__/jcs.test.d.ts +0 -2
- package/dist/__tests__/jcs.test.d.ts.map +0 -1
- package/dist/__tests__/jcs.test.js +0 -45
- package/dist/__tests__/jcs.test.js.map +0 -1
- package/dist/core/apply.d.ts +0 -17
- package/dist/core/apply.d.ts.map +0 -1
- package/dist/core/apply.js +0 -198
- package/dist/core/apply.js.map +0 -1
- package/dist/core/compute.d.ts +0 -17
- package/dist/core/compute.d.ts.map +0 -1
- package/dist/core/compute.js +0 -305
- package/dist/core/compute.js.map +0 -1
- package/dist/core/compute.test.d.ts +0 -2
- package/dist/core/compute.test.d.ts.map +0 -1
- package/dist/core/compute.test.js +0 -950
- package/dist/core/compute.test.js.map +0 -1
- package/dist/core/explain.d.ts +0 -14
- package/dist/core/explain.d.ts.map +0 -1
- package/dist/core/explain.js +0 -78
- package/dist/core/explain.js.map +0 -1
- package/dist/core/index.d.ts +0 -5
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -5
- package/dist/core/index.js.map +0 -1
- package/dist/core/validate.d.ts +0 -16
- package/dist/core/validate.d.ts.map +0 -1
- package/dist/core/validate.js +0 -361
- package/dist/core/validate.js.map +0 -1
- package/dist/core/validate.test.d.ts +0 -2
- package/dist/core/validate.test.d.ts.map +0 -1
- package/dist/core/validate.test.js +0 -719
- package/dist/core/validate.test.js.map +0 -1
- package/dist/core/validation-utils.d.ts +0 -20
- package/dist/core/validation-utils.d.ts.map +0 -1
- package/dist/core/validation-utils.js +0 -351
- package/dist/core/validation-utils.js.map +0 -1
- package/dist/errors.d.ts +0 -30
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -51
- package/dist/errors.js.map +0 -1
- package/dist/evaluator/computed.d.ts +0 -14
- package/dist/evaluator/computed.d.ts.map +0 -1
- package/dist/evaluator/computed.js +0 -60
- package/dist/evaluator/computed.js.map +0 -1
- package/dist/evaluator/context.d.ts +0 -62
- package/dist/evaluator/context.d.ts.map +0 -1
- package/dist/evaluator/context.js +0 -44
- package/dist/evaluator/context.js.map +0 -1
- package/dist/evaluator/dag.d.ts +0 -30
- package/dist/evaluator/dag.d.ts.map +0 -1
- package/dist/evaluator/dag.js +0 -121
- package/dist/evaluator/dag.js.map +0 -1
- package/dist/evaluator/expr.d.ts +0 -11
- package/dist/evaluator/expr.d.ts.map +0 -1
- package/dist/evaluator/expr.js +0 -1030
- package/dist/evaluator/expr.js.map +0 -1
- package/dist/evaluator/expr.test.d.ts +0 -2
- package/dist/evaluator/expr.test.d.ts.map +0 -1
- package/dist/evaluator/expr.test.js +0 -1235
- package/dist/evaluator/expr.test.js.map +0 -1
- package/dist/evaluator/flow.d.ts +0 -36
- package/dist/evaluator/flow.d.ts.map +0 -1
- package/dist/evaluator/flow.js +0 -390
- package/dist/evaluator/flow.js.map +0 -1
- package/dist/evaluator/flow.test.d.ts +0 -2
- package/dist/evaluator/flow.test.d.ts.map +0 -1
- package/dist/evaluator/flow.test.js +0 -499
- package/dist/evaluator/flow.test.js.map +0 -1
- package/dist/evaluator/index.d.ts +0 -6
- package/dist/evaluator/index.d.ts.map +0 -1
- package/dist/evaluator/index.js +0 -6
- package/dist/evaluator/index.js.map +0 -1
- package/dist/factories.d.ts +0 -22
- package/dist/factories.d.ts.map +0 -1
- package/dist/factories.js +0 -44
- package/dist/factories.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -14
- package/dist/index.test.js.map +0 -1
- package/dist/schema/action.d.ts +0 -14
- package/dist/schema/action.d.ts.map +0 -1
- package/dist/schema/action.js +0 -30
- package/dist/schema/action.js.map +0 -1
- package/dist/schema/common.d.ts +0 -37
- package/dist/schema/common.d.ts.map +0 -1
- package/dist/schema/common.js +0 -20
- package/dist/schema/common.js.map +0 -1
- package/dist/schema/computed.d.ts +0 -23
- package/dist/schema/computed.d.ts.map +0 -1
- package/dist/schema/computed.js +0 -34
- package/dist/schema/computed.js.map +0 -1
- package/dist/schema/defaults.d.ts +0 -12
- package/dist/schema/defaults.d.ts.map +0 -1
- package/dist/schema/defaults.js +0 -19
- package/dist/schema/defaults.js.map +0 -1
- package/dist/schema/domain.d.ts +0 -50
- package/dist/schema/domain.d.ts.map +0 -1
- package/dist/schema/domain.js +0 -60
- package/dist/schema/domain.js.map +0 -1
- package/dist/schema/expr.d.ts +0 -483
- package/dist/schema/expr.d.ts.map +0 -1
- package/dist/schema/expr.js +0 -445
- package/dist/schema/expr.js.map +0 -1
- package/dist/schema/field.d.ts +0 -48
- package/dist/schema/field.d.ts.map +0 -1
- package/dist/schema/field.js +0 -31
- package/dist/schema/field.js.map +0 -1
- package/dist/schema/flow.d.ts +0 -103
- package/dist/schema/flow.d.ts.map +0 -1
- package/dist/schema/flow.js +0 -82
- package/dist/schema/flow.js.map +0 -1
- package/dist/schema/host-context.d.ts +0 -12
- package/dist/schema/host-context.d.ts.map +0 -1
- package/dist/schema/host-context.js +0 -23
- package/dist/schema/host-context.js.map +0 -1
- package/dist/schema/index.d.ts +0 -15
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -28
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/patch.d.ts +0 -59
- package/dist/schema/patch.d.ts.map +0 -1
- package/dist/schema/patch.js +0 -60
- package/dist/schema/patch.js.map +0 -1
- package/dist/schema/result.d.ts +0 -142
- package/dist/schema/result.d.ts.map +0 -1
- package/dist/schema/result.js +0 -94
- package/dist/schema/result.js.map +0 -1
- package/dist/schema/snapshot.d.ts +0 -153
- package/dist/schema/snapshot.d.ts.map +0 -1
- package/dist/schema/snapshot.js +0 -160
- package/dist/schema/snapshot.js.map +0 -1
- package/dist/schema/trace.d.ts +0 -98
- package/dist/schema/trace.d.ts.map +0 -1
- package/dist/schema/trace.js +0 -90
- package/dist/schema/trace.js.map +0 -1
- package/dist/schema/type-spec.d.ts +0 -34
- package/dist/schema/type-spec.d.ts.map +0 -1
- package/dist/schema/type-spec.js +0 -40
- package/dist/schema/type-spec.js.map +0 -1
- package/dist/utils/canonical.d.ts +0 -37
- package/dist/utils/canonical.d.ts.map +0 -1
- package/dist/utils/canonical.js +0 -122
- package/dist/utils/canonical.js.map +0 -1
- package/dist/utils/canonical.test.d.ts +0 -2
- package/dist/utils/canonical.test.d.ts.map +0 -1
- package/dist/utils/canonical.test.js +0 -183
- package/dist/utils/canonical.test.js.map +0 -1
- package/dist/utils/hash.d.ts +0 -55
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/hash.js +0 -183
- package/dist/utils/hash.js.map +0 -1
- package/dist/utils/hash.test.d.ts +0 -2
- package/dist/utils/hash.test.d.ts.map +0 -1
- package/dist/utils/hash.test.js +0 -253
- package/dist/utils/hash.test.js.map +0 -1
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -4
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/path.d.ts +0 -42
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js +0 -170
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/path.test.d.ts +0 -2
- package/dist/utils/path.test.d.ts.map +0 -1
- package/dist/utils/path.test.js +0 -248
- package/dist/utils/path.test.js.map +0 -1
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { Snapshot } from "../schema/snapshot.js";
|
|
2
|
-
import type { DomainSchema } from "../schema/domain.js";
|
|
3
|
-
import { type TraceContext } from "../schema/trace.js";
|
|
4
|
-
/**
|
|
5
|
-
* Evaluation context for expressions and flows
|
|
6
|
-
*/
|
|
7
|
-
export type EvalContext = {
|
|
8
|
-
/**
|
|
9
|
-
* Current snapshot state
|
|
10
|
-
*/
|
|
11
|
-
readonly snapshot: Snapshot;
|
|
12
|
-
/**
|
|
13
|
-
* Domain schema
|
|
14
|
-
*/
|
|
15
|
-
readonly schema: DomainSchema;
|
|
16
|
-
/**
|
|
17
|
-
* Current action being processed (if any)
|
|
18
|
-
*/
|
|
19
|
-
readonly currentAction: string | null;
|
|
20
|
-
/**
|
|
21
|
-
* Current node path in the flow (for tracing)
|
|
22
|
-
*/
|
|
23
|
-
readonly nodePath: string;
|
|
24
|
-
/**
|
|
25
|
-
* Intent ID for the current intent (for re-entry safety)
|
|
26
|
-
*/
|
|
27
|
-
readonly intentId?: string;
|
|
28
|
-
/**
|
|
29
|
-
* UUID generator counter (for deterministic UUID generation)
|
|
30
|
-
*/
|
|
31
|
-
uuidCounter?: number;
|
|
32
|
-
/**
|
|
33
|
-
* Trace context for deterministic trace ID generation
|
|
34
|
-
*/
|
|
35
|
-
readonly trace: TraceContext;
|
|
36
|
-
/**
|
|
37
|
-
* Collection context variables (for filter, map, find, etc.)
|
|
38
|
-
*/
|
|
39
|
-
readonly $item?: unknown;
|
|
40
|
-
readonly $index?: number;
|
|
41
|
-
readonly $array?: unknown[];
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Create a new evaluation context
|
|
45
|
-
*
|
|
46
|
-
* @param timestampOrTrace - Required timestamp or TraceContext for deterministic tracing.
|
|
47
|
-
* MUST be provided by Host via HostContext.now to ensure determinism.
|
|
48
|
-
*/
|
|
49
|
-
export declare function createContext(snapshot: Snapshot, schema: DomainSchema, currentAction: string | null, nodePath: string, intentId: string | undefined, timestampOrTrace: number | TraceContext): EvalContext;
|
|
50
|
-
/**
|
|
51
|
-
* Create context with collection variables for filter/map/find/etc.
|
|
52
|
-
*/
|
|
53
|
-
export declare function withCollectionContext(ctx: EvalContext, item: unknown, index: number, array: unknown[]): EvalContext;
|
|
54
|
-
/**
|
|
55
|
-
* Update context with new snapshot
|
|
56
|
-
*/
|
|
57
|
-
export declare function withSnapshot(ctx: EvalContext, snapshot: Snapshot): EvalContext;
|
|
58
|
-
/**
|
|
59
|
-
* Update context with new node path
|
|
60
|
-
*/
|
|
61
|
-
export declare function withNodePath(ctx: EvalContext, nodePath: string): EvalContext;
|
|
62
|
-
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/evaluator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,gBAAgB,EAAE,MAAM,GAAG,YAAY,GACtC,WAAW,CAYb;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EAAE,GACf,WAAW,CAOb;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAE9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAE5E"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { createTraceContext } from "../schema/trace.js";
|
|
2
|
-
/**
|
|
3
|
-
* Create a new evaluation context
|
|
4
|
-
*
|
|
5
|
-
* @param timestampOrTrace - Required timestamp or TraceContext for deterministic tracing.
|
|
6
|
-
* MUST be provided by Host via HostContext.now to ensure determinism.
|
|
7
|
-
*/
|
|
8
|
-
export function createContext(snapshot, schema, currentAction, nodePath, intentId, timestampOrTrace) {
|
|
9
|
-
return {
|
|
10
|
-
snapshot,
|
|
11
|
-
schema,
|
|
12
|
-
currentAction,
|
|
13
|
-
nodePath,
|
|
14
|
-
intentId,
|
|
15
|
-
uuidCounter: 0,
|
|
16
|
-
trace: typeof timestampOrTrace === "object"
|
|
17
|
-
? timestampOrTrace
|
|
18
|
-
: createTraceContext(timestampOrTrace),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Create context with collection variables for filter/map/find/etc.
|
|
23
|
-
*/
|
|
24
|
-
export function withCollectionContext(ctx, item, index, array) {
|
|
25
|
-
return {
|
|
26
|
-
...ctx,
|
|
27
|
-
$item: item,
|
|
28
|
-
$index: index,
|
|
29
|
-
$array: array,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Update context with new snapshot
|
|
34
|
-
*/
|
|
35
|
-
export function withSnapshot(ctx, snapshot) {
|
|
36
|
-
return { ...ctx, snapshot };
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Update context with new node path
|
|
40
|
-
*/
|
|
41
|
-
export function withNodePath(ctx, nodePath) {
|
|
42
|
-
return { ...ctx, nodePath };
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/evaluator/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAiD3E;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAkB,EAClB,MAAoB,EACpB,aAA4B,EAC5B,QAAgB,EAChB,QAA4B,EAC5B,gBAAuC;IAEvC,OAAO;QACL,QAAQ;QACR,MAAM;QACN,aAAa;QACb,QAAQ;QACR,QAAQ;QACR,WAAW,EAAE,CAAC;QACd,KAAK,EAAE,OAAO,gBAAgB,KAAK,QAAQ;YACzC,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAgB,EAChB,IAAa,EACb,KAAa,EACb,KAAgB;IAEhB,OAAO;QACL,GAAG,GAAG;QACN,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAgB,EAAE,QAAkB;IAC/D,OAAO,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAgB,EAAE,QAAgB;IAC7D,OAAO,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
|
package/dist/evaluator/dag.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { ComputedSpec } from "../schema/computed.js";
|
|
2
|
-
import type { SemanticPath } from "../schema/common.js";
|
|
3
|
-
import type { Result } from "../schema/common.js";
|
|
4
|
-
import type { ValidationError } from "../schema/result.js";
|
|
5
|
-
/**
|
|
6
|
-
* Dependency graph for computed values
|
|
7
|
-
*/
|
|
8
|
-
export type DependencyGraph = {
|
|
9
|
-
readonly nodes: readonly SemanticPath[];
|
|
10
|
-
readonly edges: ReadonlyMap<SemanticPath, readonly SemanticPath[]>;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Build a dependency graph from ComputedSpec
|
|
14
|
-
*/
|
|
15
|
-
export declare function buildDependencyGraph(computed: ComputedSpec): DependencyGraph;
|
|
16
|
-
/**
|
|
17
|
-
* Topological sort using Kahn's algorithm
|
|
18
|
-
* Returns sorted order or error if cycles detected
|
|
19
|
-
*/
|
|
20
|
-
export declare function topologicalSort(graph: DependencyGraph): Result<SemanticPath[], ValidationError>;
|
|
21
|
-
/**
|
|
22
|
-
* Detect cycles in the dependency graph
|
|
23
|
-
* Returns array of cycle paths or null if no cycles
|
|
24
|
-
*/
|
|
25
|
-
export declare function detectCycles(graph: DependencyGraph): SemanticPath[][] | null;
|
|
26
|
-
/**
|
|
27
|
-
* Get all dependencies (transitive) for a given node
|
|
28
|
-
*/
|
|
29
|
-
export declare function getTransitiveDeps(graph: DependencyGraph, node: SemanticPath): Set<SemanticPath>;
|
|
30
|
-
//# sourceMappingURL=dag.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../src/evaluator/dag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;CACpE,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,CAW5E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAuD/F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,EAAE,EAAE,GAAG,IAAI,CAqC5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,YAAY,GACjB,GAAG,CAAC,YAAY,CAAC,CAanB"}
|
package/dist/evaluator/dag.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { ok, err } from "../schema/common.js";
|
|
2
|
-
/**
|
|
3
|
-
* Build a dependency graph from ComputedSpec
|
|
4
|
-
*/
|
|
5
|
-
export function buildDependencyGraph(computed) {
|
|
6
|
-
const nodes = Object.keys(computed.fields);
|
|
7
|
-
const edges = new Map();
|
|
8
|
-
for (const [path, spec] of Object.entries(computed.fields)) {
|
|
9
|
-
// Filter deps to only include other computed fields
|
|
10
|
-
const computedDeps = spec.deps.filter((dep) => dep in computed.fields);
|
|
11
|
-
edges.set(path, computedDeps);
|
|
12
|
-
}
|
|
13
|
-
return { nodes, edges };
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Topological sort using Kahn's algorithm
|
|
17
|
-
* Returns sorted order or error if cycles detected
|
|
18
|
-
*/
|
|
19
|
-
export function topologicalSort(graph) {
|
|
20
|
-
const inDegree = new Map();
|
|
21
|
-
const adjacency = new Map();
|
|
22
|
-
// Initialize in-degree and adjacency list
|
|
23
|
-
for (const node of graph.nodes) {
|
|
24
|
-
inDegree.set(node, 0);
|
|
25
|
-
adjacency.set(node, []);
|
|
26
|
-
}
|
|
27
|
-
// Build reverse edges (who depends on whom)
|
|
28
|
-
for (const [node, deps] of graph.edges) {
|
|
29
|
-
for (const dep of deps) {
|
|
30
|
-
if (adjacency.has(dep)) {
|
|
31
|
-
adjacency.get(dep).push(node);
|
|
32
|
-
}
|
|
33
|
-
inDegree.set(node, (inDegree.get(node) ?? 0) + 1);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// Find all nodes with no dependencies
|
|
37
|
-
const queue = [];
|
|
38
|
-
for (const [node, degree] of inDegree) {
|
|
39
|
-
if (degree === 0) {
|
|
40
|
-
queue.push(node);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const sorted = [];
|
|
44
|
-
while (queue.length > 0) {
|
|
45
|
-
const node = queue.shift();
|
|
46
|
-
sorted.push(node);
|
|
47
|
-
// Reduce in-degree of dependent nodes
|
|
48
|
-
for (const dependent of adjacency.get(node) ?? []) {
|
|
49
|
-
const newDegree = (inDegree.get(dependent) ?? 1) - 1;
|
|
50
|
-
inDegree.set(dependent, newDegree);
|
|
51
|
-
if (newDegree === 0) {
|
|
52
|
-
queue.push(dependent);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// If not all nodes are sorted, there's a cycle
|
|
57
|
-
if (sorted.length !== graph.nodes.length) {
|
|
58
|
-
const remaining = graph.nodes.filter((n) => !sorted.includes(n));
|
|
59
|
-
return err({
|
|
60
|
-
code: "V-002",
|
|
61
|
-
message: `Cyclic dependency detected in computed fields: ${remaining.join(", ")}`,
|
|
62
|
-
path: remaining[0],
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return ok(sorted);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Detect cycles in the dependency graph
|
|
69
|
-
* Returns array of cycle paths or null if no cycles
|
|
70
|
-
*/
|
|
71
|
-
export function detectCycles(graph) {
|
|
72
|
-
const visited = new Set();
|
|
73
|
-
const recursionStack = new Set();
|
|
74
|
-
const cycles = [];
|
|
75
|
-
function dfs(node, path) {
|
|
76
|
-
visited.add(node);
|
|
77
|
-
recursionStack.add(node);
|
|
78
|
-
const deps = graph.edges.get(node) ?? [];
|
|
79
|
-
for (const dep of deps) {
|
|
80
|
-
if (!visited.has(dep)) {
|
|
81
|
-
if (dfs(dep, [...path, dep])) {
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else if (recursionStack.has(dep)) {
|
|
86
|
-
// Found a cycle
|
|
87
|
-
const cycleStart = path.indexOf(dep);
|
|
88
|
-
if (cycleStart !== -1) {
|
|
89
|
-
cycles.push([...path.slice(cycleStart), dep]);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
cycles.push([...path, dep]);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
recursionStack.delete(node);
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
for (const node of graph.nodes) {
|
|
100
|
-
if (!visited.has(node)) {
|
|
101
|
-
dfs(node, [node]);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return cycles.length > 0 ? cycles : null;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Get all dependencies (transitive) for a given node
|
|
108
|
-
*/
|
|
109
|
-
export function getTransitiveDeps(graph, node) {
|
|
110
|
-
const deps = new Set();
|
|
111
|
-
const queue = [...(graph.edges.get(node) ?? [])];
|
|
112
|
-
while (queue.length > 0) {
|
|
113
|
-
const dep = queue.shift();
|
|
114
|
-
if (!deps.has(dep)) {
|
|
115
|
-
deps.add(dep);
|
|
116
|
-
queue.push(...(graph.edges.get(dep) ?? []));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return deps;
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=dag.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/evaluator/dag.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAU9C;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEtD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,oDAAoD;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE1D,0CAA0C;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,4CAA4C;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElB,sCAAsC;QACtC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACrD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACnC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,GAAG,CAAC;YACT,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,kDAAkD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACjF,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC/C,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,SAAS,GAAG,CAAC,IAAkB,EAAE,IAAoB;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEzB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,gBAAgB;gBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,IAAkB;IAElB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/evaluator/expr.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ExprNode } from "../schema/expr.js";
|
|
2
|
-
import type { ErrorValue } from "../schema/snapshot.js";
|
|
3
|
-
import type { Result } from "../schema/common.js";
|
|
4
|
-
import { type EvalContext } from "./context.js";
|
|
5
|
-
export type ExprResult = Result<unknown, ErrorValue>;
|
|
6
|
-
/**
|
|
7
|
-
* Evaluate an expression node
|
|
8
|
-
* All expressions are pure and total (always return a value or error)
|
|
9
|
-
*/
|
|
10
|
-
export declare function evaluateExpr(expr: ExprNode, ctx: EvalContext): ExprResult;
|
|
11
|
-
//# sourceMappingURL=expr.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expr.d.ts","sourceRoot":"","sources":["../../src/evaluator/expr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,cAAc,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAErD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CAgLzE"}
|