@webda/gcp 4.0.0-beta.1 → 4.0.0-beta.3

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 (57) hide show
  1. package/README.md +54 -4
  2. package/lib/index.d.ts +5 -4
  3. package/lib/index.d.ts.map +1 -0
  4. package/lib/index.js +4 -4
  5. package/lib/index.js.map +1 -1
  6. package/lib/services/firestore.service.d.ts +236 -0
  7. package/lib/services/firestore.service.d.ts.map +1 -0
  8. package/lib/services/firestore.service.js +692 -0
  9. package/lib/services/firestore.service.js.map +1 -0
  10. package/lib/services/index.d.ts +2 -1
  11. package/lib/services/index.d.ts.map +1 -0
  12. package/lib/services/index.js +1 -1
  13. package/lib/services/index.js.map +1 -1
  14. package/lib/services/{kms.d.ts → kms.service.d.ts} +14 -14
  15. package/lib/services/kms.service.d.ts.map +1 -0
  16. package/lib/services/{kms.js → kms.service.js} +18 -16
  17. package/lib/services/kms.service.js.map +1 -0
  18. package/lib/services/{pubsub.d.ts → pubsub.service.d.ts} +23 -3
  19. package/lib/services/pubsub.service.d.ts.map +1 -0
  20. package/lib/services/{pubsub.js → pubsub.service.js} +36 -10
  21. package/lib/services/pubsub.service.js.map +1 -0
  22. package/lib/services/{queue.d.ts → queue.service.d.ts} +32 -14
  23. package/lib/services/queue.service.d.ts.map +1 -0
  24. package/lib/services/{queue.js → queue.service.js} +65 -38
  25. package/lib/services/queue.service.js.map +1 -0
  26. package/lib/services/storage.service.d.ts +268 -0
  27. package/lib/services/storage.service.d.ts.map +1 -0
  28. package/lib/services/{storage.js → storage.service.js} +125 -78
  29. package/lib/services/storage.service.js.map +1 -0
  30. package/package.json +34 -40
  31. package/webda.module.json +1120 -1462
  32. package/lib/index.spec.d.ts +0 -4
  33. package/lib/index.spec.js +0 -7
  34. package/lib/index.spec.js.map +0 -1
  35. package/lib/services/firestore.d.ts +0 -134
  36. package/lib/services/firestore.js +0 -424
  37. package/lib/services/firestore.js.map +0 -1
  38. package/lib/services/firestore.spec.d.ts +0 -1
  39. package/lib/services/firestore.spec.js +0 -194
  40. package/lib/services/firestore.spec.js.map +0 -1
  41. package/lib/services/kms.js.map +0 -1
  42. package/lib/services/kms.spec.d.ts +0 -1
  43. package/lib/services/kms.spec.js +0 -53
  44. package/lib/services/kms.spec.js.map +0 -1
  45. package/lib/services/pubsub.js.map +0 -1
  46. package/lib/services/pubsub.spec.d.ts +0 -1
  47. package/lib/services/pubsub.spec.js +0 -95
  48. package/lib/services/pubsub.spec.js.map +0 -1
  49. package/lib/services/queue.js.map +0 -1
  50. package/lib/services/queue.spec.d.ts +0 -1
  51. package/lib/services/queue.spec.js +0 -104
  52. package/lib/services/queue.spec.js.map +0 -1
  53. package/lib/services/storage.d.ts +0 -214
  54. package/lib/services/storage.js.map +0 -1
  55. package/lib/services/storage.spec.d.ts +0 -1
  56. package/lib/services/storage.spec.js +0 -220
  57. package/lib/services/storage.spec.js.map +0 -1
@@ -1,26 +1,29 @@
1
1
  import { Storage as GCS } from "@google-cloud/storage";
2
- import { BinaryParameters, CloudBinary, Throttler } from "@webda/core";
2
+ import { CloudBinary, CloudBinaryParameters, useModelId } from "@webda/core";
3
+ import { Throttler } from "@webda/utils";
3
4
  import { createReadStream } from "fs";
4
5
  import * as mime from "mime-types";
