@haverstack/core 0.7.0 → 0.9.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 +30 -14
- package/dist/access.d.ts +20 -7
- package/dist/access.d.ts.map +1 -1
- package/dist/access.js +37 -16
- package/dist/access.js.map +1 -1
- package/dist/adapter-entry.d.ts +12 -0
- package/dist/adapter-entry.d.ts.map +1 -0
- package/dist/adapter-entry.js +11 -0
- package/dist/adapter-entry.js.map +1 -0
- package/dist/attachment-download.d.ts +75 -0
- package/dist/attachment-download.d.ts.map +1 -0
- package/dist/attachment-download.js +128 -0
- package/dist/attachment-download.js.map +1 -0
- package/dist/auth.d.ts +88 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +145 -0
- package/dist/auth.js.map +1 -0
- package/dist/combine.d.ts.map +1 -1
- package/dist/combine.js +20 -3
- package/dist/combine.js.map +1 -1
- package/dist/did-entry.d.ts +12 -0
- package/dist/did-entry.d.ts.map +1 -0
- package/dist/did-entry.js +16 -0
- package/dist/did-entry.js.map +1 -0
- package/dist/did.d.ts +51 -0
- package/dist/did.d.ts.map +1 -0
- package/dist/did.js +153 -0
- package/dist/did.js.map +1 -0
- package/dist/id.d.ts +18 -6
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +39 -10
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -9
- package/dist/index.js.map +1 -1
- package/dist/merge.d.ts +11 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +38 -0
- package/dist/merge.js.map +1 -0
- package/dist/schema.d.ts +31 -9
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +134 -11
- package/dist/schema.js.map +1 -1
- package/dist/stack.d.ts +748 -152
- package/dist/stack.d.ts.map +1 -1
- package/dist/stack.js +1805 -328
- package/dist/stack.js.map +1 -1
- package/dist/testing.d.ts +84 -23
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +260 -19
- package/dist/testing.js.map +1 -1
- package/dist/types.d.ts +281 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -1
- package/dist/validate.d.ts +26 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +51 -1
- package/dist/validate.js.map +1 -1
- package/dist/wire-entry.d.ts +17 -0
- package/dist/wire-entry.d.ts.map +1 -0
- package/dist/wire-entry.js +24 -0
- package/dist/wire-entry.js.map +1 -0
- package/package.json +13 -1
package/dist/testing.js
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
|
+
import { SYSTEM_TYPES } from './types.js';
|
|
2
|
+
import { applyMergePatch } from './merge.js';
|
|
3
|
+
import { StackVersionConflictError, StackConflictError, StackNotFoundError } from './stack.js';
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
5
|
+
* In-memory StackAdapter with offset-based cursor pagination. Implements
|
|
6
|
+
* the full RecordFilter shape (mirroring sqlite-shared's buildWhereClause)
|
|
7
|
+
* so permission logic under test exercises real predicates. Declares
|
|
8
|
+
* `contentFieldQuery: true`, as every local adapter must; tests needing
|
|
9
|
+
* the capability-gated paths use IncapableMemoryAdapter below.
|
|
4
10
|
*/
|
|
5
11
|
export class MemoryAdapter {
|
|
6
12
|
capabilities = {
|
|
7
13
|
fullTextSearch: false,
|
|
8
|
-
contentFieldQuery:
|
|
14
|
+
contentFieldQuery: true,
|
|
9
15
|
sortableFields: ['createdAt', 'updatedAt', 'version'],
|
|
16
|
+
maxAttachmentBytes: null,
|
|
17
|
+
maxContentBytes: null,
|
|
10
18
|
};
|
|
11
19
|
ownerEntityId;
|
|
12
20
|
timezone;
|
|
@@ -14,11 +22,15 @@ export class MemoryAdapter {
|
|
|
14
22
|
order = [];
|
|
15
23
|
versions = new Map();
|
|
16
24
|
types = new Map();
|
|
17
|
-
|
|
25
|
+
blobs = new Map();
|
|
26
|
+
constructor({ ownerEntityId = '', timezone, } = {}) {
|
|
18
27
|
this.ownerEntityId = ownerEntityId;
|
|
19
28
|
this.timezone = timezone;
|
|
20
29
|
}
|
|
21
30
|
async createRecord(record) {
|
|
31
|
+
if (this.records.has(record.id)) {
|
|
32
|
+
throw new StackConflictError(`Record already exists: "${record.id}"`);
|
|
33
|
+
}
|
|
22
34
|
this.records.set(record.id, { ...record });
|
|
23
35
|
this.order.push(record.id);
|
|
24
36
|
return record;
|
|
@@ -26,29 +38,76 @@ export class MemoryAdapter {
|
|
|
26
38
|
async getRecord(id) {
|
|
27
39
|
return this.records.get(id) ?? null;
|
|
28
40
|
}
|
|
29
|
-
|
|
41
|
+
bump(record) {
|
|
42
|
+
return { ...record, version: record.version + 1, updatedAt: new Date() };
|
|
43
|
+
}
|
|
44
|
+
/** Opt-in CAS check mirroring the real adapters' expectedVersion contract. */
|
|
45
|
+
checkExpectedVersion(record, expectedVersion) {
|
|
46
|
+
if (expectedVersion === undefined || record.version === expectedVersion)
|
|
47
|
+
return;
|
|
48
|
+
throw new StackVersionConflictError(`Record "${record.id}" is at version ${record.version}, expected ${expectedVersion}`, record.id, expectedVersion, record.version);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* True if any top-level file-ref field in the record's registered type
|
|
52
|
+
* schema currently holds this fileId — the content-reference half of
|
|
53
|
+
* attachmentFileId matching. Mirrors sqlite-shared's file_refs index,
|
|
54
|
+
* computed on the fly since MemoryAdapter has no persisted index.
|
|
55
|
+
*/
|
|
56
|
+
hasFileRefTo(record, fileId) {
|
|
57
|
+
const schema = this.types.get(record.typeId)?.schema;
|
|
58
|
+
if (!schema)
|
|
59
|
+
return false;
|
|
60
|
+
const content = record.content;
|
|
61
|
+
return Object.entries(schema).some(([field, def]) => def.kind === 'file-ref' && content[field] === fileId);
|
|
62
|
+
}
|
|
63
|
+
async patchContent(id, patch, opts = {}) {
|
|
30
64
|
const existing = this.records.get(id);
|
|
31
65
|
if (!existing)
|
|
32
66
|
throw new Error(`Not found: ${id}`);
|
|
33
|
-
|
|
67
|
+
this.checkExpectedVersion(existing, opts.expectedVersion);
|
|
68
|
+
if (opts.snapshot)
|
|
69
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
70
|
+
const updated = this.bump({ ...existing, content: applyMergePatch(existing.content, patch) });
|
|
34
71
|
this.records.set(id, updated);
|
|
35
72
|
return updated;
|
|
36
73
|
}
|
|
37
74
|
async deleteRecord(id, opts = {}) {
|
|
38
75
|
if (opts.hard) {
|
|
76
|
+
const record = this.records.get(id);
|
|
77
|
+
if (record)
|
|
78
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
39
79
|
this.records.delete(id);
|
|
40
80
|
this.order.splice(this.order.indexOf(id), 1);
|
|
41
81
|
}
|
|
42
82
|
else {
|
|
43
83
|
const record = this.records.get(id);
|
|
44
|
-
if (record)
|
|
45
|
-
this.
|
|
84
|
+
if (record) {
|
|
85
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
86
|
+
if (opts.snapshot)
|
|
87
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
88
|
+
this.records.set(id, this.bump({ ...record, deletedAt: new Date() }));
|
|
89
|
+
}
|
|
46
90
|
}
|
|
47
91
|
}
|
|
92
|
+
async undeleteRecord(id, opts = {}) {
|
|
93
|
+
const record = this.records.get(id);
|
|
94
|
+
if (!record)
|
|
95
|
+
throw new Error(`Not found: ${id}`);
|
|
96
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
97
|
+
if (opts.snapshot)
|
|
98
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
99
|
+
const { deletedAt: _deletedAt, ...rest } = record;
|
|
100
|
+
const updated = this.bump(rest);
|
|
101
|
+
this.records.set(id, updated);
|
|
102
|
+
return updated;
|
|
103
|
+
}
|
|
48
104
|
/** Cursor is a stringified offset into insertion order. */
|
|
49
105
|
async queryRecords(query) {
|
|
50
106
|
const f = query.filter ?? {};
|
|
51
107
|
let results = this.order.map((id) => this.records.get(id));
|
|
108
|
+
// _config is addressable only by ID (getRecord), never returned by a
|
|
109
|
+
// generic query — mirroring the real SQL adapters' WHERE exclusion.
|
|
110
|
+
results = results.filter((r) => r.id !== SYSTEM_TYPES.CONFIG);
|
|
52
111
|
if (!f.includeDeleted)
|
|
53
112
|
results = results.filter((r) => !r.deletedAt);
|
|
54
113
|
if (f.typeId) {
|
|
@@ -61,10 +120,52 @@ export class MemoryAdapter {
|
|
|
61
120
|
? results.filter((r) => !r.parentId)
|
|
62
121
|
: results.filter((r) => r.parentId === f.parentId);
|
|
63
122
|
}
|
|
123
|
+
if (f.appId !== undefined) {
|
|
124
|
+
const ids = Array.isArray(f.appId) ? f.appId : [f.appId];
|
|
125
|
+
results = results.filter((r) => r.appId !== undefined && ids.includes(r.appId));
|
|
126
|
+
}
|
|
64
127
|
if (f.entityId !== undefined) {
|
|
65
128
|
const ids = Array.isArray(f.entityId) ? f.entityId : [f.entityId];
|
|
66
129
|
results = results.filter((r) => r.entityId !== undefined && ids.includes(r.entityId));
|
|
67
130
|
}
|
|
131
|
+
if (f.principalId !== undefined) {
|
|
132
|
+
const ids = Array.isArray(f.principalId) ? f.principalId : [f.principalId];
|
|
133
|
+
results = results.filter((r) => r.principalId !== undefined && ids.includes(r.principalId));
|
|
134
|
+
}
|
|
135
|
+
if (f.createdAt?.after)
|
|
136
|
+
results = results.filter((r) => r.createdAt > f.createdAt.after);
|
|
137
|
+
if (f.createdAt?.before)
|
|
138
|
+
results = results.filter((r) => r.createdAt < f.createdAt.before);
|
|
139
|
+
if (f.updatedAt?.after)
|
|
140
|
+
results = results.filter((r) => r.updatedAt > f.updatedAt.after);
|
|
141
|
+
if (f.updatedAt?.before)
|
|
142
|
+
results = results.filter((r) => r.updatedAt < f.updatedAt.before);
|
|
143
|
+
if (f.tags?.length) {
|
|
144
|
+
const tags = f.tags;
|
|
145
|
+
results = results.filter((r) => tags.every((tag) => (r.associations ?? []).some((a) => a.kind === 'tag' && a.label === tag)));
|
|
146
|
+
}
|
|
147
|
+
if (f.hasAttachment) {
|
|
148
|
+
results = results.filter((r) => (r.associations ?? []).some((a) => a.kind === 'attachment' && a.label === f.hasAttachment));
|
|
149
|
+
}
|
|
150
|
+
if (f.attachmentFileId) {
|
|
151
|
+
const fileId = f.attachmentFileId;
|
|
152
|
+
results = results.filter((r) => (r.associations ?? []).some((a) => a.kind === 'attachment' && a.fileId === fileId) ||
|
|
153
|
+
this.hasFileRefTo(r, fileId));
|
|
154
|
+
}
|
|
155
|
+
if (f.relatedTo) {
|
|
156
|
+
const { recordId, label } = f.relatedTo;
|
|
157
|
+
results = results.filter((r) => (r.associations ?? []).some((a) => a.kind === 'relationship' && a.recordId === recordId && (!label || a.label === label)));
|
|
158
|
+
}
|
|
159
|
+
// A `null` filter value means "field absent or null" — not "match
|
|
160
|
+
// nothing". Plain `===` would miss an absent field; treat both as
|
|
161
|
+
// satisfying a null filter (docs/spec/data-model.md § Filter).
|
|
162
|
+
if (f.content) {
|
|
163
|
+
const entries = Object.entries(f.content);
|
|
164
|
+
results = results.filter((r) => entries.every(([key, value]) => {
|
|
165
|
+
const actual = r.content[key];
|
|
166
|
+
return value === null ? actual === null || actual === undefined : actual === value;
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
68
169
|
const limit = query.limit ?? 50;
|
|
69
170
|
const start = query.cursor ? Number(query.cursor) : 0;
|
|
70
171
|
const page = results.slice(start, start + limit);
|
|
@@ -72,19 +173,34 @@ export class MemoryAdapter {
|
|
|
72
173
|
const cursor = nextStart < results.length ? String(nextStart) : null;
|
|
73
174
|
return { records: page, cursor, total: results.length };
|
|
74
175
|
}
|
|
75
|
-
async associate(id, association) {
|
|
176
|
+
async associate(id, association, opts = {}) {
|
|
76
177
|
const record = this.records.get(id);
|
|
77
178
|
if (!record)
|
|
78
179
|
throw new Error(`Not found: ${id}`);
|
|
180
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
181
|
+
if (opts.snapshot)
|
|
182
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
79
183
|
const assocs = record.associations ?? [];
|
|
80
|
-
this.records.set(id,
|
|
184
|
+
this.records.set(id, this.bump(withAssociations(record, [...assocs, association])));
|
|
185
|
+
}
|
|
186
|
+
async dissociate(id, association, opts = {}) {
|
|
187
|
+
const record = this.records.get(id);
|
|
188
|
+
if (!record)
|
|
189
|
+
throw new Error(`Not found: ${id}`);
|
|
190
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
191
|
+
if (opts.snapshot)
|
|
192
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
193
|
+
const assocs = (record.associations ?? []).filter((a) => !associationEqual(a, association));
|
|
194
|
+
this.records.set(id, this.bump(withAssociations(record, assocs)));
|
|
81
195
|
}
|
|
82
|
-
async
|
|
196
|
+
async setPermissions(id, permissions, opts = {}) {
|
|
83
197
|
const record = this.records.get(id);
|
|
84
198
|
if (!record)
|
|
85
199
|
throw new Error(`Not found: ${id}`);
|
|
86
|
-
|
|
87
|
-
|
|
200
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
201
|
+
if (opts.snapshot)
|
|
202
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
203
|
+
this.records.set(id, this.bump({ ...record, permissions }));
|
|
88
204
|
}
|
|
89
205
|
async getVersions(id) {
|
|
90
206
|
return this.versions.get(id) ?? [];
|
|
@@ -92,10 +208,74 @@ export class MemoryAdapter {
|
|
|
92
208
|
async getVersion(id, version) {
|
|
93
209
|
return (this.versions.get(id) ?? []).find((v) => v.version === version) ?? null;
|
|
94
210
|
}
|
|
95
|
-
|
|
211
|
+
/**
|
|
212
|
+
* Loud on a (record, version) collision, mirroring the real adapters'
|
|
213
|
+
* UNIQUE constraint.
|
|
214
|
+
*/
|
|
215
|
+
insertVersionRow(id, version) {
|
|
96
216
|
const existing = this.versions.get(id) ?? [];
|
|
217
|
+
if (existing.some((v) => v.version === version.version)) {
|
|
218
|
+
throw new StackConflictError(`Version ${version.version} already exists for record "${id}" — a concurrent ` +
|
|
219
|
+
`writer raced past this version. Use ifVersion to detect this before it happens.`);
|
|
220
|
+
}
|
|
97
221
|
this.versions.set(id, [...existing, version]);
|
|
98
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Standalone snapshot write for tooling and tests — loud on any
|
|
225
|
+
* collision, since nothing here is about to bump the record's version.
|
|
226
|
+
* Mutating methods take a `snapshot` option instead; see
|
|
227
|
+
* snapshotBeforeMutation.
|
|
228
|
+
*/
|
|
229
|
+
async saveVersion(id, version) {
|
|
230
|
+
this.insertVersionRow(id, version);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* The snapshot half of a mutating method's atomic snapshot-then-mutate
|
|
234
|
+
* step. Mirrors the real adapters' snapshotBeforeMutation (see
|
|
235
|
+
* sqlite-shared/record-logic.ts for the full rationale): a collision is
|
|
236
|
+
* rejected loudly, except an orphan row at the record's current version,
|
|
237
|
+
* which is overwritten so the interrupted write can finally complete.
|
|
238
|
+
*/
|
|
239
|
+
snapshotBeforeMutation(id, version) {
|
|
240
|
+
const existing = this.versions.get(id) ?? [];
|
|
241
|
+
const collision = existing.some((v) => v.version === version.version);
|
|
242
|
+
if (!collision) {
|
|
243
|
+
this.versions.set(id, [...existing, version]);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const record = this.records.get(id);
|
|
247
|
+
if (!record || record.version !== version.version) {
|
|
248
|
+
throw new StackConflictError(`Version ${version.version} already exists for record "${id}" — a concurrent ` +
|
|
249
|
+
`writer raced past this version. Use ifVersion to detect this before it happens.`);
|
|
250
|
+
}
|
|
251
|
+
this.versions.set(id, existing.map((v) => (v.version === version.version ? version : v)));
|
|
252
|
+
}
|
|
253
|
+
async restoreVersion(id, version, opts = {}) {
|
|
254
|
+
const record = this.records.get(id);
|
|
255
|
+
if (!record)
|
|
256
|
+
throw new Error(`Not found: ${id}`);
|
|
257
|
+
this.checkExpectedVersion(record, opts.expectedVersion);
|
|
258
|
+
const target = (this.versions.get(id) ?? []).find((v) => v.version === version);
|
|
259
|
+
if (!target)
|
|
260
|
+
throw new Error(`Version not found: ${id}@${version}`);
|
|
261
|
+
if (opts.snapshot)
|
|
262
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
263
|
+
const merged = { ...record, typeId: target.typeId, content: target.content };
|
|
264
|
+
const withAssoc = target.associations !== undefined ? withAssociations(merged, target.associations) : merged;
|
|
265
|
+
const updated = this.bump(withAssoc);
|
|
266
|
+
this.records.set(id, updated);
|
|
267
|
+
return updated;
|
|
268
|
+
}
|
|
269
|
+
async commitMigration(id, toTypeId, content, opts = {}) {
|
|
270
|
+
const record = this.records.get(id);
|
|
271
|
+
if (!record)
|
|
272
|
+
throw new Error(`Not found: ${id}`);
|
|
273
|
+
if (opts.snapshot)
|
|
274
|
+
this.snapshotBeforeMutation(id, opts.snapshot);
|
|
275
|
+
const updated = this.bump({ ...record, typeId: toTypeId, content });
|
|
276
|
+
this.records.set(id, updated);
|
|
277
|
+
return updated;
|
|
278
|
+
}
|
|
99
279
|
async saveType(type) {
|
|
100
280
|
this.types.set(type.id, type);
|
|
101
281
|
}
|
|
@@ -105,14 +285,75 @@ export class MemoryAdapter {
|
|
|
105
285
|
async listTypes() {
|
|
106
286
|
return [...this.types.values()];
|
|
107
287
|
}
|
|
108
|
-
|
|
109
|
-
|
|
288
|
+
/** Content-addressed, like the real adapters — needed so file-ref values (SHA-256 hex) validate. */
|
|
289
|
+
async putAttachment(data) {
|
|
290
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
291
|
+
const fileId = Array.from(new Uint8Array(hashBuffer))
|
|
292
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
293
|
+
.join('');
|
|
294
|
+
if (!this.blobs.has(fileId)) {
|
|
295
|
+
this.blobs.set(fileId, { data, modifiedAt: new Date() });
|
|
296
|
+
}
|
|
297
|
+
return fileId;
|
|
298
|
+
}
|
|
299
|
+
async getAttachment(fileId) {
|
|
300
|
+
const blob = this.blobs.get(fileId);
|
|
301
|
+
if (!blob)
|
|
302
|
+
throw new StackNotFoundError(`Attachment not found: "${fileId}"`);
|
|
303
|
+
return blob.data;
|
|
110
304
|
}
|
|
111
|
-
async
|
|
112
|
-
|
|
305
|
+
async deleteAttachment(fileId) {
|
|
306
|
+
this.blobs.delete(fileId);
|
|
113
307
|
}
|
|
114
|
-
|
|
308
|
+
// Declared as an optional field (not a fixed method) so a test subclass
|
|
309
|
+
// can override it to `undefined`, simulating an adapter that doesn't
|
|
310
|
+
// implement this capability (see stack.test.ts's NoListFilesAdapter).
|
|
311
|
+
listFiles = async () => {
|
|
312
|
+
return [...this.blobs.entries()].map(([fileId, blob]) => ({
|
|
313
|
+
fileId,
|
|
314
|
+
size: blob.data.byteLength,
|
|
315
|
+
modifiedAt: blob.modifiedAt,
|
|
316
|
+
}));
|
|
317
|
+
};
|
|
115
318
|
flush;
|
|
116
319
|
close;
|
|
117
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* A MemoryAdapter that declares `contentFieldQuery: false`, simulating the
|
|
323
|
+
* one legitimate case: a wire adapter whose server declined the capability
|
|
324
|
+
* (docs/spec/adapters.md § Adapter capabilities). For exercising Stack's
|
|
325
|
+
* capability-gated fallbacks and the fail-loud assertQueryCapabilities
|
|
326
|
+
* check in tests; not a stand-in for a real local adapter.
|
|
327
|
+
*/
|
|
328
|
+
export class IncapableMemoryAdapter extends MemoryAdapter {
|
|
329
|
+
capabilities = {
|
|
330
|
+
fullTextSearch: false,
|
|
331
|
+
contentFieldQuery: false,
|
|
332
|
+
sortableFields: ['createdAt', 'updatedAt', 'version'],
|
|
333
|
+
maxAttachmentBytes: null,
|
|
334
|
+
maxContentBytes: null,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Sets a record's associations, omitting the key entirely when empty —
|
|
339
|
+
* mirroring the SQL adapters' rowToRecord, so the same mutation sequence
|
|
340
|
+
* produces identically-shaped records on the test double and real storage.
|
|
341
|
+
*/
|
|
342
|
+
function withAssociations(record, associations) {
|
|
343
|
+
const { associations: _drop, ...rest } = record;
|
|
344
|
+
return associations.length ? { ...rest, associations } : rest;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Mirrors Stack's private associationEqual(): identity is (kind, label) plus
|
|
348
|
+
* fileId for attachments / recordId for relationships.
|
|
349
|
+
*/
|
|
350
|
+
function associationEqual(a, b) {
|
|
351
|
+
if (a.kind !== b.kind || a.label !== b.label)
|
|
352
|
+
return false;
|
|
353
|
+
if (a.kind === 'attachment' && b.kind === 'attachment')
|
|
354
|
+
return a.fileId === b.fileId;
|
|
355
|
+
if (a.kind === 'relationship' && b.kind === 'relationship')
|
|
356
|
+
return a.recordId === b.recordId;
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
118
359
|
//# sourceMappingURL=testing.js.map
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|