@jrmc/adonis-attachment 5.0.0-beta.3 → 5.0.0-beta.4

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.
Files changed (71) hide show
  1. package/build/providers/attachment_provider.d.ts.map +1 -1
  2. package/build/providers/attachment_provider.js +9 -1
  3. package/build/services/regenerate_service.js +3 -3
  4. package/build/src/adapters/lock.d.ts +9 -0
  5. package/build/src/adapters/lock.d.ts.map +1 -0
  6. package/build/src/adapters/lock.js +21 -0
  7. package/build/src/attachment_manager.d.ts +2 -2
  8. package/build/src/attachment_manager.d.ts.map +1 -1
  9. package/build/src/attachment_manager.js +6 -2
  10. package/build/src/controllers/attachments_controller.d.ts.map +1 -1
  11. package/build/src/controllers/attachments_controller.js +21 -12
  12. package/build/src/services/attachment/attachment_detachment_service.d.ts +19 -0
  13. package/build/src/services/attachment/attachment_detachment_service.d.ts.map +1 -0
  14. package/build/src/services/attachment/attachment_detachment_service.js +64 -0
  15. package/build/src/services/attachment/attachment_persister_service.d.ts +22 -0
  16. package/build/src/services/attachment/attachment_persister_service.d.ts.map +1 -0
  17. package/build/src/services/attachment/attachment_persister_service.js +93 -0
  18. package/build/src/services/attachment/attachment_recorder_service.d.ts +68 -0
  19. package/build/src/services/attachment/attachment_recorder_service.d.ts.map +1 -0
  20. package/build/src/services/attachment/attachment_recorder_service.js +119 -0
  21. package/build/src/services/attachment/attachment_transaction_service.d.ts +26 -0
  22. package/build/src/services/attachment/attachment_transaction_service.d.ts.map +1 -0
  23. package/build/src/services/attachment/attachment_transaction_service.js +43 -0
  24. package/build/src/services/attachment/attachment_utils.d.ts +35 -0
  25. package/build/src/services/attachment/attachment_utils.d.ts.map +1 -0
  26. package/build/src/services/attachment/attachment_utils.js +71 -0
  27. package/build/src/services/attachment/attachment_variant_service.d.ts +17 -0
  28. package/build/src/services/attachment/attachment_variant_service.d.ts.map +1 -0
  29. package/build/src/services/attachment/attachment_variant_service.js +72 -0
  30. package/build/src/services/attachment/index.d.ts +15 -0
  31. package/build/src/services/attachment/index.d.ts.map +1 -0
  32. package/build/src/services/attachment/index.js +15 -0
  33. package/build/src/services/attachment_service.d.ts +8 -0
  34. package/build/src/services/attachment_service.d.ts.map +1 -0
  35. package/build/src/services/attachment_service.js +7 -0
  36. package/build/src/services/variant/{variant_generator.d.ts → variant_generator_service.d.ts} +8 -2
  37. package/build/src/services/variant/variant_generator_service.d.ts.map +1 -0
  38. package/build/src/services/variant/{variant_generator.js → variant_generator_service.js} +7 -1
  39. package/build/src/services/variant/{variant_persister.d.ts → variant_persister_service.d.ts} +8 -2
  40. package/build/src/services/variant/variant_persister_service.d.ts.map +1 -0
  41. package/build/src/services/variant/{variant_persister.js → variant_persister_service.js} +7 -1
  42. package/build/src/services/variant/{variant_purger.d.ts → variant_purger_service.d.ts} +7 -1
  43. package/build/src/services/variant/variant_purger_service.d.ts.map +1 -0
  44. package/build/src/services/variant/{variant_purger.js → variant_purger_service.js} +6 -0
  45. package/build/src/services/variant_service.d.ts +6 -0
  46. package/build/src/services/variant_service.d.ts.map +1 -1
  47. package/build/src/services/variant_service.js +13 -7
  48. package/build/src/types/index.d.ts +6 -0
  49. package/build/src/types/index.d.ts.map +1 -1
  50. package/build/src/types/index.js +6 -0
  51. package/build/src/types/lock.d.ts +14 -0
  52. package/build/src/types/lock.d.ts.map +1 -0
  53. package/build/src/types/lock.js +7 -0
  54. package/build/src/types/metadata.d.ts +6 -0
  55. package/build/src/types/metadata.d.ts.map +1 -1
  56. package/build/src/types/metadata.js +6 -0
  57. package/build/src/types/regenerate.d.ts +6 -0
  58. package/build/src/types/regenerate.d.ts.map +1 -1
  59. package/build/src/types/regenerate.js +6 -0
  60. package/build/src/types/service.d.ts +6 -0
  61. package/build/src/types/service.d.ts.map +1 -1
  62. package/build/src/types/service.js +6 -0
  63. package/build/src/utils/hooks.js +5 -5
  64. package/build/tsconfig.tsbuildinfo +1 -1
  65. package/package.json +32 -23
  66. package/build/src/services/record_with_attachment.d.ts +0 -33
  67. package/build/src/services/record_with_attachment.d.ts.map +0 -1
  68. package/build/src/services/record_with_attachment.js +0 -316
  69. package/build/src/services/variant/variant_generator.d.ts.map +0 -1
  70. package/build/src/services/variant/variant_persister.d.ts.map +0 -1
  71. package/build/src/services/variant/variant_purger.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jrmc/adonis-attachment",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
