@x12i/memorix-retrieval 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.
- package/README.md +124 -0
- package/catalox-seeds/inputs/entity-descriptors/assets.json +296 -0
- package/catalox-seeds/inputs/entity-descriptors/variabilities-groups.json +312 -0
- package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +419 -0
- package/catalox-seeds/inputs/item-descriptors/asset-detail-item.json +85 -0
- package/catalox-seeds/inputs/item-descriptors/variabilities-group-detail-item.json +87 -0
- package/catalox-seeds/inputs/item-descriptors/vulnerability-detail-item.json +106 -0
- package/catalox-seeds/inputs/list-descriptors/assets-main-list.json +46 -0
- package/catalox-seeds/inputs/list-descriptors/critical-vulnerabilities-list.json +44 -0
- package/catalox-seeds/inputs/list-descriptors/variabilities-groups-main-list.json +43 -0
- package/catalox-seeds/inputs/list-descriptors/vulnerabilities-main-list.json +47 -0
- package/catalox-seeds/inputs/manifest.json +44 -0
- package/catalox-seeds/inputs/memorix-catalog-ids.json +8 -0
- package/catalox-seeds/inputs/memorix-descriptors.bundle.json +1502 -0
- package/catalox-seeds/inputs/memorix-entity-descriptors.catalog.json +1029 -0
- package/catalox-seeds/inputs/memorix-entity-descriptors.items.json +1026 -0
- package/catalox-seeds/inputs/memorix-item-descriptors.catalog.json +283 -0
- package/catalox-seeds/inputs/memorix-item-descriptors.items.json +280 -0
- package/catalox-seeds/inputs/memorix-list-descriptors.catalog.json +185 -0
- package/catalox-seeds/inputs/memorix-list-descriptors.items.json +182 -0
- package/catalox-seeds/inputs/scope.json +4 -0
- package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +1844 -0
- package/dist/client/catalox-like.d.ts +16 -0
- package/dist/client/catalox-like.d.ts.map +1 -0
- package/dist/client/catalox-like.js +2 -0
- package/dist/client/catalox-like.js.map +1 -0
- package/dist/client/create-client.d.ts +3 -0
- package/dist/client/create-client.d.ts.map +1 -0
- package/dist/client/create-client.js +50 -0
- package/dist/client/create-client.js.map +1 -0
- package/dist/client/create-from-env.d.ts +3 -0
- package/dist/client/create-from-env.d.ts.map +1 -0
- package/dist/client/create-from-env.js +10 -0
- package/dist/client/create-from-env.js.map +1 -0
- package/dist/client/types.d.ts +109 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/xronox-like.d.ts +18 -0
- package/dist/client/xronox-like.d.ts.map +1 -0
- package/dist/client/xronox-like.js +2 -0
- package/dist/client/xronox-like.js.map +1 -0
- package/dist/content/fetch-content-object.d.ts +16 -0
- package/dist/content/fetch-content-object.d.ts.map +1 -0
- package/dist/content/fetch-content-object.js +54 -0
- package/dist/content/fetch-content-object.js.map +1 -0
- package/dist/content/map-content-errors.d.ts +5 -0
- package/dist/content/map-content-errors.d.ts.map +1 -0
- package/dist/content/map-content-errors.js +39 -0
- package/dist/content/map-content-errors.js.map +1 -0
- package/dist/content/memorix-content-object.d.ts +21 -0
- package/dist/content/memorix-content-object.d.ts.map +1 -0
- package/dist/content/memorix-content-object.js +54 -0
- package/dist/content/memorix-content-object.js.map +1 -0
- package/dist/content/resolve-content-config.d.ts +19 -0
- package/dist/content/resolve-content-config.d.ts.map +1 -0
- package/dist/content/resolve-content-config.js +37 -0
- package/dist/content/resolve-content-config.js.map +1 -0
- package/dist/data/collection-name.d.ts +4 -0
- package/dist/data/collection-name.d.ts.map +1 -0
- package/dist/data/collection-name.js +23 -0
- package/dist/data/collection-name.js.map +1 -0
- package/dist/data/identity.d.ts +36 -0
- package/dist/data/identity.d.ts.map +1 -0
- package/dist/data/identity.js +68 -0
- package/dist/data/identity.js.map +1 -0
- package/dist/data/memorix-read.d.ts +17 -0
- package/dist/data/memorix-read.d.ts.map +1 -0
- package/dist/data/memorix-read.js +55 -0
- package/dist/data/memorix-read.js.map +1 -0
- package/dist/data/multi-match.d.ts +16 -0
- package/dist/data/multi-match.d.ts.map +1 -0
- package/dist/data/multi-match.js +65 -0
- package/dist/data/multi-match.js.map +1 -0
- package/dist/data/path.d.ts +3 -0
- package/dist/data/path.d.ts.map +1 -0
- package/dist/data/path.js +23 -0
- package/dist/data/path.js.map +1 -0
- package/dist/data/xronox-read.d.ts +13 -0
- package/dist/data/xronox-read.d.ts.map +1 -0
- package/dist/data/xronox-read.js +34 -0
- package/dist/data/xronox-read.js.map +1 -0
- package/dist/descriptors/catalog-ids.d.ts +5 -0
- package/dist/descriptors/catalog-ids.d.ts.map +1 -0
- package/dist/descriptors/catalog-ids.js +5 -0
- package/dist/descriptors/catalog-ids.js.map +1 -0
- package/dist/descriptors/descriptor-types.d.ts +187 -0
- package/dist/descriptors/descriptor-types.d.ts.map +1 -0
- package/dist/descriptors/descriptor-types.js +2 -0
- package/dist/descriptors/descriptor-types.js.map +1 -0
- package/dist/descriptors/load-entity-descriptor.d.ts +4 -0
- package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-entity-descriptor.js +15 -0
- package/dist/descriptors/load-entity-descriptor.js.map +1 -0
- package/dist/descriptors/load-item-descriptor.d.ts +4 -0
- package/dist/descriptors/load-item-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-item-descriptor.js +15 -0
- package/dist/descriptors/load-item-descriptor.js.map +1 -0
- package/dist/descriptors/load-list-descriptor.d.ts +4 -0
- package/dist/descriptors/load-list-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-list-descriptor.js +15 -0
- package/dist/descriptors/load-list-descriptor.js.map +1 -0
- package/dist/descriptors/validate-descriptor.d.ts +7 -0
- package/dist/descriptors/validate-descriptor.d.ts.map +1 -0
- package/dist/descriptors/validate-descriptor.js +80 -0
- package/dist/descriptors/validate-descriptor.js.map +1 -0
- package/dist/errors/errors.d.ts +6 -0
- package/dist/errors/errors.d.ts.map +1 -0
- package/dist/errors/errors.js +12 -0
- package/dist/errors/errors.js.map +1 -0
- package/dist/errors/issues.d.ts +14 -0
- package/dist/errors/issues.d.ts.map +1 -0
- package/dist/errors/issues.js +7 -0
- package/dist/errors/issues.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/mongo/connection.d.ts +3 -0
- package/dist/mongo/connection.d.ts.map +1 -0
- package/dist/mongo/connection.js +8 -0
- package/dist/mongo/connection.js.map +1 -0
- package/dist/mongo/env.d.ts +6 -0
- package/dist/mongo/env.d.ts.map +1 -0
- package/dist/mongo/env.js +33 -0
- package/dist/mongo/env.js.map +1 -0
- package/dist/mongo/read-collection.d.ts +14 -0
- package/dist/mongo/read-collection.d.ts.map +1 -0
- package/dist/mongo/read-collection.js +45 -0
- package/dist/mongo/read-collection.js.map +1 -0
- package/dist/mongo/resolve-db.d.ts +6 -0
- package/dist/mongo/resolve-db.d.ts.map +1 -0
- package/dist/mongo/resolve-db.js +9 -0
- package/dist/mongo/resolve-db.js.map +1 -0
- package/dist/mongo/types.d.ts +2 -0
- package/dist/mongo/types.d.ts.map +1 -0
- package/dist/mongo/types.js +2 -0
- package/dist/mongo/types.js.map +1 -0
- package/dist/relations/fetch-relation.d.ts +5 -0
- package/dist/relations/fetch-relation.d.ts.map +1 -0
- package/dist/relations/fetch-relation.js +57 -0
- package/dist/relations/fetch-relation.js.map +1 -0
- package/dist/relations/resolve-relations.d.ts +6 -0
- package/dist/relations/resolve-relations.d.ts.map +1 -0
- package/dist/relations/resolve-relations.js +20 -0
- package/dist/relations/resolve-relations.js.map +1 -0
- package/dist/retrieval/batch-fetch.d.ts +11 -0
- package/dist/retrieval/batch-fetch.d.ts.map +1 -0
- package/dist/retrieval/batch-fetch.js +80 -0
- package/dist/retrieval/batch-fetch.js.map +1 -0
- package/dist/retrieval/compose-item.d.ts +11 -0
- package/dist/retrieval/compose-item.d.ts.map +1 -0
- package/dist/retrieval/compose-item.js +18 -0
- package/dist/retrieval/compose-item.js.map +1 -0
- package/dist/retrieval/compose-row.d.ts +4 -0
- package/dist/retrieval/compose-row.d.ts.map +1 -0
- package/dist/retrieval/compose-row.js +14 -0
- package/dist/retrieval/compose-row.js.map +1 -0
- package/dist/retrieval/fetch-item.d.ts +3 -0
- package/dist/retrieval/fetch-item.d.ts.map +1 -0
- package/dist/retrieval/fetch-item.js +107 -0
- package/dist/retrieval/fetch-item.js.map +1 -0
- package/dist/retrieval/fetch-list.d.ts +3 -0
- package/dist/retrieval/fetch-list.d.ts.map +1 -0
- package/dist/retrieval/fetch-list.js +148 -0
- package/dist/retrieval/fetch-list.js.map +1 -0
- package/dist/retrieval/resolve-fields.d.ts +10 -0
- package/dist/retrieval/resolve-fields.d.ts.map +1 -0
- package/dist/retrieval/resolve-fields.js +52 -0
- package/dist/retrieval/resolve-fields.js.map +1 -0
- package/dist/retrieval/resolve-filters.d.ts +3 -0
- package/dist/retrieval/resolve-filters.d.ts.map +1 -0
- package/dist/retrieval/resolve-filters.js +57 -0
- package/dist/retrieval/resolve-filters.js.map +1 -0
- package/dist/retrieval/resolve-pagination-driver.d.ts +6 -0
- package/dist/retrieval/resolve-pagination-driver.d.ts.map +1 -0
- package/dist/retrieval/resolve-pagination-driver.js +22 -0
- package/dist/retrieval/resolve-pagination-driver.js.map +1 -0
- package/dist/retrieval/resolve-property-source.d.ts +10 -0
- package/dist/retrieval/resolve-property-source.d.ts.map +1 -0
- package/dist/retrieval/resolve-property-source.js +48 -0
- package/dist/retrieval/resolve-property-source.js.map +1 -0
- package/dist/retrieval/resolve-sort.d.ts +14 -0
- package/dist/retrieval/resolve-sort.d.ts.map +1 -0
- package/dist/retrieval/resolve-sort.js +28 -0
- package/dist/retrieval/resolve-sort.js.map +1 -0
- package/dist/tests/collection-env.test.d.ts +2 -0
- package/dist/tests/collection-env.test.d.ts.map +1 -0
- package/dist/tests/collection-env.test.js +44 -0
- package/dist/tests/collection-env.test.js.map +1 -0
- package/dist/tests/content-object.test.d.ts +2 -0
- package/dist/tests/content-object.test.d.ts.map +1 -0
- package/dist/tests/content-object.test.js +39 -0
- package/dist/tests/content-object.test.js.map +1 -0
- package/dist/tests/descriptor-validation.test.d.ts +2 -0
- package/dist/tests/descriptor-validation.test.d.ts.map +1 -0
- package/dist/tests/descriptor-validation.test.js +25 -0
- package/dist/tests/descriptor-validation.test.js.map +1 -0
- package/dist/tests/env.test.d.ts +2 -0
- package/dist/tests/env.test.d.ts.map +1 -0
- package/dist/tests/env.test.js +17 -0
- package/dist/tests/env.test.js.map +1 -0
- package/dist/tests/fetch-item.test.d.ts +2 -0
- package/dist/tests/fetch-item.test.d.ts.map +1 -0
- package/dist/tests/fetch-item.test.js +86 -0
- package/dist/tests/fetch-item.test.js.map +1 -0
- package/dist/tests/fetch-list.test.d.ts +2 -0
- package/dist/tests/fetch-list.test.d.ts.map +1 -0
- package/dist/tests/fetch-list.test.js +85 -0
- package/dist/tests/fetch-list.test.js.map +1 -0
- package/dist/tests/fixtures.d.ts +5 -0
- package/dist/tests/fixtures.d.ts.map +1 -0
- package/dist/tests/fixtures.js +137 -0
- package/dist/tests/fixtures.js.map +1 -0
- package/dist/tests/identity.test.d.ts +2 -0
- package/dist/tests/identity.test.d.ts.map +1 -0
- package/dist/tests/identity.test.js +32 -0
- package/dist/tests/identity.test.js.map +1 -0
- package/dist/tests/multi-match.test.d.ts +2 -0
- package/dist/tests/multi-match.test.d.ts.map +1 -0
- package/dist/tests/multi-match.test.js +31 -0
- package/dist/tests/multi-match.test.js.map +1 -0
- package/dist/tests/read-collection.test.d.ts +2 -0
- package/dist/tests/read-collection.test.d.ts.map +1 -0
- package/dist/tests/read-collection.test.js +19 -0
- package/dist/tests/read-collection.test.js.map +1 -0
- package/dist/tests/relations.test.d.ts +2 -0
- package/dist/tests/relations.test.d.ts.map +1 -0
- package/dist/tests/relations.test.js +77 -0
- package/dist/tests/relations.test.js.map +1 -0
- package/docs/MEMORIX-DATABASE-CONVENTIONS.md +325 -0
- package/package.json +52 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { throwRetrievalError } from "../errors/errors.js";
|
|
2
|
+
import { MEMORIX_ENTITY_DESCRIPTORS_CATALOG } from "./catalog-ids.js";
|
|
3
|
+
import { parseDescriptorData, validateMemorixEntityDescriptor, } from "./validate-descriptor.js";
|
|
4
|
+
export async function loadMemorixEntityDescriptor(client, entityDescriptorId) {
|
|
5
|
+
const result = await client.catalox.getCatalogItem({ appId: client.appId }, MEMORIX_ENTITY_DESCRIPTORS_CATALOG, entityDescriptorId);
|
|
6
|
+
if (result.outcome === "not_found") {
|
|
7
|
+
throwRetrievalError("UNKNOWN_ENTITY_DESCRIPTOR", `Unknown entity descriptor: ${entityDescriptorId}`);
|
|
8
|
+
}
|
|
9
|
+
if (result.outcome === "mapping_blocked") {
|
|
10
|
+
throwRetrievalError("DESCRIPTOR_MAPPING_BLOCKED", `Entity descriptor mapping blocked: ${entityDescriptorId}`);
|
|
11
|
+
}
|
|
12
|
+
const data = parseDescriptorData(result.item.data);
|
|
13
|
+
return validateMemorixEntityDescriptor(data);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=load-entity-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-entity-descriptor.js","sourceRoot":"","sources":["../../src/descriptors/load-entity-descriptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kCAAkC,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EACL,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAA8B,EAC9B,kBAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAChD,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EACvB,kCAAkC,EAClC,kBAAkB,CACnB,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,mBAAmB,CACjB,2BAA2B,EAC3B,8BAA8B,kBAAkB,EAAE,CACnD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACzC,mBAAmB,CACjB,4BAA4B,EAC5B,sCAAsC,kBAAkB,EAAE,CAC3D,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,+BAA+B,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MemorixRetrievalClient } from "../client/types.js";
|
|
2
|
+
import type { MemorixItemDescriptor } from "./descriptor-types.js";
|
|
3
|
+
export declare function loadMemorixItemDescriptor(client: MemorixRetrievalClient, itemDescriptorId: string): Promise<MemorixItemDescriptor>;
|
|
4
|
+
//# sourceMappingURL=load-item-descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-item-descriptor.d.ts","sourceRoot":"","sources":["../../src/descriptors/load-item-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAMnE,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAoBhC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { throwRetrievalError } from "../errors/errors.js";
|
|
2
|
+
import { MEMORIX_ITEM_DESCRIPTORS_CATALOG } from "./catalog-ids.js";
|
|
3
|
+
import { parseDescriptorData, validateMemorixItemDescriptor, } from "./validate-descriptor.js";
|
|
4
|
+
export async function loadMemorixItemDescriptor(client, itemDescriptorId) {
|
|
5
|
+
const result = await client.catalox.getCatalogItem({ appId: client.appId }, MEMORIX_ITEM_DESCRIPTORS_CATALOG, itemDescriptorId);
|
|
6
|
+
if (result.outcome === "not_found") {
|
|
7
|
+
throwRetrievalError("UNKNOWN_ITEM_DESCRIPTOR", `Unknown itemDescriptorId: ${itemDescriptorId}`);
|
|
8
|
+
}
|
|
9
|
+
if (result.outcome === "mapping_blocked") {
|
|
10
|
+
throwRetrievalError("DESCRIPTOR_MAPPING_BLOCKED", `Item descriptor mapping blocked: ${itemDescriptorId}`);
|
|
11
|
+
}
|
|
12
|
+
const data = parseDescriptorData(result.item.data);
|
|
13
|
+
return validateMemorixItemDescriptor(data);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=load-item-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-item-descriptor.js","sourceRoot":"","sources":["../../src/descriptors/load-item-descriptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAA8B,EAC9B,gBAAwB;IAExB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAChD,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EACvB,gCAAgC,EAChC,gBAAgB,CACjB,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,mBAAmB,CACjB,yBAAyB,EACzB,6BAA6B,gBAAgB,EAAE,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACzC,mBAAmB,CACjB,4BAA4B,EAC5B,oCAAoC,gBAAgB,EAAE,CACvD,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MemorixRetrievalClient } from "../client/types.js";
|
|
2
|
+
import type { MemorixListDescriptor } from "./descriptor-types.js";
|
|
3
|
+
export declare function loadMemorixListDescriptor(client: MemorixRetrievalClient, listId: string): Promise<MemorixListDescriptor>;
|
|
4
|
+
//# sourceMappingURL=load-list-descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-list-descriptor.d.ts","sourceRoot":"","sources":["../../src/descriptors/load-list-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAMnE,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC,CAiBhC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { throwRetrievalError } from "../errors/errors.js";
|
|
2
|
+
import { MEMORIX_LIST_DESCRIPTORS_CATALOG } from "./catalog-ids.js";
|
|
3
|
+
import { parseDescriptorData, validateMemorixListDescriptor, } from "./validate-descriptor.js";
|
|
4
|
+
export async function loadMemorixListDescriptor(client, listId) {
|
|
5
|
+
const result = await client.catalox.getCatalogItem({ appId: client.appId }, MEMORIX_LIST_DESCRIPTORS_CATALOG, listId);
|
|
6
|
+
if (result.outcome === "not_found") {
|
|
7
|
+
throwRetrievalError("UNKNOWN_LIST", `Unknown listId: ${listId}`);
|
|
8
|
+
}
|
|
9
|
+
if (result.outcome === "mapping_blocked") {
|
|
10
|
+
throwRetrievalError("DESCRIPTOR_MAPPING_BLOCKED", `List descriptor mapping blocked: ${listId}`);
|
|
11
|
+
}
|
|
12
|
+
const data = parseDescriptorData(result.item.data);
|
|
13
|
+
return validateMemorixListDescriptor(data);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=load-list-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-list-descriptor.js","sourceRoot":"","sources":["../../src/descriptors/load-list-descriptor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAA8B,EAC9B,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAChD,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EACvB,gCAAgC,EAChC,MAAM,CACP,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,mBAAmB,CAAC,cAAc,EAAE,mBAAmB,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACzC,mBAAmB,CACjB,4BAA4B,EAC5B,oCAAoC,MAAM,EAAE,CAC7C,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MemorixEntityDescriptor, MemorixItemDescriptor, MemorixListDescriptor } from "./descriptor-types.js";
|
|
2
|
+
export declare function validateMemorixEntityDescriptor(raw: Record<string, unknown>): MemorixEntityDescriptor;
|
|
3
|
+
export declare function validateMemorixListDescriptor(raw: Record<string, unknown>): MemorixListDescriptor;
|
|
4
|
+
export declare function validateMemorixItemDescriptor(raw: Record<string, unknown>): MemorixItemDescriptor;
|
|
5
|
+
export declare function assertListFieldsHumanReadable(list: MemorixListDescriptor, entity: MemorixEntityDescriptor): void;
|
|
6
|
+
export declare function parseDescriptorData(data: unknown): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=validate-descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-descriptor.d.ts","sourceRoot":"","sources":["../../src/descriptors/validate-descriptor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAS/B,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,uBAAuB,CAoCzB;AAmBD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,qBAAqB,CAkBvB;AAED,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,qBAAqB,CAkBvB;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,uBAAuB,GAC9B,IAAI,CAgBN;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE1E"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { throwRetrievalError } from "../errors/errors.js";
|
|
2
|
+
function assertObject(value, label) {
|
|
3
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
4
|
+
throwRetrievalError("INVALID_DESCRIPTOR", `${label} must be an object`);
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
export function validateMemorixEntityDescriptor(raw) {
|
|
9
|
+
const d = raw;
|
|
10
|
+
if (!d.id || !d.entityName || !d.collectionPrefix) {
|
|
11
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Entity descriptor requires id, entityName, collectionPrefix");
|
|
12
|
+
}
|
|
13
|
+
if (d.target && d.target !== "entity" && d.target !== "event") {
|
|
14
|
+
throwRetrievalError("INVALID_DESCRIPTOR", 'Entity descriptor target must be "entity" or "event"');
|
|
15
|
+
}
|
|
16
|
+
if (!d.defaults?.canonicalContentType || !d.defaults?.dataRoot) {
|
|
17
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Entity descriptor requires defaults.canonicalContentType and dataRoot");
|
|
18
|
+
}
|
|
19
|
+
if (!d.contentTypes || typeof d.contentTypes !== "object") {
|
|
20
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Entity descriptor requires contentTypes");
|
|
21
|
+
}
|
|
22
|
+
if (!d.properties || typeof d.properties !== "object") {
|
|
23
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Entity descriptor requires properties");
|
|
24
|
+
}
|
|
25
|
+
for (const prop of Object.values(d.properties)) {
|
|
26
|
+
validatePropertyDescriptor(prop);
|
|
27
|
+
}
|
|
28
|
+
return d;
|
|
29
|
+
}
|
|
30
|
+
function validatePropertyDescriptor(prop) {
|
|
31
|
+
if (!prop.label || !prop.source?.contentType || !prop.source?.path) {
|
|
32
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Property descriptor requires label and source");
|
|
33
|
+
}
|
|
34
|
+
if (prop.content?.enabled) {
|
|
35
|
+
if (prop.content.listBehavior?.fetchContent !== false) {
|
|
36
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Content listBehavior.fetchContent must be false");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function validateMemorixListDescriptor(raw) {
|
|
41
|
+
const d = raw;
|
|
42
|
+
if (!d.id || !d.entity || !d.leadingContentType) {
|
|
43
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "List descriptor requires id, entity, leadingContentType");
|
|
44
|
+
}
|
|
45
|
+
if (!d.pagination?.defaultLimit || !d.pagination?.maxLimit) {
|
|
46
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "List descriptor requires pagination limits");
|
|
47
|
+
}
|
|
48
|
+
if (!Array.isArray(d.fields) || d.fields.length === 0) {
|
|
49
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "List descriptor requires fields");
|
|
50
|
+
}
|
|
51
|
+
return d;
|
|
52
|
+
}
|
|
53
|
+
export function validateMemorixItemDescriptor(raw) {
|
|
54
|
+
const d = raw;
|
|
55
|
+
if (!d.id || !d.entity || !d.identity?.idField) {
|
|
56
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Item descriptor requires id, entity, identity.idField");
|
|
57
|
+
}
|
|
58
|
+
if (!Array.isArray(d.contentTypes) || d.contentTypes.length === 0) {
|
|
59
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Item descriptor requires contentTypes");
|
|
60
|
+
}
|
|
61
|
+
if (!Array.isArray(d.sections) || d.sections.length === 0) {
|
|
62
|
+
throwRetrievalError("INVALID_DESCRIPTOR", "Item descriptor requires sections");
|
|
63
|
+
}
|
|
64
|
+
return d;
|
|
65
|
+
}
|
|
66
|
+
export function assertListFieldsHumanReadable(list, entity) {
|
|
67
|
+
for (const field of list.fields) {
|
|
68
|
+
const prop = entity.properties[field];
|
|
69
|
+
if (!prop) {
|
|
70
|
+
throwRetrievalError("UNKNOWN_FIELD", `List field "${field}" is not defined on entity "${entity.id}"`);
|
|
71
|
+
}
|
|
72
|
+
if (!prop.humanReadable) {
|
|
73
|
+
throwRetrievalError("NON_HUMAN_READABLE_LIST_FIELD", `List field "${field}" must have humanReadable=true`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function parseDescriptorData(data) {
|
|
78
|
+
return assertObject(data, "descriptor data");
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=validate-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-descriptor.js","sourceRoot":"","sources":["../../src/descriptors/validate-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAExE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class MemorixRetrievalError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "MemorixRetrievalError";
|
|
6
|
+
this.code = code;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function throwRetrievalError(code, message) {
|
|
10
|
+
throw new MemorixRetrievalError(code, message);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAe;IAC/D,MAAM,IAAI,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type MemorixRetrievalIssueCode = "MISSING_DESCRIPTOR" | "INVALID_IDENTITY" | "MISSING_CONTENT_OBJECT" | "MISSING_CONTENT_KEY" | "CONTENT_TOO_LARGE" | "CONTENT_NOT_FOUND" | "CONTENT_PERMISSION_DENIED" | "EXTENSION_MISSING" | "MULTI_MATCH_ERROR" | "RELATION_FETCH_FAILED";
|
|
2
|
+
export type MemorixRetrievalIssue = {
|
|
3
|
+
code: MemorixRetrievalIssueCode;
|
|
4
|
+
message: string;
|
|
5
|
+
severity: "info" | "warning" | "error";
|
|
6
|
+
path?: string;
|
|
7
|
+
entityId?: string;
|
|
8
|
+
eventId?: string;
|
|
9
|
+
details?: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
export declare function createIssue(partial: Omit<MemorixRetrievalIssue, "severity"> & {
|
|
12
|
+
severity?: MemorixRetrievalIssue["severity"];
|
|
13
|
+
}): MemorixRetrievalIssue;
|
|
14
|
+
//# sourceMappingURL=issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/errors/issues.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACjC,oBAAoB,GACpB,kBAAkB,GAClB,wBAAwB,GACxB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,2BAA2B,GAC3B,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,wBAAgB,WAAW,CACzB,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAA;CAAE,GAClG,qBAAqB,CAKvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/errors/issues.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,WAAW,CACzB,OAAmG;IAEnG,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;QACrC,GAAG,OAAO;KACX,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { createMemorixRetrieval } from "./client/create-client.js";
|
|
2
|
+
export { createMemorixRetrievalFromEnv } from "./client/create-from-env.js";
|
|
3
|
+
export { fetchMemorixList } from "./retrieval/fetch-list.js";
|
|
4
|
+
export { fetchMemorixItem } from "./retrieval/fetch-item.js";
|
|
5
|
+
export { loadMemorixEntityDescriptor } from "./descriptors/load-entity-descriptor.js";
|
|
6
|
+
export { loadMemorixListDescriptor } from "./descriptors/load-list-descriptor.js";
|
|
7
|
+
export { loadMemorixItemDescriptor } from "./descriptors/load-item-descriptor.js";
|
|
8
|
+
export { resolveMemorixCollectionName } from "./data/collection-name.js";
|
|
9
|
+
export { memorixRead, memorixXronoxRead, resolveMemorixXronoxRole, DEFAULT_MEMORIX_XRONOX_ROLES, } from "./data/memorix-read.js";
|
|
10
|
+
export { resolveMemorixDbName, resolveDefaultSourceDbName, resolveMongoUri, targetCollectionEnvKey, } from "./mongo/env.js";
|
|
11
|
+
export { connectMemorixMongo } from "./mongo/connection.js";
|
|
12
|
+
export { readMemorixCollection } from "./mongo/read-collection.js";
|
|
13
|
+
export { resolveEntityTarget, resolveMemorixDbNameForEntity, } from "./mongo/resolve-db.js";
|
|
14
|
+
export type { MemorixTarget } from "./mongo/types.js";
|
|
15
|
+
export { resolveMemorixPropertySource, readPropertyValue, } from "./retrieval/resolve-property-source.js";
|
|
16
|
+
export { resolveMemorixContentObject, shapeContentForList, shapeContentForItem, type MemorixContentObject, } from "./content/memorix-content-object.js";
|
|
17
|
+
export { fetchMemorixContentObject } from "./content/fetch-content-object.js";
|
|
18
|
+
export type { CataloxLike, ContentReaders, CreateMemorixRetrievalFromEnvOptions, CreateMemorixRetrievalOptions, FetchMemorixListRequest, FetchMemorixListResponse, FetchMemorixItemRequest, FetchMemorixItemResponse, MemorixRetrievalClient, XronoxLike, } from "./client/types.js";
|
|
19
|
+
export type { MemorixEntityDescriptor, MemorixListDescriptor, MemorixItemDescriptor, MemorixFilterInput, MemorixContentExtensionDescriptor, MemorixRelationDescriptor, MemorixRelationIncludeDescriptor, MemorixPropertyDescriptor, MemorixContentTypeDescriptor, } from "./descriptors/descriptor-types.js";
|
|
20
|
+
export type { MemorixRetrievalIssue } from "./errors/issues.js";
|
|
21
|
+
export { MemorixRetrievalError } from "./errors/errors.js";
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAElF,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,YAAY,EACV,WAAW,EACX,cAAc,EACd,oCAAoC,EACpC,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,mCAAmC,CAAC;AAE3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { createMemorixRetrieval } from "./client/create-client.js";
|
|
2
|
+
export { createMemorixRetrievalFromEnv } from "./client/create-from-env.js";
|
|
3
|
+
export { fetchMemorixList } from "./retrieval/fetch-list.js";
|
|
4
|
+
export { fetchMemorixItem } from "./retrieval/fetch-item.js";
|
|
5
|
+
export { loadMemorixEntityDescriptor } from "./descriptors/load-entity-descriptor.js";
|
|
6
|
+
export { loadMemorixListDescriptor } from "./descriptors/load-list-descriptor.js";
|
|
7
|
+
export { loadMemorixItemDescriptor } from "./descriptors/load-item-descriptor.js";
|
|
8
|
+
export { resolveMemorixCollectionName } from "./data/collection-name.js";
|
|
9
|
+
export { memorixRead, memorixXronoxRead, resolveMemorixXronoxRole, DEFAULT_MEMORIX_XRONOX_ROLES, } from "./data/memorix-read.js";
|
|
10
|
+
export { resolveMemorixDbName, resolveDefaultSourceDbName, resolveMongoUri, targetCollectionEnvKey, } from "./mongo/env.js";
|
|
11
|
+
export { connectMemorixMongo } from "./mongo/connection.js";
|
|
12
|
+
export { readMemorixCollection } from "./mongo/read-collection.js";
|
|
13
|
+
export { resolveEntityTarget, resolveMemorixDbNameForEntity, } from "./mongo/resolve-db.js";
|
|
14
|
+
export { resolveMemorixPropertySource, readPropertyValue, } from "./retrieval/resolve-property-source.js";
|
|
15
|
+
export { resolveMemorixContentObject, shapeContentForList, shapeContentForItem, } from "./content/memorix-content-object.js";
|
|
16
|
+
export { fetchMemorixContentObject } from "./content/fetch-content-object.js";
|
|
17
|
+
export { MemorixRetrievalError } from "./errors/errors.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAElF,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AA4B9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/mongo/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,WAAW,CAAC,CAItB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MongoClient } from "mongodb";
|
|
2
|
+
import { resolveMongoUri } from "./env.js";
|
|
3
|
+
export async function connectMemorixMongo(env = process.env) {
|
|
4
|
+
const client = new MongoClient(resolveMongoUri(env));
|
|
5
|
+
await client.connect();
|
|
6
|
+
return client;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/mongo/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MemorixTarget } from "./types.js";
|
|
2
|
+
export declare function resolveMongoUri(env?: NodeJS.ProcessEnv): string;
|
|
3
|
+
export declare function resolveMemorixDbName(target: MemorixTarget, env?: NodeJS.ProcessEnv): string;
|
|
4
|
+
export declare function resolveDefaultSourceDbName(env?: NodeJS.ProcessEnv): string | undefined;
|
|
5
|
+
export declare function targetCollectionEnvKey(target: MemorixTarget, entityType: string): string;
|
|
6
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/mongo/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUhD,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAM5E;AAKD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAoBR;AAED,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAKR"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
function firstNonEmpty(...vals) {
|
|
2
|
+
for (const v of vals) {
|
|
3
|
+
const t = v?.trim();
|
|
4
|
+
if (t)
|
|
5
|
+
return t;
|
|
6
|
+
}
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
export function resolveMongoUri(env = process.env) {
|
|
10
|
+
const uri = firstNonEmpty(env.MONGO_URI, env.MONGO_CONNECTION_STRING);
|
|
11
|
+
if (!uri) {
|
|
12
|
+
throw new Error("Missing MONGO_URI or MONGO_CONNECTION_STRING in environment");
|
|
13
|
+
}
|
|
14
|
+
return uri;
|
|
15
|
+
}
|
|
16
|
+
const MEMORIX_ENTITIES_DB_DEFAULT = "memorix-entities";
|
|
17
|
+
const MEMORIX_EVENTS_DB_DEFAULT = "memorix-events";
|
|
18
|
+
export function resolveMemorixDbName(target, env = process.env) {
|
|
19
|
+
if (target === "entity") {
|
|
20
|
+
return (firstNonEmpty(env.MEMORIX_ENTITIES_DB, env.MEMORIX_DB_ENTITIES, env.memorix_entities_db, env.MEMORIX_DB) ?? MEMORIX_ENTITIES_DB_DEFAULT);
|
|
21
|
+
}
|
|
22
|
+
return (firstNonEmpty(env.MEMORIX_EVENTS_DB, env.MEMORIX_DB_EVENTS, env.memorix_events_db, env.MEMORIX_DB) ?? MEMORIX_EVENTS_DB_DEFAULT);
|
|
23
|
+
}
|
|
24
|
+
export function resolveDefaultSourceDbName(env = process.env) {
|
|
25
|
+
return firstNonEmpty(env.MEMORIX_SOURCE_DB, env.SOURCE_DATABASE_NAME, env.SOURCEDATABASENAME, env.sourceDatabaseName, env.source_database_name);
|
|
26
|
+
}
|
|
27
|
+
export function targetCollectionEnvKey(target, entityType) {
|
|
28
|
+
const normalized = entityType.replace(/-/g, "_").toUpperCase();
|
|
29
|
+
return target === "entity"
|
|
30
|
+
? `MEMORIX_ENTITIES_COLLECTION_${normalized}`
|
|
31
|
+
: `MEMORIX_EVENTS_COLLECTION_${normalized}`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/mongo/env.ts"],"names":[],"mappings":"AAEA,SAAS,aAAa,CAAC,GAAG,IAA4B;IACpD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACtE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AACvD,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAEnD,MAAM,UAAU,oBAAoB,CAClC,MAAqB,EACrB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,CACL,aAAa,CACX,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,UAAU,CACf,IAAI,2BAA2B,CACjC,CAAC;IACJ,CAAC;IAED,OAAO,CACL,aAAa,CACX,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,UAAU,CACf,IAAI,yBAAyB,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,aAAa,CAClB,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,oBAAoB,EACxB,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,oBAAoB,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAqB,EACrB,UAAkB;IAElB,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,OAAO,MAAM,KAAK,QAAQ;QACxB,CAAC,CAAC,+BAA+B,UAAU,EAAE;QAC7C,CAAC,CAAC,6BAA6B,UAAU,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MongoClient } from "mongodb";
|
|
2
|
+
export type MemorixCollectionReadParams = {
|
|
3
|
+
db: string;
|
|
4
|
+
collection: string;
|
|
5
|
+
query?: Record<string, unknown>;
|
|
6
|
+
project?: string[];
|
|
7
|
+
sort?: Record<string, 1 | -1> | string | string[];
|
|
8
|
+
limit?: number;
|
|
9
|
+
skip?: number;
|
|
10
|
+
};
|
|
11
|
+
/** Drop parent paths when a more specific descendant is also projected (Mongo path collision). */
|
|
12
|
+
export declare function sanitizeProjectionPaths(paths: string[]): string[];
|
|
13
|
+
export declare function readMemorixCollection(client: MongoClient, params: MemorixCollectionReadParams): Promise<Record<string, unknown>[]>;
|
|
14
|
+
//# sourceMappingURL=read-collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-collection.d.ts","sourceRoot":"","sources":["../../src/mongo/read-collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,MAAM,2BAA2B,GAAG;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAyBF,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKjE;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAiBpC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
function normalizeSort(sort) {
|
|
2
|
+
if (!sort)
|
|
3
|
+
return undefined;
|
|
4
|
+
if (typeof sort === "object" && !Array.isArray(sort)) {
|
|
5
|
+
return sort;
|
|
6
|
+
}
|
|
7
|
+
const entries = Array.isArray(sort) ? sort : [sort];
|
|
8
|
+
const out = {};
|
|
9
|
+
for (const entry of entries) {
|
|
10
|
+
const trimmed = entry.trim();
|
|
11
|
+
if (!trimmed)
|
|
12
|
+
continue;
|
|
13
|
+
if (trimmed.startsWith("-")) {
|
|
14
|
+
out[trimmed.slice(1)] = -1;
|
|
15
|
+
}
|
|
16
|
+
else if (trimmed.startsWith("+")) {
|
|
17
|
+
out[trimmed.slice(1)] = 1;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
out[trimmed] = 1;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return Object.keys(out).length ? out : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Drop parent paths when a more specific descendant is also projected (Mongo path collision). */
|
|
26
|
+
export function sanitizeProjectionPaths(paths) {
|
|
27
|
+
const unique = [...new Set(paths.filter(Boolean))];
|
|
28
|
+
return unique.filter((path) => !unique.some((other) => other !== path && other.startsWith(`${path}.`)));
|
|
29
|
+
}
|
|
30
|
+
export async function readMemorixCollection(client, params) {
|
|
31
|
+
const projection = params.project?.length
|
|
32
|
+
? Object.fromEntries(sanitizeProjectionPaths(params.project).map((path) => [path, 1]))
|
|
33
|
+
: undefined;
|
|
34
|
+
return client
|
|
35
|
+
.db(params.db)
|
|
36
|
+
.collection(params.collection)
|
|
37
|
+
.find(params.query ?? {}, {
|
|
38
|
+
projection,
|
|
39
|
+
sort: normalizeSort(params.sort),
|
|
40
|
+
limit: params.limit,
|
|
41
|
+
skip: params.skip,
|
|
42
|
+
})
|
|
43
|
+
.toArray();
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=read-collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-collection.js","sourceRoot":"","sources":["../../src/mongo/read-collection.ts"],"names":[],"mappings":"AAYA,SAAS,aAAa,CACpB,IAAyC;IAEzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,uBAAuB,CAAC,KAAe;IACrD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAClF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAmB,EACnB,MAAmC;IAEnC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM;QACvC,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACjE;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,MAAM;SACV,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SACb,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;SAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE;QACxB,UAAU;QACV,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC;SACD,OAAO,EAAwC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MemorixRetrievalClient } from "../client/types.js";
|
|
2
|
+
import type { MemorixEntityDescriptor } from "../descriptors/descriptor-types.js";
|
|
3
|
+
import type { MemorixTarget } from "./types.js";
|
|
4
|
+
export declare function resolveEntityTarget(entity: MemorixEntityDescriptor): MemorixTarget;
|
|
5
|
+
export declare function resolveMemorixDbNameForEntity(entity: MemorixEntityDescriptor, client: MemorixRetrievalClient): string;
|
|
6
|
+
//# sourceMappingURL=resolve-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-db.d.ts","sourceRoot":"","sources":["../../src/mongo/resolve-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,uBAAuB,GAC9B,aAAa,CAEf;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAGR"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { resolveMemorixDbName } from "./env.js";
|
|
2
|
+
export function resolveEntityTarget(entity) {
|
|
3
|
+
return entity.target ?? "entity";
|
|
4
|
+
}
|
|
5
|
+
export function resolveMemorixDbNameForEntity(entity, client) {
|
|
6
|
+
const target = resolveEntityTarget(entity);
|
|
7
|
+
return client.memorixDb?.[target] ?? resolveMemorixDbName(target, client.processEnv);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=resolve-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-db.js","sourceRoot":"","sources":["../../src/mongo/resolve-db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGhD,MAAM,UAAU,mBAAmB,CACjC,MAA+B;IAE/B,OAAO,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAA+B,EAC/B,MAA8B;IAE9B,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mongo/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mongo/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MemorixRetrievalClient } from "../client/types.js";
|
|
2
|
+
import type { MemorixEntityDescriptor, MemorixRelationDescriptor, MemorixRelationIncludeDescriptor } from "../descriptors/descriptor-types.js";
|
|
3
|
+
import { type MemorixRetrievalIssue } from "../errors/issues.js";
|
|
4
|
+
export declare function fetchRelationData(client: MemorixRetrievalClient, sourceEntity: MemorixEntityDescriptor, relationName: string, relation: MemorixRelationDescriptor, include: MemorixRelationIncludeDescriptor, recordsByContentType: Record<string, Record<string, unknown>[]>, issues: MemorixRetrievalIssue[]): Promise<unknown>;
|
|
5
|
+
//# sourceMappingURL=fetch-relation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-relation.d.ts","sourceRoot":"","sources":["../../src/relations/fetch-relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,oCAAoC,CAAC;AAK5C,OAAO,EAAe,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,sBAAsB,EAC9B,YAAY,EAAE,uBAAuB,EACrC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,yBAAyB,EACnC,OAAO,EAAE,gCAAgC,EACzC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAC/D,MAAM,EAAE,qBAAqB,EAAE,GAC9B,OAAO,CAAC,OAAO,CAAC,CAuDlB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { resolveMemorixCollectionName } from "../data/collection-name.js";
|
|
2
|
+
import { getByPath } from "../data/path.js";
|
|
3
|
+
import { memorixRead } from "../data/memorix-read.js";
|
|
4
|
+
import { loadMemorixEntityDescriptor } from "../descriptors/load-entity-descriptor.js";
|
|
5
|
+
import { createIssue } from "../errors/issues.js";
|
|
6
|
+
export async function fetchRelationData(client, sourceEntity, relationName, relation, include, recordsByContentType, issues) {
|
|
7
|
+
try {
|
|
8
|
+
const sourceRecords = recordsByContentType[relation.source.contentType];
|
|
9
|
+
if (!sourceRecords?.[0]) {
|
|
10
|
+
return include.mode === "array" ? [] : undefined;
|
|
11
|
+
}
|
|
12
|
+
const joinValue = getByPath(sourceRecords[0], relation.source.path);
|
|
13
|
+
if (joinValue == null || joinValue === "") {
|
|
14
|
+
return include.mode === "array" ? [] : undefined;
|
|
15
|
+
}
|
|
16
|
+
const targetEntity = await loadMemorixEntityDescriptor(client, relation.targetEntity);
|
|
17
|
+
const collection = resolveMemorixCollectionName(targetEntity, relation.target.contentType, client.processEnv);
|
|
18
|
+
const query = Array.isArray(joinValue)
|
|
19
|
+
? { [relation.target.path]: { $in: joinValue } }
|
|
20
|
+
: { [relation.target.path]: joinValue };
|
|
21
|
+
const records = await memorixRead(client, {
|
|
22
|
+
entity: targetEntity,
|
|
23
|
+
source: collection,
|
|
24
|
+
query,
|
|
25
|
+
limit: include.limit ?? 100,
|
|
26
|
+
});
|
|
27
|
+
const mode = include.mode ?? relation.defaultMode ?? "extendFields";
|
|
28
|
+
const fieldNames = include.fields ?? relation.targetFields ?? [];
|
|
29
|
+
if (mode === "array") {
|
|
30
|
+
return records.map((r) => pickFields(r, fieldNames));
|
|
31
|
+
}
|
|
32
|
+
const first = records[0];
|
|
33
|
+
if (!first)
|
|
34
|
+
return undefined;
|
|
35
|
+
return pickFields(first, fieldNames);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
issues.push(createIssue({
|
|
39
|
+
code: "RELATION_FETCH_FAILED",
|
|
40
|
+
message: error instanceof Error ? error.message : "Relation fetch failed",
|
|
41
|
+
details: { relation: relationName },
|
|
42
|
+
}));
|
|
43
|
+
return include.mode === "array" ? [] : undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function pickFields(record, fields) {
|
|
47
|
+
if (!fields.length) {
|
|
48
|
+
const { _id, ...rest } = record;
|
|
49
|
+
return rest;
|
|
50
|
+
}
|
|
51
|
+
const out = {};
|
|
52
|
+
for (const f of fields) {
|
|
53
|
+
out[f] = getByPath(record, f) ?? record[f];
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=fetch-relation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-relation.js","sourceRoot":"","sources":["../../src/relations/fetch-relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MemorixRetrievalClient } from "../client/types.js";
|
|
2
|
+
import type { MemorixEntityDescriptor, MemorixItemDescriptor, MemorixListDescriptor } from "../descriptors/descriptor-types.js";
|
|
3
|
+
import type { MemorixRetrievalIssue } from "../errors/issues.js";
|
|
4
|
+
export declare function fetchRelationsForItem(client: MemorixRetrievalClient, entity: MemorixEntityDescriptor, item: MemorixItemDescriptor, recordsByContentType: Record<string, Record<string, unknown>[]>, includeRelations: string[], issues: MemorixRetrievalIssue[]): Promise<Record<string, unknown>>;
|
|
5
|
+
export declare function fetchRelationsForList(_client: MemorixRetrievalClient, _entity: MemorixEntityDescriptor, _list: MemorixListDescriptor, _rows: Record<string, unknown>[], _includeRelations: string[], _issues: MemorixRetrievalIssue[]): Promise<Record<string, unknown> | undefined>;
|
|
6
|
+
//# sourceMappingURL=resolve-relations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-relations.d.ts","sourceRoot":"","sources":["../../src/relations/resolve-relations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,uBAAuB,EAC/B,IAAI,EAAE,qBAAqB,EAC3B,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAC/D,gBAAgB,EAAE,MAAM,EAAE,EAC1B,MAAM,EAAE,qBAAqB,EAAE,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0BlC;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAChC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,EAAE,qBAAqB,EAAE,GAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAE9C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { fetchRelationData } from "./fetch-relation.js";
|
|
2
|
+
export async function fetchRelationsForItem(client, entity, item, recordsByContentType, includeRelations, issues) {
|
|
3
|
+
const relations = {};
|
|
4
|
+
const allowed = new Map((item.includeRelations ?? []).map((r) => [r.relation, r]));
|
|
5
|
+
for (const relationName of includeRelations) {
|
|
6
|
+
const include = allowed.get(relationName);
|
|
7
|
+
const relation = entity.relations?.[relationName];
|
|
8
|
+
if (!relation || !include)
|
|
9
|
+
continue;
|
|
10
|
+
const data = await fetchRelationData(client, entity, relationName, relation, include, recordsByContentType, issues);
|
|
11
|
+
if (data !== undefined) {
|
|
12
|
+
relations[relationName] = data;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return relations;
|
|
16
|
+
}
|
|
17
|
+
export async function fetchRelationsForList(_client, _entity, _list, _rows, _includeRelations, _issues) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=resolve-relations.js.map
|