@quadrokit/client 0.2.10 → 0.2.12
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/README.md +1 -1
- package/dist/runtime/collection.d.ts +2 -0
- package/dist/runtime/collection.d.ts.map +1 -1
- package/dist/runtime/collection.mjs +6 -1
- package/dist/runtime/data-class.d.ts +1 -1
- package/dist/runtime/data-class.d.ts.map +1 -1
- package/dist/runtime/paths.d.ts +1 -1
- package/dist/runtime/paths.d.ts.map +1 -1
- package/dist/runtime/paths.mjs +1 -1
- package/dist/runtime/query.d.ts +8 -5
- package/dist/runtime/query.d.ts.map +1 -1
- package/dist/runtime/query.mjs +14 -51
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `@quadrokit/client`
|
|
2
2
|
|
|
3
|
-
Typed **4D REST** helper: small runtime (`fetch` with `credentials: 'include'`, paging, `$
|
|
3
|
+
Typed **4D REST** helper: small runtime (`fetch` with `credentials: 'include'`, paging, [`$attributes`](https://developer.4d.com/docs/REST/attributes)) plus a **code generator** that turns a catalog JSON into `.quadrokit/generated`.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -16,6 +16,8 @@ export interface CollectionOptions extends ListQueryParams {
|
|
|
16
16
|
select?: readonly string[];
|
|
17
17
|
/** Stop iteration after this many rows (avoids walking every page). */
|
|
18
18
|
maxItems?: number;
|
|
19
|
+
/** When aborted (e.g. React effect cleanup), list fetches stop and iteration ends. */
|
|
20
|
+
signal?: AbortSignal;
|
|
19
21
|
}
|
|
20
22
|
export type MapRow<R> = (raw: unknown) => R;
|
|
21
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/runtime/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAGxE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,gEAAgE;IAChE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/runtime/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAGxE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,gEAAgE;IAChE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,CAAA;AAe3C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,iBAAiB,EACtB,cAAc,EAAE,iBAAiB,EACjC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,gBAAgB,CAAC,CAAC,CAAC,CA+FrB;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACnD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA"}
|
|
@@ -20,7 +20,9 @@ export function createCollection(ctx, initialOptions, mapRow) {
|
|
|
20
20
|
let entitySetUrl = ctx.entitySetUrl;
|
|
21
21
|
async function fetchPage(page) {
|
|
22
22
|
const qs = buildListSearchParams(ctx.className, { ...initialOptions, page }, ctx.relationMap);
|
|
23
|
-
const res = await ctx.http.request(`${ctx.path}${qs}
|
|
23
|
+
const res = await ctx.http.request(`${ctx.path}${qs}`, {
|
|
24
|
+
signal: initialOptions.signal,
|
|
25
|
+
});
|
|
24
26
|
const text = await res.text();
|
|
25
27
|
if (!res.ok) {
|
|
26
28
|
throw new Error(`List failed ${res.status}: ${text.slice(0, 200)}`);
|
|
@@ -45,6 +47,9 @@ export function createCollection(ctx, initialOptions, mapRow) {
|
|
|
45
47
|
break;
|
|
46
48
|
}
|
|
47
49
|
for (const raw of rows) {
|
|
50
|
+
if (initialOptions.signal?.aborted) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
48
53
|
const mapped = mapRow(raw);
|
|
49
54
|
const pk = primaryKeyFromRow(raw, ctx.keyNames);
|
|
50
55
|
if (pk !== undefined) {
|
|
@@ -4,7 +4,7 @@ import { unwrapEntityList } from './unwrap.js';
|
|
|
4
4
|
export interface DataClassRuntimeConfig {
|
|
5
5
|
http: QuadroHttp;
|
|
6
6
|
className: string;
|
|
7
|
-
/** relation attribute name → target class name
|
|
7
|
+
/** relation attribute name → target class name (typing / navigation; list queries use `$attributes`) */
|
|
8
8
|
relationMap: Record<string, string>;
|
|
9
9
|
keyNames: readonly string[];
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-class.d.ts","sourceRoot":"","sources":["../../src/runtime/data-class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAoB,MAAM,iBAAiB,CAAA;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,
|
|
1
|
+
{"version":3,"file":"data-class.d.ts","sourceRoot":"","sources":["../../src/runtime/data-class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAoB,MAAM,iBAAiB,CAAA;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,wGAAwG;IACxG,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,sBAAsB;QAIjE,CAAC,SAAS,SAAS,MAAM,EAAE,0BACnB,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,CAAC,CAAA;KAAE,GAC3C,gBAAgB,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAc7C,CAAC,SAAS,SAAS,MAAM,EAAE,oBAC/B,MAAM,GAAG,MAAM,YACT;QAAE,MAAM,CAAC,EAAE,CAAC,CAAA;KAAE,GACvB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;eASH,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;UAU7C,CAAC,SAAS,SAAS,MAAM,EAAE,wBACvB,MAAM,YACJ,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,CAAA;KAAE,GAC/D,gBAAgB,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;EAe1D;AA6BD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAA;CAC5C;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,sBAAsB,EAC3B,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM;SAKhB,CAAC,SAAS,SAAS,MAAM,EAAE,0BACpB,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,CAAC,CAAA;KAAE,GAC3C,gBAAgB,CAAC,OAAO,CAAC;EAc/B;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,sBAAsB,EAC3B,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,GAC1D,IAAI,CAYN;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
|
package/dist/runtime/paths.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Type-level helpers for `$
|
|
1
|
+
/** Type-level helpers for `$attributes` dot paths (compile-time only). */
|
|
2
2
|
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
3
3
|
type PickOne<T, H extends string> = H extends keyof T & string ? Pick<T, H> : H extends `${infer K}.${infer R}` ? K extends keyof T & string ? NonNullable<T[K]> extends infer U ? U extends object ? {
|
|
4
4
|
[P in K]: PickOne<U, R>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CACjF,CAAC,EAAE,MAAM,CAAC,KACP,IAAI,GACL,CAAC,GACD,KAAK,CAAA;AAET,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,GAC1D,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAC/B,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,GACxB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAC/B,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAAE,GAC3B,KAAK,GACP,KAAK,GACP,KAAK,GACP,KAAK,CAAA;AAEX,OAAO,CAAC,MAAM,WAAW,EAAE,OAAO,MAAM,CAAA;AAExC,2EAA2E;AAC3E,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,MAAM,EAAE,IACvD,mBAAmB,CACjB,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAC/E,SAAS,MAAM,CAAC,GACb,CAAC,SAAS,MAAM,GACd,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;CAAE,GACjC,KAAK,GACP,KAAK,CAAA;AAEX,sFAAsF;AACtF,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACpC;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GACtD,CAAC,SAAS,MAAM,GACd,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,GACvB,CAAC,GACH,CAAC;CACN,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GACnB,KAAK,CAAA"}
|
package/dist/runtime/paths.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/** Type-level helpers for `$
|
|
1
|
+
/** Type-level helpers for `$attributes` dot paths (compile-time only). */
|
|
2
2
|
export {};
|
package/dist/runtime/query.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
/** Build 4D REST query params ($skip, $top, $filter, $
|
|
1
|
+
/** Build 4D REST query params ($skip, $top, $filter, $orderby, $attributes). */
|
|
2
2
|
export interface ListQueryParams {
|
|
3
3
|
page?: number;
|
|
4
4
|
pageSize?: number;
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Attribute paths for [`$attributes`](https://developer.4d.com/docs/REST/attributes):
|
|
7
|
+
* scalars (`name`) or relations (`manager.name`, `employer.employees.lastname`).
|
|
8
|
+
*/
|
|
6
9
|
select?: readonly string[];
|
|
7
10
|
/** OData-style filter string (4D REST). */
|
|
8
11
|
filter?: string;
|
|
9
12
|
orderby?: string;
|
|
10
13
|
}
|
|
11
|
-
export declare function buildListSearchParams(
|
|
12
|
-
/** Query string for a single entity (
|
|
13
|
-
export declare function buildEntityParams(
|
|
14
|
+
export declare function buildListSearchParams(_className: string, opts: ListQueryParams, _relationMap: Record<string, string>): string;
|
|
15
|
+
/** Query string for a single entity (`$attributes` / no paging). */
|
|
16
|
+
export declare function buildEntityParams(_className: string, select: readonly string[] | undefined, _relationMap: Record<string, string>): string;
|
|
14
17
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/runtime/query.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/runtime/query.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AASD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAqBR;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAQR"}
|
package/dist/runtime/query.mjs
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
/** Build 4D REST query params ($skip, $top, $filter, $
|
|
2
|
-
|
|
1
|
+
/** Build 4D REST query params ($skip, $top, $filter, $orderby, $attributes). */
|
|
2
|
+
function attributesParam(paths) {
|
|
3
|
+
if (!paths.length) {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
return paths.join(',');
|
|
7
|
+
}
|
|
8
|
+
export function buildListSearchParams(_className, opts, _relationMap) {
|
|
3
9
|
const params = new URLSearchParams();
|
|
4
10
|
const page = opts.page ?? 1;
|
|
5
11
|
const pageSize = opts.pageSize ?? 50;
|
|
@@ -14,63 +20,20 @@ export function buildListSearchParams(className, opts, _relationMap) {
|
|
|
14
20
|
if (opts.orderby) {
|
|
15
21
|
params.set('$orderby', opts.orderby);
|
|
16
22
|
}
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
19
|
-
params.set('$
|
|
20
|
-
}
|
|
21
|
-
if (expand.length) {
|
|
22
|
-
params.set('$expand', expand.join(','));
|
|
23
|
+
const attrs = attributesParam(opts.select ?? []);
|
|
24
|
+
if (attrs) {
|
|
25
|
+
params.set('$attributes', attrs);
|
|
23
26
|
}
|
|
24
27
|
const q = params.toString();
|
|
25
28
|
return q ? `?${q}` : '';
|
|
26
29
|
}
|
|
27
|
-
/** Query string for a single entity (
|
|
28
|
-
export function buildEntityParams(
|
|
30
|
+
/** Query string for a single entity (`$attributes` / no paging). */
|
|
31
|
+
export function buildEntityParams(_className, select, _relationMap) {
|
|
29
32
|
if (!select?.length) {
|
|
30
33
|
return '';
|
|
31
34
|
}
|
|
32
|
-
const { expand, selectRoot } = buildExpandAndSelect(className, select, _relationMap);
|
|
33
35
|
const params = new URLSearchParams();
|
|
34
|
-
|
|
35
|
-
params.set('$select', selectRoot.join(','));
|
|
36
|
-
}
|
|
37
|
-
if (expand.length) {
|
|
38
|
-
params.set('$expand', expand.join(','));
|
|
39
|
-
}
|
|
36
|
+
params.set('$attributes', attributesParam(select));
|
|
40
37
|
const q = params.toString();
|
|
41
38
|
return q ? `?${q}` : '';
|
|
42
39
|
}
|
|
43
|
-
function buildExpandAndSelect(_className, paths, _relationMap) {
|
|
44
|
-
if (!paths.length) {
|
|
45
|
-
return { expand: [], selectRoot: [] };
|
|
46
|
-
}
|
|
47
|
-
const rootSelect = new Set();
|
|
48
|
-
const expandParts = [];
|
|
49
|
-
const byRel = new Map();
|
|
50
|
-
for (const p of paths) {
|
|
51
|
-
const dot = p.indexOf('.');
|
|
52
|
-
if (dot === -1) {
|
|
53
|
-
rootSelect.add(p);
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
const rel = p.slice(0, dot);
|
|
57
|
-
const rest = p.slice(dot + 1);
|
|
58
|
-
if (!byRel.has(rel)) {
|
|
59
|
-
byRel.set(rel, new Set());
|
|
60
|
-
}
|
|
61
|
-
byRel.get(rel).add(rest);
|
|
62
|
-
}
|
|
63
|
-
for (const [rel, nested] of byRel) {
|
|
64
|
-
const nestedList = [...nested];
|
|
65
|
-
const inner = nestedList.length ? `($select=${nestedList.join(',')})` : '';
|
|
66
|
-
// Use navigation property name (4D / OData $expand), not the target class name.
|
|
67
|
-
expandParts.push(`${rel}${inner}`);
|
|
68
|
-
if (!rootSelect.has(rel)) {
|
|
69
|
-
rootSelect.add(rel);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
expand: expandParts,
|
|
74
|
-
selectRoot: [...rootSelect],
|
|
75
|
-
};
|
|
76
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quadrokit/client",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
4
4
|
"description": "Typed 4D REST client and catalog code generator for QuadroKit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"generate:fixture": "bun run src/cli.ts generate --url file://../../assets/catalog.json --out ../../.quadrokit/generated-demo"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@quadrokit/shared": "^0.2.
|
|
32
|
+
"@quadrokit/shared": "^0.2.12",
|
|
33
33
|
"undici": "^6.21.0"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|