4
4
  "type": "module",
5
5
  "description": "Turn any field on your Lucid model to an attachment data type",
6
6
  "engines": {
@@ -65,50 +65,59 @@
65
65
  "./attachment_provider": "./build/providers/attachment_provider.js"
66
66
  },
67
67
  "dependencies": {
68
- "@poppinss/defer": "^1.1.1",
68
+ "@poppinss/defer": "^1.1.2",
69
+ "@verrou/core": "^0.5.1",
69
70
  "blurhash": "^2.0.5",
70
71
  "execa": "^9.6.0",
71
- "exifreader": "^4.26.0",
72
- "file-type": "^19.6.0",
73
- "mime-types": "^2.1.35"
72
+ "exifreader": "^4.31.1",
73
+ "file-type": "^21.0.0",
74
+ "mime-types": "^3.0.1"
74
75
  },
75
76
  "devDependencies": {
76
77
  "@adonisjs/assembler": "^7.8.2",
77
- "@adonisjs/core": "^6.17.1",
78
- "@adonisjs/drive": "^3.2.0",
78
+ "@adonisjs/core": "^6.19.0",
79
+ "@adonisjs/drive": "^3.4.1",
79
80
  "@adonisjs/lock": "^1.1.1",
80
- "@adonisjs/lucid": "^21.6.0",
81
- "@adonisjs/prettier-config": "^1.4.0",
82
- "@adonisjs/tsconfig": "^1.4.0",
81
+ "@adonisjs/lucid": "^21.7.0",
82
+ "@adonisjs/prettier-config": "^1.4.5",
83
+ "@adonisjs/tsconfig": "^1.4.1",
83
84
  "@japa/assert": "^4.0.1",
84
85
  "@japa/expect-type": "^2.0.3",
85
86
  "@japa/file-system": "^2.3.2",
86
- "@japa/plugin-adonisjs": "^4.0.0",
87
87
  "@japa/runner": "^4.1.0",
88
88
  "@poppinss/utils": "^6.9.2",
89
- "@swc/core": "^1.10.7",
90
- "@types/luxon": "^3.4.2",
91
- "@types/mime-types": "^2.1.4",
92
- "@types/node": "^22.10.7",
93
- "@types/sinon": "^17.0.3",
94
- "better-sqlite3": "^11.8.0",
89
+ "@swc/core": "^1.12.9",
90
+ "@types/luxon": "^3.6.2",
91
+ "@types/mime-types": "^3.0.1",
92
+ "@types/node": "^24.0.10",
93
+ "@types/sinon": "^17.0.4",
94
+ "better-sqlite3": "^12.2.0",
95
95
  "c8": "^10.1.3",
96
96
  "copyfiles": "^2.4.1",
97
97
  "del-cli": "^6.0.0",
98
- "flydrive": "^1.1.0",
99
- "luxon": "^3.5.0",
98
+ "flydrive": "^1.3.0",
99
+ "luxon": "^3.6.1",
100
100
  "prettier": "^3.4.2",
101
- "sharp": "^0.33.5",
102
- "sinon": "^19.0.2",
101
+ "sharp": "^0.34.2",
102
+ "sinon": "^21.0.0",
103
103
  "ts-node": "^10.9.2",
104
- "typescript": "^5.7.3",
104
+ "typescript": "^5.3.3",
105
105
  "vitepress": "^1.5.0"
106
106
  },
