@r146023/omniturbo 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.
Files changed (107) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +320 -0
  3. package/dist/Omni.d.ts +82 -0
  4. package/dist/Omni.d.ts.map +1 -0
  5. package/dist/Omni.js +477 -0
  6. package/dist/Omni.js.map +1 -0
  7. package/dist/aliases/AliasRegistry.d.ts +8 -0
  8. package/dist/aliases/AliasRegistry.d.ts.map +1 -0
  9. package/dist/aliases/AliasRegistry.js +29 -0
  10. package/dist/aliases/AliasRegistry.js.map +1 -0
  11. package/dist/batch/batch.d.ts +4 -0
  12. package/dist/batch/batch.d.ts.map +1 -0
  13. package/dist/batch/batch.js +17 -0
  14. package/dist/batch/batch.js.map +1 -0
  15. package/dist/core/equality.d.ts +6 -0
  16. package/dist/core/equality.d.ts.map +1 -0
  17. package/dist/core/equality.js +43 -0
  18. package/dist/core/equality.js.map +1 -0
  19. package/dist/core/ids.d.ts +5 -0
  20. package/dist/core/ids.d.ts.map +1 -0
  21. package/dist/core/ids.js +6 -0
  22. package/dist/core/ids.js.map +1 -0
  23. package/dist/core/object.d.ts +49 -0
  24. package/dist/core/object.d.ts.map +1 -0
  25. package/dist/core/object.js +134 -0
  26. package/dist/core/object.js.map +1 -0
  27. package/dist/core/path.d.ts +9 -0
  28. package/dist/core/path.d.ts.map +1 -0
  29. package/dist/core/path.js +46 -0
  30. package/dist/core/path.js.map +1 -0
  31. package/dist/datatypes/DataTypeRegistry.d.ts +10 -0
  32. package/dist/datatypes/DataTypeRegistry.d.ts.map +1 -0
  33. package/dist/datatypes/DataTypeRegistry.js +27 -0
  34. package/dist/datatypes/DataTypeRegistry.js.map +1 -0
  35. package/dist/datatypes/builtins.d.ts +3 -0
  36. package/dist/datatypes/builtins.d.ts.map +1 -0
  37. package/dist/datatypes/builtins.js +41 -0
  38. package/dist/datatypes/builtins.js.map +1 -0
  39. package/dist/history/history.d.ts +4 -0
  40. package/dist/history/history.d.ts.map +1 -0
  41. package/dist/history/history.js +22 -0
  42. package/dist/history/history.js.map +1 -0
  43. package/dist/history/timeline.d.ts +11 -0
  44. package/dist/history/timeline.d.ts.map +1 -0
  45. package/dist/history/timeline.js +22 -0
  46. package/dist/history/timeline.js.map +1 -0
  47. package/dist/index.d.ts +14 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +14 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/privacy/PrivacyRegistry.d.ts +22 -0
  52. package/dist/privacy/PrivacyRegistry.d.ts.map +1 -0
  53. package/dist/privacy/PrivacyRegistry.js +84 -0
  54. package/dist/privacy/PrivacyRegistry.js.map +1 -0
  55. package/dist/privacy/writeTokens.d.ts +15 -0
  56. package/dist/privacy/writeTokens.d.ts.map +1 -0
  57. package/dist/privacy/writeTokens.js +23 -0
  58. package/dist/privacy/writeTokens.js.map +1 -0
  59. package/dist/result/resultFactories.d.ts +28 -0
  60. package/dist/result/resultFactories.d.ts.map +1 -0
  61. package/dist/result/resultFactories.js +30 -0
  62. package/dist/result/resultFactories.js.map +1 -0
  63. package/dist/schema/SchemaRegistry.d.ts +33 -0
  64. package/dist/schema/SchemaRegistry.d.ts.map +1 -0
  65. package/dist/schema/SchemaRegistry.js +90 -0
  66. package/dist/schema/SchemaRegistry.js.map +1 -0
  67. package/dist/schema/schemaDefaults.d.ts +3 -0
  68. package/dist/schema/schemaDefaults.d.ts.map +1 -0
  69. package/dist/schema/schemaDefaults.js +6 -0
  70. package/dist/schema/schemaDefaults.js.map +1 -0
  71. package/dist/schema/schemaValidation.d.ts +20 -0
  72. package/dist/schema/schemaValidation.d.ts.map +1 -0
  73. package/dist/schema/schemaValidation.js +80 -0
  74. package/dist/schema/schemaValidation.js.map +1 -0
  75. package/dist/subscriptions/subscriptions.d.ts +341 -0
  76. package/dist/subscriptions/subscriptions.d.ts.map +1 -0
  77. package/dist/subscriptions/subscriptions.js +373 -0
  78. package/dist/subscriptions/subscriptions.js.map +1 -0
  79. package/dist/types/datatype_types.d.ts +25 -0
  80. package/dist/types/datatype_types.d.ts.map +1 -0
  81. package/dist/types/datatype_types.js +3 -0
  82. package/dist/types/datatype_types.js.map +1 -0
  83. package/dist/types/issue_types.d.ts +14 -0
  84. package/dist/types/issue_types.d.ts.map +1 -0
  85. package/dist/types/issue_types.js +2 -0
  86. package/dist/types/issue_types.js.map +1 -0
  87. package/dist/types/options_types.d.ts +48 -0
  88. package/dist/types/options_types.d.ts.map +1 -0
  89. package/dist/types/options_types.js +2 -0
  90. package/dist/types/options_types.js.map +1 -0
  91. package/dist/types/privacy_types.d.ts +22 -0
  92. package/dist/types/privacy_types.d.ts.map +1 -0
  93. package/dist/types/privacy_types.js +2 -0
  94. package/dist/types/privacy_types.js.map +1 -0
  95. package/dist/types/result_types.d.ts +20 -0
  96. package/dist/types/result_types.d.ts.map +1 -0
  97. package/dist/types/result_types.js +2 -0
  98. package/dist/types/result_types.js.map +1 -0
  99. package/dist/types/schema_types.d.ts +35 -0
  100. package/dist/types/schema_types.d.ts.map +1 -0
  101. package/dist/types/schema_types.js +2 -0
  102. package/dist/types/schema_types.js.map +1 -0
  103. package/dist/types/store_types.d.ts +37 -0
  104. package/dist/types/store_types.d.ts.map +1 -0
  105. package/dist/types/store_types.js +2 -0
  106. package/dist/types/store_types.js.map +1 -0
  107. package/package.json +41 -0
