@objectstack/metadata 3.3.0 → 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.
- package/dist/index.cjs +2197 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +42 -82
- package/dist/index.js.map +1 -1
- package/dist/node.cjs +2201 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.cts +65 -0
- package/dist/node.d.ts +65 -0
- package/dist/{index.mjs → node.js} +3 -1
- package/package.json +18 -13
- package/.turbo/turbo-build.log +0 -22
- package/CHANGELOG.md +0 -504
- package/ROADMAP.md +0 -224
- package/src/index.ts +0 -68
- package/src/loaders/database-loader.test.ts +0 -559
- package/src/loaders/database-loader.ts +0 -352
- package/src/loaders/filesystem-loader.ts +0 -420
- package/src/loaders/loader-interface.ts +0 -89
- package/src/loaders/memory-loader.ts +0 -103
- package/src/loaders/remote-loader.ts +0 -140
- package/src/metadata-manager.ts +0 -1168
- package/src/metadata-service.test.ts +0 -965
- package/src/metadata.test.ts +0 -431
- package/src/migration/executor.ts +0 -54
- package/src/migration/index.ts +0 -3
- package/src/node-metadata-manager.ts +0 -126
- package/src/node.ts +0 -11
- package/src/objects/sys-metadata.object.ts +0 -188
- package/src/plugin.ts +0 -102
- package/src/serializers/json-serializer.ts +0 -73
- package/src/serializers/serializer-interface.ts +0 -65
- package/src/serializers/serializers.test.ts +0 -74
- package/src/serializers/typescript-serializer.ts +0 -127
- package/src/serializers/yaml-serializer.ts +0 -49
- package/tsconfig.json +0 -9
- package/vitest.config.ts +0 -23
- /package/dist/{index.d.mts → index.d.cts} +0 -0
- /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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
218
|
-
var SysMetadataObject =
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
251
|
+
owner: Field.text({
|
|
291
252
|
label: "Owner",
|
|
292
253
|
required: false,
|
|
293
254
|
maxLength: 255
|
|
294
255
|
}),
|
|
295
256
|
/** Lifecycle state */
|
|
296
|
-
state:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
298
|
+
created_at: Field.datetime({
|
|
338
299
|
label: "Created At",
|
|
339
300
|
required: false,
|
|
340
301
|
readonly: true
|
|
341
302
|
}),
|
|
342
|
-
updated_by:
|
|
303
|
+
updated_by: Field.text({
|
|
343
304
|
label: "Updated By",
|
|
344
305
|
required: false,
|
|
345
306
|
maxLength: 255
|
|
346
307
|
}),
|
|
347
|
-
updated_at:
|
|
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 =
|
|
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
|
-
|
|
1495
|
-
|
|
1455
|
+
import * as path2 from "path";
|
|
1456
|
+
import { watch as chokidarWatch } from "chokidar";
|
|
1496
1457
|
|
|
1497
1458
|
// src/loaders/filesystem-loader.ts
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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 = (
|
|
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
|
-
|
|
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 = [...
|
|
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(
|
|
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
|
-
|
|
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
|