@signalium/query 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +12 -0
- package/CHANGELOG.md +9 -0
- package/dist/cjs/EntityMap.js +46 -0
- package/dist/cjs/EntityMap.js.map +1 -0
- package/dist/cjs/QueryClient.js +180 -0
- package/dist/cjs/QueryClient.js.map +1 -0
- package/dist/cjs/QueryStore.js +219 -0
- package/dist/cjs/QueryStore.js.map +1 -0
- package/dist/cjs/errors.js +105 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/parseEntities.js +127 -0
- package/dist/cjs/parseEntities.js.map +1 -0
- package/dist/cjs/pathInterpolator.js +69 -0
- package/dist/cjs/pathInterpolator.js.map +1 -0
- package/dist/cjs/proxy.js +187 -0
- package/dist/cjs/proxy.js.map +1 -0
- package/dist/cjs/query.js +41 -0
- package/dist/cjs/query.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/typeDefs.js +249 -0
- package/dist/cjs/typeDefs.js.map +1 -0
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.js +65 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/EntityMap.d.ts +18 -0
- package/dist/esm/EntityMap.d.ts.map +1 -0
- package/dist/esm/EntityMap.js +42 -0
- package/dist/esm/EntityMap.js.map +1 -0
- package/dist/esm/QueryClient.d.ts +82 -0
- package/dist/esm/QueryClient.d.ts.map +1 -0
- package/dist/esm/QueryClient.js +175 -0
- package/dist/esm/QueryClient.js.map +1 -0
- package/dist/esm/QueryStore.d.ts +73 -0
- package/dist/esm/QueryStore.d.ts.map +1 -0
- package/dist/esm/QueryStore.js +209 -0
- package/dist/esm/QueryStore.js.map +1 -0
- package/dist/esm/errors.d.ts +4 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +101 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/parseEntities.d.ts +8 -0
- package/dist/esm/parseEntities.d.ts.map +1 -0
- package/dist/esm/parseEntities.js +120 -0
- package/dist/esm/parseEntities.js.map +1 -0
- package/dist/esm/pathInterpolator.d.ts +29 -0
- package/dist/esm/pathInterpolator.d.ts.map +1 -0
- package/dist/esm/pathInterpolator.js +66 -0
- package/dist/esm/pathInterpolator.js.map +1 -0
- package/dist/esm/proxy.d.ts +8 -0
- package/dist/esm/proxy.d.ts.map +1 -0
- package/dist/esm/proxy.js +180 -0
- package/dist/esm/proxy.js.map +1 -0
- package/dist/esm/query.d.ts +40 -0
- package/dist/esm/query.d.ts.map +1 -0
- package/dist/esm/query.js +38 -0
- package/dist/esm/query.js.map +1 -0
- package/dist/esm/typeDefs.d.ts +25 -0
- package/dist/esm/typeDefs.d.ts.map +1 -0
- package/dist/esm/typeDefs.js +239 -0
- package/dist/esm/typeDefs.js.map +1 -0
- package/dist/esm/types.d.ts +86 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.d.ts +6 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +60 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +3 -3
- package/vitest.config.ts +4 -10
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// -----------------------------------------------------------------------------
|
|
3
|
+
// Entity System
|
|
4
|
+
// -----------------------------------------------------------------------------
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseUnionEntities = parseUnionEntities;
|
|
7
|
+
exports.parseArrayEntities = parseArrayEntities;
|
|
8
|
+
exports.parseRecordEntities = parseRecordEntities;
|
|
9
|
+
exports.parseObjectEntities = parseObjectEntities;
|
|
10
|
+
exports.parseEntities = parseEntities;
|
|
11
|
+
const utils_1 = require("signalium/utils");
|
|
12
|
+
const types_js_1 = require("./types.js");
|
|
13
|
+
const utils_js_1 = require("./utils.js");
|
|
14
|
+
const entries = Object.entries;
|
|
15
|
+
function parseUnionEntities(valueType, value, unionDef, queryClient, entityRefs) {
|
|
16
|
+
if (valueType === 64 /* Mask.ARRAY */) {
|
|
17
|
+
const shape = unionDef.shape[types_js_1.ARRAY_KEY];
|
|
18
|
+
if (shape === undefined || typeof shape === 'number') {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
return parseArrayEntities(value, { mask: 64 /* Mask.ARRAY */, shape, values: undefined }, queryClient, entityRefs);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// Use the cached typename field from the union definition
|
|
25
|
+
const typenameField = unionDef.typenameField;
|
|
26
|
+
const typename = typenameField ? value[typenameField] : undefined;
|
|
27
|
+
if (typename === undefined || typeof typename !== 'string') {
|
|
28
|
+
const recordShape = unionDef.shape[types_js_1.RECORD_KEY];
|
|
29
|
+
if (recordShape === undefined || typeof recordShape === 'number') {
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
return parseRecordEntities(value, recordShape, queryClient, entityRefs);
|
|
33
|
+
}
|
|
34
|
+
const matchingDef = unionDef.shape[typename];
|
|
35
|
+
if (matchingDef === undefined || typeof matchingDef === 'number') {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
return parseObjectEntities(value, matchingDef, queryClient, entityRefs);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function parseArrayEntities(array, arrayShape, queryClient, entityRefs) {
|
|
42
|
+
for (let i = 0; i < array.length; i++) {
|
|
43
|
+
array[i] = parseEntities(array[i], arrayShape, queryClient, entityRefs);
|
|
44
|
+
}
|
|
45
|
+
return array;
|
|
46
|
+
}
|
|
47
|
+
function parseRecordEntities(record, recordShape, queryClient, entityRefs) {
|
|
48
|
+
if (typeof recordShape === 'number') {
|
|
49
|
+
return record;
|
|
50
|
+
}
|
|
51
|
+
for (const [key, value] of entries(record)) {
|
|
52
|
+
record[key] = parseEntities(value, recordShape, queryClient, entityRefs);
|
|
53
|
+
}
|
|
54
|
+
return record;
|
|
55
|
+
}
|
|
56
|
+
function parseObjectEntities(obj, objectShape, queryClient, entityRefs) {
|
|
57
|
+
const entityRefId = obj.__entityRef;
|
|
58
|
+
// Check if this is an entity reference (from cache)
|
|
59
|
+
if (typeof entityRefId === 'number') {
|
|
60
|
+
return queryClient.hydrateEntity(entityRefId, objectShape).proxy;
|
|
61
|
+
}
|
|
62
|
+
// Process sub-entity paths (only these paths can contain entities)
|
|
63
|
+
const { mask } = objectShape;
|
|
64
|
+
const childRefs = mask & 1024 /* Mask.ENTITY */ ? new Set() : entityRefs;
|
|
65
|
+
// Extract shape first to resolve lazy definitions and set subEntityPaths
|
|
66
|
+
const shape = (0, utils_js_1.extractShape)(objectShape);
|
|
67
|
+
const subEntityPaths = objectShape.subEntityPaths;
|
|
68
|
+
if (subEntityPaths !== undefined) {
|
|
69
|
+
if (typeof subEntityPaths === 'string') {
|
|
70
|
+
// Single path - avoid array allocation
|
|
71
|
+
const propDef = shape[subEntityPaths];
|
|
72
|
+
obj[subEntityPaths] = parseEntities(obj[subEntityPaths], propDef, queryClient, childRefs);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Multiple paths - iterate directly
|
|
76
|
+
for (const path of subEntityPaths) {
|
|
77
|
+
const propDef = shape[path];
|
|
78
|
+
obj[path] = parseEntities(obj[path], propDef, queryClient, childRefs);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Handle entity replacement (entities get cached and replaced with proxies)
|
|
83
|
+
if (mask & 1024 /* Mask.ENTITY */) {
|
|
84
|
+
const entityDef = objectShape;
|
|
85
|
+
const typename = entityDef.typenameValue;
|
|
86
|
+
const id = obj[entityDef.idField];
|
|
87
|
+
const desc = `${typename}:${id}`;
|
|
88
|
+
const key = (0, utils_1.hashValue)(desc);
|
|
89
|
+
// Add this entity's key to the parent's entityRefs (if provided)
|
|
90
|
+
if (entityRefs !== undefined) {
|
|
91
|
+
entityRefs.add(key);
|
|
92
|
+
}
|
|
93
|
+
return queryClient.saveEntity(key, obj, entityDef, childRefs).proxy;
|
|
94
|
+
}
|
|
95
|
+
// Return the processed object (even if not an entity)
|
|
96
|
+
return obj;
|
|
97
|
+
}
|
|
98
|
+
function parseEntities(value, def, queryClient, entityRefs) {
|
|
99
|
+
const valueType = (0, utils_js_1.typeMaskOf)(value);
|
|
100
|
+
const defType = def.mask;
|
|
101
|
+
// Skip primitives and incompatible types - they can't contain entities
|
|
102
|
+
// Note: We silently return incompatible values rather than erroring
|
|
103
|
+
if (valueType < 32 /* Mask.OBJECT */ || (defType & valueType) === 0) {
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
// Handle unions first - they can contain multiple types, and all of the union
|
|
107
|
+
// logic is handled above, so we return early here if it's a union
|
|
108
|
+
if ((defType & 512 /* Mask.UNION */) !== 0) {
|
|
109
|
+
return parseUnionEntities(valueType, value, def, queryClient, entityRefs);
|
|
110
|
+
}
|
|
111
|
+
// If it's not a union, AND the value IS an array, then the definition must
|
|
112
|
+
// be an ArrayDef, so we can cast safely here
|
|
113
|
+
if (valueType === 64 /* Mask.ARRAY */) {
|
|
114
|
+
return parseArrayEntities(value, def.shape, queryClient, entityRefs);
|
|
115
|
+
}
|
|
116
|
+
// Now we know the value is an object, so def must be a RecordDef, ObjectDef
|
|
117
|
+
// or EntityDef. We first check to see if it's a RecordDef, and if so, we can
|
|
118
|
+
// cast it here and return early.
|
|
119
|
+
if ((defType & 256 /* Mask.RECORD */) !== 0) {
|
|
120
|
+
return parseRecordEntities(value, def.shape, queryClient, entityRefs);
|
|
121
|
+
}
|
|
122
|
+
// Now we know the def is an ObjectDef or EntityDef. These are both handled
|
|
123
|
+
// the same way _mostly_, with Entities just returning a proxy instead of the
|
|
124
|
+
// object itself
|
|
125
|
+
return parseObjectEntities(value, def, queryClient, entityRefs);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=parseEntities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEntities.js","sourceRoot":"","sources":["../../src/parseEntities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Path interpolation utilities for URL templates with parameter substitution.
|
|
4
|
+
*
|
|
5
|
+
* Converts path templates like "/users/{userId}/posts/{postId}" into functions
|
|
6
|
+
* that efficiently interpolate parameter values.
|
|
7
|
+
*
|
|
8
|
+
* The implementation pre-parses the path template once into segments and parameter
|
|
9
|
+
* keys, then uses simple string concatenation at runtime for optimal performance.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createPathInterpolator = createPathInterpolator;
|
|
13
|
+
/**
|
|
14
|
+
* Creates an optimized path interpolation function from a URL template.
|
|
15
|
+
*
|
|
16
|
+
* The template uses curly braces for parameters (e.g., "/items/{id}").
|
|
17
|
+
* Parameter values are URL-encoded when interpolated. Any parameters not
|
|
18
|
+
* found in the path template are appended as query string parameters.
|
|
19
|
+
*
|
|
20
|
+
* @param pathTemplate - URL template with {paramName} placeholders
|
|
21
|
+
* @returns Function that interpolates parameters into the path with search params
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const interpolate = createPathInterpolator('/users/{userId}/posts/{postId}');
|
|
26
|
+
* const url = interpolate({ userId: '123', postId: '456', page: 2, limit: 10 });
|
|
27
|
+
* // Returns: "/users/123/posts/456?page=2&limit=10"
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
function createPathInterpolator(pathTemplate) {
|
|
31
|
+
// Pre-parse path into segments and param keys (parse once, concatenate many times)
|
|
32
|
+
const segments = [];
|
|
33
|
+
const paramKeys = [];
|
|
34
|
+
const paramKeysSet = new Set();
|
|
35
|
+
let lastIndex = 0;
|
|
36
|
+
const paramRegex = /\[([^\]]+)\]/g;
|
|
37
|
+
let match;
|
|
38
|
+
while ((match = paramRegex.exec(pathTemplate)) !== null) {
|
|
39
|
+
segments.push(pathTemplate.slice(lastIndex, match.index));
|
|
40
|
+
paramKeys.push(match[1]);
|
|
41
|
+
paramKeysSet.add(match[1]);
|
|
42
|
+
lastIndex = paramRegex.lastIndex;
|
|
43
|
+
}
|
|
44
|
+
segments.push(pathTemplate.slice(lastIndex));
|
|
45
|
+
// Return optimized interpolation function with pre-parsed segments
|
|
46
|
+
return (params) => {
|
|
47
|
+
// Build the path with interpolated path parameters
|
|
48
|
+
let result = segments[0];
|
|
49
|
+
for (let i = 0; i < paramKeys.length; i++) {
|
|
50
|
+
result += encodeURIComponent(String(params[paramKeys[i]])) + segments[i + 1];
|
|
51
|
+
}
|
|
52
|
+
// Collect remaining parameters as search params
|
|
53
|
+
let searchParams = null;
|
|
54
|
+
for (const key in params) {
|
|
55
|
+
if (!paramKeysSet.has(key) && params[key] !== undefined) {
|
|
56
|
+
if (searchParams === null) {
|
|
57
|
+
searchParams = new URLSearchParams();
|
|
58
|
+
}
|
|
59
|
+
searchParams.append(key, String(params[key]));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Append search params if any exist
|
|
63
|
+
if (searchParams !== null) {
|
|
64
|
+
result += '?' + searchParams.toString();
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=pathInterpolator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathInterpolator.js","sourceRoot":"","sources":["../../src/pathInterpolator.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAqBH,wDA4CC;AA7DD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,sBAAsB,CAAC,YAAoB;IACzD,mFAAmF;IACnF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,UAAU,GAAG,eAAe,CAAC;IACnC,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACnC,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7C,mEAAmE;IACnE,OAAO,CAAC,MAA2B,EAAU,EAAE;QAC7C,mDAAmD;QACnD,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,gDAAgD;QAChD,IAAI,YAAY,GAA2B,IAAI,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;gBACvC,CAAC;gBAED,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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 } = 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":";;AAyGA,sBAyDC;AAlKD,yCAAiD;AAYjD,qDAAwG;AACxG,+CAAwD;AACxD,+DAA+D;AA2F/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,GAAG,sBAAsB,CAAC,eAAC,CAAC,CAAC;YAE5E,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"}
|