@@ -0,0 +1,15 @@
1
+ import type { OmniPrivateSetter, OmniWriteToken } from "../types/privacy_types";
2
+ import type { OmniResult } from "../types/result_types";
3
+ import type { SetOptions } from "../types/options_types";
4
+ export type TokenSetFunction = (path: string, value: unknown, options?: SetOptions) => OmniResult;
5
+ /**
6
+ * Creates the capability-style setter returned from privateSet operations.
7
+ *
8
+ * Usage:
9
+ * ```ts
10
+ * setter(false); // writes root path
11
+ * setter("child.key", true); // writes root.child.key
12
+ * ```
13
+ */
14
+ export declare function createPrivateSetter(token: OmniWriteToken, setWithToken: TokenSetFunction): OmniPrivateSetter;
15
+ //# sourceMappingURL=writeTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeTokens.d.ts","sourceRoot":"","sources":["../../src/privacy/writeTokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;AAElG;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,GAAG,iBAAiB,CAc5G"}
@@ -0,0 +1,23 @@
1
+ import { getRelativePath, joinPath } from "../core/path";
2
+ /**
3
+ * Creates the capability-style setter returned from privateSet operations.
4
+ *
5
+ * Usage:
6
+ * ```ts
7
+ * setter(false); // writes root path
8
+ * setter("child.key", true); // writes root.child.key
9
+ * ```
10
+ */
11
+ export function createPrivateSetter(token, setWithToken) {
12
+ function privateSetter(a, b, c) {
13
+ if (typeof a === "string" && arguments.length >= 2) {
14
+ const relative = getRelativePath(token.rootPath, joinPath(token.rootPath, a));
15
+ const path = relative ? joinPath(token.rootPath, relative) : token.rootPath;
16
+ return setWithToken(path, b, { ...(c ?? {}), token });
17
+ }
18
+ return setWithToken(token.rootPath, a, { ...(b ?? {}), token });
19
+ }
20
+ privateSetter.token = token;
21
+ return privateSetter;
22
+ }
23
+ //# sourceMappingURL=writeTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeTokens.js","sourceRoot":"","sources":["../../src/privacy/writeTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOzD;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAqB,EAAE,YAA8B;IAGvF,SAAS,aAAa,CAAC,CAAU,EAAE,CAAW,EAAE,CAAc;QAC5D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC5E,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,CAAE,CAA4B,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAEA,aAAmC,CAAC,KAAK,GAAG,KAAK,CAAC;IACnD,OAAO,aAAkC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { OmniIssue } from "../types/issue_types";
2
+ import type { OmniAction, OmniResult } from "../types/result_types";
3
+ export declare function okResult<T = unknown>(params: {
4
+ action: OmniAction;
5
+ path: string;
6
+ originalValue?: unknown;
7
+ value?: T;
8
+ oldValue?: unknown;
9
+ changed?: boolean;
10
+ issues?: OmniIssue[];
11
+ options?: Record<string, unknown>;
12
+ setter?: OmniResult["setter"];
13
+ schema?: OmniResult["schema"];
14
+ children?: OmniResult[];
15
+ }): OmniResult<T>;
16
+ export declare function failResult<T = unknown>(params: {
17
+ action: OmniAction;
18
+ path: string;
19
+ originalValue?: unknown;
20
+ value?: T;
21
+ oldValue?: unknown;
22
+ issues: OmniIssue[];
23
+ options?: Record<string, unknown>;
24
+ schema?: OmniResult["schema"];
25
+ children?: OmniResult[];
26
+ }): OmniResult<T>;
27
+ export declare function mergeResults(action: OmniAction, path: string, children: OmniResult[]): OmniResult;
28
+ //# sourceMappingURL=resultFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resultFactories.d.ts","sourceRoot":"","sources":["../../src/result/resultFactories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpE,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE;IAC5C,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB,GAAG,UAAU,CAAC,CAAC,CAAC,CAQhB;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE;IAC9C,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB,GAAG,UAAU,CAAC,CAAC,CAAC,CAOhB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAWjG"}
@@ -0,0 +1,30 @@
1
+ export function okResult(params) {
2
+ return {
3
+ success: true,
4
+ rejected: false,
5
+ issues: params.issues ?? [],
6
+ changed: params.changed ?? false,
7
+ ...params,
8
+ };
9
+ }
10
+ export function failResult(params) {
11
+ return {
12
+ success: false,
13
+ rejected: true,
14
+ changed: false,
15
+ ...params,
16
+ };
17
+ }
18
+ export function mergeResults(action, path, children) {
19
+ const failed = children.filter((child) => !child.success);
20
+ return {
21
+ success: failed.length === 0,
22
+ rejected: failed.length > 0,
23
+ action,
24
+ path,
25
+ changed: children.some((child) => child.changed),
26
+ issues: children.flatMap((child) => child.issues),
27
+ children,
28
+ };
29
+ }
30
+ //# sourceMappingURL=resultFactories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resultFactories.js","sourceRoot":"","sources":["../../src/result/resultFactories.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,QAAQ,CAAc,MAYrC;IACC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAc,MAUvC;IACC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,KAAK;QACd,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,IAAY,EAAE,QAAsB;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;QAC3B,MAAM;QACN,IAAI;QACJ,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;QAChD,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QACjD,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { OmniResolvedSchema, OmniSchema } from "../types/schema_types";
2
+ /**
3
+ *
4
+ * The SchemaRegistry class manages a collection of schemas associated with path patterns. It allows defining schemas for specific paths, retrieving schemas based on exact patterns, and resolving schemas for given paths by matching them against the defined patterns. The registry supports wildcard patterns and prioritizes more specific matches when resolving schemas.
5
+ *
6
+ * Key features:
7
+ * - Define schemas for specific path patterns, including support for wildcards.
8
+ * - Retrieve schemas based on exact path patterns.
9
+ * - Resolve schemas for given paths by matching them against defined patterns, with support for child schema resolution.
10
+ * - List all defined schemas and clear the registry when needed.
11
+ *
12
+ * This class is essential for managing the structure and validation of data within the Omni system, allowing for flexible schema definitions and efficient retrieval based on path patterns.
13
+ *
14
+ * @example
15
+ * const registry = new SchemaRegistry();
16
+ * registry.define("settings.*", { type: "object", children: { theme: { type: "string" } } });
17
+ * const schema = registry.resolve("settings.theme");
18
+ * console.log(schema); // { type: "string" }
19
+ *
20
+ */
21
+ export declare class SchemaRegistry {
22
+ private entries;
23
+ define(pathPattern: string, schema: OmniSchema): void;
24
+ getExact(pathPattern: string): OmniSchema | undefined;
25
+ resolve(path: string): OmniResolvedSchema | undefined;
26
+ private resolveChildSchema;
27
+ list(): Array<{
28
+ pattern: string;
29
+ schema: OmniSchema;
30
+ }>;
31
+ clear(): void;
32
+ }
33
+ //# sourceMappingURL=SchemaRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaRegistry.d.ts","sourceRoot":"","sources":["../../src/schema/SchemaRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAS5E;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAqB;IAEpC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAgBrD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAQrD,OAAO,CAAC,kBAAkB;IAmC1B,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IAItD,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,90 @@
1
+ import { getPathParts, normalizePath, wildcardScore, wildcardToRegExp } from "../core/path";
2
+ /**
3
+ *
4
+ * The SchemaRegistry class manages a collection of schemas associated with path patterns. It allows defining schemas for specific paths, retrieving schemas based on exact patterns, and resolving schemas for given paths by matching them against the defined patterns. The registry supports wildcard patterns and prioritizes more specific matches when resolving schemas.
5
+ *
6
+ * Key features:
7
+ * - Define schemas for specific path patterns, including support for wildcards.
8
+ * - Retrieve schemas based on exact path patterns.
9
+ * - Resolve schemas for given paths by matching them against defined patterns, with support for child schema resolution.
10
+ * - List all defined schemas and clear the registry when needed.
11
+ *
12
+ * This class is essential for managing the structure and validation of data within the Omni system, allowing for flexible schema definitions and efficient retrieval based on path patterns.
13
+ *
14
+ * @example
15
+ * const registry = new SchemaRegistry();
16
+ * registry.define("settings.*", { type: "object", children: { theme: { type: "string" } } });
17
+ * const schema = registry.resolve("settings.theme");
18
+ * console.log(schema); // { type: "string" }
19
+ *
20
+ */
21
+ export class SchemaRegistry {
22
+ constructor() {
23
+ this.entries = [];
24
+ }
25
+ define(pathPattern, schema) {
26
+ const pattern = normalizePath(pathPattern);
27
+ const existing = this.entries.find((entry) => entry.pattern === pattern);
28
+ const entry = {
29
+ pattern,
30
+ regex: wildcardToRegExp(pattern),
31
+ score: wildcardScore(pattern),
32
+ schema,
33
+ };
34
+ if (existing)
35
+ Object.assign(existing, entry);
36
+ else
37
+ this.entries.push(entry);
38
+ this.entries.sort((a, b) => b.score - a.score || b.pattern.length - a.pattern.length);
39
+ }
40
+ getExact(pathPattern) {
41
+ return this.entries.find((entry) => entry.pattern === normalizePath(pathPattern))?.schema;
42
+ }
43
+ resolve(path) {
44
+ const normalized = normalizePath(path);
45
+ const direct = this.entries.find((entry) => entry.regex.test(normalized));
46
+ if (direct)
47
+ return { path: normalized, pattern: direct.pattern, schema: direct.schema, score: direct.score };
48
+ return this.resolveChildSchema(normalized);
49
+ }
50
+ resolveChildSchema(path) {
51
+ const parts = getPathParts(path);
52
+ const candidates = [];
53
+ for (const entry of this.entries) {
54
+ const patternParts = getPathParts(entry.pattern);
55
+ if (patternParts.length >= parts.length)
56
+ continue;
57
+ let matchesParent = true;
58
+ for (let i = 0; i < patternParts.length; i++) {
59
+ if (patternParts[i] !== "*" && patternParts[i] !== parts[i]) {
60
+ matchesParent = false;
61
+ break;
62
+ }
63
+ }
64
+ if (!matchesParent)
65
+ continue;
66
+ let schema = entry.schema;
67
+ for (let i = patternParts.length; i < parts.length; i++) {
68
+ if (!schema)
69
+ break;
70
+ const part = parts[i] ?? "";
71
+ if (schema.type === "array" && schema.items && /^\d+$/.test(part)) {
72
+ schema = schema.items;
73
+ continue;
74
+ }
75
+ schema = schema.children?.[part] ?? schema.children?.["*"];
76
+ }
77
+ if (schema)
78
+ candidates.push({ path, pattern: entry.pattern, schema, score: entry.score + patternParts.length });
79
+ }
80
+ candidates.sort((a, b) => b.score - a.score || b.pattern.length - a.pattern.length);
81
+ return candidates[0];
82
+ }
83
+ list() {
84
+ return this.entries.map(({ pattern, schema }) => ({ pattern, schema }));
85
+ }
86
+ clear() {
87
+ this.entries = [];
88
+ }
89
+ }
90
+ //# sourceMappingURL=SchemaRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaRegistry.js","sourceRoot":"","sources":["../../src/schema/SchemaRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OmniSchema } from "../types/schema_types";
2
+ export declare function resolveDefault(schema: OmniSchema | undefined): unknown;
3
+ //# sourceMappingURL=schemaDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaDefaults.d.ts","sourceRoot":"","sources":["../../src/schema/schemaDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAGtE"}
@@ -0,0 +1,6 @@
1
+ export function resolveDefault(schema) {
2
+ if (!schema || !("default" in schema))
3
+ return undefined;
4
+ return typeof schema.default === "function" ? schema.default() : schema.default;
5
+ }
6
+ //# sourceMappingURL=schemaDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaDefaults.js","sourceRoot":"","sources":["../../src/schema/schemaDefaults.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,MAA8B;IAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAE,MAAM,CAAC,OAAyB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACrG,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { DataTypeRegistry } from "../datatypes/DataTypeRegistry";
2
+ import type { OmniIssue } from "../types/issue_types";
3
+ import type { OmniSchema } from "../types/schema_types";
4
+ export interface ValidationPipelineInput {
5
+ path: string;
6
+ value: unknown;
7
+ oldValue?: unknown;
8
+ schema?: OmniSchema;
9
+ dataTypes: DataTypeRegistry;
10
+ coerce?: boolean;
11
+ validate?: boolean;
12
+ }
13
+ export interface ValidationPipelineResult {
14
+ success: boolean;
15
+ value: unknown;
16
+ issues: OmniIssue[];
17
+ schema?: OmniSchema;
18
+ }
19
+ export declare function runSchemaValidation(input: ValidationPipelineInput): ValidationPipelineResult;
20
+ //# sourceMappingURL=schemaValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaValidation.d.ts","sourceRoot":"","sources":["../../src/schema/schemaValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAaD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAiE5F"}
@@ -0,0 +1,80 @@
1
+ import { OMNI_REJECT, NO_COERCE } from "../types/datatype_types";
2
+ function issue(path, code, message, expected, received, source = "schema") {
3
+ return { code, severity: "error", path, message, expected, received, source };
4
+ }
5
+ function validatorIssues(path, output) {
6
+ if (output === true)
7
+ return [];
8
+ if (output === false)
9
+ return [issue(path, "OMNI_SCHEMA_VALIDATION_FAILED", "Schema validator returned false.", "valid value", undefined)];
10
+ if (typeof output === "string")
11
+ return [issue(path, "OMNI_SCHEMA_VALIDATION_FAILED", output, "valid value", undefined)];
12
+ return Array.isArray(output) ? output : [output];
13
+ }
14
+ export function runSchemaValidation(input) {
15
+ const { path, oldValue, schema, dataTypes } = input;
16
+ const issues = [];
17
+ let value = input.value;
18
+ const shouldCoerce = input.coerce !== false;
19
+ const shouldValidate = input.validate !== false;
20
+ if (!schema)
21
+ return { success: true, value, issues };
22
+ if (value === undefined && schema.required) {
23
+ issues.push(issue(path, "OMNI_REQUIRED", "Path is required.", "defined value", value));
24
+ }
25
+ if (value === null && schema.nullable === false) {
26
+ issues.push(issue(path, "OMNI_NOT_NULLABLE", "Path does not allow null.", "non-null value", value));
27
+ }
28
+ if (shouldCoerce) {
29
+ const dataType = dataTypes.get(schema.type);
30
+ if (dataType?.coerce) {
31
+ const coerced = dataType.coerce(value, { path, oldValue });
32
+ if (coerced === OMNI_REJECT)
33
+ issues.push(issue(path, "OMNI_COERCE_REJECTED", `Datatype '${schema.type}' could not coerce value.`, schema.type, value, "datatype"));
34
+ else if (coerced !== NO_COERCE)
35
+ value = coerced;
36
+ }
37
+ if (typeof schema.coerce === "function") {
38
+ const coerced = schema.coerce(value, { path, oldValue });
39
+ if (coerced === OMNI_REJECT)
40
+ issues.push(issue(path, "OMNI_SCHEMA_COERCE_REJECTED", "Schema coercer rejected value.", "coercible value", value, "coercion"));
41
+ else if (coerced !== NO_COERCE)
42
+ value = coerced;
43
+ }
44
+ }
45
+ if (shouldValidate) {
46
+ const dataType = dataTypes.get(schema.type);
47
+ if (schema.type && dataType?.validate) {
48
+ issues.push(...validatorIssues(path, dataType.validate(value, { path, originalValue: input.value, oldValue })).map((i) => ({ ...i, source: i.source ?? "datatype" })));
49
+ }
50
+ else if (schema.type && !dataTypes.has(schema.type)) {
51
+ issues.push(issue(path, "OMNI_UNKNOWN_DATATYPE", `Unknown datatype '${schema.type}'.`, "registered datatype", schema.type, "datatype"));
52
+ }
53
+ if (typeof value === "number") {
54
+ if (typeof schema.min === "number" && value < schema.min)
55
+ issues.push(issue(path, "OMNI_MIN", `Value must be >= ${schema.min}.`, schema.min, value));
56
+ if (typeof schema.max === "number" && value > schema.max)
57
+ issues.push(issue(path, "OMNI_MAX", `Value must be <= ${schema.max}.`, schema.max, value));
58
+ }
59
+ if (typeof value === "string" || Array.isArray(value)) {
60
+ if (typeof schema.minLength === "number" && value.length < schema.minLength)
61
+ issues.push(issue(path, "OMNI_MIN_LENGTH", `Value length must be >= ${schema.minLength}.`, schema.minLength, value.length));
62
+ if (typeof schema.maxLength === "number" && value.length > schema.maxLength)
63
+ issues.push(issue(path, "OMNI_MAX_LENGTH", `Value length must be <= ${schema.maxLength}.`, schema.maxLength, value.length));
64
+ }
65
+ if (schema.enum && !schema.enum.some((allowed) => Object.is(allowed, value))) {
66
+ issues.push(issue(path, "OMNI_ENUM", "Value is not in allowed enum.", schema.enum, value));
67
+ }
68
+ if (schema.pattern && typeof value === "string") {
69
+ const re = typeof schema.pattern === "string" ? new RegExp(schema.pattern) : schema.pattern;
70
+ if (!re.test(value))
71
+ issues.push(issue(path, "OMNI_PATTERN", "Value does not match required pattern.", re.toString(), value));
72
+ }
73
+ const validators = Array.isArray(schema.validate) ? schema.validate : schema.validate ? [schema.validate] : [];
74
+ for (const validator of validators) {
75
+ issues.push(...validatorIssues(path, validator(value, { path, originalValue: input.value, oldValue })));
76
+ }
77
+ }
78
+ return { success: issues.filter((i) => i.severity === "error").length === 0, value, issues, schema };
79
+ }
80
+ //# sourceMappingURL=schemaValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaValidation.js","sourceRoot":"","sources":["../../src/schema/schemaValidation.ts"],"names":[],"mappings":"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"}