@objectstack/metadata 3.2.9 → 3.3.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 (38) hide show
  1. package/dist/index.cjs +2197 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.js +42 -82
  4. package/dist/index.js.map +1 -1
  5. package/dist/node.cjs +2201 -0
  6. package/dist/node.cjs.map +1 -0
  7. package/dist/node.d.cts +65 -0
  8. package/dist/node.d.ts +65 -0
  9. package/dist/{index.mjs → node.js} +3 -1
  10. package/package.json +18 -13
  11. package/.turbo/turbo-build.log +0 -22
  12. package/CHANGELOG.md +0 -496
  13. package/ROADMAP.md +0 -224
  14. package/src/index.ts +0 -68
  15. package/src/loaders/database-loader.test.ts +0 -559
  16. package/src/loaders/database-loader.ts +0 -352
  17. package/src/loaders/filesystem-loader.ts +0 -420
  18. package/src/loaders/loader-interface.ts +0 -89
  19. package/src/loaders/memory-loader.ts +0 -103
  20. package/src/loaders/remote-loader.ts +0 -140
  21. package/src/metadata-manager.ts +0 -1168
  22. package/src/metadata-service.test.ts +0 -965
  23. package/src/metadata.test.ts +0 -431
  24. package/src/migration/executor.ts +0 -54
  25. package/src/migration/index.ts +0 -3
  26. package/src/node-metadata-manager.ts +0 -126
  27. package/src/node.ts +0 -11
  28. package/src/objects/sys-metadata.object.ts +0 -188
  29. package/src/plugin.ts +0 -102
  30. package/src/serializers/json-serializer.ts +0 -73
  31. package/src/serializers/serializer-interface.ts +0 -65
  32. package/src/serializers/serializers.test.ts +0 -74
  33. package/src/serializers/typescript-serializer.ts +0 -127
  34. package/src/serializers/yaml-serializer.ts +0 -49
  35. package/tsconfig.json +0 -9
  36. package/vitest.config.ts +0 -23
  37. /package/dist/{index.d.mts → index.d.cts} +0 -0
  38. /package/dist/{index.mjs.map → node.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,50 +1,11 @@
1
- "use strict";
2
- var __create = Object.create;
3
1
  var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
2
  var __export = (target, all) => {
9
3
  for (var name in all)
10
4
  __defProp(target, name, { get: all[name], enumerable: true });
11
5
  };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- DatabaseLoader: () => DatabaseLoader,
34
- JSONSerializer: () => JSONSerializer,
35
- MemoryLoader: () => MemoryLoader,
36
- MetadataManager: () => MetadataManager,
37
- MetadataPlugin: () => MetadataPlugin,
38
- Migration: () => migration_exports,
39
- RemoteLoader: () => RemoteLoader,
40
- SysMetadataObject: () => SysMetadataObject,
41
- TypeScriptSerializer: () => TypeScriptSerializer,
42
- YAMLSerializer: () => YAMLSerializer
43
- });
44
- module.exports = __toCommonJS(index_exports);
45
6
 
46
7
  // src/metadata-manager.ts
47
- var import_core = require("@objectstack/core");
8
+ import { createLogger } from "@objectstack/core";
48
9
 
49
10
  // src/serializers/json-serializer.ts