5
- import { Readable, Stream } from "stream";
6
- import { pipeline } from "stream/promises.js";
7
- export class StorageParameters extends BinaryParameters {
8
- constructor(params, service) {
9
- super(params, service);
10
- this.prefix = "";
11
- }
6
+ import { Readable, Stream } from "node:stream";
7
+ import { pipeline } from "node:stream/promises";
8
+ /**
9
+ * Configuration for {@link Storage}
10
+ */
11
+ export class StorageParameters extends CloudBinaryParameters {
12
12
  }
13
13
  /**
14
14
  * Google Storage Finder implementation
15
15
  */
16
16
  export class GCSFinder {
17
+ /**
18
+ * @param options - GCS client options
19
+ */
17
20
  constructor(options) {
18
21
  this._storage = new GCS(options);
19
22
  }
20
23
  /**
21
24
  * Get info from url
22
- * @param path
23
- * @returns
25
+ * @param path - the gs:// url
26
+ * @returns the bucket and key
24
27
  */
25
28
  getInfo(path) {
26
29
  const url = new URL(path);
@@ -39,26 +42,30 @@ export class GCSFinder {
39
42
  /**
40
43
  * Depth or options is ignored
41
44
  * @override
45
+ * @param path - the gs:// url to walk
46
+ * @param processor - called for each file found
47
+ * @param _options - ignored
48
+ * @param _depth - ignored
42
49
  */
43
- async walk(path, processor, options, depth) {
50
+ async walk(path, processor, _options, _depth) {
44
51
  const { bucket, key } = this.getInfo(path);
45
52
  let pageToken;
46
53
  do {
47
- let res = await this._storage.bucket(bucket).getFiles(pageToken ? pageToken : { prefix: key });
48
- for (let file of res[0]) {
54
+ const res = await this._storage.bucket(bucket).getFiles(pageToken ? pageToken : { prefix: key });
55
+ for (const file of res[0]) {
49
56
  processor(`${path}${file.name}`);
50
57
  }
51
58
  pageToken = res[1].pageToken;
52
59
  } while (pageToken);
53
60
  }
54
61
  /**
55
- *
56
- * @param currentPath
57
- * @param options is ignored
58
- * @returns
62
+ * Find files under a gs:// url
63
+ * @param currentPath - the gs:// url to search
64
+ * @param options - only `filterPattern` and `processor` are used
65
+ * @returns the files found
59
66
  */
60
67
  async find(currentPath, options) {
61
- let res = [];
68
+ const res = [];
62
69
  await this.walk(currentPath, f => {
63
70
  if (options?.filterPattern && !options.filterPattern.test(f)) {
64
71
  return;
@@ -72,8 +79,8 @@ export class GCSFinder {
72
79
  }
73
80
  /**
74
81
  * Get a write stream
75
- * @param path
76
- * @returns
82
+ * @param path - the gs:// url
83
+ * @returns the write stream
77
84
  */
78
85
  async getWriteStream(path) {
79
86
  const { bucket, key } = this.getInfo(path);
@@ -81,8 +88,8 @@ export class GCSFinder {
81
88
  }
82
89
  /**
83
90
  * Get a read stream
84
- * @param path
85
- * @returns
91
+ * @param path - the gs:// url
92
+ * @returns the read stream
86
93
  */
87
94
  async getReadStream(path) {
88
95
  const { bucket, key } = this.getInfo(path);
@@ -96,22 +103,20 @@ export class GCSFinder {
96
103
  * @WebdaModda GoogleCloudStorage
97
104
  */
98
105
  export default class Storage extends CloudBinary {
106
+ /**
107
+ * GCS client, created on first use
108
+ * @returns the GCS client
109
+ */
99
110
  get storage() {
100
111
  if (!this._storage) {
101
112
  this._storage = new GCS({ apiEndpoint: this.parameters.endpoint });
102
113
  }
103
114
  return this._storage;
104
115
  }
105
- /**
106
- * Load the parameters
107
- *
108
- * @param params
109
- */
110
- loadParameters(params) {
111
- return new StorageParameters(params, this);
112
- }
113
116
  /**
114
117
  * @override
118
+ * @param info - the binary map
119
+ * @returns the content stream
115
120
  */
116
121
  async _get(info) {
117
122
  const key = this._getKey(info.hash);
@@ -119,6 +124,10 @@ export default class Storage extends CloudBinary {
119
124
  }
120
125
  /**
121
126
  * @override
127
+ * @param map - the binary map
128
+ * @param expires - expiration in seconds
129
+ * @param _context - the operation context
130
+ * @returns the signed url
122
131
  */
123
132
  getSignedUrlFromMap(map, expires, _context) {
124
133
  return this.getSignedUrl({
@@ -128,8 +137,11 @@ export default class Storage extends CloudBinary {
128
137
  });
129
138
  }
130
139
  /**
131
- * Get object content in Buffer
132
- * @param {StorageObject} params
140
+ * Get object content as a stream
141
+ * @param params - the object to read
142
+ * @param params.bucket - the bucket, default to the one predefined
143
+ * @param params.key - the object key
144
+ * @returns the content stream
133
145
  */
134
146
  async getContent({ bucket, key }) {
135
147
  return this.getStorageBucket(bucket).file(key).createReadStream();
@@ -137,14 +149,12 @@ export default class Storage extends CloudBinary {
137
149
  /**
138
150
  * Upload a local file to GCS bucket destination
139
151
  *
140
- * @param key to add to
141
- * @param body content of the object
142
- * @param metadatas to put along the object
143
- * @param bucket to use
152
+ * @param key - key to add to
153
+ * @param body - content of the object, a string is a local file path
154
+ * @param metadata - to put along the object
155
+ * @param bucket - to use
144
156
  */
145
- async putObject(key, body, metadata = {}, bucket = this.parameters.bucket
146
- //{ bucket, localPath, content, key }: PutObjectParams
147
- ) {
157
+ async putObject(key, body, metadata = {}, bucket = this.parameters.bucket) {
148
158
  const file = this.getStorageBucket(bucket).file(key);
149
159
  let contentType = "application/octet-stream";
150
160
  let stream;
@@ -166,14 +176,17 @@ export default class Storage extends CloudBinary {
166
176
  /**
167
177
  * Return the Google Bucket directly
168
178
  *
169
- * @param bucket name of the bucket default to the one predefined
170
- * @returns
179
+ * @param bucket - name of the bucket default to the one predefined
180
+ * @returns the bucket
171
181
  */
172
182
  getStorageBucket(bucket = this.parameters.bucket) {
173
183
  return this.storage.bucket(bucket);
174
184
  }
175
185
  /**
176
186
  * @inheritdoc
187
+ * @param hash - the binary hash
188
+ * @param uuid - the object uuid
189
+ * @param property - the object property
177
190
  */
178
191
  async _cleanUsage(hash, uuid, property) {
179
192
  const suffix = property ? `${property}_${uuid}` : `_${uuid}`;
@@ -187,6 +200,8 @@ export default class Storage extends CloudBinary {
187
200
  }
188
201
  /**
189
202
  * @inheritdoc
203
+ * @param hash - the binary hash
204
+ * @returns the number of objects using the binary
190
205
  */
191
206
  async getUsageCount(hash) {
192
207
  const [files] = await this.getStorageBucket().getFiles({
@@ -196,6 +211,9 @@ export default class Storage extends CloudBinary {
196
211
  }
197
212
  /**
198
213
  * @inheritdoc
214
+ * @param object - the object to attach the binary to
215
+ * @param property - the object property
216
+ * @param file - the binary to store
199
217
  */
200
218
  async store(object, property, file) {
201
219
  this.checkMap(object, property);
@@ -208,37 +226,43 @@ export default class Storage extends CloudBinary {
208
226
  challenge: file.challenge
209
227
  });
210
228
  }
211
- await this.putMarker(file.hash, `${property}_${object.getUuid()}`, object.getStore().getName());
212
- await this.uploadSuccess(object, property, file);
229
+ await this.putMarker(file.hash, `${property}_${object.getUUID()}`, useModelId(object.constructor));
230
+ await this.uploadSuccess(object, property, file.toBinaryFileInfo());
213
231
  }
214
232
  /**
215
233
  * Delete a file inside an existing bucket
216
- * @param {DeleteObjectParams} params
234
+ * @param params - the object to delete
235
+ * @param params.bucket - the bucket, default to the one predefined
236
+ * @param params.key - the object key
217
237
  */
218
238
  async deleteObject({ bucket, key }) {
219
239
  await this.getStorageBucket(bucket).file(key).delete();
220
- this._webda.log("DEBUG", `gs://${bucket}/${key} deleted`);
240
+ this.log("DEBUG", `gs://${bucket}/${key} deleted`);
221
241
  }
222
242
  /**
223
243
  * Move a file from one bucket to an other
224
- * @param {StorageObject} source
225
- * @param {StorageObject} destination
244
+ * @param source - the object to move
245
+ * @param destination - the new location
226
246
  */
227
247
  async moveObject(source, destination) {
228
248
  const newFile = this.getStorageBucket(destination.bucket).file(destination.key);
229
- this._webda.log("DEBUG", `moveObject gs://${source.bucket}/${source.key} => gs://${destination.bucket}/${destination.key}`);
249
+ this.log("DEBUG", `moveObject gs://${source.bucket}/${source.key} => gs://${destination.bucket}/${destination.key}`);
230
250
  await this.getStorageBucket(source.bucket).file(source.key).move(newFile);
231
251
  }
232
252
  /**
233
- * @inheritdoc
253
+ * Get a signed url for the client to upload the binary directly to GCS
254
+ * @param object - the object to attach the binary to
255
+ * @param property - the object property
256
+ * @param info - the binary information (hash, challenge), read from the context if not provided
257
+ * @param context - the operation context
258
+ * @returns the upload url, undefined if the binary is already uploaded
234
259
  */
235
- async putRedirectUrl(ctx) {
236
- let body = await ctx.getRequestBody();
237
- const { uuid, store, property } = ctx.getParameters();
238
- let targetStore = this._verifyMapAndStore(ctx);
239
- let object = await targetStore.get(uuid);
240
- let base64String = Buffer.from(body.hash, "hex").toString("base64");
241
- let params = {
260
+ async putRedirectUrl(object, property, info, context) {
261
+ const body = info ?? (await context.getInput());
262
+ this.checkMap(object, property);
263
+ const uuid = object.getUUID();
264
+ const base64String = Buffer.from(body.hash, "hex").toString("base64");
265
+ const params = {
242
266
  bucket: this.parameters.bucket,
243
267
  key: this._getKey(body.hash, "data"),
244
268
  action: "write",
@@ -251,19 +275,19 @@ export default class Storage extends CloudBinary {
251
275
  // List bucket to check if the file already exist
252
276
  let challenge;
253
277
  try {
254
- let res = await this.getStorageBucket().file(params.key).getMetadata();
278
+ const res = await this.getStorageBucket().file(params.key).getMetadata();
255
279
  challenge = res[0].metadata.challenge;
256
280
  }
257
- catch (err) {
258
- // Ignore error
281
+ catch {
282
+ // Ignore error: the data does not exist yet
259
283
  }
260
284
  await this.uploadSuccess(object, property, body);
261
- await this.putMarker(body.hash, `${property}_${uuid}`, store);
285
+ await this.putMarker(body.hash, `${property}_${uuid}`, useModelId(object.constructor));
262
286
  // If the challenge is the same, no need to upload
263
287
  if (challenge && challenge === body.challenge) {
264
288
  return;
265
289
  }
266
- let url = await this.getSignedUrl(params);
290
+ const url = await this.getSignedUrl(params);
267
291
  // Re-upload, we should probably queue for recheck
268
292
  return {
269
293
  url,
@@ -278,8 +302,12 @@ export default class Storage extends CloudBinary {
278
302
  }
279
303
  /**
280
304
  * Retrieve one signed URL to download the file in parameter
281
- * @param {SignedUrlParams} params
282
- * @returns {string} URL in order to download the file
305
+ * @param params.bucket - the bucket, default to the one predefined
306
+ * @param params.key - the object key
307
+ * @param params.expires - expiration in seconds
308
+ * @param params.action - the action allowed by the url
309
+ * @param params - the object and signature options
310
+ * @returns URL in order to download the file
283
311
  */
284
312
  async getSignedUrl({ bucket, key, expires = 3600, action = "read", ...params }) {
285
313
  const options = {
@@ -289,29 +317,33 @@ export default class Storage extends CloudBinary {
289
317
  expires: Date.now() + expires * 1000
290
318
  };
291
319
  const [url] = await this.getStorageBucket(bucket).file(key).getSignedUrl(options);
292
- this._webda.log("TRACE", `The signed url for ${bucket}/${key} is ${url}.`);
320
+ this.log("TRACE", `The signed url for ${bucket}/${key} is ${url}.`);
293
321
  return url;
294
322
  }
295
323
  /**
296
324
  * Retrieve mandatory headers if needed by the cloud provider (ie. Azure)
297
325
  * Returns empty object if no headers are mandatory
298
- * @returns {[key:string]: string} mandatory headers
326
+ * @returns mandatory headers
299
327
  */
300
328
  getSignedUrlHeaders() {
301
329
  return {};
302
330
  }
303
331
  /**
304
332
  * Retrieve public URL of this object
305
- * @param {StorageModel} store
306
- * @returns {string} Public URL in order to download the file
333
+ * @param params - the object
334
+ * @param params.bucket - the bucket, default to the one predefined
335
+ * @param params.key - the object key
336
+ * @returns Public URL in order to download the file
307
337
  */
308
338
  async getPublicUrl({ bucket, key }) {
309
339
  return this.getStorageBucket(bucket).file(key).publicUrl();
310
340
  }
311
341
  /**
312
342
  * Fetch an object's metadata
313
- * @param {StorageModel} store
314
- * @returns {any} Metadata
343
+ * @param params - the object
344
+ * @param params.bucket - the bucket, default to the one predefined
345
+ * @param params.key - the object key
346
+ * @returns size and content type
315
347
  */
316
348
  async getMeta({ bucket, key }) {
317
349
  const [metadata] = await this.getStorageBucket(bucket).file(key).getMetadata();
@@ -322,9 +354,10 @@ export default class Storage extends CloudBinary {
322
354
  }
323
355
  /**
324
356
  * Get a bucket size with a prefix
325
- * @param bucket
326
- * @param prefix on the bucket
327
- * @param regex to filter files
357
+ * @param bucket - the bucket, default to the one predefined
358
+ * @param prefix - on the bucket
359
+ * @param regex - to filter files
360
+ * @returns the total size and count of files
328
361
  */
329
362
  async getBucketSize(bucket, prefix, regex) {
330
363
  let pageToken;
@@ -339,11 +372,13 @@ export default class Storage extends CloudBinary {
339
372
  size += Number.parseInt(metadata.size);
340
373
  count++;
341
374
  }
342
- catch (err) { }
375
+ catch {
376
+ // Ignore files removed while computing
377
+ }
343
378
  };
344
379
  };
345
380
  do {
346
- let [files, page, _] = await this.storage.bucket(bucket).getFiles({ maxResults: 1000, pageToken, prefix });
381
+ const [files, page] = await this.storage.bucket(bucket).getFiles({ maxResults: 1000, pageToken, prefix });
347
382
  files.filter(f => (regex ? f.name.match(regex) : true)).forEach(f => throttler.queue(dwl(f)));
348
383
  await throttler.wait();
349
384
  pageToken = page?.pageToken;
@@ -354,17 +389,29 @@ export default class Storage extends CloudBinary {
354
389
  };
355
390
  }
356
391
  /**
357
- * @inheritdoc
392
+ * Add a usage marker for a binary
393
+ * @param hash - the binary hash
394
+ * @param uuid - the marker name: `${property}_${uuid}`
395
+ * @param model - the model identifier of the object
358
396
  */
359
- async putMarker(hash, uuid, storeName) {
397
+ async putMarker(hash, uuid, model) {
360
398
  await this.getStorageBucket()
361
399
  .file(this._getKey(hash, uuid))
362
400
  .save("", {
363
401
  metadata: {
364
- webdaStore: storeName
402
+ metadata: {
403
+ webdaModel: model
404
+ }
365
405
  }
366
406
  });
367
407
  }
408
+ /**
409
+ * Delete every object under the prefix, used by tests
410
+ */
411
+ async __clean() {
412
+ const [files] = await this.getStorageBucket().getFiles({ prefix: this.parameters.prefix });
413
+ await Promise.all(files.map(f => f.delete()));
414
+ }
368
415
  }
369
416
  export { Storage };
370
- //# sourceMappingURL=storage.js.map
417
+ //# sourceMappingURL=storage.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../../src/services/storage.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,8 @@
1
1
  {
2
2
  "name": "@webda/gcp",
3
- "version": "4.0.0-beta.1",
3
+ "version": "4.0.0-beta.3",
4
4
  "description": "Webda GCP Services implementation",
5
5
  "main": "lib/index.js",
6
- "scripts": {
7
- "build": "webda build",
8
- "build:watch": "webda build --watch",
9
- "pretest": "npm run build",
10
- "lint": "prettier --check src/**/*",
11
- "lint:fix": "prettier --write src/**/*",
12
- "test": "c8 mocha",
13
- "test:debug": "mocha src/**/*.spec.ts"
14
- },
15
6
  "repository": {
16
7
  "type": "git",
17
8
  "url": "git+https://github.com/loopingz/webda.io.git"
@@ -26,51 +17,54 @@
26
17
  "package.json"
27
18
  ],
28
19
  "author": "abalam666",
29
- "license": "MIT",
20
+ "license": "LGPL-3.0-only",
30
21
  "bugs": {
31
22
  "url": "https://github.com/loopingz/webda.io/issues"
32
23
  },
33
24
  "homepage": "https://github.com/loopingz/webda.io#readme",
34
25
  "dependencies": {
35
- "@google-cloud/firestore": "^7.0.0",
36
- "@google-cloud/kms": "^4.0.1",
37
- "@google-cloud/pubsub": "^4.0.1",
38
- "@google-cloud/storage": "~7.12.0",
39
- "@webda/core": "^4.0.0-beta.1",
40
- "mime-types": "^2.1.35"
41
- },
42
- "c8": {
43
- "report-dir": "./reports",
44
- "reporter": [
45
- "html",
46
- "lcov",
47
- "json",
48
- "text"
49
- ],
50
- "exclude": [
51
- "**/*.spec.ts",
52
- "test/**/*"
53
- ]
26
+ "@google-cloud/firestore": "^8.3.0",
27
+ "@google-cloud/kms": "^5.4.0",
28
+ "@google-cloud/pubsub": "^5.3.0",
29
+ "@google-cloud/storage": "~7.19.0",
30
+ "mime-types": "^3.0.2",
31
+ "@webda/ql": "4.0.0-beta.3",
32
+ "@webda/utils": "4.0.0-beta.3",
33
+ "@webda/core": "4.0.0-beta.3"
54
34
  },
55
35
  "publishConfig": {
56
36
  "access": "public"
57
37
  },
58
38
  "devDependencies": {
59
- "@testdeck/mocha": "^0.3.2",
60
- "@types/node": "18.11.13",
61
- "@webda/async": "^4.0.0-beta.1",
62
- "@webda/shell": "^4.0.0-beta.1",
63
- "sinon": "^18.0.0"
39
+ "@types/node": "25.5.0",
40
+ "@vitest/coverage-v8": "^4.1.2",
41
+ "jscodeshift": "^17.3.0",
42
+ "skott": "^0.35.8",
43
+ "typescript": "7.1.0-dev.20260929.1",
44
+ "vite": "^6.0.0",
45
+ "vitest": "^4.1.2",
46
+ "@webda/compiler": "^4.0.0-beta.3",
47
+ "@webda/test": "4.0.0-beta.3"
64
48
  },
65
49
  "type": "module",
66
50
  "engines": {
67
- "node": ">=18.0.0"
51
+ "node": ">=22.0.0"
68
52
  },
69
53
  "nx": {
70
54
  "implicitDependencies": [
71
- "@webda/core",
72
- "@webda/shell"
55
+ "@webda/core"
73
56
  ]
74
57
  },
75
- "gitHead": "9f0c12d5e43b3484794b2a49c5701b8b9675c4a8"
76
- }
58
+ "scripts": {
59
+ "build": "webdac build",
60
+ "build:watch": "webdac build --watch",
61
+ "pretest": "npm run build",
62
+ "codemod": "jscodeshift --parser=ts --extensions=tsx,ts -t ../codemod/current.mjs src",
63
+ "lint": "eslint",
64
+ "lint:fix": "eslint --fix",
65
+ "test": "vitest run",
66
+ "format": "prettier --check src/**/*",
67
+ "format:fix": "prettier --write src/**/*",
68
+ "deps:graph": "skott --showCircularDependencies --no-trackTypeOnlyDependencies --displayMode=raw -e .ts"
69
+ }
70
+ }