@openruntime/core 0.0.0 → 0.1.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.
Files changed (90) hide show
  1. package/dist/action/registry.d.ts +23 -0
  2. package/dist/action/registry.d.ts.map +1 -0
  3. package/dist/action/registry.js +153 -0
  4. package/dist/action/registry.js.map +1 -0
  5. package/dist/action/types.d.ts +72 -0
  6. package/dist/action/types.d.ts.map +1 -0
  7. package/dist/action/types.js +2 -0
  8. package/dist/action/types.js.map +1 -0
  9. package/dist/action/validation.d.ts +4 -0
  10. package/dist/action/validation.d.ts.map +1 -0
  11. package/dist/action/validation.js +90 -0
  12. package/dist/action/validation.js.map +1 -0
  13. package/dist/bridge/command.d.ts +4 -0
  14. package/dist/bridge/command.d.ts.map +1 -0
  15. package/dist/bridge/command.js +29 -0
  16. package/dist/bridge/command.js.map +1 -0
  17. package/dist/bridge/connect.d.ts +4 -0
  18. package/dist/bridge/connect.d.ts.map +1 -0
  19. package/dist/bridge/connect.js +237 -0
  20. package/dist/bridge/connect.js.map +1 -0
  21. package/dist/bridge/server.d.ts +4 -0
  22. package/dist/bridge/server.d.ts.map +1 -0
  23. package/dist/bridge/server.js +30 -0
  24. package/dist/bridge/server.js.map +1 -0
  25. package/dist/bridge/types.d.ts +63 -0
  26. package/dist/bridge/types.d.ts.map +1 -0
  27. package/dist/bridge/types.js +3 -0
  28. package/dist/bridge/types.js.map +1 -0
  29. package/dist/event/log.d.ts +11 -0
  30. package/dist/event/log.d.ts.map +1 -0
  31. package/dist/event/log.js +118 -0
  32. package/dist/event/log.js.map +1 -0
  33. package/dist/event/types.d.ts +29 -0
  34. package/dist/event/types.d.ts.map +1 -0
  35. package/dist/event/types.js +2 -0
  36. package/dist/event/types.js.map +1 -0
  37. package/dist/index.d.ts +16 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +7 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/runtime/center.d.ts +26 -0
  42. package/dist/runtime/center.d.ts.map +1 -0
  43. package/dist/runtime/center.js +245 -0
  44. package/dist/runtime/center.js.map +1 -0
  45. package/dist/runtime/types.d.ts +34 -0
  46. package/dist/runtime/types.d.ts.map +1 -0
  47. package/dist/runtime/types.js +2 -0
  48. package/dist/runtime/types.js.map +1 -0
  49. package/dist/runtime/window.d.ts +12 -0
  50. package/dist/runtime/window.d.ts.map +1 -0
  51. package/dist/runtime/window.js +18 -0
  52. package/dist/runtime/window.js.map +1 -0
  53. package/dist/shared/package-info.d.ts +9 -0
  54. package/dist/shared/package-info.d.ts.map +1 -0
  55. package/dist/shared/package-info.js +11 -0
  56. package/dist/shared/package-info.js.map +1 -0
  57. package/dist/shared/query.d.ts +5 -0
  58. package/dist/shared/query.d.ts.map +1 -0
  59. package/dist/shared/query.js +25 -0
  60. package/dist/shared/query.js.map +1 -0
  61. package/dist/snapshot/store.d.ts +11 -0
  62. package/dist/snapshot/store.d.ts.map +1 -0
  63. package/dist/snapshot/store.js +77 -0
  64. package/dist/snapshot/store.js.map +1 -0
  65. package/dist/snapshot/types.d.ts +36 -0
  66. package/dist/snapshot/types.d.ts.map +1 -0
  67. package/dist/snapshot/types.js +2 -0
  68. package/dist/snapshot/types.js.map +1 -0
  69. package/dist/target/registry.d.ts +11 -0
  70. package/dist/target/registry.d.ts.map +1 -0
  71. package/dist/target/registry.js +92 -0
  72. package/dist/target/registry.js.map +1 -0
  73. package/dist/target/types.d.ts +35 -0
  74. package/dist/target/types.d.ts.map +1 -0
  75. package/dist/target/types.js +2 -0
  76. package/dist/target/types.js.map +1 -0
  77. package/dist/wait/condition.d.ts +4 -0
  78. package/dist/wait/condition.d.ts.map +1 -0
  79. package/dist/wait/condition.js +47 -0
  80. package/dist/wait/condition.js.map +1 -0
  81. package/dist/wait/manager.d.ts +9 -0
  82. package/dist/wait/manager.d.ts.map +1 -0
  83. package/dist/wait/manager.js +73 -0
  84. package/dist/wait/manager.js.map +1 -0
  85. package/dist/wait/types.d.ts +22 -0
  86. package/dist/wait/types.d.ts.map +1 -0
  87. package/dist/wait/types.js +2 -0
  88. package/dist/wait/types.js.map +1 -0
  89. package/package.json +18 -6
  90. package/dist/README.md +0 -1
