@objectstack/metadata 7.3.0 → 7.4.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 +76 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +73 -4
- package/dist/index.js.map +1 -1
- package/dist/migrations/index.cjs +126 -2
- package/dist/migrations/index.cjs.map +1 -1
- package/dist/migrations/index.d.cts +48 -2
- package/dist/migrations/index.d.ts +48 -2
- package/dist/migrations/index.js +124 -1
- package/dist/migrations/index.js.map +1 -1
- package/dist/node.cjs +76 -8
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +73 -4
- package/dist/node.js.map +1 -1
- package/package.json +7 -7
package/dist/node.cjs
CHANGED
|
@@ -208,6 +208,7 @@ __export(node_exports, {
|
|
|
208
208
|
module.exports = __toCommonJS(node_exports);
|
|
209
209
|
|
|
210
210
|
// src/metadata-manager.ts
|
|
211
|
+
var import_kernel = require("@objectstack/spec/kernel");
|
|
211
212
|
var import_core = require("@objectstack/core");
|
|
212
213
|
|
|
213
214
|
// src/serializers/json-serializer.ts
|
|
@@ -1489,6 +1490,22 @@ var _MetadataManager = class _MetadataManager {
|
|
|
1489
1490
|
}
|
|
1490
1491
|
}
|
|
1491
1492
|
}
|
|
1493
|
+
/**
|
|
1494
|
+
* Register a metadata item into the in-memory registry ONLY, never persisting
|
|
1495
|
+
* to a writable loader. Used for GitOps-managed artefacts that must be
|
|
1496
|
+
* *listable* (so `list(type)` returns them) but must never leak into the
|
|
1497
|
+
* runtime DB store — e.g. code-defined datasources (`origin:'code'`, ADR-0015
|
|
1498
|
+
* Addendum) declared in `*.datasource.ts` and owned by source control. Writing
|
|
1499
|
+
* them through `register()` would persist them to `sys_metadata` and create
|
|
1500
|
+
* drift between the artefact and the DB; this method avoids that.
|
|
1501
|
+
*/
|
|
1502
|
+
registerInMemory(type, name, data) {
|
|
1503
|
+
if (!this.registry.has(type)) {
|
|
1504
|
+
this.registry.set(type, /* @__PURE__ */ new Map());
|
|
1505
|
+
}
|
|
1506
|
+
this.registry.get(type).set(name, data);
|
|
1507
|
+
this.invalidateListCache(type);
|
|
1508
|
+
}
|
|
1492
1509
|
/**
|
|
1493
1510
|
* Get a metadata item by type and name.
|
|
1494
1511
|
* Checks in-memory registry first, then falls back to loaders.
|
|
@@ -1643,6 +1660,26 @@ var _MetadataManager = class _MetadataManager {
|
|
|
1643
1660
|
}
|
|
1644
1661
|
return views;
|
|
1645
1662
|
}
|
|
1663
|
+
/**
|
|
1664
|
+
* List the independent ViewItems bound to an object, sorted for the runtime
|
|
1665
|
+
* view switcher / Studio left rail ("Object has-many View").
|
|
1666
|
+
*
|
|
1667
|
+
* Returns only expanded ViewItems (those carrying a `viewKind`) — never the
|
|
1668
|
+
* legacy aggregated container kept under the bare `<object>` key — so callers
|
|
1669
|
+
* get exactly one entry per named view. Sorted by `order`, then `name`.
|
|
1670
|
+
*
|
|
1671
|
+
* Runtime-authored `shared` / `personal` views (`sys_view_definition`) are
|
|
1672
|
+
* merged in by the REST layer; this method returns the `package` layer that
|
|
1673
|
+
* was registered from source.
|
|
1674
|
+
*/
|
|
1675
|
+
async getViewsByObject(object) {
|
|
1676
|
+
const views = await this.list("view");
|
|
1677
|
+
return views.filter(
|
|
1678
|
+
(v) => v && typeof v === "object" && v.viewKind && v.object === object
|
|
1679
|
+
).sort(
|
|
1680
|
+
(a, b) => (a.order ?? 0) - (b.order ?? 0) || String(a.name).localeCompare(String(b.name))
|
|
1681
|
+
);
|
|
1682
|
+
}
|
|
1646
1683
|
/**
|
|
1647
1684
|
* Convenience: get a dashboard definition by name
|
|
1648
1685
|
*/
|
|
@@ -2192,13 +2229,18 @@ var _MetadataManager = class _MetadataManager {
|
|
|
2192
2229
|
async getTypeInfo(type) {
|
|
2193
2230
|
const entry = this.typeRegistry.find((e) => e.type === type);
|
|
2194
2231
|
if (!entry) return void 0;
|
|
2232
|
+
const byName = /* @__PURE__ */ new Map();
|
|
2233
|
+
for (const a of entry.actions ?? []) byName.set(a.name, a);
|
|
2234
|
+
for (const a of (0, import_kernel.getMetadataTypeActions)(type)) byName.set(a.name, a);
|
|
2235
|
+
const actions = Array.from(byName.values());
|
|
2195
2236
|
return {
|
|
2196
2237
|
type: entry.type,
|
|
2197
2238
|
label: entry.label,
|
|
2198
2239
|
description: entry.description,
|
|
2199
2240
|
filePatterns: entry.filePatterns,
|
|
2200
2241
|
supportsOverlay: entry.supportsOverlay,
|
|
2201
|
-
domain: entry.domain
|
|
2242
|
+
domain: entry.domain,
|
|
2243
|
+
...actions.length > 0 ? { actions } : {}
|
|
2202
2244
|
};
|
|
2203
2245
|
}
|
|
2204
2246
|
// ==========================================
|
|
@@ -3146,13 +3188,19 @@ var MemoryLoader = class {
|
|
|
3146
3188
|
};
|
|
3147
3189
|
|
|
3148
3190
|
// src/plugin.ts
|
|
3149
|
-
var
|
|
3191
|
+
var import_kernel2 = require("@objectstack/spec/kernel");
|
|
3150
3192
|
var import_shared = require("@objectstack/spec/shared");
|
|
3151
3193
|
var import_metadata2 = require("@objectstack/platform-objects/metadata");
|
|
3194
|
+
var import_spec = require("@objectstack/spec");
|
|
3195
|
+
var import_spec2 = require("@objectstack/spec");
|
|
3152
3196
|
var queryableMetadataObjects = [
|
|
3153
3197
|
import_metadata2.SysMetadataObject,
|
|
3154
3198
|
import_metadata2.SysMetadataHistoryObject,
|
|
3155
|
-
import_metadata2.SysMetadataAuditObject
|
|
3199
|
+
import_metadata2.SysMetadataAuditObject,
|
|
3200
|
+
// Runtime view storage (shared / personal). Must always be provisioned so
|
|
3201
|
+
// end-user view creation via the generic data API has a place to write —
|
|
3202
|
+
// mirroring why sys_metadata is always provisioned for PUT /meta.
|
|
3203
|
+
import_metadata2.SysViewDefinitionObject
|
|
3156
3204
|
];
|
|
3157
3205
|
var REPO_SUBDIR = ".objectstack/metadata";
|
|
3158
3206
|
var ARTIFACT_FIELD_TO_TYPE = {
|
|
@@ -3166,7 +3214,6 @@ var ARTIFACT_FIELD_TO_TYPE = {
|
|
|
3166
3214
|
actions: "action",
|
|
3167
3215
|
themes: "theme",
|
|
3168
3216
|
workflows: "workflow",
|
|
3169
|
-
approvals: "approval",
|
|
3170
3217
|
flows: "flow",
|
|
3171
3218
|
roles: "role",
|
|
3172
3219
|
permissions: "permission",
|
|
@@ -3399,7 +3446,7 @@ var MetadataPlugin = class {
|
|
|
3399
3446
|
watch: effectiveWatch,
|
|
3400
3447
|
formats: ["yaml", "json", "typescript", "javascript"]
|
|
3401
3448
|
});
|
|
3402
|
-
this.manager.setTypeRegistry(
|
|
3449
|
+
this.manager.setTypeRegistry(import_kernel2.DEFAULT_METADATA_TYPE_REGISTRY);
|
|
3403
3450
|
}
|
|
3404
3451
|
/**
|
|
3405
3452
|
* Fetch JSON content from a URL with configurable timeout.
|
|
@@ -3464,6 +3511,27 @@ var MetadataPlugin = class {
|
|
|
3464
3511
|
const items = metadata[field];
|
|
3465
3512
|
if (!Array.isArray(items) || items.length === 0) continue;
|
|
3466
3513
|
for (const item of items) {
|
|
3514
|
+
if (metaType === "view" && (0, import_spec2.isAggregatedViewContainer)(item)) {
|
|
3515
|
+
const viewObject = item?.list?.data?.object ?? item?.form?.data?.object;
|
|
3516
|
+
if (!viewObject) continue;
|
|
3517
|
+
(0, import_shared.applyProtection)(item, {
|
|
3518
|
+
packageId: manifestPackageId,
|
|
3519
|
+
packageVersion: manifestVersion
|
|
3520
|
+
});
|
|
3521
|
+
await memLoader.save("view", viewObject, item);
|
|
3522
|
+
await this.manager.register("view", viewObject, item);
|
|
3523
|
+
totalRegistered++;
|
|
3524
|
+
for (const vi of (0, import_spec2.expandViewContainer)(viewObject, item)) {
|
|
3525
|
+
(0, import_shared.applyProtection)(vi, {
|
|
3526
|
+
packageId: manifestPackageId,
|
|
3527
|
+
packageVersion: manifestVersion
|
|
3528
|
+
});
|
|
3529
|
+
await memLoader.save("view", vi.name, vi);
|
|
3530
|
+
await this.manager.register("view", vi.name, vi);
|
|
3531
|
+
totalRegistered++;
|
|
3532
|
+
}
|
|
3533
|
+
continue;
|
|
3534
|
+
}
|
|
3467
3535
|
let name = item?.name;
|
|
3468
3536
|
if (!name) {
|
|
3469
3537
|
if (metaType === "view") {
|
|
@@ -3529,7 +3597,7 @@ var MetadataPlugin = class {
|
|
|
3529
3597
|
}
|
|
3530
3598
|
async _loadFromFileSystem(ctx) {
|
|
3531
3599
|
ctx.logger.info("Loading metadata from file system...");
|
|
3532
|
-
const sortedTypes = [...
|
|
3600
|
+
const sortedTypes = [...import_kernel2.DEFAULT_METADATA_TYPE_REGISTRY].sort((a, b) => a.loadOrder - b.loadOrder);
|
|
3533
3601
|
let totalLoaded = 0;
|
|
3534
3602
|
for (const entry of sortedTypes) {
|
|
3535
3603
|
try {
|
|
@@ -3659,9 +3727,9 @@ var RemoteLoader = class {
|
|
|
3659
3727
|
var import_metadata3 = require("@objectstack/platform-objects/metadata");
|
|
3660
3728
|
|
|
3661
3729
|
// src/utils/history-cleanup.ts
|
|
3662
|
-
var
|
|
3730
|
+
var import_kernel3 = require("@objectstack/spec/kernel");
|
|
3663
3731
|
function executionPinnedTypes() {
|
|
3664
|
-
return
|
|
3732
|
+
return import_kernel3.DEFAULT_METADATA_TYPE_REGISTRY.filter((entry) => entry.executionPinned).map((entry) => entry.type);
|
|
3665
3733
|
}
|
|
3666
3734
|
var HistoryCleanupManager = class {
|
|
3667
3735
|
constructor(policy, dbLoader) {
|