@x12i/memorix-format 1.0.0 → 2.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/CHANGELOG.md +15 -0
- package/README.md +25 -63
- package/dist/associated.d.ts +25 -12
- package/dist/associated.d.ts.map +1 -1
- package/dist/associated.js +35 -32
- package/dist/associated.js.map +1 -1
- package/dist/cli.js +129 -77
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/profiles.d.ts +12 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +52 -0
- package/dist/profiles.js.map +1 -0
- package/dist/types.d.ts +8 -80
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts +17 -9
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +43 -184
- package/dist/validate.js.map +1 -1
- package/docs/memorix-format-requirements.md +52 -0
- package/docs/memorix-format.md +3 -1
- package/examples/valid-snapshot.json +3 -12
- package/package.json +14 -6
- package/profiles/snapshots.json +27 -0
- package/dist/concept.d.ts +0 -16
- package/dist/concept.d.ts.map +0 -1
- package/dist/concept.js +0 -75
- package/dist/concept.js.map +0 -1
- package/dist/constants.d.ts +0 -21
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -49
- package/dist/constants.js.map +0 -1
- package/dist/inspect.d.ts +0 -4
- package/dist/inspect.d.ts.map +0 -1
- package/dist/inspect.js +0 -51
- package/dist/inspect.js.map +0 -1
- package/dist/utils.d.ts +0 -6
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -23
- package/dist/utils.js.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
export type { JsonObject, MemorixConcept, MemorixConceptIdentifier,
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export { parseRecordsJson, validateMemorixRecord, validateMemorixRecords, } from "./validate.js";
|
|
8
|
-
export { isPlainObject, pascalCaseObjectType, stringifyId } from "./utils.js";
|
|
1
|
+
export type { ContentTypeMeta, JsonObject, MemorixBaseRecord, MemorixConcept, MemorixConceptIdentifier, MemorixLifecycleEvent, MemorixRecord, MemorixSystemBlock, OpenBucketDecl, OpenBucketKind, RecordInspection, RootCategory, ValidateBaseOptions, ValidateBaseResult, ValidateMemorixOptions, ValidationIssue, ValidationSeverity, MemorixProfileName, AssociatedPropertyNameInput, } from "./types.js";
|
|
2
|
+
export { classifyRootKey, isOpenBucketKey, isSystemRootKey, validateMemorixBaseRecord, validateMemorixBaseRecords, parseContentTypeMeta, parseRecordsJson, inspectMemorixBaseRecord, buildConceptIdentifier, buildIdentityString, readConceptIdentifier, readConceptTitle, readRecordId, isPlainObject, stringifyId, RECORD_ID_FIELD, CONCEPT_FIELD, DATA_FIELD, SYSTEM_FIELD, IDENTITY_ROOT_KEYS, CORE_ROOT_KEYS, LEGACY_ROOT_KEYS, OPEN_BUCKET_KINDS, } from "@x12i/memorix-base-format";
|
|
3
|
+
export { inspectMemorixBaseRecord as inspectMemorixRecord } from "@x12i/memorix-base-format";
|
|
4
|
+
export { buildAssociatedPropertyName, isAssociatedPropertyName, isEnrichmentAssociatedPropertyName, isLegacyAssociatedPropertyName, isTopAssociatedPropertyName, listAssociatedProperties, DEFAULT_TOP_ASSOCIATED_ITEMS, KNOWN_OPEN_BUCKETS, LEGACY_ASSOCIATED_NAMES, pascalCaseObjectType, } from "./associated.js";
|
|
5
|
+
export { BUILTIN_PROFILES, minimalContentTypeMeta, resolveMemorixProfile, snapshotsContentTypeMeta, } from "./profiles.js";
|
|
6
|
+
export { validateMemorixRecord, validateMemorixRecords } from "./validate.js";
|
|
9
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,wBAAwB,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE7F,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,kCAAkC,EAClC,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
// Base envelope (re-exported — source of truth is @x12i/memorix-base-format)
|
|
2
|
+
export { classifyRootKey, isOpenBucketKey, isSystemRootKey, validateMemorixBaseRecord, validateMemorixBaseRecords, parseContentTypeMeta, parseRecordsJson, inspectMemorixBaseRecord, buildConceptIdentifier, buildIdentityString, readConceptIdentifier, readConceptTitle, readRecordId, isPlainObject, stringifyId, RECORD_ID_FIELD, CONCEPT_FIELD, DATA_FIELD, SYSTEM_FIELD, IDENTITY_ROOT_KEYS, CORE_ROOT_KEYS, LEGACY_ROOT_KEYS, OPEN_BUCKET_KINDS, } from "@x12i/memorix-base-format";
|
|
3
|
+
export { inspectMemorixBaseRecord as inspectMemorixRecord } from "@x12i/memorix-base-format";
|
|
4
|
+
export { buildAssociatedPropertyName, isAssociatedPropertyName, isEnrichmentAssociatedPropertyName, isLegacyAssociatedPropertyName, isTopAssociatedPropertyName, listAssociatedProperties, DEFAULT_TOP_ASSOCIATED_ITEMS, KNOWN_OPEN_BUCKETS, LEGACY_ASSOCIATED_NAMES, pascalCaseObjectType, } from "./associated.js";
|
|
5
|
+
export { BUILTIN_PROFILES, minimalContentTypeMeta, resolveMemorixProfile, snapshotsContentTypeMeta, } from "./profiles.js";
|
|
6
|
+
export { validateMemorixRecord, validateMemorixRecords } from "./validate.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,6EAA6E;AAC7E,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,wBAAwB,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE7F,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,kCAAkC,EAClC,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ContentTypeMeta } from "@x12i/memorix-base-format";
|
|
2
|
+
/** Minimal content type — identity + data only (no declared open buckets). */
|
|
3
|
+
export declare function minimalContentTypeMeta(objectType: string, contentType: string): ContentTypeMeta;
|
|
4
|
+
/**
|
|
5
|
+
* Snapshot-style Memorix profile: known open buckets + allow extra association keys.
|
|
6
|
+
* Association property names are still open buckets to base; profile validates shapes in validate.ts.
|
|
7
|
+
*/
|
|
8
|
+
export declare function snapshotsContentTypeMeta(objectType: string): ContentTypeMeta;
|
|
9
|
+
export type MemorixProfileName = "snapshots" | "minimal";
|
|
10
|
+
export declare function resolveMemorixProfile(name: MemorixProfileName, objectType?: string): ContentTypeMeta;
|
|
11
|
+
export declare const BUILTIN_PROFILES: MemorixProfileName[];
|
|
12
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,eAAe,CAQjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CA6B5E;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,CAAC;AAEzD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,UAAU,SAAY,GACrB,eAAe,CAGjB;AAED,eAAO,MAAM,gBAAgB,EAAE,kBAAkB,EAA6B,CAAC"}
|
package/dist/profiles.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { KNOWN_OPEN_BUCKETS } from "./associated.js";
|
|
2
|
+
/** Minimal content type — identity + data only (no declared open buckets). */
|
|
3
|
+
export function minimalContentTypeMeta(objectType, contentType) {
|
|
4
|
+
return {
|
|
5
|
+
objectType,
|
|
6
|
+
contentType,
|
|
7
|
+
collectionPostfix: contentType,
|
|
8
|
+
policy: { unknownOpenBuckets: "warn", emptyBuckets: "reject" },
|
|
9
|
+
read: { missingOptionalIsNa: true },
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Snapshot-style Memorix profile: known open buckets + allow extra association keys.
|
|
14
|
+
* Association property names are still open buckets to base; profile validates shapes in validate.ts.
|
|
15
|
+
*/
|
|
16
|
+
export function snapshotsContentTypeMeta(objectType) {
|
|
17
|
+
return {
|
|
18
|
+
objectType,
|
|
19
|
+
contentType: "snapshots",
|
|
20
|
+
collectionPostfix: "snapshots",
|
|
21
|
+
openBuckets: {
|
|
22
|
+
analytics: {
|
|
23
|
+
...KNOWN_OPEN_BUCKETS.analytics,
|
|
24
|
+
title: "Analytics",
|
|
25
|
+
description: "Numeric rollups about linked lists",
|
|
26
|
+
},
|
|
27
|
+
enrichment: {
|
|
28
|
+
...KNOWN_OPEN_BUCKETS.enrichment,
|
|
29
|
+
title: "Enrichment",
|
|
30
|
+
description: "External / prior-system sourced values",
|
|
31
|
+
},
|
|
32
|
+
insights: {
|
|
33
|
+
...KNOWN_OPEN_BUCKETS.insights,
|
|
34
|
+
title: "Insights",
|
|
35
|
+
description: "Interpreted judgments and recommendations",
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
policy: {
|
|
39
|
+
// Allow associated* and other custom open buckets without listing every name
|
|
40
|
+
unknownOpenBuckets: "allow",
|
|
41
|
+
emptyBuckets: "reject",
|
|
42
|
+
},
|
|
43
|
+
read: { missingOptionalIsNa: true },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function resolveMemorixProfile(name, objectType = "generic") {
|
|
47
|
+
if (name === "snapshots")
|
|
48
|
+
return snapshotsContentTypeMeta(objectType);
|
|
49
|
+
return minimalContentTypeMeta(objectType, name === "minimal" ? "events" : name);
|
|
50
|
+
}
|
|
51
|
+
export const BUILTIN_PROFILES = ["snapshots", "minimal"];
|
|
52
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,WAAmB;IAEnB,OAAO;QACL,UAAU;QACV,WAAW;QACX,iBAAiB,EAAE,WAAW;QAC9B,MAAM,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;QAC9D,IAAI,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAkB;IACzD,OAAO;QACL,UAAU;QACV,WAAW,EAAE,WAAW;QACxB,iBAAiB,EAAE,WAAW;QAC9B,WAAW,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,kBAAkB,CAAC,SAAS;gBAC/B,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,oCAAoC;aAClD;YACD,UAAU,EAAE;gBACV,GAAG,kBAAkB,CAAC,UAAU;gBAChC,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,wCAAwC;aACtD;YACD,QAAQ,EAAE;gBACR,GAAG,kBAAkB,CAAC,QAAQ;gBAC9B,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,2CAA2C;aACzD;SACF;QACD,MAAM,EAAE;YACN,6EAA6E;YAC7E,kBAAkB,EAAE,OAAO;YAC3B,YAAY,EAAE,QAAQ;SACvB;QACD,IAAI,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,qBAAqB,CACnC,IAAwB,EACxB,UAAU,GAAG,SAAS;IAEtB,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACtE,OAAO,sBAAsB,CAAC,UAAU,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAyB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,81 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export type JsonObject
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
export type MemorixConcept = {
|
|
11
|
-
identifier: MemorixConceptIdentifier;
|
|
12
|
-
title: string;
|
|
13
|
-
};
|
|
14
|
-
export type MemorixLifecycleEvent = {
|
|
15
|
-
process: string;
|
|
16
|
-
processedAt: string;
|
|
17
|
-
};
|
|
18
|
-
export type MemorixSystemBlock = {
|
|
19
|
-
lifecycle?: MemorixLifecycleEvent[];
|
|
20
|
-
_graphRuns?: Record<string, unknown>;
|
|
21
|
-
_jobTypeRuns?: Record<string, unknown>;
|
|
22
|
-
provenance?: JsonObject;
|
|
23
|
-
memorix?: JsonObject;
|
|
24
|
-
processing?: JsonObject;
|
|
25
|
-
scoping?: JsonObject;
|
|
26
|
-
[key: string]: unknown;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Canonical clean Memorix record envelope.
|
|
30
|
-
* See `docs/memorix-format.md`.
|
|
31
|
-
*/
|
|
32
|
-
export type MemorixRecord = {
|
|
33
|
-
_id?: unknown;
|
|
34
|
-
recordId: string;
|
|
35
|
-
concept: MemorixConcept;
|
|
36
|
-
data: JsonObject;
|
|
37
|
-
analytics?: JsonObject;
|
|
38
|
-
enrichment?: JsonObject;
|
|
39
|
-
insights?: JsonObject;
|
|
40
|
-
/** Legacy short name; prefer v2 `associated<ObjectType><ContentType>`. */
|
|
41
|
-
associatedData?: JsonObject[];
|
|
42
|
-
_system?: MemorixSystemBlock;
|
|
43
|
-
};
|
|
44
|
-
/** Optional content-type hint for snapshot-only bucket rules. */
|
|
45
|
-
export type MemorixContentTypeHint = "snapshots" | "discovery" | "analysis" | "decision" | "workflow" | "chunks" | "facts" | "events" | "history" | "profiles" | "legacy" | "core" | "inferences" | "scoped" | (string & {});
|
|
46
|
-
export type ValidationSeverity = "error" | "warning";
|
|
47
|
-
export type ValidationIssue = {
|
|
48
|
-
path: string;
|
|
49
|
-
code: string;
|
|
50
|
-
message: string;
|
|
51
|
-
severity: ValidationSeverity;
|
|
52
|
-
};
|
|
53
|
-
export type ValidateRecordOptions = {
|
|
54
|
-
/** When set and not `snapshots`, snapshot-only buckets are rejected. */
|
|
55
|
-
contentType?: MemorixContentTypeHint;
|
|
56
|
-
/** Allow root `identity` / `lifecycle` / `sourceFacts` (legacy 2.0). Default false. */
|
|
57
|
-
allowLegacyEnvelope?: boolean;
|
|
58
|
-
/** Treat warnings as failures in `ok`. Default false. */
|
|
59
|
-
strict?: boolean;
|
|
60
|
-
};
|
|
61
|
-
export type ValidateRecordResult = {
|
|
62
|
-
ok: boolean;
|
|
63
|
-
issues: ValidationIssue[];
|
|
64
|
-
recordId?: string;
|
|
65
|
-
};
|
|
66
|
-
export type RecordInspection = {
|
|
67
|
-
recordId?: string;
|
|
68
|
-
conceptTitle?: string;
|
|
69
|
-
conceptKind?: string;
|
|
70
|
-
buckets: {
|
|
71
|
-
data: boolean;
|
|
72
|
-
analytics: boolean;
|
|
73
|
-
enrichment: boolean;
|
|
74
|
-
insights: boolean;
|
|
75
|
-
system: boolean;
|
|
76
|
-
};
|
|
77
|
-
associatedProperties: string[];
|
|
78
|
-
legacyRoots: string[];
|
|
79
|
-
unknownRoots: string[];
|
|
80
|
-
};
|
|
1
|
+
/** Re-export base types plus Memorix profile options. */
|
|
2
|
+
export type { ContentTypeMeta, JsonObject, MemorixBaseRecord, MemorixConcept, MemorixConceptIdentifier, MemorixLifecycleEvent, MemorixSystemBlock, OpenBucketDecl, OpenBucketKind, RecordInspection, RootCategory, ValidateBaseOptions, ValidateBaseResult, ValidationIssue, ValidationSeverity, } from "@x12i/memorix-base-format";
|
|
3
|
+
import type { MemorixBaseRecord } from "@x12i/memorix-base-format";
|
|
4
|
+
/** Alias for MemorixBaseRecord (compatibility with 1.x). */
|
|
5
|
+
export type MemorixRecord = MemorixBaseRecord;
|
|
6
|
+
export type { ValidateMemorixOptions } from "./validate.js";
|
|
7
|
+
export type { MemorixProfileName } from "./profiles.js";
|
|
8
|
+
export type { AssociatedPropertyNameInput } from "./associated.js";
|
|
81
9
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,YAAY,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,YAAY,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/validate.d.ts
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ValidateBaseOptions, type ValidateBaseResult } from "@x12i/memorix-base-format";
|
|
2
|
+
import { type MemorixProfileName } from "./profiles.js";
|
|
3
|
+
export type ValidateMemorixOptions = ValidateBaseOptions & {
|
|
4
|
+
/** Built-in Memorix ContentTypeMeta profile. */
|
|
5
|
+
profile?: MemorixProfileName;
|
|
6
|
+
/** Object type used when resolving a built-in profile. */
|
|
7
|
+
objectType?: string;
|
|
8
|
+
/**
|
|
9
|
+
* When set and not `snapshots`, reject Memorix-known consumption buckets
|
|
10
|
+
* and associated* keys (SCOPE).
|
|
11
|
+
*/
|
|
12
|
+
contentType?: string;
|
|
13
|
+
};
|
|
2
14
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Does not require Mongo or Catalox — pure shape validation.
|
|
15
|
+
* Memorix product validation = base envelope + optional profile meta + ASSOC/SCOPE rules.
|
|
5
16
|
*/
|
|
6
|
-
export declare function validateMemorixRecord(input: unknown, options?:
|
|
7
|
-
|
|
8
|
-
export declare function validateMemorixRecords(records: unknown[], options?: ValidateRecordOptions): {
|
|
17
|
+
export declare function validateMemorixRecord(input: unknown, options?: ValidateMemorixOptions): ValidateBaseResult;
|
|
18
|
+
export declare function validateMemorixRecords(records: unknown[], options?: ValidateMemorixOptions): {
|
|
9
19
|
ok: boolean;
|
|
10
|
-
results:
|
|
20
|
+
results: ValidateBaseResult[];
|
|
11
21
|
};
|
|
12
|
-
/** Parse JSON text that is either one object or an array / NDJSON stream. */
|
|
13
|
-
export declare function parseRecordsJson(text: string): unknown[];
|
|
14
22
|
//# sourceMappingURL=validate.d.ts.map
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE/E,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,GAAG;IACzD,gDAAgD;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAeF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,sBAA2B,GACnC,kBAAkB,CA0EpB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAAE,EAClB,OAAO,GAAE,sBAA2B,GACnC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAGhD"}
|
package/dist/validate.js
CHANGED
|
@@ -1,211 +1,70 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isAssociatedPropertyName, isLegacyAssociatedPropertyName } from "./associated.js";
|
|
3
|
-
import {
|
|
4
|
-
import { isPlainObject, stringifyId } from "./utils.js";
|
|
1
|
+
import { validateMemorixBaseRecord, } from "@x12i/memorix-base-format";
|
|
2
|
+
import { isAssociatedPropertyName, isLegacyAssociatedPropertyName, } from "./associated.js";
|
|
3
|
+
import { resolveMemorixProfile } from "./profiles.js";
|
|
5
4
|
function issue(path, code, message, severity = "error") {
|
|
6
5
|
return { path, code, message, severity };
|
|
7
6
|
}
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
-
issues.push(issue("concept", "concept.required", "concept must be a plain object"));
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const title = stringifyId(concept.title);
|
|
14
|
-
if (!title) {
|
|
15
|
-
issues.push(issue("concept.title", "concept.title.required", "concept.title must be a non-empty string"));
|
|
16
|
-
}
|
|
17
|
-
if (concept.name !== undefined) {
|
|
18
|
-
issues.push(issue("concept.name", "concept.name.legacy", 'concept.name is removed in the clean format; use concept.identifier + concept.title', "warning"));
|
|
19
|
-
}
|
|
20
|
-
const identifier = concept.identifier;
|
|
21
|
-
if (!isPlainObject(identifier)) {
|
|
22
|
-
issues.push(issue("concept.identifier", "concept.identifier.required", "concept.identifier must be a plain object"));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const kind = stringifyId(identifier.kind);
|
|
26
|
-
if (!kind) {
|
|
27
|
-
issues.push(issue("concept.identifier.kind", "concept.identifier.kind.required", "concept.identifier.kind must be a non-empty string"));
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
if (identifier[kind] == null || String(identifier[kind]).trim() === "") {
|
|
31
|
-
issues.push(issue(`concept.identifier.${kind}`, "concept.identifier.value.required", `concept.identifier.${kind} must be present for kind "${kind}"`));
|
|
32
|
-
}
|
|
33
|
-
const identifierKey = stringifyId(identifier.identifierKey);
|
|
34
|
-
if (!identifierKey) {
|
|
35
|
-
issues.push(issue("concept.identifier.identifierKey", "concept.identifier.identifierKey.required", "concept.identifier.identifierKey is required"));
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
const expected = buildIdentityString(identifier);
|
|
39
|
-
if (expected && identifierKey !== expected) {
|
|
40
|
-
issues.push(issue("concept.identifier.identifierKey", "concept.identifier.identifierKey.mismatch", `identifierKey should be "${expected}", got "${identifierKey}"`, "warning"));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
for (const [key, value] of Object.entries(identifier)) {
|
|
44
|
-
if (typeof value !== "string") {
|
|
45
|
-
issues.push(issue(`concept.identifier.${key}`, "concept.identifier.value.type", `concept.identifier.${key} must be a string`));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function validateAssociatedProperty(name, value, issues) {
|
|
50
|
-
if (value === undefined)
|
|
51
|
-
return;
|
|
52
|
-
if (!Array.isArray(value)) {
|
|
53
|
-
issues.push(issue(name, "associated.array", `${name} must be an array of objects (omit when empty)`));
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (value.length === 0) {
|
|
57
|
-
issues.push(issue(name, "associated.empty", `${name} should be omitted when empty`, "warning"));
|
|
58
|
-
}
|
|
59
|
-
for (let i = 0; i < value.length; i++) {
|
|
60
|
-
const item = value[i];
|
|
61
|
-
if (!isPlainObject(item)) {
|
|
62
|
-
issues.push(issue(`${name}[${i}]`, "associated.item.object", `${name}[${i}] must be a plain object`));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (isLegacyAssociatedPropertyName(name)) {
|
|
66
|
-
issues.push(issue(name, "associated.legacy_name", `${name} is a legacy associated name; prefer associated<ObjectType><ContentType>`, "warning"));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function validateObjectBucket(name, value, issues) {
|
|
70
|
-
if (value === undefined)
|
|
71
|
-
return;
|
|
72
|
-
if (!isPlainObject(value)) {
|
|
73
|
-
issues.push(issue(name, `${name}.object`, `${name} must be a plain object`));
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (Object.keys(value).length === 0) {
|
|
77
|
-
issues.push(issue(name, `${name}.empty`, `${name} should be omitted when empty`, "warning"));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function validateSystem(system, issues) {
|
|
81
|
-
if (system === undefined)
|
|
82
|
-
return;
|
|
83
|
-
if (!isPlainObject(system)) {
|
|
84
|
-
issues.push(issue("_system", "system.object", "_system must be a plain object"));
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
const lifecycle = system.lifecycle;
|
|
88
|
-
if (lifecycle !== undefined) {
|
|
89
|
-
if (!Array.isArray(lifecycle)) {
|
|
90
|
-
issues.push(issue("_system.lifecycle", "system.lifecycle.array", "_system.lifecycle must be an array"));
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
if (lifecycle.length === 0) {
|
|
94
|
-
issues.push(issue("_system.lifecycle", "system.lifecycle.empty", "_system.lifecycle should be omitted when empty", "warning"));
|
|
95
|
-
}
|
|
96
|
-
for (let i = 0; i < lifecycle.length; i++) {
|
|
97
|
-
const entry = lifecycle[i];
|
|
98
|
-
if (!isPlainObject(entry)) {
|
|
99
|
-
issues.push(issue(`_system.lifecycle[${i}]`, "system.lifecycle.entry", `_system.lifecycle[${i}] must be an object`));
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
if (!stringifyId(entry.process)) {
|
|
103
|
-
issues.push(issue(`_system.lifecycle[${i}].process`, "system.lifecycle.process", "lifecycle entry requires process"));
|
|
104
|
-
}
|
|
105
|
-
if (!stringifyId(entry.processedAt)) {
|
|
106
|
-
issues.push(issue(`_system.lifecycle[${i}].processedAt`, "system.lifecycle.processedAt", "lifecycle entry requires processedAt"));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
for (const mapKey of ["_graphRuns", "_jobTypeRuns"]) {
|
|
112
|
-
const map = system[mapKey];
|
|
113
|
-
if (map !== undefined && !isPlainObject(map)) {
|
|
114
|
-
issues.push(issue(`_system.${mapKey}`, `system.${mapKey}.object`, `_system.${mapKey} must be a plain object`));
|
|
115
|
-
}
|
|
116
|
-
}
|
|
7
|
+
function isPlainObject(v) {
|
|
8
|
+
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
117
9
|
}
|
|
118
10
|
/**
|
|
119
|
-
*
|
|
120
|
-
* Does not require Mongo or Catalox — pure shape validation.
|
|
11
|
+
* Memorix product validation = base envelope + optional profile meta + ASSOC/SCOPE rules.
|
|
121
12
|
*/
|
|
122
13
|
export function validateMemorixRecord(input, options = {}) {
|
|
123
|
-
const
|
|
14
|
+
const meta = options.meta ??
|
|
15
|
+
(options.profile
|
|
16
|
+
? resolveMemorixProfile(options.profile, options.objectType ?? "generic")
|
|
17
|
+
: undefined);
|
|
18
|
+
const base = validateMemorixBaseRecord(input, {
|
|
19
|
+
...options,
|
|
20
|
+
meta,
|
|
21
|
+
});
|
|
22
|
+
const issues = [...base.issues];
|
|
124
23
|
if (!isPlainObject(input)) {
|
|
125
|
-
return
|
|
126
|
-
ok: false,
|
|
127
|
-
issues: [issue("$", "record.object", "record must be a plain JSON object")],
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
const record = input;
|
|
131
|
-
const recordId = readRecordId(record) || undefined;
|
|
132
|
-
const rootRecordId = stringifyId(record.recordId);
|
|
133
|
-
if (!rootRecordId) {
|
|
134
|
-
issues.push(issue("recordId", "recordId.required", "recordId must be a non-empty string"));
|
|
24
|
+
return base;
|
|
135
25
|
}
|
|
136
|
-
if (!isPlainObject(record.data)) {
|
|
137
|
-
issues.push(issue("data", "data.required", "data must be a plain object"));
|
|
138
|
-
}
|
|
139
|
-
validateConcept(record.concept, issues);
|
|
140
|
-
validateObjectBucket(ANALYTICS_FIELD, record.analytics, issues);
|
|
141
|
-
validateObjectBucket(ENRICHMENT_FIELD, record.enrichment, issues);
|
|
142
|
-
validateObjectBucket(INSIGHTS_FIELD, record.insights, issues);
|
|
143
|
-
validateSystem(record._system, issues);
|
|
144
26
|
const contentType = options.contentType?.trim();
|
|
145
27
|
const isSnapshot = !contentType || contentType === "snapshots";
|
|
146
|
-
|
|
147
|
-
for (const bucket of SNAPSHOT_ONLY_BUCKETS) {
|
|
148
|
-
if (record[bucket] !== undefined) {
|
|
149
|
-
issues.push(issue(bucket, "snapshot_only.bucket", `${bucket} is snapshot-only by default (contentType=${contentType})`));
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
for (const key of Object.keys(record)) {
|
|
28
|
+
for (const key of Object.keys(input)) {
|
|
154
29
|
if (isAssociatedPropertyName(key)) {
|
|
30
|
+
const value = input[key];
|
|
31
|
+
if (value !== undefined) {
|
|
32
|
+
if (!Array.isArray(value)) {
|
|
33
|
+
issues.push(issue(key, "ASSOC-2", `${key} MUST be an array`));
|
|
34
|
+
}
|
|
35
|
+
else if (value.length === 0) {
|
|
36
|
+
issues.push(issue(key, "ASSOC-3", `${key} MUST be omitted when empty`));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
for (let i = 0; i < value.length; i++) {
|
|
40
|
+
if (!isPlainObject(value[i])) {
|
|
41
|
+
issues.push(issue(`${key}[${i}]`, "ASSOC-5", `${key}[${i}] must be a plain object`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (isLegacyAssociatedPropertyName(key)) {
|
|
46
|
+
issues.push(issue(key, "ASSOC-1", `${key} is a legacy associated name; prefer associated<ObjectType><ContentType>`, "warning"));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
155
49
|
if (!isSnapshot) {
|
|
156
|
-
issues.push(issue(key, "
|
|
50
|
+
issues.push(issue(key, "SCOPE-2", `${key} is snapshot-oriented by default (contentType=${contentType})`));
|
|
157
51
|
}
|
|
158
|
-
validateAssociatedProperty(key, record[key], issues);
|
|
159
|
-
continue;
|
|
160
52
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (
|
|
165
|
-
issues.push(issue(
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
issues.push(issue(key, "legacy.root.forbidden", `${key} is not part of the clean envelope (set allowLegacyEnvelope to warn instead)`));
|
|
53
|
+
}
|
|
54
|
+
if (!isSnapshot) {
|
|
55
|
+
for (const bucket of ["analytics", "enrichment", "insights"]) {
|
|
56
|
+
if (input[bucket] !== undefined) {
|
|
57
|
+
issues.push(issue(bucket, "SCOPE-2", `${bucket} SHOULD be omitted on non-snapshot content types unless opted in`));
|
|
169
58
|
}
|
|
170
|
-
continue;
|
|
171
59
|
}
|
|
172
|
-
issues.push(issue(key, "root.unknown", `unexpected root key "${key}"`, "warning"));
|
|
173
60
|
}
|
|
174
61
|
const hasError = issues.some((i) => i.severity === "error");
|
|
175
62
|
const hasWarning = issues.some((i) => i.severity === "warning");
|
|
176
63
|
const ok = options.strict ? !hasError && !hasWarning : !hasError;
|
|
177
|
-
return { ok, issues, recordId };
|
|
64
|
+
return { ok, issues, recordId: base.recordId };
|
|
178
65
|
}
|
|
179
|
-
/** Validate many records; returns per-record results plus aggregate ok. */
|
|
180
66
|
export function validateMemorixRecords(records, options = {}) {
|
|
181
67
|
const results = records.map((r) => validateMemorixRecord(r, options));
|
|
182
68
|
return { ok: results.every((r) => r.ok), results };
|
|
183
69
|
}
|
|
184
|
-
/** Parse JSON text that is either one object or an array / NDJSON stream. */
|
|
185
|
-
export function parseRecordsJson(text) {
|
|
186
|
-
const trimmed = text.trim();
|
|
187
|
-
if (!trimmed)
|
|
188
|
-
return [];
|
|
189
|
-
if (trimmed.startsWith("[")) {
|
|
190
|
-
const parsed = JSON.parse(trimmed);
|
|
191
|
-
if (!Array.isArray(parsed)) {
|
|
192
|
-
throw new Error("Expected a JSON array of records");
|
|
193
|
-
}
|
|
194
|
-
return parsed;
|
|
195
|
-
}
|
|
196
|
-
if (trimmed.startsWith("{")) {
|
|
197
|
-
// Prefer single object; if multiple JSON objects on separate lines, treat as NDJSON.
|
|
198
|
-
const lines = trimmed.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
|
|
199
|
-
if (lines.length > 1 && lines.every((l) => l.startsWith("{"))) {
|
|
200
|
-
return lines.map((line) => JSON.parse(line));
|
|
201
|
-
}
|
|
202
|
-
return [JSON.parse(trimmed)];
|
|
203
|
-
}
|
|
204
|
-
// NDJSON without leading [
|
|
205
|
-
return trimmed
|
|
206
|
-
.split(/\r?\n/)
|
|
207
|
-
.map((l) => l.trim())
|
|
208
|
-
.filter(Boolean)
|
|
209
|
-
.map((line) => JSON.parse(line));
|
|
210
|
-
}
|
|
211
70
|
//# sourceMappingURL=validate.js.map
|