@zveltio/sdk 3.0.0-beta.76 → 3.0.0-beta.78
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 +5 -5
- package/dist/ddl/index.d.ts +16 -0
- package/dist/ddl/index.d.ts.map +1 -1
- package/dist/extension/capabilities.d.ts +70 -0
- package/dist/extension/capabilities.d.ts.map +1 -0
- package/dist/extension/capabilities.js +78 -0
- package/dist/extension/index.d.ts +262 -10
- package/dist/extension/index.d.ts.map +1 -1
- package/dist/extension/index.js +4 -0
- package/dist/offline/index.d.ts +20 -51
- package/dist/offline/index.d.ts.map +1 -1
- package/dist/offline/index.js +114 -140
- package/dist/schema-codegen.d.ts +22 -0
- package/dist/schema-codegen.d.ts.map +1 -1
- package/dist/schema-codegen.js +100 -0
- package/dist/sync-manager.js +1 -1
- package/dist/testing/with-test-db.d.ts +1 -1
- package/dist/testing/with-test-db.d.ts.map +1 -1
- package/dist/testing/with-test-db.js +1 -1
- package/dist/tests/validate-manifest-dependencies.test.d.ts +2 -0
- package/dist/tests/validate-manifest-dependencies.test.d.ts.map +1 -0
- package/dist/tests/validate-manifest-dependencies.test.js +27 -0
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +28 -0
- package/package.json +2 -2
package/dist/schema-codegen.js
CHANGED
|
@@ -401,3 +401,103 @@ export function emitTypeScript(schema, opts = {}) {
|
|
|
401
401
|
function quoteIdentifierIfNeeded(name) {
|
|
402
402
|
return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name) ? name : `'${name.replace(/'/g, "\\'")}'`;
|
|
403
403
|
}
|
|
404
|
+
// ── Collection types (RFC schema-as-code §8) ─────────────────────────────────
|
|
405
|
+
//
|
|
406
|
+
// One generator for both `zveltio generate-types` paths: the engine's
|
|
407
|
+
// `/api/admin/types` (which knows every registered field type, extensions'
|
|
408
|
+
// included) and `--from schema/` (no engine; core types only). Same fields in,
|
|
409
|
+
// same text out.
|
|
410
|
+
/**
|
|
411
|
+
* TypeScript input type of each core field type. The engine registers the same
|
|
412
|
+
* types in `field-types/index.ts`; a unit test there keeps the two equal.
|
|
413
|
+
*/
|
|
414
|
+
export const CORE_FIELD_TS_TYPES = {
|
|
415
|
+
text: 'string',
|
|
416
|
+
number: 'number',
|
|
417
|
+
boolean: 'boolean',
|
|
418
|
+
date: 'string',
|
|
419
|
+
datetime: 'string',
|
|
420
|
+
email: 'string',
|
|
421
|
+
url: 'string',
|
|
422
|
+
uuid: 'string',
|
|
423
|
+
json: 'Record<string, any>',
|
|
424
|
+
richtext: 'string',
|
|
425
|
+
file: '{ url: string; name: string; size: number; type: string }',
|
|
426
|
+
enum: 'string',
|
|
427
|
+
reference: 'string',
|
|
428
|
+
m2o: 'string',
|
|
429
|
+
location: '{ lat: number; lng: number }',
|
|
430
|
+
computed: 'never',
|
|
431
|
+
integer: 'number',
|
|
432
|
+
float: 'number',
|
|
433
|
+
textarea: 'string',
|
|
434
|
+
password: 'string',
|
|
435
|
+
slug: 'string',
|
|
436
|
+
color: 'string',
|
|
437
|
+
phone: 'string',
|
|
438
|
+
tags: 'string[]',
|
|
439
|
+
image: '{ url: string; name: string; size: number; width?: number; height?: number; alt?: string }',
|
|
440
|
+
o2m: 'string[]',
|
|
441
|
+
m2m: 'string[]',
|
|
442
|
+
m2a: '{ collection: string; id: string }[]',
|
|
443
|
+
geometry: '{ type: string; coordinates: any }',
|
|
444
|
+
vector: 'number[]',
|
|
445
|
+
smallint: 'number',
|
|
446
|
+
real: 'number',
|
|
447
|
+
decimal: 'number',
|
|
448
|
+
money: 'number',
|
|
449
|
+
varchar: 'string',
|
|
450
|
+
char: 'string',
|
|
451
|
+
time: 'string',
|
|
452
|
+
timetz: 'string',
|
|
453
|
+
interval: 'string',
|
|
454
|
+
bytea: 'string',
|
|
455
|
+
tsvector: 'string',
|
|
456
|
+
inet: 'string',
|
|
457
|
+
cidr: 'string',
|
|
458
|
+
macaddr: 'string',
|
|
459
|
+
xml: 'string',
|
|
460
|
+
bit: 'string',
|
|
461
|
+
varbit: 'string',
|
|
462
|
+
int4range: '{ lower: number; upper: number }',
|
|
463
|
+
int8range: '{ lower: number; upper: number }',
|
|
464
|
+
numrange: '{ lower: number; upper: number }',
|
|
465
|
+
daterange: '{ lower: string; upper: string }',
|
|
466
|
+
tsrange: '{ lower: string; upper: string }',
|
|
467
|
+
tstzrange: '{ lower: string; upper: string }',
|
|
468
|
+
};
|
|
469
|
+
/** A type `tsTypeOf` does not know is `any`. */
|
|
470
|
+
export function emitCollectionTypes(collection, tsTypeOf = (t) => CORE_FIELD_TS_TYPES[t]) {
|
|
471
|
+
const typeName = collection.name.charAt(0).toUpperCase() + collection.name.slice(1);
|
|
472
|
+
const inputFields = collection.fields
|
|
473
|
+
.map((f) => ` ${f.name}${f.required ? '' : '?'}: ${tsTypeOf(f.type) || 'any'};`)
|
|
474
|
+
.join('\n');
|
|
475
|
+
return `export interface ${typeName}Input {
|
|
476
|
+
${inputFields}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
export interface ${typeName} extends ${typeName}Input {
|
|
480
|
+
id: string;
|
|
481
|
+
created_at: string;
|
|
482
|
+
updated_at: string;
|
|
483
|
+
status: string;
|
|
484
|
+
}`;
|
|
485
|
+
}
|
|
486
|
+
/** The whole `zveltio.d.ts`. */
|
|
487
|
+
export function emitCollectionTypesFile(collections, tsTypeOf) {
|
|
488
|
+
const types = collections.map((c) => emitCollectionTypes(c, tsTypeOf)).join('\n\n');
|
|
489
|
+
return `// Auto-generated by Zveltio\n// Do not edit manually\n\n${types}`;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* The collections of a schema directory, as `{ path: content }` (the shape
|
|
493
|
+
* `zveltio schema pull` writes), in name order.
|
|
494
|
+
*/
|
|
495
|
+
export function collectionsFromSchemaFiles(files) {
|
|
496
|
+
return Object.keys(files)
|
|
497
|
+
.filter((p) => /^collections\/[^/]+\.json$/.test(p))
|
|
498
|
+
.sort()
|
|
499
|
+
.map((p) => {
|
|
500
|
+
const file = JSON.parse(files[p]);
|
|
501
|
+
return { name: file.name, fields: file.fields ?? [] };
|
|
502
|
+
});
|
|
503
|
+
}
|
package/dist/sync-manager.js
CHANGED
|
@@ -361,7 +361,7 @@ export class SyncManager {
|
|
|
361
361
|
}
|
|
362
362
|
let applied = 0;
|
|
363
363
|
for (;;) {
|
|
364
|
-
const res = await this.client.post('/api/sync/pull', { collections: [...byTable.keys()],
|
|
364
|
+
const res = await this.client.post('/api/sync/pull', { collections: [...byTable.keys()], cursors });
|
|
365
365
|
for (const [table, flag] of Object.entries(res.resync ?? {})) {
|
|
366
366
|
const name = byTable.get(table);
|
|
367
367
|
if (flag && name)
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import type { Kysely } from 'kysely';
|
|
28
28
|
export interface WithTestDbOptions {
|
|
29
|
-
/** Postgres image. Default: `
|
|
29
|
+
/** Postgres image. Default: `pgvector/pgvector:pg18` (the image CI and docker-compose use). */
|
|
30
30
|
image?: string;
|
|
31
31
|
/** DB name to create. Default: `zveltio_test`. */
|
|
32
32
|
database?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-test-db.d.ts","sourceRoot":"","sources":["../../src/testing/with-test-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,MAAM,WAAW,iBAAiB;IAChC
|
|
1
|
+
{"version":3,"file":"with-test-db.d.ts","sourceRoot":"","sources":["../../src/testing/with-test-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAE9D,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAChB,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AA4BD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8E/E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAEhC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAE/D,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED;;;;;;;;;;;GAWG;AAGH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhG;AAED;;;GAGG;AAGH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAStD;AAkBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAuErD;AAGD,eAAO,MAAM,iBAAiB;;CAAsB,CAAC"}
|
|
@@ -55,7 +55,7 @@ async function loadKysely() {
|
|
|
55
55
|
* pattern, prefer `withTestDb(fn)` below.
|
|
56
56
|
*/
|
|
57
57
|
export async function startTestDb(opts = {}) {
|
|
58
|
-
const image = opts.image ?? '
|
|
58
|
+
const image = opts.image ?? 'pgvector/pgvector:pg18';
|
|
59
59
|
const database = opts.database ?? `zveltio_test_${Date.now()}_${Math.floor(Math.random() * 10_000)}`;
|
|
60
60
|
const startupTimeoutMs = opts.startupTimeoutMs ?? 60_000;
|
|
61
61
|
const tc = await loadPgContainer();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-manifest-dependencies.test.d.ts","sourceRoot":"","sources":["../../src/tests/validate-manifest-dependencies.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// `zveltio extension validate` checks both dependency lists the broker reads.
|
|
2
|
+
import { describe, expect, it } from 'bun:test';
|
|
3
|
+
import { validateManifest } from '../validate/index.js';
|
|
4
|
+
const base = {
|
|
5
|
+
name: 'a',
|
|
6
|
+
displayName: 'A',
|
|
7
|
+
category: 'custom',
|
|
8
|
+
description: 'd',
|
|
9
|
+
version: '1.0.0',
|
|
10
|
+
};
|
|
11
|
+
const codes = (extra) => validateManifest({ manifest: { ...base, ...extra } })
|
|
12
|
+
.filter((e) => e.code === 'MANIFEST_BAD_DEPENDENCY')
|
|
13
|
+
.map((e) => e.message);
|
|
14
|
+
describe('manifest dependencies / optionalDependencies', () => {
|
|
15
|
+
it('accepts both lists', () => {
|
|
16
|
+
expect(codes({
|
|
17
|
+
dependencies: [{ name: 'crm', minVersion: '1.0.0' }],
|
|
18
|
+
optionalDependencies: [{ name: 'ai' }],
|
|
19
|
+
})).toEqual([]);
|
|
20
|
+
});
|
|
21
|
+
it('refuses a malformed entry, a bad minVersion and a name in both lists', () => {
|
|
22
|
+
expect(codes({ optionalDependencies: 'ai' })).toHaveLength(1);
|
|
23
|
+
expect(codes({ optionalDependencies: [{ minVersion: '1.0.0' }] })[0]).toContain('has no name');
|
|
24
|
+
expect(codes({ optionalDependencies: [{ name: 'ai', minVersion: 'x' }] })[0]).toContain('not semver');
|
|
25
|
+
expect(codes({ dependencies: [{ name: 'ai' }], optionalDependencies: [{ name: 'ai' }] })[0]).toContain('"ai" is listed in "dependencies" and "optionalDependencies"');
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"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"}
|
package/dist/validate/index.js
CHANGED
|
@@ -93,6 +93,34 @@ export function validateManifest(input) {
|
|
|
93
93
|
if (typeof obj.zveltioMaxVersion === 'string' && !SEMVER_RE.test(obj.zveltioMaxVersion)) {
|
|
94
94
|
out.push(err('MANIFEST_BAD_MAX_VERSION', `zveltioMaxVersion "${obj.zveltioMaxVersion}" is not valid semver`));
|
|
95
95
|
}
|
|
96
|
+
// Required and optional extension dependencies share one shape; the broker
|
|
97
|
+
// lets an extension call services only of the extensions named in either.
|
|
98
|
+
const depNames = new Map();
|
|
99
|
+
for (const field of ['dependencies', 'optionalDependencies']) {
|
|
100
|
+
const list = obj[field];
|
|
101
|
+
if (list === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
if (!Array.isArray(list)) {
|
|
104
|
+
out.push(err('MANIFEST_BAD_DEPENDENCY', `"${field}" must be an array of { name, minVersion? }`));
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
for (const d of list) {
|
|
108
|
+
const depName = d && typeof d === 'object' ? d.name : undefined;
|
|
109
|
+
const min = d && typeof d === 'object' ? d.minVersion : undefined;
|
|
110
|
+
if (typeof depName !== 'string' || depName.trim() === '') {
|
|
111
|
+
out.push(err('MANIFEST_BAD_DEPENDENCY', `"${field}" entry ${JSON.stringify(d)} has no name`));
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (min !== undefined && (typeof min !== 'string' || !SEMVER_RE.test(min))) {
|
|
115
|
+
out.push(err('MANIFEST_BAD_DEPENDENCY', `"${field}" ${depName}: minVersion ${JSON.stringify(min)} is not semver`));
|
|
116
|
+
}
|
|
117
|
+
const seen = depNames.get(depName);
|
|
118
|
+
if (seen) {
|
|
119
|
+
out.push(err('MANIFEST_BAD_DEPENDENCY', `"${depName}" is listed in "${seen}" and "${field}"`));
|
|
120
|
+
}
|
|
121
|
+
depNames.set(depName, field);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
96
124
|
// The engine's manifest schema refuses the whole extension (422) on a bad entry.
|
|
97
125
|
if (obj.apiKeyRoutes !== undefined) {
|
|
98
126
|
const routes = Array.isArray(obj.apiKeyRoutes) ? obj.apiKeyRoutes : [obj.apiKeyRoutes];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zveltio/sdk",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.78",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"fake-indexeddb": "^6.2.5",
|
|
70
70
|
"hono": "^4.13.8",
|
|
71
71
|
"kysely": "^0.29.6",
|
|
72
|
-
"pg": "^8.23.
|
|
72
|
+
"pg": "^8.23.1",
|
|
73
73
|
"typescript": "^5.4.0"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|