quetch 0.1.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.
Files changed (125) hide show
  1. package/README.md +29 -0
  2. package/dist/errors/QueryError.d.ts +5 -0
  3. package/dist/errors/QueryError.js +23 -0
  4. package/dist/errors/QueryError.js.map +1 -0
  5. package/dist/errors/RequestError.d.ts +11 -0
  6. package/dist/errors/RequestError.js +33 -0
  7. package/dist/errors/RequestError.js.map +1 -0
  8. package/dist/errors.d.ts +1 -0
  9. package/dist/errors.js +3 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/main.d.ts +3 -0
  12. package/dist/main.js +3 -0
  13. package/dist/main.js.map +1 -0
  14. package/dist/middlewares/aggregate.d.ts +19 -0
  15. package/dist/middlewares/aggregate.js +86 -0
  16. package/dist/middlewares/aggregate.js.map +1 -0
  17. package/dist/middlewares/branch.d.ts +18 -0
  18. package/dist/middlewares/branch.js +21 -0
  19. package/dist/middlewares/branch.js.map +1 -0
  20. package/dist/middlewares/cache.d.ts +37 -0
  21. package/dist/middlewares/cache.js +40 -0
  22. package/dist/middlewares/cache.js.map +1 -0
  23. package/dist/middlewares/combine.d.ts +318 -0
  24. package/dist/middlewares/combine.js +20 -0
  25. package/dist/middlewares/combine.js.map +1 -0
  26. package/dist/middlewares/concurrent.d.ts +2 -0
  27. package/dist/middlewares/concurrent.js +20 -0
  28. package/dist/middlewares/concurrent.js.map +1 -0
  29. package/dist/middlewares/fetch.d.ts +2 -0
  30. package/dist/middlewares/fetch.js +20 -0
  31. package/dist/middlewares/fetch.js.map +1 -0
  32. package/dist/middlewares/fetchExternal.d.ts +8 -0
  33. package/dist/middlewares/fetchExternal.js +29 -0
  34. package/dist/middlewares/fetchExternal.js.map +1 -0
  35. package/dist/middlewares/fetchLocal.d.ts +9 -0
  36. package/dist/middlewares/fetchLocal.js +10 -0
  37. package/dist/middlewares/fetchLocal.js.map +1 -0
  38. package/dist/middlewares/identity.d.ts +4 -0
  39. package/dist/middlewares/identity.js +8 -0
  40. package/dist/middlewares/identity.js.map +1 -0
  41. package/dist/middlewares/log.d.ts +8 -0
  42. package/dist/middlewares/log.js +30 -0
  43. package/dist/middlewares/log.js.map +1 -0
  44. package/dist/middlewares/logQuery.d.ts +2 -0
  45. package/dist/middlewares/logQuery.js +25 -0
  46. package/dist/middlewares/logQuery.js.map +1 -0
  47. package/dist/middlewares/retry.d.ts +14 -0
  48. package/dist/middlewares/retry.js +38 -0
  49. package/dist/middlewares/retry.js.map +1 -0
  50. package/dist/middlewares.d.ts +9 -0
  51. package/dist/middlewares.js +11 -0
  52. package/dist/middlewares.js.map +1 -0
  53. package/dist/tools/add.d.ts +8 -0
  54. package/dist/tools/add.js +11 -0
  55. package/dist/tools/add.js.map +1 -0
  56. package/dist/tools/add.test.d.ts +1 -0
  57. package/dist/tools/add.test.js +6 -0
  58. package/dist/tools/add.test.js.map +1 -0
  59. package/dist/tools/defineCheckQuery.d.ts +17 -0
  60. package/dist/tools/defineCheckQuery.js +7 -0
  61. package/dist/tools/defineCheckQuery.js.map +1 -0
  62. package/dist/tools/defineCustomFetch.d.ts +19 -0
  63. package/dist/tools/defineCustomFetch.js +8 -0
  64. package/dist/tools/defineCustomFetch.js.map +1 -0
  65. package/dist/tools/filterFromContext.d.ts +2 -0
  66. package/dist/tools/filterFromContext.js +12 -0
  67. package/dist/tools/filterFromContext.js.map +1 -0
  68. package/dist/tools/filterItem.d.ts +9 -0
  69. package/dist/tools/filterItem.js +101 -0
  70. package/dist/tools/filterItem.js.map +1 -0
  71. package/dist/tools/filterItem.test.d.ts +1 -0
  72. package/dist/tools/filterItem.test.js +86 -0
  73. package/dist/tools/filterItem.test.js.map +1 -0
  74. package/dist/tools/impasse.d.ts +2 -0
  75. package/dist/tools/impasse.js +2 -0
  76. package/dist/tools/impasse.js.map +1 -0
  77. package/dist/tools/normalizeOrder.d.ts +5 -0
  78. package/dist/tools/normalizeOrder.js +10 -0
  79. package/dist/tools/normalizeOrder.js.map +1 -0
  80. package/dist/tools/queryItemList.d.ts +4 -0
  81. package/dist/tools/queryItemList.js +77 -0
  82. package/dist/tools/queryItemList.js.map +1 -0
  83. package/dist/tools/queryItemList.test.d.ts +1 -0
  84. package/dist/tools/queryItemList.test.js +141 -0
  85. package/dist/tools/queryItemList.test.js.map +1 -0
  86. package/dist/tools/sortItemList.d.ts +9 -0
  87. package/dist/tools/sortItemList.js +28 -0
  88. package/dist/tools/sortItemList.js.map +1 -0
  89. package/dist/tools/sortItemList.test.d.ts +1 -0
  90. package/dist/tools/sortItemList.test.js +47 -0
  91. package/dist/tools/sortItemList.test.js.map +1 -0
  92. package/dist/tools.d.ts +8 -0
  93. package/dist/tools.js +10 -0
  94. package/dist/tools.js.map +1 -0
  95. package/dist/types.d.ts +396 -0
  96. package/dist/types.js +2 -0
  97. package/dist/types.js.map +1 -0
  98. package/doc/README.md +1472 -0
  99. package/lib/errors/RequestError.ts +16 -0
  100. package/lib/errors.ts +2 -0
  101. package/lib/main.ts +4 -0
  102. package/lib/middlewares/aggregate.ts +113 -0
  103. package/lib/middlewares/branch.ts +27 -0
  104. package/lib/middlewares/cache.ts +89 -0
  105. package/lib/middlewares/combine.ts +959 -0
  106. package/lib/middlewares/fetchExternal.ts +38 -0
  107. package/lib/middlewares/fetchLocal.ts +14 -0
  108. package/lib/middlewares/identity.ts +20 -0
  109. package/lib/middlewares/log.ts +31 -0
  110. package/lib/middlewares/retry.ts +45 -0
  111. package/lib/middlewares.ts +10 -0
  112. package/lib/tools/defineCheckQuery.ts +24 -0
  113. package/lib/tools/defineCustomFetch.ts +70 -0
  114. package/lib/tools/filterFromContext.ts +16 -0
  115. package/lib/tools/filterItem.test.ts +203 -0
  116. package/lib/tools/filterItem.ts +113 -0
  117. package/lib/tools/impasse.ts +3 -0
  118. package/lib/tools/normalizeOrder.ts +13 -0
  119. package/lib/tools/queryItemList.test.ts +169 -0
  120. package/lib/tools/queryItemList.ts +108 -0
  121. package/lib/tools/sortItemList.test.ts +63 -0
  122. package/lib/tools/sortItemList.ts +33 -0
  123. package/lib/tools.ts +9 -0
  124. package/lib/types.ts +554 -0
  125. package/package.json +72 -0
