@researchdatabox/sails-hook-redbox-storage-mongo 5.0.4-beta.12498 → 5.0.5
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 +0 -41
- package/dist/config/storage.d.ts +0 -52
- package/dist/config/storage.js +3 -18
- package/dist/index.d.ts +0 -2
- package/dist/index.js +1 -3
- package/dist/models/DeletedRecord.d.ts +0 -8
- package/dist/models/DeletedRecord.js +1 -55
- package/dist/models/Record.d.ts +2 -5
- package/dist/models/Record.js +11 -43
- package/dist/models/RecordAudit.d.ts +1 -2
- package/dist/models/RecordAudit.js +6 -11
- package/dist/models/index.d.ts +0 -4
- package/dist/models/index.js +1 -7
- package/dist/services/MongoStorageService.d.ts +19 -174
- package/dist/services/MongoStorageService.js +306 -1679
- package/package.json +3 -4
- package/dist/migrations/index.d.ts +0 -5
- package/dist/migrations/index.js +0 -26
- package/dist/migrations/recordRevisionBackfill.d.ts +0 -26
- package/dist/migrations/recordRevisionBackfill.js +0 -115
- package/dist/models/RecordSchemaArtifact.d.ts +0 -14
- package/dist/models/RecordSchemaArtifact.js +0 -75
- package/dist/models/RecordSchemaReference.d.ts +0 -25
- package/dist/models/RecordSchemaReference.js +0 -128
- package/dist/services/recordSchemaPersistence.d.ts +0 -27
- package/dist/services/recordSchemaPersistence.js +0 -258
package/README.md
CHANGED
|
@@ -24,47 +24,6 @@ This package provides the MongoDB-backed storage service, models, and config reg
|
|
|
24
24
|
- The storage models use the Sails datastore named `redboxStorage`
|
|
25
25
|
- Datastore connection details still live in the host portal’s Sails config
|
|
26
26
|
|
|
27
|
-
## Record revision migration
|
|
28
|
-
|
|
29
|
-
This hook registers the restart-safe
|
|
30
|
-
`@researchdatabox/sails-hook-redbox-storage-mongo:20260823T000000-backfill-record-revisions`
|
|
31
|
-
migration. It installs the initial server-owned revision on active records and
|
|
32
|
-
the revision plus `deleted` lifecycle state on legacy tombstones. It does not
|
|
33
|
-
touch record metadata, workflow, authorization, `lastSaveDate`, or search
|
|
34
|
-
documents.
|
|
35
|
-
|
|
36
|
-
Run an upgrade with exactly one lifting portal instance, let migrations finish,
|
|
37
|
-
and only then start the remaining instances. The repository migration runner
|
|
38
|
-
has no distributed migration lock. Back up the database first; do not use
|
|
39
|
-
`REDBOX_SKIP_MIGRATIONS=true` for a strict-concurrency rollout.
|
|
40
|
-
|
|
41
|
-
## Storage concurrency capability
|
|
42
|
-
|
|
43
|
-
Strict record types require a storage adapter to expose `getCapabilities()` and
|
|
44
|
-
return the supported `recordConcurrency` version token from
|
|
45
|
-
`@researchdatabox/redbox-core`. An absent method, absent field, unknown version,
|
|
46
|
-
or a non-Mongo dialect without native atomic operations is unsupported and
|
|
47
|
-
fails closed.
|
|
48
|
-
|
|
49
|
-
The capability covers these adapter methods:
|
|
50
|
-
|
|
51
|
-
- `create(..., options?)`: strips client revision and initializes a server revision;
|
|
52
|
-
- `updateMeta(..., options?)`: atomic active compare-and-set plus increment;
|
|
53
|
-
- `removeActiveRecord(..., options?)`: atomic conditional removal returning the removed state;
|
|
54
|
-
- `updateTombstone(..., options?)`: atomic restore/purge claim plus increment;
|
|
55
|
-
- `removeTombstone(..., options?)`: atomic conditional restore finalization/purge.
|
|
56
|
-
|
|
57
|
-
Every existing signature keeps its optional concurrency options last for source
|
|
58
|
-
compatibility. A supplied `expectedRevision` must always be honored. A
|
|
59
|
-
certified no-match returns `not-applied` with a bounded
|
|
60
|
-
`nonApplicationReason`; a thrown or unrecognized fact after dispatch returns
|
|
61
|
-
`unknown`. Adapters must never fall back to an OID-only Waterline success path
|
|
62
|
-
after advertising strict capability.
|
|
63
|
-
|
|
64
|
-
Hook-provided adapters must verify these guarantees against their real
|
|
65
|
-
datastore/dialect before declaring capability. The bundled Mongo adapter does
|
|
66
|
-
so in `test/integration/MongoStorageConcurrency.integration.test.ts`.
|
|
67
|
-
|
|
68
27
|
## Pagination regression tests
|
|
69
28
|
|
|
70
29
|
Record and deleted-record lists append `_id` to the requested sort so equal
|
package/dist/config/storage.d.ts
CHANGED
|
@@ -12,7 +12,6 @@ export declare const storage: {
|
|
|
12
12
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
13
13
|
redboxOid?: undefined;
|
|
14
14
|
};
|
|
15
|
-
unique?: undefined;
|
|
16
15
|
} | {
|
|
17
16
|
key: {
|
|
18
17
|
harvestId: number;
|
|
@@ -24,7 +23,6 @@ export declare const storage: {
|
|
|
24
23
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
25
24
|
redboxOid?: undefined;
|
|
26
25
|
};
|
|
27
|
-
unique?: undefined;
|
|
28
26
|
} | {
|
|
29
27
|
key: {
|
|
30
28
|
dateCreated: number;
|
|
@@ -36,7 +34,6 @@ export declare const storage: {
|
|
|
36
34
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
37
35
|
redboxOid?: undefined;
|
|
38
36
|
};
|
|
39
|
-
unique?: undefined;
|
|
40
37
|
} | {
|
|
41
38
|
key: {
|
|
42
39
|
lastSaveDate: number;
|
|
@@ -48,7 +45,6 @@ export declare const storage: {
|
|
|
48
45
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
49
46
|
redboxOid?: undefined;
|
|
50
47
|
};
|
|
51
|
-
unique?: undefined;
|
|
52
48
|
} | {
|
|
53
49
|
key: {
|
|
54
50
|
'metaMetadata.brandId': number;
|
|
@@ -60,7 +56,6 @@ export declare const storage: {
|
|
|
60
56
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
61
57
|
redboxOid?: undefined;
|
|
62
58
|
};
|
|
63
|
-
unique?: undefined;
|
|
64
59
|
} | {
|
|
65
60
|
key: {
|
|
66
61
|
'metaMetadata.type': number;
|
|
@@ -72,7 +67,6 @@ export declare const storage: {
|
|
|
72
67
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
73
68
|
redboxOid?: undefined;
|
|
74
69
|
};
|
|
75
|
-
unique?: undefined;
|
|
76
70
|
} | {
|
|
77
71
|
key: {
|
|
78
72
|
'metaMetadata.createdOn': number;
|
|
@@ -84,7 +78,6 @@ export declare const storage: {
|
|
|
84
78
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
85
79
|
redboxOid?: undefined;
|
|
86
80
|
};
|
|
87
|
-
unique?: undefined;
|
|
88
81
|
} | {
|
|
89
82
|
key: {
|
|
90
83
|
'metaMetadata.lastSaveDate': number;
|
|
@@ -96,7 +89,6 @@ export declare const storage: {
|
|
|
96
89
|
'metaMetadata.createdOn'?: undefined;
|
|
97
90
|
redboxOid?: undefined;
|
|
98
91
|
};
|
|
99
|
-
unique?: undefined;
|
|
100
92
|
} | {
|
|
101
93
|
key: {
|
|
102
94
|
redboxOid: number;
|
|
@@ -108,50 +100,6 @@ export declare const storage: {
|
|
|
108
100
|
'metaMetadata.createdOn'?: undefined;
|
|
109
101
|
'metaMetadata.lastSaveDate'?: undefined;
|
|
110
102
|
};
|
|
111
|
-
unique: boolean;
|
|
112
103
|
})[];
|
|
113
|
-
deletedRecordIndices: ({
|
|
114
|
-
key: {
|
|
115
|
-
redboxOid: number;
|
|
116
|
-
lifecycleState?: undefined;
|
|
117
|
-
'lifecycleOperation.requestId'?: undefined;
|
|
118
|
-
'deletedRecordMetadata.metaMetadata.brandId'?: undefined;
|
|
119
|
-
brandId?: undefined;
|
|
120
|
-
};
|
|
121
|
-
unique: boolean;
|
|
122
|
-
} | {
|
|
123
|
-
key: {
|
|
124
|
-
lifecycleState: number;
|
|
125
|
-
'lifecycleOperation.requestId': number;
|
|
126
|
-
redboxOid?: undefined;
|
|
127
|
-
'deletedRecordMetadata.metaMetadata.brandId'?: undefined;
|
|
128
|
-
brandId?: undefined;
|
|
129
|
-
};
|
|
130
|
-
unique?: undefined;
|
|
131
|
-
} | {
|
|
132
|
-
key: {
|
|
133
|
-
'deletedRecordMetadata.metaMetadata.brandId': number;
|
|
134
|
-
redboxOid: number;
|
|
135
|
-
lifecycleState?: undefined;
|
|
136
|
-
'lifecycleOperation.requestId'?: undefined;
|
|
137
|
-
brandId?: undefined;
|
|
138
|
-
};
|
|
139
|
-
unique?: undefined;
|
|
140
|
-
} | {
|
|
141
|
-
key: {
|
|
142
|
-
brandId: number;
|
|
143
|
-
redboxOid: number;
|
|
144
|
-
lifecycleState?: undefined;
|
|
145
|
-
'lifecycleOperation.requestId'?: undefined;
|
|
146
|
-
'deletedRecordMetadata.metaMetadata.brandId'?: undefined;
|
|
147
|
-
};
|
|
148
|
-
unique?: undefined;
|
|
149
|
-
})[];
|
|
150
|
-
recordIdentityIndices: {
|
|
151
|
-
key: {
|
|
152
|
-
redboxOid: number;
|
|
153
|
-
};
|
|
154
|
-
unique: boolean;
|
|
155
|
-
}[];
|
|
156
104
|
};
|
|
157
105
|
};
|
package/dist/config/storage.js
CHANGED
|
@@ -17,24 +17,9 @@ exports.storage = {
|
|
|
17
17
|
{ key: { 'metaMetadata.createdOn': -1 } },
|
|
18
18
|
{ key: { 'metaMetadata.lastSaveDate': 1 } },
|
|
19
19
|
{ key: { 'metaMetadata.lastSaveDate': -1 } },
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// constraint. One single-field index serves both scan directions.
|
|
23
|
-
{ key: { redboxOid: 1 }, unique: true },
|
|
20
|
+
{ key: { redboxOid: 1 } },
|
|
21
|
+
{ key: { redboxOid: -1 } },
|
|
24
22
|
],
|
|
25
|
-
// Every tombstone lookup starts from the OID, so it leads the compound
|
|
26
|
-
// keys; the brand is a filter on the single document the OID selects. The
|
|
27
|
-
// lifecycle key supports scanning for interrupted staged operations.
|
|
28
|
-
deletedRecordIndices: [
|
|
29
|
-
{ key: { redboxOid: 1 }, unique: true },
|
|
30
|
-
{ key: { lifecycleState: 1, 'lifecycleOperation.requestId': 1 } },
|
|
31
|
-
{ key: { 'deletedRecordMetadata.metaMetadata.brandId': 1, redboxOid: 1 } },
|
|
32
|
-
{ key: { brandId: 1, redboxOid: 1 } },
|
|
33
|
-
],
|
|
34
|
-
// A committed incarnation is intentionally never purged. The only safe
|
|
35
|
-
// exception is an unused create reservation released after a certified
|
|
36
|
-
// non-write and authoritative empty-state checks.
|
|
37
|
-
recordIdentityIndices: [{ key: { redboxOid: 1 }, unique: true }],
|
|
38
23
|
},
|
|
39
24
|
};
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLE9BQU8sR0FBRztJQUNyQixXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRTtZQUNQLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixFQUFFLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixFQUFFLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdCLEVBQUUsR0FBRyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsRUFBRSxHQUFHLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxFQUFFLEdBQUcsRUFBRSxFQUFFLHdCQUF3QixFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLEVBQUUsR0FBRyxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6QyxFQUFFLEdBQUcsRUFBRSxFQUFFLDJCQUEyQixFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLEVBQUUsR0FBRyxFQUFFLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QyxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1NBQzNCO0tBQ0Y7Q0FDRixDQUFDIn0=
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { storage } from './config/storage';
|
|
|
3
3
|
import { record } from './config/record';
|
|
4
4
|
import { MongoModels } from './models';
|
|
5
5
|
import { ServiceExports } from './services';
|
|
6
|
-
import { registerRedboxMigrations } from './migrations';
|
|
7
6
|
type RedboxStorageMongoHook = ((_sails: unknown) => SailsHook) & {
|
|
8
7
|
registerRedboxModels: () => typeof MongoModels;
|
|
9
8
|
registerRedboxServices: () => typeof ServiceExports;
|
|
@@ -11,7 +10,6 @@ type RedboxStorageMongoHook = ((_sails: unknown) => SailsHook) & {
|
|
|
11
10
|
storage: typeof storage;
|
|
12
11
|
record: typeof record;
|
|
13
12
|
};
|
|
14
|
-
registerRedboxMigrations: typeof registerRedboxMigrations;
|
|
15
13
|
ServiceExports: typeof ServiceExports;
|
|
16
14
|
};
|
|
17
15
|
declare const hook: RedboxStorageMongoHook;
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,6 @@ const storage_1 = require("./config/storage");
|
|
|
3
3
|
const record_1 = require("./config/record");
|
|
4
4
|
const models_1 = require("./models");
|
|
5
5
|
const services_1 = require("./services");
|
|
6
|
-
const migrations_1 = require("./migrations");
|
|
7
6
|
const hook = ((_sails) => ({
|
|
8
7
|
initialize(cb) {
|
|
9
8
|
cb();
|
|
@@ -28,6 +27,5 @@ hook.registerRedboxConfig = function registerRedboxConfig() {
|
|
|
28
27
|
};
|
|
29
28
|
};
|
|
30
29
|
hook.ServiceExports = services_1.ServiceExports;
|
|
31
|
-
hook.registerRedboxMigrations = migrations_1.registerRedboxMigrations;
|
|
32
30
|
module.exports = hook;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLDhDQUEyQztBQUMzQyw0Q0FBeUM7QUFDekMscUNBQXVDO0FBQ3ZDLHlDQUE0QztBQVM1QyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFVBQVUsQ0FBQyxFQUF5QjtRQUNsQyxFQUFFLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsRUFBRTtRQUNWLEtBQUssRUFBRSxFQUFFO0tBQ1Y7SUFDRCxTQUFTLEtBQUksQ0FBQztJQUNkLFFBQVEsRUFBRSxFQUFFO0NBQ2IsQ0FBQyxDQUEyQixDQUFDO0FBRTlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLG9CQUFvQjtJQUN2RCxPQUFPLG9CQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsc0JBQXNCO0lBQzNELE9BQU8seUJBQWMsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxvQkFBb0I7SUFDdkQsT0FBTztRQUNMLE9BQU8sRUFBUCxpQkFBTztRQUNQLE1BQU0sRUFBTixlQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcseUJBQWMsQ0FBQztBQUVyQyxpQkFBUyxJQUFJLENBQUMifQ==
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import { type DeletedRecordLifecycleOperation, type DeletedRecordLifecycleState } from '@researchdatabox/redbox-core';
|
|
3
2
|
export declare class DeletedRecordClass {
|
|
4
3
|
redboxOid?: string;
|
|
5
|
-
/** Sole authority for the current tombstone lifecycle revision. */
|
|
6
|
-
revision: number;
|
|
7
|
-
/** Assigned only by native lifecycle storage from the durable OID owner. */
|
|
8
|
-
incarnationId?: string;
|
|
9
|
-
brandId?: string;
|
|
10
|
-
lifecycleState: DeletedRecordLifecycleState;
|
|
11
|
-
lifecycleOperation?: DeletedRecordLifecycleOperation;
|
|
12
4
|
deletedRecordMetadata?: Record<string, unknown>;
|
|
13
5
|
dateDeleted: string;
|
|
14
6
|
}
|
|
@@ -12,40 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.DeletedRecordWLDef = exports.DeletedRecordClass = void 0;
|
|
13
13
|
require("reflect-metadata");
|
|
14
14
|
const redbox_core_1 = require("@researchdatabox/redbox-core");
|
|
15
|
-
/**
|
|
16
|
-
* Ordinary Waterline creates cannot choose a tombstone revision. The storage
|
|
17
|
-
* lifecycle path installs lineage-bearing tombstones through its native
|
|
18
|
-
* primitive after deriving the revision from authoritative active state.
|
|
19
|
-
*/
|
|
20
|
-
const normalizeTombstoneLifecycle = (record, proceed) => {
|
|
21
|
-
record.revision = redbox_core_1.INITIAL_RECORD_REVISION;
|
|
22
|
-
delete record.incarnationId;
|
|
23
|
-
if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(record.lifecycleState)) {
|
|
24
|
-
record.lifecycleState = 'deleted';
|
|
25
|
-
}
|
|
26
|
-
if (record.deletedRecordMetadata && typeof record.deletedRecordMetadata === 'object') {
|
|
27
|
-
delete record.deletedRecordMetadata.revision;
|
|
28
|
-
}
|
|
29
|
-
proceed();
|
|
30
|
-
};
|
|
31
|
-
/** Tombstone revisions only advance through the atomic tombstone primitives. */
|
|
32
|
-
const stripTombstoneRevision = (record, proceed) => {
|
|
33
|
-
delete record.revision;
|
|
34
|
-
delete record.incarnationId;
|
|
35
|
-
if (record.deletedRecordMetadata && typeof record.deletedRecordMetadata === 'object') {
|
|
36
|
-
delete record.deletedRecordMetadata.revision;
|
|
37
|
-
}
|
|
38
|
-
proceed();
|
|
39
|
-
};
|
|
40
15
|
let DeletedRecordClass = class DeletedRecordClass {
|
|
41
16
|
redboxOid;
|
|
42
|
-
/** Sole authority for the current tombstone lifecycle revision. */
|
|
43
|
-
revision = redbox_core_1.INITIAL_RECORD_REVISION;
|
|
44
|
-
/** Assigned only by native lifecycle storage from the durable OID owner. */
|
|
45
|
-
incarnationId;
|
|
46
|
-
brandId;
|
|
47
|
-
lifecycleState = 'deleted';
|
|
48
|
-
lifecycleOperation;
|
|
49
17
|
deletedRecordMetadata;
|
|
50
18
|
dateDeleted;
|
|
51
19
|
};
|
|
@@ -54,26 +22,6 @@ __decorate([
|
|
|
54
22
|
(0, redbox_core_1.Attr)({ type: 'string', unique: true }),
|
|
55
23
|
__metadata("design:type", String)
|
|
56
24
|
], DeletedRecordClass.prototype, "redboxOid", void 0);
|
|
57
|
-
__decorate([
|
|
58
|
-
(0, redbox_core_1.Attr)({ type: 'number', defaultsTo: redbox_core_1.INITIAL_RECORD_REVISION, custom: redbox_core_1.isRecordRevision }),
|
|
59
|
-
__metadata("design:type", Number)
|
|
60
|
-
], DeletedRecordClass.prototype, "revision", void 0);
|
|
61
|
-
__decorate([
|
|
62
|
-
(0, redbox_core_1.Attr)({ type: 'string', custom: redbox_core_1.isCanonicalSaveRequestId }),
|
|
63
|
-
__metadata("design:type", String)
|
|
64
|
-
], DeletedRecordClass.prototype, "incarnationId", void 0);
|
|
65
|
-
__decorate([
|
|
66
|
-
(0, redbox_core_1.Attr)({ type: 'string' }),
|
|
67
|
-
__metadata("design:type", String)
|
|
68
|
-
], DeletedRecordClass.prototype, "brandId", void 0);
|
|
69
|
-
__decorate([
|
|
70
|
-
(0, redbox_core_1.Attr)({ type: 'string', defaultsTo: 'deleted', isIn: redbox_core_1.DELETED_RECORD_LIFECYCLE_STATES }),
|
|
71
|
-
__metadata("design:type", String)
|
|
72
|
-
], DeletedRecordClass.prototype, "lifecycleState", void 0);
|
|
73
|
-
__decorate([
|
|
74
|
-
(0, redbox_core_1.Attr)({ type: 'json', custom: redbox_core_1.isDeletedRecordLifecycleOperation }),
|
|
75
|
-
__metadata("design:type", Object)
|
|
76
|
-
], DeletedRecordClass.prototype, "lifecycleOperation", void 0);
|
|
77
25
|
__decorate([
|
|
78
26
|
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
79
27
|
__metadata("design:type", Object)
|
|
@@ -83,9 +31,7 @@ __decorate([
|
|
|
83
31
|
__metadata("design:type", String)
|
|
84
32
|
], DeletedRecordClass.prototype, "dateDeleted", void 0);
|
|
85
33
|
exports.DeletedRecordClass = DeletedRecordClass = __decorate([
|
|
86
|
-
(0, redbox_core_1.BeforeCreate)(normalizeTombstoneLifecycle),
|
|
87
|
-
(0, redbox_core_1.BeforeUpdate)(stripTombstoneRevision),
|
|
88
34
|
(0, redbox_core_1.Entity)('deletedrecord', { datastore: 'redboxStorage' })
|
|
89
35
|
], DeletedRecordClass);
|
|
90
36
|
exports.DeletedRecordWLDef = (0, redbox_core_1.toWaterlineModelDef)(DeletedRecordClass);
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVsZXRlZFJlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvRGVsZXRlZFJlY29yZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw0QkFBMEI7QUFDMUIsOERBQWlGO0FBRzFFLElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO0lBRXRCLFNBQVMsQ0FBVTtJQUduQixxQkFBcUIsQ0FBMkI7SUFHaEQsV0FBVyxDQUFVO0NBQzdCLENBQUE7QUFUWSxnREFBa0I7QUFFdEI7SUFETixJQUFBLGtCQUFJLEVBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzs7cURBQ2I7QUFHbkI7SUFETixJQUFBLGtCQUFJLEVBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7O2lFQUNnQztBQUdoRDtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDOzt1REFDbEI7NkJBUmpCLGtCQUFrQjtJQUQ5QixJQUFBLG9CQUFNLEVBQUMsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO0dBQzNDLGtCQUFrQixDQVM5QjtBQUVZLFFBQUEsa0JBQWtCLEdBQUcsSUFBQSxpQ0FBbUIsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDIn0=
|
package/dist/models/Record.d.ts
CHANGED
|
@@ -3,15 +3,12 @@ export type JsonMap = Record<string, unknown>;
|
|
|
3
3
|
export declare class RecordClass {
|
|
4
4
|
redboxOid?: string;
|
|
5
5
|
harvestId?: string;
|
|
6
|
-
/** Server-owned. Clients must retain the opaque tag rather than assume 0. */
|
|
7
|
-
revision: number;
|
|
8
|
-
/** Assigned only by the native conditional-create storage boundary. */
|
|
9
|
-
incarnationId?: string;
|
|
10
|
-
lifecycleOperationId?: string;
|
|
11
6
|
metaMetadata?: JsonMap;
|
|
12
7
|
metadata?: JsonMap;
|
|
13
8
|
workflow?: JsonMap;
|
|
14
9
|
authorization?: JsonMap;
|
|
10
|
+
figshareSyncIntent?: JsonMap;
|
|
11
|
+
recordVersion?: number;
|
|
15
12
|
dateCreated: string;
|
|
16
13
|
lastSaveDate: string;
|
|
17
14
|
}
|
package/dist/models/Record.js
CHANGED
|
@@ -12,41 +12,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.RecordWLDef = exports.RecordClass = void 0;
|
|
13
13
|
require("reflect-metadata");
|
|
14
14
|
const redbox_core_1 = require("@researchdatabox/redbox-core");
|
|
15
|
-
/**
|
|
16
|
-
* Ordinary Waterline creates always start a new record lineage. Lifecycle
|
|
17
|
-
* restoration uses a server-owned native storage path so it can continue a
|
|
18
|
-
* tombstone lineage without exposing a caller-controlled way to select the
|
|
19
|
-
* initial revision.
|
|
20
|
-
*/
|
|
21
|
-
const normalizeServerRevision = (record, proceed) => {
|
|
22
|
-
record.revision = redbox_core_1.INITIAL_RECORD_REVISION;
|
|
23
|
-
delete record.incarnationId;
|
|
24
|
-
delete record.lifecycleOperationId;
|
|
25
|
-
proceed();
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Only the atomic compare-and-set path may advance a revision, and it bypasses
|
|
29
|
-
* Waterline to do so. Any other update therefore leaves the stored revision
|
|
30
|
-
* untouched instead of writing a caller-supplied value.
|
|
31
|
-
*/
|
|
32
|
-
const stripServerRevision = (record, proceed) => {
|
|
33
|
-
delete record.revision;
|
|
34
|
-
delete record.incarnationId;
|
|
35
|
-
delete record.lifecycleOperationId;
|
|
36
|
-
proceed();
|
|
37
|
-
};
|
|
38
15
|
let RecordClass = class RecordClass {
|
|
39
16
|
redboxOid;
|
|
40
17
|
harvestId;
|
|
41
|
-
/** Server-owned. Clients must retain the opaque tag rather than assume 0. */
|
|
42
|
-
revision = redbox_core_1.INITIAL_RECORD_REVISION;
|
|
43
|
-
/** Assigned only by the native conditional-create storage boundary. */
|
|
44
|
-
incarnationId;
|
|
45
|
-
lifecycleOperationId;
|
|
46
18
|
metaMetadata;
|
|
47
19
|
metadata;
|
|
48
20
|
workflow;
|
|
49
21
|
authorization;
|
|
22
|
+
figshareSyncIntent;
|
|
23
|
+
recordVersion;
|
|
50
24
|
dateCreated;
|
|
51
25
|
lastSaveDate;
|
|
52
26
|
};
|
|
@@ -59,18 +33,6 @@ __decorate([
|
|
|
59
33
|
(0, redbox_core_1.Attr)({ type: 'string' }),
|
|
60
34
|
__metadata("design:type", String)
|
|
61
35
|
], RecordClass.prototype, "harvestId", void 0);
|
|
62
|
-
__decorate([
|
|
63
|
-
(0, redbox_core_1.Attr)({ type: 'number', defaultsTo: redbox_core_1.INITIAL_RECORD_REVISION, custom: redbox_core_1.isRecordRevision }),
|
|
64
|
-
__metadata("design:type", Number)
|
|
65
|
-
], RecordClass.prototype, "revision", void 0);
|
|
66
|
-
__decorate([
|
|
67
|
-
(0, redbox_core_1.Attr)({ type: 'string', custom: redbox_core_1.isCanonicalSaveRequestId }),
|
|
68
|
-
__metadata("design:type", String)
|
|
69
|
-
], RecordClass.prototype, "incarnationId", void 0);
|
|
70
|
-
__decorate([
|
|
71
|
-
(0, redbox_core_1.Attr)({ type: 'string', custom: redbox_core_1.isCanonicalSaveRequestId }),
|
|
72
|
-
__metadata("design:type", String)
|
|
73
|
-
], RecordClass.prototype, "lifecycleOperationId", void 0);
|
|
74
36
|
__decorate([
|
|
75
37
|
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
76
38
|
__metadata("design:type", Object)
|
|
@@ -87,6 +49,14 @@ __decorate([
|
|
|
87
49
|
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
88
50
|
__metadata("design:type", Object)
|
|
89
51
|
], RecordClass.prototype, "authorization", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
54
|
+
__metadata("design:type", Object)
|
|
55
|
+
], RecordClass.prototype, "figshareSyncIntent", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, redbox_core_1.Attr)({ type: 'number', defaultsTo: 0 }),
|
|
58
|
+
__metadata("design:type", Number)
|
|
59
|
+
], RecordClass.prototype, "recordVersion", void 0);
|
|
90
60
|
__decorate([
|
|
91
61
|
(0, redbox_core_1.Attr)({ type: 'string', autoCreatedAt: true }),
|
|
92
62
|
__metadata("design:type", String)
|
|
@@ -96,11 +66,9 @@ __decorate([
|
|
|
96
66
|
__metadata("design:type", String)
|
|
97
67
|
], RecordClass.prototype, "lastSaveDate", void 0);
|
|
98
68
|
exports.RecordClass = RecordClass = __decorate([
|
|
99
|
-
(0, redbox_core_1.BeforeCreate)(normalizeServerRevision),
|
|
100
|
-
(0, redbox_core_1.BeforeUpdate)(stripServerRevision),
|
|
101
69
|
(0, redbox_core_1.Entity)('record', {
|
|
102
70
|
datastore: 'redboxStorage',
|
|
103
71
|
})
|
|
104
72
|
], RecordClass);
|
|
105
73
|
exports.RecordWLDef = (0, redbox_core_1.toWaterlineModelDef)(RecordClass);
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy9SZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTBCO0FBQzFCLDhEQUFpRjtBQU8xRSxJQUFNLFdBQVcsR0FBakIsTUFBTSxXQUFXO0lBRWYsU0FBUyxDQUFVO0lBR25CLFNBQVMsQ0FBVTtJQUduQixZQUFZLENBQVc7SUFHdkIsUUFBUSxDQUFXO0lBR25CLFFBQVEsQ0FBVztJQUduQixhQUFhLENBQVc7SUFHeEIsa0JBQWtCLENBQVc7SUFHN0IsYUFBYSxDQUFVO0lBR3ZCLFdBQVcsQ0FBVTtJQUdyQixZQUFZLENBQVU7Q0FDOUIsQ0FBQTtBQTlCWSxrQ0FBVztBQUVmO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7OzhDQUNiO0FBR25CO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDOzs4Q0FDQztBQUduQjtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzs7aURBQ087QUFHdkI7SUFETixJQUFBLGtCQUFJLEVBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7OzZDQUNHO0FBR25CO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDOzs2Q0FDRztBQUduQjtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzs7a0RBQ1E7QUFHeEI7SUFETixJQUFBLGtCQUFJLEVBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7O3VEQUNhO0FBRzdCO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7O2tEQUNWO0FBR3ZCO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7O2dEQUNsQjtBQUdyQjtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDOztpREFDakI7c0JBN0JsQixXQUFXO0lBSHZCLElBQUEsb0JBQU0sRUFBQyxRQUFRLEVBQUU7UUFDaEIsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQztHQUNXLFdBQVcsQ0E4QnZCO0FBRVksUUFBQSxXQUFXLEdBQUcsSUFBQSxpQ0FBbUIsRUFBQyxXQUFXLENBQUMsQ0FBQyJ9
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
export declare class RecordAuditClass {
|
|
3
3
|
redboxOid?: string;
|
|
4
|
+
occurredAt?: string;
|
|
4
5
|
user?: Record<string, unknown>;
|
|
5
6
|
record?: Record<string, unknown>;
|
|
6
7
|
dateCreated: string;
|
|
7
8
|
action?: string;
|
|
8
|
-
executionSummary?: Record<string, unknown>;
|
|
9
|
-
concurrency?: Record<string, unknown>;
|
|
10
9
|
}
|
|
11
10
|
export declare const RecordAuditWLDef: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
@@ -14,18 +14,21 @@ require("reflect-metadata");
|
|
|
14
14
|
const redbox_core_1 = require("@researchdatabox/redbox-core");
|
|
15
15
|
let RecordAuditClass = class RecordAuditClass {
|
|
16
16
|
redboxOid;
|
|
17
|
+
occurredAt;
|
|
17
18
|
user;
|
|
18
19
|
record;
|
|
19
20
|
dateCreated;
|
|
20
21
|
action;
|
|
21
|
-
executionSummary;
|
|
22
|
-
concurrency;
|
|
23
22
|
};
|
|
24
23
|
exports.RecordAuditClass = RecordAuditClass;
|
|
25
24
|
__decorate([
|
|
26
25
|
(0, redbox_core_1.Attr)({ type: 'string' }),
|
|
27
26
|
__metadata("design:type", String)
|
|
28
27
|
], RecordAuditClass.prototype, "redboxOid", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, redbox_core_1.Attr)({ type: 'string' }),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], RecordAuditClass.prototype, "occurredAt", void 0);
|
|
29
32
|
__decorate([
|
|
30
33
|
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
31
34
|
__metadata("design:type", Object)
|
|
@@ -42,16 +45,8 @@ __decorate([
|
|
|
42
45
|
(0, redbox_core_1.Attr)({ type: 'string' }),
|
|
43
46
|
__metadata("design:type", String)
|
|
44
47
|
], RecordAuditClass.prototype, "action", void 0);
|
|
45
|
-
__decorate([
|
|
46
|
-
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
47
|
-
__metadata("design:type", Object)
|
|
48
|
-
], RecordAuditClass.prototype, "executionSummary", void 0);
|
|
49
|
-
__decorate([
|
|
50
|
-
(0, redbox_core_1.Attr)({ type: 'json' }),
|
|
51
|
-
__metadata("design:type", Object)
|
|
52
|
-
], RecordAuditClass.prototype, "concurrency", void 0);
|
|
53
48
|
exports.RecordAuditClass = RecordAuditClass = __decorate([
|
|
54
49
|
(0, redbox_core_1.Entity)('recordaudit', { datastore: 'redboxStorage' })
|
|
55
50
|
], RecordAuditClass);
|
|
56
51
|
exports.RecordAuditWLDef = (0, redbox_core_1.toWaterlineModelDef)(RecordAuditClass);
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL1JlY29yZEF1ZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDRCQUEwQjtBQUMxQiw4REFBaUY7QUFHMUUsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFFcEIsU0FBUyxDQUFVO0lBR25CLFVBQVUsQ0FBVTtJQUdwQixJQUFJLENBQTJCO0lBRy9CLE1BQU0sQ0FBMkI7SUFHakMsV0FBVyxDQUFVO0lBR3JCLE1BQU0sQ0FBVTtDQUN4QixDQUFBO0FBbEJZLDRDQUFnQjtBQUVwQjtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzs7bURBQ0M7QUFHbkI7SUFETixJQUFBLGtCQUFJLEVBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7O29EQUNFO0FBR3BCO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDOzs4Q0FDZTtBQUcvQjtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzs7Z0RBQ2lCO0FBR2pDO0lBRE4sSUFBQSxrQkFBSSxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7O3FEQUNsQjtBQUdyQjtJQUROLElBQUEsa0JBQUksRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzs7Z0RBQ0Y7MkJBakJaLGdCQUFnQjtJQUQ1QixJQUFBLG9CQUFNLEVBQUMsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO0dBQ3pDLGdCQUFnQixDQWtCNUI7QUFFWSxRQUFBLGdCQUFnQixHQUFHLElBQUEsaUNBQW1CLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQyJ9
|
package/dist/models/index.d.ts
CHANGED
|
@@ -2,13 +2,9 @@ export * from './Record';
|
|
|
2
2
|
export * from './DeletedRecord';
|
|
3
3
|
export * from './RecordAudit';
|
|
4
4
|
export * from './IntegrationAudit';
|
|
5
|
-
export * from './RecordSchemaArtifact';
|
|
6
|
-
export * from './RecordSchemaReference';
|
|
7
5
|
export declare const MongoModels: {
|
|
8
6
|
Record: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
9
7
|
DeletedRecord: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
10
8
|
RecordAudit: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
11
9
|
IntegrationAudit: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
12
|
-
RecordSchemaArtifact: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
13
|
-
RecordSchemaReference: import("@researchdatabox/redbox-core").WaterlineModelDefinition;
|
|
14
10
|
};
|
package/dist/models/index.js
CHANGED
|
@@ -19,20 +19,14 @@ const Record_1 = require("./Record");
|
|
|
19
19
|
const DeletedRecord_1 = require("./DeletedRecord");
|
|
20
20
|
const RecordAudit_1 = require("./RecordAudit");
|
|
21
21
|
const IntegrationAudit_1 = require("./IntegrationAudit");
|
|
22
|
-
const RecordSchemaArtifact_1 = require("./RecordSchemaArtifact");
|
|
23
|
-
const RecordSchemaReference_1 = require("./RecordSchemaReference");
|
|
24
22
|
__exportStar(require("./Record"), exports);
|
|
25
23
|
__exportStar(require("./DeletedRecord"), exports);
|
|
26
24
|
__exportStar(require("./RecordAudit"), exports);
|
|
27
25
|
__exportStar(require("./IntegrationAudit"), exports);
|
|
28
|
-
__exportStar(require("./RecordSchemaArtifact"), exports);
|
|
29
|
-
__exportStar(require("./RecordSchemaReference"), exports);
|
|
30
26
|
exports.MongoModels = {
|
|
31
27
|
Record: Record_1.RecordWLDef,
|
|
32
28
|
DeletedRecord: DeletedRecord_1.DeletedRecordWLDef,
|
|
33
29
|
RecordAudit: RecordAudit_1.RecordAuditWLDef,
|
|
34
30
|
IntegrationAudit: IntegrationAudit_1.IntegrationAuditWLDef,
|
|
35
|
-
RecordSchemaArtifact: RecordSchemaArtifact_1.RecordSchemaArtifactWLDef,
|
|
36
|
-
RecordSchemaReference: RecordSchemaReference_1.RecordSchemaReferenceWLDef,
|
|
37
31
|
};
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBQXVDO0FBQ3ZDLG1EQUFxRDtBQUNyRCwrQ0FBaUQ7QUFDakQseURBQTJEO0FBRTNELDJDQUF5QjtBQUN6QixrREFBZ0M7QUFDaEMsZ0RBQThCO0FBQzlCLHFEQUFtQztBQUV0QixRQUFBLFdBQVcsR0FBRztJQUN6QixNQUFNLEVBQUUsb0JBQVc7SUFDbkIsYUFBYSxFQUFFLGtDQUFrQjtJQUNqQyxXQUFXLEVBQUUsOEJBQWdCO0lBQzdCLGdCQUFnQixFQUFFLHdDQUFxQjtDQUN4QyxDQUFDIn0=
|