50
11
  var JSONSerializer = class {
@@ -92,7 +53,7 @@ var JSONSerializer = class {
92
53
  };
93
54
 
94
55
  // src/serializers/yaml-serializer.ts
95
- var yaml = __toESM(require("js-yaml"));
56
+ import * as yaml from "js-yaml";
96
57
  var YAMLSerializer = class {
97
58
  serialize(item, options) {
98
59
  const { indent = 2, sortKeys = false } = options || {};
@@ -214,8 +175,8 @@ export default metadata;
214
175
  };
215
176
 
216
177
  // src/objects/sys-metadata.object.ts
217
- var import_data = require("@objectstack/spec/data");
218
- var SysMetadataObject = import_data.ObjectSchema.create({
178
+ import { ObjectSchema, Field } from "@objectstack/spec/data";
179
+ var SysMetadataObject = ObjectSchema.create({
219
180
  namespace: "sys",
220
181
  name: "metadata",
221
182
  label: "System Metadata",
@@ -225,126 +186,126 @@ var SysMetadataObject = import_data.ObjectSchema.create({
225
186
  description: "Stores platform and user-scope metadata records (objects, views, flows, etc.)",
226
187
  fields: {
227
188
  /** Primary Key (UUID) */
228
- id: import_data.Field.text({
189
+ id: Field.text({
229
190
  label: "ID",
230
191
  required: true,
231
192
  readonly: true
232
193
  }),
233
194
  /** Machine name — unique identifier used in code references */
234
- name: import_data.Field.text({
195
+ name: Field.text({
235
196
  label: "Name",
236
197
  required: true,
237
198
  searchable: true,
238
199
  maxLength: 255
239
200
  }),
240
201
  /** Metadata type (e.g. "object", "view", "flow") */
241
- type: import_data.Field.text({
202
+ type: Field.text({
242
203
  label: "Metadata Type",
243
204
  required: true,
244
205
  searchable: true,
245
206
  maxLength: 100
246
207
  }),
247
208
  /** Namespace / module grouping (e.g. "crm", "core") */
248
- namespace: import_data.Field.text({
209
+ namespace: Field.text({
249
210
  label: "Namespace",
250
211
  required: false,
251
212
  defaultValue: "default",
252
213
  maxLength: 100
253
214
  }),
254
215
  /** Package that owns/delivered this metadata */
255
- package_id: import_data.Field.text({
216
+ package_id: Field.text({
256
217
  label: "Package ID",
257
218
  required: false,
258
219
  maxLength: 255
259
220
  }),
260
221
  /** Who manages this record: package, platform, or user */
261
- managed_by: import_data.Field.select(["package", "platform", "user"], {
222
+ managed_by: Field.select(["package", "platform", "user"], {
262
223
  label: "Managed By",
263
224
  required: false
264
225
  }),
265
226
  /** Scope: system (code), platform (admin DB), user (personal DB) */
266
- scope: import_data.Field.select(["system", "platform", "user"], {
227
+ scope: Field.select(["system", "platform", "user"], {
267
228
  label: "Scope",
268
229
  required: true,
269
230
  defaultValue: "platform"
270
231
  }),
271
232
  /** JSON payload — the actual metadata configuration */
272
- metadata: import_data.Field.textarea({
233
+ metadata: Field.textarea({
273
234
  label: "Metadata",
274
235
  required: true,
275
236
  description: "JSON-serialized metadata payload"
276
237
  }),
277
238
  /** Parent metadata name for extension/override */
278
- extends: import_data.Field.text({
239
+ extends: Field.text({
279
240
  label: "Extends",
280
241
  required: false,
281
242
  maxLength: 255
282
243
  }),
283
244
  /** Merge strategy when extending parent metadata */
284
- strategy: import_data.Field.select(["merge", "replace"], {
245
+ strategy: Field.select(["merge", "replace"], {
285
246
  label: "Strategy",
286
247
  required: false,
287
248
  defaultValue: "merge"
288
249
  }),
289
250
  /** Owner user ID (for user-scope items) */
290
- owner: import_data.Field.text({
251
+ owner: Field.text({
291
252
  label: "Owner",
292
253
  required: false,
293
254
  maxLength: 255
294
255
  }),
295
256
  /** Lifecycle state */
296
- state: import_data.Field.select(["draft", "active", "archived", "deprecated"], {
257
+ state: Field.select(["draft", "active", "archived", "deprecated"], {
297
258
  label: "State",
298
259
  required: false,
299
260
  defaultValue: "active"
300
261
  }),
301
262
  /** Tenant ID for multi-tenant isolation */
302
- tenant_id: import_data.Field.text({
263
+ tenant_id: Field.text({
303
264
  label: "Tenant ID",
304
265
  required: false,
305
266
  maxLength: 255
306
267
  }),
307
268
  /** Version number for optimistic concurrency */
308
- version: import_data.Field.number({
269
+ version: Field.number({
309
270
  label: "Version",
310
271
  required: false,
311
272
  defaultValue: 1
312
273
  }),
313
274
  /** Content checksum for change detection */
314
- checksum: import_data.Field.text({
275
+ checksum: Field.text({
315
276
  label: "Checksum",
316
277
  required: false,
317
278
  maxLength: 64
318
279
  }),
319
280
  /** Origin of this metadata record */
320
- source: import_data.Field.select(["filesystem", "database", "api", "migration"], {
281
+ source: Field.select(["filesystem", "database", "api", "migration"], {
321
282
  label: "Source",
322
283
  required: false
323
284
  }),
324
285
  /** Classification tags (JSON array) */
325
- tags: import_data.Field.textarea({
286
+ tags: Field.textarea({
326
287
  label: "Tags",
327
288
  required: false,
328
289
  description: "JSON-serialized array of classification tags"
329
290
  }),
330
291
  /** Audit fields */
331
- created_by: import_data.Field.text({
292
+ created_by: Field.text({
332
293
  label: "Created By",
333
294
  required: false,
334
295
  readonly: true,
335
296
  maxLength: 255
336
297
  }),
337
- created_at: import_data.Field.datetime({
298
+ created_at: Field.datetime({
338
299
  label: "Created At",
339
300
  required: false,
340
301
  readonly: true
341
302
  }),
342
- updated_by: import_data.Field.text({
303
+ updated_by: Field.text({
343
304
  label: "Updated By",
344
305
  required: false,
345
306
  maxLength: 255
346
307
  }),
347
- updated_at: import_data.Field.datetime({
308
+ updated_at: Field.datetime({
348
309
  label: "Updated At",
349
310
  required: false
350
311
  })
@@ -617,7 +578,7 @@ var MetadataManager = class {
617
578
  // Dependency tracking: "type:name" -> dependencies
618
579
  this.dependencies = /* @__PURE__ */ new Map();
619
580
  this.config = config;
620
- this.logger = (0, import_core.createLogger)({ level: "info", format: "pretty" });
581
+ this.logger = createLogger({ level: "info", format: "pretty" });
621
582
  this.serializers = /* @__PURE__ */ new Map();
622
583
  const formats = config.formats || ["typescript", "json", "yaml"];
623
584
  if (formats.includes("json")) {
@@ -1491,14 +1452,14 @@ var MetadataManager = class {
1491
1452
  };
1492
1453
 
1493
1454
  // src/node-metadata-manager.ts
1494
- var path2 = __toESM(require("path"));
1495
- var import_chokidar = require("chokidar");
1455
+ import * as path2 from "path";
1456
+ import { watch as chokidarWatch } from "chokidar";
1496
1457
 
1497
1458
  // src/loaders/filesystem-loader.ts
1498
- var fs = __toESM(require("fs/promises"));
1499
- var path = __toESM(require("path"));
1500
- var import_glob = require("glob");
1501
- var import_node_crypto = require("crypto");
1459
+ import * as fs from "fs/promises";
1460
+ import * as path from "path";
1461
+ import { glob } from "glob";
1462
+ import { createHash } from "crypto";
1502
1463
  var FilesystemLoader = class {
1503
1464
  constructor(rootDir, serializers, logger) {
1504
1465
  this.rootDir = rootDir;
@@ -1605,7 +1566,7 @@ var FilesystemLoader = class {
1605
1566
  (pattern) => path.join(typeDir, pattern)
1606
1567
  );
1607
1568
  for (const pattern of globPatterns) {
1608
- const files = await (0, import_glob.glob)(pattern, {
1569
+ const files = await glob(pattern, {
1609
1570
  ignore: ["**/node_modules/**", "**/*.test.*", "**/*.spec.*"],
1610
1571
  nodir: true
1611
1572
  });
@@ -1676,7 +1637,7 @@ var FilesystemLoader = class {
1676
1637
  async list(type) {
1677
1638
  const typeDir = path.join(this.rootDir, type);
1678
1639
  try {
1679
- const files = await (0, import_glob.glob)("**/*", {
1640
+ const files = await glob("**/*", {
1680
1641
  cwd: typeDir,
1681
1642
  ignore: ["**/node_modules/**", "**/*.test.*", "**/*.spec.*"],
1682
1643
  nodir: true
@@ -1810,7 +1771,7 @@ var FilesystemLoader = class {
1810
1771
  * while keeping ETag headers compact (full 64-char hash is overkill for this use case)
1811
1772
  */
1812
1773
  generateETag(content) {
1813
- const hash = (0, import_node_crypto.createHash)("sha256").update(content).digest("hex").substring(0, 32);
1774
+ const hash = createHash("sha256").update(content).digest("hex").substring(0, 32);
1814
1775
  return `"${hash}"`;
1815
1776
  }
1816
1777
  };
@@ -1842,7 +1803,7 @@ var NodeMetadataManager = class extends MetadataManager {
1842
1803
  startWatching() {
1843
1804
  const rootDir = this.config.rootDir || process.cwd();
1844
1805
  const { ignored = ["**/node_modules/**", "**/*.test.*"], persistent = true } = this.config.watchOptions || {};
1845
- this.watcher = (0, import_chokidar.watch)(rootDir, {
1806
+ this.watcher = chokidarWatch(rootDir, {
1846
1807
  ignored,
1847
1808
  persistent,
1848
1809
  ignoreInitial: true
@@ -1896,7 +1857,7 @@ var NodeMetadataManager = class extends MetadataManager {
1896
1857
  };
1897
1858
 
1898
1859
  // src/plugin.ts
1899
- var import_kernel = require("@objectstack/spec/kernel");
1860
+ import { DEFAULT_METADATA_TYPE_REGISTRY } from "@objectstack/spec/kernel";
1900
1861
  var MetadataPlugin = class {
1901
1862
  constructor(options = {}) {
1902
1863
  this.name = "com.objectstack.metadata";
@@ -1923,7 +1884,7 @@ var MetadataPlugin = class {
1923
1884
  };
1924
1885
  this.start = async (ctx) => {
1925
1886
  ctx.logger.info("Loading metadata from file system...");
1926
- const sortedTypes = [...import_kernel.DEFAULT_METADATA_TYPE_REGISTRY].sort((a, b) => a.loadOrder - b.loadOrder);
1887
+ const sortedTypes = [...DEFAULT_METADATA_TYPE_REGISTRY].sort((a, b) => a.loadOrder - b.loadOrder);
1927
1888
  let totalLoaded = 0;
1928
1889
  for (const entry of sortedTypes) {
1929
1890
  try {
@@ -1959,7 +1920,7 @@ var MetadataPlugin = class {
1959
1920
  watch: this.options.watch ?? true,
1960
1921
  formats: ["yaml", "json", "typescript", "javascript"]
1961
1922
  });
1962
- this.manager.setTypeRegistry(import_kernel.DEFAULT_METADATA_TYPE_REGISTRY);
1923
+ this.manager.setTypeRegistry(DEFAULT_METADATA_TYPE_REGISTRY);
1963
1924
  }
1964
1925
  };
1965
1926
 
@@ -2181,17 +2142,16 @@ var MigrationExecutor = class {
2181
2142
  }
2182
2143
  }
2183
2144
  };
2184
- // Annotate the CommonJS export names for ESM import in node:
2185
- 0 && (module.exports = {
2145
+ export {
2186
2146
  DatabaseLoader,
2187
2147
  JSONSerializer,
2188
2148
  MemoryLoader,
2189
2149
  MetadataManager,
2190
2150
  MetadataPlugin,
2191
- Migration,
2151
+ migration_exports as Migration,
2192
2152
  RemoteLoader,
2193
2153
  SysMetadataObject,
2194
2154
  TypeScriptSerializer,
2195
2155
  YAMLSerializer
2196
- });
2156
+ };
2197
2157
  //# sourceMappingURL=index.js.map