@signalium/query 1.0.13 → 1.0.14

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 (151) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/development/index.js +2985 -0
  3. package/dist/cjs/development/index.js.map +1 -0
  4. package/dist/cjs/development/react/index.js +52 -0
  5. package/dist/cjs/development/react/index.js.map +1 -0
  6. package/dist/cjs/{stores/shared.js → development/shared-5acOO-tS.js} +11 -14
  7. package/dist/cjs/development/shared-5acOO-tS.js.map +1 -0
  8. package/dist/cjs/development/stores/async.js +304 -0
  9. package/dist/cjs/development/stores/async.js.map +1 -0
  10. package/dist/cjs/development/stores/sync.js +214 -0
  11. package/dist/cjs/development/stores/sync.js.map +1 -0
  12. package/dist/cjs/production/index.js +2985 -0
  13. package/dist/cjs/production/index.js.map +1 -0
  14. package/dist/cjs/production/package.json +3 -0
  15. package/dist/cjs/production/react/index.js +52 -0
  16. package/dist/cjs/production/react/index.js.map +1 -0
  17. package/dist/cjs/production/shared-5acOO-tS.js +20 -0
  18. package/dist/cjs/production/shared-5acOO-tS.js.map +1 -0
  19. package/dist/cjs/production/stores/async.js +304 -0
  20. package/dist/cjs/production/stores/async.js.map +1 -0
  21. package/dist/cjs/production/stores/sync.js +214 -0
  22. package/dist/cjs/production/stores/sync.js.map +1 -0
  23. package/dist/esm/EntityMap.d.ts +22 -0
  24. package/dist/esm/EntityMap.d.ts.map +1 -1
  25. package/dist/esm/MutationResult.d.ts +43 -0
  26. package/dist/esm/MutationResult.d.ts.map +1 -0
  27. package/dist/esm/QueryClient.d.ts +31 -2
  28. package/dist/esm/QueryClient.d.ts.map +1 -1
  29. package/dist/esm/development/index.js +2985 -0
  30. package/dist/esm/development/index.js.map +1 -0
  31. package/dist/esm/development/react/index.js +52 -0
  32. package/dist/esm/development/react/index.js.map +1 -0
  33. package/dist/esm/development/shared-Br5plsKm.js +21 -0
  34. package/dist/esm/development/shared-Br5plsKm.js.map +1 -0
  35. package/dist/esm/development/stores/async.js +304 -0
  36. package/dist/esm/development/stores/async.js.map +1 -0
  37. package/dist/esm/development/stores/sync.js +214 -0
  38. package/dist/esm/development/stores/sync.js.map +1 -0
  39. package/dist/esm/index.d.ts +4 -0
  40. package/dist/esm/index.d.ts.map +1 -1
  41. package/dist/esm/mutation.d.ts +82 -0
  42. package/dist/esm/mutation.d.ts.map +1 -0
  43. package/dist/esm/parseEntities.d.ts.map +1 -1
  44. package/dist/esm/production/index.js +2985 -0
  45. package/dist/esm/production/index.js.map +1 -0
  46. package/dist/esm/production/react/index.js +52 -0
  47. package/dist/esm/production/react/index.js.map +1 -0
  48. package/dist/esm/production/shared-Br5plsKm.js +21 -0
  49. package/dist/esm/production/shared-Br5plsKm.js.map +1 -0
  50. package/dist/esm/production/stores/async.js +304 -0
  51. package/dist/esm/production/stores/async.js.map +1 -0
  52. package/dist/esm/production/stores/sync.js +214 -0
  53. package/dist/esm/production/stores/sync.js.map +1 -0
  54. package/dist/esm/proxy.d.ts +6 -5
  55. package/dist/esm/proxy.d.ts.map +1 -1
  56. package/dist/esm/query.d.ts +3 -1
  57. package/dist/esm/query.d.ts.map +1 -1
  58. package/dist/esm/typeDefs.d.ts +4 -2
  59. package/dist/esm/typeDefs.d.ts.map +1 -1
  60. package/dist/esm/types.d.ts +71 -4
  61. package/dist/esm/types.d.ts.map +1 -1
  62. package/dist/esm/utils.d.ts +35 -0
  63. package/dist/esm/utils.d.ts.map +1 -1
  64. package/package.json +55 -21
  65. package/stores/async.js +1 -1
  66. package/stores/sync.js +1 -1
  67. package/dist/cjs/EntityMap.js +0 -103
  68. package/dist/cjs/EntityMap.js.map +0 -1
  69. package/dist/cjs/MemoryEvictionManager.js +0 -56
  70. package/dist/cjs/MemoryEvictionManager.js.map +0 -1
  71. package/dist/cjs/NetworkManager.js +0 -125
  72. package/dist/cjs/NetworkManager.js.map +0 -1
  73. package/dist/cjs/QueryClient.js +0 -162
  74. package/dist/cjs/QueryClient.js.map +0 -1
  75. package/dist/cjs/QueryResult.js +0 -920
  76. package/dist/cjs/QueryResult.js.map +0 -1
  77. package/dist/cjs/RefetchManager.js +0 -88
  78. package/dist/cjs/RefetchManager.js.map +0 -1
  79. package/dist/cjs/errors.js +0 -129
  80. package/dist/cjs/errors.js.map +0 -1
  81. package/dist/cjs/index.js +0 -43
  82. package/dist/cjs/index.js.map +0 -1
  83. package/dist/cjs/parseEntities.js +0 -142
  84. package/dist/cjs/parseEntities.js.map +0 -1
  85. package/dist/cjs/pathInterpolator.js +0 -69
  86. package/dist/cjs/pathInterpolator.js.map +0 -1
  87. package/dist/cjs/proxy.js +0 -263
  88. package/dist/cjs/proxy.js.map +0 -1
  89. package/dist/cjs/query.js +0 -184
  90. package/dist/cjs/query.js.map +0 -1
  91. package/dist/cjs/react/index.js +0 -6
  92. package/dist/cjs/react/index.js.map +0 -1
  93. package/dist/cjs/react/use-query.js +0 -56
  94. package/dist/cjs/react/use-query.js.map +0 -1
  95. package/dist/cjs/stores/async.js +0 -344
  96. package/dist/cjs/stores/async.js.map +0 -1
  97. package/dist/cjs/stores/shared.js.map +0 -1
  98. package/dist/cjs/stores/sync.js +0 -240
  99. package/dist/cjs/stores/sync.js.map +0 -1
  100. package/dist/cjs/tsconfig.cjs.tsbuildinfo +0 -1
  101. package/dist/cjs/type-utils.js +0 -3
  102. package/dist/cjs/type-utils.js.map +0 -1
  103. package/dist/cjs/typeDefs.js +0 -620
  104. package/dist/cjs/typeDefs.js.map +0 -1
  105. package/dist/cjs/types.js +0 -33
  106. package/dist/cjs/types.js.map +0 -1
  107. package/dist/cjs/utils.js +0 -23
  108. package/dist/cjs/utils.js.map +0 -1
  109. package/dist/esm/EntityMap.js +0 -99
  110. package/dist/esm/EntityMap.js.map +0 -1
  111. package/dist/esm/MemoryEvictionManager.js +0 -51
  112. package/dist/esm/MemoryEvictionManager.js.map +0 -1
  113. package/dist/esm/NetworkManager.js +0 -120
  114. package/dist/esm/NetworkManager.js.map +0 -1
  115. package/dist/esm/QueryClient.js +0 -154
  116. package/dist/esm/QueryClient.js.map +0 -1
  117. package/dist/esm/QueryResult.js +0 -916
  118. package/dist/esm/QueryResult.js.map +0 -1
  119. package/dist/esm/RefetchManager.js +0 -83
  120. package/dist/esm/RefetchManager.js.map +0 -1
  121. package/dist/esm/errors.js +0 -125
  122. package/dist/esm/errors.js.map +0 -1
  123. package/dist/esm/index.js +0 -8
  124. package/dist/esm/index.js.map +0 -1
  125. package/dist/esm/parseEntities.js +0 -135
  126. package/dist/esm/parseEntities.js.map +0 -1
  127. package/dist/esm/pathInterpolator.js +0 -66
  128. package/dist/esm/pathInterpolator.js.map +0 -1
  129. package/dist/esm/proxy.js +0 -254
  130. package/dist/esm/proxy.js.map +0 -1
  131. package/dist/esm/query.js +0 -177
  132. package/dist/esm/query.js.map +0 -1
  133. package/dist/esm/react/index.js +0 -2
  134. package/dist/esm/react/index.js.map +0 -1
  135. package/dist/esm/react/use-query.js +0 -53
  136. package/dist/esm/react/use-query.js.map +0 -1
  137. package/dist/esm/stores/async.js +0 -340
  138. package/dist/esm/stores/async.js.map +0 -1
  139. package/dist/esm/stores/shared.js +0 -13
  140. package/dist/esm/stores/shared.js.map +0 -1
  141. package/dist/esm/stores/sync.js +0 -234
  142. package/dist/esm/stores/sync.js.map +0 -1
  143. package/dist/esm/type-utils.js +0 -2
  144. package/dist/esm/type-utils.js.map +0 -1
  145. package/dist/esm/typeDefs.js +0 -606
  146. package/dist/esm/typeDefs.js.map +0 -1
  147. package/dist/esm/types.js +0 -30
  148. package/dist/esm/types.js.map +0 -1
  149. package/dist/esm/utils.js +0 -20
  150. package/dist/esm/utils.js.map +0 -1
  151. /package/dist/cjs/{package.json → development/package.json} +0 -0
