@x12i/memorix-writer 1.0.0 → 1.2.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 +25 -1
- package/catalox-seeds/memorix-write-descriptors.manifest.json +1 -2
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/data/collection-name.d.ts +1 -0
- package/dist/data/collection-name.d.ts.map +1 -1
- package/dist/data/collection-name.js +29 -6
- package/dist/data/collection-name.js.map +1 -1
- package/dist/data/memorix-write-adapter.d.ts +13 -6
- package/dist/data/memorix-write-adapter.d.ts.map +1 -1
- package/dist/data/memorix-write-adapter.js +22 -6
- package/dist/data/memorix-write-adapter.js.map +1 -1
- package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -1
- package/dist/descriptors/load-entity-descriptor.js +3 -2
- package/dist/descriptors/load-entity-descriptor.js.map +1 -1
- package/dist/descriptors/write-descriptor-types.d.ts +0 -11
- package/dist/descriptors/write-descriptor-types.d.ts.map +1 -1
- package/dist/errors/issues.d.ts +1 -1
- package/dist/errors/issues.d.ts.map +1 -1
- package/dist/errors/issues.js.map +1 -1
- package/dist/graph-runs/clear-run.d.ts +9 -0
- package/dist/graph-runs/clear-run.d.ts.map +1 -0
- package/dist/graph-runs/clear-run.js +22 -0
- package/dist/graph-runs/clear-run.js.map +1 -0
- package/dist/graph-runs/constants.d.ts +4 -0
- package/dist/graph-runs/constants.d.ts.map +1 -0
- package/dist/graph-runs/constants.js +6 -0
- package/dist/graph-runs/constants.js.map +1 -0
- package/dist/graph-runs/context.d.ts +12 -0
- package/dist/graph-runs/context.d.ts.map +1 -0
- package/dist/graph-runs/context.js +25 -0
- package/dist/graph-runs/context.js.map +1 -0
- package/dist/graph-runs/ensure-indexes.d.ts +10 -0
- package/dist/graph-runs/ensure-indexes.d.ts.map +1 -0
- package/dist/graph-runs/ensure-indexes.js +27 -0
- package/dist/graph-runs/ensure-indexes.js.map +1 -0
- package/dist/graph-runs/logging.d.ts +9 -0
- package/dist/graph-runs/logging.d.ts.map +1 -0
- package/dist/graph-runs/logging.js +4 -0
- package/dist/graph-runs/logging.js.map +1 -0
- package/dist/graph-runs/mark-failed.d.ts +14 -0
- package/dist/graph-runs/mark-failed.d.ts.map +1 -0
- package/dist/graph-runs/mark-failed.js +35 -0
- package/dist/graph-runs/mark-failed.js.map +1 -0
- package/dist/graph-runs/mark-started.d.ts +15 -0
- package/dist/graph-runs/mark-started.d.ts.map +1 -0
- package/dist/graph-runs/mark-started.js +35 -0
- package/dist/graph-runs/mark-started.js.map +1 -0
- package/dist/graph-runs/resolve-record-collection.d.ts +14 -0
- package/dist/graph-runs/resolve-record-collection.d.ts.map +1 -0
- package/dist/graph-runs/resolve-record-collection.js +25 -0
- package/dist/graph-runs/resolve-record-collection.js.map +1 -0
- package/dist/graph-runs/write-result.d.ts +17 -0
- package/dist/graph-runs/write-result.d.ts.map +1 -0
- package/dist/graph-runs/write-result.js +97 -0
- package/dist/graph-runs/write-result.js.map +1 -0
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/mongo/collection-documents.d.ts +12 -1
- package/dist/mongo/collection-documents.d.ts.map +1 -1
- package/dist/mongo/collection-documents.js +14 -2
- package/dist/mongo/collection-documents.js.map +1 -1
- package/dist/mongo/env.d.ts +9 -1
- package/dist/mongo/env.d.ts.map +1 -1
- package/dist/mongo/env.js +24 -5
- package/dist/mongo/env.js.map +1 -1
- package/dist/mongo/index.d.ts +1 -1
- package/dist/mongo/index.d.ts.map +1 -1
- package/dist/mongo/index.js +1 -1
- package/dist/mongo/index.js.map +1 -1
- package/dist/mongo/target.d.ts +1 -1
- package/dist/mongo/target.d.ts.map +1 -1
- package/dist/mongo/target.js +1 -1
- package/dist/mongo/target.js.map +1 -1
- package/dist/validation/validate-fields.d.ts.map +1 -1
- package/dist/validation/validate-fields.js +4 -0
- package/dist/validation/validate-fields.js.map +1 -1
- package/dist/validation/validate-immutability.d.ts.map +1 -1
- package/dist/validation/validate-immutability.js +1 -0
- package/dist/validation/validate-immutability.js.map +1 -1
- package/docs/GRAPH-RUNS.md +93 -0
- package/docs/gap-analysis.md +18 -0
- package/package.json +3 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,yBAAyB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,oCAAoC,EACpC,mCAAmC,GACpC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,KAAK,4BAA4B,EACjC,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,yBAAyB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,oCAAoC,EACpC,mCAAmC,GACpC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,KAAK,4BAA4B,EACjC,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
|
package/dist/mongo/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { resolveDefaultSourceDbName, resolveMemorixDbName, resolveMongoUri, targetCollectionEnvKey, } from "./env.js";
|
|
1
|
+
export { resolveDefaultSourceDbName, resolveMemorixDbName, resolveMongoUri, readTargetCollectionFromEnv, targetCollectionEnvKey, } from "./env.js";
|
|
2
2
|
export { resolveMemorixWriteTarget } from "./target.js";
|
|
3
3
|
export { DEFAULT_ENTITY_COLLECTION_CANDIDATES, DEFAULT_EVENT_COLLECTION_CANDIDATES, } from "./default-collections.js";
|
|
4
4
|
export { createMemorixDataTier, } from "./tier.js";
|
package/dist/mongo/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,yBAAyB,EAAsB,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,oCAAoC,EACpC,mCAAmC,GACpC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,GAGtB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,yBAAyB,EAAsB,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,oCAAoC,EACpC,mCAAmC,GACpC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,GAGtB,MAAM,WAAW,CAAC"}
|
package/dist/mongo/target.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { MemorixWriteDescriptor } from "../descriptors/write-descriptor-types.js";
|
|
2
|
-
export type MemorixTarget = "entity" | "event";
|
|
2
|
+
export type MemorixTarget = "entity" | "event" | "knowledge";
|
|
3
3
|
export declare function resolveMemorixWriteTarget(writeDescriptor: MemorixWriteDescriptor): MemorixTarget;
|
|
4
4
|
//# sourceMappingURL=target.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/mongo/target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/mongo/target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;AAE7D,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,sBAAsB,GACtC,aAAa,CAKf"}
|
package/dist/mongo/target.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function resolveMemorixWriteTarget(writeDescriptor) {
|
|
2
2
|
const kind = writeDescriptor.target.kind?.trim();
|
|
3
|
-
if (kind === "entity" || kind === "event")
|
|
3
|
+
if (kind === "entity" || kind === "event" || kind === "knowledge")
|
|
4
4
|
return kind;
|
|
5
5
|
if (writeDescriptor.identity.idField === "eventId")
|
|
6
6
|
return "event";
|
package/dist/mongo/target.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/mongo/target.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,yBAAyB,CACvC,eAAuC;IAEvC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/mongo/target.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,yBAAyB,CACvC,eAAuC;IAEvC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/E,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACnE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-fields.d.ts","sourceRoot":"","sources":["../../src/validation/validate-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,eAAe,EAAE,sBAAsB,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"validate-fields.d.ts","sourceRoot":"","sources":["../../src/validation/validate-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,eAAe,EAAE,sBAAsB,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,iBAAiB,EAAE,CAyEtB"}
|
|
@@ -17,6 +17,10 @@ export function validateInputFields(args) {
|
|
|
17
17
|
}
|
|
18
18
|
if (rejectUnknown) {
|
|
19
19
|
for (const key of Object.keys(input)) {
|
|
20
|
+
if (key === "_graphRuns") {
|
|
21
|
+
issues.push(writeIssue("SYSTEM_FIELD_NOT_WRITABLE", `system field "${key}" cannot be written via writeMemorixRecord`, { path: key, severity: "error" }));
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
20
24
|
if (!allowedInputPaths.has(key)) {
|
|
21
25
|
issues.push(writeIssue("UNKNOWN_FIELD", `unknown input field "${key}"`, {
|
|
22
26
|
path: key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-fields.js","sourceRoot":"","sources":["../../src/validation/validate-fields.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,MAAM,UAAU,mBAAmB,CAAC,IAInC;IACC,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAChE,MAAM,aAAa,GAAG,eAAe,CAAC,UAAU,EAAE,mBAAmB,IAAI,IAAI,CAAC;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;YAAE,SAAS;QACvC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,eAAe,EAAE,wBAAwB,GAAG,GAAG,EAAE;oBAC1D,IAAI,EAAE,GAAG;oBACT,QAAQ,EAAE,OAAO;iBAClB,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,wBAAwB,EAAE,mBAAmB,IAAI,cAAc,EAAE;gBAC1E,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,OAAO;aAClB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACpD,gBAAgB,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IACE,eAAe,CAAC,UAAU,EAAE,8BAA8B;QAC1D,gBAAgB,KAAK,CAAC;QACtB,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAC9B,CAAC;QACD,MAAM,CAAC,IAAI,CACT,UAAU,CACR,mBAAmB,EACnB,8CAA8C,EAC9C,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"validate-fields.js","sourceRoot":"","sources":["../../src/validation/validate-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-immutability.d.ts","sourceRoot":"","sources":["../../src/validation/validate-immutability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"validate-immutability.d.ts","sourceRoot":"","sources":["../../src/validation/validate-immutability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAa7D,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,KAAK,MAAM,CAAC;CACjF,GAAG,iBAAiB,EAAE,CA0BtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-immutability.js","sourceRoot":"","sources":["../../src/validation/validate-immutability.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,UAAU;IACV,SAAS;IACT,UAAU;IACV,WAAW;IACX,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,8BAA8B,CAAC,IAK9C;IACC,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,SAAS;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAClE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,wBAAwB,EAAE,UAAU,IAAI,gBAAgB,EAAE;gBACnE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACxB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,wBAAwB,EAAE,iBAAiB,IAAI,qBAAqB,EAAE;gBAC/E,IAAI;aACL,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"validate-immutability.js","sourceRoot":"","sources":["../../src/validation/validate-immutability.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,UAAU;IACV,SAAS;IACT,UAAU;IACV,WAAW;IACX,YAAY;IACZ,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,8BAA8B,CAAC,IAK9C;IACC,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,SAAS;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAClE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,wBAAwB,EAAE,UAAU,IAAI,gBAAgB,EAAE;gBACnE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACxB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,wBAAwB,EAAE,iBAAiB,IAAI,qBAAqB,EAAE;gBAC/E,IAAI;aACL,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Graph-run tracking (`_graphRuns`) — MRX-FRS-001
|
|
2
|
+
|
|
3
|
+
Record-level visibility for graph execution over Memorix entity and event records.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The reserved system field `_graphRuns` is stored **top-level on the Mongo payload document**, outside domain `data`. It is keyed by `graphId` and holds the **latest state only** per `(record, graphId)`.
|
|
8
|
+
|
|
9
|
+
Domain `writeMemorixRecord` operations **must not** accept `_graphRuns` in user input. Only the graph-run writer APIs below may mutate it.
|
|
10
|
+
|
|
11
|
+
Shared types live in `@x12i/memorix-descriptors/types`.
|
|
12
|
+
|
|
13
|
+
## Writer APIs (`@x12i/memorix-writer`)
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import {
|
|
17
|
+
markGraphRunStarted,
|
|
18
|
+
markGraphRunFailed,
|
|
19
|
+
writeGraphRunResult,
|
|
20
|
+
clearGraphRun,
|
|
21
|
+
ensureGraphRunIndexes,
|
|
22
|
+
} from "@x12i/memorix-writer";
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### `markGraphRunStarted(ref, graphId, opts)`
|
|
26
|
+
|
|
27
|
+
Sets `_graphRuns.<graphId>` to `{ status: "in_progress", startedAt, lastJobRunId, attempts, graphVersion? }` using a per-key dot-path `$set`.
|
|
28
|
+
|
|
29
|
+
**Idempotency:** If already `in_progress` with the same `lastJobRunId`, no-op (safe on lease-sweep re-claim). A different `lastJobRunId` overwrites the stamp.
|
|
30
|
+
|
|
31
|
+
### `markGraphRunFailed(ref, graphId, opts)`
|
|
32
|
+
|
|
33
|
+
Sets terminal `failed` status with `error` and `completedAt`. Call only when `job_runs` has exhausted `maxAttempts`.
|
|
34
|
+
|
|
35
|
+
### `writeGraphRunResult(ref, graphId, opts)` — combined success path
|
|
36
|
+
|
|
37
|
+
1. Upserts the graph result document to the persistency target collection (`<entityName>-<contentType>`).
|
|
38
|
+
2. Stamps the source record `_graphRuns.<graphId>` = `done` + result pointer + `completedAt`.
|
|
39
|
+
|
|
40
|
+
**Atomicity (Mongo transaction):** Result upsert and source stamp run inside a single Mongo transaction via `client.startSession().withTransaction()`. If either step fails, both are rolled back. **Requires a transaction-capable Mongo deployment** (replica set or sharded cluster). Standalone Mongo instances will fail at runtime when calling this API.
|
|
41
|
+
|
|
42
|
+
### `clearGraphRun(ref, graphId)`
|
|
43
|
+
|
|
44
|
+
`$unset` on `_graphRuns.<graphId>` so the record re-qualifies for `graphRunNotDone` planning queries.
|
|
45
|
+
|
|
46
|
+
### `ensureGraphRunIndexes(client, ref, graphId)`
|
|
47
|
+
|
|
48
|
+
Opt-in helper creating recommended compound indexes on the source collection:
|
|
49
|
+
|
|
50
|
+
- `{ "_graphRuns.<graphId>.status": 1, <idField>: 1 }`
|
|
51
|
+
- `{ "_graphRuns.<graphId>.completedAt": 1 }`
|
|
52
|
+
|
|
53
|
+
## Retrieval filters (`@x12i/memorix-retrieval`)
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
await fetchMemorixListForEntity(client, {
|
|
57
|
+
entityName: "assets",
|
|
58
|
+
contentType: "scoped", // via list descriptor driver content type
|
|
59
|
+
graphRunFilter: { graphRunNotDone: { graphId: "graph-qcrbz6t" } },
|
|
60
|
+
page: { limit: 100, offset: 0 },
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Supported facets (via `compileGraphRunFilter` / `graphRunFilter` on list requests):
|
|
65
|
+
|
|
66
|
+
| Facet | Use case |
|
|
67
|
+
|-------|----------|
|
|
68
|
+
| `graphRunStatus` | Filter by `in_progress` / `done` / `failed` |
|
|
69
|
+
| `graphRunNotDone` | Planning — absent or status ≠ `done` |
|
|
70
|
+
| `graphRunCompletedBefore` | Stale results |
|
|
71
|
+
| `graphRunFailed` | Retry candidates |
|
|
72
|
+
| `graphRunStaleVersion` | Graph version invalidation |
|
|
73
|
+
|
|
74
|
+
Read exposure:
|
|
75
|
+
|
|
76
|
+
- **List:** `includeGraphRuns: true` adds `_graphRuns` to row projection (default off).
|
|
77
|
+
- **Item:** `includeGraphRuns` defaults to **true**; response includes top-level `_graphRuns` when present.
|
|
78
|
+
|
|
79
|
+
## Error codes
|
|
80
|
+
|
|
81
|
+
| Code | When |
|
|
82
|
+
|------|------|
|
|
83
|
+
| `RECORD_NOT_FOUND` | Source record missing |
|
|
84
|
+
| `DESCRIPTOR_MISSING` | Result collection write failed |
|
|
85
|
+
| `GRAPH_RUN_STAMP_FAILED` | Transaction failed (stamp or result write) |
|
|
86
|
+
| `SYSTEM_FIELD_NOT_WRITABLE` | `_graphRuns` passed to `writeMemorixRecord` |
|
|
87
|
+
|
|
88
|
+
Log correlation shape: `{ jobRunId, graphId, recordRef, operation }`.
|
|
89
|
+
|
|
90
|
+
## References
|
|
91
|
+
|
|
92
|
+
- MRX-FRS-001 change request (Exellix consumer: EXLX-CRS-001)
|
|
93
|
+
- [MEMORIX-DATABASE-CONVENTIONS](https://github.com/x12i/memorix-retrieval/blob/main/docs/MEMORIX-DATABASE-CONVENTIONS.md)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# @x12i/memorix-writer — gap analysis
|
|
2
|
+
|
|
3
|
+
## Status: v1.0 core path complete
|
|
4
|
+
|
|
5
|
+
| Area | Status |
|
|
6
|
+
|------|--------|
|
|
7
|
+
| Descriptor-driven writes (add/upsert/patch/replace) | Done |
|
|
8
|
+
| Content upload + pointers | Done |
|
|
9
|
+
| Wired to `@x12i/memorix-descriptors/catalog` | Done |
|
|
10
|
+
| Knowledge target | Done |
|
|
11
|
+
| Write descriptor CRUD | Owned by `@x12i/memorix-descriptors` |
|
|
12
|
+
| CLI | Not planned (library-only) |
|
|
13
|
+
| Live integration tests | Optional via host env |
|
|
14
|
+
|
|
15
|
+
## Non-goals
|
|
16
|
+
|
|
17
|
+
- Descriptor admin (use `@x12i/memorix-descriptors`)
|
|
18
|
+
- List/item layout (use `@x12i/memorix-retrieval`)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/memorix-writer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Descriptor-driven write layer for Memorix entity/event records and content objects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,11 +27,8 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@x12i/catalox": "^5.1.1",
|
|
30
|
-
"@x12i/
|
|
31
|
-
"@x12i/
|
|
32
|
-
"@x12i/memorix-descriptors": "^1.6.0",
|
|
33
|
-
"@x12i/memorix-retrieval": "^1.10.0",
|
|
34
|
-
"@x12i/xronox": "^3.9.0",
|
|
30
|
+
"@x12i/memorix-descriptors": "^1.8.0",
|
|
31
|
+
"@x12i/memorix-retrieval": "^1.13.0",
|
|
35
32
|
"mongodb": "^6.21.0"
|
|
36
33
|
},
|
|
37
34
|
"devDependencies": {
|