@photon-grove/evt 0.1.0 → 0.1.1
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 +50 -9
- package/dist/dynamodb/client.d.ts +83 -0
- package/dist/dynamodb/client.d.ts.map +1 -0
- package/dist/dynamodb/client.js +6 -0
- package/dist/dynamodb/client.js.map +1 -0
- package/dist/dynamodb/index.d.ts +5 -1
- package/dist/dynamodb/index.d.ts.map +1 -1
- package/dist/dynamodb/index.js +7 -3
- package/dist/dynamodb/index.js.map +1 -1
- package/dist/dynamodb/item.d.ts +2 -0
- package/dist/dynamodb/item.d.ts.map +1 -1
- package/dist/dynamodb/item.js +5 -4
- package/dist/dynamodb/item.js.map +1 -1
- package/dist/dynamodb/marker.d.ts +11 -0
- package/dist/dynamodb/marker.d.ts.map +1 -0
- package/dist/dynamodb/marker.js +56 -0
- package/dist/dynamodb/marker.js.map +1 -0
- package/dist/dynamodb/repository.d.ts +61 -0
- package/dist/dynamodb/repository.d.ts.map +1 -0
- package/dist/dynamodb/repository.js +731 -0
- package/dist/dynamodb/repository.js.map +1 -0
- package/dist/dynamodb/requests.d.ts +65 -0
- package/dist/dynamodb/requests.d.ts.map +1 -0
- package/dist/dynamodb/requests.js +179 -0
- package/dist/dynamodb/requests.js.map +1 -0
- package/dist/errors.d.ts +96 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +103 -2
- package/dist/errors.js.map +1 -1
- package/dist/features.d.ts +55 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +126 -0
- package/dist/features.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +1 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/repository.d.ts +38 -2
- package/dist/memory/repository.d.ts.map +1 -1
- package/dist/memory/repository.js +95 -6
- package/dist/memory/repository.js.map +1 -1
- package/dist/repository.d.ts +30 -1
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +3 -4
- package/dist/repository.js.map +1 -1
- package/dist/store.d.ts +3 -3
- package/dist/store.js +3 -3
- package/package.json +12 -3
- package/src/dynamodb/client.ts +102 -0
- package/src/dynamodb/index.ts +26 -2
- package/src/dynamodb/item.ts +6 -4
- package/src/dynamodb/marker.ts +64 -0
- package/src/dynamodb/repository.ts +1030 -0
- package/src/dynamodb/requests.ts +256 -0
- package/src/errors.ts +153 -2
- package/src/features.ts +175 -0
- package/src/index.ts +24 -1
- package/src/memory/index.ts +9 -1
- package/src/memory/repository.ts +156 -6
- package/src/repository.ts +34 -6
- package/src/store.ts +3 -3
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type FeaturePair } from './errors.js';
|
|
2
|
+
/** The feature every writer models and requires: per-stream head items (ADR 0007). */
|
|
3
|
+
export declare const STREAM_HEADS_FEATURE = "stream-heads";
|
|
4
|
+
/** The stored-format version of {@link STREAM_HEADS_FEATURE} this package reads and writes. */
|
|
5
|
+
export declare const STREAM_HEADS_VERSION = 1;
|
|
6
|
+
/**
|
|
7
|
+
* The `(feature, stored-format version)` pairs this package models. The other features the
|
|
8
|
+
* storage format defines (`journal`, `journal-compaction`, `postgres-views`) are Rust-first, so a
|
|
9
|
+
* store that declares any of them is refused.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SUPPORTED_FEATURES: readonly FeaturePair[];
|
|
12
|
+
/** The parsed marker row. A store with no marker row has no manifest. */
|
|
13
|
+
export interface FeatureManifest {
|
|
14
|
+
/** Bumped by exactly one on every declaration. */
|
|
15
|
+
readonly version: bigint;
|
|
16
|
+
/** Each declared feature's stored-format version. */
|
|
17
|
+
readonly features: ReadonlyMap<string, number>;
|
|
18
|
+
/** The entity types whose commit-wide projectors are history-dependent: never compacted. */
|
|
19
|
+
readonly historyDependent: readonly string[];
|
|
20
|
+
/** The entity types configured with retention: never fenced. */
|
|
21
|
+
readonly retention: readonly string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Refuses a manifest that declares a pair this package doesn't model, listing every such pair,
|
|
25
|
+
* with an {@link UnsupportedFeatureError}.
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkSupported(manifest: FeatureManifest | null): void;
|
|
28
|
+
/** Whether the manifest declares stream-heads at the version this package models. */
|
|
29
|
+
export declare function declaresStreamHeads(manifest: FeatureManifest | null): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Refuses a write to a store whose manifest declares an unsupported pair, or doesn't declare
|
|
32
|
+
* stream-heads, without declaring anything.
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkWritable(manifest: FeatureManifest | null): void;
|
|
35
|
+
/** The manifest with stream-heads declared and its version bumped: a first writer's declaration. */
|
|
36
|
+
export declare function withStreamHeads(manifest: FeatureManifest | null): FeatureManifest;
|
|
37
|
+
/** A manifest's stored JSON texts, as the marker row holds them. */
|
|
38
|
+
export interface ManifestTexts {
|
|
39
|
+
/** A JSON object, feature name to stored-format version, keys sorted. `{}` when empty. */
|
|
40
|
+
features: string;
|
|
41
|
+
/** A JSON array of entity types, sorted by UTF-8 bytes and deduplicated. `[]` when empty. */
|
|
42
|
+
historyDependent: string;
|
|
43
|
+
/** Like `historyDependent`. */
|
|
44
|
+
retention: string;
|
|
45
|
+
}
|
|
46
|
+
/** Encodes a manifest's declarable parts as the marker row stores them. */
|
|
47
|
+
export declare function encodeManifest(manifest: FeatureManifest): ManifestTexts;
|
|
48
|
+
/**
|
|
49
|
+
* Decodes a marker row's stored texts. An empty text is an empty map or set, as an absent
|
|
50
|
+
* attribute is.
|
|
51
|
+
*/
|
|
52
|
+
export declare function decodeManifest(version: bigint, texts: ManifestTexts): FeatureManifest;
|
|
53
|
+
/** An entity-type set in its stored order: sorted by UTF-8 bytes and deduplicated. */
|
|
54
|
+
export declare function entityTypeSet(types: readonly string[]): string[];
|
|
55
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AAKpB,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,WAAW,EAEnD,CAAA;AAKF,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,4FAA4F;IAC5F,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CACtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAWrE;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAE7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAKpE;AAED,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,eAAe,CAUjF;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,gBAAgB,EAAE,MAAM,CAAA;IACxB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa,CAMvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,eAAe,CAOrF;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAMhE"}
|
package/dist/features.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// The feature manifest a store keeps on its SYSTEM#FEATURES marker row (storage format, "Feature
|
|
2
|
+
// marker"): the extensions it declares, each at a stored-format version, and the entity types
|
|
3
|
+
// declared history-dependent or retained. A writer refuses a store that declares a pair it doesn't
|
|
4
|
+
// model, and every writer requires stream-heads.
|
|
5
|
+
import { EvtError, StreamHeadsNotMigratedError, UnsupportedFeatureError, } from './errors.js';
|
|
6
|
+
import { DOCUMENT, int64, invalid } from './fields.js';
|
|
7
|
+
import { parseJson, stringifyJson } from './json.js';
|
|
8
|
+
import { compareUtf8 } from './utf8.js';
|
|
9
|
+
/** The feature every writer models and requires: per-stream head items (ADR 0007). */
|
|
10
|
+
export const STREAM_HEADS_FEATURE = 'stream-heads';
|
|
11
|
+
/** The stored-format version of {@link STREAM_HEADS_FEATURE} this package reads and writes. */
|
|
12
|
+
export const STREAM_HEADS_VERSION = 1;
|
|
13
|
+
/**
|
|
14
|
+
* The `(feature, stored-format version)` pairs this package models. The other features the
|
|
15
|
+
* storage format defines (`journal`, `journal-compaction`, `postgres-views`) are Rust-first, so a
|
|
16
|
+
* store that declares any of them is refused.
|
|
17
|
+
*/
|
|
18
|
+
export const SUPPORTED_FEATURES = Object.freeze([
|
|
19
|
+
Object.freeze({ name: STREAM_HEADS_FEATURE, version: STREAM_HEADS_VERSION }),
|
|
20
|
+
]);
|
|
21
|
+
// What validation reads. Private, so no caller can add a pair to it.
|
|
22
|
+
const supported = new Map(SUPPORTED_FEATURES.map((pair) => [pair.name, pair.version]));
|
|
23
|
+
/**
|
|
24
|
+
* Refuses a manifest that declares a pair this package doesn't model, listing every such pair,
|
|
25
|
+
* with an {@link UnsupportedFeatureError}.
|
|
26
|
+
*/
|
|
27
|
+
export function checkSupported(manifest) {
|
|
28
|
+
const unsupported = [];
|
|
29
|
+
for (const [name, version] of sortedFeatures(manifest?.features ?? new Map())) {
|
|
30
|
+
if (supported.get(name) !== version) {
|
|
31
|
+
unsupported.push({ name, version });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (unsupported.length > 0) {
|
|
35
|
+
throw new UnsupportedFeatureError(unsupported);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Whether the manifest declares stream-heads at the version this package models. */
|
|
39
|
+
export function declaresStreamHeads(manifest) {
|
|
40
|
+
return manifest?.features.get(STREAM_HEADS_FEATURE) === STREAM_HEADS_VERSION;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Refuses a write to a store whose manifest declares an unsupported pair, or doesn't declare
|
|
44
|
+
* stream-heads, without declaring anything.
|
|
45
|
+
*/
|
|
46
|
+
export function checkWritable(manifest) {
|
|
47
|
+
checkSupported(manifest);
|
|
48
|
+
if (!declaresStreamHeads(manifest)) {
|
|
49
|
+
throw new StreamHeadsNotMigratedError();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** The manifest with stream-heads declared and its version bumped: a first writer's declaration. */
|
|
53
|
+
export function withStreamHeads(manifest) {
|
|
54
|
+
const features = new Map(manifest?.features);
|
|
55
|
+
features.set(STREAM_HEADS_FEATURE, STREAM_HEADS_VERSION);
|
|
56
|
+
return {
|
|
57
|
+
version: (manifest?.version ?? 0n) + 1n,
|
|
58
|
+
features,
|
|
59
|
+
historyDependent: manifest?.historyDependent ?? [],
|
|
60
|
+
retention: manifest?.retention ?? [],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** Encodes a manifest's declarable parts as the marker row stores them. */
|
|
64
|
+
export function encodeManifest(manifest) {
|
|
65
|
+
return {
|
|
66
|
+
features: stringifyJson(new Map(manifest.features)),
|
|
67
|
+
historyDependent: stringifyJson(entityTypeSet(manifest.historyDependent)),
|
|
68
|
+
retention: stringifyJson(entityTypeSet(manifest.retention)),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Decodes a marker row's stored texts. An empty text is an empty map or set, as an absent
|
|
73
|
+
* attribute is.
|
|
74
|
+
*/
|
|
75
|
+
export function decodeManifest(version, texts) {
|
|
76
|
+
return {
|
|
77
|
+
version,
|
|
78
|
+
features: texts.features === '' ? new Map() : parseFeatures(texts.features),
|
|
79
|
+
historyDependent: parseEntityTypes(texts.historyDependent, 'historyDependent'),
|
|
80
|
+
retention: parseEntityTypes(texts.retention, 'retention'),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** An entity-type set in its stored order: sorted by UTF-8 bytes and deduplicated. */
|
|
84
|
+
export function entityTypeSet(types) {
|
|
85
|
+
// A fresh array, sorted in place: ES2022 has no toSorted.
|
|
86
|
+
const set = Array.from(new Set(types));
|
|
87
|
+
set.sort(compareUtf8);
|
|
88
|
+
return set;
|
|
89
|
+
}
|
|
90
|
+
function parseFeatures(text) {
|
|
91
|
+
const parsed = parseStored(text, 'features');
|
|
92
|
+
if (!(parsed instanceof Map)) {
|
|
93
|
+
throw invalid('the feature manifest is not a JSON object');
|
|
94
|
+
}
|
|
95
|
+
// Go and Rust read a version as an int64. One past the safe integers is no version this
|
|
96
|
+
// package models, so rounding it changes only the refusal's text.
|
|
97
|
+
const features = new Map();
|
|
98
|
+
for (const [name, version] of parsed) {
|
|
99
|
+
features.set(name, Number(int64(version, `the feature manifest's ${name} version`)));
|
|
100
|
+
}
|
|
101
|
+
return features;
|
|
102
|
+
}
|
|
103
|
+
function parseEntityTypes(text, what) {
|
|
104
|
+
if (text.trim() === '') {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
const parsed = parseStored(text, what);
|
|
108
|
+
if (!Array.isArray(parsed) || parsed.some((entry) => typeof entry !== 'string')) {
|
|
109
|
+
throw invalid(`the ${what} set is not a JSON array of strings`);
|
|
110
|
+
}
|
|
111
|
+
return entityTypeSet(parsed);
|
|
112
|
+
}
|
|
113
|
+
function parseStored(text, what) {
|
|
114
|
+
try {
|
|
115
|
+
return parseJson(text, DOCUMENT);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
throw new EvtError('invalidRecord', `the stored ${what} is not JSON`, { cause: error });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function sortedFeatures(features) {
|
|
122
|
+
const sorted = Array.from(features);
|
|
123
|
+
sorted.sort(([a], [b]) => compareUtf8(a, b));
|
|
124
|
+
return sorted;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,12 @@ export { type Aggregate, type AggregateDefinition, type Decision, type EventDefi
|
|
|
2
2
|
export { base64Decode, base64Encode } from './base64.js';
|
|
3
3
|
export { type Codec, type JsonOptions, type StandardResult, type StandardSchemaV1, json, } from './codec.js';
|
|
4
4
|
export { encodeEnvelope, decodeEnvelope, messageAttributes } from './envelope.js';
|
|
5
|
-
export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, type EvtErrorCode, ReplayError, ReservedEntityIdError, SequenceGapError, SnapshotError, StreamHeadDriftError, isConflict, isRetryable, } from './errors.js';
|
|
5
|
+
export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, type EvtErrorCode, FeatureManifestChangedError, HistoryDependentProjectionError, RebuildInProgressError, ReplayError, ReservedEntityIdError, SequenceGapError, SnapshotError, StoreNotInitializedError, StreamHeadDriftError, StreamHeadsNotMigratedError, TransientError, UnsupportedFeatureError, type FeaturePair, isConflict, isRetryable, } from './errors.js';
|
|
6
6
|
export { type SerializedEvent, type SerializedSnapshot, decodeEvent, decodeSnapshot, encodeEvent, encodeSnapshot, eventId, } from './event.js';
|
|
7
|
+
export { type FeatureManifest, type ManifestTexts, STREAM_HEADS_FEATURE, STREAM_HEADS_VERSION, SUPPORTED_FEATURES, decodeManifest, encodeManifest, } from './features.js';
|
|
7
8
|
export { JsonNumber, type JsonValue, parseJson, stringifyJson } from './json.js';
|
|
8
9
|
export { type Metadata, type Origin, decodeMetadata, effectiveCausationId, emptyMetadata, encodeMetadata, } from './metadata.js';
|
|
9
|
-
export type { CallOptions, Commit, NewSnapshot, Repository } from './repository.js';
|
|
10
|
+
export type { CallOptions, Commit, NewSnapshot, Repository, StoreInitializer, } from './repository.js';
|
|
10
11
|
export { DEFAULT_RETRY_POLICY, type RetryPolicy, retryDelay, } from './retry.js';
|
|
11
12
|
export { MAX_COMMIT_ITEM_BYTES, snapshotCommitSize, snapshotEventsDue } from './snapshots.js';
|
|
12
13
|
export { compareUtf8, utf8Length } from './utf8.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EACR,KAAK,YAAY,EACjB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EACR,KAAK,YAAY,EACjB,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,uBAAuB,EACvB,KAAK,WAAW,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,WAAW,EACX,MAAM,EACN,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAC3F,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,WAAW,CAAA;AACjD,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,YAAY,GAClB,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,9 @@ export { defineAggregate, defineEvents, jsonUpcaster, } from './aggregate.js';
|
|
|
5
5
|
export { base64Decode, base64Encode } from './base64.js';
|
|
6
6
|
export { json, } from './codec.js';
|
|
7
7
|
export { encodeEnvelope, decodeEnvelope, messageAttributes } from './envelope.js';
|
|
8
|
-
export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, ReplayError, ReservedEntityIdError, SequenceGapError, SnapshotError, StreamHeadDriftError, isConflict, isRetryable, } from './errors.js';
|
|
8
|
+
export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, FeatureManifestChangedError, HistoryDependentProjectionError, RebuildInProgressError, ReplayError, ReservedEntityIdError, SequenceGapError, SnapshotError, StoreNotInitializedError, StreamHeadDriftError, StreamHeadsNotMigratedError, TransientError, UnsupportedFeatureError, isConflict, isRetryable, } from './errors.js';
|
|
9
9
|
export { decodeEvent, decodeSnapshot, encodeEvent, encodeSnapshot, eventId, } from './event.js';
|
|
10
|
+
export { STREAM_HEADS_FEATURE, STREAM_HEADS_VERSION, SUPPORTED_FEATURES, decodeManifest, encodeManifest, } from './features.js';
|
|
10
11
|
export { JsonNumber, parseJson, stringifyJson } from './json.js';
|
|
11
12
|
export { decodeMetadata, effectiveCausationId, emptyMetadata, encodeMetadata, } from './metadata.js';
|
|
12
13
|
export { DEFAULT_RETRY_POLICY, retryDelay, } from './retry.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wFAAwF;AACxF,mFAAmF;AAEnF,OAAO,EASL,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EAKL,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EAER,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EAGL,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,UAAU,EAAkB,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EAGL,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wFAAwF;AACxF,mFAAmF;AAEnF,OAAO,EASL,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EAKL,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EAER,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,uBAAuB,EAEvB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EAGL,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EAGL,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,UAAU,EAAkB,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EAGL,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AAQtB,OAAO,EACL,oBAAoB,EAEpB,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAC3F,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,WAAW,CAAA;AACjD,OAAO,EACL,yBAAyB,EAKzB,KAAK,GAEN,MAAM,YAAY,CAAA"}
|
package/dist/memory/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { type HeadFixtures, MemRepository, headFixtures } from './repository.js';
|
|
1
|
+
export { type ControlFixtures, type HeadFixtures, type ManifestDraft, MemRepository, type RebuildState, controlFixtures, headFixtures, } from './repository.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,aAAa,EACb,KAAK,YAAY,EACjB,eAAe,EACf,YAAY,GACb,MAAM,iBAAiB,CAAA"}
|
package/dist/memory/index.js
CHANGED
package/dist/memory/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAIL,aAAa,EAEb,eAAe,EACf,YAAY,GACb,MAAM,iBAAiB,CAAA"}
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
import type { SerializedEvent, SerializedSnapshot } from '../event.js';
|
|
2
|
-
import { type
|
|
2
|
+
import { type FeatureManifest } from '../features.js';
|
|
3
|
+
import { type CallOptions, type Commit, type Repository, type StoreInitializer } from '../repository.js';
|
|
4
|
+
/** The state of the rebuild fence's two rows that a commit's lock check reads. */
|
|
5
|
+
export interface RebuildState {
|
|
6
|
+
/** The generation counter: odd while a rebuild holds the store or after a force-release. */
|
|
7
|
+
generation: bigint;
|
|
8
|
+
/**
|
|
9
|
+
* The lock row: a rebuild's lease, the item a force-release leaves in its place, or none. A
|
|
10
|
+
* commit is refused while either exists, and while the generation is odd.
|
|
11
|
+
*/
|
|
12
|
+
lock: 'held' | 'forceReleased' | null;
|
|
13
|
+
}
|
|
3
14
|
/**
|
|
4
15
|
* An in-memory {@link Repository}. Every call copies what it stores and what it returns, so a
|
|
5
16
|
* caller that changes an event after committing it, or one it read, changes nothing stored.
|
|
6
17
|
*
|
|
7
18
|
* Each call runs to completion before another starts, so concurrent commits to one stream behave
|
|
8
19
|
* like racing writers on a live backend: one wins and the rest fail with a conflict.
|
|
20
|
+
*
|
|
21
|
+
* A fresh store is initialized by its first commit or snapshot write, which declares stream-heads
|
|
22
|
+
* on its feature manifest, so {@link initialize} is needed only where code treats every backend
|
|
23
|
+
* alike.
|
|
9
24
|
*/
|
|
10
|
-
export declare class MemRepository implements Repository {
|
|
25
|
+
export declare class MemRepository implements Repository, StoreInitializer {
|
|
11
26
|
#private;
|
|
27
|
+
initialize(options?: CallOptions): Promise<boolean>;
|
|
12
28
|
commit(commit: Commit, options?: CallOptions): Promise<void>;
|
|
13
29
|
events(entityId: string, options?: CallOptions): Promise<SerializedEvent[]>;
|
|
14
30
|
eventsAfter(entityId: string, after: bigint, options?: CallOptions): Promise<SerializedEvent[]>;
|
|
@@ -31,4 +47,24 @@ export interface HeadFixtures {
|
|
|
31
47
|
* drifts, and every later write to it fails.
|
|
32
48
|
*/
|
|
33
49
|
export declare function headFixtures(repo: MemRepository): HeadFixtures;
|
|
50
|
+
/** A feature manifest's declarable parts, which a declaration changes in place. */
|
|
51
|
+
export interface ManifestDraft {
|
|
52
|
+
features: Map<string, number>;
|
|
53
|
+
historyDependent: string[];
|
|
54
|
+
retention: string[];
|
|
55
|
+
}
|
|
56
|
+
/** What a conformance suite needs to declare features and hold the rebuild lock. */
|
|
57
|
+
export interface ControlFixtures {
|
|
58
|
+
/** The stored manifest, or null when the store has no marker row. */
|
|
59
|
+
manifest(): FeatureManifest | null;
|
|
60
|
+
/** Changes the manifest in one declaration, bumping its version by one, and returns it. */
|
|
61
|
+
declare(change: (draft: ManifestDraft) => void): FeatureManifest;
|
|
62
|
+
/** Sets the rebuild fence's rows, as a rebuild's lifecycle would. */
|
|
63
|
+
setRebuild(state: RebuildState): void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Hooks that change a repository's control rows, for conformance suites only. A declaration may
|
|
67
|
+
* declare features this package doesn't model, which then refuse every write.
|
|
68
|
+
*/
|
|
69
|
+
export declare function controlFixtures(repo: MemRepository): ControlFixtures;
|
|
34
70
|
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/memory/repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/memory/repository.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAA;AACpE,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,gBAAgB,EAKtB,MAAM,kBAAkB,CAAA;AAUzB,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAA;CACtC;AAYD;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,YAAW,UAAU,EAAE,gBAAgB;;IAI1D,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAUxD;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CjE;IAEK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAEhF;IAEK,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAO5B;IAEK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAU3F;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAK1F;IAEK,WAAW,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BvF;IAEK,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC5F;CAmCF;AA+DD,8FAA8F;AAC9F,MAAM,WAAW,YAAY;IAC3B,uFAAuF;IACvF,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IACjD,gEAAgE;IAChE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,wDAAwD;IACxD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAC5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAqB9D;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,QAAQ,IAAI,eAAe,GAAG,IAAI,CAAA;IAClC,2FAA2F;IAC3F,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,eAAe,CAAA;IAChE,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;CACtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CA8BpE"}
|
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
// The in-memory repository. It enforces the storage contract the way the live backends do: a head
|
|
2
|
-
// per stream that every commit raises, optimistic concurrency against it,
|
|
3
|
-
// classification and transaction budget. It's for
|
|
4
|
-
|
|
2
|
+
// per stream that every commit raises, optimistic concurrency against it, the feature marker and
|
|
3
|
+
// the rebuild-lock check, and the same failure classification and transaction budget. It's for
|
|
4
|
+
// tests and local development.
|
|
5
|
+
import { ConflictError, CompactionUncoveredError, EvtError, HistoryDependentProjectionError, RebuildInProgressError, SequenceGapError, StreamHeadDriftError, StreamHeadsNotMigratedError, } from '../errors.js';
|
|
6
|
+
import { checkSupported, checkWritable, declaresStreamHeads, entityTypeSet, withStreamHeads, } from '../features.js';
|
|
5
7
|
import { int64Argument } from '../fields.js';
|
|
6
8
|
import { checkBudget, checkNotReserved, commitSizes, validateCommit, } from '../repository.js';
|
|
7
|
-
//
|
|
9
|
+
// Read a repository's private state, for the fixtures. The class's static block sets them.
|
|
8
10
|
let streamsOf;
|
|
11
|
+
let controlsOf;
|
|
9
12
|
/**
|
|
10
13
|
* An in-memory {@link Repository}. Every call copies what it stores and what it returns, so a
|
|
11
14
|
* caller that changes an event after committing it, or one it read, changes nothing stored.
|
|
12
15
|
*
|
|
13
16
|
* Each call runs to completion before another starts, so concurrent commits to one stream behave
|
|
14
17
|
* like racing writers on a live backend: one wins and the rest fail with a conflict.
|
|
18
|
+
*
|
|
19
|
+
* A fresh store is initialized by its first commit or snapshot write, which declares stream-heads
|
|
20
|
+
* on its feature manifest, so {@link initialize} is needed only where code treats every backend
|
|
21
|
+
* alike.
|
|
15
22
|
*/
|
|
16
23
|
export class MemRepository {
|
|
17
24
|
#streams = new Map();
|
|
25
|
+
#controls = { manifest: null, rebuild: { generation: 0n, lock: null } };
|
|
26
|
+
async initialize(options) {
|
|
27
|
+
options?.signal?.throwIfAborted();
|
|
28
|
+
checkSupported(this.#controls.manifest);
|
|
29
|
+
if (declaresStreamHeads(this.#controls.manifest)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
this.#declareStreamHeads();
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
18
35
|
async commit(commit, options) {
|
|
19
36
|
options?.signal?.throwIfAborted();
|
|
20
37
|
validateCommit(commit);
|
|
@@ -24,6 +41,13 @@ export class MemRepository {
|
|
|
24
41
|
}
|
|
25
42
|
// Every backend budgets a commit the same way, so an oversized one fails before any write.
|
|
26
43
|
checkBudget(commitSizes(commit, () => undefined));
|
|
44
|
+
// The control rows come first, as the two checks that open every live commit: the marker,
|
|
45
|
+
// then the rebuild lock, which an unsettled generation fails, a force-released one included.
|
|
46
|
+
this.#checkManifest();
|
|
47
|
+
const { rebuild } = this.#controls;
|
|
48
|
+
if (rebuild.lock !== null || rebuild.generation % 2n !== 0n) {
|
|
49
|
+
throw new RebuildInProgressError();
|
|
50
|
+
}
|
|
27
51
|
const held = this.#streams.get(commit.entityId) ?? emptyStream();
|
|
28
52
|
checkWrite(commit, held);
|
|
29
53
|
// Copy everything before the first write, so a copy that throws leaves the stream as it was.
|
|
@@ -72,6 +96,7 @@ export class MemRepository {
|
|
|
72
96
|
checkNotReserved(snapshot.entityId);
|
|
73
97
|
int64Argument(snapshot.sequence, 'snapshot.sequence');
|
|
74
98
|
int64Argument(snapshot.eventSequence, 'snapshot.eventSequence');
|
|
99
|
+
this.#checkManifest();
|
|
75
100
|
// The stream's head must cover the snapshot. One of an empty stream (event sequence 0) may
|
|
76
101
|
// have no head at all.
|
|
77
102
|
const held = this.#streams.get(snapshot.entityId);
|
|
@@ -95,11 +120,19 @@ export class MemRepository {
|
|
|
95
120
|
if (int64Argument(through, 'through') < 1n) {
|
|
96
121
|
return 0;
|
|
97
122
|
}
|
|
123
|
+
// Compaction validates the manifest, but never declares stream-heads itself.
|
|
124
|
+
const { manifest } = this.#controls;
|
|
125
|
+
checkWritable(manifest);
|
|
98
126
|
const stream = this.#streams.get(entityId);
|
|
99
|
-
const
|
|
100
|
-
|
|
127
|
+
const snapshot = stream?.snapshot;
|
|
128
|
+
const covered = snapshot?.eventSequence ?? null;
|
|
129
|
+
if (stream === undefined || !snapshot || covered === null || covered < through) {
|
|
101
130
|
throw new CompactionUncoveredError(entityId, through, covered);
|
|
102
131
|
}
|
|
132
|
+
// A history-dependent type's rebuild replays the events compaction would delete.
|
|
133
|
+
if (manifest?.historyDependent.includes(snapshot.entityType)) {
|
|
134
|
+
throw new HistoryDependentProjectionError(snapshot.entityType, entityId);
|
|
135
|
+
}
|
|
103
136
|
let deleted = 0;
|
|
104
137
|
for (const sequence of stream.events.keys()) {
|
|
105
138
|
if (sequence <= through) {
|
|
@@ -111,6 +144,22 @@ export class MemRepository {
|
|
|
111
144
|
}
|
|
112
145
|
static {
|
|
113
146
|
streamsOf = (repo) => repo.#streams;
|
|
147
|
+
controlsOf = (repo) => repo.#controls;
|
|
148
|
+
}
|
|
149
|
+
// Refuses a write to a store whose manifest declares an unsupported pair, and declares
|
|
150
|
+
// stream-heads on a store without it, as its first writer, when the store holds no data.
|
|
151
|
+
#checkManifest() {
|
|
152
|
+
checkSupported(this.#controls.manifest);
|
|
153
|
+
if (!declaresStreamHeads(this.#controls.manifest)) {
|
|
154
|
+
this.#declareStreamHeads();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
#declareStreamHeads() {
|
|
158
|
+
const holdsData = Array.from(this.#streams.values()).some((stream) => stream.events.size > 0 || stream.snapshot !== null);
|
|
159
|
+
if (holdsData) {
|
|
160
|
+
throw new StreamHeadsNotMigratedError();
|
|
161
|
+
}
|
|
162
|
+
this.#controls.manifest = withStreamHeads(this.#controls.manifest);
|
|
114
163
|
}
|
|
115
164
|
// The stream's events by sequence, ascending or descending. Sequences are unique.
|
|
116
165
|
#sorted(entityId, descending = false) {
|
|
@@ -191,6 +240,46 @@ export function headFixtures(repo) {
|
|
|
191
240
|
},
|
|
192
241
|
};
|
|
193
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Hooks that change a repository's control rows, for conformance suites only. A declaration may
|
|
245
|
+
* declare features this package doesn't model, which then refuse every write.
|
|
246
|
+
*/
|
|
247
|
+
export function controlFixtures(repo) {
|
|
248
|
+
const controls = controlsOf(repo);
|
|
249
|
+
return {
|
|
250
|
+
manifest() {
|
|
251
|
+
return controls.manifest && cloneManifest(controls.manifest);
|
|
252
|
+
},
|
|
253
|
+
declare(change) {
|
|
254
|
+
const draft = {
|
|
255
|
+
features: new Map(controls.manifest?.features),
|
|
256
|
+
historyDependent: [...(controls.manifest?.historyDependent ?? [])],
|
|
257
|
+
retention: [...(controls.manifest?.retention ?? [])],
|
|
258
|
+
};
|
|
259
|
+
change(draft);
|
|
260
|
+
// Stored as the marker row stores them: each set sorted and deduplicated.
|
|
261
|
+
controls.manifest = {
|
|
262
|
+
version: (controls.manifest?.version ?? 0n) + 1n,
|
|
263
|
+
features: new Map(draft.features),
|
|
264
|
+
historyDependent: entityTypeSet(draft.historyDependent),
|
|
265
|
+
retention: entityTypeSet(draft.retention),
|
|
266
|
+
};
|
|
267
|
+
return cloneManifest(controls.manifest);
|
|
268
|
+
},
|
|
269
|
+
setRebuild(state) {
|
|
270
|
+
int64Argument(state.generation, 'generation');
|
|
271
|
+
controls.rebuild = { ...state };
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
function cloneManifest(manifest) {
|
|
276
|
+
return {
|
|
277
|
+
version: manifest.version,
|
|
278
|
+
features: new Map(manifest.features),
|
|
279
|
+
historyDependent: [...manifest.historyDependent],
|
|
280
|
+
retention: [...manifest.retention],
|
|
281
|
+
};
|
|
282
|
+
}
|
|
194
283
|
function emptyStream() {
|
|
195
284
|
return { events: new Map(), snapshot: null, head: 0n };
|
|
196
285
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/memory/repository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/memory/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/repository.d.ts
CHANGED
|
@@ -21,7 +21,11 @@ export interface Commit {
|
|
|
21
21
|
}
|
|
22
22
|
/** Options every repository call takes. */
|
|
23
23
|
export interface CallOptions {
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Aborts the call. An abort before the call starts rejects with the signal's reason and writes
|
|
26
|
+
* nothing. An abort while a live backend's write is in flight rejects too, but the write may
|
|
27
|
+
* have been applied: load the stream again before deciding it wasn't.
|
|
28
|
+
*/
|
|
25
29
|
signal?: AbortSignal | undefined;
|
|
26
30
|
}
|
|
27
31
|
/**
|
|
@@ -39,6 +43,16 @@ export interface CallOptions {
|
|
|
39
43
|
* stored) with a {@link ConflictError};
|
|
40
44
|
* - write a commit's events, head and snapshot atomically, or nothing;
|
|
41
45
|
* - refuse an entity ID in a reserved namespace on every write path, before any request;
|
|
46
|
+
* - refuse every write (a commit, a snapshot write, compaction) to a store whose feature manifest
|
|
47
|
+
* declares a pair this package doesn't model, with an {@link UnsupportedFeatureError}, and to
|
|
48
|
+
* one that doesn't declare stream-heads: with a {@link StreamHeadsNotMigratedError} when it
|
|
49
|
+
* holds data, and otherwise either by declaring stream-heads on the first commit or snapshot
|
|
50
|
+
* write or with a {@link StoreNotInitializedError}, as the backend initializes;
|
|
51
|
+
* - refuse a commit, but not a snapshot write or compaction, while a projection rebuild holds the
|
|
52
|
+
* store, with a {@link RebuildInProgressError}, after the manifest's refusals and before every
|
|
53
|
+
* stream's;
|
|
54
|
+
* - refuse compaction of an entity whose type the manifest declares history-dependent, with a
|
|
55
|
+
* {@link HistoryDependentProjectionError};
|
|
42
56
|
* - return events in ascending sequence order, and `latest` in descending order.
|
|
43
57
|
*/
|
|
44
58
|
export interface Repository {
|
|
@@ -70,6 +84,21 @@ export interface Repository {
|
|
|
70
84
|
*/
|
|
71
85
|
compactBelow(entityId: string, through: bigint, options?: CallOptions): Promise<number>;
|
|
72
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* A repository whose store can be initialized explicitly: its feature manifest declares
|
|
89
|
+
* stream-heads before any writer writes. A strict backend, such as DynamoDB by default, refuses
|
|
90
|
+
* every write until then. One whose writers initialize a fresh store on their first write, such
|
|
91
|
+
* as the in-memory one, needs it only where code treats every backend alike.
|
|
92
|
+
*/
|
|
93
|
+
export interface StoreInitializer {
|
|
94
|
+
/**
|
|
95
|
+
* Declares stream-heads on a store that holds no data, and resolves `true` when this call
|
|
96
|
+
* declared it. A store that already declares it is left alone and resolves `false`. One that
|
|
97
|
+
* holds data without it is refused with a {@link StreamHeadsNotMigratedError}, and one that
|
|
98
|
+
* declares an unsupported feature with an {@link UnsupportedFeatureError}.
|
|
99
|
+
*/
|
|
100
|
+
initialize(options?: CallOptions): Promise<boolean>;
|
|
101
|
+
}
|
|
73
102
|
/** The most actions one commit may carry, DynamoDB's transaction limit. */
|
|
74
103
|
export declare const MAX_COMMIT_ACTIONS = 100;
|
|
75
104
|
/** The most bytes one commit may carry, summed over its actions: 95% of DynamoDB's 4 MB. */
|
package/dist/repository.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|