@haverstack/adapter-conformance 0.11.0 → 0.13.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/dist/copy.d.ts +24 -0
- package/dist/copy.d.ts.map +1 -0
- package/dist/copy.js +123 -0
- package/dist/copy.js.map +1 -0
- package/dist/helpers.d.ts +3 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +11 -0
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +709 -209
- package/dist/record.js.map +1 -1
- package/package.json +2 -2
package/dist/copy.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack copy conformance suite
|
|
3
|
+
* -------------------------------------------------------
|
|
4
|
+
* The copy a move between hosts makes: a stack with a past is written
|
|
5
|
+
* through Stack into a source store, then copied with copyStack() into one
|
|
6
|
+
* the adapter under test creates. Every Record, version snapshot, journal
|
|
7
|
+
* entry, Type and blob must arrive as it was. The source is the adapter
|
|
8
|
+
* under test too unless `source` names another engine, so a suite can hold
|
|
9
|
+
* an adapter to the read half, the write half, or both. Point it at a full
|
|
10
|
+
* StackAdapter that implements importRecord(). See docs/spec/portability.md.
|
|
11
|
+
*/
|
|
12
|
+
import type { CreateStore, StackAdapter } from '@haverstack/core/adapter';
|
|
13
|
+
export interface CopyConformanceOptions {
|
|
14
|
+
/** Used in describe() titles, so pick something that reads well there. */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Create a new store from this seed: the copy's target. */
|
|
17
|
+
create: CreateStore;
|
|
18
|
+
/** Create the store the stack is written into and copied from. Defaults to `create`. */
|
|
19
|
+
source?: CreateStore;
|
|
20
|
+
/** Release what either factory acquired. Called on every store they made. */
|
|
21
|
+
close?: (adapter: StackAdapter) => Promise<void> | void;
|
|
22
|
+
}
|
|
23
|
+
export declare function runCopyConformance(options: CopyConformanceOptions): void;
|
|
24
|
+
//# sourceMappingURL=copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../src/copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,MAAM,EAAE,WAAW,CAAC;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACzD;AAiGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CA6BxE"}
|
package/dist/copy.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack copy conformance suite
|
|
3
|
+
* -------------------------------------------------------
|
|
4
|
+
* The copy a move between hosts makes: a stack with a past is written
|
|
5
|
+
* through Stack into a source store, then copied with copyStack() into one
|
|
6
|
+
* the adapter under test creates. Every Record, version snapshot, journal
|
|
7
|
+
* entry, Type and blob must arrive as it was. The source is the adapter
|
|
8
|
+
* under test too unless `source` names another engine, so a suite can hold
|
|
9
|
+
* an adapter to the read half, the write half, or both. Point it at a full
|
|
10
|
+
* StackAdapter that implements importRecord(). See docs/spec/portability.md.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, test, expect } from 'vitest';
|
|
13
|
+
import { Stack, SYSTEM_TYPES } from '@haverstack/core';
|
|
14
|
+
import { copyStack, newStoreSeed, resolveQuery } from '@haverstack/core/adapter';
|
|
15
|
+
const OWNER = 'did:key:conformance-owner';
|
|
16
|
+
const ALICE = { subjectId: 'did:key:conformance-alice' };
|
|
17
|
+
const BOB = { subjectId: 'did:key:conformance-bob', principalId: 'did:key:conformance-app' };
|
|
18
|
+
const NOTE = 'org.haverstack.conformance/copied-note@1';
|
|
19
|
+
const SEED = newStoreSeed({ ownerEntityId: OWNER });
|
|
20
|
+
/** Set order aside: an element set has no order to preserve. */
|
|
21
|
+
const bySerialized = (list) => list && [...list].sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));
|
|
22
|
+
/** Everything a copy must carry, in a shape that compares with toEqual(). */
|
|
23
|
+
async function contentsOf(adapter, fileIds) {
|
|
24
|
+
const records = [];
|
|
25
|
+
let cursor;
|
|
26
|
+
do {
|
|
27
|
+
const page = await adapter.queryRecords(resolveQuery({
|
|
28
|
+
filter: { includeDeleted: true, includeUnlisted: true },
|
|
29
|
+
cursor,
|
|
30
|
+
limit: 100,
|
|
31
|
+
}));
|
|
32
|
+
records.push(...page.records);
|
|
33
|
+
cursor = page.cursor ?? undefined;
|
|
34
|
+
} while (cursor);
|
|
35
|
+
// `_config` is no query's, so it is read by id: it travels like the rest.
|
|
36
|
+
const config = await adapter.getRecord(SYSTEM_TYPES.CONFIG);
|
|
37
|
+
if (config)
|
|
38
|
+
records.push(config);
|
|
39
|
+
records.sort((a, b) => a.id.localeCompare(b.id));
|
|
40
|
+
const blobs = {};
|
|
41
|
+
for (const fileId of fileIds)
|
|
42
|
+
blobs[fileId] = await adapter.getBlob(fileId);
|
|
43
|
+
return {
|
|
44
|
+
types: (await adapter.listTypes()).sort((a, b) => a.id.localeCompare(b.id)),
|
|
45
|
+
records: await Promise.all(records.map(async (record) => ({
|
|
46
|
+
record: {
|
|
47
|
+
...record,
|
|
48
|
+
associations: bySerialized(record.associations),
|
|
49
|
+
permissions: bySerialized(record.permissions),
|
|
50
|
+
},
|
|
51
|
+
versions: await adapter.getVersions(record.id),
|
|
52
|
+
journal: await adapter.getJournal(record.id),
|
|
53
|
+
}))),
|
|
54
|
+
blobs,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A stack touched by every kind of write: foreign authorship, edits by an
|
|
59
|
+
* app acting for someone, containment, tags, sharing, listing, an
|
|
60
|
+
* attachment, bytes a content field names with no metadata record, a soft
|
|
61
|
+
* delete, a purge, and a `_config` with a past of its own. Answers with the
|
|
62
|
+
* blobs it wrote.
|
|
63
|
+
*/
|
|
64
|
+
async function writePast(adapter) {
|
|
65
|
+
const stack = await Stack.open(adapter, { ownerProfile: { name: 'Conformance Owner' } });
|
|
66
|
+
await stack.defineType({
|
|
67
|
+
id: NOTE,
|
|
68
|
+
name: 'Note',
|
|
69
|
+
schema: { title: { kind: 'text' }, cover: { kind: 'file-ref' } },
|
|
70
|
+
});
|
|
71
|
+
await stack.editAssociations(SYSTEM_TYPES.CONFIG, [{ op: 'add', association: { kind: 'tag', label: 'copied' } }], { actor: BOB });
|
|
72
|
+
const box = await stack.create(NOTE, { title: 'box' });
|
|
73
|
+
const note = await stack.create(NOTE, { title: 'v1' }, { createdBy: ALICE });
|
|
74
|
+
await stack.patchContent(note.id, { title: 'v2' }, { actor: BOB });
|
|
75
|
+
await stack.setParent(note.id, box.id, { actor: BOB });
|
|
76
|
+
await stack.editAssociations(note.id, [
|
|
77
|
+
{ op: 'add', association: { kind: 'tag', label: 'pinned' } },
|
|
78
|
+
]);
|
|
79
|
+
await stack.editAccess(note.id, [{ op: 'add', association: { kind: 'anyone', label: 'read' } }]);
|
|
80
|
+
await stack.setUnlisted(note.id, true);
|
|
81
|
+
const attached = await stack.putAttachment(new TextEncoder().encode('attached bytes'), {
|
|
82
|
+
mimeType: 'text/plain',
|
|
83
|
+
filename: 'notes.txt',
|
|
84
|
+
});
|
|
85
|
+
const bare = await adapter.putBlob(new TextEncoder().encode('bytes with no metadata'));
|
|
86
|
+
await stack.create(NOTE, { title: 'covered', cover: bare });
|
|
87
|
+
const removed = await stack.create(NOTE, { title: 'removed' }, { createdBy: ALICE });
|
|
88
|
+
await stack.delete(removed.id);
|
|
89
|
+
const purged = await stack.create(NOTE, { title: 'purged' });
|
|
90
|
+
await stack.delete(purged.id, { purge: true });
|
|
91
|
+
return [attached.content.fileId, bare];
|
|
92
|
+
}
|
|
93
|
+
export function runCopyConformance(options) {
|
|
94
|
+
const { name, create, source: createSource = create, close } = options;
|
|
95
|
+
describe(`stack copy conformance: ${name}`, () => {
|
|
96
|
+
test('implements importRecord()', async () => {
|
|
97
|
+
const store = await create(SEED);
|
|
98
|
+
try {
|
|
99
|
+
expect(store.importRecord).toBeTypeOf('function');
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
await close?.(store);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
test('a copy carries every Record, version, journal entry, Type and blob unchanged', async () => {
|
|
106
|
+
const source = await createSource(SEED);
|
|
107
|
+
let target;
|
|
108
|
+
try {
|
|
109
|
+
const fileIds = await writePast(source);
|
|
110
|
+
const expected = await contentsOf(source, fileIds);
|
|
111
|
+
expect(expected.records.length).toBeGreaterThan(3);
|
|
112
|
+
target = await copyStack(source, create);
|
|
113
|
+
expect(await contentsOf(target, fileIds)).toEqual(expected);
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await close?.(source);
|
|
117
|
+
if (target)
|
|
118
|
+
await close?.(target);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=copy.js.map
|
package/dist/copy.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../src/copy.ts"],"names":[],"mappings":"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"}
|
package/dist/helpers.d.ts
CHANGED
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
* call site in record.ts for the one exception (content-field sort, which
|
|
7
7
|
* MemoryAdapter resolves through a registered type's schema).
|
|
8
8
|
*/
|
|
9
|
-
import type { StackRecord, StackType } from '@haverstack/core';
|
|
9
|
+
import type { RecordVersion, StackRecord, StackType } from '@haverstack/core';
|
|
10
10
|
/** A fresh id on every call, unique within a test run. */
|
|
11
11
|
export declare function uniqueId(prefix?: string): string;
|
|
12
12
|
export declare const CONFORMANCE_TYPE_ID = "org.haverstack.conformance/note@1";
|
|
13
13
|
export declare function conformanceType(overrides?: Partial<StackType>): StackType;
|
|
14
14
|
export declare function makeRecord(overrides?: Partial<StackRecord>): StackRecord;
|
|
15
|
+
/** The snapshot a version-bumping write takes of `record` as it stands. */
|
|
16
|
+
export declare function snapshotOf(record: StackRecord): RecordVersion;
|
|
15
17
|
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAI9E,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,MAAM,SAAQ,GAAG,MAAM,CAG/C;AAED,eAAO,MAAM,mBAAmB,sCAAsC,CAAC;AAEvE,wBAAgB,eAAe,CAAC,SAAS,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,SAAS,CAc7E;AAED,wBAAgB,UAAU,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAU5E;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAS7D"}
|
package/dist/helpers.js
CHANGED
|
@@ -39,4 +39,15 @@ export function makeRecord(overrides = {}) {
|
|
|
39
39
|
...overrides,
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
|
+
/** The snapshot a version-bumping write takes of `record` as it stands. */
|
|
43
|
+
export function snapshotOf(record) {
|
|
44
|
+
return {
|
|
45
|
+
version: record.version,
|
|
46
|
+
typeId: record.typeId,
|
|
47
|
+
content: record.content,
|
|
48
|
+
updatedAt: record.updatedAt,
|
|
49
|
+
...(record.createdBy && { createdBy: record.createdBy }),
|
|
50
|
+
...(record.updatedBy && { updatedBy: record.updatedBy }),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
42
53
|
//# sourceMappingURL=helpers.js.map
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,0DAA0D;AAC1D,MAAM,UAAU,QAAQ,CAAC,MAAM,GAAG,KAAK;IACrC,OAAO,IAAI,CAAC,CAAC;IACb,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEvE,MAAM,UAAU,eAAe,CAAC,YAAgC,EAAE;IAChE,OAAO;QACL,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE;YACN,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC7B;QACD,UAAU,EAAE,qBAAqB;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAkC,EAAE;IAC7D,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QAC9B,OAAO,EAAE,CAAC;QACV,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,0DAA0D;AAC1D,MAAM,UAAU,QAAQ,CAAC,MAAM,GAAG,KAAK;IACrC,OAAO,IAAI,CAAC,CAAC;IACb,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEvE,MAAM,UAAU,eAAe,CAAC,YAAgC,EAAE;IAChE,OAAO;QACL,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE;YACN,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC7B;QACD,UAAU,EAAE,qBAAqB;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAkC,EAAE;IAC7D,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QAC9B,OAAO,EAAE,CAAC;QACV,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QACxD,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,4 +3,6 @@ export type { RecordAdapterConformanceOptions } from './record.js';
|
|
|
3
3
|
export { runBlobAdapterConformance } from './blob.js';
|
|
4
4
|
export type { BlobAdapterConformanceOptions } from './blob.js';
|
|
5
5
|
export { expectStackErrorCode } from './errors.js';
|
|
6
|
+
export { runCopyConformance } from './copy.js';
|
|
7
|
+
export type { CopyConformanceOptions } from './copy.js';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/record.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAKV,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAS,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAY1E,MAAM,WAAW,+BAA+B;IAC9C,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;IAC7D,+DAA+D;IAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9D;;;;;OAKG;IACH,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,+BAA+B,GAAG,IAAI,CAsyD1F"}
|