@x12i/memorix-format 2.3.2 → 3.0.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 +15 -20
- package/dist/associated.d.ts +2 -2
- package/dist/associated.d.ts.map +1 -1
- package/dist/associated.js +1 -1
- package/dist/base/classify.d.ts +6 -0
- package/dist/base/classify.d.ts.map +1 -0
- package/dist/base/classify.js +18 -0
- package/dist/base/classify.js.map +1 -0
- package/dist/base/compat/legacy-roots.d.ts +24 -0
- package/dist/base/compat/legacy-roots.d.ts.map +1 -0
- package/dist/base/compat/legacy-roots.js +50 -0
- package/dist/base/compat/legacy-roots.js.map +1 -0
- package/dist/base/concept.d.ts +21 -0
- package/dist/base/concept.d.ts.map +1 -0
- package/dist/base/concept.js +87 -0
- package/dist/base/concept.js.map +1 -0
- package/dist/base/constants.d.ts +18 -0
- package/dist/base/constants.d.ts.map +1 -0
- package/dist/base/constants.js +21 -0
- package/dist/base/constants.js.map +1 -0
- package/dist/base/index.d.ts +13 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +11 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/inspect.d.ts +3 -0
- package/dist/base/inspect.d.ts.map +1 -0
- package/dist/base/inspect.js +41 -0
- package/dist/base/inspect.js.map +1 -0
- package/dist/base/load-meta.d.ts +61 -0
- package/dist/base/load-meta.d.ts.map +1 -0
- package/dist/base/load-meta.js +45 -0
- package/dist/base/load-meta.js.map +1 -0
- package/dist/base/meta.d.ts +8 -0
- package/dist/base/meta.d.ts.map +1 -0
- package/dist/base/meta.js +79 -0
- package/dist/base/meta.js.map +1 -0
- package/dist/base/types.d.ts +112 -0
- package/dist/base/types.d.ts.map +1 -0
- package/dist/base/types.js +2 -0
- package/dist/base/types.js.map +1 -0
- package/dist/base/utils.d.ts +4 -0
- package/dist/base/utils.d.ts.map +1 -0
- package/dist/base/utils.js +15 -0
- package/dist/base/utils.js.map +1 -0
- package/dist/base/validate.d.ts +13 -0
- package/dist/base/validate.d.ts.map +1 -0
- package/dist/base/validate.js +253 -0
- package/dist/base/validate.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/load-meta.d.ts +1 -1
- package/dist/load-meta.d.ts.map +1 -1
- package/dist/migrate.d.ts +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +1 -1
- package/dist/migrate.js.map +1 -1
- package/dist/profiles.d.ts +1 -1
- package/dist/profiles.d.ts.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +1 -1
- package/dist/validate.js.map +1 -1
- package/docs/association-format.md +1 -1
- package/docs/memorix-format.md +1 -1
- package/docs/memorix-record-v2.md +1 -1
- package/docs/migrate-present-to-v2.md +1 -1
- package/meta/envelope.json +104 -0
- package/package.json +1 -4
- package/dist/base-reexport.d.ts +0 -8
- package/dist/base-reexport.d.ts.map +0 -1
- package/dist/base-reexport.js +0 -8
- package/dist/base-reexport.js.map +0 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { OPEN_BUCKET_KINDS } from "./constants.js";
|
|
2
|
+
import { isPlainObject, stringifyId } from "./utils.js";
|
|
3
|
+
function issue(path, code, message, severity = "error") {
|
|
4
|
+
return { path, code, message, severity };
|
|
5
|
+
}
|
|
6
|
+
function isOpenBucketKind(v) {
|
|
7
|
+
return typeof v === "string" && OPEN_BUCKET_KINDS.includes(v);
|
|
8
|
+
}
|
|
9
|
+
/** Parse and validate a ContentTypeMeta document. */
|
|
10
|
+
export function parseContentTypeMeta(input) {
|
|
11
|
+
const issues = [];
|
|
12
|
+
if (!isPlainObject(input)) {
|
|
13
|
+
return { ok: false, issues: [issue("$", "META-parse", "ContentTypeMeta must be a plain object")] };
|
|
14
|
+
}
|
|
15
|
+
const objectType = stringifyId(input.objectType);
|
|
16
|
+
const contentType = stringifyId(input.contentType);
|
|
17
|
+
if (!objectType) {
|
|
18
|
+
issues.push(issue("objectType", "META-objectType", "objectType must be a non-empty string"));
|
|
19
|
+
}
|
|
20
|
+
if (!contentType) {
|
|
21
|
+
issues.push(issue("contentType", "META-contentType", "contentType must be a non-empty string"));
|
|
22
|
+
}
|
|
23
|
+
const openBuckets = {};
|
|
24
|
+
if (input.openBuckets !== undefined) {
|
|
25
|
+
if (!isPlainObject(input.openBuckets)) {
|
|
26
|
+
issues.push(issue("openBuckets", "META-openBuckets", "openBuckets must be a plain object"));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
for (const [name, raw] of Object.entries(input.openBuckets)) {
|
|
30
|
+
if (!isPlainObject(raw)) {
|
|
31
|
+
issues.push(issue(`openBuckets.${name}`, "META-openBucket", "open bucket decl must be an object"));
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!isOpenBucketKind(raw.kind)) {
|
|
35
|
+
issues.push(issue(`openBuckets.${name}.kind`, "META-kind", `kind must be one of: ${OPEN_BUCKET_KINDS.join(", ")}`));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (raw.shape !== "object" && raw.shape !== "array-of-objects") {
|
|
39
|
+
issues.push(issue(`openBuckets.${name}.shape`, "META-shape", 'shape must be "object" or "array-of-objects"'));
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
openBuckets[name] = {
|
|
43
|
+
kind: raw.kind,
|
|
44
|
+
shape: raw.shape,
|
|
45
|
+
required: raw.required === true,
|
|
46
|
+
title: stringifyId(raw.title) ?? undefined,
|
|
47
|
+
description: stringifyId(raw.description) ?? undefined,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
let policy;
|
|
53
|
+
if (isPlainObject(input.policy)) {
|
|
54
|
+
const unknownOpenBuckets = input.policy.unknownOpenBuckets === "reject" ||
|
|
55
|
+
input.policy.unknownOpenBuckets === "allow" ||
|
|
56
|
+
input.policy.unknownOpenBuckets === "warn"
|
|
57
|
+
? input.policy.unknownOpenBuckets
|
|
58
|
+
: undefined;
|
|
59
|
+
const emptyBuckets = input.policy.emptyBuckets === "reject" || input.policy.emptyBuckets === "omit-required"
|
|
60
|
+
? input.policy.emptyBuckets
|
|
61
|
+
: undefined;
|
|
62
|
+
policy = { unknownOpenBuckets, emptyBuckets };
|
|
63
|
+
}
|
|
64
|
+
if (issues.some((i) => i.severity === "error")) {
|
|
65
|
+
return { ok: false, issues };
|
|
66
|
+
}
|
|
67
|
+
const meta = {
|
|
68
|
+
objectType: objectType,
|
|
69
|
+
contentType: contentType,
|
|
70
|
+
collectionPostfix: stringifyId(input.collectionPostfix) ?? undefined,
|
|
71
|
+
openBuckets: Object.keys(openBuckets).length ? openBuckets : undefined,
|
|
72
|
+
policy,
|
|
73
|
+
read: isPlainObject(input.read) && input.read.missingOptionalIsNa === true
|
|
74
|
+
? { missingOptionalIsNa: true }
|
|
75
|
+
: undefined,
|
|
76
|
+
};
|
|
77
|
+
return { ok: true, meta, issues };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/base/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/** Plain JSON object (non-array). */
|
|
2
|
+
export type JsonObject = Record<string, unknown>;
|
|
3
|
+
/** Root category. `system` means underscore / machine-only roots (`_*`). */
|
|
4
|
+
export type RootCategory = "identity" | "core" | "system" | "open";
|
|
5
|
+
export type MemorixRecordState = "active" | "archived" | "superseded";
|
|
6
|
+
export declare const MEMORIX_RECORD_STATES: readonly ["active", "archived", "superseded"];
|
|
7
|
+
/**
|
|
8
|
+
* External machine join key under `concept._extIdentifier`.
|
|
9
|
+
* `key` is the deterministic join formerly called `identifierKey`.
|
|
10
|
+
*/
|
|
11
|
+
export type MemorixExtIdentifier = {
|
|
12
|
+
kind: string;
|
|
13
|
+
key: string;
|
|
14
|
+
[key: string]: string;
|
|
15
|
+
};
|
|
16
|
+
/** @deprecated Use MemorixExtIdentifier */
|
|
17
|
+
export type MemorixConceptIdentifier = MemorixExtIdentifier;
|
|
18
|
+
export type MemorixConcept = {
|
|
19
|
+
_extIdentifier: MemorixExtIdentifier;
|
|
20
|
+
title: string;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
};
|
|
23
|
+
export type MemorixLifecycleEvent = {
|
|
24
|
+
process: string;
|
|
25
|
+
processedAt: string;
|
|
26
|
+
};
|
|
27
|
+
export type MemorixSystemBlock = {
|
|
28
|
+
state?: MemorixRecordState;
|
|
29
|
+
lifecycle?: MemorixLifecycleEvent[];
|
|
30
|
+
provenance?: JsonObject;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Fixed-skeleton base record.
|
|
35
|
+
* Open buckets are any root key outside identity/core/system — names not reserved.
|
|
36
|
+
*/
|
|
37
|
+
export type MemorixBaseRecord = {
|
|
38
|
+
_id?: unknown;
|
|
39
|
+
recordId: string;
|
|
40
|
+
concept: MemorixConcept;
|
|
41
|
+
data: JsonObject;
|
|
42
|
+
_system?: MemorixSystemBlock;
|
|
43
|
+
};
|
|
44
|
+
export type OpenBucketKind = "rollup" | "sourced" | "interpretive" | "linked-payloads" | "custom";
|
|
45
|
+
export type OpenBucketDecl = {
|
|
46
|
+
kind: OpenBucketKind;
|
|
47
|
+
shape: "object" | "array-of-objects";
|
|
48
|
+
required?: boolean;
|
|
49
|
+
title?: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
};
|
|
52
|
+
export type ContentTypeMeta = {
|
|
53
|
+
objectType: string;
|
|
54
|
+
contentType: string;
|
|
55
|
+
collectionPostfix?: string;
|
|
56
|
+
openBuckets?: Record<string, OpenBucketDecl>;
|
|
57
|
+
system?: {
|
|
58
|
+
allowUnderscoreKeys?: boolean;
|
|
59
|
+
lifecycle?: "optional" | "omit-if-empty";
|
|
60
|
+
};
|
|
61
|
+
policy?: {
|
|
62
|
+
unknownOpenBuckets?: "reject" | "allow" | "warn";
|
|
63
|
+
emptyBuckets?: "reject" | "omit-required";
|
|
64
|
+
};
|
|
65
|
+
write?: {
|
|
66
|
+
fullValidationOn?: Array<"add" | "replace">;
|
|
67
|
+
identityOnlyOps?: Array<"upsert" | "patch" | "delete">;
|
|
68
|
+
};
|
|
69
|
+
read?: {
|
|
70
|
+
missingOptionalIsNa?: true;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
export type ValidationSeverity = "error" | "warning";
|
|
74
|
+
export type ValidationIssue = {
|
|
75
|
+
path: string;
|
|
76
|
+
/** Prefer requirement IDs (ENV-1, ID-1, META-2, …). */
|
|
77
|
+
code: string;
|
|
78
|
+
message: string;
|
|
79
|
+
severity: ValidationSeverity;
|
|
80
|
+
};
|
|
81
|
+
export type ValidateBaseOptions = {
|
|
82
|
+
/** When set, also enforce ContentTypeMeta open-bucket rules. */
|
|
83
|
+
meta?: ContentTypeMeta;
|
|
84
|
+
/** Treat warnings as failures in `ok`. Default false. */
|
|
85
|
+
strict?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* When true, legacy roots (compat list) are warnings instead of ignored by present validator.
|
|
88
|
+
* Prefer the migrator; this is a temporary guard path.
|
|
89
|
+
*/
|
|
90
|
+
allowLegacyEnvelope?: boolean;
|
|
91
|
+
/** When true, reject legacy roots via compat module (writer hard-guard). Default false for present-only validate. */
|
|
92
|
+
rejectLegacyRoots?: boolean;
|
|
93
|
+
};
|
|
94
|
+
export type ValidateBaseResult = {
|
|
95
|
+
ok: boolean;
|
|
96
|
+
issues: ValidationIssue[];
|
|
97
|
+
recordId?: string;
|
|
98
|
+
};
|
|
99
|
+
export type RecordInspection = {
|
|
100
|
+
recordId?: string;
|
|
101
|
+
conceptTitle?: string;
|
|
102
|
+
conceptKind?: string;
|
|
103
|
+
categories: {
|
|
104
|
+
identity: string[];
|
|
105
|
+
core: string[];
|
|
106
|
+
system: string[];
|
|
107
|
+
open: string[];
|
|
108
|
+
};
|
|
109
|
+
/** Present only when inspecting with compat awareness. */
|
|
110
|
+
legacyRoots: string[];
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/base/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAEzD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQzD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function isPlainObject(v) {
|
|
2
|
+
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
3
|
+
}
|
|
4
|
+
export function stringifyId(value) {
|
|
5
|
+
if (value == null)
|
|
6
|
+
return null;
|
|
7
|
+
if (typeof value === "string") {
|
|
8
|
+
const t = value.trim();
|
|
9
|
+
return t || null;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === "number" || typeof value === "boolean")
|
|
12
|
+
return String(value);
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/base/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ValidateBaseOptions, ValidateBaseResult } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate a record against the fixed-skeleton base contract (present tense).
|
|
4
|
+
* Does not special-case any open-bucket product names.
|
|
5
|
+
* Legacy roots are not format law — use rejectLegacyRoots / allowLegacyEnvelope for compat guards.
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateMemorixBaseRecord(input: unknown, options?: ValidateBaseOptions): ValidateBaseResult;
|
|
8
|
+
export declare function validateMemorixBaseRecords(records: unknown[], options?: ValidateBaseOptions): {
|
|
9
|
+
ok: boolean;
|
|
10
|
+
results: ValidateBaseResult[];
|
|
11
|
+
};
|
|
12
|
+
export declare function parseRecordsJson(text: string): unknown[];
|
|
13
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/base/validate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAwPpB;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAqDpB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAAE,EAClB,OAAO,GAAE,mBAAwB,GAChC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAGhD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAuBxD"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { classifyRootKey } from "./classify.js";
|
|
2
|
+
import { MEMORIX_RECORD_STATE_VALUES } from "./constants.js";
|
|
3
|
+
import { collectLegacyRootIssues } from "./compat/legacy-roots.js";
|
|
4
|
+
import { buildExtIdentifierKey, readRecordId } from "./concept.js";
|
|
5
|
+
import { isPlainObject, stringifyId } from "./utils.js";
|
|
6
|
+
function issue(path, code, message, severity = "error") {
|
|
7
|
+
return { path, code, message, severity };
|
|
8
|
+
}
|
|
9
|
+
function validateConcept(concept, issues) {
|
|
10
|
+
if (!isPlainObject(concept)) {
|
|
11
|
+
issues.push(issue("concept", "ID-5", "concept must be a plain object"));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (concept.name !== undefined) {
|
|
15
|
+
issues.push(issue("concept.name", "ID-9", "concept.name MUST NOT be used; use _extIdentifier + title"));
|
|
16
|
+
}
|
|
17
|
+
if (concept.identifier !== undefined) {
|
|
18
|
+
issues.push(issue("concept.identifier", "ID-6", "concept.identifier MUST NOT be used; use concept._extIdentifier"));
|
|
19
|
+
}
|
|
20
|
+
const title = stringifyId(concept.title);
|
|
21
|
+
if (!title) {
|
|
22
|
+
issues.push(issue("concept.title", "ID-8", "concept.title must be a non-empty string"));
|
|
23
|
+
}
|
|
24
|
+
const ext = concept._extIdentifier;
|
|
25
|
+
if (!isPlainObject(ext)) {
|
|
26
|
+
issues.push(issue("concept._extIdentifier", "ID-6", "concept._extIdentifier must be a plain object"));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const kind = stringifyId(ext.kind);
|
|
30
|
+
if (!kind) {
|
|
31
|
+
issues.push(issue("concept._extIdentifier.kind", "ID-6", "concept._extIdentifier.kind must be a non-empty string"));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (ext[kind] == null || String(ext[kind]).trim() === "") {
|
|
35
|
+
issues.push(issue(`concept._extIdentifier.${kind}`, "ID-6", `concept._extIdentifier.${kind} must be present for kind "${kind}"`));
|
|
36
|
+
}
|
|
37
|
+
if (ext.identifierKey !== undefined) {
|
|
38
|
+
issues.push(issue("concept._extIdentifier.identifierKey", "ID-7", "use concept._extIdentifier.key (not identifierKey)"));
|
|
39
|
+
}
|
|
40
|
+
const key = stringifyId(ext.key);
|
|
41
|
+
if (!key) {
|
|
42
|
+
issues.push(issue("concept._extIdentifier.key", "ID-7", "concept._extIdentifier.key is required"));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const expected = buildExtIdentifierKey(ext);
|
|
46
|
+
if (expected && key !== expected) {
|
|
47
|
+
issues.push(issue("concept._extIdentifier.key", "ID-7", `key must be "${expected}", got "${key}"`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
for (const [field, value] of Object.entries(ext)) {
|
|
51
|
+
if (typeof value !== "string") {
|
|
52
|
+
issues.push(issue(`concept._extIdentifier.${field}`, "ID-6", `concept._extIdentifier.${field} must be a string`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function validateSystem(system, issues) {
|
|
57
|
+
if (system === undefined)
|
|
58
|
+
return;
|
|
59
|
+
if (!isPlainObject(system)) {
|
|
60
|
+
issues.push(issue("_system", "SYS-4", "_system must be a plain object when present"));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (system.state !== undefined) {
|
|
64
|
+
const state = stringifyId(system.state);
|
|
65
|
+
if (!state || !MEMORIX_RECORD_STATE_VALUES.includes(state)) {
|
|
66
|
+
issues.push(issue("_system.state", "SYS-8", `_system.state must be one of: ${MEMORIX_RECORD_STATE_VALUES.join(", ")}`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const lifecycle = system.lifecycle;
|
|
70
|
+
if (lifecycle !== undefined) {
|
|
71
|
+
if (!Array.isArray(lifecycle)) {
|
|
72
|
+
issues.push(issue("_system.lifecycle", "SYS-4", "_system.lifecycle must be an array"));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (lifecycle.length === 0) {
|
|
76
|
+
issues.push(issue("_system.lifecycle", "SYS-6", "_system.lifecycle MUST be omitted when empty, not []"));
|
|
77
|
+
}
|
|
78
|
+
for (let i = 0; i < lifecycle.length; i++) {
|
|
79
|
+
const entry = lifecycle[i];
|
|
80
|
+
if (!isPlainObject(entry)) {
|
|
81
|
+
issues.push(issue(`_system.lifecycle[${i}]`, "SYS-4", "lifecycle entry must be an object"));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (!stringifyId(entry.process)) {
|
|
85
|
+
issues.push(issue(`_system.lifecycle[${i}].process`, "SYS-4", "lifecycle entry requires process"));
|
|
86
|
+
}
|
|
87
|
+
if (!stringifyId(entry.processedAt)) {
|
|
88
|
+
issues.push(issue(`_system.lifecycle[${i}].processedAt`, "SYS-4", "lifecycle entry requires processedAt"));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function collectPrimitiveLeaves(value, acc, path) {
|
|
94
|
+
if (value === null || value === undefined)
|
|
95
|
+
return;
|
|
96
|
+
if (typeof value !== "object") {
|
|
97
|
+
const leaf = JSON.stringify(value);
|
|
98
|
+
const list = acc.get(leaf) ?? [];
|
|
99
|
+
list.push(path);
|
|
100
|
+
acc.set(leaf, list);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (Array.isArray(value)) {
|
|
104
|
+
value.forEach((item, i) => collectPrimitiveLeaves(item, acc, `${path}[${i}]`));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
for (const [k, v] of Object.entries(value)) {
|
|
108
|
+
collectPrimitiveLeaves(v, acc, path ? `${path}.${k}` : k);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Static BUCKET-3 check: same primitive leaf under data and an open bucket. */
|
|
112
|
+
function checkCrossBucketDupes(record, openKeys, issues) {
|
|
113
|
+
if (!isPlainObject(record.data) || openKeys.length === 0)
|
|
114
|
+
return;
|
|
115
|
+
const dataLeaves = new Map();
|
|
116
|
+
collectPrimitiveLeaves(record.data, dataLeaves, "data");
|
|
117
|
+
for (const openKey of openKeys) {
|
|
118
|
+
const openLeaves = new Map();
|
|
119
|
+
collectPrimitiveLeaves(record[openKey], openLeaves, openKey);
|
|
120
|
+
for (const [leaf, openPaths] of openLeaves) {
|
|
121
|
+
const dataPaths = dataLeaves.get(leaf);
|
|
122
|
+
if (!dataPaths)
|
|
123
|
+
continue;
|
|
124
|
+
if (leaf === "true" || leaf === "false" || leaf === "null")
|
|
125
|
+
continue;
|
|
126
|
+
if (leaf.length < 4)
|
|
127
|
+
continue;
|
|
128
|
+
issues.push(issue(openPaths[0] ?? openKey, "BUCKET-3", `verbatim value also under ${dataPaths[0]} (possible cross-bucket duplicate)`, "warning"));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function validateAgainstMeta(record, meta, openKeys, issues) {
|
|
133
|
+
const decls = meta.openBuckets ?? {};
|
|
134
|
+
const unknownPolicy = meta.policy?.unknownOpenBuckets ?? "allow";
|
|
135
|
+
const emptyPolicy = meta.policy?.emptyBuckets ?? "reject";
|
|
136
|
+
for (const [name, decl] of Object.entries(decls)) {
|
|
137
|
+
const value = record[name];
|
|
138
|
+
if (value === undefined) {
|
|
139
|
+
if (decl.required) {
|
|
140
|
+
issues.push(issue(name, "META-2", `required open bucket "${name}" is missing`));
|
|
141
|
+
}
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (decl.shape === "object") {
|
|
145
|
+
if (!isPlainObject(value)) {
|
|
146
|
+
issues.push(issue(name, "META-2", `open bucket "${name}" must be an object (kind=${decl.kind})`));
|
|
147
|
+
}
|
|
148
|
+
else if (Object.keys(value).length === 0 && emptyPolicy === "reject") {
|
|
149
|
+
issues.push(issue(name, "META-2", `open bucket "${name}" must be omitted when empty`));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
if (!Array.isArray(value)) {
|
|
154
|
+
issues.push(issue(name, "META-2", `open bucket "${name}" must be an array of objects (kind=${decl.kind})`));
|
|
155
|
+
}
|
|
156
|
+
else if (value.length === 0 && emptyPolicy === "reject") {
|
|
157
|
+
issues.push(issue(name, "META-2", `open bucket "${name}" must be omitted when empty`));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
for (let i = 0; i < value.length; i++) {
|
|
161
|
+
if (!isPlainObject(value[i])) {
|
|
162
|
+
issues.push(issue(`${name}[${i}]`, "META-2", `${name}[${i}] must be a plain object`));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
for (const key of openKeys) {
|
|
169
|
+
if (decls[key])
|
|
170
|
+
continue;
|
|
171
|
+
if (unknownPolicy === "reject") {
|
|
172
|
+
issues.push(issue(key, "META-2", `undeclared open bucket "${key}" (policy=reject)`));
|
|
173
|
+
}
|
|
174
|
+
else if (unknownPolicy === "warn") {
|
|
175
|
+
issues.push(issue(key, "META-2", `undeclared open bucket "${key}"`, "warning"));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Validate a record against the fixed-skeleton base contract (present tense).
|
|
181
|
+
* Does not special-case any open-bucket product names.
|
|
182
|
+
* Legacy roots are not format law — use rejectLegacyRoots / allowLegacyEnvelope for compat guards.
|
|
183
|
+
*/
|
|
184
|
+
export function validateMemorixBaseRecord(input, options = {}) {
|
|
185
|
+
const issues = [];
|
|
186
|
+
if (!isPlainObject(input)) {
|
|
187
|
+
return {
|
|
188
|
+
ok: false,
|
|
189
|
+
issues: [issue("$", "ENV-1", "record must be a plain JSON object")],
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
const record = input;
|
|
193
|
+
const recordId = readRecordId(record) || undefined;
|
|
194
|
+
if (!stringifyId(record.recordId)) {
|
|
195
|
+
issues.push(issue("recordId", "ID-1", "recordId must be a non-empty string"));
|
|
196
|
+
}
|
|
197
|
+
if (!isPlainObject(record.data)) {
|
|
198
|
+
issues.push(issue("data", "DATA-1", "data must be a plain object"));
|
|
199
|
+
}
|
|
200
|
+
validateConcept(record.concept, issues);
|
|
201
|
+
validateSystem(record._system, issues);
|
|
202
|
+
const openKeys = [];
|
|
203
|
+
const rootKeys = Object.keys(record);
|
|
204
|
+
if (options.rejectLegacyRoots || options.allowLegacyEnvelope) {
|
|
205
|
+
for (const legacyIssue of collectLegacyRootIssues(rootKeys, {
|
|
206
|
+
asWarning: Boolean(options.allowLegacyEnvelope) && !options.rejectLegacyRoots,
|
|
207
|
+
})) {
|
|
208
|
+
issues.push(legacyIssue);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (const key of rootKeys) {
|
|
212
|
+
const category = classifyRootKey(key);
|
|
213
|
+
if (category === "open") {
|
|
214
|
+
openKeys.push(key);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
checkCrossBucketDupes(record, openKeys, issues);
|
|
218
|
+
if (options.meta) {
|
|
219
|
+
validateAgainstMeta(record, options.meta, openKeys, issues);
|
|
220
|
+
}
|
|
221
|
+
const hasError = issues.some((i) => i.severity === "error");
|
|
222
|
+
const hasWarning = issues.some((i) => i.severity === "warning");
|
|
223
|
+
const ok = options.strict ? !hasError && !hasWarning : !hasError;
|
|
224
|
+
return { ok, issues, recordId };
|
|
225
|
+
}
|
|
226
|
+
export function validateMemorixBaseRecords(records, options = {}) {
|
|
227
|
+
const results = records.map((r) => validateMemorixBaseRecord(r, options));
|
|
228
|
+
return { ok: results.every((r) => r.ok), results };
|
|
229
|
+
}
|
|
230
|
+
export function parseRecordsJson(text) {
|
|
231
|
+
const trimmed = text.trim();
|
|
232
|
+
if (!trimmed)
|
|
233
|
+
return [];
|
|
234
|
+
if (trimmed.startsWith("[")) {
|
|
235
|
+
const parsed = JSON.parse(trimmed);
|
|
236
|
+
if (!Array.isArray(parsed))
|
|
237
|
+
throw new Error("Expected a JSON array of records");
|
|
238
|
+
return parsed;
|
|
239
|
+
}
|
|
240
|
+
if (trimmed.startsWith("{")) {
|
|
241
|
+
const lines = trimmed.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
|
|
242
|
+
if (lines.length > 1 && lines.every((l) => l.startsWith("{"))) {
|
|
243
|
+
return lines.map((line) => JSON.parse(line));
|
|
244
|
+
}
|
|
245
|
+
return [JSON.parse(trimmed)];
|
|
246
|
+
}
|
|
247
|
+
return trimmed
|
|
248
|
+
.split(/\r?\n/)
|
|
249
|
+
.map((l) => l.trim())
|
|
250
|
+
.filter(Boolean)
|
|
251
|
+
.map((line) => JSON.parse(line));
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/base/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import { existsSync, readdirSync, readFileSync, writeFileSync, statSync } from "
|
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
|
-
import { inspectMemorixBaseRecord, parseContentTypeMeta, parseRecordsJson, } from "
|
|
6
|
+
import { inspectMemorixBaseRecord, parseContentTypeMeta, parseRecordsJson, } from "./base/index.js";
|
|
7
7
|
import { BUILTIN_PROFILES } from "./profiles.js";
|
|
8
8
|
import { migrateMemorixRecord } from "./migrate.js";
|
|
9
9
|
import { validateMemorixRecord } from "./validate.js";
|