@x12i/memorix-descriptors 1.2.0 → 1.3.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/admin/create-admin.d.ts +16 -0
- package/dist/admin/create-admin.d.ts.map +1 -1
- package/dist/admin/create-admin.js +16 -0
- package/dist/admin/create-admin.js.map +1 -1
- package/dist/catalog/ensure-catalogs.d.ts.map +1 -1
- package/dist/catalog/ensure-catalogs.js +8 -2
- package/dist/catalog/ensure-catalogs.js.map +1 -1
- package/dist/catalog/ids.d.ts +3 -0
- package/dist/catalog/ids.d.ts.map +1 -1
- package/dist/catalog/ids.js +5 -0
- package/dist/catalog/ids.js.map +1 -1
- package/dist/catalox/client.d.ts +1 -0
- package/dist/catalox/client.d.ts.map +1 -1
- package/dist/catalox/client.js +2 -1
- package/dist/catalox/client.js.map +1 -1
- package/dist/cli/index.js +94 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/collections/parse.d.ts +13 -0
- package/dist/collections/parse.d.ts.map +1 -0
- package/dist/collections/parse.js +16 -0
- package/dist/collections/parse.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/integrity/graph.d.ts.map +1 -1
- package/dist/integrity/graph.js +15 -2
- package/dist/integrity/graph.js.map +1 -1
- package/dist/integrity/validate.d.ts.map +1 -1
- package/dist/integrity/validate.js +13 -0
- package/dist/integrity/validate.js.map +1 -1
- package/dist/mutations/common.d.ts.map +1 -1
- package/dist/mutations/common.js +8 -2
- package/dist/mutations/common.js.map +1 -1
- package/dist/mutations/execute.d.ts.map +1 -1
- package/dist/mutations/execute.js +8 -0
- package/dist/mutations/execute.js.map +1 -1
- package/dist/mutations/inventory-policy.d.ts +21 -0
- package/dist/mutations/inventory-policy.d.ts.map +1 -0
- package/dist/mutations/inventory-policy.js +101 -0
- package/dist/mutations/inventory-policy.js.map +1 -0
- package/dist/mutations/list.d.ts.map +1 -1
- package/dist/mutations/list.js +16 -0
- package/dist/mutations/list.js.map +1 -1
- package/dist/mutations/slice.d.ts +20 -0
- package/dist/mutations/slice.d.ts.map +1 -0
- package/dist/mutations/slice.js +187 -0
- package/dist/mutations/slice.js.map +1 -0
- package/dist/reconcile/drafts.d.ts +33 -0
- package/dist/reconcile/drafts.d.ts.map +1 -0
- package/dist/reconcile/drafts.js +165 -0
- package/dist/reconcile/drafts.js.map +1 -0
- package/dist/seeds/index.d.ts.map +1 -1
- package/dist/seeds/index.js +48 -2
- package/dist/seeds/index.js.map +1 -1
- package/dist/store/snapshot.d.ts.map +1 -1
- package/dist/store/snapshot.js +16 -1
- package/dist/store/snapshot.js.map +1 -1
- package/dist/tests/fixtures.d.ts.map +1 -1
- package/dist/tests/fixtures.js +2 -0
- package/dist/tests/fixtures.js.map +1 -1
- package/dist/tests/reconcile-drafts.test.d.ts +2 -0
- package/dist/tests/reconcile-drafts.test.d.ts.map +1 -0
- package/dist/tests/reconcile-drafts.test.js +69 -0
- package/dist/tests/reconcile-drafts.test.js.map +1 -0
- package/dist/tests/retrieval-free-subpaths.test.d.ts +2 -0
- package/dist/tests/retrieval-free-subpaths.test.d.ts.map +1 -0
- package/dist/tests/retrieval-free-subpaths.test.js +23 -0
- package/dist/tests/retrieval-free-subpaths.test.js.map +1 -0
- package/dist/tests/seeds.test.js +1 -0
- package/dist/tests/seeds.test.js.map +1 -1
- package/dist/tests/slice-inventory.test.d.ts +2 -0
- package/dist/tests/slice-inventory.test.d.ts.map +1 -0
- package/dist/tests/slice-inventory.test.js +104 -0
- package/dist/tests/slice-inventory.test.js.map +1 -0
- package/dist/types/index.d.ts +77 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/validation/descriptor-validation.d.ts +2 -4
- package/dist/validation/descriptor-validation.d.ts.map +1 -1
- package/dist/validation/descriptor-validation.js +7 -13
- package/dist/validation/descriptor-validation.js.map +1 -1
- package/dist/validation/errors.d.ts +5 -0
- package/dist/validation/errors.d.ts.map +1 -0
- package/dist/validation/errors.js +9 -0
- package/dist/validation/errors.js.map +1 -0
- package/dist/validation/inventory-policy-validation.d.ts +7 -0
- package/dist/validation/inventory-policy-validation.d.ts.map +1 -0
- package/dist/validation/inventory-policy-validation.js +57 -0
- package/dist/validation/inventory-policy-validation.js.map +1 -0
- package/dist/validation/list-pagination.d.ts +6 -0
- package/dist/validation/list-pagination.d.ts.map +1 -0
- package/dist/validation/list-pagination.js +7 -0
- package/dist/validation/list-pagination.js.map +1 -0
- package/dist/validation/slice-shape-validation.d.ts +4 -0
- package/dist/validation/slice-shape-validation.d.ts.map +1 -0
- package/dist/validation/slice-shape-validation.js +94 -0
- package/dist/validation/slice-shape-validation.js.map +1 -0
- package/dist/validation/slice-validation.d.ts +6 -0
- package/dist/validation/slice-validation.d.ts.map +1 -0
- package/dist/validation/slice-validation.js +161 -0
- package/dist/validation/slice-validation.js.map +1 -0
- package/package.json +25 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-pagination.d.ts","sourceRoot":"","sources":["../../src/validation/list-pagination.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,oBAAoB,GAAG,SAAS,GAC3C,IAAI,CAON"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DescriptorValidationError } from "./errors.js";
|
|
2
|
+
export function validateListPagination(pagination) {
|
|
3
|
+
if (!pagination?.defaultLimit || !pagination?.maxLimit) {
|
|
4
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "List descriptor requires pagination limits");
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=list-pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-pagination.js","sourceRoot":"","sources":["../../src/validation/list-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAOxD,MAAM,UAAU,sBAAsB,CACpC,UAA4C;IAE5C,IAAI,CAAC,UAAU,EAAE,YAAY,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;QACvD,MAAM,IAAI,yBAAyB,CACjC,oBAAoB,EACpB,4CAA4C,CAC7C,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MemorixSliceDescriptor } from "../types/index.js";
|
|
2
|
+
export declare function isMemorixSliceDescriptor(raw: Record<string, unknown>): raw is MemorixSliceDescriptor;
|
|
3
|
+
export declare function validateMemorixSliceDescriptorShape(raw: Record<string, unknown>): MemorixSliceDescriptor;
|
|
4
|
+
//# sourceMappingURL=slice-shape-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice-shape-validation.d.ts","sourceRoot":"","sources":["../../src/validation/slice-shape-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,mBAAmB,CAAC;AAqB3B,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,GAAG,IAAI,sBAAsB,CAE/B;AAED,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,sBAAsB,CA8ExB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { DescriptorValidationError } from "./errors.js";
|
|
2
|
+
import { validateListPagination } from "./list-pagination.js";
|
|
3
|
+
const FILTER_OPERATORS = new Set([
|
|
4
|
+
"equals",
|
|
5
|
+
"notEquals",
|
|
6
|
+
"in",
|
|
7
|
+
"notIn",
|
|
8
|
+
"exists",
|
|
9
|
+
"notExists",
|
|
10
|
+
"contains",
|
|
11
|
+
"startsWith",
|
|
12
|
+
"endsWith",
|
|
13
|
+
"gt",
|
|
14
|
+
"gte",
|
|
15
|
+
"lt",
|
|
16
|
+
"lte",
|
|
17
|
+
"between",
|
|
18
|
+
]);
|
|
19
|
+
export function isMemorixSliceDescriptor(raw) {
|
|
20
|
+
return raw.kind === "slice";
|
|
21
|
+
}
|
|
22
|
+
export function validateMemorixSliceDescriptorShape(raw) {
|
|
23
|
+
const d = raw;
|
|
24
|
+
if (!d.id || d.kind !== "slice") {
|
|
25
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", 'Slice descriptor requires id and kind: "slice"');
|
|
26
|
+
}
|
|
27
|
+
if (!d.title?.trim()) {
|
|
28
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice descriptor requires title");
|
|
29
|
+
}
|
|
30
|
+
if (!d.entityName?.trim()) {
|
|
31
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice descriptor requires entityName");
|
|
32
|
+
}
|
|
33
|
+
if (!d.target || !["entity", "event", "knowledge"].includes(d.target)) {
|
|
34
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", 'Slice descriptor target must be "entity", "event", or "knowledge"');
|
|
35
|
+
}
|
|
36
|
+
if (!d.contentType?.trim()) {
|
|
37
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice descriptor requires contentType");
|
|
38
|
+
}
|
|
39
|
+
if (!Array.isArray(d.fields) || d.fields.length === 0) {
|
|
40
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice descriptor requires non-empty fields");
|
|
41
|
+
}
|
|
42
|
+
const defaultPageSize = d.ui?.defaultPageSize ?? 50;
|
|
43
|
+
const pagination = d.pagination ?? {
|
|
44
|
+
enabled: true,
|
|
45
|
+
defaultLimit: defaultPageSize,
|
|
46
|
+
maxLimit: Math.max(defaultPageSize, 200),
|
|
47
|
+
};
|
|
48
|
+
validateListPagination(pagination);
|
|
49
|
+
if (d.filter) {
|
|
50
|
+
validateMemorixSliceFilterShape(d.filter);
|
|
51
|
+
}
|
|
52
|
+
if (d.sort) {
|
|
53
|
+
if (!Array.isArray(d.sort)) {
|
|
54
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice sort must be an array");
|
|
55
|
+
}
|
|
56
|
+
for (const entry of d.sort) {
|
|
57
|
+
if (!entry.path?.trim() || !["asc", "desc"].includes(entry.direction)) {
|
|
58
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice sort entries require path and direction asc|desc");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const rel of d.includeRelations ?? []) {
|
|
63
|
+
if (!rel.relationKey?.trim()) {
|
|
64
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice includeRelations entries require relationKey");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { ...d, pagination };
|
|
68
|
+
}
|
|
69
|
+
function validateMemorixSliceFilterShape(filter) {
|
|
70
|
+
if (filter.mode === "advancedMongo") {
|
|
71
|
+
if (!filter.query || typeof filter.query !== "object" || Array.isArray(filter.query)) {
|
|
72
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Advanced slice filter requires query object");
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (filter.mode !== "basic") {
|
|
77
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", 'Slice filter mode must be "basic" or "advancedMongo"');
|
|
78
|
+
}
|
|
79
|
+
if (!Array.isArray(filter.rules)) {
|
|
80
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Basic slice filter requires rules array");
|
|
81
|
+
}
|
|
82
|
+
if (filter.combinator && filter.combinator !== "and" && filter.combinator !== "or") {
|
|
83
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", 'Slice filter combinator must be "and" or "or"');
|
|
84
|
+
}
|
|
85
|
+
for (const rule of filter.rules) {
|
|
86
|
+
if (!rule.path?.trim()) {
|
|
87
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", "Slice filter rule requires path");
|
|
88
|
+
}
|
|
89
|
+
if (!FILTER_OPERATORS.has(rule.operator)) {
|
|
90
|
+
throw new DescriptorValidationError("INVALID_DESCRIPTOR", `Unknown slice filter operator "${String(rule.operator)}"`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=slice-shape-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice-shape-validation.js","sourceRoot":"","sources":["../../src/validation/slice-shape-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DescriptorSnapshot, MemorixSliceDescriptor, SliceValidationIssue } from "../types/index.js";
|
|
2
|
+
import { isMemorixSliceDescriptor, validateMemorixSliceDescriptorShape } from "./slice-shape-validation.js";
|
|
3
|
+
export { isMemorixSliceDescriptor, validateMemorixSliceDescriptorShape };
|
|
4
|
+
export declare function validateSliceDescriptorAgainstSnapshot(slice: MemorixSliceDescriptor, snapshot: DescriptorSnapshot, env?: NodeJS.ProcessEnv): SliceValidationIssue[];
|
|
5
|
+
export declare function buildSlicePreview(slice: MemorixSliceDescriptor, snapshot: DescriptorSnapshot, env?: NodeJS.ProcessEnv): Record<string, unknown>;
|
|
6
|
+
//# sourceMappingURL=slice-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice-validation.d.ts","sourceRoot":"","sources":["../../src/validation/slice-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,wBAAwB,EACxB,mCAAmC,EACpC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,wBAAwB,EAAE,mCAAmC,EAAE,CAAC;AA2BzE,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,EAAE,CAwHxB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { resolveCollectionForEntity } from "../collections/resolve.js";
|
|
2
|
+
import { isMemorixSliceDescriptor, validateMemorixSliceDescriptorShape, } from "./slice-shape-validation.js";
|
|
3
|
+
export { isMemorixSliceDescriptor, validateMemorixSliceDescriptorShape };
|
|
4
|
+
function propertyPathsForEntity(entity) {
|
|
5
|
+
const paths = new Set();
|
|
6
|
+
for (const [propKey, prop] of Object.entries(entity.properties)) {
|
|
7
|
+
paths.add(propKey);
|
|
8
|
+
if (prop.source?.path) {
|
|
9
|
+
paths.add(prop.source.path);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return paths;
|
|
13
|
+
}
|
|
14
|
+
function resolveSliceCollection(entity, contentTypeKey, env) {
|
|
15
|
+
const ct = entity.contentTypes[contentTypeKey];
|
|
16
|
+
if (!ct)
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
return resolveCollectionForEntity(entity, contentTypeKey, env);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return ct.collection ?? `${entity.collectionPrefix}-${ct.postfix}`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function validateSliceDescriptorAgainstSnapshot(slice, snapshot, env = process.env) {
|
|
26
|
+
const issues = [];
|
|
27
|
+
const entityRaw = snapshot.entityDescriptors[slice.entityName];
|
|
28
|
+
if (!entityRaw) {
|
|
29
|
+
issues.push({
|
|
30
|
+
code: "UNKNOWN_ENTITY",
|
|
31
|
+
message: `Slice references unknown entity "${slice.entityName}"`,
|
|
32
|
+
path: slice.id,
|
|
33
|
+
});
|
|
34
|
+
return issues;
|
|
35
|
+
}
|
|
36
|
+
let entity;
|
|
37
|
+
try {
|
|
38
|
+
entity = entityRaw;
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
issues.push({
|
|
42
|
+
code: "INVALID_ENTITY_DESCRIPTOR",
|
|
43
|
+
message: err instanceof Error ? err.message : String(err),
|
|
44
|
+
path: slice.entityName,
|
|
45
|
+
});
|
|
46
|
+
return issues;
|
|
47
|
+
}
|
|
48
|
+
const entityTarget = entity.target ?? "entity";
|
|
49
|
+
if (entityTarget !== slice.target) {
|
|
50
|
+
issues.push({
|
|
51
|
+
code: "TARGET_MISMATCH",
|
|
52
|
+
message: `Slice target "${slice.target}" does not match entity target "${entityTarget}"`,
|
|
53
|
+
path: slice.id,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (!entity.contentTypes[slice.contentType]) {
|
|
57
|
+
issues.push({
|
|
58
|
+
code: "UNKNOWN_CONTENT_TYPE",
|
|
59
|
+
message: `Slice contentType "${slice.contentType}" not declared on entity`,
|
|
60
|
+
path: slice.id,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const collection = resolveSliceCollection(entity, slice.contentType, env);
|
|
65
|
+
if (!collection) {
|
|
66
|
+
issues.push({
|
|
67
|
+
code: "COLLECTION_UNRESOLVED",
|
|
68
|
+
message: `Content type "${slice.contentType}" does not resolve to a collection name`,
|
|
69
|
+
path: slice.id,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const field of slice.fields) {
|
|
74
|
+
const prop = entity.properties[field];
|
|
75
|
+
if (!prop) {
|
|
76
|
+
issues.push({
|
|
77
|
+
code: "UNKNOWN_FIELD",
|
|
78
|
+
message: `Slice field "${field}" is not defined on entity "${slice.entityName}"`,
|
|
79
|
+
path: `${slice.id}/fields/${field}`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else if (!prop.humanReadable) {
|
|
83
|
+
issues.push({
|
|
84
|
+
code: "NON_HUMAN_READABLE_LIST_FIELD",
|
|
85
|
+
message: `Slice field "${field}" must have humanReadable=true`,
|
|
86
|
+
path: `${slice.id}/fields/${field}`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (slice.defaultItemDescriptorId) {
|
|
91
|
+
const itemRaw = snapshot.itemDescriptors[slice.defaultItemDescriptorId];
|
|
92
|
+
if (!itemRaw) {
|
|
93
|
+
issues.push({
|
|
94
|
+
code: "UNKNOWN_ITEM_DESCRIPTOR",
|
|
95
|
+
message: `defaultItemDescriptorId "${slice.defaultItemDescriptorId}" not found`,
|
|
96
|
+
path: slice.id,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else if (itemRaw.entity !== slice.entityName) {
|
|
100
|
+
issues.push({
|
|
101
|
+
code: "ITEM_ENTITY_MISMATCH",
|
|
102
|
+
message: `Item descriptor entity "${String(itemRaw.entity)}" does not match slice entity "${slice.entityName}"`,
|
|
103
|
+
path: slice.id,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
for (const rel of slice.includeRelations ?? []) {
|
|
108
|
+
if (!entity.relations?.[rel.relationKey]) {
|
|
109
|
+
issues.push({
|
|
110
|
+
code: "UNKNOWN_RELATION",
|
|
111
|
+
message: `Slice references unknown relation "${rel.relationKey}"`,
|
|
112
|
+
path: `${slice.id}/includeRelations/${rel.relationKey}`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const knownPaths = propertyPathsForEntity(entity);
|
|
117
|
+
if (slice.filter?.mode === "basic") {
|
|
118
|
+
for (const rule of slice.filter.rules) {
|
|
119
|
+
if (!knownPaths.has(rule.path)) {
|
|
120
|
+
issues.push({
|
|
121
|
+
code: "UNKNOWN_FILTER_PATH",
|
|
122
|
+
message: `Filter path "${rule.path}" is not a known entity field`,
|
|
123
|
+
path: `${slice.id}/filter/rules/${rule.path}`,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
for (const entry of slice.sort ?? []) {
|
|
129
|
+
if (!knownPaths.has(entry.path)) {
|
|
130
|
+
issues.push({
|
|
131
|
+
code: "UNKNOWN_SORT_PATH",
|
|
132
|
+
message: `Sort path "${entry.path}" is not a known entity field`,
|
|
133
|
+
path: `${slice.id}/sort/${entry.path}`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return issues;
|
|
138
|
+
}
|
|
139
|
+
export function buildSlicePreview(slice, snapshot, env = process.env) {
|
|
140
|
+
const entityRaw = snapshot.entityDescriptors[slice.entityName];
|
|
141
|
+
const entity = entityRaw;
|
|
142
|
+
const collection = entity && entity.contentTypes[slice.contentType]
|
|
143
|
+
? resolveSliceCollection(entity, slice.contentType, env)
|
|
144
|
+
: null;
|
|
145
|
+
return {
|
|
146
|
+
sliceId: slice.id,
|
|
147
|
+
title: slice.title,
|
|
148
|
+
entityName: slice.entityName,
|
|
149
|
+
target: slice.target,
|
|
150
|
+
contentType: slice.contentType,
|
|
151
|
+
collection,
|
|
152
|
+
fields: slice.fields,
|
|
153
|
+
filter: slice.filter ?? null,
|
|
154
|
+
sort: slice.sort ?? [],
|
|
155
|
+
defaultItemDescriptorId: slice.defaultItemDescriptorId ?? null,
|
|
156
|
+
includeRelations: slice.includeRelations ?? [],
|
|
157
|
+
pagination: slice.pagination,
|
|
158
|
+
ui: slice.ui ?? null,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=slice-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice-validation.js","sourceRoot":"","sources":["../../src/validation/slice-validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/memorix-descriptors",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Manage Memorix entity, list, and item descriptors in Catalox",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -9,6 +9,26 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./types": {
|
|
14
|
+
"types": "./dist/types/index.d.ts",
|
|
15
|
+
"import": "./dist/types/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./catalog": {
|
|
18
|
+
"types": "./dist/catalog/ids.d.ts",
|
|
19
|
+
"import": "./dist/catalog/ids.js"
|
|
20
|
+
},
|
|
21
|
+
"./collections/parse": {
|
|
22
|
+
"types": "./dist/collections/parse.d.ts",
|
|
23
|
+
"import": "./dist/collections/parse.js"
|
|
24
|
+
},
|
|
25
|
+
"./validation/slice-shape": {
|
|
26
|
+
"types": "./dist/validation/slice-shape-validation.d.ts",
|
|
27
|
+
"import": "./dist/validation/slice-shape-validation.js"
|
|
28
|
+
},
|
|
29
|
+
"./validation/inventory-policy": {
|
|
30
|
+
"types": "./dist/validation/inventory-policy-validation.d.ts",
|
|
31
|
+
"import": "./dist/validation/inventory-policy-validation.js"
|
|
12
32
|
}
|
|
13
33
|
},
|
|
14
34
|
"bin": {
|
|
@@ -19,6 +39,7 @@
|
|
|
19
39
|
"docs"
|
|
20
40
|
],
|
|
21
41
|
"scripts": {
|
|
42
|
+
"prebuild": "rm -rf dist",
|
|
22
43
|
"build": "tsc",
|
|
23
44
|
"test": "vitest run --exclude 'src/tests/live/**'",
|
|
24
45
|
"test:live": "vitest run src/tests/live",
|
|
@@ -29,6 +50,9 @@
|
|
|
29
50
|
"engines": {
|
|
30
51
|
"node": ">=18.0.0"
|
|
31
52
|
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"@x12i/memorix-retrieval": ">=1.6.0"
|
|
55
|
+
},
|
|
32
56
|
"dependencies": {
|
|
33
57
|
"@x12i/catalox": ">=5.0.0",
|
|
34
58
|
"mongodb": "^6.21.0"
|
|
@@ -36,7 +60,6 @@
|
|
|
36
60
|
"devDependencies": {
|
|
37
61
|
"@types/node": "^20.14.0",
|
|
38
62
|
"@x12i/catalox": "^5.0.0",
|
|
39
|
-
"@x12i/memorix-retrieval": "file:../memorix-retrieval",
|
|
40
63
|
"@x12i/xronox": "^3.9.0",
|
|
41
64
|
"dotenv": "^16.4.5",
|
|
42
65
|
"typescript": "^5.6.0",
|