@signalium/query 0.0.0 → 0.0.2

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 (95) hide show
  1. package/.turbo/turbo-build.log +12 -0
  2. package/CHANGELOG.md +17 -0
  3. package/dist/cjs/EntityMap.js +46 -0
  4. package/dist/cjs/EntityMap.js.map +1 -0
  5. package/dist/cjs/QueryClient.js +368 -0
  6. package/dist/cjs/QueryClient.js.map +1 -0
  7. package/dist/cjs/QueryStore.js +222 -0
  8. package/dist/cjs/QueryStore.js.map +1 -0
  9. package/dist/cjs/errors.js +105 -0
  10. package/dist/cjs/errors.js.map +1 -0
  11. package/dist/cjs/index.js +24 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/parseEntities.js +127 -0
  14. package/dist/cjs/parseEntities.js.map +1 -0
  15. package/dist/cjs/pathInterpolator.js +69 -0
  16. package/dist/cjs/pathInterpolator.js.map +1 -0
  17. package/dist/cjs/proxy.js +187 -0
  18. package/dist/cjs/proxy.js.map +1 -0
  19. package/dist/cjs/query.js +41 -0
  20. package/dist/cjs/query.js.map +1 -0
  21. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  22. package/dist/cjs/typeDefs.js +249 -0
  23. package/dist/cjs/typeDefs.js.map +1 -0
  24. package/dist/cjs/types.js +15 -0
  25. package/dist/cjs/types.js.map +1 -0
  26. package/dist/cjs/utils.js +65 -0
  27. package/dist/cjs/utils.js.map +1 -0
  28. package/dist/esm/EntityMap.d.ts +18 -0
  29. package/dist/esm/EntityMap.d.ts.map +1 -0
  30. package/dist/esm/EntityMap.js +42 -0
  31. package/dist/esm/EntityMap.js.map +1 -0
  32. package/dist/esm/QueryClient.d.ts +123 -0
  33. package/dist/esm/QueryClient.d.ts.map +1 -0
  34. package/dist/esm/QueryClient.js +363 -0
  35. package/dist/esm/QueryClient.js.map +1 -0
  36. package/dist/esm/QueryStore.d.ts +77 -0
  37. package/dist/esm/QueryStore.d.ts.map +1 -0
  38. package/dist/esm/QueryStore.js +212 -0
  39. package/dist/esm/QueryStore.js.map +1 -0
  40. package/dist/esm/errors.d.ts +4 -0
  41. package/dist/esm/errors.d.ts.map +1 -0
  42. package/dist/esm/errors.js +101 -0
  43. package/dist/esm/errors.js.map +1 -0
  44. package/dist/esm/index.d.ts +7 -0
  45. package/dist/esm/index.d.ts.map +1 -0
  46. package/dist/esm/index.js +4 -0
  47. package/dist/esm/index.js.map +1 -0
  48. package/dist/esm/parseEntities.d.ts +8 -0
  49. package/dist/esm/parseEntities.d.ts.map +1 -0
  50. package/dist/esm/parseEntities.js +120 -0
  51. package/dist/esm/parseEntities.js.map +1 -0
  52. package/dist/esm/pathInterpolator.d.ts +29 -0
  53. package/dist/esm/pathInterpolator.d.ts.map +1 -0
  54. package/dist/esm/pathInterpolator.js +66 -0
  55. package/dist/esm/pathInterpolator.js.map +1 -0
  56. package/dist/esm/proxy.d.ts +8 -0
  57. package/dist/esm/proxy.d.ts.map +1 -0
  58. package/dist/esm/proxy.js +180 -0
  59. package/dist/esm/proxy.js.map +1 -0
  60. package/dist/esm/query.d.ts +41 -0
  61. package/dist/esm/query.d.ts.map +1 -0
  62. package/dist/esm/query.js +38 -0
  63. package/dist/esm/query.js.map +1 -0
  64. package/dist/esm/typeDefs.d.ts +25 -0
  65. package/dist/esm/typeDefs.d.ts.map +1 -0
  66. package/dist/esm/typeDefs.js +239 -0
  67. package/dist/esm/typeDefs.js.map +1 -0
  68. package/dist/esm/types.d.ts +96 -0
  69. package/dist/esm/types.d.ts.map +1 -0
  70. package/dist/esm/types.js +12 -0
  71. package/dist/esm/types.js.map +1 -0
  72. package/dist/esm/utils.d.ts +6 -0
  73. package/dist/esm/utils.d.ts.map +1 -0
  74. package/dist/esm/utils.js +60 -0
  75. package/dist/esm/utils.js.map +1 -0
  76. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  77. package/package.json +3 -3
  78. package/src/QueryClient.ts +321 -105
  79. package/src/QueryStore.ts +15 -7
  80. package/src/__tests__/caching-persistence.test.ts +31 -2
  81. package/src/__tests__/entity-system.test.ts +5 -1
  82. package/src/__tests__/gc-time.test.ts +327 -0
  83. package/src/__tests__/mock-fetch.test.ts +8 -4
  84. package/src/__tests__/parse-entities.test.ts +5 -1
  85. package/src/__tests__/reactivity.test.ts +5 -1
  86. package/src/__tests__/refetch-interval.test.ts +262 -0
  87. package/src/__tests__/rest-query-api.test.ts +5 -1
  88. package/src/__tests__/stale-time.test.ts +357 -0
  89. package/src/__tests__/utils.ts +28 -12
  90. package/src/__tests__/validation-edge-cases.test.ts +1 -0
  91. package/src/query.ts +2 -1
  92. package/src/react/__tests__/basic.test.tsx +9 -4
  93. package/src/react/__tests__/component.test.tsx +10 -3
  94. package/src/types.ts +11 -0
  95. package/vitest.config.ts +4 -10
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseArrayValue = parseArrayValue;
4
+ exports.parseRecordValue = parseRecordValue;
5
+ exports.parseObjectValue = parseObjectValue;
6
+ exports.parseValue = parseValue;
7
+ exports.createEntityProxy = createEntityProxy;
8
+ const errors_js_1 = require("./errors.js");
9
+ const typeDefs_js_1 = require("./typeDefs.js");
10
+ const types_js_1 = require("./types.js");
11
+ const utils_js_1 = require("./utils.js");
12
+ const entries = Object.entries;
13
+ const PROXY_BRAND = new WeakSet();
14
+ function parseUnionValue(valueType, value, unionDef, path) {
15
+ if (valueType === 64 /* Mask.ARRAY */) {
16
+ const shape = unionDef.shape[types_js_1.ARRAY_KEY];
17
+ if (shape === undefined || typeof shape === 'number') {
18
+ return value;
19
+ }
20
+ return parseArrayValue(value, shape, path);
21
+ }
22
+ else {
23
+ // Use the cached typename field from the union definition
24
+ const typenameField = unionDef.typenameField;
25
+ const typename = typenameField ? value[typenameField] : undefined;
26
+ if (typename === undefined || typeof typename !== 'string') {
27
+ const recordShape = unionDef.shape[types_js_1.RECORD_KEY];
28
+ if (recordShape === undefined || typeof recordShape === 'number') {
29
+ return value;
30
+ }
31
+ return parseRecordValue(value, recordShape, path);
32
+ }
33
+ const matchingDef = unionDef.shape[typename];
34
+ if (matchingDef === undefined || typeof matchingDef === 'number') {
35
+ return value;
36
+ }
37
+ return parseObjectValue(value, matchingDef, path);
38
+ }
39
+ }
40
+ function parseArrayValue(array, arrayShape, path) {
41
+ for (let i = 0; i < array.length; i++) {
42
+ array[i] = parseValue(array[i], arrayShape, `${path}[${i}]`);
43
+ }
44
+ return array;
45
+ }
46
+ function parseRecordValue(record, recordShape, path) {
47
+ for (const [key, value] of entries(record)) {
48
+ record[key] = parseValue(value, recordShape, `${path}["${key}"]`);
49
+ }
50
+ return record;
51
+ }
52
+ function parseObjectValue(object, objectShape, path) {
53
+ if (PROXY_BRAND.has(object)) {
54
+ // Is an entity proxy, so return it directly
55
+ return object;
56
+ }
57
+ const shape = (0, utils_js_1.extractShape)(objectShape);
58
+ for (const [key, propShape] of entries(shape)) {
59
+ // parse and replace the property in place
60
+ object[key] = parseValue(object[key], propShape, `${path}.${key}`);
61
+ }
62
+ return object;
63
+ }
64
+ function parseValue(value, propDef, path) {
65
+ // Handle Set-based constants/enums
66
+ if (propDef instanceof Set) {
67
+ if (!propDef.has(value)) {
68
+ throw (0, errors_js_1.typeError)(path, propDef, value);
69
+ }
70
+ return value;
71
+ }
72
+ switch (typeof propDef) {
73
+ case 'string':
74
+ if (value !== propDef) {
75
+ throw (0, errors_js_1.typeError)(path, propDef, value);
76
+ }
77
+ return value;
78
+ // handle primitives
79
+ case 'number': {
80
+ let valueType = (0, utils_js_1.typeMaskOf)(value);
81
+ if ((propDef & valueType) === 0) {
82
+ throw (0, errors_js_1.typeError)(path, propDef, value);
83
+ }
84
+ if ((propDef & 4096 /* Mask.HAS_NUMBER_FORMAT */) !== 0 && valueType === 4 /* Mask.NUMBER */) {
85
+ return (0, typeDefs_js_1.getFormat)(propDef)(value);
86
+ }
87
+ if ((propDef & 8192 /* Mask.HAS_STRING_FORMAT */) !== 0 && valueType === 8 /* Mask.STRING */) {
88
+ return (0, typeDefs_js_1.getFormat)(propDef)(value);
89
+ }
90
+ return value;
91
+ }
92
+ // handle complex objects
93
+ default: {
94
+ // Note: Keep in mind that at this point, we're using `valueType`
95
+ // primarily, so some of the logic is "reversed" from the above where
96
+ // we use the `propDef` type primarily
97
+ let valueType = (0, utils_js_1.typeMaskOf)(value);
98
+ const propMask = propDef.mask;
99
+ // Check if the value type is allowed by the propMask
100
+ // Also check if it's in a values set (for enums/constants stored in ValidatorDef)
101
+ if ((propMask & valueType) === 0 && !propDef.values?.has(value)) {
102
+ throw (0, errors_js_1.typeError)(path, propMask, value);
103
+ }
104
+ if (valueType < 32 /* Mask.OBJECT */) {
105
+ if ((propMask & 4096 /* Mask.HAS_NUMBER_FORMAT */) !== 0 && valueType === 4 /* Mask.NUMBER */) {
106
+ return (0, typeDefs_js_1.getFormat)(propMask)(value);
107
+ }
108
+ if ((propMask & 8192 /* Mask.HAS_STRING_FORMAT */) !== 0 && valueType === 8 /* Mask.STRING */) {
109
+ return (0, typeDefs_js_1.getFormat)(propMask)(value);
110
+ }
111
+ // value is a primitive, it has already passed the mask so return it now
112
+ return value;
113
+ }
114
+ if ((valueType & 512 /* Mask.UNION */) !== 0) {
115
+ return parseUnionValue(valueType, value, propDef, path);
116
+ }
117
+ if (valueType === 64 /* Mask.ARRAY */) {
118
+ return parseArrayValue(value, propDef.shape, path);
119
+ }
120
+ return parseObjectValue(value, propDef, path);
121
+ }
122
+ }
123
+ }
124
+ const CustomNodeInspect = Symbol.for('nodejs.util.inspect.custom');
125
+ function createEntityProxy(id, entityRecord, def, desc) {
126
+ // Cache for nested proxies - each proxy gets its own cache
127
+ const shape = (0, utils_js_1.extractShape)(def);
128
+ const toJSON = () => ({
129
+ __entityRef: id,
130
+ });
131
+ const handler = {
132
+ get(target, prop) {
133
+ // Handle toJSON for serialization
134
+ if (prop === 'toJSON') {
135
+ return toJSON;
136
+ }
137
+ const { signal, cache } = entityRecord;
138
+ const obj = signal.value;
139
+ // Check cache first, BEFORE any expensive checks
140
+ if (cache.has(prop)) {
141
+ return cache.get(prop);
142
+ }
143
+ let value = obj[prop];
144
+ let propDef = shape[prop];
145
+ if (!Object.hasOwnProperty.call(shape, prop)) {
146
+ return value;
147
+ }
148
+ const parsed = parseValue(value, propDef, `[[${desc}]].${prop}`);
149
+ cache.set(prop, parsed);
150
+ return parsed;
151
+ },
152
+ has(target, prop) {
153
+ return prop in shape;
154
+ },
155
+ ownKeys(target) {
156
+ const keys = Object.keys(shape);
157
+ // Add typename field if it exists on the definition
158
+ const typenameField = def.typenameField;
159
+ if (typenameField && !keys.includes(typenameField)) {
160
+ keys.push(typenameField);
161
+ }
162
+ return keys;
163
+ },
164
+ getOwnPropertyDescriptor(target, prop) {
165
+ const typenameField = def.typenameField;
166
+ if (prop in shape || prop === typenameField) {
167
+ return {
168
+ enumerable: true,
169
+ configurable: true,
170
+ };
171
+ }
172
+ return undefined;
173
+ },
174
+ };
175
+ const proxy = new Proxy({
176
+ [CustomNodeInspect]: () => {
177
+ return Object.keys(shape).reduce((acc, key) => {
178
+ acc[key] = proxy[key];
179
+ return acc;
180
+ }, {});
181
+ },
182
+ }, handler);
183
+ // Add the proxy to the proxy brand set so we can easily identify it later
184
+ PROXY_BRAND.add(proxy);
185
+ return proxy;
186
+ }
187
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/proxy.ts"],"names":[],"mappings":";;AA4DA,0CAMC;AAED,4CAMC;AAED,4CAcC;AAED,gCAyEC;AAID,8CAuFC;AAhQD,2CAAwC;AACxC,+CAA0C;AAC1C,yCAWoB;AACpB,yCAAsD;AAGtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAE/B,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;AAElC,SAAS,eAAe,CACtB,SAAiB,EACjB,KAA0C,EAC1C,QAAkB,EAClB,IAAY;IAEZ,IAAI,SAAS,wBAAe,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAM,CAAC,oBAAS,CAAC,CAAC;QAEzC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,eAAe,CAAC,KAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,0DAA0D;QAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAE,KAAiC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/F,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAM,CAAC,qBAAU,CAAC,CAAC;YAEhD,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,gBAAgB,CAAC,KAAgC,EAAE,WAA6B,EAAE,IAAI,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAM,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,gBAAgB,CAAC,KAAgC,EAAE,WAAoC,EAAE,IAAI,CAAC,CAAC;IACxG,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,KAAgB,EAAE,UAAmB,EAAE,IAAY;IACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAA+B,EAAE,WAA2B,EAAE,IAAY;IACzG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAA+B,EAAE,WAAkC,EAAE,IAAY;IAChH,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,4CAA4C;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,uBAAY,EAAC,WAAW,CAAC,CAAC;IAExC,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,0CAA0C;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAc,EAAE,OAA2B,EAAE,IAAY;IAClF,mCAAmC;IACnC,IAAI,OAAO,YAAY,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAkC,CAAC,EAAE,CAAC;YACrD,MAAM,IAAA,qBAAS,EAAC,IAAI,EAAE,OAAc,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,OAAO,OAAO,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,MAAM,IAAA,qBAAS,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,KAAK,CAAC;QAEf,oBAAoB;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,SAAS,GAAG,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC;YAElC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAA,qBAAS,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,CAAC,OAAO,oCAAyB,CAAC,KAAK,CAAC,IAAI,SAAS,wBAAgB,EAAE,CAAC;gBAC1E,OAAO,IAAA,uBAAS,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,OAAO,oCAAyB,CAAC,KAAK,CAAC,IAAI,SAAS,wBAAgB,EAAE,CAAC;gBAC1E,OAAO,IAAA,uBAAS,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yBAAyB;QACzB,OAAO,CAAC,CAAC,CAAC;YACR,iEAAiE;YACjE,qEAAqE;YACrE,sCAAsC;YACtC,IAAI,SAAS,GAAG,IAAA,qBAAU,EAAC,KAAK,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAE9B,qDAAqD;YACrD,kFAAkF;YAClF,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAkC,CAAC,EAAE,CAAC;gBAC7F,MAAM,IAAA,qBAAS,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,SAAS,uBAAc,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,oCAAyB,CAAC,KAAK,CAAC,IAAI,SAAS,wBAAgB,EAAE,CAAC;oBAC3E,OAAO,IAAA,uBAAS,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAED,IAAI,CAAC,QAAQ,oCAAyB,CAAC,KAAK,CAAC,IAAI,SAAS,wBAAgB,EAAE,CAAC;oBAC3E,OAAO,IAAA,uBAAS,EAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAED,wEAAwE;gBACxE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,uBAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,eAAe,CAAC,SAAS,EAAE,KAA4C,EAAE,OAAmB,EAAE,IAAI,CAAC,CAAC;YAC7G,CAAC;YAED,IAAI,SAAS,wBAAe,EAAE,CAAC;gBAC7B,OAAO,eAAe,CAAC,KAAkB,EAAE,OAAO,CAAC,KAAuB,EAAE,IAAI,CAAC,CAAC;YACpF,CAAC;YAED,OAAO,gBAAgB,CAAC,KAAgC,EAAE,OAAgC,EAAE,IAAI,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAEnE,SAAgB,iBAAiB,CAC/B,EAAU,EACV,YAAmC,EACnC,GAA0B,EAC1B,IAAa;IAEb,2DAA2D;IAC3D,MAAM,KAAK,GAAG,IAAA,uBAAY,EAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC;QACpB,WAAW,EAAE,EAAE;KAChB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAsB;QACjC,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,kCAAkC;YAClC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;YAEzB,iDAAiD;YACjD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,KAAK,GAAG,GAAG,CAAC,IAAc,CAAC,CAAC;YAChC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAc,CAAC,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,MAAM,IAAc,EAAE,CAAC,CAAC;YAE3E,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAExB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,OAAO,IAAI,IAAI,KAAK,CAAC;QACvB,CAAC;QAED,OAAO,CAAC,MAAM;YACZ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,oDAAoD;YACpD,MAAM,aAAa,GAAI,GAA6B,CAAC,aAAa,CAAC;YACnE,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wBAAwB,CAAC,MAAM,EAAE,IAAI;YACnC,MAAM,aAAa,GAAI,GAA6B,CAAC,aAAa,CAAC;YACnE,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC5C,OAAO;oBACL,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;iBACnB,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB;QACE,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE;YACxB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACX,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAA6B,CAC9B,CAAC;QACJ,CAAC;KACF,EACD,OAAO,CACR,CAAC;IAEF,0EAA0E;IAC1E,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.query = query;
4
+ const signalium_1 = require("signalium");
5
+ const QueryClient_js_1 = require("./QueryClient.js");
6
+ const typeDefs_js_1 = require("./typeDefs.js");
7
+ const pathInterpolator_js_1 = require("./pathInterpolator.js");
8
+ function query(queryDefinitionBuilder) {
9
+ let queryDefinition;
10
+ return (0, signalium_1.reactive)((params) => {
11
+ const queryClient = (0, signalium_1.getContext)(QueryClient_js_1.QueryClientContext);
12
+ if (queryClient === undefined) {
13
+ throw new Error('QueryClient not found');
14
+ }
15
+ if (queryDefinition === undefined) {
16
+ const { path, method = 'GET', response, cache, refetchInterval } = queryDefinitionBuilder(typeDefs_js_1.t);
17
+ const id = `${method}:${path}`;
18
+ const shape = typeof response === 'object' && !(response instanceof typeDefs_js_1.ValidatorDef)
19
+ ? typeDefs_js_1.t.object(response)
20
+ : response;
21
+ // Create optimized path interpolator (parses template once)
22
+ const interpolatePath = (0, pathInterpolator_js_1.createPathInterpolator)(path);
23
+ const fetchFn = async (context, params) => {
24
+ // Interpolate path params and append search params automatically
25
+ const url = interpolatePath(params);
26
+ const response = await context.fetch(url, {
27
+ method,
28
+ });
29
+ return response.json();
30
+ };
31
+ queryDefinition = {
32
+ id,
33
+ shape,
34
+ fetchFn,
35
+ cache,
36
+ };
37
+ }
38
+ return queryClient.getQuery(queryDefinition, params);
39
+ });
40
+ }
41
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";;AA0GA,sBAyDC;AAnKD,yCAAiD;AAYjD,qDAAwG;AACxG,+CAAwD;AACxD,+DAA+D;AA4F/D,SAAgB,KAAK,CACnB,sBAA6C;IAM7C,IAAI,eAES,CAAC;IAEd,OAAO,IAAA,oBAAQ,EACb,CAAC,MAA+B,EAA+E,EAAE;QAC/G,MAAM,WAAW,GAAG,IAAA,sBAAU,EAAC,mCAAkB,CAAC,CAAC;QAEnD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,sBAAsB,CAAC,eAAC,CAAC,CAAC;YAE7F,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;YAE/B,MAAM,KAAK,GACT,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAY,0BAAY,CAAC;gBACjE,CAAC,CAAC,eAAC,CAAC,MAAM,CAAC,QAA8C,CAAC;gBAC1D,CAAC,CAAE,QAA+B,CAAC;YAEvC,4DAA4D;YAC5D,MAAM,eAAe,GAAG,IAAA,4CAAsB,EAAC,IAAI,CAAC,CAAC;YAErD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAqB,EAAE,MAA+B,EAAE,EAAE;gBAC/E,iEAAiE;gBACjE,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBAEpC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;oBACxC,MAAM;iBACP,CAAC,CAAC;gBAEH,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC,CAAC;YAEF,eAAe,GAAG;gBAChB,EAAE;gBACF,KAAK;gBACL,OAAO;gBACP,KAAK;aACN,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC,CAIK,CAAC;AACX,CAAC"}
@@ -0,0 +1 @@
1
+ {"root":["../../src/EntityMap.ts","../../src/QueryClient.ts","../../src/QueryStore.ts","../../src/errors.ts","../../src/index.ts","../../src/parseEntities.ts","../../src/pathInterpolator.ts","../../src/proxy.ts","../../src/query.ts","../../src/typeDefs.ts","../../src/types.ts","../../src/utils.ts"],"version":"5.7.3"}
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.t = exports.ValidatorDef = void 0;
4
+ exports.defineArray = defineArray;
5
+ exports.defineRecord = defineRecord;
6
+ exports.defineObject = defineObject;
7
+ exports.getFormat = getFormat;
8
+ exports.registerFormat = registerFormat;
9
+ exports.entity = entity;
10
+ const types_js_1 = require("./types.js");
11
+ const utils_js_1 = require("./utils.js");
12
+ class ValidatorDef {
13
+ mask;
14
+ shape;
15
+ subEntityPaths;
16
+ values;
17
+ typenameField;
18
+ typenameValue;
19
+ idField;
20
+ _optional;
21
+ _nullable;
22
+ _nullish;
23
+ constructor(mask, shape, subEntityPaths = undefined, values = undefined, typenameField = undefined, typenameValue = undefined, idField = undefined) {
24
+ this.mask = mask;
25
+ this.shape = shape;
26
+ this.subEntityPaths = subEntityPaths;
27
+ this.values = values;
28
+ this.typenameField = typenameField;
29
+ this.typenameValue = typenameValue;
30
+ this.idField = idField;
31
+ }
32
+ get optional() {
33
+ if (this._optional === undefined) {
34
+ this._optional = new ValidatorDef(this.mask | 1 /* Mask.UNDEFINED */, this.shape, this.subEntityPaths, this.values, this.typenameField, this.typenameValue, this.idField);
35
+ }
36
+ return this._optional;
37
+ }
38
+ get nullable() {
39
+ if (this._nullable === undefined) {
40
+ this._nullable = new ValidatorDef(this.mask | 2 /* Mask.NULL */, this.shape, this.subEntityPaths, this.values, this.typenameField, this.typenameValue, this.idField);
41
+ }
42
+ return this._nullable;
43
+ }
44
+ get nullish() {
45
+ if (this._nullish === undefined) {
46
+ this._nullish = new ValidatorDef(this.mask | 1 /* Mask.UNDEFINED */ | 2 /* Mask.NULL */, this.shape, this.subEntityPaths, this.values, this.typenameField, this.typenameValue, this.idField);
47
+ }
48
+ return this._nullish;
49
+ }
50
+ }
51
+ exports.ValidatorDef = ValidatorDef;
52
+ // -----------------------------------------------------------------------------
53
+ // Complex Type Definitions
54
+ // -----------------------------------------------------------------------------
55
+ function defineArray(shape) {
56
+ let mask = 64 /* Mask.ARRAY */;
57
+ // Propagate HAS_SUB_ENTITY flag if the shape contains entities
58
+ if (shape instanceof ValidatorDef && (shape.mask & (1024 /* Mask.ENTITY */ | 2048 /* Mask.HAS_SUB_ENTITY */)) !== 0) {
59
+ mask |= 2048 /* Mask.HAS_SUB_ENTITY */;
60
+ }
61
+ return new ValidatorDef(mask, shape);
62
+ }
63
+ function defineRecord(shape) {
64
+ // The mask should be OBJECT | RECORD so that values match when compared
65
+ let mask = 256 /* Mask.RECORD */ | 32 /* Mask.OBJECT */;
66
+ // Propagate HAS_SUB_ENTITY flag if the shape contains entities
67
+ if (shape instanceof ValidatorDef && (shape.mask & (1024 /* Mask.ENTITY */ | 2048 /* Mask.HAS_SUB_ENTITY */)) !== 0) {
68
+ mask |= 2048 /* Mask.HAS_SUB_ENTITY */;
69
+ }
70
+ return new ValidatorDef(mask, shape);
71
+ }
72
+ function defineObject(shape) {
73
+ const def = new ValidatorDef(32 /* Mask.OBJECT */, shape);
74
+ (0, utils_js_1.extractShapeMetadata)(def, shape);
75
+ return def;
76
+ }
77
+ const addShapeToUnion = (shape, definition, unionTypenameField) => {
78
+ const mask = definition.mask;
79
+ if ((mask & 512 /* Mask.UNION */) !== 0) {
80
+ // Merge nested union into parent union
81
+ const nestedUnion = definition;
82
+ // Check typename field consistency
83
+ if (nestedUnion.typenameField !== undefined) {
84
+ if (unionTypenameField !== undefined && unionTypenameField !== nestedUnion.typenameField) {
85
+ throw new Error(`Union typename field conflict: Cannot merge unions with different typename fields ('${unionTypenameField}' vs '${nestedUnion.typenameField}')`);
86
+ }
87
+ unionTypenameField = nestedUnion.typenameField;
88
+ }
89
+ // Merge nested union's shape into parent
90
+ if (nestedUnion.shape !== undefined) {
91
+ for (const key of [...Object.keys(nestedUnion.shape), types_js_1.ARRAY_KEY, types_js_1.RECORD_KEY]) {
92
+ // Check for conflicts
93
+ const value = nestedUnion.shape[key];
94
+ if (shape[key] !== undefined && shape[key] !== value) {
95
+ throw new Error(`Union merge conflict: Duplicate typename value '${String(key)}' found when merging nested unions`);
96
+ }
97
+ // coerce type because we know the value is the same type as the key
98
+ shape[key] = value;
99
+ }
100
+ }
101
+ return unionTypenameField;
102
+ }
103
+ else if ((mask & 64 /* Mask.ARRAY */) !== 0) {
104
+ if (shape[types_js_1.ARRAY_KEY] !== undefined) {
105
+ throw new Error('Array shape already defined');
106
+ }
107
+ shape[types_js_1.ARRAY_KEY] = definition.shape;
108
+ return unionTypenameField;
109
+ }
110
+ else if ((mask & 256 /* Mask.RECORD */) !== 0) {
111
+ if (shape[types_js_1.RECORD_KEY] !== undefined) {
112
+ throw new Error('Record shape already defined');
113
+ }
114
+ shape[types_js_1.RECORD_KEY] = definition.shape;
115
+ return unionTypenameField;
116
+ }
117
+ else {
118
+ // Make sure the type is fully extracted, so we can get the typename field and value
119
+ (0, utils_js_1.extractShape)(definition);
120
+ // definition is ObjectDef | EntityDef
121
+ const typenameField = definition.typenameField;
122
+ const typename = definition.typenameValue;
123
+ if (typename === undefined) {
124
+ throw new Error('Object definitions must have a typename to be in a union with other objects, records, or arrays');
125
+ }
126
+ if (unionTypenameField !== undefined && typenameField !== unionTypenameField) {
127
+ throw new Error('Object definitions must have the same typename field to be in the same union');
128
+ }
129
+ shape[typename] = definition;
130
+ return typenameField;
131
+ }
132
+ };
133
+ function defineUnion(...types) {
134
+ let mask = 0;
135
+ let definition;
136
+ let shape;
137
+ let values;
138
+ let unionTypenameField;
139
+ for (const type of types) {
140
+ if (typeof type === 'number') {
141
+ mask |= type;
142
+ continue;
143
+ }
144
+ const isSet = type instanceof Set;
145
+ const typeValues = isSet ? type : type.values;
146
+ // Handle Set-based constants/enums
147
+ if (typeValues !== undefined) {
148
+ if (values === undefined) {
149
+ values = new Set(typeValues);
150
+ }
151
+ else {
152
+ for (const val of typeValues) {
153
+ values.add(val);
154
+ }
155
+ }
156
+ if (isSet) {
157
+ continue;
158
+ }
159
+ }
160
+ // We know it's a complex type at this point because if it was a Set,
161
+ // we would have already handled it above.
162
+ const typeDef = type;
163
+ mask |= typeDef.mask;
164
+ if (definition === undefined) {
165
+ definition = typeDef;
166
+ continue;
167
+ }
168
+ if (shape === undefined) {
169
+ shape = Object.create(null);
170
+ unionTypenameField = addShapeToUnion(shape, definition, unionTypenameField);
171
+ }
172
+ unionTypenameField = addShapeToUnion(shape, typeDef, unionTypenameField);
173
+ }
174
+ // It was a union of primitives, so return the mask
175
+ if (definition === undefined && values === undefined) {
176
+ // This type coercion is incorrect, but we can't return the mask as a Mask
177
+ // because that loses the type information about the union, which breaks
178
+ // inference.
179
+ //
180
+ // TODO: Figure out how to make this correct type-wise
181
+ return mask;
182
+ }
183
+ return new ValidatorDef(mask | 512 /* Mask.UNION */, shape ?? definition?.shape, undefined, values, unionTypenameField);
184
+ }
185
+ // -----------------------------------------------------------------------------
186
+ // Marker Functions
187
+ // -----------------------------------------------------------------------------
188
+ function defineTypename(value) {
189
+ return value;
190
+ }
191
+ function defineConst(value) {
192
+ return new Set([value]);
193
+ }
194
+ function defineEnum(...values) {
195
+ return new Set(values);
196
+ }
197
+ // -----------------------------------------------------------------------------
198
+ // Formatted Values
199
+ // -----------------------------------------------------------------------------
200
+ const FORMAT_MASK_SHIFT = 16;
201
+ let nextFormatId = 0;
202
+ const FORMAT_PARSERS = [];
203
+ const FORMAT_SERIALIZERS = [];
204
+ const FORMAT_MAP = new Map();
205
+ function defineFormatted(format) {
206
+ const mask = FORMAT_MAP.get(format);
207
+ if (mask === undefined) {
208
+ throw new Error(`Format ${format} not registered`);
209
+ }
210
+ return mask;
211
+ }
212
+ function getFormat(mask) {
213
+ const formatId = mask >> FORMAT_MASK_SHIFT;
214
+ return FORMAT_PARSERS[formatId];
215
+ }
216
+ function registerFormat(name, type, parse, serialize) {
217
+ const maskId = nextFormatId++;
218
+ FORMAT_PARSERS[maskId] = parse;
219
+ FORMAT_SERIALIZERS[maskId] = serialize;
220
+ const shiftedId = maskId << FORMAT_MASK_SHIFT;
221
+ const formatMask = type === 8 /* Mask.STRING */ ? 8192 /* Mask.HAS_STRING_FORMAT */ : 4096 /* Mask.HAS_NUMBER_FORMAT */;
222
+ const mask = shiftedId | type | formatMask;
223
+ FORMAT_MAP.set(name, mask);
224
+ }
225
+ // -----------------------------------------------------------------------------
226
+ // Entity Definitions
227
+ // -----------------------------------------------------------------------------
228
+ function entity(shape) {
229
+ return new ValidatorDef(
230
+ // The mask should be OBJECT | ENTITY so that values match when compared
231
+ 1024 /* Mask.ENTITY */ | 32 /* Mask.OBJECT */, shape);
232
+ }
233
+ exports.t = {
234
+ format: defineFormatted,
235
+ typename: defineTypename,
236
+ const: defineConst,
237
+ enum: defineEnum,
238
+ id: 128 /* Mask.ID */ | 8 /* Mask.STRING */ | 4 /* Mask.NUMBER */,
239
+ string: 8 /* Mask.STRING */,
240
+ number: 4 /* Mask.NUMBER */,
241
+ boolean: 16 /* Mask.BOOLEAN */,
242
+ null: 2 /* Mask.NULL */,
243
+ undefined: 1 /* Mask.UNDEFINED */,
244
+ array: defineArray,
245
+ object: defineObject,
246
+ record: defineRecord,
247
+ union: defineUnion,
248
+ };
249
+ //# sourceMappingURL=typeDefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeDefs.js","sourceRoot":"","sources":["../../src/typeDefs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RECORD_KEY = exports.ARRAY_KEY = exports.RefetchInterval = void 0;
4
+ var RefetchInterval;
5
+ (function (RefetchInterval) {
6
+ RefetchInterval[RefetchInterval["Every1Second"] = 1000] = "Every1Second";
7
+ RefetchInterval[RefetchInterval["Every5Seconds"] = 5000] = "Every5Seconds";
8
+ RefetchInterval[RefetchInterval["Every10Seconds"] = 10000] = "Every10Seconds";
9
+ RefetchInterval[RefetchInterval["Every30Seconds"] = 30000] = "Every30Seconds";
10
+ RefetchInterval[RefetchInterval["Every1Minute"] = 60000] = "Every1Minute";
11
+ RefetchInterval[RefetchInterval["Every5Minutes"] = 300000] = "Every5Minutes";
12
+ })(RefetchInterval || (exports.RefetchInterval = RefetchInterval = {}));
13
+ exports.ARRAY_KEY = Symbol('array');
14
+ exports.RECORD_KEY = Symbol('record');
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,wEAAmB,CAAA;IACnB,0EAAoB,CAAA;IACpB,6EAAsB,CAAA;IACtB,6EAAsB,CAAA;IACtB,yEAAoB,CAAA;IACpB,4EAAsB,CAAA;AACxB,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAyCY,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractShapeMetadata = extractShapeMetadata;
4
+ exports.extractShape = extractShape;
5
+ exports.typeMaskOf = typeMaskOf;
6
+ const typeDefs_js_1 = require("./typeDefs.js");
7
+ const entries = Object.entries;
8
+ const isArray = Array.isArray;
9
+ function extractShapeMetadata(def, shape) {
10
+ for (const [key, value] of Object.entries(shape)) {
11
+ if (value instanceof typeDefs_js_1.ValidatorDef && (value.mask & (1024 /* Mask.ENTITY */ | 2048 /* Mask.HAS_SUB_ENTITY */)) !== 0) {
12
+ if (def.subEntityPaths === undefined) {
13
+ def.subEntityPaths = key;
14
+ }
15
+ else if (isArray(def.subEntityPaths)) {
16
+ def.subEntityPaths.push(key);
17
+ }
18
+ else {
19
+ def.subEntityPaths = [def.subEntityPaths, key];
20
+ }
21
+ }
22
+ // Check if this is a typename field (plain string value)
23
+ if (typeof value === 'string') {
24
+ if (def.typenameField !== undefined) {
25
+ throw new Error(`Duplicate typename field: ${key}`);
26
+ }
27
+ def.typenameField = key;
28
+ def.typenameValue = value;
29
+ }
30
+ // Check if this is an id field (Mask.ID)
31
+ else if (typeof value === 'number' && (value & 128 /* Mask.ID */) !== 0) {
32
+ if (def.idField !== undefined) {
33
+ throw new Error(`Duplicate id field: ${key}`);
34
+ }
35
+ def.idField = key;
36
+ }
37
+ }
38
+ }
39
+ function extractShape(def) {
40
+ let shape = def.shape;
41
+ if (typeof shape === 'function') {
42
+ shape = def.shape = shape(typeDefs_js_1.t);
43
+ extractShapeMetadata(def, shape);
44
+ }
45
+ return shape;
46
+ }
47
+ function typeMaskOf(value) {
48
+ if (value === null)
49
+ return 2 /* Mask.NULL */;
50
+ switch (typeof value) {
51
+ case 'number':
52
+ return 4 /* Mask.NUMBER */;
53
+ case 'string':
54
+ return 8 /* Mask.STRING */;
55
+ case 'boolean':
56
+ return 16 /* Mask.BOOLEAN */;
57
+ case 'undefined':
58
+ return 1 /* Mask.UNDEFINED */;
59
+ case 'object':
60
+ return isArray(value) ? 64 /* Mask.ARRAY */ : 32 /* Mask.OBJECT */;
61
+ default:
62
+ throw new Error(`Invalid type: ${typeof value}`);
63
+ }
64
+ }
65
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;AAMA,oDA6BC;AAED,oCASC;AAED,gCAiBC;AAjED,+CAAgD;AAGhD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,SAAgB,oBAAoB,CAAC,GAAsB,EAAE,KAAkB;IAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,YAAY,0BAAY,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,uDAAiC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9F,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACrC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;YAC3B,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,yDAAyD;QACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC;YACxB,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,yCAAyC;aACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,oBAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAA2B,GAAM;IAC3D,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAEtB,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,eAAC,CAAC,CAAC;QAC7B,oBAAoB,CAAC,GAAwB,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAuD,CAAC;AACjE,CAAC;AAED,SAAgB,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI;QAAE,yBAAiB;IAErC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,2BAAmB;QACrB,KAAK,QAAQ;YACX,2BAAmB;QACrB,KAAK,SAAS;YACZ,6BAAoB;QACtB,KAAK,WAAW;YACd,8BAAsB;QACxB,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAY,CAAC,qBAAY,CAAC;QACnD;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Signal } from 'signalium';
2
+ import { EntityDef } from './types.js';
3
+ export interface PreloadedEntityRecord {
4
+ key: number;
5
+ signal: Signal<Record<string, unknown>>;
6
+ cache: Map<PropertyKey, any>;
7
+ proxy?: Record<string, unknown>;
8
+ }
9
+ export type EntityRecord = Required<PreloadedEntityRecord>;
10
+ export declare class EntityStore {
11
+ private map;
12
+ hasEntity(key: number): boolean;
13
+ getEntity(key: number): PreloadedEntityRecord | EntityRecord | undefined;
14
+ hydratePreloadedEntity(key: number, shape: EntityDef): EntityRecord;
15
+ setPreloadedEntity(key: number, obj: Record<string, unknown>): PreloadedEntityRecord;
16
+ setEntity(key: number, obj: Record<string, unknown>, shape: EntityDef): EntityRecord;
17
+ }
18
+ //# sourceMappingURL=EntityMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityMap.d.ts","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAE3D,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAA2D;IAEtE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,YAAY,GAAG,SAAS;IAIxE,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY;IAWnE,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB;IAapF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY;CAcrF"}