@x12i/memorix-pipeline 1.1.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.
Files changed (62) hide show
  1. package/README.md +93 -0
  2. package/dist/association/associated-buckets.d.ts +12 -0
  3. package/dist/association/associated-buckets.d.ts.map +1 -0
  4. package/dist/association/associated-buckets.js +66 -0
  5. package/dist/association/associated-buckets.js.map +1 -0
  6. package/dist/association/association-roll-down.d.ts +33 -0
  7. package/dist/association/association-roll-down.d.ts.map +1 -0
  8. package/dist/association/association-roll-down.js +154 -0
  9. package/dist/association/association-roll-down.js.map +1 -0
  10. package/dist/graph/entity-flow-graph.d.ts +17 -0
  11. package/dist/graph/entity-flow-graph.d.ts.map +1 -0
  12. package/dist/graph/entity-flow-graph.js +79 -0
  13. package/dist/graph/entity-flow-graph.js.map +1 -0
  14. package/dist/index.d.ts +13 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +13 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/lifecycle/pipeline-lifecycle.d.ts +22 -0
  19. package/dist/lifecycle/pipeline-lifecycle.d.ts.map +1 -0
  20. package/dist/lifecycle/pipeline-lifecycle.js +82 -0
  21. package/dist/lifecycle/pipeline-lifecycle.js.map +1 -0
  22. package/dist/mongo/data-access.d.ts +17 -0
  23. package/dist/mongo/data-access.d.ts.map +1 -0
  24. package/dist/mongo/data-access.js +246 -0
  25. package/dist/mongo/data-access.js.map +1 -0
  26. package/dist/narratives/narrative-sync.d.ts +31 -0
  27. package/dist/narratives/narrative-sync.d.ts.map +1 -0
  28. package/dist/narratives/narrative-sync.js +289 -0
  29. package/dist/narratives/narrative-sync.js.map +1 -0
  30. package/dist/parts-catalog/build-catalog.d.ts +12 -0
  31. package/dist/parts-catalog/build-catalog.d.ts.map +1 -0
  32. package/dist/parts-catalog/build-catalog.js +285 -0
  33. package/dist/parts-catalog/build-catalog.js.map +1 -0
  34. package/dist/parts-catalog/index.d.ts +3 -0
  35. package/dist/parts-catalog/index.d.ts.map +1 -0
  36. package/dist/parts-catalog/index.js +2 -0
  37. package/dist/parts-catalog/index.js.map +1 -0
  38. package/dist/parts-catalog/types.d.ts +80 -0
  39. package/dist/parts-catalog/types.d.ts.map +1 -0
  40. package/dist/parts-catalog/types.js +2 -0
  41. package/dist/parts-catalog/types.js.map +1 -0
  42. package/dist/pipeline-engine.d.ts +87 -0
  43. package/dist/pipeline-engine.d.ts.map +1 -0
  44. package/dist/pipeline-engine.js +210 -0
  45. package/dist/pipeline-engine.js.map +1 -0
  46. package/dist/pipeline-job-types.d.ts +14 -0
  47. package/dist/pipeline-job-types.d.ts.map +1 -0
  48. package/dist/pipeline-job-types.js +48 -0
  49. package/dist/pipeline-job-types.js.map +1 -0
  50. package/dist/pipeline-jobs.d.ts +22 -0
  51. package/dist/pipeline-jobs.d.ts.map +1 -0
  52. package/dist/pipeline-jobs.js +27 -0
  53. package/dist/pipeline-jobs.js.map +1 -0
  54. package/dist/pipeline-stages.d.ts +44 -0
  55. package/dist/pipeline-stages.d.ts.map +1 -0
  56. package/dist/pipeline-stages.js +200 -0
  57. package/dist/pipeline-stages.js.map +1 -0
  58. package/dist/pipeline-status.d.ts +66 -0
  59. package/dist/pipeline-status.d.ts.map +1 -0
  60. package/dist/pipeline-status.js +137 -0
  61. package/dist/pipeline-status.js.map +1 -0
  62. package/package.json +54 -0
