@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,5 @@
1
+ /**
2
+ * Lightweight unique ID generator for subscribers, alerts, privacy tokens, and views.
3
+ */
4
+ export declare const generateFastId: (prefix?: string) => string;
5
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/core/ids.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,eAAe,KAAG,MAA8E,CAAC"}
@@ -0,0 +1,6 @@
1
+ let idCounter = 0;
2
+ /**
3
+ * Lightweight unique ID generator for subscribers, alerts, privacy tokens, and views.
4
+ */
5
+ export const generateFastId = (prefix = "omni") => `${prefix}_${Date.now().toString(36)}_${(++idCounter).toString(36)}`;
6
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/core/ids.ts"],"names":[],"mappings":"AAAA,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,GAAG,MAAM,EAAU,EAAE,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Checks if a value is a primitive (string, number, boolean, null, undefined) or an object. This is
3
+ * used to determine if we can return the value directly without cloning, as primitives are
4
+ * immutable and safe to return as-is.
5
+ * @param val The value to check.
6
+ * @returns True if the value is a primitive, false if it's an object or function.
7
+ */
8
+ export declare const isPrimitive: (val: unknown) => boolean;
9
+ /**
10
+ * Checks if a value is a plain object (not null, not an array). This is used to determine if we can
11
+ * @param value The value to check.
12
+ * @returns True if the value is a plain object, false otherwise.
13
+ */
14
+ export declare const isPlainObjectValue: (value: unknown) => value is Record<string, unknown>;
15
+ /**
16
+ * Fast cloning function that can perform shallow or deep cloning based on the specified mode. It
17
+ * handles
18
+ * @param obj The object to clone.
19
+ * @param mode The cloning mode:
20
+ * - `none` (returns the original object)
21
+ * - `shallow` (creates a shallow copy)
22
+ * - `deep` (creates a deep copy).
23
+ *
24
+ * Defaults to "none".
25
+ * @returns The cloned object based on the specified mode.
26
+ */
27
+ export declare const fastClone: <T>(obj: T, mode?: "none" | "shallow" | "deep") => T;
28
+ /**
29
+ * Simple object flattener that excludes arrays (treats them as single values). This is faster than
30
+ * a full deep flatten and is suitable for typical Omni use cases where arrays are not meant to be
31
+ * flattened into individual entries. It also handles circular references by keeping track of seen
32
+ * objects and skipping them to avoid infinite recursion.
33
+ * @param obj The object to flatten.
34
+ * @param prefix The prefix to prepend to keys (used for recursion).
35
+ * @param seen A WeakSet to track seen objects and avoid circular references.
36
+ * @returns A new object with flattened keys and values.
37
+ */
38
+ export declare function flattenObjectSimple(obj: unknown, prefix?: string, seen?: WeakSet<object>): Record<string, unknown>;
39
+ /**
40
+ * Builds a nested object from flattened entries, using dot notation for nesting. Only includes
41
+ * entries that match the specified root path.
42
+ * @param entries An iterable of [path, value] pairs, where paths are dot-separated strings.
43
+ * @param rootPath An optional root path to filter entries. Only entries that are exactly this path
44
+ * or start with this path followed by a dot will be included. If empty, all entries are included.
45
+ * @returns A nested object constructed from the entries, or undefined if no entries matched the
46
+ * root path.
47
+ */
48
+ export declare function buildObjectFromEntries(entries: Iterable<[string, unknown]>, rootPath: string): Record<string, unknown> | undefined;
49
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/core/object.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,KAAG,OAG1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAElF,CAAC;AAGF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,OAAM,MAAM,GAAG,SAAS,GAAG,MAAe,KAAG,CAuBjF,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,SAAK,EAAE,IAAI,kBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBpH;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAiClI"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Checks if a value is a primitive (string, number, boolean, null, undefined) or an object. This is
3
+ * used to determine if we can return the value directly without cloning, as primitives are
4
+ * immutable and safe to return as-is.
5
+ * @param val The value to check.
6
+ * @returns True if the value is a primitive, false if it's an object or function.
7
+ */
8
+ export const isPrimitive = (val) => {
9
+ const type = typeof val;
10
+ return val === null || type !== "object";
11
+ };
12
+ /**
13
+ * Checks if a value is a plain object (not null, not an array). This is used to determine if we can
14
+ * @param value The value to check.
15
+ * @returns True if the value is a plain object, false otherwise.
16
+ */
17
+ export const isPlainObjectValue = (value) => {
18
+ return typeof value === "object" && value !== null && !Array.isArray(value);
19
+ };
20
+ // Optimized shallow clone (no deep clone by default)
21
+ /**
22
+ * Fast cloning function that can perform shallow or deep cloning based on the specified mode. It
23
+ * handles
24
+ * @param obj The object to clone.
25
+ * @param mode The cloning mode:
26
+ * - `none` (returns the original object)
27
+ * - `shallow` (creates a shallow copy)
28
+ * - `deep` (creates a deep copy).
29
+ *
30
+ * Defaults to "none".
31
+ * @returns The cloned object based on the specified mode.
32
+ */
33
+ export const fastClone = (obj, mode = "none") => {
34
+ if (mode === "none" || isPrimitive(obj))
35
+ return obj;
36
+ if (mode === "shallow") {
37
+ if (Array.isArray(obj))
38
+ return [...obj];
39
+ if (obj instanceof Date)
40
+ return new Date(obj);
41
+ return { ...obj };
42
+ }
43
+ if (mode === "deep") {
44
+ if (Array.isArray(obj))
45
+ return obj.map((item) => fastClone(item, "deep"));
46
+ if (obj instanceof Date)
47
+ return new Date(obj);
48
+ const copy = {};
49
+ for (const key in obj) {
50
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
51
+ copy[key] = fastClone(obj[key], "deep");
52
+ }
53
+ }
54
+ return copy;
55
+ }
56
+ return obj;
57
+ };
58
+ /**
59
+ * Simple object flattener that excludes arrays (treats them as single values). This is faster than
60
+ * a full deep flatten and is suitable for typical Omni use cases where arrays are not meant to be
61
+ * flattened into individual entries. It also handles circular references by keeping track of seen
62
+ * objects and skipping them to avoid infinite recursion.
63
+ * @param obj The object to flatten.
64
+ * @param prefix The prefix to prepend to keys (used for recursion).
65
+ * @param seen A WeakSet to track seen objects and avoid circular references.
66
+ * @returns A new object with flattened keys and values.
67
+ */
68
+ export function flattenObjectSimple(obj, prefix = "", seen = new WeakSet()) {
69
+ const result = {};
70
+ if (!isPlainObjectValue(obj))
71
+ return result;
72
+ if (seen.has(obj))
73
+ return result;
74
+ seen.add(obj);
75
+ for (const key in obj) {
76
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
77
+ const value = obj[key];
78
+ const newKey = prefix ? `${prefix}.${key}` : key;
79
+ if (isPlainObjectValue(value)) {
80
+ Object.assign(result, flattenObjectSimple(value, newKey, seen));
81
+ }
82
+ else {
83
+ result[newKey] = value;
84
+ }
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ /**
90
+ * Builds a nested object from flattened entries, using dot notation for nesting. Only includes
91
+ * entries that match the specified root path.
92
+ * @param entries An iterable of [path, value] pairs, where paths are dot-separated strings.
93
+ * @param rootPath An optional root path to filter entries. Only entries that are exactly this path
94
+ * or start with this path followed by a dot will be included. If empty, all entries are included.
95
+ * @returns A nested object constructed from the entries, or undefined if no entries matched the
96
+ * root path.
97
+ */
98
+ export function buildObjectFromEntries(entries, rootPath) {
99
+ const root = {};
100
+ const prefix = rootPath ? rootPath + "." : "";
101
+ let found = false;
102
+ for (const [path, value] of entries) {
103
+ if (rootPath && path !== rootPath && !path.startsWith(prefix))
104
+ continue;
105
+ if (!rootPath && !path)
106
+ continue;
107
+ const relative = rootPath ? (path === rootPath ? "" : path.slice(prefix.length)) : path;
108
+ if (!relative) {
109
+ if (isPlainObjectValue(value))
110
+ Object.assign(root, value);
111
+ continue;
112
+ }
113
+ const parts = relative.split(".").filter(Boolean);
114
+ if (!parts.length)
115
+ continue;
116
+ let cursor = root;
117
+ for (let i = 0; i < parts.length; i++) {
118
+ const part = parts[i];
119
+ if (!part)
120
+ continue;
121
+ if (i === parts.length - 1) {
122
+ cursor[part] = value;
123
+ found = true;
124
+ }
125
+ else {
126
+ if (!isPlainObjectValue(cursor[part]))
127
+ cursor[part] = {};
128
+ cursor = cursor[part];
129
+ }
130
+ }
131
+ }
132
+ return found || Object.keys(root).length ? root : undefined;
133
+ }
134
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/core/object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const normalizePath: (path: string) => string;
2
+ export declare const joinPath: (...parts: Array<string | undefined | null>) => string;
3
+ export declare const getPathParts: (path: string) => string[];
4
+ export declare const isChildPath: (rootPath: string, path: string) => boolean;
5
+ export declare const getRelativePath: (rootPath: string, path: string) => string;
6
+ export declare const getParentPaths: (path: string) => string[];
7
+ export declare const wildcardToRegExp: (pattern: string) => RegExp;
8
+ export declare const wildcardScore: (pattern: string) => number;
9
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAK5C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,GAAG,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,KAAG,MAErE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,EAAoC,CAAC;AAEvF,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,OAI5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,MAMhE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,EAKnD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAMlD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,MAI/C,CAAC"}
@@ -0,0 +1,46 @@
1
+ export const normalizePath = (path) => {
2
+ if (typeof path !== "string")
3
+ throw new Error("Omni path must be a string");
4
+ const normalized = path.trim().replace(/^\.+|\.+$/g, "").replace(/\.{2,}/g, ".");
5
+ if (!normalized)
6
+ throw new Error("Omni path cannot be empty");
7
+ return normalized;
8
+ };
9
+ export const joinPath = (...parts) => {
10
+ return parts.filter((p) => typeof p === "string" && p.trim() !== "").join(".").replace(/\.{2,}/g, ".");
11
+ };
12
+ export const getPathParts = (path) => normalizePath(path).split(".");
13
+ export const isChildPath = (rootPath, path) => {
14
+ const root = normalizePath(rootPath);
15
+ const target = normalizePath(path);
16
+ return target === root || target.startsWith(root + ".");
17
+ };
18
+ export const getRelativePath = (rootPath, path) => {
19
+ const root = normalizePath(rootPath);
20
+ const target = normalizePath(path);
21
+ if (target === root)
22
+ return "";
23
+ if (!target.startsWith(root + "."))
24
+ return target;
25
+ return target.slice(root.length + 1);
26
+ };
27
+ export const getParentPaths = (path) => {
28
+ const parts = getPathParts(path);
29
+ const parents = [];
30
+ for (let i = parts.length - 1; i > 0; i--)
31
+ parents.push(parts.slice(0, i).join("."));
32
+ return parents;
33
+ };
34
+ export const wildcardToRegExp = (pattern) => {
35
+ const escaped = normalizePath(pattern)
36
+ .split(".")
37
+ .map((part) => (part === "*" ? "[^.]+" : part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")))
38
+ .join("\\.");
39
+ return new RegExp(`^${escaped}$`);
40
+ };
41
+ export const wildcardScore = (pattern) => {
42
+ return normalizePath(pattern)
43
+ .split(".")
44
+ .reduce((score, part) => score + (part === "*" ? 1 : 10), 0);
45
+ };
46
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { OmniDataTypeDefinition, OmniDataTypeName } from "../types/datatype_types";
2
+ export declare class DataTypeRegistry {
3
+ private types;
4
+ register(definition: OmniDataTypeDefinition): void;
5
+ registerMany(definitions: OmniDataTypeDefinition[]): void;
6
+ get(name: OmniDataTypeName | undefined): OmniDataTypeDefinition | undefined;
7
+ has(name: OmniDataTypeName): boolean;
8
+ list(): OmniDataTypeDefinition[];
9
+ }
10
+ //# sourceMappingURL=DataTypeRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTypeRegistry.d.ts","sourceRoot":"","sources":["../../src/datatypes/DataTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAExF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAA6C;IAE1D,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAOlD,YAAY,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAIzD,GAAG,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,sBAAsB,GAAG,SAAS;IAK3E,GAAG,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO;IAIpC,IAAI,IAAI,sBAAsB,EAAE;CAGjC"}
@@ -0,0 +1,27 @@
1
+ export class DataTypeRegistry {
2
+ constructor() {
3
+ this.types = new Map();
4
+ }
5
+ register(definition) {
6
+ if (!definition.name || typeof definition.name !== "string") {
7
+ throw new Error("DataType definition requires a string name");
8
+ }
9
+ this.types.set(definition.name, definition);
10
+ }
11
+ registerMany(definitions) {
12
+ for (const definition of definitions)
13
+ this.register(definition);
14
+ }
15
+ get(name) {
16
+ if (!name)
17
+ return undefined;
18
+ return this.types.get(name);
19
+ }
20
+ has(name) {
21
+ return this.types.has(name);
22
+ }
23
+ list() {
24
+ return Array.from(this.types.values());
25
+ }
26
+ }
27
+ //# sourceMappingURL=DataTypeRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTypeRegistry.js","sourceRoot":"","sources":["../../src/datatypes/DataTypeRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAA7B;QACU,UAAK,GAAG,IAAI,GAAG,EAAkC,CAAC;IAyB5D,CAAC;IAvBC,QAAQ,CAAC,UAAkC;QACzC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,WAAqC;QAChD,KAAK,MAAM,UAAU,IAAI,WAAW;YAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,GAAG,CAAC,IAAkC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,IAAsB;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { OmniDataTypeDefinition } from "../types/datatype_types";
2
+ export declare const builtInDataTypes: OmniDataTypeDefinition[];
3
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/datatypes/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAwBtE,eAAO,MAAM,gBAAgB,EAAE,sBAAsB,EAcpD,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { OMNI_REJECT } from "../types/datatype_types";
2
+ import { isPlainObjectValue } from "../core/object";
3
+ const numberCoerce = (value) => {
4
+ if (typeof value === "number")
5
+ return value;
6
+ if (typeof value === "string" && value.trim() !== "") {
7
+ const n = Number(value);
8
+ return Number.isFinite(n) ? n : OMNI_REJECT;
9
+ }
10
+ return OMNI_REJECT;
11
+ };
12
+ const booleanCoerce = (value) => {
13
+ if (typeof value === "boolean")
14
+ return value;
15
+ if (typeof value === "string") {
16
+ const normalized = value.trim().toLowerCase();
17
+ if (["true", "1", "yes", "on"].includes(normalized))
18
+ return true;
19
+ if (["false", "0", "no", "off"].includes(normalized))
20
+ return false;
21
+ }
22
+ if (typeof value === "number")
23
+ return value !== 0;
24
+ return OMNI_REJECT;
25
+ };
26
+ export const builtInDataTypes = [
27
+ { name: "any", validate: () => true },
28
+ { name: "unknown", validate: () => true },
29
+ { name: "string", coerce: (value) => (value == null ? OMNI_REJECT : String(value)), validate: (value) => typeof value === "string" },
30
+ { name: "number", coerce: numberCoerce, validate: (value) => typeof value === "number" && Number.isFinite(value) },
31
+ { name: "integer", base: "number", coerce: (value) => {
32
+ const n = numberCoerce(value);
33
+ return typeof n === "number" && Number.isInteger(n) ? n : OMNI_REJECT;
34
+ }, validate: (value) => typeof value === "number" && Number.isInteger(value) },
35
+ { name: "boolean", coerce: booleanCoerce, validate: (value) => typeof value === "boolean" },
36
+ { name: "object", validate: isPlainObjectValue },
37
+ { name: "array", validate: Array.isArray },
38
+ { name: "null", validate: (value) => value === null },
39
+ { name: "undefined", validate: (value) => value === undefined },
40
+ ];
41
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/datatypes/builtins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,EAAE;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9C,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,EAAE;IACvC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAClD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;IACrC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;IACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,EAAE;IACpI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAClH,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACnD,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACxE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;IAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,SAAS,EAAE;IAC3F,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAChD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,EAAE;IACrD,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,EAAE;CAChE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { OmniValueObject } from "../types/store_types";
2
+ export declare function ensureHistory(valueObj: OmniValueObject, oldValue: unknown, limit?: number): void;
3
+ export declare function canUndoValue(valueObj: OmniValueObject | undefined): boolean;
4
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/history/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,SAAK,GAAG,IAAI,CAmB5F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAE3E"}
@@ -0,0 +1,22 @@
1
+ export function ensureHistory(valueObj, oldValue, limit = 10) {
2
+ if (!valueObj.history) {
3
+ valueObj.history = [oldValue];
4
+ valueObj.historySize = limit;
5
+ valueObj.historyIndex = -1;
6
+ return;
7
+ }
8
+ if (typeof valueObj.historyIndex === "number" && valueObj.historyIndex > -1) {
9
+ valueObj.history.splice(valueObj.history.length - valueObj.historyIndex);
10
+ valueObj.historyIndex = -1;
11
+ }
12
+ if (valueObj.history.length === 0 || valueObj.history[valueObj.history.length - 1] !== oldValue) {
13
+ valueObj.history.push(oldValue);
14
+ }
15
+ const max = valueObj.historySize ?? limit;
16
+ while (valueObj.history.length > max)
17
+ valueObj.history.shift();
18
+ }
19
+ export function canUndoValue(valueObj) {
20
+ return !!valueObj?.history?.length;
21
+ }
22
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/history/history.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,QAAyB,EAAE,QAAiB,EAAE,KAAK,GAAG,EAAE;IACpF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,QAAQ,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;QAC7B,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,IAAI,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5E,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QACzE,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,IAAI,KAAK,CAAC;IAC1C,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;QAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAqC;IAChE,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;AACrC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { OmniTimelineAction, TimelineEntry } from "../types/store_types";
2
+ export declare class Timeline {
3
+ private entries;
4
+ private counter;
5
+ enabled: boolean;
6
+ maxSize: number;
7
+ add(path: string, oldValue: unknown, newValue: unknown, action: OmniTimelineAction): void;
8
+ list(): TimelineEntry[];
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/history/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE9E,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,UAAQ;IACf,OAAO,SAAQ;IAEf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAMzF,IAAI,IAAI,aAAa,EAAE;IAIvB,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,22 @@
1
+ export class Timeline {
2
+ constructor() {
3
+ this.entries = [];
4
+ this.counter = 0;
5
+ this.enabled = true;
6
+ this.maxSize = 1000;
7
+ }
8
+ add(path, oldValue, newValue, action) {
9
+ if (!this.enabled)
10
+ return;
11
+ this.entries.push({ timestamp: Date.now(), path, oldValue, newValue, action, index: ++this.counter });
12
+ while (this.entries.length > this.maxSize)
13
+ this.entries.shift();
14
+ }
15
+ list() {
16
+ return [...this.entries];
17
+ }
18
+ clear() {
19
+ this.entries = [];
20
+ }
21
+ }
22
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/history/timeline.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IAArB;QACU,YAAO,GAAoB,EAAE,CAAC;QAC9B,YAAO,GAAG,CAAC,CAAC;QAEpB,YAAO,GAAG,IAAI,CAAC;QACf,YAAO,GAAG,IAAI,CAAC;IAejB,CAAC;IAbC,GAAG,CAAC,IAAY,EAAE,QAAiB,EAAE,QAAiB,EAAE,MAA0B;QAChF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtG,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClE,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ export { Omni, Omni as OmniTurbo } from "./Omni";
2
+ export { default } from "./Omni";
3
+ export * from "./types/result_types";
4
+ export * from "./types/issue_types";
5
+ export * from "./types/schema_types";
6
+ export * from "./types/datatype_types";
7
+ export * from "./types/privacy_types";
8
+ export * from "./types/store_types";
9
+ export * from "./types/options_types";
10
+ export * from "./datatypes/DataTypeRegistry";
11
+ export * from "./schema/SchemaRegistry";
12
+ export * from "./privacy/PrivacyRegistry";
13
+ export * from "./aliases/AliasRegistry";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export { Omni, Omni as OmniTurbo } from "./Omni";
2
+ export { default } from "./Omni";
3
+ export * from "./types/result_types";
4
+ export * from "./types/issue_types";
5
+ export * from "./types/schema_types";
6
+ export * from "./types/datatype_types";
7
+ export * from "./types/privacy_types";
8
+ export * from "./types/store_types";
9
+ export * from "./types/options_types";
10
+ export * from "./datatypes/DataTypeRegistry";
11
+ export * from "./schema/SchemaRegistry";
12
+ export * from "./privacy/PrivacyRegistry";
13
+ export * from "./aliases/AliasRegistry";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { OmniIssue } from "../types/issue_types";
2
+ import type { PrivacyRule, OmniWriteToken } from "../types/privacy_types";
3
+ export declare class PrivacyRegistry {
4
+ private rules;
5
+ createRule(rootPath: string, options?: {
6
+ owner?: string;
7
+ canWriteChildren?: boolean;
8
+ deletePolicy?: "anyone" | "owner" | "never";
9
+ }): OmniWriteToken;
10
+ getRuleForPath(path: string): PrivacyRule | undefined;
11
+ canWrite(path: string, token?: OmniWriteToken): {
12
+ allowed: boolean;
13
+ issue?: OmniIssue;
14
+ };
15
+ canDelete(path: string, token?: OmniWriteToken): {
16
+ allowed: boolean;
17
+ issue?: OmniIssue;
18
+ };
19
+ removeRule(rootPath: string): void;
20
+ list(): PrivacyRule[];
21
+ }
22
+ //# sourceMappingURL=PrivacyRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrivacyRegistry.d.ts","sourceRoot":"","sources":["../../src/privacy/PrivacyRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE1E,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAkC;IAE/C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;KAAO,GAAG,cAAc;IAqBvJ,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAQrD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE;IAyBvF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE;IAqBxF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC,IAAI,IAAI,WAAW,EAAE;CAGtB"}
@@ -0,0 +1,84 @@
1
+ import { generateFastId } from "../core/ids";
2
+ import { isChildPath, normalizePath } from "../core/path";
3
+ export class PrivacyRegistry {
4
+ constructor() {
5
+ this.rules = new Map();
6
+ }
7
+ createRule(rootPath, options = {}) {
8
+ const normalized = normalizePath(rootPath);
9
+ const token = {
10
+ id: generateFastId("token"),
11
+ rootPath: normalized,
12
+ owner: options.owner,
13
+ canWriteChildren: options.canWriteChildren ?? true,
14
+ created: Date.now(),
15
+ };
16
+ this.rules.set(normalized, {
17
+ rootPath: normalized,
18
+ tokenId: token.id,
19
+ owner: options.owner,
20
+ canWriteChildren: token.canWriteChildren,
21
+ deletePolicy: options.deletePolicy ?? "owner",
22
+ });
23
+ return token;
24
+ }
25
+ getRuleForPath(path) {
26
+ const normalized = normalizePath(path);
27
+ const rules = Array.from(this.rules.values())
28
+ .filter((rule) => isChildPath(rule.rootPath, normalized))
29
+ .sort((a, b) => b.rootPath.length - a.rootPath.length);
30
+ return rules[0];
31
+ }
32
+ canWrite(path, token) {
33
+ const normalized = normalizePath(path);
34
+ const rule = this.getRuleForPath(normalized);
35
+ if (!rule)
36
+ return { allowed: true };
37
+ const isRoot = rule.rootPath === normalized;
38
+ const validToken = token?.id === rule.tokenId;
39
+ const childAllowed = isRoot || rule.canWriteChildren;
40
+ if (validToken && childAllowed)
41
+ return { allowed: true };
42
+ return {
43
+ allowed: false,
44
+ issue: {
45
+ code: "OMNI_PRIVATE_PATH",
46
+ severity: "error",
47
+ path: normalized,
48
+ message: `Path '${normalized}' is private${rule.owner ? ` to ${rule.owner}` : ""}. Use the private setter returned when the path was created.`,
49
+ source: "privacy",
50
+ expected: "valid write token",
51
+ received: token?.id ?? "none",
52
+ },
53
+ };
54
+ }
55
+ canDelete(path, token) {
56
+ const normalized = normalizePath(path);
57
+ const rule = this.getRuleForPath(normalized);
58
+ if (!rule)
59
+ return { allowed: true };
60
+ if (rule.deletePolicy === "anyone")
61
+ return { allowed: true };
62
+ if (rule.deletePolicy === "owner" && token?.id === rule.tokenId)
63
+ return { allowed: true };
64
+ return {
65
+ allowed: false,
66
+ issue: {
67
+ code: "OMNI_PRIVATE_DELETE_DENIED",
68
+ severity: "error",
69
+ path: normalized,
70
+ message: `Path '${normalized}' cannot be deleted without its owner token.`,
71
+ source: "privacy",
72
+ expected: rule.deletePolicy,
73
+ received: token?.id ?? "none",
74
+ },
75
+ };
76
+ }
77
+ removeRule(rootPath) {
78
+ this.rules.delete(normalizePath(rootPath));
79
+ }
80
+ list() {
81
+ return Array.from(this.rules.values());
82
+ }
83
+ }
84
+ //# sourceMappingURL=PrivacyRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrivacyRegistry.js","sourceRoot":"","sources":["../../src/privacy/PrivacyRegistry.ts"],"names":[],"mappings":"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"}