@x12i/memorix-descriptors 1.5.0 → 1.7.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/README.md +1 -1
- package/dist/admin/create-admin.d.ts +10 -1
- package/dist/admin/create-admin.d.ts.map +1 -1
- package/dist/admin/create-admin.js +21 -0
- package/dist/admin/create-admin.js.map +1 -1
- package/dist/admin/execute-mutation.d.ts.map +1 -1
- package/dist/admin/execute-mutation.js +6 -0
- package/dist/admin/execute-mutation.js.map +1 -1
- package/dist/catalog/ensure-catalogs.d.ts.map +1 -1
- package/dist/catalog/ensure-catalogs.js +6 -2
- package/dist/catalog/ensure-catalogs.js.map +1 -1
- package/dist/catalog/ids.d.ts +18 -4
- package/dist/catalog/ids.d.ts.map +1 -1
- package/dist/catalog/ids.js +31 -4
- package/dist/catalog/ids.js.map +1 -1
- package/dist/catalox/client.d.ts +2 -1
- package/dist/catalox/client.d.ts.map +1 -1
- package/dist/catalox/client.js +3 -2
- package/dist/catalox/client.js.map +1 -1
- package/dist/cli/index.js +35 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/migration/apply.d.ts.map +1 -1
- package/dist/migration/apply.js +1 -1
- package/dist/migration/apply.js.map +1 -1
- package/dist/migration/classify.d.ts.map +1 -1
- package/dist/migration/classify.js +4 -2
- package/dist/migration/classify.js.map +1 -1
- package/dist/migration/load-snapshot.js +3 -3
- package/dist/migration/load-snapshot.js.map +1 -1
- package/dist/migration/object-type-specs.d.ts.map +1 -1
- package/dist/migration/object-type-specs.js +5 -0
- package/dist/migration/object-type-specs.js.map +1 -1
- package/dist/migration/plan.js +2 -2
- package/dist/migration/plan.js.map +1 -1
- package/dist/migration/verify.d.ts +2 -0
- package/dist/migration/verify.d.ts.map +1 -1
- package/dist/migration/verify.js +11 -1
- package/dist/migration/verify.js.map +1 -1
- package/dist/mutations/common.d.ts.map +1 -1
- package/dist/mutations/common.js +7 -0
- package/dist/mutations/common.js.map +1 -1
- package/dist/mutations/content-type.d.ts.map +1 -1
- package/dist/mutations/content-type.js +14 -10
- package/dist/mutations/content-type.js.map +1 -1
- package/dist/mutations/entity.d.ts +2 -0
- package/dist/mutations/entity.d.ts.map +1 -1
- package/dist/mutations/entity.js +53 -23
- package/dist/mutations/entity.js.map +1 -1
- package/dist/mutations/execute.d.ts.map +1 -1
- package/dist/mutations/execute.js +12 -3
- package/dist/mutations/execute.js.map +1 -1
- package/dist/mutations/item.js.map +1 -1
- package/dist/mutations/list.js.map +1 -1
- package/dist/mutations/property.d.ts.map +1 -1
- package/dist/mutations/property.js +11 -7
- package/dist/mutations/property.js.map +1 -1
- package/dist/mutations/relation.d.ts.map +1 -1
- package/dist/mutations/relation.js +13 -9
- package/dist/mutations/relation.js.map +1 -1
- package/dist/mutations/rename-entity.d.ts.map +1 -1
- package/dist/mutations/rename-entity.js +11 -8
- package/dist/mutations/rename-entity.js.map +1 -1
- package/dist/mutations/write-descriptor.d.ts +12 -0
- package/dist/mutations/write-descriptor.d.ts.map +1 -0
- package/dist/mutations/write-descriptor.js +120 -0
- package/dist/mutations/write-descriptor.js.map +1 -0
- package/dist/reconcile/index.d.ts +1 -1
- package/dist/reconcile/index.d.ts.map +1 -1
- package/dist/reconcile/index.js.map +1 -1
- package/dist/reconcile/inventory-types.d.ts +28 -12
- package/dist/reconcile/inventory-types.d.ts.map +1 -1
- package/dist/reconcile/inventory-types.js.map +1 -1
- package/dist/reconcile/types.d.ts +1 -1
- package/dist/reconcile/types.d.ts.map +1 -1
- package/dist/reconcile/unified-inventory.d.ts.map +1 -1
- package/dist/reconcile/unified-inventory.js +106 -21
- package/dist/reconcile/unified-inventory.js.map +1 -1
- package/dist/seeds/build-manifest.d.ts.map +1 -1
- package/dist/seeds/build-manifest.js +4 -15
- package/dist/seeds/build-manifest.js.map +1 -1
- package/dist/seeds/default-seed-spec.d.ts +4 -2
- package/dist/seeds/default-seed-spec.d.ts.map +1 -1
- package/dist/seeds/default-seed-spec.js +60 -31
- package/dist/seeds/default-seed-spec.js.map +1 -1
- package/dist/seeds/index.d.ts.map +1 -1
- package/dist/seeds/index.js +12 -4
- package/dist/seeds/index.js.map +1 -1
- package/dist/source/graph.d.ts.map +1 -1
- package/dist/source/graph.js +4 -3
- package/dist/source/graph.js.map +1 -1
- package/dist/source/inspectable.js +2 -2
- package/dist/source/inspectable.js.map +1 -1
- package/dist/source/registry.js +2 -2
- package/dist/source/registry.js.map +1 -1
- package/dist/source/snapshot.js +2 -2
- package/dist/source/snapshot.js.map +1 -1
- package/dist/source/validation.d.ts.map +1 -1
- package/dist/source/validation.js +6 -5
- package/dist/source/validation.js.map +1 -1
- package/dist/store/descriptor-lookup.d.ts +9 -0
- package/dist/store/descriptor-lookup.d.ts.map +1 -0
- package/dist/store/descriptor-lookup.js +21 -0
- package/dist/store/descriptor-lookup.js.map +1 -0
- package/dist/store/descriptor-normalize.d.ts +14 -0
- package/dist/store/descriptor-normalize.d.ts.map +1 -0
- package/dist/store/descriptor-normalize.js +141 -0
- package/dist/store/descriptor-normalize.js.map +1 -0
- package/dist/store/snapshot.d.ts.map +1 -1
- package/dist/store/snapshot.js +16 -6
- package/dist/store/snapshot.js.map +1 -1
- package/dist/tests/canonical-metadata.test.js +12 -13
- package/dist/tests/canonical-metadata.test.js.map +1 -1
- package/dist/tests/descriptor-lookup.test.d.ts +2 -0
- package/dist/tests/descriptor-lookup.test.d.ts.map +1 -0
- package/dist/tests/descriptor-lookup.test.js +44 -0
- package/dist/tests/descriptor-lookup.test.js.map +1 -0
- package/dist/tests/fixtures.d.ts +32 -0
- package/dist/tests/fixtures.d.ts.map +1 -1
- package/dist/tests/fixtures.js +29 -0
- package/dist/tests/fixtures.js.map +1 -1
- package/dist/tests/live/catalox.live.test.js +2 -2
- package/dist/tests/live/catalox.live.test.js.map +1 -1
- package/dist/tests/reconcile-unified.test.js +9 -0
- package/dist/tests/reconcile-unified.test.js.map +1 -1
- package/dist/tests/seeds.test.js +4 -3
- package/dist/tests/seeds.test.js.map +1 -1
- package/dist/tests/source-aware.test.js +2 -2
- package/dist/tests/source-aware.test.js.map +1 -1
- package/dist/tests/unified-inventory.test.js +9 -3
- package/dist/tests/unified-inventory.test.js.map +1 -1
- package/dist/tests/v2-fixtures.d.ts +4 -0
- package/dist/tests/v2-fixtures.d.ts.map +1 -0
- package/dist/tests/v2-fixtures.js +82 -0
- package/dist/tests/v2-fixtures.js.map +1 -0
- package/dist/tests/write-descriptor.test.d.ts +2 -0
- package/dist/tests/write-descriptor.test.d.ts.map +1 -0
- package/dist/tests/write-descriptor.test.js +75 -0
- package/dist/tests/write-descriptor.test.js.map +1 -0
- package/dist/types/graph-runs.d.ts +65 -0
- package/dist/types/graph-runs.d.ts.map +1 -0
- package/dist/types/graph-runs.js +3 -0
- package/dist/types/graph-runs.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/write-descriptor.d.ts +108 -0
- package/dist/types/write-descriptor.d.ts.map +1 -0
- package/dist/types/write-descriptor.js +2 -0
- package/dist/types/write-descriptor.js.map +1 -0
- package/dist/validation/canonical-metadata-validation.d.ts +2 -4
- package/dist/validation/canonical-metadata-validation.d.ts.map +1 -1
- package/dist/validation/canonical-metadata-validation.js +3 -8
- package/dist/validation/canonical-metadata-validation.js.map +1 -1
- package/dist/validation/write-descriptor-validation.d.ts +11 -0
- package/dist/validation/write-descriptor-validation.d.ts.map +1 -0
- package/dist/validation/write-descriptor-validation.js +120 -0
- package/dist/validation/write-descriptor-validation.js.map +1 -0
- package/docs/METADATA-RELEASE-CHECKLIST.md +44 -0
- package/package.json +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { resolveMemorixCollectionName, } from "../collections/collection-name.js";
|
|
2
|
+
import { DescriptorValidationError } from "./errors.js";
|
|
3
|
+
import { validateMemorixEntityDescriptor } from "./descriptor-validation.js";
|
|
4
|
+
const CONTENT_OBJECT_TYPE = "memorix-content-object";
|
|
5
|
+
export function validateMemorixWriteDescriptorShape(raw) {
|
|
6
|
+
const descriptor = raw;
|
|
7
|
+
if (!descriptor.id?.trim()) {
|
|
8
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", "write descriptor id is required");
|
|
9
|
+
}
|
|
10
|
+
if (!descriptor.entity?.trim()) {
|
|
11
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", "write descriptor entity is required");
|
|
12
|
+
}
|
|
13
|
+
if (!descriptor.target?.contentType?.trim()) {
|
|
14
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", "write descriptor target.contentType is required");
|
|
15
|
+
}
|
|
16
|
+
if (!descriptor.operations?.allowed?.length) {
|
|
17
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", "write descriptor operations.allowed must be non-empty");
|
|
18
|
+
}
|
|
19
|
+
if (!descriptor.operations.allowed.includes(descriptor.operations.default)) {
|
|
20
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", "write descriptor operations.default must be in operations.allowed");
|
|
21
|
+
}
|
|
22
|
+
if (!descriptor.fields || Object.keys(descriptor.fields).length === 0) {
|
|
23
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", "write descriptor must declare at least one field");
|
|
24
|
+
}
|
|
25
|
+
for (const [fieldKey, field] of Object.entries(descriptor.fields)) {
|
|
26
|
+
if (!field.target?.path?.trim()) {
|
|
27
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", `write descriptor field "${fieldKey}" requires target.path`);
|
|
28
|
+
}
|
|
29
|
+
if (field.content?.enabled && field.content.objectType !== CONTENT_OBJECT_TYPE) {
|
|
30
|
+
throw new DescriptorValidationError("INVALID_WRITE_DESCRIPTOR", `write descriptor field "${fieldKey}" content.objectType must be "${CONTENT_OBJECT_TYPE}"`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { ...descriptor, id: descriptor.id.trim(), entity: descriptor.entity.trim() };
|
|
34
|
+
}
|
|
35
|
+
function entityCollections(entity, env) {
|
|
36
|
+
return Object.keys(entity.contentTypes).map((key) => resolveMemorixCollectionName(entity, key, env));
|
|
37
|
+
}
|
|
38
|
+
export function validateWriteDescriptorAgainstSnapshot(snapshot, descriptor, env = process.env) {
|
|
39
|
+
const errors = [];
|
|
40
|
+
const entityRaw = snapshot.entityDescriptors[descriptor.entity];
|
|
41
|
+
if (!entityRaw) {
|
|
42
|
+
errors.push({
|
|
43
|
+
code: "UNKNOWN_OBJECT_TYPE",
|
|
44
|
+
message: `Write descriptor entity "${descriptor.entity}" not found in object type catalog`,
|
|
45
|
+
path: "entity",
|
|
46
|
+
});
|
|
47
|
+
return errors;
|
|
48
|
+
}
|
|
49
|
+
let entity;
|
|
50
|
+
try {
|
|
51
|
+
entity = validateMemorixEntityDescriptor(entityRaw);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
errors.push({
|
|
55
|
+
code: "INVALID_OBJECT_TYPE",
|
|
56
|
+
message: err instanceof Error ? err.message : String(err),
|
|
57
|
+
path: "entity",
|
|
58
|
+
});
|
|
59
|
+
return errors;
|
|
60
|
+
}
|
|
61
|
+
const entitySource = {
|
|
62
|
+
entityName: entity.entityName,
|
|
63
|
+
collectionPrefix: entity.collectionPrefix,
|
|
64
|
+
target: entity.target,
|
|
65
|
+
contentTypes: Object.fromEntries(Object.entries(entity.contentTypes).map(([key, ct]) => [
|
|
66
|
+
key,
|
|
67
|
+
{ postfix: ct.postfix, collection: ct.collection },
|
|
68
|
+
])),
|
|
69
|
+
};
|
|
70
|
+
if (!entity.contentTypes[descriptor.target.contentType]) {
|
|
71
|
+
errors.push({
|
|
72
|
+
code: "UNKNOWN_CONTENT_TYPE",
|
|
73
|
+
message: `Write descriptor target.contentType "${descriptor.target.contentType}" is not declared on object type "${descriptor.entity}"`,
|
|
74
|
+
path: "target.contentType",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const collections = entityCollections(entitySource, env);
|
|
78
|
+
const resolvedCollection = entity.contentTypes[descriptor.target.contentType]
|
|
79
|
+
? resolveMemorixCollectionName(entitySource, descriptor.target.contentType, env)
|
|
80
|
+
: undefined;
|
|
81
|
+
if (descriptor.target.targetCollection) {
|
|
82
|
+
if (!collections.includes(descriptor.target.targetCollection)) {
|
|
83
|
+
errors.push({
|
|
84
|
+
code: "UNKNOWN_TARGET_COLLECTION",
|
|
85
|
+
message: `targetCollection "${descriptor.target.targetCollection}" is not declared on object type "${descriptor.entity}"`,
|
|
86
|
+
path: "target.targetCollection",
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (descriptor.target.targetCollectionCandidates?.length) {
|
|
91
|
+
for (const candidate of descriptor.target.targetCollectionCandidates) {
|
|
92
|
+
if (!collections.includes(candidate)) {
|
|
93
|
+
errors.push({
|
|
94
|
+
code: "UNKNOWN_TARGET_COLLECTION",
|
|
95
|
+
message: `targetCollectionCandidates entry "${candidate}" is not declared on object type "${descriptor.entity}"`,
|
|
96
|
+
path: "target.targetCollectionCandidates",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (resolvedCollection &&
|
|
102
|
+
descriptor.target.targetCollection &&
|
|
103
|
+
descriptor.target.targetCollection !== resolvedCollection) {
|
|
104
|
+
errors.push({
|
|
105
|
+
code: "TARGET_COLLECTION_MISMATCH",
|
|
106
|
+
message: `targetCollection "${descriptor.target.targetCollection}" does not match resolved collection "${resolvedCollection}" for content type "${descriptor.target.contentType}"`,
|
|
107
|
+
path: "target.targetCollection",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return errors;
|
|
111
|
+
}
|
|
112
|
+
export function validateMemorixWriteDescriptor(raw, snapshot, env = process.env) {
|
|
113
|
+
const descriptor = validateMemorixWriteDescriptorShape(raw);
|
|
114
|
+
const snapshotErrors = validateWriteDescriptorAgainstSnapshot(snapshot, descriptor, env);
|
|
115
|
+
if (snapshotErrors.length > 0) {
|
|
116
|
+
throw new DescriptorValidationError(snapshotErrors[0].code, snapshotErrors.map((e) => e.message).join("; "));
|
|
117
|
+
}
|
|
118
|
+
return descriptor;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=write-descriptor-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-descriptor-validation.js","sourceRoot":"","sources":["../../src/validation/write-descriptor-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Memorix metadata release checklist (v2 canonical)
|
|
2
|
+
|
|
3
|
+
After deploying `@x12i/memorix-descriptors` with v2-only runtime loading:
|
|
4
|
+
|
|
5
|
+
1. **Inspect baseline**
|
|
6
|
+
```bash
|
|
7
|
+
npx tsx scripts/memorix-metadata/inspect.ts
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
2. **Plan canonical reset** (from `CANONICAL_OBJECT_TYPE_SPECS`)
|
|
11
|
+
```bash
|
|
12
|
+
npx tsx scripts/memorix-metadata/plan.ts
|
|
13
|
+
npx tsx scripts/memorix-metadata/validate-plan.ts
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
3. **Apply** to Catalox (`memorix-object-type-descriptors`, lists, items)
|
|
17
|
+
```bash
|
|
18
|
+
npx tsx scripts/memorix-metadata/apply.ts
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
4. **Verify** — canonical `memorix-object-type-descriptors` must be populated; legacy catalogs must be absent
|
|
22
|
+
|
|
23
|
+
See also: [../../docs/MIGRATION-V2-CATALOG.md](../../docs/MIGRATION-V2-CATALOG.md)
|
|
24
|
+
|
|
25
|
+
Legacy catalog `memorix-entity-descriptors` is **not read** at runtime and must be deleted during migration.
|
|
26
|
+
```bash
|
|
27
|
+
npx tsx scripts/memorix-metadata/verify.ts
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
5. **Seed** (optional programmatic apply)
|
|
31
|
+
```bash
|
|
32
|
+
# Uses createCanonicalSeedReadJson() from default-seed-spec
|
|
33
|
+
npm run catalox:seed:memorix-retrieval:apply
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
6. **Validate**
|
|
37
|
+
```bash
|
|
38
|
+
npm test
|
|
39
|
+
npm run test:live # with MONGO_URI + FIRESTORE_LIVE_TESTS=1
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
7. **Explorer** — reload unified inventory; Catalox-first rows should match declared object types.
|
|
43
|
+
|
|
44
|
+
Legacy catalog `memorix-entity-descriptors` is **not read** at runtime. Canonical validation fails if legacy catalog items remain.
|