107
107
  "peerDependencies": {
108
108
  "@adonisjs/core": "^6.12.1",
109
109
  "@adonisjs/drive": "^3.2.0",
110
110
  "@adonisjs/lock": "^1.1.1",
111
- "@adonisjs/lucid": "^20.6.0 || ^21.0.0"
111
+ "@adonisjs/lucid": "^20.6.0 || ^21.0.0",
112
+ "sharp": "^0.33.0"
113
+ },
114
+ "peerDependenciesMeta": {
115
+ "@adonisjs/lock": {
116
+ "optional": true
117
+ },
118
+ "sharp": {
119
+ "optional": true
120
+ }
112
121
  },
113
122
  "prettier": "@adonisjs/prettier-config",
114
123
  "c8": {
@@ -1,33 +0,0 @@
1
- import type { RowWithAttachment } from '../types/mixin.js';
2
- import type { Attachment as AttachmentType } from '../types/attachment.js';
3
- import type { RecordWithAttachment as RecordWithAttachmentImplementation } from '../types/service.js';
4
- import type { RegenerateOptions } from '../types/regenerate.js';
5
- export default class RecordWithAttachment implements RecordWithAttachmentImplementation {
6
- #private;
7
- constructor(row: RowWithAttachment);
8
- /**
9
- * During commit, we should cleanup the old detached files
10
- */
11
- commit(): Promise<void>;
12
- /**
13
- * During rollback we should remove the attached files.
14
- */
15
- rollback(): Promise<void>;
16
- persist(): Promise<void>;
17
- transaction(options?: {
18
- enabledRollback: boolean;
19
- }): Promise<void>;
20
- preComputeUrl(): Promise<void>;
21
- setKeyId(): Promise<void>;
22
- generateVariants(): Promise<void>;
23
- regenerateVariants(options?: RegenerateOptions): Promise<void>;
24
- detach(): Promise<PromiseSettledResult<void>[]>;
25
- detachAll(): Promise<PromiseSettledResult<void>[]>;
26
- get row(): RowWithAttachment;
27
- getAttachments(options: {
28
- attributeName: string;
29
- requiredOriginal?: boolean;
30
- requiredDirty?: boolean;
31
- }): AttachmentType[];
32
- }
33
- //# sourceMappingURL=record_with_attachment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"record_with_attachment.d.ts","sourceRoot":"","sources":["../../../src/services/record_with_attachment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAgB,MAAM,wBAAwB,CAAA;AACxF,OAAO,KAAK,EAAE,oBAAoB,IAAI,kCAAkC,EAAE,MAAM,qBAAqB,CAAA;AACrG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAW/D,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,kCAAkC;;gBAGzE,GAAG,EAAE,iBAAiB;IAWlC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDxB,WAAW,CAAC,OAAO;;KAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/D,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BzB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCjC,kBAAkB,CAAC,OAAO,GAAE,iBAAsB;IAuClD,MAAM;IA2CN,SAAS;IAkBf,IAAI,GAAG,sBAEN;IAED,cAAc,CAAC,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;CA4EvG"}
@@ -1,316 +0,0 @@
1
- import logger from '@adonisjs/core/services/logger';
2
- import encryption from '@adonisjs/core/services/encryption';
3
- import attachmentManager from '../../services/main.js';
4
- import VariantService from './variant_service.js';
5
- import { defaultStateAttributeMixin } from '../utils/default_values.js';
6
- import { Attachment } from '../attachments/attachment.js';
7
- import { optionsSym } from '../utils/symbols.js';
8
- import { E_CANNOT_CREATE_VARIANT } from '../errors.js';
9
- export default class RecordWithAttachment {
10
- #row;
11
- constructor(row) {
12
- this.#row = row;
13
- if (!this.#row.$attachments) {
14
- /**
15
- * Empty previous $attachments
16
- */
17
- this.#row.$attachments = structuredClone(defaultStateAttributeMixin);
18
- }
19
- }
20
- /**
21
- * During commit, we should cleanup the old detached files
22
- */
23
- async commit() {
24
- await Promise.allSettled(this.#row.$attachments.detached.map((attachment) => attachmentManager.remove(attachment)));
25
- }
26
- /**
27
- * During rollback we should remove the attached files.
28
- */
29
- async rollback() {
30
- await Promise.allSettled(this.#row.$attachments.attached.map((attachment) => attachmentManager.remove(attachment)));
31
- }
32
- async persist() {
33
- const attachmentAttributeNames = this.#getDirtyAttributeNamesOfAttachment();
34
- /**
35
- * Persist attachments before saving the row to the database. This
36
- * way if file saving fails we will not write anything to the
37
- * database
38
- */
39
- await Promise.all(attachmentAttributeNames.map(async (name) => {
40
- const originalAttachments = this.#getOriginalAttachmentsByAttributeName(name);
41
- const newAttachments = this.#getAttachmentsByAttributeName(name);
42
- const options = this.#getOptionsByAttributeName(name);
43
- /**
44
- * Skip when the attachment attributeName hasn't been updated
45
- */
46
- if (!originalAttachments && !newAttachments) {
47
- return;
48
- }
49
- /**
50
- * memorise attribute name for generate variants
51
- */
52
- this.#row.$attachments.dirtied.push(name);
53
- for (let i = 0; i < newAttachments.length; i++) {
54
- if (originalAttachments.includes(newAttachments[i])) {
55
- continue;
56
- }
57
- /**
58
- * If there is a new file and its local then we must save this
59
- * file.
60
- */
61
- if (newAttachments[i]) {
62
- newAttachments[i].setOptions(options).makeFolder(this.#row);
63
- this.#row.$attachments.attached.push(newAttachments[i]);
64
- /**
65
- * Also write the file to the disk right away
66
- */
67
- await attachmentManager.write(newAttachments[i]);
68
- }
69
- }
70
- }));
71
- }
72
- async transaction(options = { enabledRollback: true }) {
73
- try {
74
- if (this.#row.$trx) {
75
- this.#row.$trx.after('commit', () => this.commit());
76
- if (options.enabledRollback) {
77
- this.#row.$trx.after('rollback', () => this.rollback());
78
- }
79
- }
80
- else {
81
- await this.commit();
82
- }
83
- }
84
- catch (error) {
85
- if (options.enabledRollback) {
86
- await this.rollback();
87
- }
88
- throw error;
89
- }
90
- }
91
- async preComputeUrl() {
92
- const attachmentAttributeNames = this.#getAttributeNamesOfAttachment();
93
- await Promise.all(attachmentAttributeNames.map(async (name) => {
94
- const options = this.#getOptionsByAttributeName(name);
95
- if (this.#row.$attributes[name]) {
96
- const attachments = this.#getAttachmentsByAttributeName(name);
97
- for (let i = 0; i < attachments.length; i++) {
98
- attachments[i].setOptions(options);
99
- await attachmentManager.preComputeUrl(attachments[i]);
100
- }
101
- }
102
- }));
103
- }
104
- async setKeyId() {
105
- const attachmentAttributeNames = this.#getAttributeNamesOfAttachment();
106
- await Promise.all(attachmentAttributeNames.map(async (name) => {
107
- if (this.#row.$attributes[name]) {
108
- const attachments = this.#getAttachmentsByAttributeName(name);
109
- for (let i = 0; i < attachments.length; i++) {
110
- const { disk, folder, meta, rename } = attachments[i].options;
111
- const model = this.#row.constructor;
112
- const key = encryption.encrypt({
113
- model: model.table,
114
- id: this.#row.$attributes['id'],
115
- attribute: name,
116
- index: i,
117
- options: {
118
- disk,
119
- folder,
120
- meta,
121
- rename
122
- }
123
- });
124
- attachments[i].setKeyId(key);
125
- }
126
- }
127
- }));
128
- }
129
- async generateVariants() {
130
- /* this.#row.$dirty is not avalable in afterSave hooks */
131
- const attachmentAttributeNames = this.#row.$attachments.dirtied;
132
- /**
133
- * For all properties Attachment
134
- * Launch async generation variants
135
- */
136
- for await (const name of attachmentAttributeNames) {
137
- if (!this.#row.$attributes[name]) {
138
- continue;
139
- }
140
- const record = this;
141
- attachmentManager.queue.push({
142
- name: `${this.#row.constructor.name}-${name}`,
143
- async run() {
144
- await attachmentManager.lock.createLock(`attachment.${record.#row.constructor.name}-${name}`).run(async () => {
145
- const variantService = new VariantService({
146
- record,
147
- attributeName: name,
148
- options: record.#getOptionsByAttributeName(name),
149
- });
150
- await variantService.run();
151
- });
152
- },
153
- })
154
- .onError = function (error) {
155
- if (error.message) {
156
- logger.error(error.message);
157
- }
158
- else {
159
- throw new E_CANNOT_CREATE_VARIANT([error]);
160
- }
161
- };
162
- }
163
- }
164
- async regenerateVariants(options = {}) {
165
- let attachmentAttributeNames;
166
- if (options.attributes?.length) {
167
- attachmentAttributeNames = options.attributes;
168
- }
169
- else {
170
- attachmentAttributeNames = this.#getAttributeNamesOfAttachment();
171
- }
172
- for await (const name of attachmentAttributeNames) {
173
- if (!this.#row.$attributes[name]) {
174
- continue;
175
- }
176
- const record = this;
177
- attachmentManager.queue.push({
178
- name: `${this.#row.constructor.name}-${name}`,
179
- async run() {
180
- const variantService = new VariantService({
181
- record,
182
- attributeName: name,
183
- options: record.#getOptionsByAttributeName(name),
184
- filters: {
185
- variants: options.variants
186
- }
187
- });
188
- await variantService.run();
189
- },
190
- })
191
- .onError = function (error) {
192
- if (error.message) {
193
- logger.error(error.message);
194
- }
195
- else {
196
- throw new E_CANNOT_CREATE_VARIANT([error]);
197
- }
198
- };
199
- }
200
- }
201
- async detach() {
202
- const attachmentAttributeNames = this.#getDirtyAttributeNamesOfAttachment();
203
- /**
204
- * Mark all original attachments for deletion
205
- */
206
- return Promise.allSettled(attachmentAttributeNames.map((name) => {
207
- let attachments = [];
208
- const options = this.#getOptionsByAttributeName(name);
209
- if (this.#row.$dirty[name] === null) {
210
- attachments = this.#getOriginalAttachmentsByAttributeName(name);
211
- }
212
- else {
213
- const originalAttachments = this.#getOriginalAttachmentsByAttributeName(name);
214
- const newAttachments = this.#getAttachmentsByAttributeName(name);
215
- /**
216
- * Clean Attachments changed
217
- */
218
- for (let i = 0; i < originalAttachments.length; i++) {
219
- if (newAttachments.includes(originalAttachments[i])) {
220
- continue;
221
- }
222
- /**
223
- * If there was an existing file, then we must get rid of it
224
- */
225
- if (originalAttachments[i]) {
226
- originalAttachments[i].setOptions(options);
227
- attachments.push(originalAttachments[i]);
228
- }
229
- }
230
- }
231
- for (let i = 0; i < attachments.length; i++) {
232
- attachments[i].setOptions(options);
233
- this.#row.$attachments.detached.push(attachments[i]);
234
- }
235
- }));
236
- }
237
- async detachAll() {
238
- const attachmentAttributeNames = this.#getAttributeNamesOfAttachment();
239
- /**
240
- * Mark all attachments for deletion
241
- */
242
- return Promise.allSettled(attachmentAttributeNames.map((name) => {
243
- const options = this.#getOptionsByAttributeName(name);
244
- const attachments = this.#getAttachmentsByAttributeName(name);
245
- for (let i = 0; i < attachments.length; i++) {
246
- attachments[i].setOptions(options);
247
- this.#row.$attachments.detached.push(attachments[i]);
248
- }
249
- }));
250
- }
251
- get row() {
252
- return this.#row;
253
- }
254
- getAttachments(options) {
255
- let attachments;
256
- if (options.requiredOriginal) {
257
- attachments = this.#getOriginalAttachmentsByAttributeName(options.attributeName);
258
- }
259
- else if (options.requiredDirty) {
260
- attachments = this.#getDirtyAttachmentsByAttributeName(options.attributeName);
261
- }
262
- else {
263
- attachments = this.#getAttachmentsByAttributeName(options.attributeName);
264
- }
265
- const opts = this.#getOptionsByAttributeName(options.attributeName);
266
- attachments.forEach((attachment) => {
267
- if (attachment) {
268
- attachment.setOptions(opts).makeFolder(this.#row);
269
- }
270
- });
271
- return attachments;
272
- }
273
- #getAttachmentsByAttributeName(name) {
274
- if (Array.isArray(this.#row.$attributes[name])) {
275
- return this.#row.$attributes[name];
276
- }
277
- return [this.#row.$attributes[name]];
278
- }
279
- #getOriginalAttachmentsByAttributeName(name) {
280
- if (Array.isArray(this.#row.$original[name])) {
281
- return this.#row.$original[name];
282
- }
283
- return [this.#row.$original[name]];
284
- }
285
- #getDirtyAttachmentsByAttributeName(name) {
286
- if (Array.isArray(this.#row.$dirty[name])) {
287
- return this.#row.$dirty[name];
288
- }
289
- return [this.#row.$dirty[name]];
290
- }
291
- #getOptionsByAttributeName(name) {
292
- return this.#row.constructor.prototype[optionsSym]?.[name];
293
- }
294
- #getAttributeNamesOfAttachment() {
295
- return Object.keys(this.#row.$attributes).filter((name) => {
296
- const value = this.#row.$attributes[name];
297
- return (value instanceof Attachment ||
298
- (Array.isArray(value) && value.every((item) => item instanceof Attachment)));
299
- });
300
- }
301
- #getDirtyAttributeNamesOfAttachment() {
302
- return Object.keys(this.#row.$dirty).filter((name) => {
303
- const dirtyValue = this.#row.$dirty[name];
304
- const originalValue = this.#row.$original[name]; // if dirtyValue is null, check original type
305
- const isDirtyAttachment = dirtyValue instanceof Attachment ||
306
- (Array.isArray(dirtyValue) &&
307
- dirtyValue.length &&
308
- dirtyValue.every((item) => item instanceof Attachment));
309
- const isOriginalAttachment = originalValue instanceof Attachment ||
310
- (Array.isArray(originalValue) &&
311
- originalValue.length &&
312
- originalValue.every((item) => item instanceof Attachment));
313
- return isDirtyAttachment || isOriginalAttachment;
314
- });
315
- }
316
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"variant_generator.d.ts","sourceRoot":"","sources":["../../../../src/services/variant/variant_generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAOzD,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IAC7B,QAAQ,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAChD,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAClC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBhB,eAAe,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;QACpD,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,EAAE,SAAS,CAAA;KACrB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAkF5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"variant_persister.d.ts","sourceRoot":"","sources":["../../../../src/services/variant/variant_persister.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAOpE,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;;gBAMvB,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,iBAAiB;IAOpE,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;QACvC,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,QAAQ,EAAE,OAAO,EAAE,CAAA;KACpB,GAAG,OAAO,CAAC,IAAI,CAAC;CA2ClB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"variant_purger.d.ts","sourceRoot":"","sources":["../../../../src/services/variant/variant_purger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,2BAA2B,CAAA;AAIpE,MAAM,CAAC,OAAO,OAAO,aAAa;;gBAGpB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;IAIvC,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA6CtD"}