@objectstack/objectql 0.9.2 → 1.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.
@@ -1,5 +1,5 @@
1
1
  import { ServiceObject } from '@objectstack/spec/data';
2
- import { ObjectStackManifest } from '@objectstack/spec/system';
2
+ import { ObjectStackManifest } from '@objectstack/spec/kernel';
3
3
  /**
4
4
  * Global Schema Registry
5
5
  * Unified storage for all metadata types (Objects, Apps, Flows, Layouts, etc.)
@@ -13,6 +13,520 @@ export declare class SchemaRegistry {
13
13
  * @param keyField The property to use as the unique key (default: 'name')
14
14
  */
15
15
  static registerItem<T>(type: string, item: T, keyField?: keyof T): void;
16
+ /**
17
+ * Validate Metadata against Spec Zod Schemas
18
+ */
19
+ static validate(type: string, item: any): true | {
20
+ fields: Record<string, {
21
+ type: "number" | "boolean" | "code" | "date" | "lookup" | "text" | "textarea" | "email" | "url" | "phone" | "password" | "markdown" | "html" | "richtext" | "currency" | "percent" | "datetime" | "time" | "toggle" | "select" | "multiselect" | "radio" | "checkboxes" | "master_detail" | "tree" | "image" | "file" | "avatar" | "video" | "audio" | "formula" | "summary" | "autonumber" | "location" | "address" | "json" | "color" | "rating" | "slider" | "signature" | "qrcode" | "progress" | "tags" | "vector";
22
+ required: boolean;
23
+ searchable: boolean;
24
+ multiple: boolean;
25
+ unique: boolean;
26
+ deleteBehavior: "set_null" | "cascade" | "restrict";
27
+ auditTrail: boolean;
28
+ hidden: boolean;
29
+ readonly: boolean;
30
+ encryption: boolean;
31
+ index: boolean;
32
+ externalId: boolean;
33
+ options?: {
34
+ value: string;
35
+ label: string;
36
+ color?: string | undefined;
37
+ default?: boolean | undefined;
38
+ }[] | undefined;
39
+ expression?: string | undefined;
40
+ defaultValue?: any;
41
+ min?: number | undefined;
42
+ max?: number | undefined;
43
+ step?: number | undefined;
44
+ language?: string | undefined;
45
+ encryptionConfig?: {
46
+ enabled: boolean;
47
+ algorithm: "aes-256-gcm" | "aes-256-cbc" | "chacha20-poly1305";
48
+ keyManagement: {
49
+ provider: "local" | "aws-kms" | "azure-key-vault" | "gcp-kms" | "hashicorp-vault";
50
+ keyId?: string | undefined;
51
+ rotationPolicy?: {
52
+ enabled: boolean;
53
+ frequencyDays: number;
54
+ retainOldVersions: number;
55
+ autoRotate: boolean;
56
+ } | undefined;
57
+ };
58
+ scope: "table" | "field" | "database" | "record";
59
+ deterministicEncryption: boolean;
60
+ searchableEncryption: boolean;
61
+ } | undefined;
62
+ formula?: string | undefined;
63
+ label?: string | undefined;
64
+ precision?: number | undefined;
65
+ name?: string | undefined;
66
+ description?: string | undefined;
67
+ format?: string | undefined;
68
+ maxLength?: number | undefined;
69
+ minLength?: number | undefined;
70
+ scale?: number | undefined;
71
+ reference?: string | undefined;
72
+ referenceFilters?: string[] | undefined;
73
+ writeRequiresMasterRead?: boolean | undefined;
74
+ summaryOperations?: {
75
+ object: string;
76
+ function: "count" | "sum" | "avg" | "min" | "max";
77
+ field: string;
78
+ } | undefined;
79
+ theme?: string | undefined;
80
+ lineNumbers?: boolean | undefined;
81
+ maxRating?: number | undefined;
82
+ allowHalf?: boolean | undefined;
83
+ displayMap?: boolean | undefined;
84
+ allowGeocoding?: boolean | undefined;
85
+ addressFormat?: "us" | "uk" | "international" | undefined;
86
+ colorFormat?: "hex" | "rgb" | "rgba" | "hsl" | undefined;
87
+ allowAlpha?: boolean | undefined;
88
+ presetColors?: string[] | undefined;
89
+ showValue?: boolean | undefined;
90
+ marks?: Record<string, string> | undefined;
91
+ barcodeFormat?: "qr" | "ean13" | "ean8" | "code128" | "code39" | "upca" | "upce" | undefined;
92
+ qrErrorCorrection?: "L" | "M" | "Q" | "H" | undefined;
93
+ displayValue?: boolean | undefined;
94
+ allowScanning?: boolean | undefined;
95
+ currencyConfig?: {
96
+ precision: number;
97
+ currencyMode: "dynamic" | "fixed";
98
+ defaultCurrency: string;
99
+ } | undefined;
100
+ vectorConfig?: {
101
+ dimensions: number;
102
+ distanceMetric: "cosine" | "euclidean" | "dotProduct" | "manhattan";
103
+ normalized: boolean;
104
+ indexed: boolean;
105
+ indexType?: "flat" | "hnsw" | "ivfflat" | undefined;
106
+ } | undefined;
107
+ fileAttachmentConfig?: {
108
+ virusScan: boolean;
109
+ virusScanOnUpload: boolean;
110
+ quarantineOnThreat: boolean;
111
+ allowMultiple: boolean;
112
+ allowReplace: boolean;
113
+ allowDelete: boolean;
114
+ requireUpload: boolean;
115
+ extractMetadata: boolean;
116
+ extractText: boolean;
117
+ versioningEnabled: boolean;
118
+ publicRead: boolean;
119
+ presignedUrlExpiry: number;
120
+ minSize?: number | undefined;
121
+ maxSize?: number | undefined;
122
+ allowedTypes?: string[] | undefined;
123
+ blockedTypes?: string[] | undefined;
124
+ allowedMimeTypes?: string[] | undefined;
125
+ blockedMimeTypes?: string[] | undefined;
126
+ virusScanProvider?: "custom" | "clamav" | "virustotal" | "metadefender" | undefined;
127
+ storageProvider?: string | undefined;
128
+ storageBucket?: string | undefined;
129
+ storagePrefix?: string | undefined;
130
+ imageValidation?: {
131
+ autoRotate: boolean;
132
+ generateThumbnails: boolean;
133
+ preserveMetadata: boolean;
134
+ minWidth?: number | undefined;
135
+ maxWidth?: number | undefined;
136
+ minHeight?: number | undefined;
137
+ maxHeight?: number | undefined;
138
+ aspectRatio?: string | undefined;
139
+ thumbnailSizes?: {
140
+ name: string;
141
+ width: number;
142
+ height: number;
143
+ crop: boolean;
144
+ }[] | undefined;
145
+ } | undefined;
146
+ maxVersions?: number | undefined;
147
+ } | undefined;
148
+ maskingRule?: {
149
+ field: string;
150
+ strategy: "partial" | "hash" | "redact" | "tokenize" | "randomize" | "nullify" | "substitute";
151
+ preserveFormat: boolean;
152
+ preserveLength: boolean;
153
+ pattern?: string | undefined;
154
+ roles?: string[] | undefined;
155
+ exemptRoles?: string[] | undefined;
156
+ } | undefined;
157
+ dependencies?: string[] | undefined;
158
+ cached?: {
159
+ enabled: boolean;
160
+ ttl: number;
161
+ invalidateOn: string[];
162
+ } | undefined;
163
+ dataQuality?: {
164
+ uniqueness: boolean;
165
+ completeness: number;
166
+ accuracy?: {
167
+ source: string;
168
+ threshold: number;
169
+ } | undefined;
170
+ } | undefined;
171
+ }>;
172
+ name: string;
173
+ active: boolean;
174
+ isSystem: boolean;
175
+ abstract: boolean;
176
+ datasource: string;
177
+ search?: {
178
+ fields: string[];
179
+ displayFields?: string[] | undefined;
180
+ filters?: string[] | undefined;
181
+ } | undefined;
182
+ tags?: string[] | undefined;
183
+ label?: string | undefined;
184
+ description?: string | undefined;
185
+ pluralLabel?: string | undefined;
186
+ icon?: string | undefined;
187
+ tableName?: string | undefined;
188
+ indexes?: {
189
+ type: "hash" | "btree" | "gin" | "gist" | "fulltext";
190
+ fields: string[];
191
+ unique: boolean;
192
+ partial?: string | undefined;
193
+ name?: string | undefined;
194
+ }[] | undefined;
195
+ tenancy?: {
196
+ enabled: boolean;
197
+ strategy: "shared" | "isolated" | "hybrid";
198
+ tenantField: string;
199
+ crossTenantAccess: boolean;
200
+ } | undefined;
201
+ softDelete?: {
202
+ enabled: boolean;
203
+ field: string;
204
+ cascadeDelete: boolean;
205
+ } | undefined;
206
+ versioning?: {
207
+ enabled: boolean;
208
+ strategy: "snapshot" | "delta" | "event-sourcing";
209
+ versionField: string;
210
+ retentionDays?: number | undefined;
211
+ } | undefined;
212
+ partitioning?: {
213
+ enabled: boolean;
214
+ strategy: "hash" | "range" | "list";
215
+ key: string;
216
+ interval?: string | undefined;
217
+ } | undefined;
218
+ cdc?: {
219
+ enabled: boolean;
220
+ events: ("insert" | "update" | "delete")[];
221
+ destination: string;
222
+ } | undefined;
223
+ validations?: any[] | undefined;
224
+ titleFormat?: string | undefined;
225
+ compactLayout?: string[] | undefined;
226
+ enable?: {
227
+ searchable: boolean;
228
+ trackHistory: boolean;
229
+ apiEnabled: boolean;
230
+ files: boolean;
231
+ feeds: boolean;
232
+ activities: boolean;
233
+ trash: boolean;
234
+ mru: boolean;
235
+ clone: boolean;
236
+ apiMethods?: ("search" | "update" | "delete" | "get" | "list" | "create" | "upsert" | "bulk" | "aggregate" | "history" | "restore" | "purge" | "import" | "export")[] | undefined;
237
+ } | undefined;
238
+ } | {
239
+ label: string;
240
+ name: string;
241
+ active: boolean;
242
+ isDefault: boolean;
243
+ description?: string | undefined;
244
+ version?: string | undefined;
245
+ icon?: string | undefined;
246
+ objects?: any[] | undefined;
247
+ branding?: {
248
+ primaryColor?: string | undefined;
249
+ logo?: string | undefined;
250
+ favicon?: string | undefined;
251
+ } | undefined;
252
+ navigation?: any[] | undefined;
253
+ homePageId?: string | undefined;
254
+ requiredPermissions?: string[] | undefined;
255
+ apis?: any[] | undefined;
256
+ } | {
257
+ type: "driver" | "app" | "plugin" | "module" | "objectql" | "gateway" | "adapter";
258
+ name: string;
259
+ version: string;
260
+ id: string;
261
+ description?: string | undefined;
262
+ dependencies?: Record<string, string> | undefined;
263
+ data?: {
264
+ object: string;
265
+ mode: "insert" | "upsert" | "ignore";
266
+ records: Record<string, any>[];
267
+ }[] | undefined;
268
+ capabilities?: {
269
+ implements?: {
270
+ protocol: {
271
+ label: string;
272
+ version: {
273
+ major: number;
274
+ minor: number;
275
+ patch: number;
276
+ };
277
+ id: string;
278
+ description?: string | undefined;
279
+ specification?: string | undefined;
280
+ };
281
+ conformance: "partial" | "full" | "deprecated" | "experimental";
282
+ certified: boolean;
283
+ metadata?: Record<string, any> | undefined;
284
+ features?: {
285
+ enabled: boolean;
286
+ name: string;
287
+ description?: string | undefined;
288
+ sinceVersion?: string | undefined;
289
+ deprecatedSince?: string | undefined;
290
+ }[] | undefined;
291
+ implementedFeatures?: string[] | undefined;
292
+ certificationDate?: string | undefined;
293
+ }[] | undefined;
294
+ provides?: {
295
+ methods: {
296
+ name: string;
297
+ async: boolean;
298
+ description?: string | undefined;
299
+ parameters?: {
300
+ type: string;
301
+ required: boolean;
302
+ name: string;
303
+ description?: string | undefined;
304
+ }[] | undefined;
305
+ returnType?: string | undefined;
306
+ }[];
307
+ name: string;
308
+ version: {
309
+ major: number;
310
+ minor: number;
311
+ patch: number;
312
+ };
313
+ id: string;
314
+ stability: "alpha" | "experimental" | "stable" | "beta";
315
+ description?: string | undefined;
316
+ events?: {
317
+ name: string;
318
+ description?: string | undefined;
319
+ payload?: string | undefined;
320
+ }[] | undefined;
321
+ }[] | undefined;
322
+ requires?: {
323
+ version: string;
324
+ optional: boolean;
325
+ pluginId: string;
326
+ reason?: string | undefined;
327
+ requiredCapabilities?: string[] | undefined;
328
+ }[] | undefined;
329
+ extensionPoints?: {
330
+ type: "provider" | "action" | "widget" | "hook" | "transformer" | "validator" | "decorator";
331
+ name: string;
332
+ id: string;
333
+ cardinality: "multiple" | "single";
334
+ description?: string | undefined;
335
+ contract?: {
336
+ signature?: string | undefined;
337
+ input?: string | undefined;
338
+ output?: string | undefined;
339
+ } | undefined;
340
+ }[] | undefined;
341
+ extensions?: {
342
+ priority: number;
343
+ implementation: string;
344
+ targetPluginId: string;
345
+ extensionPointId: string;
346
+ }[] | undefined;
347
+ } | undefined;
348
+ objects?: string[] | undefined;
349
+ permissions?: string[] | undefined;
350
+ extensions?: Record<string, any> | undefined;
351
+ loading?: {
352
+ strategy: "parallel" | "eager" | "lazy" | "deferred" | "on-demand";
353
+ caching?: {
354
+ enabled: boolean;
355
+ storage: "hybrid" | "memory" | "disk" | "indexeddb";
356
+ keyStrategy: "hash" | "version" | "timestamp";
357
+ maxSize?: number | undefined;
358
+ ttl?: number | undefined;
359
+ invalidateOn?: ("error" | "manual" | "version-change" | "dependency-change")[] | undefined;
360
+ compression?: {
361
+ enabled: boolean;
362
+ algorithm: "gzip" | "brotli" | "deflate";
363
+ } | undefined;
364
+ } | undefined;
365
+ preload?: {
366
+ enabled: boolean;
367
+ priority: number;
368
+ conditions?: {
369
+ roles?: string[] | undefined;
370
+ routes?: string[] | undefined;
371
+ deviceType?: ("desktop" | "mobile" | "tablet")[] | undefined;
372
+ minNetworkSpeed?: "slow-2g" | "2g" | "3g" | "4g" | undefined;
373
+ } | undefined;
374
+ resources?: ("code" | "dependencies" | "metadata" | "assets" | "services")[] | undefined;
375
+ } | undefined;
376
+ codeSplitting?: {
377
+ enabled: boolean;
378
+ strategy: "custom" | "size" | "route" | "feature";
379
+ chunkNaming: "hashed" | "named" | "sequential";
380
+ maxChunkSize?: number | undefined;
381
+ sharedDependencies?: {
382
+ enabled: boolean;
383
+ minChunks: number;
384
+ } | undefined;
385
+ } | undefined;
386
+ dynamicImport?: {
387
+ enabled: boolean;
388
+ timeout: number;
389
+ mode: "async" | "eager" | "lazy" | "sync";
390
+ prefetch: boolean;
391
+ preload: boolean;
392
+ retry?: {
393
+ enabled: boolean;
394
+ maxAttempts: number;
395
+ backoffMs: number;
396
+ } | undefined;
397
+ webpackChunkName?: string | undefined;
398
+ } | undefined;
399
+ initialization?: {
400
+ timeout: number;
401
+ priority: number;
402
+ mode: "async" | "parallel" | "sequential" | "sync";
403
+ critical: boolean;
404
+ retry?: {
405
+ enabled: boolean;
406
+ maxAttempts: number;
407
+ backoffMs: number;
408
+ } | undefined;
409
+ healthCheckInterval?: number | undefined;
410
+ } | undefined;
411
+ dependencyResolution?: {
412
+ strategy: "strict" | "latest" | "compatible" | "pinned";
413
+ conflictResolution: "latest" | "manual" | "fail" | "oldest";
414
+ circularDependencies: "error" | "warn" | "allow";
415
+ peerDependencies?: {
416
+ resolve: boolean;
417
+ onMissing: "error" | "warn" | "ignore";
418
+ onMismatch: "error" | "warn" | "ignore";
419
+ } | undefined;
420
+ optionalDependencies?: {
421
+ load: boolean;
422
+ onFailure: "warn" | "ignore";
423
+ } | undefined;
424
+ } | undefined;
425
+ hotReload?: {
426
+ enabled: boolean;
427
+ strategy: "partial" | "full" | "state-preserve";
428
+ debounceMs: number;
429
+ preserveState: boolean;
430
+ watchPatterns?: string[] | undefined;
431
+ ignorePatterns?: string[] | undefined;
432
+ stateSerialization?: {
433
+ enabled: boolean;
434
+ handler?: string | undefined;
435
+ } | undefined;
436
+ hooks?: {
437
+ onError?: string | undefined;
438
+ beforeReload?: string | undefined;
439
+ afterReload?: string | undefined;
440
+ } | undefined;
441
+ } | undefined;
442
+ sandboxing?: {
443
+ enabled: boolean;
444
+ isolationLevel: "none" | "process" | "vm" | "iframe" | "web-worker";
445
+ permissions?: {
446
+ allowedAPIs?: string[] | undefined;
447
+ allowedPaths?: string[] | undefined;
448
+ allowedEndpoints?: string[] | undefined;
449
+ allowedEnvVars?: string[] | undefined;
450
+ } | undefined;
451
+ allowedCapabilities?: string[] | undefined;
452
+ resourceQuotas?: {
453
+ maxMemoryMB?: number | undefined;
454
+ maxCpuTimeMs?: number | undefined;
455
+ maxFileDescriptors?: number | undefined;
456
+ maxNetworkKBps?: number | undefined;
457
+ } | undefined;
458
+ } | undefined;
459
+ monitoring?: {
460
+ enabled: boolean;
461
+ samplingRate: number;
462
+ reportingInterval: number;
463
+ onBudgetViolation: "error" | "warn" | "ignore";
464
+ metrics?: ("load-time" | "init-time" | "memory-usage" | "cpu-usage" | "api-calls" | "error-rate" | "cache-hit-rate")[] | undefined;
465
+ budgets?: {
466
+ maxMemoryMB?: number | undefined;
467
+ maxLoadTimeMs?: number | undefined;
468
+ maxInitTimeMs?: number | undefined;
469
+ } | undefined;
470
+ } | undefined;
471
+ } | undefined;
472
+ datasources?: string[] | undefined;
473
+ configuration?: {
474
+ properties: Record<string, {
475
+ type: "string" | "number" | "boolean" | "object" | "array";
476
+ required?: boolean | undefined;
477
+ default?: any;
478
+ description?: string | undefined;
479
+ enum?: string[] | undefined;
480
+ secret?: boolean | undefined;
481
+ }>;
482
+ title?: string | undefined;
483
+ } | undefined;
484
+ contributes?: {
485
+ events?: string[] | undefined;
486
+ fieldTypes?: {
487
+ label: string;
488
+ name: string;
489
+ description?: string | undefined;
490
+ }[] | undefined;
491
+ actions?: {
492
+ name: string;
493
+ label?: string | undefined;
494
+ description?: string | undefined;
495
+ input?: any;
496
+ output?: any;
497
+ }[] | undefined;
498
+ kinds?: {
499
+ id: string;
500
+ globs: string[];
501
+ description?: string | undefined;
502
+ }[] | undefined;
503
+ menus?: Record<string, {
504
+ label: string;
505
+ id: string;
506
+ command?: string | undefined;
507
+ }[]> | undefined;
508
+ themes?: {
509
+ path: string;
510
+ label: string;
511
+ id: string;
512
+ }[] | undefined;
513
+ translations?: {
514
+ path: string;
515
+ locale: string;
516
+ }[] | undefined;
517
+ drivers?: {
518
+ label: string;
519
+ id: string;
520
+ description?: string | undefined;
521
+ }[] | undefined;
522
+ functions?: {
523
+ name: string;
524
+ description?: string | undefined;
525
+ returnType?: string | undefined;
526
+ args?: string[] | undefined;
527
+ }[] | undefined;
528
+ } | undefined;
529
+ };
16
530
  /**
17
531
  * Universal Unregister Method
18
532
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;GAGG;AACH,qBAAa,cAAc;IAEzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuC;IAE9D;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,GAAE,MAAM,CAAqB;IAcnF;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAUhD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI5D;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;IAItC;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAQrC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa;IAI3C,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIzD,MAAM,CAAC,aAAa,IAAI,aAAa,EAAE;IAIvC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB;IAInD,MAAM,CAAC,aAAa,IAAI,mBAAmB,EAAE;IAI7C;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE;IAIzD,MAAM,CAAC,WAAW,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE;CAGxD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/registry.js CHANGED
@@ -1,3 +1,6 @@
1
+ import { ObjectSchema } from '@objectstack/spec/data';
2
+ import { ManifestSchema } from '@objectstack/spec/kernel';
3
+ import { AppSchema } from '@objectstack/spec/ui';
1
4
  /**
2
5
  * Global Schema Registry
3
6
  * Unified storage for all metadata types (Objects, Apps, Flows, Layouts, etc.)
@@ -15,12 +18,38 @@ export class SchemaRegistry {
15
18
  }
16
19
  const collection = this.metadata.get(type);
17
20
  const key = String(item[keyField]);
21
+ // Validation Hook
22
+ try {
23
+ this.validate(type, item);
24
+ }
25
+ catch (e) {
26
+ console.error(`[Registry] Validation failed for ${type} ${key}: ${e.message}`);
27
+ // For now, warn but don't crash, allowing partial/legacy loads
28
+ // throw e;
29
+ }
18
30
  if (collection.has(key)) {
19
31
  console.warn(`[Registry] Overwriting ${type}: ${key}`);
20
32
  }
21
33
  collection.set(key, item);
22
34
  console.log(`[Registry] Registered ${type}: ${key}`);
23
35
  }
36
+ /**
37
+ * Validate Metadata against Spec Zod Schemas
38
+ */
39
+ static validate(type, item) {
40
+ if (type === 'object') {
41
+ return ObjectSchema.parse(item);
42
+ }
43
+ if (type === 'app') {
44
+ // AppSchema might rely on Zod, imported via UI protocol
45
+ return AppSchema.parse(item);
46
+ }
47
+ if (type === 'plugin') {
48
+ return ManifestSchema.parse(item);
49
+ }
50
+ // Add more validations as needed
51
+ return true;
52
+ }
24
53
  /**
25
54
  * Universal Unregister Method
26
55
  */
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@objectstack/objectql",
3
- "version": "0.9.2",
3
+ "version": "1.0.1",
4
+ "license": "Apache-2.0",
4
5
  "description": "Isomorphic ObjectQL Engine for ObjectStack",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
7
8
  "dependencies": {
8
- "@objectstack/core": "0.9.2",
9
- "@objectstack/spec": "0.9.2",
10
- "@objectstack/types": "0.9.2"
9
+ "@objectstack/core": "1.0.1",
10
+ "@objectstack/spec": "1.0.1",
11
+ "@objectstack/types": "1.0.1"
11
12
  },
12
13
  "devDependencies": {
13
14
  "typescript": "^5.0.0",