@@ -0,0 +1,92 @@
1
+ import { matchesAnyValue, matchesText, matchesValue } from "../shared/query.js";
2
+ export class TargetRegistry {
3
+ #clock;
4
+ #targets = new Map();
5
+ constructor(clock) {
6
+ this.#clock = clock;
7
+ }
8
+ register(input) {
9
+ const now = this.#clock.now();
10
+ const existing = this.#targets.get(input.id);
11
+ const descriptor = normalizeTarget(input, existing?.registeredAt ?? now, now);
12
+ this.#targets.set(descriptor.id, descriptor);
13
+ }
14
+ unregister(targetId) {
15
+ return this.#targets.delete(targetId);
16
+ }
17
+ get(targetId) {
18
+ const descriptor = this.#targets.get(targetId);
19
+ return descriptor === undefined ? undefined : cloneTarget(descriptor);
20
+ }
21
+ list(query) {
22
+ const descriptors = Array.from(this.#targets.values());
23
+ return descriptors.filter((target) => matchesTarget(target, query)).map(cloneTarget);
24
+ }
25
+ }
26
+ function normalizeTarget(input, registeredAt, updatedAt) {
27
+ const id = assertNonEmptyString(input.id, "target id");
28
+ const type = assertNonEmptyString(input.type, "target type");
29
+ const source = assertNonEmptyString(input.source, "target source");
30
+ const statuses = uniqueStatuses(input.statuses);
31
+ const descriptor = {
32
+ id,
33
+ type,
34
+ source,
35
+ statuses,
36
+ registeredAt,
37
+ updatedAt
38
+ };
39
+ assignOptionalTargetFields(descriptor, input);
40
+ return descriptor;
41
+ }
42
+ function assignOptionalTargetFields(descriptor, input) {
43
+ if (input.label !== undefined)
44
+ descriptor.label = input.label;
45
+ if (input.description !== undefined)
46
+ descriptor.description = input.description;
47
+ if (input.params !== undefined)
48
+ descriptor.params = input.params.map((param) => ({ ...param }));
49
+ if (input.matcher !== undefined)
50
+ descriptor.matcher = { ...input.matcher };
51
+ if ("data" in input)
52
+ descriptor.data = input.data;
53
+ }
54
+ function cloneTarget(target) {
55
+ const clone = {
56
+ id: target.id,
57
+ type: target.type,
58
+ source: target.source,
59
+ statuses: [...target.statuses],
60
+ registeredAt: target.registeredAt,
61
+ updatedAt: target.updatedAt
62
+ };
63
+ assignOptionalTargetFields(clone, target);
64
+ return clone;
65
+ }
66
+ function uniqueStatuses(statuses) {
67
+ if (!Array.isArray(statuses) || statuses.length === 0) {
68
+ throw new Error("target statuses must not be empty");
69
+ }
70
+ const unique = new Set();
71
+ for (const status of statuses) {
72
+ unique.add(assertNonEmptyString(status, "target status"));
73
+ }
74
+ return [...unique];
75
+ }
76
+ function assertNonEmptyString(value, label) {
77
+ if (typeof value !== "string" || value.trim() === "") {
78
+ throw new Error(`${label} must be a non-empty string`);
79
+ }
80
+ return value;
81
+ }
82
+ function matchesTarget(target, query) {
83
+ if (query === undefined) {
84
+ return true;
85
+ }
86
+ return (matchesValue(target.id, query.id) &&
87
+ matchesValue(target.type, query.type) &&
88
+ matchesValue(target.source, query.source) &&
89
+ matchesAnyValue(target.statuses, query.status) &&
90
+ matchesText([target.id, target.label, target.description], query.query));
91
+ }
92
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/target/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQhF,MAAM,OAAO,cAAc;IAChB,MAAM,CAAe;IACrB,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE/D,YAAY,KAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,QAAQ,CAAC,KAA0B;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QAE9E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,KAAuB;QAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC;CACF;AAED,SAAS,eAAe,CACtB,KAA0B,EAC1B,YAAoB,EACpB,SAAiB;IAEjB,MAAM,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEhD,MAAM,UAAU,GAA4B;QAC1C,EAAE;QACF,IAAI;QACJ,MAAM;QACN,QAAQ;QACR,YAAY;QACZ,SAAS;KACV,CAAC;IAEF,0BAA0B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,0BAA0B,CACjC,UAAmC,EACnC,KAA0B;IAE1B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAChG,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,UAAU,CAAC,OAAO,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3E,IAAI,MAAM,IAAI,KAAK;QAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B;IAClD,MAAM,KAAK,GAA4B;QACrC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IAEF,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,QAA6C;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,KAAa;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,MAA+B,EAAE,KAAkC;IACxF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;QACjC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QACrC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACzC,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QAC9C,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CACxE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ export type RuntimeObjectType = string;
2
+ export type RuntimeStatus = string;
3
+ export interface RuntimeTargetParam {
4
+ name: string;
5
+ type: "string" | "number" | "boolean";
6
+ required?: boolean;
7
+ description?: string;
8
+ }
9
+ export interface RuntimeTargetMatcher {
10
+ type: "exact" | "path-pattern" | "custom";
11
+ pattern?: string;
12
+ }
13
+ export interface RegisterTargetInput {
14
+ id: string;
15
+ type: RuntimeObjectType;
16
+ source: string;
17
+ label?: string;
18
+ description?: string;
19
+ statuses: RuntimeStatus[];
20
+ params?: RuntimeTargetParam[];
21
+ matcher?: RuntimeTargetMatcher;
22
+ data?: unknown;
23
+ }
24
+ export interface RuntimeTargetDescriptor extends RegisterTargetInput {
25
+ registeredAt: number;
26
+ updatedAt: number;
27
+ }
28
+ export interface GetTargetsQuery {
29
+ type?: RuntimeObjectType | RuntimeObjectType[];
30
+ source?: string | string[];
31
+ id?: string | string[];
32
+ status?: RuntimeStatus | RuntimeStatus[];
33
+ query?: string;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/target/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACvC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/target/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { RuntimeSnapshotTarget } from "../snapshot/types.js";
2
+ import type { RuntimeCondition } from "./types.js";
3
+ export declare function matchesRuntimeCondition(target: RuntimeSnapshotTarget | undefined, condition: RuntimeCondition): target is RuntimeSnapshotTarget;
4
+ //# sourceMappingURL=condition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../src/wait/condition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAC;AAEzE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,SAAS,EAAE,gBAAgB,GAC1B,MAAM,IAAI,qBAAqB,CAEjC"}
@@ -0,0 +1,47 @@
1
+ export function matchesRuntimeCondition(target, condition) {
2
+ return target?.status === condition.status && matchesDataConditions(target.data, condition.where);
3
+ }
4
+ function matchesDataConditions(data, conditions) {
5
+ if (conditions === undefined || conditions.length === 0) {
6
+ return true;
7
+ }
8
+ return conditions.every((condition) => {
9
+ const values = getValuesByPath(data, condition.path);
10
+ return values.some((value) => matchesExpectedValue(value, condition.equals));
11
+ });
12
+ }
13
+ function getValuesByPath(value, path) {
14
+ const segments = path.split(".").filter(Boolean);
15
+ if (segments.length === 0) {
16
+ return [value];
17
+ }
18
+ return segments.reduce((values, segment) => {
19
+ const next = [];
20
+ for (const item of values) {
21
+ if (Array.isArray(item)) {
22
+ for (const entry of item) {
23
+ next.push(...readProperty(entry, segment));
24
+ }
25
+ continue;
26
+ }
27
+ next.push(...readProperty(item, segment));
28
+ }
29
+ return next;
30
+ }, [value]);
31
+ }
32
+ function readProperty(value, segment) {
33
+ if (value === null || typeof value !== "object") {
34
+ return [];
35
+ }
36
+ if (!(segment in value)) {
37
+ return [];
38
+ }
39
+ return [value[segment]];
40
+ }
41
+ function matchesExpectedValue(value, expected) {
42
+ if (typeof expected === "string") {
43
+ return String(value) === expected;
44
+ }
45
+ return Object.is(value, expected);
46
+ }
47
+ //# sourceMappingURL=condition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/wait/condition.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uBAAuB,CACrC,MAAyC,EACzC,SAA2B;IAE3B,OAAO,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAa,EAAE,UAA8C;IAC1F,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,IAAY;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAY,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,OAAe;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAE,KAAiC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAiB;IAC7D,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RuntimeSnapshot } from "../snapshot/types.js";
2
+ import type { RuntimeCondition, RuntimeWaitOptions, RuntimeWaitResult } from "./types.js";
3
+ export declare class WaitManager {
4
+ #private;
5
+ waitFor(condition: RuntimeCondition, options: RuntimeWaitOptions | undefined, getSnapshot: () => RuntimeSnapshot): Promise<RuntimeWaitResult>;
6
+ resolveForTarget(targetId: string, getSnapshot: () => RuntimeSnapshot): void;
7
+ rejectForTarget(targetId: string, getSnapshot: () => RuntimeSnapshot): void;
8
+ }
9
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/wait/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,qBAAa,WAAW;;IAItB,OAAO,CACL,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,WAAW,EAAE,MAAM,eAAe,GACjC,OAAO,CAAC,iBAAiB,CAAC;IAmB7B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,GAAG,IAAI;IAa5E,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,GAAG,IAAI;CA+B5E"}
@@ -0,0 +1,73 @@
1
+ import { matchesRuntimeCondition } from "./condition.js";
2
+ export class WaitManager {
3
+ #waits = new Map();
4
+ #nextWaitId = 1;
5
+ waitFor(condition, options, getSnapshot) {
6
+ return new Promise((resolve) => {
7
+ const waitId = this.#nextWaitId;
8
+ this.#nextWaitId += 1;
9
+ const timeout = normalizeTimeout(options?.timeout);
10
+ const timer = setTimeout(() => {
11
+ this.#failWait(waitId, getSnapshot, "Timed out waiting for target status.");
12
+ }, timeout);
13
+ this.#waits.set(waitId, {
14
+ id: waitId,
15
+ condition: { ...condition },
16
+ resolve,
17
+ timer
18
+ });
19
+ });
20
+ }
21
+ resolveForTarget(targetId, getSnapshot) {
22
+ for (const wait of this.#waits.values()) {
23
+ if (wait.condition.id === targetId) {
24
+ const snapshot = getSnapshot();
25
+ const target = snapshot.targets[wait.condition.id];
26
+ if (matchesRuntimeCondition(target, wait.condition)) {
27
+ this.#clear(wait);
28
+ wait.resolve(createSuccessResult(wait.condition, snapshot, target));
29
+ }
30
+ }
31
+ }
32
+ }
33
+ rejectForTarget(targetId, getSnapshot) {
34
+ for (const wait of this.#waits.values()) {
35
+ if (wait.condition.id === targetId) {
36
+ this.#failWait(wait.id, getSnapshot, "Target was unregistered.");
37
+ }
38
+ }
39
+ }
40
+ #failWait(waitId, getSnapshot, reason) {
41
+ const wait = this.#waits.get(waitId);
42
+ if (wait === undefined) {
43
+ return;
44
+ }
45
+ this.#clear(wait);
46
+ wait.resolve({
47
+ success: false,
48
+ condition: wait.condition,
49
+ snapshot: getSnapshot(),
50
+ reason
51
+ });
52
+ }
53
+ #clear(wait) {
54
+ clearTimeout(wait.timer);
55
+ this.#waits.delete(wait.id);
56
+ }
57
+ }
58
+ const defaultWaitTimeout = 5000;
59
+ function normalizeTimeout(timeout) {
60
+ if (timeout === undefined || !Number.isFinite(timeout) || timeout < 0) {
61
+ return defaultWaitTimeout;
62
+ }
63
+ return Math.floor(timeout);
64
+ }
65
+ function createSuccessResult(condition, snapshot, target) {
66
+ return {
67
+ success: true,
68
+ condition,
69
+ snapshot,
70
+ target
71
+ };
72
+ }
73
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/wait/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { RuntimeSnapshot, RuntimeSnapshotTarget } from "../snapshot/types.js";
2
+ import type { RuntimeStatus } from "../target/types.js";
3
+ export interface RuntimeCondition {
4
+ id: string;
5
+ status: RuntimeStatus;
6
+ where?: RuntimeDataCondition[];
7
+ }
8
+ export interface RuntimeDataCondition {
9
+ path: string;
10
+ equals: unknown;
11
+ }
12
+ export interface RuntimeWaitOptions {
13
+ timeout?: number;
14
+ }
15
+ export interface RuntimeWaitResult {
16
+ success: boolean;
17
+ condition: RuntimeCondition;
18
+ snapshot: RuntimeSnapshot;
19
+ target?: RuntimeSnapshotTarget;
20
+ reason?: string;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wait/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wait/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,13 @@
1
1
  {
2
2
  "name": "@openruntime/core",
3
- "version": "0.0.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/2heal1/openruntime.git",
8
+ "directory": "packages/core"
9
+ },
10
+ "author": "2heal1",
5
11
  "main": "./dist/index.js",
6
12
  "types": "./dist/index.d.ts",
7
13
  "exports": {
@@ -11,13 +17,19 @@
11
17
  }
12
18
  },
13
19
  "files": [
14
- "dist"
20
+ "dist/**/*.d.ts",
21
+ "dist/**/*.d.ts.map",
22
+ "dist/**/*.js",
23
+ "dist/**/*.js.map"
15
24
  ],
16
- "scripts": {
17
- "build": "tsc -b --pretty false",
18
- "test": "pnpm run build && tsc -p tsconfig.test.json --pretty false && rstest run"
25
+ "publishConfig": {
26
+ "access": "public"
19
27
  },
20
28
  "devDependencies": {
21
29
  "@rstest/core": "0.10.3"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc -b --pretty false",
33
+ "test": "pnpm run build && tsc -p tsconfig.test.json --pretty false && rstest run"
22
34
  }
23
- }
35
+ }
package/dist/README.md DELETED
@@ -1 +0,0 @@
1
- readme