@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.
Files changed (78) hide show
  1. package/.turbo/turbo-build.log +12 -0
  2. package/CHANGELOG.md +9 -0
  3. package/dist/cjs/EntityMap.js +46 -0
  4. package/dist/cjs/EntityMap.js.map +1 -0
  5. package/dist/cjs/QueryClient.js +180 -0
  6. package/dist/cjs/QueryClient.js.map +1 -0
  7. package/dist/cjs/QueryStore.js +219 -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 +6 -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 +82 -0
  33. package/dist/esm/QueryClient.d.ts.map +1 -0
  34. package/dist/esm/QueryClient.js +175 -0
  35. package/dist/esm/QueryClient.js.map +1 -0
  36. package/dist/esm/QueryStore.d.ts +73 -0
  37. package/dist/esm/QueryStore.d.ts.map +1 -0
  38. package/dist/esm/QueryStore.js +209 -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 +40 -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 +86 -0
  69. package/dist/esm/types.d.ts.map +1 -0
  70. package/dist/esm/types.js +3 -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/vitest.config.ts +4 -10
@@ -0,0 +1,120 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Entity System
3
+ // -----------------------------------------------------------------------------
4
+ import { hashValue } from 'signalium/utils';
5
+ import { ARRAY_KEY, RECORD_KEY, } from './types.js';
6
+ import { extractShape, typeMaskOf } from './utils.js';
7
+ const entries = Object.entries;
8
+ export function parseUnionEntities(valueType, value, unionDef, queryClient, entityRefs) {
9
+ if (valueType === 64 /* Mask.ARRAY */) {
10
+ const shape = unionDef.shape[ARRAY_KEY];
11
+ if (shape === undefined || typeof shape === 'number') {
12
+ return value;
13
+ }
14
+ return parseArrayEntities(value, { mask: 64 /* Mask.ARRAY */, shape, values: undefined }, queryClient, entityRefs);
15
+ }
16
+ else {
17
+ // Use the cached typename field from the union definition
18
+ const typenameField = unionDef.typenameField;
19
+ const typename = typenameField ? value[typenameField] : undefined;
20
+ if (typename === undefined || typeof typename !== 'string') {
21
+ const recordShape = unionDef.shape[RECORD_KEY];
22
+ if (recordShape === undefined || typeof recordShape === 'number') {
23
+ return value;
24
+ }
25
+ return parseRecordEntities(value, recordShape, queryClient, entityRefs);
26
+ }
27
+ const matchingDef = unionDef.shape[typename];
28
+ if (matchingDef === undefined || typeof matchingDef === 'number') {
29
+ return value;
30
+ }
31
+ return parseObjectEntities(value, matchingDef, queryClient, entityRefs);
32
+ }
33
+ }
34
+ export function parseArrayEntities(array, arrayShape, queryClient, entityRefs) {
35
+ for (let i = 0; i < array.length; i++) {
36
+ array[i] = parseEntities(array[i], arrayShape, queryClient, entityRefs);
37
+ }
38
+ return array;
39
+ }
40
+ export function parseRecordEntities(record, recordShape, queryClient, entityRefs) {
41
+ if (typeof recordShape === 'number') {
42
+ return record;
43
+ }
44
+ for (const [key, value] of entries(record)) {
45
+ record[key] = parseEntities(value, recordShape, queryClient, entityRefs);
46
+ }
47
+ return record;
48
+ }
49
+ export function parseObjectEntities(obj, objectShape, queryClient, entityRefs) {
50
+ const entityRefId = obj.__entityRef;
51
+ // Check if this is an entity reference (from cache)
52
+ if (typeof entityRefId === 'number') {
53
+ return queryClient.hydrateEntity(entityRefId, objectShape).proxy;
54
+ }
55
+ // Process sub-entity paths (only these paths can contain entities)
56
+ const { mask } = objectShape;
57
+ const childRefs = mask & 1024 /* Mask.ENTITY */ ? new Set() : entityRefs;
58
+ // Extract shape first to resolve lazy definitions and set subEntityPaths
59
+ const shape = extractShape(objectShape);
60
+ const subEntityPaths = objectShape.subEntityPaths;
61
+ if (subEntityPaths !== undefined) {
62
+ if (typeof subEntityPaths === 'string') {
63
+ // Single path - avoid array allocation
64
+ const propDef = shape[subEntityPaths];
65
+ obj[subEntityPaths] = parseEntities(obj[subEntityPaths], propDef, queryClient, childRefs);
66
+ }
67
+ else {
68
+ // Multiple paths - iterate directly
69
+ for (const path of subEntityPaths) {
70
+ const propDef = shape[path];
71
+ obj[path] = parseEntities(obj[path], propDef, queryClient, childRefs);
72
+ }
73
+ }
74
+ }
75
+ // Handle entity replacement (entities get cached and replaced with proxies)
76
+ if (mask & 1024 /* Mask.ENTITY */) {
77
+ const entityDef = objectShape;
78
+ const typename = entityDef.typenameValue;
79
+ const id = obj[entityDef.idField];
80
+ const desc = `${typename}:${id}`;
81
+ const key = hashValue(desc);
82
+ // Add this entity's key to the parent's entityRefs (if provided)
83
+ if (entityRefs !== undefined) {
84
+ entityRefs.add(key);
85
+ }
86
+ return queryClient.saveEntity(key, obj, entityDef, childRefs).proxy;
87
+ }
88
+ // Return the processed object (even if not an entity)
89
+ return obj;
90
+ }
91
+ export function parseEntities(value, def, queryClient, entityRefs) {
92
+ const valueType = typeMaskOf(value);
93
+ const defType = def.mask;
94
+ // Skip primitives and incompatible types - they can't contain entities
95
+ // Note: We silently return incompatible values rather than erroring
96
+ if (valueType < 32 /* Mask.OBJECT */ || (defType & valueType) === 0) {
97
+ return value;
98
+ }
99
+ // Handle unions first - they can contain multiple types, and all of the union
100
+ // logic is handled above, so we return early here if it's a union
101
+ if ((defType & 512 /* Mask.UNION */) !== 0) {
102
+ return parseUnionEntities(valueType, value, def, queryClient, entityRefs);
103
+ }
104
+ // If it's not a union, AND the value IS an array, then the definition must
105
+ // be an ArrayDef, so we can cast safely here
106
+ if (valueType === 64 /* Mask.ARRAY */) {
107
+ return parseArrayEntities(value, def.shape, queryClient, entityRefs);
108
+ }
109
+ // Now we know the value is an object, so def must be a RecordDef, ObjectDef
110
+ // or EntityDef. We first check to see if it's a RecordDef, and if so, we can
111
+ // cast it here and return early.
112
+ if ((defType & 256 /* Mask.RECORD */) !== 0) {
113
+ return parseRecordEntities(value, def.shape, queryClient, entityRefs);
114
+ }
115
+ // Now we know the def is an ObjectDef or EntityDef. These are both handled
116
+ // the same way _mostly_, with Entities just returning a proxy instead of the
117
+ // object itself
118
+ return parseObjectEntities(value, def, queryClient, entityRefs);
119
+ }
120
+ //# 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,29 @@
1
+ /**
2
+ * Path interpolation utilities for URL templates with parameter substitution.
3
+ *
4
+ * Converts path templates like "/users/{userId}/posts/{postId}" into functions
5
+ * that efficiently interpolate parameter values.
6
+ *
7
+ * The implementation pre-parses the path template once into segments and parameter
8
+ * keys, then uses simple string concatenation at runtime for optimal performance.
9
+ */
10
+ export type PathInterpolator = (params: Record<string, any>) => string;
11
+ /**
12
+ * Creates an optimized path interpolation function from a URL template.
13
+ *
14
+ * The template uses curly braces for parameters (e.g., "/items/{id}").
15
+ * Parameter values are URL-encoded when interpolated. Any parameters not
16
+ * found in the path template are appended as query string parameters.
17
+ *
18
+ * @param pathTemplate - URL template with {paramName} placeholders
19
+ * @returns Function that interpolates parameters into the path with search params
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const interpolate = createPathInterpolator('/users/{userId}/posts/{postId}');
24
+ * const url = interpolate({ userId: '123', postId: '456', page: 2, limit: 10 });
25
+ * // Returns: "/users/123/posts/456?page=2&limit=10"
26
+ * ```
27
+ */
28
+ export declare function createPathInterpolator(pathTemplate: string): PathInterpolator;
29
+ //# sourceMappingURL=pathInterpolator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathInterpolator.d.ts","sourceRoot":"","sources":["../../src/pathInterpolator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AAEvE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CA4C7E"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Path interpolation utilities for URL templates with parameter substitution.
3
+ *
4
+ * Converts path templates like "/users/{userId}/posts/{postId}" into functions
5
+ * that efficiently interpolate parameter values.
6
+ *
7
+ * The implementation pre-parses the path template once into segments and parameter
8
+ * keys, then uses simple string concatenation at runtime for optimal performance.
9
+ */
10
+ /**
11
+ * Creates an optimized path interpolation function from a URL template.
12
+ *
13
+ * The template uses curly braces for parameters (e.g., "/items/{id}").
14
+ * Parameter values are URL-encoded when interpolated. Any parameters not
15
+ * found in the path template are appended as query string parameters.
16
+ *
17
+ * @param pathTemplate - URL template with {paramName} placeholders
18
+ * @returns Function that interpolates parameters into the path with search params
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const interpolate = createPathInterpolator('/users/{userId}/posts/{postId}');
23
+ * const url = interpolate({ userId: '123', postId: '456', page: 2, limit: 10 });
24
+ * // Returns: "/users/123/posts/456?page=2&limit=10"
25
+ * ```
26
+ */
27
+ export function createPathInterpolator(pathTemplate) {
28
+ // Pre-parse path into segments and param keys (parse once, concatenate many times)
29
+ const segments = [];
30
+ const paramKeys = [];
31
+ const paramKeysSet = new Set();
32
+ let lastIndex = 0;
33
+ const paramRegex = /\[([^\]]+)\]/g;
34
+ let match;
35
+ while ((match = paramRegex.exec(pathTemplate)) !== null) {
36
+ segments.push(pathTemplate.slice(lastIndex, match.index));
37
+ paramKeys.push(match[1]);
38
+ paramKeysSet.add(match[1]);
39
+ lastIndex = paramRegex.lastIndex;
40
+ }
41
+ segments.push(pathTemplate.slice(lastIndex));
42
+ // Return optimized interpolation function with pre-parsed segments
43
+ return (params) => {
44
+ // Build the path with interpolated path parameters
45
+ let result = segments[0];
46
+ for (let i = 0; i < paramKeys.length; i++) {
47
+ result += encodeURIComponent(String(params[paramKeys[i]])) + segments[i + 1];
48
+ }
49
+ // Collect remaining parameters as search params
50
+ let searchParams = null;
51
+ for (const key in params) {
52
+ if (!paramKeysSet.has(key) && params[key] !== undefined) {
53
+ if (searchParams === null) {
54
+ searchParams = new URLSearchParams();
55
+ }
56
+ searchParams.append(key, String(params[key]));
57
+ }
58
+ }
59
+ // Append search params if any exist
60
+ if (searchParams !== null) {
61
+ result += '?' + searchParams.toString();
62
+ }
63
+ return result;
64
+ };
65
+ }
66
+ //# sourceMappingURL=pathInterpolator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathInterpolator.js","sourceRoot":"","sources":["../../src/pathInterpolator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,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,8 @@
1
+ import { ComplexTypeDef, EntityDef, ObjectDef, ObjectFieldTypeDef, TypeDef } from './types.js';
2
+ import { PreloadedEntityRecord } from './EntityMap.js';
3
+ export declare function parseArrayValue(array: unknown[], arrayShape: TypeDef, path: string): unknown[];
4
+ export declare function parseRecordValue(record: Record<string, unknown>, recordShape: ComplexTypeDef, path: string): Record<string, unknown>;
5
+ export declare function parseObjectValue(object: Record<string, unknown>, objectShape: ObjectDef | EntityDef, path: string): Record<string, unknown>;
6
+ export declare function parseValue(value: unknown, propDef: ObjectFieldTypeDef, path: string): unknown;
7
+ export declare function createEntityProxy(id: number, entityRecord: PreloadedEntityRecord, def: ObjectDef | EntityDef, desc?: string): Record<string, unknown>;
8
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/proxy.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,cAAc,EACd,SAAS,EAET,SAAS,EAET,kBAAkB,EAElB,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AA6CvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAMlF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,2BAM1G;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,2BAcjH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyE7F;AAID,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,qBAAqB,EACnC,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkFzB"}
@@ -0,0 +1,180 @@
1
+ import { typeError } from './errors.js';
2
+ import { getFormat } from './typeDefs.js';
3
+ import { ARRAY_KEY, RECORD_KEY, } from './types.js';
4
+ import { extractShape, typeMaskOf } from './utils.js';
5
+ const entries = Object.entries;
6
+ const PROXY_BRAND = new WeakSet();
7
+ function parseUnionValue(valueType, value, unionDef, path) {
8
+ if (valueType === 64 /* Mask.ARRAY */) {
9
+ const shape = unionDef.shape[ARRAY_KEY];
10
+ if (shape === undefined || typeof shape === 'number') {
11
+ return value;
12
+ }
13
+ return parseArrayValue(value, shape, path);
14
+ }
15
+ else {
16
+ // Use the cached typename field from the union definition
17
+ const typenameField = unionDef.typenameField;
18
+ const typename = typenameField ? value[typenameField] : undefined;
19
+ if (typename === undefined || typeof typename !== 'string') {
20
+ const recordShape = unionDef.shape[RECORD_KEY];
21
+ if (recordShape === undefined || typeof recordShape === 'number') {
22
+ return value;
23
+ }
24
+ return parseRecordValue(value, recordShape, path);
25
+ }
26
+ const matchingDef = unionDef.shape[typename];
27
+ if (matchingDef === undefined || typeof matchingDef === 'number') {
28
+ return value;
29
+ }
30
+ return parseObjectValue(value, matchingDef, path);
31
+ }
32
+ }
33
+ export function parseArrayValue(array, arrayShape, path) {
34
+ for (let i = 0; i < array.length; i++) {
35
+ array[i] = parseValue(array[i], arrayShape, `${path}[${i}]`);
36
+ }
37
+ return array;
38
+ }
39
+ export function parseRecordValue(record, recordShape, path) {
40
+ for (const [key, value] of entries(record)) {
41
+ record[key] = parseValue(value, recordShape, `${path}["${key}"]`);
42
+ }
43
+ return record;
44
+ }
45
+ export function parseObjectValue(object, objectShape, path) {
46
+ if (PROXY_BRAND.has(object)) {
47
+ // Is an entity proxy, so return it directly
48
+ return object;
49
+ }
50
+ const shape = extractShape(objectShape);
51
+ for (const [key, propShape] of entries(shape)) {
52
+ // parse and replace the property in place
53
+ object[key] = parseValue(object[key], propShape, `${path}.${key}`);
54
+ }
55
+ return object;
56
+ }
57
+ export function parseValue(value, propDef, path) {
58
+ // Handle Set-based constants/enums
59
+ if (propDef instanceof Set) {
60
+ if (!propDef.has(value)) {
61
+ throw typeError(path, propDef, value);
62
+ }
63
+ return value;
64
+ }
65
+ switch (typeof propDef) {
66
+ case 'string':
67
+ if (value !== propDef) {
68
+ throw typeError(path, propDef, value);
69
+ }
70
+ return value;
71
+ // handle primitives
72
+ case 'number': {
73
+ let valueType = typeMaskOf(value);
74
+ if ((propDef & valueType) === 0) {
75
+ throw typeError(path, propDef, value);
76
+ }
77
+ if ((propDef & 4096 /* Mask.HAS_NUMBER_FORMAT */) !== 0 && valueType === 4 /* Mask.NUMBER */) {
78
+ return getFormat(propDef)(value);
79
+ }
80
+ if ((propDef & 8192 /* Mask.HAS_STRING_FORMAT */) !== 0 && valueType === 8 /* Mask.STRING */) {
81
+ return getFormat(propDef)(value);
82
+ }
83
+ return value;
84
+ }
85
+ // handle complex objects
86
+ default: {
87
+ // Note: Keep in mind that at this point, we're using `valueType`
88
+ // primarily, so some of the logic is "reversed" from the above where
89
+ // we use the `propDef` type primarily
90
+ let valueType = typeMaskOf(value);
91
+ const propMask = propDef.mask;
92
+ // Check if the value type is allowed by the propMask
93
+ // Also check if it's in a values set (for enums/constants stored in ValidatorDef)
94
+ if ((propMask & valueType) === 0 && !propDef.values?.has(value)) {
95
+ throw typeError(path, propMask, value);
96
+ }
97
+ if (valueType < 32 /* Mask.OBJECT */) {
98
+ if ((propMask & 4096 /* Mask.HAS_NUMBER_FORMAT */) !== 0 && valueType === 4 /* Mask.NUMBER */) {
99
+ return getFormat(propMask)(value);
100
+ }
101
+ if ((propMask & 8192 /* Mask.HAS_STRING_FORMAT */) !== 0 && valueType === 8 /* Mask.STRING */) {
102
+ return getFormat(propMask)(value);
103
+ }
104
+ // value is a primitive, it has already passed the mask so return it now
105
+ return value;
106
+ }
107
+ if ((valueType & 512 /* Mask.UNION */) !== 0) {
108
+ return parseUnionValue(valueType, value, propDef, path);
109
+ }
110
+ if (valueType === 64 /* Mask.ARRAY */) {
111
+ return parseArrayValue(value, propDef.shape, path);
112
+ }
113
+ return parseObjectValue(value, propDef, path);
114
+ }
115
+ }
116
+ }
117
+ const CustomNodeInspect = Symbol.for('nodejs.util.inspect.custom');
118
+ export function createEntityProxy(id, entityRecord, def, desc) {
119
+ // Cache for nested proxies - each proxy gets its own cache
120
+ const shape = extractShape(def);
121
+ const toJSON = () => ({
122
+ __entityRef: id,
123
+ });
124
+ const handler = {
125
+ get(target, prop) {
126
+ // Handle toJSON for serialization
127
+ if (prop === 'toJSON') {
128
+ return toJSON;
129
+ }
130
+ const { signal, cache } = entityRecord;
131
+ const obj = signal.value;
132
+ // Check cache first, BEFORE any expensive checks
133
+ if (cache.has(prop)) {
134
+ return cache.get(prop);
135
+ }
136
+ let value = obj[prop];
137
+ let propDef = shape[prop];
138
+ if (!Object.hasOwnProperty.call(shape, prop)) {
139
+ return value;
140
+ }
141
+ const parsed = parseValue(value, propDef, `[[${desc}]].${prop}`);
142
+ cache.set(prop, parsed);
143
+ return parsed;
144
+ },
145
+ has(target, prop) {
146
+ return prop in shape;
147
+ },
148
+ ownKeys(target) {
149
+ const keys = Object.keys(shape);
150
+ // Add typename field if it exists on the definition
151
+ const typenameField = def.typenameField;
152
+ if (typenameField && !keys.includes(typenameField)) {
153
+ keys.push(typenameField);
154
+ }
155
+ return keys;
156
+ },
157
+ getOwnPropertyDescriptor(target, prop) {
158
+ const typenameField = def.typenameField;
159
+ if (prop in shape || prop === typenameField) {
160
+ return {
161
+ enumerable: true,
162
+ configurable: true,
163
+ };
164
+ }
165
+ return undefined;
166
+ },
167
+ };
168
+ const proxy = new Proxy({
169
+ [CustomNodeInspect]: () => {
170
+ return Object.keys(shape).reduce((acc, key) => {
171
+ acc[key] = proxy[key];
172
+ return acc;
173
+ }, {});
174
+ },
175
+ }, handler);
176
+ // Add the proxy to the proxy brand set so we can easily identify it later
177
+ PROXY_BRAND.add(proxy);
178
+ return proxy;
179
+ }
180
+ //# 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,40 @@
1
+ import { APITypes, ArrayDef, DiscriminatedQueryResult, EntityDef, Mask, ObjectDef, RecordDef, ObjectFieldTypeDef, UnionDef } from './types.js';
2
+ import { QueryCacheOptions } from './QueryClient.js';
3
+ type ExtractPrimitiveTypeFromMask<T extends number> = T extends Mask.UNDEFINED ? undefined : T extends Mask.NULL ? null : T extends Mask.NUMBER ? number : T extends Mask.STRING ? string : T extends Mask.BOOLEAN ? boolean : T extends Mask.ID ? string : never;
4
+ export type ExtractType<T extends ObjectFieldTypeDef | string> = T extends number ? ExtractPrimitiveTypeFromMask<T> : T extends string ? T : T extends Set<infer TSet> ? TSet : T extends ObjectDef<infer S> ? Prettify<ExtractTypesFromShape<S>> : T extends EntityDef<infer S> ? Prettify<ExtractTypesFromShape<S>> : T extends ArrayDef<infer S> ? ExtractType<S>[] : T extends RecordDef<infer S> ? Record<string, ExtractType<S>> : T extends UnionDef<infer VS> ? ExtractType<VS[number]> : never;
5
+ type ExtractTypesFromShape<S extends Record<string, ObjectFieldTypeDef | string>> = {
6
+ [K in keyof S]: ExtractType<S[K]>;
7
+ };
8
+ type IsParameter<Part> = Part extends `[${infer ParamName}]` ? ParamName : never;
9
+ type FilteredParts<Path> = Path extends `${infer PartA}/${infer PartB}` ? IsParameter<PartA> | FilteredParts<PartB> : IsParameter<Path>;
10
+ type ParamValue<Key> = Key extends `...${infer Anything}` ? (string | number)[] : string | number;
11
+ type RemovePrefixDots<Key> = Key extends `...${infer Name}` ? Name : Key;
12
+ type PathParams<Path> = {
13
+ [Key in FilteredParts<Path> as RemovePrefixDots<Key>]: ParamValue<Key>;
14
+ };
15
+ interface RESTQueryDefinition {
16
+ path: string;
17
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
18
+ searchParams?: Record<string, ObjectFieldTypeDef>;
19
+ response: Record<string, ObjectFieldTypeDef> | ObjectFieldTypeDef;
20
+ cache?: QueryCacheOptions;
21
+ }
22
+ type ExtractTypesFromObjectOrTypeDef<S extends Record<string, ObjectFieldTypeDef> | ObjectFieldTypeDef | undefined> = S extends Record<string, ObjectFieldTypeDef> ? {
23
+ [K in keyof S]: ExtractType<S[K]>;
24
+ } : S extends ObjectFieldTypeDef ? ExtractType<S> : {};
25
+ type QueryParams<QDef extends RESTQueryDefinition> = PathParams<QDef['path']> & ExtractTypesFromObjectOrTypeDef<QDef['searchParams']>;
26
+ type QueryParamsOrUndefined<QDef extends RESTQueryDefinition> = {} extends QueryParams<QDef> ? undefined : QueryParams<QDef>;
27
+ type HasRequiredKeys<T> = {} extends T ? false : {
28
+ [K in keyof T]: undefined;
29
+ } extends T ? false : true;
30
+ type Optionalize<T> = T extends object ? {
31
+ -readonly [K in keyof T as undefined extends T[K] ? never : K]: T[K];
32
+ } & {
33
+ -readonly [K in keyof T as undefined extends T[K] ? K : never]?: T[K];
34
+ } : T;
35
+ type Prettify<T> = T extends object ? {
36
+ -readonly [K in keyof T]: T[K];
37
+ } & {} : T;
38
+ export declare function query<const QDef extends RESTQueryDefinition>(queryDefinitionBuilder: (t: APITypes) => QDef): (...args: HasRequiredKeys<QueryParams<QDef>> extends true ? [params: Prettify<Optionalize<QueryParams<QDef>>>] : [params?: Prettify<Optionalize<QueryParamsOrUndefined<QDef>>>]) => DiscriminatedQueryResult<Readonly<Prettify<ExtractTypesFromObjectOrTypeDef<QDef['response']>>>>;
39
+ export {};
40
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { getContext, reactive } from 'signalium';
2
+ import { QueryClientContext } from './QueryClient.js';
3
+ import { t, ValidatorDef } from './typeDefs.js';
4
+ import { createPathInterpolator } from './pathInterpolator.js';
5
+ export function query(queryDefinitionBuilder) {
6
+ let queryDefinition;
7
+ return reactive((params) => {
8
+ const queryClient = getContext(QueryClientContext);
9
+ if (queryClient === undefined) {
10
+ throw new Error('QueryClient not found');
11
+ }
12
+ if (queryDefinition === undefined) {
13
+ const { path, method = 'GET', response, cache } = queryDefinitionBuilder(t);
14
+ const id = `${method}:${path}`;
15
+ const shape = typeof response === 'object' && !(response instanceof ValidatorDef)
16
+ ? t.object(response)
17
+ : response;
18
+ // Create optimized path interpolator (parses template once)
19
+ const interpolatePath = createPathInterpolator(path);
20
+ const fetchFn = async (context, params) => {
21
+ // Interpolate path params and append search params automatically
22
+ const url = interpolatePath(params);
23
+ const response = await context.fetch(url, {
24
+ method,
25
+ });
26
+ return response.json();
27
+ };
28
+ queryDefinition = {
29
+ id,
30
+ shape,
31
+ fetchFn,
32
+ cache,
33
+ };
34
+ }
35
+ return queryClient.getQuery(queryDefinition, params);
36
+ });
37
+ }
38
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAYjD,OAAO,EAAqB,kBAAkB,EAAiC,MAAM,kBAAkB,CAAC;AACxG,OAAO,EAAU,CAAC,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AA2F/D,MAAM,UAAU,KAAK,CACnB,sBAA6C;IAM7C,IAAI,eAES,CAAC;IAEd,OAAO,QAAQ,CACb,CAAC,MAA+B,EAA+E,EAAE;QAC/G,MAAM,WAAW,GAAG,UAAU,CAAC,kBAAkB,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,CAAC,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,YAAY,CAAC;gBACjE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAA8C,CAAC;gBAC1D,CAAC,CAAE,QAA+B,CAAC;YAEvC,4DAA4D;YAC5D,MAAM,eAAe,GAAG,sBAAsB,CAAC,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,25 @@
1
+ import { APITypes, ArrayDef, EntityDef, Mask, ObjectDef, ObjectShape, RecordDef, TypeDef, ObjectFieldTypeDef, UnionTypeDefs } from './types.js';
2
+ export declare class ValidatorDef<T> {
3
+ mask: Mask;
4
+ shape: ObjectFieldTypeDef | ObjectShape | ((t: APITypes) => ObjectShape) | UnionTypeDefs | undefined;
5
+ subEntityPaths: undefined | string | string[];
6
+ values: Set<string | boolean | number> | undefined;
7
+ typenameField: string | undefined;
8
+ typenameValue: string | undefined;
9
+ idField: string | undefined;
10
+ private _optional;
11
+ private _nullable;
12
+ private _nullish;
13
+ constructor(mask: Mask, shape: ObjectFieldTypeDef | ObjectShape | ((t: APITypes) => ObjectShape) | UnionTypeDefs | undefined, subEntityPaths?: undefined | string | string[], values?: Set<string | boolean | number> | undefined, typenameField?: string | undefined, typenameValue?: string | undefined, idField?: string | undefined);
14
+ get optional(): ValidatorDef<T | undefined>;
15
+ get nullable(): ValidatorDef<T | null>;
16
+ get nullish(): ValidatorDef<T | null | undefined>;
17
+ }
18
+ export declare function defineArray<T extends TypeDef>(shape: T): ArrayDef<T>;
19
+ export declare function defineRecord<T extends TypeDef>(shape: T): RecordDef<T>;
20
+ export declare function defineObject<T extends ObjectShape>(shape: T): ObjectDef<T>;
21
+ export declare function getFormat(mask: number): (value: unknown) => unknown;
22
+ export declare function registerFormat<Input extends string | boolean, T>(name: string, type: Input extends string ? Mask.STRING : Mask.BOOLEAN, parse: (value: Input) => T, serialize: (value: T) => Input): void;
23
+ export declare function entity<T extends ObjectShape>(shape: (t: APITypes) => T): EntityDef<T>;
24
+ export declare const t: APITypes;
25
+ //# sourceMappingURL=typeDefs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeDefs.d.ts","sourceRoot":"","sources":["../../src/typeDefs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAER,QAAQ,EAER,SAAS,EACT,IAAI,EACJ,SAAS,EACT,WAAW,EAEX,SAAS,EACT,OAAO,EACP,kBAAkB,EAElB,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,qBAAa,YAAY,CAAC,CAAC;IAMhB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,kBAAkB,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,WAAW,CAAC,GAAG,aAAa,GAAG,SAAS;IACpG,cAAc,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,EAAE;IAC7C,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS;IAClD,aAAa,EAAE,MAAM,GAAG,SAAS;IACjC,aAAa,EAAE,MAAM,GAAG,SAAS;IACjC,OAAO,EAAE,MAAM,GAAG,SAAS;IAXpC,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,QAAQ,CAAiD;gBAGxD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,kBAAkB,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,WAAW,CAAC,GAAG,aAAa,GAAG,SAAS,EACpG,cAAc,GAAE,SAAS,GAAG,MAAM,GAAG,MAAM,EAAc,EACzD,MAAM,GAAE,GAAG,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,SAAqB,EAC9D,aAAa,GAAE,MAAM,GAAG,SAAqB,EAC7C,aAAa,GAAE,MAAM,GAAG,SAAqB,EAC7C,OAAO,GAAE,MAAM,GAAG,SAAqB;IAGhD,IAAI,QAAQ,IAAI,YAAY,CAAC,CAAC,GAAG,SAAS,CAAC,CAa1C;IAED,IAAI,QAAQ,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAarC;IAED,IAAI,OAAO,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAahD;CACF;AAMD,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CASpE;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAUtE;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAM1E;AA4LD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAInE;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAS,MAAM,GAAG,OAAO,EAAE,CAAC,EAC9D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,KAAK,SAAS,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EACvD,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,EAC1B,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,QAW/B;AAMD,wBAAgB,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAMrF;AAED,eAAO,MAAM,CAAC,EAAE,QAef,CAAC"}