@@ -0,0 +1,82 @@
1
+ import { systemLifecycleEvent } from "@x12i/memorix-descriptors/types";
2
+ const PROCESSING_KEY = "entityPipeline";
3
+ function readSystem(record) {
4
+ const system = record._system;
5
+ return system && typeof system === "object" ? system : {};
6
+ }
7
+ function readProcessing(record) {
8
+ const system = readSystem(record);
9
+ const processing = system.processing;
10
+ if (!processing || typeof processing !== "object") {
11
+ return { lifecycle: [], routeStatuses: [] };
12
+ }
13
+ const entityPipeline = processing[PROCESSING_KEY];
14
+ if (!entityPipeline || typeof entityPipeline !== "object") {
15
+ return { lifecycle: [], routeStatuses: [] };
16
+ }
17
+ const state = entityPipeline;
18
+ return {
19
+ lifecycle: Array.isArray(state.lifecycle) ? state.lifecycle : [],
20
+ routeStatuses: Array.isArray(state.routeStatuses) ? state.routeStatuses : [],
21
+ lastRunAt: typeof state.lastRunAt === "string" ? state.lastRunAt : undefined,
22
+ graphId: typeof state.graphId === "string" ? state.graphId : undefined,
23
+ };
24
+ }
25
+ export function stampPipelineLifecycle(record, process, processedAt = new Date().toISOString()) {
26
+ const system = { ...readSystem(record) };
27
+ const lifecycle = Array.isArray(system.lifecycle)
28
+ ? [...system.lifecycle]
29
+ : [];
30
+ lifecycle.push(systemLifecycleEvent(process, processedAt));
31
+ const processing = system.processing && typeof system.processing === "object"
32
+ ? { ...system.processing }
33
+ : {};
34
+ const current = readProcessing(record);
35
+ processing[PROCESSING_KEY] = {
36
+ ...current,
37
+ lifecycle: [...current.lifecycle, { process, processedAt }],
38
+ lastRunAt: processedAt,
39
+ };
40
+ return {
41
+ ...record,
42
+ _system: {
43
+ ...system,
44
+ lifecycle,
45
+ processing,
46
+ },
47
+ };
48
+ }
49
+ export function stampRouteStatus(record, status, at = new Date().toISOString()) {
50
+ const system = { ...readSystem(record) };
51
+ const processing = system.processing && typeof system.processing === "object"
52
+ ? { ...system.processing }
53
+ : {};
54
+ const current = readProcessing(record);
55
+ const routeStatuses = current.routeStatuses.filter((entry) => entry.routeKey !== status.routeKey);
56
+ routeStatuses.push({ ...status, at });
57
+ processing[PROCESSING_KEY] = {
58
+ ...current,
59
+ routeStatuses,
60
+ lastRunAt: at,
61
+ };
62
+ return {
63
+ ...record,
64
+ _system: {
65
+ ...system,
66
+ processing,
67
+ },
68
+ };
69
+ }
70
+ export function readPipelineProcessingState(record) {
71
+ return readProcessing(record);
72
+ }
73
+ export function hasLifecycleProcess(record, process) {
74
+ const system = readSystem(record);
75
+ const lifecycle = system.lifecycle;
76
+ if (!Array.isArray(lifecycle))
77
+ return false;
78
+ return lifecycle.some((entry) => entry &&
79
+ typeof entry === "object" &&
80
+ entry.process === process);
81
+ }
82
+ //# sourceMappingURL=pipeline-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle/pipeline-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AA6BvE,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,SAAS,UAAU,CAAC,MAA+B;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9B,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAkC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,cAAc,GAAI,UAAsC,CAAC,cAAc,CAAC,CAAC;IAC/E,IAAI,CAAC,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,KAAK,GAAG,cAAyC,CAAC;IACxD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QAChE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;QAC5E,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC5E,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAA+B,EAC/B,OAAiC,EACjC,cAAsB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAE9C,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/C,CAAC,CAAC,CAAC,GAAI,MAAM,CAAC,SAA6D,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;IAEP,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3D,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACxD,CAAC,CAAC,EAAE,GAAI,MAAM,CAAC,UAAsC,EAAE;QACvD,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,UAAU,CAAC,cAAc,CAAC,GAAG;QAC3B,GAAG,OAAO;QACV,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAC3D,SAAS,EAAE,WAAW;KACW,CAAC;IAEpC,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,MAAM;YACT,SAAS;YACT,UAAU;SACX;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAA+B,EAC/B,MAAuC,EACvC,KAAa,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAErC,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IACzC,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACxD,CAAC,CAAC,EAAE,GAAI,MAAM,CAAC,UAAsC,EAAE;QACvD,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClG,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAEtC,UAAU,CAAC,cAAc,CAAC,GAAG;QAC3B,GAAG,OAAO;QACV,aAAa;QACb,SAAS,EAAE,EAAE;KACoB,CAAC;IAEpC,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,MAAM;YACT,UAAU;SACX;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAA+B;IAE/B,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA+B,EAC/B,OAAe;IAEf,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,SAAS,CAAC,IAAI,CACnB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK;QACL,OAAO,KAAK,KAAK,QAAQ;QACxB,KAA8B,CAAC,OAAO,KAAK,OAAO,CACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { MemorixEntityDescriptor } from "@x12i/memorix-descriptors/types";
2
+ import type { MongoClient } from "mongodb";
3
+ import type { PipelineDataAccess, PipelineRecordRef } from "../pipeline-engine.js";
4
+ export type CreateMongoPipelineDataAccessOptions = {
5
+ client: MongoClient;
6
+ descriptors: MemorixEntityDescriptor[];
7
+ env?: NodeJS.ProcessEnv;
8
+ };
9
+ export declare function createMongoPipelineDataAccess(options: CreateMongoPipelineDataAccessOptions): PipelineDataAccess;
10
+ export declare function pipelineRecordRefToMemorixRef(ref: PipelineRecordRef, descriptor: MemorixEntityDescriptor | undefined): {
11
+ target: "entity" | "event" | "knowledge";
12
+ entityName: string;
13
+ contentType: string;
14
+ recordId: string;
15
+ collectionName?: string;
16
+ };
17
+ //# sourceMappingURL=data-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-access.d.ts","sourceRoot":"","sources":["../../src/mongo/data-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAExB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAiDF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oCAAoC,GAC5C,kBAAkB,CA4NpB;AAED,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,uBAAuB,GAAG,SAAS,GAC9C;IACD,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAUA"}
@@ -0,0 +1,246 @@
1
+ import { getByPath, normalizeJoinValues } from "@x12i/memorix-resolvers";
2
+ function dbForObjectType(objectType, descriptor, env) {
3
+ const target = descriptor?.target ?? "entity";
4
+ if (target === "event")
5
+ return env.MEMORIX_EVENTS_DB ?? "neo-memorix-events";
6
+ if (target === "knowledge")
7
+ return env.MEMORIX_KNOWLEDGE_DB ?? "memorix-knowledge";
8
+ return env.MEMORIX_ENTITIES_DB ?? "neo-memorix-entities";
9
+ }
10
+ function resolveDbName(db, env) {
11
+ if (!db)
12
+ return env.MEMORIX_ENTITIES_DB ?? "neo-memorix-entities";
13
+ if (db === "memorix-entities")
14
+ return env.MEMORIX_ENTITIES_DB ?? "neo-memorix-entities";
15
+ if (db === "memorix-events")
16
+ return env.MEMORIX_EVENTS_DB ?? "neo-memorix-events";
17
+ if (db === "memorix-knowledge")
18
+ return env.MEMORIX_KNOWLEDGE_DB ?? "memorix-knowledge";
19
+ return db;
20
+ }
21
+ function collectionDbMap(collection, env) {
22
+ if (collection === "topology-raw") {
23
+ return env.MEMORIX_KNOWLEDGE_DB ?? "memorix-knowledge";
24
+ }
25
+ if (collection.startsWith("vulnerabilities-")) {
26
+ return env.MEMORIX_EVENTS_DB ?? "neo-memorix-events";
27
+ }
28
+ return env.MEMORIX_ENTITIES_DB ?? "neo-memorix-entities";
29
+ }
30
+ function canonicalCollection(descriptor) {
31
+ const canonicalKey = descriptor.defaults.canonicalContentType;
32
+ return descriptor.contentTypes[canonicalKey]?.collection ?? `${descriptor.collectionPrefix}-snapshots`;
33
+ }
34
+ function collectionForPostfix(descriptor, postfix) {
35
+ for (const [key, ct] of Object.entries(descriptor.contentTypes)) {
36
+ const ctPostfix = (ct.postfix ?? key).toLowerCase();
37
+ if (ctPostfix === postfix.toLowerCase()) {
38
+ return ct.collection ?? `${descriptor.collectionPrefix}-${ctPostfix}`;
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ export function createMongoPipelineDataAccess(options) {
44
+ const env = options.env ?? process.env;
45
+ const descriptorByType = new Map(options.descriptors.map((descriptor) => [descriptor.entityName, descriptor]));
46
+ const recordsCache = new Map();
47
+ const scanCache = new Map();
48
+ const sourceCache = new Map();
49
+ const relationExistenceCache = new Map();
50
+ const relationTargetsCache = new Map();
51
+ const relationTargetIndexCache = new Map();
52
+ const sideContentCache = new Map();
53
+ async function buildRelationTargetIndex(relationKey, relation) {
54
+ const targetDescriptor = descriptorByType.get(relation.targetEntity);
55
+ if (!targetDescriptor)
56
+ return new Map();
57
+ const targetCollection = canonicalCollection(targetDescriptor);
58
+ const targetDb = dbForObjectType(relation.targetEntity, targetDescriptor, env);
59
+ const indexKey = `${relationKey}::${relation.targetEntity}::${targetDb}::${targetCollection}::${relation.target.path}`;
60
+ if (relationTargetIndexCache.has(indexKey))
61
+ return relationTargetIndexCache.get(indexKey);
62
+ const docs = (await options.client
63
+ .db(targetDb)
64
+ .collection(targetCollection)
65
+ .find({})
66
+ .toArray());
67
+ const index = new Map();
68
+ for (const doc of docs) {
69
+ const data = doc.data && typeof doc.data === "object" && !Array.isArray(doc.data)
70
+ ? { ...doc.data }
71
+ : { ...doc };
72
+ const recordId = typeof doc.recordId === "string" ? doc.recordId : undefined;
73
+ const payload = recordId ? { recordId, ...data } : data;
74
+ for (const targetValue of normalizeJoinValues(getByPath(doc, relation.target.path))) {
75
+ const key = String(targetValue);
76
+ if (!index.has(key))
77
+ index.set(key, []);
78
+ index.get(key).push(payload);
79
+ }
80
+ }
81
+ relationTargetIndexCache.set(indexKey, index);
82
+ return index;
83
+ }
84
+ async function loadRelationTargetPayloads(record, relationKey, relation, sourceObjectType) {
85
+ const sourceValues = normalizeJoinValues(getByPath(record, relation.source.path));
86
+ if (sourceValues.length === 0)
87
+ return [];
88
+ const cacheKey = `${sourceObjectType}::${relationKey}::${relation.targetEntity}::${record.recordId}::${relation.source.path}`;
89
+ if (relationTargetsCache.has(cacheKey)) {
90
+ return relationTargetsCache.get(cacheKey);
91
+ }
92
+ const index = await buildRelationTargetIndex(relationKey, relation);
93
+ const out = [];
94
+ const seen = new Set();
95
+ for (const sourceValue of sourceValues) {
96
+ for (const payload of index.get(String(sourceValue)) ?? []) {
97
+ const key = JSON.stringify(payload);
98
+ if (seen.has(key))
99
+ continue;
100
+ seen.add(key);
101
+ out.push(payload);
102
+ }
103
+ }
104
+ relationTargetsCache.set(cacheKey, out);
105
+ relationExistenceCache.set(cacheKey, out.length > 0);
106
+ return out;
107
+ }
108
+ return {
109
+ async loadRecordsForObjectType(objectType, collection, filter = {}) {
110
+ const descriptor = descriptorByType.get(objectType);
111
+ const dbName = dbForObjectType(objectType, descriptor, env);
112
+ const cacheKey = `${dbName}::${collection}::${JSON.stringify(filter)}`;
113
+ if (!recordsCache.has(cacheKey)) {
114
+ const docs = await options.client
115
+ .db(dbName)
116
+ .collection(collection)
117
+ .find(filter)
118
+ .toArray();
119
+ recordsCache.set(cacheKey, docs);
120
+ }
121
+ return recordsCache.get(cacheKey);
122
+ },
123
+ async loadRecord(ref) {
124
+ const descriptor = descriptorByType.get(ref.objectType);
125
+ const dbName = ref.db ?? dbForObjectType(ref.objectType, descriptor, env);
126
+ return options.client
127
+ .db(dbName)
128
+ .collection(ref.collection)
129
+ .findOne({ recordId: ref.recordId });
130
+ },
131
+ async loadSource(sourceKey, ref) {
132
+ const dbName = resolveDbName(ref.db ?? collectionDbMap(ref.collection ?? "", env), env);
133
+ const collection = ref.collection ?? "";
134
+ if (!collection)
135
+ return null;
136
+ const cacheKey = `${sourceKey}::${dbName}::${collection}`;
137
+ if (sourceCache.has(cacheKey)) {
138
+ return sourceCache.get(cacheKey);
139
+ }
140
+ let payload;
141
+ if (collection === "topology-raw") {
142
+ const docs = await options.client.db(dbName).collection(collection).find({}).limit(1).toArray();
143
+ const doc = docs[0];
144
+ payload = doc ? (doc.data ?? doc.graph ?? doc) : null;
145
+ }
146
+ else if (collection === "topology-zones-snapshots") {
147
+ const docs = await options.client.db(dbName).collection(collection).find({}).toArray();
148
+ payload = docs.map((doc) => ({
149
+ ...(typeof doc.data === "object" && doc.data ? doc.data : {}),
150
+ name: doc.data?.name ?? doc.data?.zoneName ?? doc.concept?.title,
151
+ }));
152
+ }
153
+ else {
154
+ const docs = await options.client.db(dbName).collection(collection).find({}).limit(1).toArray();
155
+ payload = docs[0] ?? null;
156
+ }
157
+ sourceCache.set(cacheKey, payload);
158
+ return payload;
159
+ },
160
+ async *scanRecords(ref, filter = {}) {
161
+ const db = resolveDbName(ref.db, env);
162
+ const cacheKey = `${db}::${ref.collection}::${JSON.stringify(filter)}`;
163
+ if (!scanCache.has(cacheKey)) {
164
+ const docs = await options.client
165
+ .db(db)
166
+ .collection(ref.collection)
167
+ .find(filter)
168
+ .toArray();
169
+ scanCache.set(cacheKey, docs);
170
+ }
171
+ for (const doc of scanCache.get(cacheKey)) {
172
+ yield doc;
173
+ }
174
+ },
175
+ async readRecord(ref) {
176
+ const db = resolveDbName(ref.db, env);
177
+ if (ref.recordId) {
178
+ return options.client
179
+ .db(db)
180
+ .collection(ref.collection)
181
+ .findOne({ recordId: ref.recordId });
182
+ }
183
+ return null;
184
+ },
185
+ async saveRecord(ref, record) {
186
+ const descriptor = descriptorByType.get(ref.objectType);
187
+ const dbName = ref.db ?? dbForObjectType(ref.objectType, descriptor, env);
188
+ const { _id, ...payload } = record;
189
+ await options.client
190
+ .db(dbName)
191
+ .collection(ref.collection)
192
+ .updateOne({ recordId: ref.recordId }, { $set: payload });
193
+ },
194
+ resolveDbForCollection(collection) {
195
+ return collectionDbMap(collection, env);
196
+ },
197
+ async loadRelationTargets(record, relationKey, relation, sourceObjectType) {
198
+ return loadRelationTargetPayloads(record, relationKey, relation, sourceObjectType);
199
+ },
200
+ async hasRelationTargets(record, relationKey, relation, sourceObjectType) {
201
+ const cacheKey = `${sourceObjectType}::${relationKey}::${relation.targetEntity}::${record.recordId}::${relation.source.path}`;
202
+ if (relationExistenceCache.has(cacheKey)) {
203
+ return relationExistenceCache.get(cacheKey);
204
+ }
205
+ const result = (await loadRelationTargetPayloads(record, relationKey, relation, sourceObjectType))
206
+ .length > 0;
207
+ relationExistenceCache.set(cacheKey, result);
208
+ return result;
209
+ },
210
+ async hasSideContent(record, contentPostfix, objectType) {
211
+ const recordId = typeof record.recordId === "string" ? record.recordId : "";
212
+ if (!recordId)
213
+ return false;
214
+ const descriptor = descriptorByType.get(objectType);
215
+ if (!descriptor)
216
+ return false;
217
+ const collection = collectionForPostfix(descriptor, contentPostfix);
218
+ if (!collection)
219
+ return false;
220
+ const cacheKey = `${objectType}::${contentPostfix}::${recordId}`;
221
+ if (sideContentCache.has(cacheKey)) {
222
+ return sideContentCache.get(cacheKey);
223
+ }
224
+ const dbName = dbForObjectType(objectType, descriptor, env);
225
+ const hit = await options.client
226
+ .db(dbName)
227
+ .collection(collection)
228
+ .findOne({ recordId }, { projection: { recordId: 1 } });
229
+ const result = Boolean(hit);
230
+ sideContentCache.set(cacheKey, result);
231
+ return result;
232
+ },
233
+ };
234
+ }
235
+ export function pipelineRecordRefToMemorixRef(ref, descriptor) {
236
+ const target = (descriptor?.target ?? "entity");
237
+ const canonical = descriptor?.defaults.canonicalContentType ?? "snapshots";
238
+ return {
239
+ target,
240
+ entityName: ref.objectType,
241
+ contentType: canonical,
242
+ recordId: ref.recordId,
243
+ collectionName: ref.collection,
244
+ };
245
+ }
246
+ //# sourceMappingURL=data-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-access.js","sourceRoot":"","sources":["../../src/mongo/data-access.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { MemorixEntityDescriptor, MemorixHavingNarrativeSignal, MemorixRelationDescriptor } from "@x12i/memorix-descriptors/types";
2
+ import { NARRATIVE_SYNC_DETECTED_BY } from "@x12i/memorix-descriptors";
3
+ export type NarrativeSyncResult = {
4
+ add: string[];
5
+ remove: string[];
6
+ evaluated: Record<string, boolean>;
7
+ signals: MemorixHavingNarrativeSignal[];
8
+ details?: Record<string, NarrativeTagDetails>;
9
+ };
10
+ export type EvaluateHavingNarrativesOptions = {
11
+ dataAccess?: NarrativeSyncDataAccess;
12
+ descriptors?: MemorixEntityDescriptor[];
13
+ };
14
+ export type NarrativeSyncDataAccess = {
15
+ hasRelationTargets?: (record: Record<string, unknown>, relationKey: string, relation: MemorixRelationDescriptor) => Promise<boolean>;
16
+ hasSideContent?: (record: Record<string, unknown>, contentPostfix: string) => Promise<boolean>;
17
+ loadRelationTargets?: (record: Record<string, unknown>, relationKey: string, relation: MemorixRelationDescriptor) => Promise<Array<Record<string, unknown>>>;
18
+ };
19
+ type NarrativeTagDetails = {
20
+ addedAt?: string;
21
+ detectedBy?: string;
22
+ kind?: "having-signal" | "association-common-property";
23
+ sourceRef?: string;
24
+ property?: string;
25
+ value?: string;
26
+ targetEntity?: string;
27
+ };
28
+ export declare function evaluateHavingNarratives(record: Record<string, unknown>, descriptor: MemorixEntityDescriptor, dataAccessOrOptions?: NarrativeSyncDataAccess | EvaluateHavingNarrativesOptions): Promise<NarrativeSyncResult>;
29
+ export declare function applyNarrativeSync(record: Record<string, unknown>, result: Pick<NarrativeSyncResult, "add" | "remove" | "details">, now?: string): Record<string, unknown>;
30
+ export { NARRATIVE_SYNC_DETECTED_BY };
31
+ //# sourceMappingURL=narrative-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrative-sync.d.ts","sourceRoot":"","sources":["../../src/narratives/narrative-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,0BAA0B,EAU3B,MAAM,2BAA2B,CAAC;AAInC,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,kBAAkB,CAAC,EAAE,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,yBAAyB,KAChC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,cAAc,EAAE,MAAM,KACnB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,yBAAyB,KAChC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,eAAe,GAAG,6BAA6B,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwLF,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,uBAAuB,EACnC,mBAAmB,CAAC,EAAE,uBAAuB,GAAG,+BAA+B,GAC9E,OAAO,CAAC,mBAAmB,CAAC,CA2G9B;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC,EAC/D,GAAG,GAAE,MAAiC,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BzB;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}