@@ -1,620 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.t = exports.CaseInsensitiveSet = exports.ValidatorDef = void 0;
4
- exports.defineArray = defineArray;
5
- exports.defineRecord = defineRecord;
6
- exports.defineObject = defineObject;
7
- exports.reifyObjectShape = reifyObjectShape;
8
- exports.getFormat = getFormat;
9
- exports.getFormatSerializer = getFormatSerializer;
10
- exports.getFormatName = getFormatName;
11
- exports.registerFormat = registerFormat;
12
- exports.entity = entity;
13
- const types_js_1 = require("./types.js");
14
- const utils_1 = require("signalium/utils");
15
- const entries = Object.entries;
16
- const isArray = Array.isArray;
17
- class ValidatorDef {
18
- kind;
19
- mask;
20
- _optional;
21
- _nullable;
22
- _nullish;
23
- _shapeKey = undefined;
24
- _shape;
25
- subEntityPaths = undefined;
26
- typenameField = undefined;
27
- typenameValue = undefined;
28
- idField = undefined;
29
- values = undefined;
30
- /**
31
- * Lazy factory function for creating entity methods.
32
- * Evaluated once during reifyShape() and cached in _methods.
33
- */
34
- _methodsFactory = undefined;
35
- /**
36
- * Cached methods object from evaluating _methodsFactory.
37
- * Populated during reifyShape() - the same methods object is shared across all proxies,
38
- * but each proxy binds its own reactive method wrappers.
39
- */
40
- _methods = undefined;
41
- /**
42
- * Entity configuration including stream options.
43
- */
44
- _entityConfig = undefined;
45
- constructor(kind, mask, shape, values = undefined) {
46
- this.kind = kind;
47
- this.mask = mask;
48
- this._shape = shape;
49
- this.values = values;
50
- }
51
- static cloneWith(def, mask, values = undefined) {
52
- const newDef = new ValidatorDef(def.kind, mask | def.mask, def._shape, values);
53
- newDef.subEntityPaths = def.subEntityPaths;
54
- newDef.values = def.values;
55
- newDef.typenameField = def.typenameField;
56
- newDef.typenameValue = def.typenameValue;
57
- newDef.idField = def.idField;
58
- newDef._methodsFactory = def._methodsFactory;
59
- newDef._methods = def._methods;
60
- newDef._entityConfig = def._entityConfig;
61
- return newDef;
62
- }
63
- reifyShape() {
64
- if (this._shapeKey === undefined) {
65
- switch (this.kind) {
66
- case 5 /* ComplexTypeDefKind.ENTITY */: {
67
- const shape = this._shape();
68
- this._shape = reifyObjectShape(this, shape);
69
- // Evaluate and cache the methods factory once during shape reification
70
- if (this._methodsFactory && !this._methods) {
71
- this._methods = this._methodsFactory();
72
- }
73
- break;
74
- }
75
- case 0 /* ComplexTypeDefKind.OBJECT */:
76
- this._shape = reifyObjectShape(this, this._shape);
77
- break;
78
- case 1 /* ComplexTypeDefKind.UNION */:
79
- this._shape = reifyUnionShape(this, this._shape);
80
- break;
81
- case 3 /* ComplexTypeDefKind.ARRAY */:
82
- case 4 /* ComplexTypeDefKind.RECORD */: {
83
- const shape = this._shape;
84
- let shapeKey;
85
- if (shape instanceof ValidatorDef) {
86
- shapeKey = shape.shapeKey;
87
- if (shape.mask & (1024 /* Mask.ENTITY */ | 2048 /* Mask.HAS_SUB_ENTITY */)) {
88
- this.mask |= 2048 /* Mask.HAS_SUB_ENTITY */;
89
- }
90
- }
91
- else if (shape instanceof CaseInsensitiveSet) {
92
- shapeKey = (0, utils_1.hashValue)(Array.from(shape));
93
- }
94
- else {
95
- shapeKey = (0, utils_1.hashValue)(shape);
96
- }
97
- this._shapeKey = (0, utils_1.hashValue)([this.kind, this.mask, this.values, shapeKey]);
98
- break;
99
- }
100
- }
101
- }
102
- }
103
- get shape() {
104
- this.reifyShape();
105
- return this._shape;
106
- }
107
- get methods() {
108
- this.reifyShape();
109
- return this._methods;
110
- }
111
- get shapeKey() {
112
- this.reifyShape();
113
- return this._shapeKey;
114
- }
115
- set shapeKey(key) {
116
- this._shapeKey = key >>> 0;
117
- }
118
- get optional() {
119
- if (this._optional === undefined) {
120
- this._optional = ValidatorDef.cloneWith(this, 1 /* Mask.UNDEFINED */);
121
- }
122
- return this._optional;
123
- }
124
- get nullable() {
125
- if (this._nullable === undefined) {
126
- this._nullable = ValidatorDef.cloneWith(this, 2 /* Mask.NULL */);
127
- }
128
- return this._nullable;
129
- }
130
- get nullish() {
131
- if (this._nullish === undefined) {
132
- this._nullish = ValidatorDef.cloneWith(this, 1 /* Mask.UNDEFINED */ | 2 /* Mask.NULL */);
133
- }
134
- return this._nullish;
135
- }
136
- /**
137
- * Creates a new ValidatorDef that extends this one with additional fields and optional methods.
138
- * Only valid for ENTITY and OBJECT types.
139
- * Prevents overriding of existing fields including id and typename.
140
- *
141
- * For entities, accepts a function that returns the new fields (lazy reification).
142
- * For objects, accepts the new fields directly.
143
- *
144
- * @param newFieldsOrGetter - New fields to add (lazy function for entities, direct object for objects)
145
- * @param newMethodsGetter - Optional lazy factory returning new methods to add (entities only, merged with existing)
146
- */
147
- extend(newFieldsOrGetter,
148
- // Note: ThisType here will be the extended entity type - TypeScript infers it from context
149
- newMethodsGetter) {
150
- // Validate that this is an extendable type (ENTITY or OBJECT)
151
- if (this.kind !== 5 /* ComplexTypeDefKind.ENTITY */ && this.kind !== 0 /* ComplexTypeDefKind.OBJECT */) {
152
- throw new Error('extend() can only be called on Entity or Object types');
153
- }
154
- if (this.kind === 5 /* ComplexTypeDefKind.ENTITY */) {
155
- // For entities, keep the shape lazy - only reify on first usage
156
- // This preserves the lazy evaluation pattern and supports circular references
157
- // We bind getParentShape to access the parent's `.shape` getter which properly
158
- // reifies and caches the shape, avoiding multiple reification calls
159
- const newFieldsGetter = newFieldsOrGetter;
160
- const parentMethodsFactory = this._methodsFactory;
161
- const extendedDef = new ValidatorDef(5 /* ComplexTypeDefKind.ENTITY */, this.mask, () => {
162
- const existingShape = this.shape;
163
- const newFields = newFieldsGetter();
164
- // Runtime validation: check for field conflicts
165
- for (const key of Object.keys(newFields)) {
166
- if (key in existingShape) {
167
- throw new Error(`Cannot extend: field '${key}' already exists in type definition`);
168
- }
169
- }
170
- return { ...existingShape, ...newFields };
171
- });
172
- // Merge methods factories if either parent or new methods exist
173
- if (parentMethodsFactory || newMethodsGetter) {
174
- extendedDef._methodsFactory = () => {
175
- const parentMethods = parentMethodsFactory ? parentMethodsFactory() : {};
176
- const newMethods = newMethodsGetter ? newMethodsGetter() : {};
177
- return { ...parentMethods, ...newMethods };
178
- };
179
- }
180
- // Preserve entity config from parent
181
- extendedDef._entityConfig = this._entityConfig;
182
- return extendedDef;
183
- }
184
- else {
185
- // For objects, reify immediately since they're not lazy
186
- this.reifyShape();
187
- const existingShape = this._shape;
188
- const newFields = newFieldsOrGetter;
189
- // Runtime validation: check for field conflicts
190
- for (const key of Object.keys(newFields)) {
191
- if (key in existingShape) {
192
- throw new Error(`Cannot extend: field '${key}' already exists in type definition`);
193
- }
194
- }
195
- return new ValidatorDef(0 /* ComplexTypeDefKind.OBJECT */, this.mask, { ...existingShape, ...newFields });
196
- }
197
- }
198
- }
199
- exports.ValidatorDef = ValidatorDef;
200
- // -----------------------------------------------------------------------------
201
- // Case-Insensitive Enum Set
202
- // -----------------------------------------------------------------------------
203
- /**
204
- * A Set-like class for enum values that matches string values case-insensitively.
205
- * Non-string values (numbers, booleans) are matched exactly.
206
- * Returns the canonical (originally defined) casing when a match is found.
207
- */
208
- class CaseInsensitiveSet extends Set {
209
- lowercaseMap; // lowercase -> canonical (strings only)
210
- constructor(values) {
211
- super(values);
212
- this.lowercaseMap = new Map();
213
- for (const value of values) {
214
- if (typeof value === 'string') {
215
- const lowercase = value.toLowerCase();
216
- const existing = this.lowercaseMap.get(lowercase);
217
- if (existing !== undefined) {
218
- throw new Error(`Case-insensitive enum cannot have multiple values with the same lowercase form: '${existing}' and '${value}' both become '${lowercase}'`);
219
- }
220
- this.lowercaseMap.set(lowercase, value);
221
- }
222
- }
223
- }
224
- /**
225
- * Check if a value exists in the set (case-insensitively for strings).
226
- * Used for backwards compatibility with Set-based checks.
227
- */
228
- has(value) {
229
- return this.get(value) !== undefined;
230
- }
231
- /**
232
- * Get the canonical value for a given input.
233
- * For strings, performs case-insensitive lookup and returns the canonical casing.
234
- * For numbers/booleans, performs exact match.
235
- * Returns undefined if no match is found.
236
- */
237
- get(value) {
238
- if (typeof value === 'string') {
239
- return this.lowercaseMap.get(value.toLowerCase());
240
- }
241
- if (super.has(value)) {
242
- return value;
243
- }
244
- return undefined;
245
- }
246
- }
247
- exports.CaseInsensitiveSet = CaseInsensitiveSet;
248
- // -----------------------------------------------------------------------------
249
- // Complex Type Definitions
250
- // -----------------------------------------------------------------------------
251
- function defineArray(shape) {
252
- return new ValidatorDef(3 /* ComplexTypeDefKind.ARRAY */, 64 /* Mask.ARRAY */, shape);
253
- }
254
- function defineRecord(shape) {
255
- return new ValidatorDef(4 /* ComplexTypeDefKind.RECORD */, 256 /* Mask.RECORD */ | 32 /* Mask.OBJECT */, shape);
256
- }
257
- function defineObject(shape) {
258
- return new ValidatorDef(0 /* ComplexTypeDefKind.OBJECT */, 32 /* Mask.OBJECT */, shape);
259
- }
260
- function defineUnion(...types) {
261
- let mask = 0;
262
- let definition;
263
- let shape;
264
- let values;
265
- for (const type of types) {
266
- if (typeof type === 'number') {
267
- mask |= type;
268
- continue;
269
- }
270
- if (type instanceof Set) {
271
- if (values === undefined) {
272
- values = new Set(type);
273
- }
274
- else {
275
- for (const val of type) {
276
- values.add(val);
277
- }
278
- }
279
- continue;
280
- }
281
- if (definition === undefined) {
282
- definition = type;
283
- continue;
284
- }
285
- if (shape === undefined) {
286
- shape = [definition];
287
- }
288
- shape.push(type);
289
- }
290
- if (definition === undefined) {
291
- // It was a union of primitives, so return the mask
292
- if (values === undefined) {
293
- // This type coercion is incorrect, but we can't return the mask as a Mask
294
- // because that loses the type information about the union, which breaks
295
- // inference.
296
- //
297
- // TODO: Figure out how to make this correct type-wise
298
- return mask;
299
- }
300
- // It was a union of enums/constants, so return the value as a Set
301
- if (mask === 0) {
302
- // This type coercion is incorrect, but we can't return the mask as a Mask
303
- // because that loses the type information about the union, which breaks
304
- // inference.
305
- //
306
- // TODO: Figure out how to make this correct type-wise
307
- return values;
308
- }
309
- // It was a union of primitives and enums, so return the mask and values as a new ValidatorDef
310
- return new ValidatorDef(2 /* ComplexTypeDefKind.PRIMITIVE_UNION */, mask | 512 /* Mask.UNION */, undefined, values);
311
- }
312
- // It was a single complex type, so return the clone with the new mask and values
313
- if (shape === undefined) {
314
- return ValidatorDef.cloneWith(definition, mask | 512 /* Mask.UNION */, values);
315
- }
316
- return new ValidatorDef(1 /* ComplexTypeDefKind.UNION */, mask | 512 /* Mask.UNION */, shape, values);
317
- }
318
- function defineNullish(type) {
319
- if (typeof type === 'number') {
320
- return (type | 1 /* Mask.UNDEFINED */ | 2 /* Mask.NULL */);
321
- }
322
- if (type instanceof Set) {
323
- return defineUnion(type, 1 /* Mask.UNDEFINED */, 2 /* Mask.NULL */);
324
- }
325
- // Complex type - use the cached property
326
- return type.nullish;
327
- }
328
- function defineOptional(type) {
329
- if (typeof type === 'number') {
330
- return (type | 1 /* Mask.UNDEFINED */);
331
- }
332
- if (type instanceof Set) {
333
- return defineUnion(type, 1 /* Mask.UNDEFINED */);
334
- }
335
- // Complex type - use the cached property
336
- return type.optional;
337
- }
338
- function defineNullable(type) {
339
- if (typeof type === 'number') {
340
- return (type | 2 /* Mask.NULL */);
341
- }
342
- if (type instanceof Set) {
343
- return defineUnion(type, 2 /* Mask.NULL */);
344
- }
345
- // Complex type - use the cached property
346
- return type.nullable;
347
- }
348
- // -----------------------------------------------------------------------------
349
- // Shape Reification
350
- // -----------------------------------------------------------------------------
351
- function reifyObjectShape(def, shape) {
352
- // create a hash of the shape, starting with the object mask as the base
353
- let shapeKey = (0, utils_1.hashValue)([def.mask, def.values]);
354
- for (const [key, value] of entries(shape)) {
355
- switch (typeof value) {
356
- case 'number':
357
- if ((value & 128 /* Mask.ID */) !== 0) {
358
- if (def.idField !== undefined) {
359
- throw new Error(`Duplicate id field: ${key}`);
360
- }
361
- def.idField = key;
362
- }
363
- // Add to shape key (order independent operation)
364
- shapeKey += (0, utils_1.hashValue)(key) ^ value;
365
- break;
366
- case 'string':
367
- // This is a typename field (plain string value)
368
- if (def.typenameField !== undefined && def.typenameField !== key) {
369
- throw new Error(`Duplicate typename field: ${key}`);
370
- }
371
- def.typenameField = key;
372
- def.typenameValue = value;
373
- // Add to shape key (order independent operation)
374
- shapeKey += (0, utils_1.hashValue)(key) ^ (0, utils_1.hashValue)(value);
375
- break;
376
- case 'object':
377
- if (value instanceof CaseInsensitiveSet) {
378
- shapeKey ^= (0, utils_1.hashValue)(key) ^ (0, utils_1.hashValue)(Array.from(value));
379
- break;
380
- }
381
- if (value instanceof Set) {
382
- shapeKey ^= (0, utils_1.hashValue)(key) ^ (0, utils_1.hashValue)(value);
383
- break;
384
- }
385
- // Add to shape key (order independent operation)
386
- shapeKey += (0, utils_1.hashValue)(key) ^ value.shapeKey;
387
- if (value.mask & (1024 /* Mask.ENTITY */ | 2048 /* Mask.HAS_SUB_ENTITY */)) {
388
- def.mask |= 2048 /* Mask.HAS_SUB_ENTITY */;
389
- if (def.subEntityPaths === undefined) {
390
- def.subEntityPaths = key;
391
- }
392
- else if (isArray(def.subEntityPaths)) {
393
- def.subEntityPaths.push(key);
394
- }
395
- else {
396
- def.subEntityPaths = [def.subEntityPaths, key];
397
- }
398
- }
399
- break;
400
- }
401
- }
402
- // Convert to unsigned 32-bit integer
403
- def.shapeKey = shapeKey >>> 0;
404
- return shape;
405
- }
406
- function reifyUnionShape(def, defs) {
407
- let mask = def.mask;
408
- let shape = Object.create(null);
409
- let unionTypenameField;
410
- // Start with the union mask and any values as the base
411
- let shapeKey = (0, utils_1.hashValue)([mask, def.values]);
412
- for (const nestedDef of defs) {
413
- const nestedMask = nestedDef.mask;
414
- mask |= nestedMask;
415
- // load the shape key and also reify the shape if not yet reified
416
- shapeKey += nestedDef.shapeKey;
417
- if ((nestedMask & 512 /* Mask.UNION */) !== 0) {
418
- // Merge nested union into parent union
419
- const nestedUnion = nestedDef;
420
- // Check typename field consistency
421
- if (nestedUnion.typenameField !== undefined) {
422
- if (unionTypenameField !== undefined && unionTypenameField !== nestedUnion.typenameField) {
423
- throw new Error(`Union typename field conflict: Cannot merge unions with different typename fields ('${unionTypenameField}' vs '${nestedUnion.typenameField}')`);
424
- }
425
- unionTypenameField = nestedUnion.typenameField;
426
- }
427
- const nestedShape = nestedUnion.shape;
428
- // Merge nested union's shape into parent
429
- if (nestedShape !== undefined) {
430
- for (const key of [...Object.keys(nestedShape), types_js_1.ARRAY_KEY, types_js_1.RECORD_KEY]) {
431
- // Check for conflicts
432
- const value = nestedShape[key];
433
- if (shape[key] !== undefined && shape[key] !== value) {
434
- throw new Error(`Union merge conflict: Duplicate typename value '${String(key)}' found when merging nested unions (${String(shape[key])} vs ${String(value)})`);
435
- }
436
- // coerce type because we know the value is the same type as the key
437
- shape[key] = value;
438
- }
439
- }
440
- }
441
- else if ((nestedMask & 64 /* Mask.ARRAY */) !== 0) {
442
- if (shape[types_js_1.ARRAY_KEY] !== undefined) {
443
- throw new Error('Array shape already defined');
444
- }
445
- shape[types_js_1.ARRAY_KEY] = nestedDef.shape;
446
- }
447
- else if ((nestedMask & 256 /* Mask.RECORD */) !== 0) {
448
- if (shape[types_js_1.RECORD_KEY] !== undefined) {
449
- throw new Error('Record shape already defined');
450
- }
451
- shape[types_js_1.RECORD_KEY] = nestedDef.shape;
452
- }
453
- else {
454
- // definition is ObjectDef | EntityDef
455
- const typenameField = nestedDef.typenameField;
456
- const typename = nestedDef.typenameValue;
457
- if (typename === undefined) {
458
- throw new Error('Object definitions must have a typename to be in a union with other objects, records, or arrays');
459
- }
460
- if (unionTypenameField !== undefined && typenameField !== unionTypenameField) {
461
- throw new Error('Object definitions must have the same typename field to be in the same union');
462
- }
463
- unionTypenameField = typenameField;
464
- shape[typename] = nestedDef;
465
- }
466
- }
467
- def.typenameField = unionTypenameField;
468
- def.shapeKey = shapeKey >>> 0;
469
- def.mask = mask;
470
- return shape;
471
- }
472
- // -----------------------------------------------------------------------------
473
- // Marker Functions
474
- // -----------------------------------------------------------------------------
475
- function defineTypename(value) {
476
- return value;
477
- }
478
- function defineConst(value) {
479
- return new Set([value]);
480
- }
481
- const defineEnum = ((...values) => {
482
- return new Set(values);
483
- });
484
- defineEnum.caseInsensitive = (...values) => {
485
- return new CaseInsensitiveSet(values);
486
- };
487
- // -----------------------------------------------------------------------------
488
- // Formatted Values
489
- // -----------------------------------------------------------------------------
490
- const FORMAT_MASK_SHIFT = 16;
491
- let nextFormatId = 0;
492
- const FORMAT_PARSERS = [];
493
- const FORMAT_SERIALIZERS = [];
494
- const FORMAT_MAP = new Map();
495
- const FORMAT_ID_TO_NAME = new Map();
496
- function defineFormatted(format) {
497
- const mask = FORMAT_MAP.get(format);
498
- if (mask === undefined) {
499
- throw new Error(`Format ${format} not registered`);
500
- }
501
- return mask;
502
- }
503
- function getFormat(mask) {
504
- const formatId = mask >> FORMAT_MASK_SHIFT;
505
- return FORMAT_PARSERS[formatId];
506
- }
507
- function getFormatSerializer(mask) {
508
- const formatId = mask >> FORMAT_MASK_SHIFT;
509
- return FORMAT_SERIALIZERS[formatId];
510
- }
511
- function getFormatName(mask) {
512
- const formatId = mask >> FORMAT_MASK_SHIFT;
513
- return FORMAT_ID_TO_NAME.get(formatId);
514
- }
515
- function registerFormat(name, type, parse, serialize) {
516
- const maskId = nextFormatId++;
517
- FORMAT_PARSERS[maskId] = parse;
518
- FORMAT_SERIALIZERS[maskId] = serialize;
519
- FORMAT_ID_TO_NAME.set(maskId, name);
520
- const shiftedId = maskId << FORMAT_MASK_SHIFT;
521
- const formatMask = type === 8 /* Mask.STRING */ ? 8192 /* Mask.HAS_STRING_FORMAT */ : 4096 /* Mask.HAS_NUMBER_FORMAT */;
522
- const mask = shiftedId | type | formatMask;
523
- FORMAT_MAP.set(name, mask);
524
- }
525
- // -----------------------------------------------------------------------------
526
- // Built-in Formats
527
- // -----------------------------------------------------------------------------
528
- // Register 'date' format: ISO date string (YYYY-MM-DD) ↔ Date
529
- registerFormat('date', 8 /* Mask.STRING */, value => {
530
- // Parse YYYY-MM-DD as UTC date to avoid timezone issues
531
- const match = value.match(/^(\d{4})-(\d{2})-(\d{2})$/);
532
- if (!match) {
533
- throw new Error(`Invalid date string: ${value}. Expected YYYY-MM-DD format.`);
534
- }
535
- const [, year, month, day] = match;
536
- const date = new Date(Date.UTC(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10)));
537
- if (isNaN(date.getTime())) {
538
- throw new Error(`Invalid date string: ${value}`);
539
- }
540
- return date;
541
- }, value => {
542
- // Format as YYYY-MM-DD using UTC to avoid timezone issues
543
- const year = value.getUTCFullYear();
544
- const month = String(value.getUTCMonth() + 1).padStart(2, '0');
545
- const day = String(value.getUTCDate()).padStart(2, '0');
546
- return `${year}-${month}-${day}`;
547
- });
548
- // Register 'date-time' format: ISO datetime string (ISO 8601) ↔ Date
549
- registerFormat('date-time', 8 /* Mask.STRING */, value => {
550
- const date = new Date(value);
551
- if (isNaN(date.getTime())) {
552
- throw new Error(`Invalid date-time string: ${value}`);
553
- }
554
- return date;
555
- }, value => {
556
- // Format as ISO 8601 string
557
- return value.toISOString();
558
- });
559
- // -----------------------------------------------------------------------------
560
- // Entity Definitions
561
- // -----------------------------------------------------------------------------
562
- /**
563
- * Creates an entity definition with optional methods.
564
- *
565
- * @param shape - Lazy factory function that returns the entity's field definitions
566
- * @param methods - Optional lazy factory function that returns methods for the entity.
567
- * Methods have access to `this` typed as the reified entity shape.
568
- * Methods are wrapped with reactiveMethod for automatic caching.
569
- *
570
- * @example
571
- * const User = entity(
572
- * () => ({
573
- * __typename: t.typename('User'),
574
- * id: t.id,
575
- * name: t.string,
576
- * age: t.number,
577
- * }),
578
- * () => ({
579
- * greet() {
580
- * return `Hello, ${this.name}!`;
581
- * },
582
- * isAdult() {
583
- * return this.age >= 18;
584
- * },
585
- * })
586
- * );
587
- */
588
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
589
- function entity(shape, methods, config) {
590
- const def = new ValidatorDef(5 /* ComplexTypeDefKind.ENTITY */,
591
- // The mask should be OBJECT | ENTITY so that values match when compared
592
- 1024 /* Mask.ENTITY */ | 32 /* Mask.OBJECT */, shape);
593
- if (methods) {
594
- def._methodsFactory = methods;
595
- }
596
- if (config) {
597
- def._entityConfig = config;
598
- }
599
- return def;
600
- }
601
- exports.t = {
602
- format: defineFormatted,
603
- typename: defineTypename,
604
- const: defineConst,
605
- enum: defineEnum,
606
- id: 128 /* Mask.ID */ | 8 /* Mask.STRING */ | 4 /* Mask.NUMBER */,
607
- string: 8 /* Mask.STRING */,
608
- number: 4 /* Mask.NUMBER */,
609
- boolean: 16 /* Mask.BOOLEAN */,
610
- null: 2 /* Mask.NULL */,
611
- undefined: 1 /* Mask.UNDEFINED */,
612
- array: defineArray,
613
- object: defineObject,
614
- record: defineRecord,
615
- union: defineUnion,
616
- nullish: defineNullish,
617
- optional: defineOptional,
618
- nullable: defineNullable,
619
- };
620
- //# sourceMappingURL=typeDefs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeDefs.js","sourceRoot":"","sources":["../../src/typeDefs.ts"],"names":[],"mappings":"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"}