package/lib/types.ts ADDED
@@ -0,0 +1,554 @@
1
+ export type Any =
2
+ | boolean
3
+ | string
4
+ | number
5
+ | object
6
+ | symbol
7
+ | null
8
+ | undefined
9
+ | Array<any>
10
+ | ((...args: any[]) => any);
11
+
12
+ // TODO: Move to other library
13
+ export type Store<T = any> = {
14
+ has(key: string): Promise<boolean>;
15
+ get(key: string): Promise<T>;
16
+ set(key: string, value: T): Promise<void>;
17
+ delete(key: string): Promise<void>;
18
+ };
19
+
20
+ /**
21
+ * Handles an `input` query and returns an `output` promise, eventually using the `next` handler.
22
+ */
23
+ export type Handler<I, O, NI, No> = (
24
+ input: I,
25
+ next: NextHandler<NI, No>,
26
+ ) => Promise<O>;
27
+
28
+ /**
29
+ * Handles an `input` query and returns an `output` promise.
30
+ */
31
+ export type NextHandler<I, R> = (input: I) => Promise<R>;
32
+
33
+ /**
34
+ * Returns the inferred item type of an array, or an alternative type if it is something else (e.g., `undefined`).
35
+ */
36
+ type ArrayItem<T, S> = T extends Array<infer I>
37
+ ? I
38
+ : T extends ReadonlyArray<infer I>
39
+ ? I
40
+ : S;
41
+
42
+ type Get<T extends object, K extends string, D> = T extends { [key in K]: any }
43
+ ? T[K]
44
+ : D;
45
+
46
+ /**
47
+ * Entity type for a given query.
48
+ */
49
+ export type EntityItem<
50
+ E extends object,
51
+ C extends CustomFieldMap<E>,
52
+ Q extends Query<E, C>,
53
+ > = Q extends {
54
+ customFields: CustomFieldMap<E>;
55
+ }
56
+ ? {
57
+ readonly [K in ArrayItem<
58
+ Get<Q, "fields", undefined>,
59
+ keyof E | keyof Q["customFields"]
60
+ >]: K extends keyof E
61
+ ? E[K]
62
+ : K extends keyof Q["customFields"]
63
+ ? Q["customFields"][K] extends FieldFunctionCustom<E>
64
+ ? ReturnType<Q["customFields"][K]["value"]>
65
+ : Q["customFields"][K]["operator"] extends keyof FieldFunctionReturn
66
+ ? FieldFunctionReturn[Q["customFields"][K]["operator"]]
67
+ : never
68
+ : never;
69
+ }
70
+ : {
71
+ readonly [K in ArrayItem<
72
+ Get<Q, "fields", undefined>,
73
+ keyof E
74
+ >]: K extends keyof E ? E[K] : never;
75
+ };
76
+
77
+ /**
78
+ * Query that fetches or mutates an entity.
79
+ */
80
+ export type Query<T extends object, C extends CustomFieldMap<T>> =
81
+ | QueryGet<T, C>
82
+ | QueryGetMultiple<T, C>
83
+ | QueryCreate<T>
84
+ | QueryCreateMultiple<T>
85
+ | QueryUpdate<T, C>
86
+ | QueryUpdateMultiple<T, C>
87
+ | QueryDelete<T>
88
+ | QueryDeleteMultiple<T>
89
+ // TODO: Handle custom fields
90
+ | QueryAggregate<T>;
91
+
92
+ export type AnyQuery = Query<any, any>;
93
+
94
+ export type AnyQueryExternal = Omit<Query<any, any>, "type"> & { type: string };
95
+
96
+ export type AnyQueryLocal = Omit<Query<any, any>, "type"> & { type: object[] };
97
+
98
+ export type Context<T extends object> = {
99
+ [K in keyof T]?: T[K];
100
+ };
101
+
102
+ export type QueryBase<T extends object> = {
103
+ type: string | T[];
104
+ /**
105
+ * Common item properties to use for identifying the item.
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * { context: { id: "000001" } }
110
+ * { context: { organisation: "World Company" } }
111
+ * ```
112
+ */
113
+ context?: Context<T>;
114
+ /**
115
+ * Abort signal to abort the request.
116
+ */
117
+ signal?: AbortSignal;
118
+ };
119
+
120
+ /**
121
+ * Available query methods.
122
+ */
123
+ export type QueryMethod = Exclude<Query<never, never>["method"], undefined>;
124
+
125
+ /**
126
+ * Injects the custom fields into the entity type.
127
+ */
128
+ type InjectCustomField<T extends object, C extends CustomFieldMap<T>> = {
129
+ readonly [K in keyof T | keyof C]: K extends keyof T
130
+ ? T[K]
131
+ : K extends keyof C
132
+ ? C[K] extends FieldFunctionCustom<T>
133
+ ? ReturnType<C[K]["value"]>
134
+ : C[K]["operator"] extends keyof FieldFunctionReturn
135
+ ? FieldFunctionReturn[C[K]["operator"]]
136
+ : never
137
+ : never;
138
+ };
139
+
140
+ /**
141
+ * Query for getting a single item.
142
+ */
143
+ export type QueryGet<
144
+ T extends object,
145
+ C extends CustomFieldMap<T>,
146
+ > = QueryBase<T> & {
147
+ method?: "get";
148
+ multiple?: false;
149
+ offset?: never;
150
+ orderBy?: never;
151
+ groupBy?: never;
152
+ } & (
153
+ | {
154
+ /**
155
+ * Item fields to pick. If omitted, all fields are picked.
156
+ */
157
+ fields?: readonly (keyof InjectCustomField<T, C>)[];
158
+ /**
159
+ * Filter for finding the item, if it cannot be found based on the `context`.
160
+ */
161
+ filter?: Filter<InjectCustomField<T, C>>;
162
+ /**
163
+ * Custom fields to add to each item, which can be used in the `filter`.
164
+ */
165
+ customFields: C;
166
+ }
167
+ | {
168
+ /**
169
+ * Item fields to pick. If omitted, all fields are picked.
170
+ */
171
+ fields?: readonly (keyof T)[];
172
+ /**
173
+ * Filter for finding the item, if it cannot be found based on the `context`.
174
+ */
175
+ filter?: Filter<T>;
176
+ customFields?: never;
177
+ }
178
+ );
179
+
180
+ /**
181
+ * Query for getting a list of items.
182
+ */
183
+ export type QueryGetMultiple<
184
+ T extends object,
185
+ C extends CustomFieldMap<T>,
186
+ > = QueryBase<T> & {
187
+ method?: "get";
188
+ multiple: true;
189
+ /**
190
+ * Offset of the first matching item.
191
+ */
192
+ offset?: number;
193
+ /**
194
+ * Upper bound of the number of items to return.
195
+ */
196
+ limit?: number;
197
+ } & (
198
+ | {
199
+ /**
200
+ * Item fields to pick. If omitted, all fields are picked.
201
+ */
202
+ fields?: readonly (keyof InjectCustomField<T, C>)[];
203
+ /**
204
+ * Filter that picks the items.
205
+ */
206
+ filter?: Filter<InjectCustomField<T, C>>;
207
+ /**
208
+ * Custom fields to add to each item, which can be used in the `filter` and `groupBy`.
209
+ */
210
+ customFields: C;
211
+ /**
212
+ * Order by which the items should be sorted.
213
+ */
214
+ orderBy?: Order<InjectCustomField<T, C>>[];
215
+ /**
216
+ * Groups items by specified fields.
217
+ */
218
+ groupBy?: Group<InjectCustomField<T, C>>[];
219
+ }
220
+ | {
221
+ /**
222
+ * Item fields to pick. If omitted, all fields are picked.
223
+ */
224
+ fields?: readonly (keyof T)[];
225
+ /**
226
+ * Filter that picks the items.
227
+ */
228
+ filter?: Filter<T>;
229
+ customFields?: never;
230
+ /**
231
+ * Order by which the items should be sorted.
232
+ */
233
+ orderBy?: Order<T>[];
234
+ /**
235
+ * Groups items by specified fields.
236
+ */
237
+ groupBy?: Group<T>[];
238
+ }
239
+ );
240
+
241
+ /**
242
+ * Query for creating an item.
243
+ */
244
+ export type QueryCreate<T extends object> = QueryBase<T> & {
245
+ method: "create";
246
+ value: Partial<T>;
247
+ };
248
+
249
+ /**
250
+ * Query for creating multiple items.
251
+ */
252
+ export type QueryCreateMultiple<T extends object> = QueryBase<T> & {
253
+ method: "create";
254
+ multiple: true;
255
+ value: Partial<T>[];
256
+ };
257
+
258
+ /**
259
+ * Query for updating an item.
260
+ */
261
+ export type QueryUpdate<
262
+ T extends object,
263
+ C extends CustomFieldMap<T>,
264
+ > = QueryBase<T> & {
265
+ method: "update";
266
+ value: Partial<T>;
267
+ /**
268
+ * Custom fields to add to each item, which can be used in the `filter`.
269
+ */
270
+ customFields?: C;
271
+ /**
272
+ * Filter for finding the item, if it cannot be found based on the `context`.
273
+ */
274
+ filter?: Filter<InjectCustomField<T, C>>;
275
+ offset?: never;
276
+ orderBy: never;
277
+ groupBy?: never;
278
+ };
279
+
280
+ /**
281
+ * Query for updating multiple items.
282
+ */
283
+ export type QueryUpdateMultiple<
284
+ T extends object,
285
+ C extends CustomFieldMap<T>,
286
+ > = QueryBase<T> & {
287
+ method: "update";
288
+ multiple: true;
289
+ value: Partial<T>[];
290
+ /**
291
+ * Custom fields to add to each item, which can be used in the `filter`.
292
+ */
293
+ customFields?: C;
294
+ filter?: Filter<T>;
295
+ /**
296
+ * Order by which the items should be sorted.
297
+ */
298
+ orderBy?: Order<InjectCustomField<T, C>>[];
299
+ /**
300
+ * Offset of the first matching item to update.
301
+ */
302
+ offset?: number;
303
+ /**
304
+ * Sets the upper bound of the number of items to update.
305
+ */
306
+ limit?: number;
307
+ };
308
+
309
+ /**
310
+ * Query for deleting an item.
311
+ */
312
+ export type QueryDelete<T extends object> = QueryBase<T> & {
313
+ method: "delete";
314
+ filter?: Filter<T>;
315
+ };
316
+
317
+ /**
318
+ * Query for deleting multiple items.
319
+ */
320
+ export type QueryDeleteMultiple<T extends object> = QueryBase<T> & {
321
+ method: "delete";
322
+ multiple: true;
323
+ filter?: Filter<T>;
324
+ };
325
+
326
+ /**
327
+ * Query for computing an aggregated value.
328
+ */
329
+ export type QueryAggregate<T extends object> = QueryBase<T> & {
330
+ method: "aggregate";
331
+ aggregator: AggregateFunction<T>;
332
+ filter?: Filter<T>;
333
+ };
334
+
335
+ /**
336
+ * Order item.
337
+ */
338
+ export type Order<T extends object> =
339
+ | keyof T
340
+ | {
341
+ field: keyof T;
342
+ descending?: boolean;
343
+ };
344
+
345
+ type FilterKeys<T extends object, P> = {
346
+ [K in keyof T]-?: T[K] extends P ? K : never;
347
+ }[keyof T];
348
+
349
+ export type FieldFunction<T extends object> =
350
+ | FieldFunctionCustom<T>
351
+ | FieldFunctionFormatDate<T>;
352
+
353
+ /**
354
+ * Applies a custom field transform function.
355
+ */
356
+ export type FieldFunctionCustom<T extends object> = {
357
+ operator: "custom";
358
+ value: (item: T) => any;
359
+ };
360
+
361
+ /**
362
+ * Formats the date found in a given field, which can be an ISO string date or a timestamp.
363
+ */
364
+ export type FieldFunctionFormatDate<T extends object> = {
365
+ operator: "formatDate";
366
+ field: FilterKeys<T, string | number>;
367
+ format: string;
368
+ };
369
+
370
+ /**
371
+ * Possible field function operators.
372
+ */
373
+ export type FieldFunctionOperator = FieldFunction<never>["operator"];
374
+
375
+ /**
376
+ * Return types of custom field functions.
377
+ */
378
+ export type FieldFunctionReturn = {
379
+ formatDate: string;
380
+ };
381
+
382
+ export type CustomFieldMap<T extends object> = Record<string, FieldFunction<T>>;
383
+
384
+ /**
385
+ * Aggregation function.
386
+ */
387
+ export type AggregateFunction<T extends object> =
388
+ | "length"
389
+ | { operator: "length" }
390
+ | {
391
+ operator:
392
+ | "median"
393
+ | "standardDeviation"
394
+ | "mean"
395
+ | "minimum"
396
+ | "maximum"
397
+ | "variance"
398
+ | "mode";
399
+ field: keyof T;
400
+ };
401
+
402
+ export type AggregateFunctionOperator = Exclude<
403
+ AggregateFunction<{}>,
404
+ string
405
+ >["operator"];
406
+
407
+ type CustomFieldAggregateMap<T extends object> = Record<
408
+ string,
409
+ AggregateFunction<T>
410
+ >;
411
+
412
+ type Group<T extends object> =
413
+ | keyof T
414
+ | {
415
+ field: keyof T;
416
+ customFields?: CustomFieldAggregateMap<T>;
417
+ };
418
+
419
+ /**
420
+ * Describes a predicate for filtering items.
421
+ */
422
+ export type Filter<T extends object> =
423
+ | FilterList<T>
424
+ | FilterField<T>
425
+ | FilterBoolean<T>
426
+ | FilterString<T>
427
+ | FilterStringMatch<T>
428
+ | FilterStringInclude<T>
429
+ | FilterNumber<T>
430
+ | FilterArray<T>;
431
+
432
+ export type FilterOperator = Filter<never>["operator"];
433
+
434
+ /**
435
+ * Joins a list of filters with a specific boolean operator.
436
+ */
437
+ export type FilterList<T extends object> =
438
+ | {
439
+ /**
440
+ * Boolean operator to use for joining the filters.
441
+ */
442
+ operator: "all";
443
+ /**
444
+ * Filters to join.
445
+ */
446
+ value: Filter<T>[];
447
+ }
448
+ | {
449
+ /**
450
+ * Boolean operator to use for joining the filters.
451
+ */
452
+ operator: "any" | "none";
453
+ /**
454
+ * Filters to join.
455
+ */
456
+ value?: Filter<T>[];
457
+ };
458
+
459
+ /**
460
+ * Checks if a given field exists.
461
+ */
462
+ export type FilterField<T extends object> = {
463
+ operator: "exist";
464
+ field: keyof T;
465
+ };
466
+
467
+ /**
468
+ * Checks if a given boolean field is `true` or `false`.
469
+ */
470
+ export type FilterBoolean<T extends object> = {
471
+ operator: "equal" | "notEqual";
472
+ field: FilterKeys<T, boolean>;
473
+ value: boolean;
474
+ };
475
+
476
+ /**
477
+ * Checks if a given string field matches a given string value according to a given operator.
478
+ */
479
+ export type FilterString<T extends object> = {
480
+ operator:
481
+ | "equal"
482
+ | "notEqual"
483
+ | "startWith"
484
+ | "endWith"
485
+ | "include"
486
+ | "greaterThan"
487
+ | "greaterThanOrEqual"
488
+ | "lowerThan"
489
+ | "lowerThanOrEqual";
490
+ field: FilterKeys<T, string>;
491
+ value: string;
492
+ };
493
+
494
+ /**
495
+ * Checks if a given string field matches a given regular expression.
496
+ */
497
+ export type FilterStringMatch<T extends object> = {
498
+ operator: "match";
499
+ field: FilterKeys<T, string>;
500
+ /**
501
+ * Raw regular expression string.
502
+ */
503
+ value: string;
504
+ /**
505
+ * Regular expression options.
506
+ */
507
+ options?: {
508
+ /**
509
+ * When matching, casing differences are ignored.
510
+ */
511
+ ignoreCase?: boolean;
512
+ /**
513
+ * Allows . to match newlines.
514
+ */
515
+ dotAll?: boolean;
516
+ };
517
+ /**
518
+ * Compiled regular expression generated by the `testFilter` function.
519
+ */
520
+ regularExpression?: RegExp;
521
+ };
522
+
523
+ /**
524
+ * Checks if a given string field has any of the provided values.
525
+ */
526
+ export type FilterStringInclude<T extends object> = {
527
+ operator: "intersect";
528
+ field: FilterKeys<T, string>;
529
+ value: string[];
530
+ };
531
+
532
+ /**
533
+ * Checks if a given number field matches a given number value according to a given operator.
534
+ */
535
+ export type FilterNumber<T extends object> = {
536
+ operator:
537
+ | "equal"
538
+ | "notEqual"
539
+ | "greaterThan"
540
+ | "greaterThanOrEqual"
541
+ | "lowerThan"
542
+ | "lowerThanOrEqual";
543
+ field: FilterKeys<T, number>;
544
+ value: number;
545
+ };
546
+
547
+ /**
548
+ * Checks if a given array field matches a given array value according to a given operator.
549
+ */
550
+ export type FilterArray<T extends object, P = Any> = {
551
+ operator: "equal" | "include" | "intersect";
552
+ field: FilterKeys<T, P[]>;
553
+ value: P[];
554
+ };
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "quetch",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/main.js",
6
+ "exports": {
7
+ "types": "./dist/main.d.ts",
8
+ "import": "./dist/main.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "lib",
13
+ "!lib/old",
14
+ "!lib/**/*.test.ts?",
15
+ "!src",
16
+ "!src/old",
17
+ "README.md",
18
+ "doc/",
19
+ "!doc/.nojekyll"
20
+ ],
21
+ "scripts": {
22
+ "dev": "vite",
23
+ "dev:test": "vitest --update",
24
+ "test": "npm run lint && npm run format && vitest run",
25
+ "build": "tsc --project tsconfig.package.json",
26
+ "build:doc": "typedoc --tsconfig tsconfig.package.json",
27
+ "build:demo": "vite build",
28
+ "prepare": "npm run build",
29
+ "start": "vite preview",
30
+ "format": "prettier --check './**/*.{css,scss,md,mdx,json,tsx,ts,jsx,js}'",
31
+ "format:fix": "prettier --write './**/*.{css,scss,md,mdx,json,tsx,ts,jsx,js}'",
32
+ "lint": "npm run lint:ts",
33
+ "lint:fix": "npm run lint:ts:fix",
34
+ "lint:ts": "eslint .",
35
+ "lint:ts:fix": "eslint --fix .",
36
+ "release:patch": "npm version patch && git push origin --follow-tags && npm publish",
37
+ "release:minor": "npm version minor && git push origin --follow-tags && npm publish",
38
+ "release:major": "npm version major && git push origin --follow-tags && npm publish",
39
+ "release:alpha": "npm version prerelease --preid=alpha && git push origin --follow-tags && npm publish --tag=next",
40
+ "release:beta": "npm version prerelease --preid=beta && git push origin --follow-tags && npm publish --tag=next"
41
+ },
42
+ "devDependencies": {
43
+ "@preact/preset-vite": "^2.5.0",
44
+ "@types/node": "^20.8.3",
45
+ "@typescript-eslint/parser": "^6.7.4",
46
+ "autoprefixer": "^10.4.16",
47
+ "cssnano": "^6.0.1",
48
+ "eslint": "^8.51.0",
49
+ "eslint-config-preact": "^1.3.0",
50
+ "eslint-config-prettier": "^9.0.0",
51
+ "eslint-plugin-import": "^2.28.1",
52
+ "eslint-plugin-inferno": "^7.32.2",
53
+ "eslint-plugin-tailwindcss": "^3.13.0",
54
+ "eslint-plugin-vitest": "^0.3.2",
55
+ "postcss": "^8.4.31",
56
+ "postcss-pseudo-classes": "^0.2.1",
57
+ "preact": "^10.18.1",
58
+ "prettier": "^3.0.3",
59
+ "prettier-plugin-tailwindcss": "^0.5.5",
60
+ "tailwindcss": "^3.3.3",
61
+ "typedoc": "^0.25.2",
62
+ "typedoc-plugin-markdown": "^3.16.0",
63
+ "typescript": "^5.2.2",
64
+ "vite": "^4.4.11",
65
+ "vite-plugin-module-list": "^1.5.0",
66
+ "vitest": "^0.34.6"
67
+ },
68
+ "dependencies": {
69
+ "@davidbonnet/get-global": "^2.0.0",
70
+ "futurise": "^1.0.0"
71
+ }
72
+ }