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