@x12i/memorix-writer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -0
- package/catalox-seeds/memorix-write-descriptors.manifest.json +164 -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 +81 -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 +21 -0
- package/dist/client/create-from-env.js.map +1 -0
- package/dist/client/ensure-tier.d.ts +3 -0
- package/dist/client/ensure-tier.d.ts.map +1 -0
- package/dist/client/ensure-tier.js +4 -0
- package/dist/client/ensure-tier.js.map +1 -0
- package/dist/client/types.d.ts +165 -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/constants.d.ts +13 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +13 -0
- package/dist/constants.js.map +1 -0
- package/dist/content/compute-content-metadata.d.ts +16 -0
- package/dist/content/compute-content-metadata.d.ts.map +1 -0
- package/dist/content/compute-content-metadata.js +13 -0
- package/dist/content/compute-content-metadata.js.map +1 -0
- package/dist/content/generate-content-key.d.ts +13 -0
- package/dist/content/generate-content-key.d.ts.map +1 -0
- package/dist/content/generate-content-key.js +22 -0
- package/dist/content/generate-content-key.js.map +1 -0
- package/dist/content/generate-preview.d.ts +2 -0
- package/dist/content/generate-preview.d.ts.map +1 -0
- package/dist/content/generate-preview.js +7 -0
- package/dist/content/generate-preview.js.map +1 -0
- package/dist/content/map-content-write-errors.d.ts +3 -0
- package/dist/content/map-content-write-errors.d.ts.map +1 -0
- package/dist/content/map-content-write-errors.js +9 -0
- package/dist/content/map-content-write-errors.js.map +1 -0
- package/dist/content/resolve-content-write-config.d.ts +25 -0
- package/dist/content/resolve-content-write-config.d.ts.map +1 -0
- package/dist/content/resolve-content-write-config.js +35 -0
- package/dist/content/resolve-content-write-config.js.map +1 -0
- package/dist/content/write-content-object.d.ts +40 -0
- package/dist/content/write-content-object.d.ts.map +1 -0
- package/dist/content/write-content-object.js +117 -0
- package/dist/content/write-content-object.js.map +1 -0
- package/dist/data/collection-name.d.ts +30 -0
- package/dist/data/collection-name.d.ts.map +1 -0
- package/dist/data/collection-name.js +86 -0
- package/dist/data/collection-name.js.map +1 -0
- package/dist/data/identity.d.ts +13 -0
- package/dist/data/identity.d.ts.map +1 -0
- package/dist/data/identity.js +29 -0
- package/dist/data/identity.js.map +1 -0
- package/dist/data/memorix-write-adapter.d.ts +33 -0
- package/dist/data/memorix-write-adapter.d.ts.map +1 -0
- package/dist/data/memorix-write-adapter.js +45 -0
- package/dist/data/memorix-write-adapter.js.map +1 -0
- package/dist/descriptors/entity-descriptor-types.d.ts +59 -0
- package/dist/descriptors/entity-descriptor-types.d.ts.map +1 -0
- package/dist/descriptors/entity-descriptor-types.js +2 -0
- package/dist/descriptors/entity-descriptor-types.js.map +1 -0
- package/dist/descriptors/load-entity-descriptor.d.ts +7 -0
- package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-entity-descriptor.js +23 -0
- package/dist/descriptors/load-entity-descriptor.js.map +1 -0
- package/dist/descriptors/load-write-descriptor.d.ts +5 -0
- package/dist/descriptors/load-write-descriptor.d.ts.map +1 -0
- package/dist/descriptors/load-write-descriptor.js +19 -0
- package/dist/descriptors/load-write-descriptor.js.map +1 -0
- package/dist/descriptors/secret-scan.d.ts +2 -0
- package/dist/descriptors/secret-scan.d.ts.map +1 -0
- package/dist/descriptors/secret-scan.js +39 -0
- package/dist/descriptors/secret-scan.js.map +1 -0
- package/dist/descriptors/validate-write-descriptor.d.ts +4 -0
- package/dist/descriptors/validate-write-descriptor.d.ts.map +1 -0
- package/dist/descriptors/validate-write-descriptor.js +45 -0
- package/dist/descriptors/validate-write-descriptor.js.map +1 -0
- package/dist/descriptors/write-descriptor-types.d.ts +112 -0
- package/dist/descriptors/write-descriptor-types.d.ts.map +1 -0
- package/dist/descriptors/write-descriptor-types.js +2 -0
- package/dist/descriptors/write-descriptor-types.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 +13 -0
- package/dist/errors/issues.d.ts.map +1 -0
- package/dist/errors/issues.js +9 -0
- package/dist/errors/issues.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/mongo/collection-documents.d.ts +54 -0
- package/dist/mongo/collection-documents.d.ts.map +1 -0
- package/dist/mongo/collection-documents.js +100 -0
- package/dist/mongo/collection-documents.js.map +1 -0
- package/dist/mongo/collection-name-validate.d.ts +2 -0
- package/dist/mongo/collection-name-validate.d.ts.map +1 -0
- package/dist/mongo/collection-name-validate.js +19 -0
- package/dist/mongo/collection-name-validate.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/default-collections.d.ts +3 -0
- package/dist/mongo/default-collections.d.ts.map +1 -0
- package/dist/mongo/default-collections.js +14 -0
- package/dist/mongo/default-collections.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/id-normalize.d.ts +3 -0
- package/dist/mongo/id-normalize.d.ts.map +1 -0
- package/dist/mongo/id-normalize.js +23 -0
- package/dist/mongo/id-normalize.js.map +1 -0
- package/dist/mongo/index.d.ts +5 -0
- package/dist/mongo/index.d.ts.map +1 -0
- package/dist/mongo/index.js +5 -0
- package/dist/mongo/index.js.map +1 -0
- package/dist/mongo/target.d.ts +4 -0
- package/dist/mongo/target.d.ts.map +1 -0
- package/dist/mongo/target.js +9 -0
- package/dist/mongo/target.js.map +1 -0
- package/dist/mongo/tier-env.d.ts +9 -0
- package/dist/mongo/tier-env.d.ts.map +1 -0
- package/dist/mongo/tier-env.js +11 -0
- package/dist/mongo/tier-env.js.map +1 -0
- package/dist/mongo/tier.d.ts +22 -0
- package/dist/mongo/tier.d.ts.map +1 -0
- package/dist/mongo/tier.js +50 -0
- package/dist/mongo/tier.js.map +1 -0
- package/dist/utils/path.d.ts +4 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +42 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/validation/validate-content.d.ts +17 -0
- package/dist/validation/validate-content.d.ts.map +1 -0
- package/dist/validation/validate-content.js +47 -0
- package/dist/validation/validate-content.js.map +1 -0
- package/dist/validation/validate-fields.d.ts +8 -0
- package/dist/validation/validate-fields.d.ts.map +1 -0
- package/dist/validation/validate-fields.js +49 -0
- package/dist/validation/validate-fields.js.map +1 -0
- package/dist/validation/validate-identity.d.ts +3 -0
- package/dist/validation/validate-identity.d.ts.map +1 -0
- package/dist/validation/validate-identity.js +2 -0
- package/dist/validation/validate-identity.js.map +1 -0
- package/dist/validation/validate-immutability.d.ts +9 -0
- package/dist/validation/validate-immutability.d.ts.map +1 -0
- package/dist/validation/validate-immutability.js +35 -0
- package/dist/validation/validate-immutability.js.map +1 -0
- package/dist/validation/validate-values.d.ts +4 -0
- package/dist/validation/validate-values.d.ts.map +1 -0
- package/dist/validation/validate-values.js +55 -0
- package/dist/validation/validate-values.js.map +1 -0
- package/dist/writer/apply-audit.d.ts +10 -0
- package/dist/writer/apply-audit.d.ts.map +1 -0
- package/dist/writer/apply-audit.js +39 -0
- package/dist/writer/apply-audit.js.map +1 -0
- package/dist/writer/apply-field-mapping.d.ts +9 -0
- package/dist/writer/apply-field-mapping.d.ts.map +1 -0
- package/dist/writer/apply-field-mapping.js +32 -0
- package/dist/writer/apply-field-mapping.js.map +1 -0
- package/dist/writer/apply-timestamps.d.ts +8 -0
- package/dist/writer/apply-timestamps.d.ts.map +1 -0
- package/dist/writer/apply-timestamps.js +12 -0
- package/dist/writer/apply-timestamps.js.map +1 -0
- package/dist/writer/build-record.d.ts +28 -0
- package/dist/writer/build-record.d.ts.map +1 -0
- package/dist/writer/build-record.js +36 -0
- package/dist/writer/build-record.js.map +1 -0
- package/dist/writer/resolve-conflict.d.ts +12 -0
- package/dist/writer/resolve-conflict.d.ts.map +1 -0
- package/dist/writer/resolve-conflict.js +32 -0
- package/dist/writer/resolve-conflict.js.map +1 -0
- package/dist/writer/resolve-idempotency.d.ts +23 -0
- package/dist/writer/resolve-idempotency.d.ts.map +1 -0
- package/dist/writer/resolve-idempotency.js +69 -0
- package/dist/writer/resolve-idempotency.js.map +1 -0
- package/dist/writer/resolve-operation.d.ts +4 -0
- package/dist/writer/resolve-operation.d.ts.map +1 -0
- package/dist/writer/resolve-operation.js +9 -0
- package/dist/writer/resolve-operation.js.map +1 -0
- package/dist/writer/resolve-write-field-target.d.ts +4 -0
- package/dist/writer/resolve-write-field-target.d.ts.map +1 -0
- package/dist/writer/resolve-write-field-target.js +7 -0
- package/dist/writer/resolve-write-field-target.js.map +1 -0
- package/dist/writer/validate-write.d.ts +3 -0
- package/dist/writer/validate-write.d.ts.map +1 -0
- package/dist/writer/validate-write.js +72 -0
- package/dist/writer/validate-write.js.map +1 -0
- package/dist/writer/write-record.d.ts +3 -0
- package/dist/writer/write-record.d.ts.map +1 -0
- package/dist/writer/write-record.js +472 -0
- package/dist/writer/write-record.js.map +1 -0
- package/dist/writer/write-records.d.ts +3 -0
- package/dist/writer/write-records.d.ts.map +1 -0
- package/dist/writer/write-records.js +79 -0
- package/dist/writer/write-records.js.map +1 -0
- package/docs/MEMORIX-DATABASE-CONVENTIONS.md +324 -0
- package/package.json +51 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const DEFAULT_MEMORIX_APP_ID = "memorix";
|
|
2
|
+
export const MEMORIX_WRITE_DESCRIPTORS_CATALOG_ID = "memorix-write-descriptors";
|
|
3
|
+
export const MEMORIX_ENTITY_DESCRIPTORS_CATALOG_ID = "memorix-entity-descriptors";
|
|
4
|
+
export const DEFAULT_CANONICAL_CONTENT_TYPE = "snapshots";
|
|
5
|
+
export const DEFAULT_DATA_ROOT = "data";
|
|
6
|
+
export const DEFAULT_EFFECTIVE_DATE_PATH = "modifiedAt";
|
|
7
|
+
export const DEFAULT_CONTENT_MAX_BYTES = 5 * 1024 * 1024;
|
|
8
|
+
export const DEFAULT_MEMORIX_METADATA_PATH = "_memorix";
|
|
9
|
+
export const DEFAULT_AUDIT_PATH = "_memorix.audit";
|
|
10
|
+
export const DEFAULT_IDEMPOTENCY_KEY_PATH = "_memorix.idempotencyKey";
|
|
11
|
+
export const DEFAULT_PAYLOAD_HASH_PATH = "_memorix.payloadHash";
|
|
12
|
+
export const DEFAULT_CONTENT_KEY_TEMPLATE = "{{entity}}/{{contentType}}/{{id}}/{{recordId}}/{{field}}.md";
|
|
13
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAEhD,MAAM,CAAC,MAAM,oCAAoC,GAAG,2BAA2B,CAAC;AAChF,MAAM,CAAC,MAAM,qCAAqC,GAAG,4BAA4B,CAAC;AAElF,MAAM,CAAC,MAAM,8BAA8B,GAAG,WAAW,CAAC;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,2BAA2B,GAAG,YAAY,CAAC;AACxD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,UAAU,CAAC;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,4BAA4B,GACvC,6DAA6D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type MemorixWrittenContentMetadata = {
|
|
2
|
+
sizeBytes: number;
|
|
3
|
+
words?: number;
|
|
4
|
+
chars?: number;
|
|
5
|
+
contentType: "text/markdown" | "text/plain";
|
|
6
|
+
format: "markdown" | "text";
|
|
7
|
+
createdAt: string;
|
|
8
|
+
hash?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function computeContentMetadata(args: {
|
|
11
|
+
body: string;
|
|
12
|
+
format: "markdown" | "text";
|
|
13
|
+
createdAt: string;
|
|
14
|
+
hash?: string;
|
|
15
|
+
}): MemorixWrittenContentMetadata;
|
|
16
|
+
//# sourceMappingURL=compute-content-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-content-metadata.d.ts","sourceRoot":"","sources":["../../src/content/compute-content-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,eAAe,GAAG,YAAY,CAAC;IAC5C,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,6BAA6B,CAWhC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function computeContentMetadata(args) {
|
|
2
|
+
const words = args.body.trim().split(/\s+/).filter(Boolean).length;
|
|
3
|
+
return {
|
|
4
|
+
sizeBytes: Buffer.byteLength(args.body, "utf8"),
|
|
5
|
+
words,
|
|
6
|
+
chars: args.body.length,
|
|
7
|
+
contentType: args.format === "markdown" ? "text/markdown" : "text/plain",
|
|
8
|
+
format: args.format,
|
|
9
|
+
createdAt: args.createdAt,
|
|
10
|
+
hash: args.hash,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=compute-content-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-content-metadata.js","sourceRoot":"","sources":["../../src/content/compute-content-metadata.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,sBAAsB,CAAC,IAKtC;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACnE,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/C,KAAK;QACL,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;QACvB,WAAW,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY;QACxE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ContentKeyTemplateContext = {
|
|
2
|
+
entity: string;
|
|
3
|
+
contentType: string;
|
|
4
|
+
entityId?: string;
|
|
5
|
+
eventId?: string;
|
|
6
|
+
field: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
recordId: string;
|
|
9
|
+
idempotencyKey?: string;
|
|
10
|
+
hash?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function generateContentKey(template: string, ctx: ContentKeyTemplateContext, bodyForHash?: string): string;
|
|
13
|
+
//# sourceMappingURL=generate-content-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-content-key.d.ts","sourceRoot":"","sources":["../../src/content/generate-content-key.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,yBAAyB,EAC9B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAsBR"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export function generateContentKey(template, ctx, bodyForHash) {
|
|
3
|
+
const id = ctx.entityId ?? ctx.eventId ?? "unknown";
|
|
4
|
+
const hash = ctx.hash ??
|
|
5
|
+
(bodyForHash
|
|
6
|
+
? createHash("sha256").update(bodyForHash).digest("hex").slice(0, 12)
|
|
7
|
+
: "");
|
|
8
|
+
const vars = {
|
|
9
|
+
entity: ctx.entity,
|
|
10
|
+
contentType: ctx.contentType,
|
|
11
|
+
entityId: ctx.entityId ?? "",
|
|
12
|
+
eventId: ctx.eventId ?? "",
|
|
13
|
+
field: ctx.field,
|
|
14
|
+
timestamp: ctx.timestamp,
|
|
15
|
+
recordId: ctx.recordId,
|
|
16
|
+
id: id,
|
|
17
|
+
idempotencyKey: ctx.idempotencyKey ?? "",
|
|
18
|
+
hash,
|
|
19
|
+
};
|
|
20
|
+
return template.replace(/\{\{(\w+)\}\}/g, (_, key) => vars[key] ?? "");
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=generate-content-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-content-key.js","sourceRoot":"","sources":["../../src/content/generate-content-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAczC,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,GAA8B,EAC9B,WAAoB;IAEpB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IACpD,MAAM,IAAI,GACR,GAAG,CAAC,IAAI;QACR,CAAC,WAAW;YACV,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACrE,CAAC,CAAC,EAAE,CAAC,CAAC;IAEV,MAAM,IAAI,GAA2B;QACnC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;QAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,EAAE,EAAE,EAAE;QACN,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;QACxC,IAAI;KACL,CAAC;IAEF,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-preview.d.ts","sourceRoot":"","sources":["../../src/content/generate-preview.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAItE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-preview.js","sourceRoot":"","sources":["../../src/content/generate-preview.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC/C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-content-write-errors.d.ts","sourceRoot":"","sources":["../../src/content/map-content-write-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,GACX,iBAAiB,CAOnB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { writeIssue } from "../errors/issues.js";
|
|
2
|
+
export function mapContentWriteError(fieldName, err) {
|
|
3
|
+
const message = err instanceof Error ? err.message : "content object write failed";
|
|
4
|
+
return writeIssue("CONTENT_WRITE_FAILED", message, {
|
|
5
|
+
path: fieldName,
|
|
6
|
+
details: err instanceof Error ? { name: err.name } : undefined,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=map-content-write-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-content-write-errors.js","sourceRoot":"","sources":["../../src/content/map-content-write-errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,GAAY;IAEZ,MAAM,OAAO,GACX,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;IACrE,OAAO,UAAU,CAAC,sBAAsB,EAAE,OAAO,EAAE;QACjD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MemorixContentStorageDescriptor, MemorixEntityDescriptor } from "../descriptors/entity-descriptor-types.js";
|
|
2
|
+
import type { MemorixWriteFieldDescriptor } from "../descriptors/write-descriptor-types.js";
|
|
3
|
+
import type { MemorixWriterDefaults } from "../client/types.js";
|
|
4
|
+
export type ResolvedContentWriteConfig = {
|
|
5
|
+
storage: MemorixContentStorageDescriptor;
|
|
6
|
+
maxBytes: number;
|
|
7
|
+
contentKeyTemplate?: string;
|
|
8
|
+
generatePreview: boolean;
|
|
9
|
+
previewMaxChars: number;
|
|
10
|
+
computeMetadata: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare function resolveMemorixContentWriteConfig(args: {
|
|
13
|
+
entity: MemorixEntityDescriptor;
|
|
14
|
+
propertyName?: string;
|
|
15
|
+
field?: MemorixWriteFieldDescriptor;
|
|
16
|
+
defaults: MemorixWriterDefaults;
|
|
17
|
+
writeContentDefaults?: {
|
|
18
|
+
maxBytes?: number;
|
|
19
|
+
contentKeyTemplate?: string;
|
|
20
|
+
generatePreview?: boolean;
|
|
21
|
+
previewMaxChars?: number;
|
|
22
|
+
computeMetadata?: boolean;
|
|
23
|
+
};
|
|
24
|
+
}): ResolvedContentWriteConfig;
|
|
25
|
+
//# sourceMappingURL=resolve-content-write-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-content-write-config.d.ts","sourceRoot":"","sources":["../../src/content/resolve-content-write-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+BAA+B,EAC/B,uBAAuB,EAExB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,+BAA+B,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,IAAI,EAAE;IACrD,MAAM,EAAE,uBAAuB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,2BAA2B,CAAC;IACpC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,oBAAoB,CAAC,EAAE;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH,GAAG,0BAA0B,CA6C7B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { throwWriterError } from "../errors/errors.js";
|
|
2
|
+
export function resolveMemorixContentWriteConfig(args) {
|
|
3
|
+
const property = args.propertyName
|
|
4
|
+
? args.entity.properties[args.propertyName]
|
|
5
|
+
: undefined;
|
|
6
|
+
const storage = args.field?.content?.storage ??
|
|
7
|
+
property?.content?.storage ??
|
|
8
|
+
args.entity.contentDefaults?.storage;
|
|
9
|
+
if (!storage?.provider || !storage?.bucket) {
|
|
10
|
+
throwWriterError("CONTENT_WRITE_FAILED", "content storage provider and bucket must be configured in descriptors");
|
|
11
|
+
}
|
|
12
|
+
const maxBytes = args.field?.content?.maxBytes ??
|
|
13
|
+
property?.content?.maxBytes ??
|
|
14
|
+
args.entity.contentDefaults?.maxBytes ??
|
|
15
|
+
args.writeContentDefaults?.maxBytes ??
|
|
16
|
+
args.defaults.packageMaxContentBytes ??
|
|
17
|
+
args.defaults.contentMaxBytes;
|
|
18
|
+
return {
|
|
19
|
+
storage,
|
|
20
|
+
maxBytes,
|
|
21
|
+
contentKeyTemplate: args.field?.content?.contentKeyTemplate ??
|
|
22
|
+
args.writeContentDefaults?.contentKeyTemplate ??
|
|
23
|
+
args.defaults.contentKeyTemplate,
|
|
24
|
+
generatePreview: args.field?.content?.generatePreview ??
|
|
25
|
+
args.writeContentDefaults?.generatePreview ??
|
|
26
|
+
true,
|
|
27
|
+
previewMaxChars: args.field?.content?.previewMaxChars ??
|
|
28
|
+
args.writeContentDefaults?.previewMaxChars ??
|
|
29
|
+
500,
|
|
30
|
+
computeMetadata: args.field?.content?.computeMetadata ??
|
|
31
|
+
args.writeContentDefaults?.computeMetadata ??
|
|
32
|
+
true,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=resolve-content-write-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-content-write-config.js","sourceRoot":"","sources":["../../src/content/resolve-content-write-config.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWvD,MAAM,UAAU,gCAAgC,CAAC,IAYhD;IACC,MAAM,QAAQ,GAA0C,IAAI,CAAC,YAAY;QACvE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO;QAC5B,QAAQ,EAAE,OAAO,EAAE,OAAO;QAC1B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC;IAEvC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC3C,gBAAgB,CACd,sBAAsB,EACtB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GACZ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ;QAC7B,QAAQ,EAAE,OAAO,EAAE,QAAQ;QAC3B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ;QACrC,IAAI,CAAC,oBAAoB,EAAE,QAAQ;QACnC,IAAI,CAAC,QAAQ,CAAC,sBAAsB;QACpC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEhC,OAAO;QACL,OAAO;QACP,QAAQ;QACR,kBAAkB,EAChB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB;YACvC,IAAI,CAAC,oBAAoB,EAAE,kBAAkB;YAC7C,IAAI,CAAC,QAAQ,CAAC,kBAAkB;QAClC,eAAe,EACb,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe;YACpC,IAAI,CAAC,oBAAoB,EAAE,eAAe;YAC1C,IAAI;QACN,eAAe,EACb,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe;YACpC,IAAI,CAAC,oBAAoB,EAAE,eAAe;YAC1C,GAAG;QACL,eAAe,EACb,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe;YACpC,IAAI,CAAC,oBAAoB,EAAE,eAAe;YAC1C,IAAI;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { MemorixContentObject } from "../descriptors/entity-descriptor-types.js";
|
|
2
|
+
import type { MemorixWriteFieldDescriptor } from "../descriptors/write-descriptor-types.js";
|
|
3
|
+
import type { MemorixWriterClient } from "../client/types.js";
|
|
4
|
+
import type { MemorixEntityDescriptor } from "../descriptors/entity-descriptor-types.js";
|
|
5
|
+
import type { MemorixWriteDescriptor } from "../descriptors/write-descriptor-types.js";
|
|
6
|
+
export type ContentWriteResult = {
|
|
7
|
+
pointer: MemorixContentObject;
|
|
8
|
+
written: boolean;
|
|
9
|
+
sizeBytes?: number;
|
|
10
|
+
format?: "markdown" | "text";
|
|
11
|
+
storageKey: string;
|
|
12
|
+
};
|
|
13
|
+
export type WrittenContentHandle = {
|
|
14
|
+
fieldName: string;
|
|
15
|
+
storageKey: string;
|
|
16
|
+
provider: "gcs" | "s3";
|
|
17
|
+
};
|
|
18
|
+
export declare function writeMemorixContentObject(args: {
|
|
19
|
+
client: MemorixWriterClient;
|
|
20
|
+
entity: MemorixEntityDescriptor;
|
|
21
|
+
writeDescriptor: MemorixWriteDescriptor;
|
|
22
|
+
fieldName: string;
|
|
23
|
+
field: MemorixWriteFieldDescriptor;
|
|
24
|
+
body?: string;
|
|
25
|
+
format?: "markdown" | "text";
|
|
26
|
+
existingPointer?: MemorixContentObject;
|
|
27
|
+
context: {
|
|
28
|
+
entityId?: string;
|
|
29
|
+
eventId?: string;
|
|
30
|
+
recordId: string;
|
|
31
|
+
timestamp: string;
|
|
32
|
+
idempotencyKey?: string;
|
|
33
|
+
};
|
|
34
|
+
skipUpload?: boolean;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
result: ContentWriteResult;
|
|
37
|
+
handle?: WrittenContentHandle;
|
|
38
|
+
}>;
|
|
39
|
+
export declare function cleanupWrittenContent(client: MemorixWriterClient, handles: WrittenContentHandle[]): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=write-content-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-content-object.d.ts","sourceRoot":"","sources":["../../src/content/write-content-object.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAQvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC;CACxB,CAAC;AAoBF,wBAAsB,yBAAyB,CAAC,IAAI,EAAE;IACpD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,uBAAuB,CAAC;IAChC,eAAe,EAAE,sBAAsB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,2BAA2B,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,OAAO,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAAE,CAAC,CAwGzE;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,oBAAoB,EAAE,GAC9B,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { generateContentKey } from "./generate-content-key.js";
|
|
3
|
+
import { generatePreview } from "./generate-preview.js";
|
|
4
|
+
import { computeContentMetadata } from "./compute-content-metadata.js";
|
|
5
|
+
import { resolveMemorixContentWriteConfig } from "./resolve-content-write-config.js";
|
|
6
|
+
import { mapContentWriteError } from "./map-content-write-errors.js";
|
|
7
|
+
import { isMemorixContentPointer } from "../validation/validate-content.js";
|
|
8
|
+
function resolveObjectWriter(client, provider) {
|
|
9
|
+
const w = client.contentWriters[provider];
|
|
10
|
+
if (!w) {
|
|
11
|
+
throw new Error(`MemorixWriter: content writer for provider "${provider}" is not configured`);
|
|
12
|
+
}
|
|
13
|
+
return w;
|
|
14
|
+
}
|
|
15
|
+
function fullStorageKey(prefix, contentKey) {
|
|
16
|
+
const p = prefix?.replace(/\/+$/, "") ?? "";
|
|
17
|
+
return p ? `${p}/${contentKey.replace(/^\/+/, "")}` : contentKey.replace(/^\/+/, "");
|
|
18
|
+
}
|
|
19
|
+
export async function writeMemorixContentObject(args) {
|
|
20
|
+
const { client, entity, writeDescriptor, fieldName, field } = args;
|
|
21
|
+
if (args.existingPointer && isMemorixContentPointer(args.existingPointer)) {
|
|
22
|
+
if (field.content?.acceptPointer === false) {
|
|
23
|
+
throw new Error(`pointer not accepted for field "${fieldName}"`);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
result: {
|
|
27
|
+
pointer: args.existingPointer,
|
|
28
|
+
written: false,
|
|
29
|
+
sizeBytes: typeof args.existingPointer.metadata?.sizeBytes === "number"
|
|
30
|
+
? args.existingPointer.metadata.sizeBytes
|
|
31
|
+
: undefined,
|
|
32
|
+
format: args.existingPointer.metadata?.format ??
|
|
33
|
+
undefined,
|
|
34
|
+
storageKey: args.existingPointer.contentKey,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (!args.body) {
|
|
39
|
+
throw new Error(`content body required for field "${fieldName}"`);
|
|
40
|
+
}
|
|
41
|
+
const config = resolveMemorixContentWriteConfig({
|
|
42
|
+
entity,
|
|
43
|
+
propertyName: fieldName,
|
|
44
|
+
field,
|
|
45
|
+
defaults: client.defaults,
|
|
46
|
+
writeContentDefaults: writeDescriptor.content,
|
|
47
|
+
});
|
|
48
|
+
const fmt = args.format ?? field.content?.format ?? "markdown";
|
|
49
|
+
const hash = createHash("sha256").update(args.body).digest("hex").slice(0, 12);
|
|
50
|
+
const contentKey = generateContentKey(config.contentKeyTemplate ?? client.defaults.contentKeyTemplate, {
|
|
51
|
+
entity: entity.entityName,
|
|
52
|
+
contentType: writeDescriptor.target.contentType,
|
|
53
|
+
entityId: args.context.entityId,
|
|
54
|
+
eventId: args.context.eventId,
|
|
55
|
+
field: fieldName,
|
|
56
|
+
timestamp: args.context.timestamp,
|
|
57
|
+
recordId: args.context.recordId,
|
|
58
|
+
idempotencyKey: args.context.idempotencyKey,
|
|
59
|
+
hash,
|
|
60
|
+
}, args.body);
|
|
61
|
+
const storageKey = fullStorageKey(config.storage.prefix, contentKey);
|
|
62
|
+
const mime = fmt === "markdown" ? "text/markdown" : "text/plain";
|
|
63
|
+
if (!args.skipUpload) {
|
|
64
|
+
try {
|
|
65
|
+
const writer = resolveObjectWriter(client, config.storage.provider);
|
|
66
|
+
await writer.uploadObject({
|
|
67
|
+
key: storageKey,
|
|
68
|
+
body: args.body,
|
|
69
|
+
contentType: mime,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
throw mapContentWriteError(fieldName, err);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const metadata = config.computeMetadata
|
|
77
|
+
? computeContentMetadata({
|
|
78
|
+
body: args.body,
|
|
79
|
+
format: fmt,
|
|
80
|
+
createdAt: args.context.timestamp,
|
|
81
|
+
hash,
|
|
82
|
+
})
|
|
83
|
+
: { sizeBytes: Buffer.byteLength(args.body, "utf8"), format: fmt, contentType: mime, createdAt: args.context.timestamp };
|
|
84
|
+
const preview = config.generatePreview
|
|
85
|
+
? generatePreview(args.body, config.previewMaxChars)
|
|
86
|
+
: undefined;
|
|
87
|
+
const pointer = {
|
|
88
|
+
contentKey,
|
|
89
|
+
metadata,
|
|
90
|
+
preview,
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
result: {
|
|
94
|
+
pointer,
|
|
95
|
+
written: !args.skipUpload,
|
|
96
|
+
sizeBytes: metadata.sizeBytes,
|
|
97
|
+
format: fmt,
|
|
98
|
+
storageKey,
|
|
99
|
+
},
|
|
100
|
+
handle: args.skipUpload
|
|
101
|
+
? undefined
|
|
102
|
+
: {
|
|
103
|
+
fieldName,
|
|
104
|
+
storageKey,
|
|
105
|
+
provider: config.storage.provider,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export async function cleanupWrittenContent(client, handles) {
|
|
110
|
+
for (const h of handles) {
|
|
111
|
+
const w = client.contentWriters[h.provider];
|
|
112
|
+
if (w?.deleteObject) {
|
|
113
|
+
await w.deleteObject({ key: h.storageKey });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=write-content-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-content-object.js","sourceRoot":"","sources":["../../src/content/write-content-object.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MemorixDataTier } from "../mongo/tier.js";
|
|
2
|
+
import type { MemorixEntityDescriptor } from "../descriptors/entity-descriptor-types.js";
|
|
3
|
+
import type { MemorixWriteDescriptor } from "../descriptors/write-descriptor-types.js";
|
|
4
|
+
import type { MemorixTarget } from "../mongo/target.js";
|
|
5
|
+
export type ResolveMemorixWriteCollectionOptions = {
|
|
6
|
+
override?: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolveEntityType(entity: MemorixEntityDescriptor): string;
|
|
10
|
+
export declare function buildMemorixWriteCollectionCandidates(args: {
|
|
11
|
+
entity: MemorixEntityDescriptor;
|
|
12
|
+
writeDescriptor: MemorixWriteDescriptor;
|
|
13
|
+
override?: string;
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
}): string[];
|
|
16
|
+
/** Sync resolver: returns the first configured candidate (no Mongo existence check). */
|
|
17
|
+
export declare function resolveMemorixWriteCollectionName(entity: MemorixEntityDescriptor, writeDescriptor: MemorixWriteDescriptor, options?: ResolveMemorixWriteCollectionOptions): string;
|
|
18
|
+
export declare function resolveMemorixWriteTargetCollection(args: {
|
|
19
|
+
tier: MemorixDataTier;
|
|
20
|
+
entity: MemorixEntityDescriptor;
|
|
21
|
+
writeDescriptor: MemorixWriteDescriptor;
|
|
22
|
+
override?: string;
|
|
23
|
+
env?: NodeJS.ProcessEnv;
|
|
24
|
+
verifyExists?: boolean;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
collection: string;
|
|
27
|
+
target: MemorixTarget;
|
|
28
|
+
database: string;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=collection-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-name.d.ts","sourceRoot":"","sources":["../../src/data/collection-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAQvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,oCAAoC,GAAG;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAEzE;AAED,wBAAgB,qCAAqC,CAAC,IAAI,EAAE;IAC1D,MAAM,EAAE,uBAAuB,CAAC;IAChC,eAAe,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,MAAM,EAAE,CAkDX;AAED,wFAAwF;AACxF,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,uBAAuB,EAC/B,eAAe,EAAE,sBAAsB,EACvC,OAAO,GAAE,oCAAyC,GACjD,MAAM,CAQR;AAED,wBAAsB,mCAAmC,CAAC,IAAI,EAAE;IAC9D,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,uBAAuB,CAAC;IAChC,eAAe,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B3E"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { throwWriterError } from "../errors/errors.js";
|
|
2
|
+
import { DEFAULT_ENTITY_COLLECTION_CANDIDATES, DEFAULT_EVENT_COLLECTION_CANDIDATES, } from "../mongo/default-collections.js";
|
|
3
|
+
import { resolveMemorixDbName, targetCollectionEnvKey } from "../mongo/env.js";
|
|
4
|
+
import { resolveMemorixWriteTarget } from "../mongo/target.js";
|
|
5
|
+
export function resolveEntityType(entity) {
|
|
6
|
+
return entity.entityType?.trim() || entity.entityName.trim();
|
|
7
|
+
}
|
|
8
|
+
export function buildMemorixWriteCollectionCandidates(args) {
|
|
9
|
+
const env = args.env ?? process.env;
|
|
10
|
+
const target = resolveMemorixWriteTarget(args.writeDescriptor);
|
|
11
|
+
const entityType = resolveEntityType(args.entity);
|
|
12
|
+
const contentTypeKey = args.writeDescriptor.target.contentType;
|
|
13
|
+
const contentType = args.entity.contentTypes[contentTypeKey];
|
|
14
|
+
if (!contentType) {
|
|
15
|
+
throwWriterError("UNKNOWN_CONTENT_TYPE", `unknown content type "${contentTypeKey}" for entity "${args.entity.entityName}"`);
|
|
16
|
+
}
|
|
17
|
+
const candidates = [];
|
|
18
|
+
if (args.override?.trim())
|
|
19
|
+
candidates.push(args.override.trim());
|
|
20
|
+
if (args.writeDescriptor.target.targetCollection?.trim()) {
|
|
21
|
+
candidates.push(args.writeDescriptor.target.targetCollection.trim());
|
|
22
|
+
}
|
|
23
|
+
if (contentType.collection?.trim()) {
|
|
24
|
+
candidates.push(contentType.collection.trim());
|
|
25
|
+
}
|
|
26
|
+
const envKey = targetCollectionEnvKey(target, entityType);
|
|
27
|
+
const fromEnv = env[envKey]?.trim();
|
|
28
|
+
if (fromEnv)
|
|
29
|
+
candidates.push(fromEnv);
|
|
30
|
+
if (args.writeDescriptor.target.targetCollectionCandidates?.length) {
|
|
31
|
+
candidates.push(...args.writeDescriptor.target.targetCollectionCandidates);
|
|
32
|
+
}
|
|
33
|
+
const prefix = args.entity.collectionPrefix.trim();
|
|
34
|
+
const postfix = contentType.postfix?.trim();
|
|
35
|
+
if (prefix && postfix) {
|
|
36
|
+
candidates.push(`${prefix}-${postfix}`);
|
|
37
|
+
}
|
|
38
|
+
const defaultCandidates = target === "entity"
|
|
39
|
+
? DEFAULT_ENTITY_COLLECTION_CANDIDATES
|
|
40
|
+
: DEFAULT_EVENT_COLLECTION_CANDIDATES;
|
|
41
|
+
if (defaultCandidates[entityType]) {
|
|
42
|
+
candidates.push(...defaultCandidates[entityType]);
|
|
43
|
+
}
|
|
44
|
+
candidates.push(target === "entity" ? entityType : `${entityType}-events`);
|
|
45
|
+
return [...new Set(candidates.filter(Boolean))];
|
|
46
|
+
}
|
|
47
|
+
/** Sync resolver: returns the first configured candidate (no Mongo existence check). */
|
|
48
|
+
export function resolveMemorixWriteCollectionName(entity, writeDescriptor, options = {}) {
|
|
49
|
+
const candidates = buildMemorixWriteCollectionCandidates({
|
|
50
|
+
entity,
|
|
51
|
+
writeDescriptor,
|
|
52
|
+
override: options.override,
|
|
53
|
+
env: options.env,
|
|
54
|
+
});
|
|
55
|
+
return candidates[0];
|
|
56
|
+
}
|
|
57
|
+
export async function resolveMemorixWriteTargetCollection(args) {
|
|
58
|
+
const env = args.env ?? process.env;
|
|
59
|
+
const target = resolveMemorixWriteTarget(args.writeDescriptor);
|
|
60
|
+
const database = resolveMemorixDbName(target, env);
|
|
61
|
+
const candidates = buildMemorixWriteCollectionCandidates({
|
|
62
|
+
entity: args.entity,
|
|
63
|
+
writeDescriptor: args.writeDescriptor,
|
|
64
|
+
override: args.override,
|
|
65
|
+
env,
|
|
66
|
+
});
|
|
67
|
+
if (args.verifyExists === false) {
|
|
68
|
+
return { collection: candidates[0], target, database };
|
|
69
|
+
}
|
|
70
|
+
const db = args.tier.client.db(database);
|
|
71
|
+
const existing = await listCollectionNames(db);
|
|
72
|
+
for (const name of candidates) {
|
|
73
|
+
if (existing.has(name)) {
|
|
74
|
+
return { collection: name, target, database };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const envKey = targetCollectionEnvKey(target, resolveEntityType(args.entity));
|
|
78
|
+
throwWriterError("UNKNOWN_COLLECTION", `No ${target} collection found for entityType=${resolveEntityType(args.entity)} ` +
|
|
79
|
+
`(database=${database}). Tried: ${candidates.join(", ")}. Set ` +
|
|
80
|
+
`write descriptor targetCollection, ${envKey}, or create one of the collections.`);
|
|
81
|
+
}
|
|
82
|
+
async function listCollectionNames(db) {
|
|
83
|
+
const existing = await db.listCollections().toArray();
|
|
84
|
+
return new Set(existing.map((c) => c.name));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=collection-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-name.js","sourceRoot":"","sources":["../../src/data/collection-name.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ResolvedIdentity = {
|
|
2
|
+
entityId?: string;
|
|
3
|
+
eventId?: string;
|
|
4
|
+
idField: "entityId" | "eventId";
|
|
5
|
+
idValue: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveRequestIdentity(args: {
|
|
8
|
+
entityId?: string;
|
|
9
|
+
eventId?: string;
|
|
10
|
+
descriptorIdField?: "entityId" | "eventId";
|
|
11
|
+
}): ResolvedIdentity;
|
|
12
|
+
export declare function assertDescriptorIdField(identity: ResolvedIdentity, descriptorIdField: "entityId" | "eventId"): void;
|
|
13
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/data/identity.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC5C,GAAG,gBAAgB,CA8BnB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,UAAU,GAAG,SAAS,GACxC,IAAI,CAON"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { throwWriterError } from "../errors/errors.js";
|
|
2
|
+
export function resolveRequestIdentity(args) {
|
|
3
|
+
const hasEntity = Boolean(args.entityId?.trim());
|
|
4
|
+
const hasEvent = Boolean(args.eventId?.trim());
|
|
5
|
+
if (hasEntity && hasEvent) {
|
|
6
|
+
throwWriterError("INVALID_IDENTITY", "request must contain exactly one of entityId or eventId, not both");
|
|
7
|
+
}
|
|
8
|
+
if (!hasEntity && !hasEvent) {
|
|
9
|
+
throwWriterError("INVALID_IDENTITY", "request must contain exactly one of entityId or eventId");
|
|
10
|
+
}
|
|
11
|
+
if (hasEntity) {
|
|
12
|
+
return {
|
|
13
|
+
entityId: args.entityId.trim(),
|
|
14
|
+
idField: "entityId",
|
|
15
|
+
idValue: args.entityId.trim(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
eventId: args.eventId.trim(),
|
|
20
|
+
idField: "eventId",
|
|
21
|
+
idValue: args.eventId.trim(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function assertDescriptorIdField(identity, descriptorIdField) {
|
|
25
|
+
if (identity.idField !== descriptorIdField) {
|
|
26
|
+
throwWriterError("INVALID_IDENTITY", `write descriptor requires idField "${descriptorIdField}" but request used "${identity.idField}"`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/data/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AASvD,MAAM,UAAU,sBAAsB,CAAC,IAItC;IACC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,gBAAgB,CACd,kBAAkB,EAClB,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,gBAAgB,CACd,kBAAkB,EAClB,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAS,CAAC,IAAI,EAAE;YAC/B,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,IAAI,CAAC,QAAS,CAAC,IAAI,EAAE;SAC/B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAQ,CAAC,IAAI,EAAE;QAC7B,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,IAAI,CAAC,OAAQ,CAAC,IAAI,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAA0B,EAC1B,iBAAyC;IAEzC,IAAI,QAAQ,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QAC3C,gBAAgB,CACd,kBAAkB,EAClB,sCAAsC,iBAAiB,uBAAuB,QAAQ,CAAC,OAAO,GAAG,CAClG,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MemorixDataTier } from "../mongo/tier.js";
|
|
2
|
+
import type { MemorixTarget } from "../mongo/target.js";
|
|
3
|
+
export type MemorixWriteAdapter = {
|
|
4
|
+
target: MemorixTarget;
|
|
5
|
+
database: string;
|
|
6
|
+
findOne(collection: string, filter: Record<string, unknown>): Promise<Record<string, unknown> | null>;
|
|
7
|
+
findMany(collection: string, filter: Record<string, unknown>, opts?: {
|
|
8
|
+
limit?: number;
|
|
9
|
+
sort?: Record<string, unknown>;
|
|
10
|
+
}): Promise<Record<string, unknown>[]>;
|
|
11
|
+
insert(collection: string, document: Record<string, unknown>): Promise<{
|
|
12
|
+
insertedId: unknown;
|
|
13
|
+
}>;
|
|
14
|
+
patch(collection: string, filter: Record<string, unknown>, $set: Record<string, unknown>): Promise<{
|
|
15
|
+
matchedCount: number;
|
|
16
|
+
modifiedCount: number;
|
|
17
|
+
}>;
|
|
18
|
+
replace(collection: string, filter: Record<string, unknown>, replacement: Record<string, unknown>, upsert?: boolean): Promise<{
|
|
19
|
+
matchedCount: number;
|
|
20
|
+
modifiedCount: number;
|
|
21
|
+
upsertedCount: number;
|
|
22
|
+
}>;
|
|
23
|
+
update(collection: string, filter: Record<string, unknown>, update: Record<string, unknown>): Promise<{
|
|
24
|
+
matchedCount: number;
|
|
25
|
+
modifiedCount: number;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
export type CreateMemorixWriteAdapterOptions = {
|
|
29
|
+
target: MemorixTarget;
|
|
30
|
+
env?: NodeJS.ProcessEnv;
|
|
31
|
+
};
|
|
32
|
+
export declare function createMemorixWriteAdapter(tier: MemorixDataTier, options: CreateMemorixWriteAdapterOptions): MemorixWriteAdapter;
|
|
33
|
+
//# sourceMappingURL=memorix-write-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memorix-write-adapter.d.ts","sourceRoot":"","sources":["../../src/data/memorix-write-adapter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACxD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,CACJ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpC,KAAK,CACH,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,MAAM,CACJ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAgBF,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,gCAAgC,GACxC,mBAAmB,CA2CrB"}
|