@objectstack/metadata 7.3.0 → 7.4.0
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.js
CHANGED
|
@@ -163,6 +163,7 @@ var init_hmr_routes = __esm({
|
|
|
163
163
|
});
|
|
164
164
|
|
|
165
165
|
// src/metadata-manager.ts
|
|
166
|
+
import { getMetadataTypeActions } from "@objectstack/spec/kernel";
|
|
166
167
|
import { createLogger } from "@objectstack/core";
|
|
167
168
|
|
|
168
169
|
// src/serializers/json-serializer.ts
|
|
@@ -1444,6 +1445,22 @@ var _MetadataManager = class _MetadataManager {
|
|
|
1444
1445
|
}
|
|
1445
1446
|
}
|
|
1446
1447
|
}
|
|
1448
|
+
/**
|
|
1449
|
+
* Register a metadata item into the in-memory registry ONLY, never persisting
|
|
1450
|
+
* to a writable loader. Used for GitOps-managed artefacts that must be
|
|
1451
|
+
* *listable* (so `list(type)` returns them) but must never leak into the
|
|
1452
|
+
* runtime DB store — e.g. code-defined datasources (`origin:'code'`, ADR-0015
|
|
1453
|
+
* Addendum) declared in `*.datasource.ts` and owned by source control. Writing
|
|
1454
|
+
* them through `register()` would persist them to `sys_metadata` and create
|
|
1455
|
+
* drift between the artefact and the DB; this method avoids that.
|
|
1456
|
+
*/
|
|
1457
|
+
registerInMemory(type, name, data) {
|
|
1458
|
+
if (!this.registry.has(type)) {
|
|
1459
|
+
this.registry.set(type, /* @__PURE__ */ new Map());
|
|
1460
|
+
}
|
|
1461
|
+
this.registry.get(type).set(name, data);
|
|
1462
|
+
this.invalidateListCache(type);
|
|
1463
|
+
}
|
|
1447
1464
|
/**
|
|
1448
1465
|
* Get a metadata item by type and name.
|
|
1449
1466
|
* Checks in-memory registry first, then falls back to loaders.
|
|
@@ -1598,6 +1615,26 @@ var _MetadataManager = class _MetadataManager {
|
|
|
1598
1615
|
}
|
|
1599
1616
|
return views;
|
|
1600
1617
|
}
|
|
1618
|
+
/**
|
|
1619
|
+
* List the independent ViewItems bound to an object, sorted for the runtime
|
|
1620
|
+
* view switcher / Studio left rail ("Object has-many View").
|
|
1621
|
+
*
|
|
1622
|
+
* Returns only expanded ViewItems (those carrying a `viewKind`) — never the
|
|
1623
|
+
* legacy aggregated container kept under the bare `<object>` key — so callers
|
|
1624
|
+
* get exactly one entry per named view. Sorted by `order`, then `name`.
|
|
1625
|
+
*
|
|
1626
|
+
* Runtime-authored `shared` / `personal` views (`sys_view_definition`) are
|
|
1627
|
+
* merged in by the REST layer; this method returns the `package` layer that
|
|
1628
|
+
* was registered from source.
|
|
1629
|
+
*/
|
|
1630
|
+
async getViewsByObject(object) {
|
|
1631
|
+
const views = await this.list("view");
|
|
1632
|
+
return views.filter(
|
|
1633
|
+
(v) => v && typeof v === "object" && v.viewKind && v.object === object
|
|
1634
|
+
).sort(
|
|
1635
|
+
(a, b) => (a.order ?? 0) - (b.order ?? 0) || String(a.name).localeCompare(String(b.name))
|
|
1636
|
+
);
|
|
1637
|
+
}
|
|
1601
1638
|
/**
|
|
1602
1639
|
* Convenience: get a dashboard definition by name
|
|
1603
1640
|
*/
|
|
@@ -2147,13 +2184,18 @@ var _MetadataManager = class _MetadataManager {
|
|
|
2147
2184
|
async getTypeInfo(type) {
|
|
2148
2185
|
const entry = this.typeRegistry.find((e) => e.type === type);
|
|
2149
2186
|
if (!entry) return void 0;
|
|
2187
|
+
const byName = /* @__PURE__ */ new Map();
|
|
2188
|
+
for (const a of entry.actions ?? []) byName.set(a.name, a);
|
|
2189
|
+
for (const a of getMetadataTypeActions(type)) byName.set(a.name, a);
|
|
2190
|
+
const actions = Array.from(byName.values());
|
|
2150
2191
|
return {
|
|
2151
2192
|
type: entry.type,
|
|
2152
2193
|
label: entry.label,
|
|
2153
2194
|
description: entry.description,
|
|
2154
2195
|
filePatterns: entry.filePatterns,
|
|
2155
2196
|
supportsOverlay: entry.supportsOverlay,
|
|
2156
|
-
domain: entry.domain
|
|
2197
|
+
domain: entry.domain,
|
|
2198
|
+
...actions.length > 0 ? { actions } : {}
|
|
2157
2199
|
};
|
|
2158
2200
|
}
|
|
2159
2201
|
// ==========================================
|
|
@@ -3106,12 +3148,19 @@ import { applyProtection } from "@objectstack/spec/shared";
|
|
|
3106
3148
|
import {
|
|
3107
3149
|
SysMetadataObject as SysMetadataObject2,
|
|
3108
3150
|
SysMetadataHistoryObject as SysMetadataHistoryObject2,
|
|
3109
|
-
SysMetadataAuditObject
|
|
3151
|
+
SysMetadataAuditObject,
|
|
3152
|
+
SysViewDefinitionObject
|
|
3110
3153
|
} from "@objectstack/platform-objects/metadata";
|
|
3154
|
+
import { isAggregatedViewContainer, expandViewContainer } from "@objectstack/spec";
|
|
3155
|
+
import { isAggregatedViewContainer as isAggregatedViewContainer2, expandViewContainer as expandViewContainer2 } from "@objectstack/spec";
|
|
3111
3156
|
var queryableMetadataObjects = [
|
|
3112
3157
|
SysMetadataObject2,
|
|
3113
3158
|
SysMetadataHistoryObject2,
|
|
3114
|
-
SysMetadataAuditObject
|
|
3159
|
+
SysMetadataAuditObject,
|
|
3160
|
+
// Runtime view storage (shared / personal). Must always be provisioned so
|
|
3161
|
+
// end-user view creation via the generic data API has a place to write —
|
|
3162
|
+
// mirroring why sys_metadata is always provisioned for PUT /meta.
|
|
3163
|
+
SysViewDefinitionObject
|
|
3115
3164
|
];
|
|
3116
3165
|
var REPO_SUBDIR = ".objectstack/metadata";
|
|
3117
3166
|
var ARTIFACT_FIELD_TO_TYPE = {
|
|
@@ -3125,7 +3174,6 @@ var ARTIFACT_FIELD_TO_TYPE = {
|
|
|
3125
3174
|
actions: "action",
|
|
3126
3175
|
themes: "theme",
|
|
3127
3176
|
workflows: "workflow",
|
|
3128
|
-
approvals: "approval",
|
|
3129
3177
|
flows: "flow",
|
|
3130
3178
|
roles: "role",
|
|
3131
3179
|
permissions: "permission",
|
|
@@ -3423,6 +3471,27 @@ var MetadataPlugin = class {
|
|
|
3423
3471
|
const items = metadata[field];
|
|
3424
3472
|
if (!Array.isArray(items) || items.length === 0) continue;
|
|
3425
3473
|
for (const item of items) {
|
|
3474
|
+
if (metaType === "view" && isAggregatedViewContainer2(item)) {
|
|
3475
|
+
const viewObject = item?.list?.data?.object ?? item?.form?.data?.object;
|
|
3476
|
+
if (!viewObject) continue;
|
|
3477
|
+
applyProtection(item, {
|
|
3478
|
+
packageId: manifestPackageId,
|
|
3479
|
+
packageVersion: manifestVersion
|
|
3480
|
+
});
|
|
3481
|
+
await memLoader.save("view", viewObject, item);
|
|
3482
|
+
await this.manager.register("view", viewObject, item);
|
|
3483
|
+
totalRegistered++;
|
|
3484
|
+
for (const vi of expandViewContainer2(viewObject, item)) {
|
|
3485
|
+
applyProtection(vi, {
|
|
3486
|
+
packageId: manifestPackageId,
|
|
3487
|
+
packageVersion: manifestVersion
|
|
3488
|
+
});
|
|
3489
|
+
await memLoader.save("view", vi.name, vi);
|
|
3490
|
+
await this.manager.register("view", vi.name, vi);
|
|
3491
|
+
totalRegistered++;
|
|
3492
|
+
}
|
|
3493
|
+
continue;
|
|
3494
|
+
}
|
|
3426
3495
|
let name = item?.name;
|
|
3427
3496
|
if (!name) {
|
|
3428
3497
|
if (metaType === "view") {
|