@chronon-sim/engine 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 +202 -0
- package/README.md +19 -0
- package/dist/components/autoscaler.d.ts +47 -0
- package/dist/components/autoscaler.d.ts.map +1 -0
- package/dist/components/autoscaler.js +116 -0
- package/dist/components/autoscaler.js.map +1 -0
- package/dist/components/generator.d.ts +32 -0
- package/dist/components/generator.d.ts.map +1 -0
- package/dist/components/generator.js +124 -0
- package/dist/components/generator.js.map +1 -0
- package/dist/components/index.d.ts +14 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +11 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/message-queue.d.ts +45 -0
- package/dist/components/message-queue.d.ts.map +1 -0
- package/dist/components/message-queue.js +152 -0
- package/dist/components/message-queue.js.map +1 -0
- package/dist/components/pullable.d.ts +24 -0
- package/dist/components/pullable.d.ts.map +1 -0
- package/dist/components/pullable.js +2 -0
- package/dist/components/pullable.js.map +1 -0
- package/dist/components/queue.d.ts +32 -0
- package/dist/components/queue.d.ts.map +1 -0
- package/dist/components/queue.js +88 -0
- package/dist/components/queue.js.map +1 -0
- package/dist/components/rate-limiter.d.ts +24 -0
- package/dist/components/rate-limiter.d.ts.map +1 -0
- package/dist/components/rate-limiter.js +77 -0
- package/dist/components/rate-limiter.js.map +1 -0
- package/dist/components/registry.d.ts +19 -0
- package/dist/components/registry.d.ts.map +1 -0
- package/dist/components/registry.js +43 -0
- package/dist/components/registry.js.map +1 -0
- package/dist/components/retry-policy.d.ts +41 -0
- package/dist/components/retry-policy.d.ts.map +1 -0
- package/dist/components/retry-policy.js +122 -0
- package/dist/components/retry-policy.js.map +1 -0
- package/dist/components/server.d.ts +26 -0
- package/dist/components/server.d.ts.map +1 -0
- package/dist/components/server.js +82 -0
- package/dist/components/server.js.map +1 -0
- package/dist/components/sink.d.ts +12 -0
- package/dist/components/sink.d.ts.map +1 -0
- package/dist/components/sink.js +35 -0
- package/dist/components/sink.js.map +1 -0
- package/dist/components/worker-pool.d.ts +68 -0
- package/dist/components/worker-pool.d.ts.map +1 -0
- package/dist/components/worker-pool.js +224 -0
- package/dist/components/worker-pool.js.map +1 -0
- package/dist/format/definition.d.ts +72 -0
- package/dist/format/definition.d.ts.map +1 -0
- package/dist/format/definition.js +17 -0
- package/dist/format/definition.js.map +1 -0
- package/dist/format/index.d.ts +5 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +3 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/loader.d.ts +19 -0
- package/dist/format/loader.d.ts.map +1 -0
- package/dist/format/loader.js +275 -0
- package/dist/format/loader.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/heap.d.ts +14 -0
- package/dist/kernel/heap.d.ts.map +1 -0
- package/dist/kernel/heap.js +55 -0
- package/dist/kernel/heap.js.map +1 -0
- package/dist/kernel/index.d.ts +3 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +2 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/kernel.d.ts +104 -0
- package/dist/kernel/kernel.d.ts.map +1 -0
- package/dist/kernel/kernel.js +236 -0
- package/dist/kernel/kernel.js.map +1 -0
- package/dist/model/entity.d.ts +78 -0
- package/dist/model/entity.d.ts.map +1 -0
- package/dist/model/entity.js +108 -0
- package/dist/model/entity.js.map +1 -0
- package/dist/model/fifo.d.ts +9 -0
- package/dist/model/fifo.d.ts.map +1 -0
- package/dist/model/fifo.js +24 -0
- package/dist/model/fifo.js.map +1 -0
- package/dist/model/index.d.ts +4 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +3 -0
- package/dist/model/index.js.map +1 -0
- package/dist/rng/distributions.d.ts +98 -0
- package/dist/rng/distributions.d.ts.map +1 -0
- package/dist/rng/distributions.js +224 -0
- package/dist/rng/distributions.js.map +1 -0
- package/dist/rng/index.d.ts +4 -0
- package/dist/rng/index.d.ts.map +1 -0
- package/dist/rng/index.js +3 -0
- package/dist/rng/index.js.map +1 -0
- package/dist/rng/rng.d.ts +26 -0
- package/dist/rng/rng.d.ts.map +1 -0
- package/dist/rng/rng.js +101 -0
- package/dist/rng/rng.js.map +1 -0
- package/dist/run/assertions.d.ts +9 -0
- package/dist/run/assertions.d.ts.map +1 -0
- package/dist/run/assertions.js +57 -0
- package/dist/run/assertions.js.map +1 -0
- package/dist/run/index.d.ts +6 -0
- package/dist/run/index.d.ts.map +1 -0
- package/dist/run/index.js +4 -0
- package/dist/run/index.js.map +1 -0
- package/dist/run/results.d.ts +72 -0
- package/dist/run/results.d.ts.map +1 -0
- package/dist/run/results.js +2 -0
- package/dist/run/results.js.map +1 -0
- package/dist/run/run.d.ts +29 -0
- package/dist/run/run.d.ts.map +1 -0
- package/dist/run/run.js +80 -0
- package/dist/run/run.js.map +1 -0
- package/dist/run/simulation.d.ts +34 -0
- package/dist/run/simulation.d.ts.map +1 -0
- package/dist/run/simulation.js +104 -0
- package/dist/run/simulation.js.map +1 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +3 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/types.d.ts +83 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +19 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/validate.d.ts +19 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +120 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/stats/index.d.ts +6 -0
- package/dist/stats/index.d.ts.map +1 -0
- package/dist/stats/index.js +4 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/percentile.d.ts +38 -0
- package/dist/stats/percentile.d.ts.map +1 -0
- package/dist/stats/percentile.js +62 -0
- package/dist/stats/percentile.js.map +1 -0
- package/dist/stats/summary.d.ts +20 -0
- package/dist/stats/summary.d.ts.map +1 -0
- package/dist/stats/summary.js +38 -0
- package/dist/stats/summary.js.map +1 -0
- package/dist/stats/time-weighted.d.ts +31 -0
- package/dist/stats/time-weighted.d.ts.map +1 -0
- package/dist/stats/time-weighted.js +69 -0
- package/dist/stats/time-weighted.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types of the JSON model format (version 1). This is the stable contract between model
|
|
3
|
+
* authoring tools and engines; see docs/model-format.md. Nothing here is TypeScript-specific:
|
|
4
|
+
* every field is plain JSON.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MODEL_FORMAT_VERSION = 1;
|
|
7
|
+
/** Optional sampling of outputs over time (for backlog-over-time plots). */
|
|
8
|
+
export interface TimeSeriesConfig {
|
|
9
|
+
/** Sampling interval in seconds. */
|
|
10
|
+
interval: number;
|
|
11
|
+
/** Output ids of the form "<componentName>.<OutputKey>". */
|
|
12
|
+
outputs: string[];
|
|
13
|
+
}
|
|
14
|
+
/** Model-level settings, all times in seconds. */
|
|
15
|
+
export interface ModelSettings {
|
|
16
|
+
/** Total simulated duration in seconds, including warm-up. */
|
|
17
|
+
duration: number;
|
|
18
|
+
/** Statistics are reset at this time. Default 0. */
|
|
19
|
+
warmUp: number;
|
|
20
|
+
/** Base seed. Default 1. */
|
|
21
|
+
seed: number;
|
|
22
|
+
/** Number of independent replications. Default 1. */
|
|
23
|
+
replications: number;
|
|
24
|
+
/** Simulation resolution. Default 1,000,000 (microseconds). */
|
|
25
|
+
ticksPerSecond: number;
|
|
26
|
+
timeSeries?: TimeSeriesConfig;
|
|
27
|
+
}
|
|
28
|
+
/** One component instance. */
|
|
29
|
+
export interface ComponentDefinition {
|
|
30
|
+
type: string;
|
|
31
|
+
name: string;
|
|
32
|
+
inputs: Record<string, unknown>;
|
|
33
|
+
/** Link key -> target component name. */
|
|
34
|
+
links: Record<string, string>;
|
|
35
|
+
/** Optional RNG stream id; defaults to the component name. */
|
|
36
|
+
stream?: string;
|
|
37
|
+
}
|
|
38
|
+
/** Comparison operators an assertion can use. */
|
|
39
|
+
export declare const ASSERTION_OPS: readonly ["<", "<=", ">", ">=", "=="];
|
|
40
|
+
export type AssertionOp = (typeof ASSERTION_OPS)[number];
|
|
41
|
+
/**
|
|
42
|
+
* Which number of an output an assertion compares.
|
|
43
|
+
* - `mean`: the mean across replications (default).
|
|
44
|
+
* - `ci95High` / `ci95Low`: the ends of the 95% confidence interval (needs 2+ replications); use
|
|
45
|
+
* `ci95High` with `<=` to demand a limit holds even at the pessimistic end of the estimate.
|
|
46
|
+
* - `min` / `max`: the smallest / largest value over replications (a worst-case gate).
|
|
47
|
+
*/
|
|
48
|
+
export declare const ASSERTION_STATISTICS: readonly ["mean", "ci95Low", "ci95High", "min", "max"];
|
|
49
|
+
export type AssertionStatistic = (typeof ASSERTION_STATISTICS)[number];
|
|
50
|
+
/** A capacity threshold checked after a run, e.g. "sink.p99 <= 2". */
|
|
51
|
+
export interface AssertionDefinition {
|
|
52
|
+
/** Output id "<componentName>.<OutputKey>". */
|
|
53
|
+
output: string;
|
|
54
|
+
op: AssertionOp;
|
|
55
|
+
/** Threshold, in the output's own unit (seconds, per-second, cost, count...). */
|
|
56
|
+
value: number;
|
|
57
|
+
/** Default "mean". */
|
|
58
|
+
statistic?: AssertionStatistic;
|
|
59
|
+
/** Optional human-readable label shown in reports. */
|
|
60
|
+
name?: string;
|
|
61
|
+
}
|
|
62
|
+
/** A validated model. */
|
|
63
|
+
export interface ModelDefinition {
|
|
64
|
+
version: number;
|
|
65
|
+
name?: string;
|
|
66
|
+
description?: string;
|
|
67
|
+
settings: ModelSettings;
|
|
68
|
+
components: ComponentDefinition[];
|
|
69
|
+
/** Thresholds checked after the run; the CLI exits non-zero if any fail. */
|
|
70
|
+
assertions?: AssertionDefinition[];
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/format/definition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,8BAA8B;AAC9B,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iDAAiD;AACjD,eAAO,MAAM,aAAa,uCAAwC,CAAC;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,wDAAyD,CAAC;AAC3F,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,WAAW,CAAC;IAChB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types of the JSON model format (version 1). This is the stable contract between model
|
|
3
|
+
* authoring tools and engines; see docs/model-format.md. Nothing here is TypeScript-specific:
|
|
4
|
+
* every field is plain JSON.
|
|
5
|
+
*/
|
|
6
|
+
export const MODEL_FORMAT_VERSION = 1;
|
|
7
|
+
/** Comparison operators an assertion can use. */
|
|
8
|
+
export const ASSERTION_OPS = ["<", "<=", ">", ">=", "=="];
|
|
9
|
+
/**
|
|
10
|
+
* Which number of an output an assertion compares.
|
|
11
|
+
* - `mean`: the mean across replications (default).
|
|
12
|
+
* - `ci95High` / `ci95Low`: the ends of the 95% confidence interval (needs 2+ replications); use
|
|
13
|
+
* `ci95High` with `<=` to demand a limit holds even at the pessimistic end of the estimate.
|
|
14
|
+
* - `min` / `max`: the smallest / largest value over replications (a worst-case gate).
|
|
15
|
+
*/
|
|
16
|
+
export const ASSERTION_STATISTICS = ["mean", "ci95Low", "ci95High", "min", "max"];
|
|
17
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/format/definition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAoCtC,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAGnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { loadModel, isKnownOutputId } from "./loader.js";
|
|
2
|
+
export type { LoadResult } from "./loader.js";
|
|
3
|
+
export { MODEL_FORMAT_VERSION, ASSERTION_OPS, ASSERTION_STATISTICS } from "./definition.js";
|
|
4
|
+
export type { ModelDefinition, ModelSettings, ComponentDefinition, TimeSeriesConfig, AssertionDefinition, AssertionOp, AssertionStatistic, } from "./definition.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,YAAY,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ComponentRegistry } from "../components/index.js";
|
|
2
|
+
import { type ValidationError } from "../schema/index.js";
|
|
3
|
+
import { type ComponentDefinition, type ModelDefinition } from "./definition.js";
|
|
4
|
+
/** Result of {@link loadModel}: either a validated model, or every validation error found. */
|
|
5
|
+
export type LoadResult = {
|
|
6
|
+
ok: true;
|
|
7
|
+
model: ModelDefinition;
|
|
8
|
+
} | {
|
|
9
|
+
ok: false;
|
|
10
|
+
errors: ValidationError[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Validate a parsed JSON model against the format and the component schemas.
|
|
14
|
+
* Never throws for bad input; returns all errors at once.
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadModel(json: unknown, registry?: ComponentRegistry): LoadResult;
|
|
17
|
+
/** True if `id` ("<component>.<OutputKey>") names an output of a component in `components`. */
|
|
18
|
+
export declare function isKnownOutputId(id: string, components: readonly ComponentDefinition[], registry?: ComponentRegistry): boolean;
|
|
19
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/format/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAC;AAEzB,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAY7C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAE,iBAA2C,GAAG,UAAU,CAuH1G;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,QAAQ,GAAE,iBAA2C,GACpD,OAAO,CAMT"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { createDefaultRegistry } from "../components/index.js";
|
|
2
|
+
import { validateInputs } from "../schema/index.js";
|
|
3
|
+
import { ASSERTION_OPS, ASSERTION_STATISTICS, MODEL_FORMAT_VERSION, } from "./definition.js";
|
|
4
|
+
const SETTINGS_KEYS = ["duration", "warmUp", "seed", "replications", "ticksPerSecond", "timeSeries"];
|
|
5
|
+
const TOP_KEYS = ["version", "name", "description", "settings", "components", "assertions"];
|
|
6
|
+
const ASSERTION_KEYS = ["output", "op", "value", "statistic", "name"];
|
|
7
|
+
const COMPONENT_KEYS = ["type", "name", "inputs", "links", "stream"];
|
|
8
|
+
function isRecord(v) {
|
|
9
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
10
|
+
}
|
|
11
|
+
const finite = (v) => typeof v === "number" && Number.isFinite(v);
|
|
12
|
+
/**
|
|
13
|
+
* Validate a parsed JSON model against the format and the component schemas.
|
|
14
|
+
* Never throws for bad input; returns all errors at once.
|
|
15
|
+
*/
|
|
16
|
+
export function loadModel(json, registry = createDefaultRegistry()) {
|
|
17
|
+
const errors = [];
|
|
18
|
+
const modelErr = (key, message) => errors.push({ component: null, key, message });
|
|
19
|
+
if (!isRecord(json)) {
|
|
20
|
+
modelErr(null, "model must be a JSON object");
|
|
21
|
+
return { ok: false, errors };
|
|
22
|
+
}
|
|
23
|
+
for (const k of Object.keys(json))
|
|
24
|
+
if (!TOP_KEYS.includes(k))
|
|
25
|
+
modelErr(k, "unknown top-level field");
|
|
26
|
+
if (json["version"] !== MODEL_FORMAT_VERSION) {
|
|
27
|
+
modelErr("version", `unsupported or missing version (expected ${MODEL_FORMAT_VERSION}, got ${JSON.stringify(json["version"])})`);
|
|
28
|
+
}
|
|
29
|
+
for (const k of ["name", "description"]) {
|
|
30
|
+
if (json[k] !== undefined && typeof json[k] !== "string")
|
|
31
|
+
modelErr(k, "must be a string");
|
|
32
|
+
}
|
|
33
|
+
const settings = loadSettings(json["settings"], modelErr);
|
|
34
|
+
const components = [];
|
|
35
|
+
const rawComponents = json["components"];
|
|
36
|
+
if (!Array.isArray(rawComponents)) {
|
|
37
|
+
modelErr("components", "must be an array of components");
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const byName = new Map();
|
|
41
|
+
const rawLinks = [];
|
|
42
|
+
rawComponents.forEach((raw, idx) => {
|
|
43
|
+
const label = isRecord(raw) && typeof raw["name"] === "string" ? raw["name"] : `components[${idx}]`;
|
|
44
|
+
const cerr = (key, message) => errors.push({ component: label, key, message });
|
|
45
|
+
if (!isRecord(raw))
|
|
46
|
+
return cerr(null, "component must be an object");
|
|
47
|
+
for (const k of Object.keys(raw))
|
|
48
|
+
if (!COMPONENT_KEYS.includes(k))
|
|
49
|
+
cerr(k, "unknown component field");
|
|
50
|
+
const name = raw["name"];
|
|
51
|
+
const type = raw["type"];
|
|
52
|
+
let ok = true;
|
|
53
|
+
if (typeof name !== "string" || name.trim() === "") {
|
|
54
|
+
cerr("name", "must be a non-empty string");
|
|
55
|
+
ok = false;
|
|
56
|
+
}
|
|
57
|
+
else if (byName.has(name)) {
|
|
58
|
+
cerr("name", "duplicate component name");
|
|
59
|
+
ok = false;
|
|
60
|
+
}
|
|
61
|
+
if (typeof type !== "string") {
|
|
62
|
+
cerr("type", "must be a string");
|
|
63
|
+
ok = false;
|
|
64
|
+
}
|
|
65
|
+
if (raw["stream"] !== undefined && typeof raw["stream"] !== "string")
|
|
66
|
+
cerr("stream", "must be a string");
|
|
67
|
+
if (!ok)
|
|
68
|
+
return;
|
|
69
|
+
const cls = registry.get(type);
|
|
70
|
+
if (!cls) {
|
|
71
|
+
return cerr("type", `unknown component type "${type}" (known: ${registry.types().join(", ")})`);
|
|
72
|
+
}
|
|
73
|
+
const v = validateInputs(cls.schema, raw["inputs"], name);
|
|
74
|
+
errors.push(...v.errors);
|
|
75
|
+
const def = {
|
|
76
|
+
type: type,
|
|
77
|
+
name: name,
|
|
78
|
+
inputs: v.values,
|
|
79
|
+
links: {},
|
|
80
|
+
...(typeof raw["stream"] === "string" ? { stream: raw["stream"] } : {}),
|
|
81
|
+
};
|
|
82
|
+
byName.set(def.name, def);
|
|
83
|
+
components.push(def);
|
|
84
|
+
rawLinks.push({ def, raw });
|
|
85
|
+
});
|
|
86
|
+
// Links are resolved after all names are known.
|
|
87
|
+
for (const { def, raw } of rawLinks) {
|
|
88
|
+
const schema = registry.get(def.type).schema;
|
|
89
|
+
const lerr = (key, message) => errors.push({ component: def.name, key, message });
|
|
90
|
+
const links = raw["links"];
|
|
91
|
+
if (links !== undefined && !isRecord(links)) {
|
|
92
|
+
lerr("links", "must be an object mapping link keys to component names");
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const given = (links ?? {});
|
|
96
|
+
for (const k of Object.keys(given)) {
|
|
97
|
+
if (!schema.links.some((l) => l.key === k))
|
|
98
|
+
lerr(k, `unknown link for ${schema.type}`);
|
|
99
|
+
}
|
|
100
|
+
for (const spec of schema.links) {
|
|
101
|
+
const target = given[spec.key];
|
|
102
|
+
if (target === undefined || target === null) {
|
|
103
|
+
if (spec.required)
|
|
104
|
+
lerr(spec.key, "required link is missing");
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (typeof target !== "string") {
|
|
108
|
+
lerr(spec.key, "must be a component name");
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const targetDef = byName.get(target);
|
|
112
|
+
if (!targetDef) {
|
|
113
|
+
lerr(spec.key, `no component named "${target}"`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const targetSchema = registry.get(targetDef.type).schema;
|
|
117
|
+
if (!targetSchema.roles.includes(spec.accepts)) {
|
|
118
|
+
lerr(spec.key, `"${target}" is a ${targetDef.type}, which cannot be used here (needs a component with role "${spec.accepts}")`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
def.links[spec.key] = target;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (settings?.timeSeries) {
|
|
125
|
+
validateTimeSeriesOutputs(settings.timeSeries, byName, registry, modelErr);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const assertions = loadAssertions(json["assertions"], components, registry, modelErr);
|
|
129
|
+
if (errors.length > 0 || settings === null)
|
|
130
|
+
return { ok: false, errors };
|
|
131
|
+
const model = {
|
|
132
|
+
version: MODEL_FORMAT_VERSION,
|
|
133
|
+
...(typeof json["name"] === "string" ? { name: json["name"] } : {}),
|
|
134
|
+
...(typeof json["description"] === "string" ? { description: json["description"] } : {}),
|
|
135
|
+
settings,
|
|
136
|
+
components,
|
|
137
|
+
...(assertions.length > 0 ? { assertions } : {}),
|
|
138
|
+
};
|
|
139
|
+
return { ok: true, model };
|
|
140
|
+
}
|
|
141
|
+
/** True if `id` ("<component>.<OutputKey>") names an output of a component in `components`. */
|
|
142
|
+
export function isKnownOutputId(id, components, registry = createDefaultRegistry()) {
|
|
143
|
+
const dot = id.lastIndexOf(".");
|
|
144
|
+
if (dot <= 0)
|
|
145
|
+
return false;
|
|
146
|
+
const comp = components.find((c) => c.name === id.slice(0, dot));
|
|
147
|
+
const schema = comp ? registry.get(comp.type)?.schema : undefined;
|
|
148
|
+
return schema?.outputs.some((o) => o.key === id.slice(dot + 1)) ?? false;
|
|
149
|
+
}
|
|
150
|
+
function loadAssertions(raw, components, registry, err) {
|
|
151
|
+
if (raw === undefined)
|
|
152
|
+
return [];
|
|
153
|
+
if (!Array.isArray(raw)) {
|
|
154
|
+
err("assertions", "must be an array of {output, op, value} objects");
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
const result = [];
|
|
158
|
+
raw.forEach((a, i) => {
|
|
159
|
+
const at = (field) => `assertions[${i}]${field ? "." + field : ""}`;
|
|
160
|
+
if (!isRecord(a))
|
|
161
|
+
return err(at(""), "must be an object {output, op, value}");
|
|
162
|
+
for (const k of Object.keys(a))
|
|
163
|
+
if (!ASSERTION_KEYS.includes(k))
|
|
164
|
+
err(at(k), "unknown field");
|
|
165
|
+
let ok = true;
|
|
166
|
+
if (typeof a["output"] !== "string" || !isKnownOutputId(a["output"], components, registry)) {
|
|
167
|
+
err(at("output"), `unknown output ${JSON.stringify(a["output"])} (expected "<componentName>.<OutputKey>")`);
|
|
168
|
+
ok = false;
|
|
169
|
+
}
|
|
170
|
+
if (!ASSERTION_OPS.includes(a["op"])) {
|
|
171
|
+
err(at("op"), `must be one of ${ASSERTION_OPS.join(", ")}`);
|
|
172
|
+
ok = false;
|
|
173
|
+
}
|
|
174
|
+
if (!finite(a["value"])) {
|
|
175
|
+
err(at("value"), "must be a finite number");
|
|
176
|
+
ok = false;
|
|
177
|
+
}
|
|
178
|
+
if (a["statistic"] !== undefined && !ASSERTION_STATISTICS.includes(a["statistic"])) {
|
|
179
|
+
err(at("statistic"), `must be one of ${ASSERTION_STATISTICS.join(", ")}`);
|
|
180
|
+
ok = false;
|
|
181
|
+
}
|
|
182
|
+
if (a["name"] !== undefined && typeof a["name"] !== "string") {
|
|
183
|
+
err(at("name"), "must be a string");
|
|
184
|
+
ok = false;
|
|
185
|
+
}
|
|
186
|
+
if (!ok)
|
|
187
|
+
return;
|
|
188
|
+
result.push({
|
|
189
|
+
output: a["output"],
|
|
190
|
+
op: a["op"],
|
|
191
|
+
value: a["value"],
|
|
192
|
+
...(a["statistic"] !== undefined ? { statistic: a["statistic"] } : {}),
|
|
193
|
+
...(typeof a["name"] === "string" ? { name: a["name"] } : {}),
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
function validateTimeSeriesOutputs(ts, byName, registry, modelErr) {
|
|
199
|
+
for (const id of ts.outputs) {
|
|
200
|
+
const dot = id.lastIndexOf(".");
|
|
201
|
+
const comp = dot > 0 ? byName.get(id.slice(0, dot)) : undefined;
|
|
202
|
+
const schema = comp ? registry.get(comp.type)?.schema : undefined;
|
|
203
|
+
if (!schema || !schema.outputs.some((o) => o.key === id.slice(dot + 1))) {
|
|
204
|
+
modelErr("settings.timeSeries.outputs", `unknown output "${id}" (expected "<componentName>.<OutputKey>")`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function loadSettings(raw, err) {
|
|
209
|
+
if (!isRecord(raw)) {
|
|
210
|
+
err("settings", "must be an object with at least a duration");
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
const before = { n: 0 };
|
|
214
|
+
const e = (key, message) => {
|
|
215
|
+
before.n++;
|
|
216
|
+
err(`settings.${key}`, message);
|
|
217
|
+
};
|
|
218
|
+
for (const k of Object.keys(raw))
|
|
219
|
+
if (!SETTINGS_KEYS.includes(k))
|
|
220
|
+
e(k, "unknown setting");
|
|
221
|
+
const num = (key, dflt, check) => {
|
|
222
|
+
const v = raw[key];
|
|
223
|
+
if (v === undefined) {
|
|
224
|
+
if (dflt === undefined)
|
|
225
|
+
e(key, "required setting is missing");
|
|
226
|
+
return dflt ?? 0;
|
|
227
|
+
}
|
|
228
|
+
if (!finite(v)) {
|
|
229
|
+
e(key, "must be a finite number");
|
|
230
|
+
return dflt ?? 0;
|
|
231
|
+
}
|
|
232
|
+
const problem = check(v);
|
|
233
|
+
if (problem)
|
|
234
|
+
e(key, problem);
|
|
235
|
+
return v;
|
|
236
|
+
};
|
|
237
|
+
const ticksPerSecond = num("ticksPerSecond", 1_000_000, (v) => Number.isInteger(v) && v >= 1 ? null : "must be a positive integer");
|
|
238
|
+
const duration = num("duration", undefined, (v) => (v > 0 ? null : "must be > 0"));
|
|
239
|
+
const warmUp = num("warmUp", 0, (v) => (v >= 0 ? null : "must be >= 0"));
|
|
240
|
+
const seed = num("seed", 1, (v) => (Number.isInteger(v) && v >= 0 ? null : "must be a non-negative integer"));
|
|
241
|
+
const replications = num("replications", 1, (v) => Number.isInteger(v) && v >= 1 ? null : "must be a positive integer");
|
|
242
|
+
if (finite(duration) && finite(warmUp) && warmUp >= duration && duration > 0)
|
|
243
|
+
e("warmUp", "must be less than duration");
|
|
244
|
+
if (duration * ticksPerSecond > Number.MAX_SAFE_INTEGER)
|
|
245
|
+
e("duration", "duration x ticksPerSecond exceeds 2^53 ticks");
|
|
246
|
+
let timeSeries;
|
|
247
|
+
const ts = raw["timeSeries"];
|
|
248
|
+
if (ts !== undefined) {
|
|
249
|
+
if (!isRecord(ts)) {
|
|
250
|
+
e("timeSeries", "must be an object {interval, outputs}");
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
const interval = ts["interval"];
|
|
254
|
+
const outputs = ts["outputs"];
|
|
255
|
+
for (const k of Object.keys(ts))
|
|
256
|
+
if (k !== "interval" && k !== "outputs")
|
|
257
|
+
e(`timeSeries.${k}`, "unknown field");
|
|
258
|
+
if (!finite(interval) || interval <= 0)
|
|
259
|
+
e("timeSeries.interval", "must be a number > 0");
|
|
260
|
+
else if (duration / interval > 1_000_000)
|
|
261
|
+
e("timeSeries.interval", "too small: more than 1,000,000 samples");
|
|
262
|
+
// Array.from visits holes in sparse arrays (every() would skip them), so a hole counts as "not a string".
|
|
263
|
+
if (!Array.isArray(outputs) || outputs.length === 0 || !Array.from(outputs).every((o) => typeof o === "string")) {
|
|
264
|
+
e("timeSeries.outputs", 'must be a non-empty array of output ids like "queue.QueueLength"');
|
|
265
|
+
}
|
|
266
|
+
else if (finite(interval) && interval > 0) {
|
|
267
|
+
timeSeries = { interval, outputs: outputs };
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (before.n > 0)
|
|
272
|
+
return null;
|
|
273
|
+
return { duration, warmUp, seed, replications, ticksPerSecond, ...(timeSeries ? { timeSeries } : {}) };
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/format/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./kernel/index.js";
|
|
2
|
+
export * from "./rng/index.js";
|
|
3
|
+
export * from "./stats/index.js";
|
|
4
|
+
export * from "./schema/index.js";
|
|
5
|
+
export * from "./model/index.js";
|
|
6
|
+
export * from "./components/index.js";
|
|
7
|
+
export * from "./format/index.js";
|
|
8
|
+
export * from "./run/index.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./kernel/index.js";
|
|
2
|
+
export * from "./rng/index.js";
|
|
3
|
+
export * from "./stats/index.js";
|
|
4
|
+
export * from "./schema/index.js";
|
|
5
|
+
export * from "./model/index.js";
|
|
6
|
+
export * from "./components/index.js";
|
|
7
|
+
export * from "./format/index.js";
|
|
8
|
+
export * from "./run/index.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array-backed binary min-heap. `compare(a, b) < 0` means `a` is popped before `b`.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export declare class BinaryHeap<T> {
|
|
6
|
+
private readonly compare;
|
|
7
|
+
private readonly items;
|
|
8
|
+
constructor(compare: (a: T, b: T) => number);
|
|
9
|
+
get size(): number;
|
|
10
|
+
peek(): T | undefined;
|
|
11
|
+
push(item: T): void;
|
|
12
|
+
pop(): T | undefined;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=heap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heap.d.ts","sourceRoot":"","sources":["../../src/kernel/heap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC;IAGX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;gBAEJ,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM;IAE5D,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAcnB,GAAG,IAAI,CAAC,GAAG,SAAS;CAmBrB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array-backed binary min-heap. `compare(a, b) < 0` means `a` is popped before `b`.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export class BinaryHeap {
|
|
6
|
+
compare;
|
|
7
|
+
items = [];
|
|
8
|
+
constructor(compare) {
|
|
9
|
+
this.compare = compare;
|
|
10
|
+
}
|
|
11
|
+
get size() {
|
|
12
|
+
return this.items.length;
|
|
13
|
+
}
|
|
14
|
+
peek() {
|
|
15
|
+
return this.items[0];
|
|
16
|
+
}
|
|
17
|
+
push(item) {
|
|
18
|
+
const items = this.items;
|
|
19
|
+
let i = items.length;
|
|
20
|
+
items.push(item);
|
|
21
|
+
while (i > 0) {
|
|
22
|
+
const parent = (i - 1) >> 1;
|
|
23
|
+
const p = items[parent];
|
|
24
|
+
if (this.compare(item, p) >= 0)
|
|
25
|
+
break;
|
|
26
|
+
items[i] = p;
|
|
27
|
+
i = parent;
|
|
28
|
+
}
|
|
29
|
+
items[i] = item;
|
|
30
|
+
}
|
|
31
|
+
pop() {
|
|
32
|
+
const items = this.items;
|
|
33
|
+
const top = items[0];
|
|
34
|
+
const last = items.pop();
|
|
35
|
+
if (items.length === 0 || last === undefined)
|
|
36
|
+
return top;
|
|
37
|
+
let i = 0;
|
|
38
|
+
const n = items.length;
|
|
39
|
+
for (;;) {
|
|
40
|
+
let child = 2 * i + 1;
|
|
41
|
+
if (child >= n)
|
|
42
|
+
break;
|
|
43
|
+
if (child + 1 < n && this.compare(items[child + 1], items[child]) < 0)
|
|
44
|
+
child++;
|
|
45
|
+
const c = items[child];
|
|
46
|
+
if (this.compare(c, last) >= 0)
|
|
47
|
+
break;
|
|
48
|
+
items[i] = c;
|
|
49
|
+
i = child;
|
|
50
|
+
}
|
|
51
|
+
items[i] = last;
|
|
52
|
+
return top;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=heap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heap.js","sourceRoot":"","sources":["../../src/kernel/heap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,UAAU;IAGQ;IAFZ,KAAK,GAAQ,EAAE,CAAC;IAEjC,YAA6B,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAEhE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,IAAO;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAM,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;gBAAE,MAAM;YACtC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,CAAC,GAAG,MAAM,CAAC;QACb,CAAC;QACD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,GAAG;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,SAAS,CAAC;YACR,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,KAAK,IAAI,CAAC;gBAAE,MAAM;YACtB,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAM,EAAE,KAAK,CAAC,KAAK,CAAM,CAAC,GAAG,CAAC;gBAAE,KAAK,EAAE,CAAC;YACzF,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAM,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM;YACtC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,CAAC,GAAG,KAAK,CAAC;QACZ,CAAC;QACD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5H,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kernel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|