@augment-vir/common 30.0.0 → 30.0.2

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 (174) hide show
  1. package/README.md +11 -0
  2. package/dist/augments/array/array-map.d.ts +29 -1
  3. package/dist/augments/array/array-map.js +29 -1
  4. package/dist/augments/array/array-to-object.d.ts +27 -9
  5. package/dist/augments/array/array-to-object.js +96 -12
  6. package/dist/augments/array/awaited/awaited-filter.d.ts +29 -0
  7. package/dist/augments/array/awaited/awaited-filter.js +29 -0
  8. package/dist/augments/array/awaited/awaited-for-each.d.ts +28 -3
  9. package/dist/augments/array/awaited/awaited-for-each.js +28 -3
  10. package/dist/augments/array/awaited/awaited-map.d.ts +32 -0
  11. package/dist/augments/array/awaited/awaited-map.js +32 -0
  12. package/dist/augments/array/filter.d.ts +29 -0
  13. package/dist/augments/array/filter.js +61 -0
  14. package/dist/augments/array/remove-duplicates.d.ts +60 -1
  15. package/dist/augments/array/remove-duplicates.js +61 -2
  16. package/dist/augments/array/repeat-array.d.ts +22 -0
  17. package/dist/augments/array/repeat-array.js +22 -0
  18. package/dist/augments/array/shuffle-array.d.ts +8 -1
  19. package/dist/augments/array/shuffle-array.js +8 -1
  20. package/dist/augments/array/string-array.d.ts +8 -0
  21. package/dist/augments/array/string-array.js +8 -0
  22. package/dist/augments/enum/enum-value-check.d.ts +30 -0
  23. package/dist/augments/enum/enum-value-check.js +30 -0
  24. package/dist/augments/error/combine-errors.d.ts +24 -3
  25. package/dist/augments/error/combine-errors.js +26 -4
  26. package/dist/augments/function/call-asynchronously.d.ts +19 -0
  27. package/dist/augments/function/call-asynchronously.js +19 -0
  28. package/dist/augments/function/call-with-retries.d.ts +23 -3
  29. package/dist/augments/function/call-with-retries.js +23 -0
  30. package/dist/augments/function/debounce.d.ts +71 -4
  31. package/dist/augments/function/debounce.js +66 -4
  32. package/dist/augments/function/execution-duration.d.ts +17 -5
  33. package/dist/augments/function/execution-duration.js +16 -3
  34. package/dist/augments/function/if-truthy.d.ts +28 -0
  35. package/dist/augments/function/if-truthy.js +35 -0
  36. package/dist/augments/function/wrap-in-try.d.ts +12 -4
  37. package/dist/augments/function/wrap-in-try.js +64 -0
  38. package/dist/augments/json/append-json.d.ts +3 -3
  39. package/dist/augments/json/append-json.js +33 -0
  40. package/dist/augments/json/copy-through-json.d.ts +32 -1
  41. package/dist/augments/json/copy-through-json.js +32 -1
  42. package/dist/augments/json/json-compatible.d.ts +37 -9
  43. package/dist/augments/json/jsonify.d.ts +30 -1
  44. package/dist/augments/json/jsonify.js +31 -2
  45. package/dist/augments/log/log-colors.d.ts +41 -0
  46. package/dist/augments/log/log-colors.js +43 -2
  47. package/dist/augments/log/log-string.d.ts +21 -0
  48. package/dist/augments/log/log-string.js +9 -2
  49. package/dist/augments/log/log-writer.d.ts +22 -0
  50. package/dist/augments/log/log.d.ts +44 -1
  51. package/dist/augments/log/log.js +46 -3
  52. package/dist/augments/log/logger.d.ts +49 -0
  53. package/dist/augments/log/logger.js +21 -0
  54. package/dist/augments/number/clamp.d.ts +13 -2
  55. package/dist/augments/number/clamp.js +12 -1
  56. package/dist/augments/number/coords.d.ts +6 -2
  57. package/dist/augments/number/digit.d.ts +7 -0
  58. package/dist/augments/number/dimensions.d.ts +6 -2
  59. package/dist/augments/number/min-max.d.ts +9 -2
  60. package/dist/augments/number/min-max.js +4 -2
  61. package/dist/augments/number/number-conversion.d.ts +9 -3
  62. package/dist/augments/number/number-conversion.js +10 -4
  63. package/dist/augments/number/round.d.ts +19 -0
  64. package/dist/augments/number/round.js +19 -0
  65. package/dist/augments/number/scientific.d.ts +18 -1
  66. package/dist/augments/number/scientific.js +18 -1
  67. package/dist/augments/number/truncate-number.d.ts +24 -3
  68. package/dist/augments/number/truncate-number.js +28 -8
  69. package/dist/augments/number/wrap-number.d.ts +9 -3
  70. package/dist/augments/number/wrap-number.js +8 -2
  71. package/dist/augments/object/diff.d.ts +27 -5
  72. package/dist/augments/object/diff.js +20 -4
  73. package/dist/augments/object/empty.d.ts +7 -1
  74. package/dist/augments/object/get-or-set.d.ts +6 -27
  75. package/dist/augments/object/get-or-set.js +66 -4
  76. package/dist/augments/object/key-count.d.ts +4 -0
  77. package/dist/augments/object/map-entries.js +23 -0
  78. package/dist/augments/object/map-enum.d.ts +7 -0
  79. package/dist/augments/object/map-enum.js +24 -0
  80. package/dist/augments/object/map-values.d.ts +25 -13
  81. package/dist/augments/object/map-values.js +29 -21
  82. package/dist/augments/object/merge-deep.d.ts +4 -0
  83. package/dist/augments/object/merge-deep.js +4 -0
  84. package/dist/augments/object/merge-defined-properties.d.ts +13 -0
  85. package/dist/augments/object/merge-defined-properties.js +13 -0
  86. package/dist/augments/object/merge-property-arrays.d.ts +28 -0
  87. package/dist/augments/object/merge-property-arrays.js +28 -0
  88. package/dist/augments/object/object-entries.d.ts +27 -0
  89. package/dist/augments/object/object-entries.js +27 -0
  90. package/dist/augments/object/object-filter.d.ts +20 -0
  91. package/dist/augments/object/object-filter.js +20 -0
  92. package/dist/augments/object/object-keys.d.ts +32 -0
  93. package/dist/augments/object/object-keys.js +32 -0
  94. package/dist/augments/object/object-values.d.ts +9 -0
  95. package/dist/augments/object/object-values.js +9 -0
  96. package/dist/augments/path/esm-path.d.ts +26 -0
  97. package/dist/augments/path/esm-path.js +31 -0
  98. package/dist/augments/prisma/base-prisma-types.d.ts +38 -0
  99. package/dist/augments/prisma/prisma-basic-model.d.ts +29 -0
  100. package/dist/augments/prisma/prisma-basic-model.js +1 -0
  101. package/dist/augments/prisma/prisma-full-model.d.ts +37 -0
  102. package/dist/augments/prisma/prisma-full-model.js +1 -0
  103. package/dist/augments/prisma/prisma-model-create.d.ts +159 -0
  104. package/dist/augments/prisma/prisma-model-create.js +58 -0
  105. package/dist/augments/prisma/prisma-model-name.d.ts +18 -0
  106. package/dist/augments/prisma/prisma-model-name.js +1 -0
  107. package/dist/augments/promise/timed-promise.d.ts +15 -0
  108. package/dist/augments/promise/timed-promise.js +15 -0
  109. package/dist/augments/random/random-boolean.d.ts +6 -0
  110. package/dist/augments/random/random-boolean.js +6 -0
  111. package/dist/augments/random/random-integer.d.ts +3 -1
  112. package/dist/augments/random/random-integer.js +3 -1
  113. package/dist/augments/random/random-string.d.ts +6 -2
  114. package/dist/augments/random/random-string.js +6 -2
  115. package/dist/augments/regexp/match.d.ts +10 -0
  116. package/dist/augments/regexp/match.js +13 -0
  117. package/dist/augments/regexp/regexp-flags.d.ts +56 -3
  118. package/dist/augments/regexp/regexp-flags.js +71 -14
  119. package/dist/augments/regexp/regexp-string.d.ts +4 -0
  120. package/dist/augments/regexp/regexp-string.js +5 -1
  121. package/dist/augments/selection-set/select-collapsed.d.ts +46 -3
  122. package/dist/augments/selection-set/select-collapsed.js +40 -2
  123. package/dist/augments/selection-set/select-from.d.ts +47 -2
  124. package/dist/augments/selection-set/select-from.js +48 -1
  125. package/dist/augments/selection-set/selection-set.d.ts +26 -7
  126. package/dist/augments/selection-set/selection-set.js +1 -4
  127. package/dist/augments/string/casing/capitalization.d.ts +15 -1
  128. package/dist/augments/string/casing/capitalization.js +14 -0
  129. package/dist/augments/string/casing/casing.d.ts +53 -7
  130. package/dist/augments/string/casing/casing.js +36 -11
  131. package/dist/augments/string/casing/kebab-and-camel.d.ts +14 -0
  132. package/dist/augments/string/casing/kebab-and-camel.js +20 -5
  133. package/dist/augments/string/comma.d.ts +26 -0
  134. package/dist/augments/string/{commas.js → comma.js} +21 -2
  135. package/dist/augments/string/join.d.ts +15 -4
  136. package/dist/augments/string/join.js +15 -4
  137. package/dist/augments/string/prefix.d.ts +6 -0
  138. package/dist/augments/string/prefix.js +4 -0
  139. package/dist/augments/string/remove-duplicate-characters.d.ts +17 -0
  140. package/dist/augments/string/remove-duplicate-characters.js +22 -0
  141. package/dist/augments/string/replace.d.ts +17 -0
  142. package/dist/augments/string/replace.js +17 -0
  143. package/dist/augments/string/split.d.ts +29 -2
  144. package/dist/augments/string/split.js +32 -7
  145. package/dist/augments/string/substring-index.d.ts +11 -5
  146. package/dist/augments/string/substring-index.js +12 -3
  147. package/dist/augments/string/suffix.d.ts +22 -0
  148. package/dist/augments/string/suffix.js +16 -0
  149. package/dist/augments/string/white-space.d.ts +8 -1
  150. package/dist/augments/string/white-space.js +8 -1
  151. package/dist/augments/string/wrap-string.d.ts +15 -0
  152. package/dist/augments/string/wrap-string.js +15 -0
  153. package/dist/augments/type/ensure-type.d.ts +4 -0
  154. package/dist/augments/type/ensure-type.js +4 -0
  155. package/dist/augments/type/readonly.d.ts +7 -0
  156. package/dist/augments/type/readonly.js +7 -0
  157. package/dist/augments/type/type-recursion.d.ts +93 -1
  158. package/dist/augments/type/union.d.ts +1 -0
  159. package/dist/augments/type/union.js +1 -0
  160. package/dist/augments/type/void-type.d.ts +6 -2
  161. package/dist/augments/type/writable.d.ts +7 -0
  162. package/dist/augments/type/writable.js +7 -0
  163. package/dist/index.d.ts +11 -5
  164. package/dist/index.js +11 -5
  165. package/package.json +19 -9
  166. package/dist/augments/boolean/if-truthy.d.ts +0 -2
  167. package/dist/augments/boolean/if-truthy.js +0 -9
  168. package/dist/augments/file/esm-path.d.ts +0 -4
  169. package/dist/augments/file/esm-path.js +0 -8
  170. package/dist/augments/prisma/prisma-models.d.ts +0 -106
  171. package/dist/augments/regexp/safe-match.d.ts +0 -1
  172. package/dist/augments/regexp/safe-match.js +0 -4
  173. package/dist/augments/string/commas.d.ts +0 -7
  174. /package/dist/augments/prisma/{prisma-models.js → base-prisma-types.js} +0 -0
@@ -1,2 +1,22 @@
1
1
  import { type Values } from '@augment-vir/core';
2
+ /**
3
+ * Filters an object. Like
4
+ * [`[].filter`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries)
5
+ * but for objects.
6
+ *
7
+ * @category Object
8
+ * @category Package : @augment-vir/common
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * import {filterObject} from '@augment-vir';
13
+ *
14
+ * filterObject({a: 1, b: 2, c: 3}, (key, value) => {
15
+ * return value >= 2;
16
+ * });
17
+ * // output is `{b: 2, c: 3}`
18
+ * ```
19
+ *
20
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
21
+ */
2
22
  export declare function filterObject<ObjectGeneric>(inputObject: ObjectGeneric, callback: (key: keyof ObjectGeneric, value: Values<ObjectGeneric>, fullObject: ObjectGeneric) => boolean): Partial<ObjectGeneric>;
@@ -1,4 +1,24 @@
1
1
  import { getObjectTypedEntries, typedObjectFromEntries } from './object-entries.js';
2
+ /**
3
+ * Filters an object. Like
4
+ * [`[].filter`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries)
5
+ * but for objects.
6
+ *
7
+ * @category Object
8
+ * @category Package : @augment-vir/common
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * import {filterObject} from '@augment-vir';
13
+ *
14
+ * filterObject({a: 1, b: 2, c: 3}, (key, value) => {
15
+ * return value >= 2;
16
+ * });
17
+ * // output is `{b: 2, c: 3}`
18
+ * ```
19
+ *
20
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
21
+ */
2
22
  export function filterObject(inputObject, callback) {
3
23
  const filteredEntries = getObjectTypedEntries(inputObject).filter(([key, value,]) => {
4
24
  return callback(key, value, inputObject);
@@ -1,2 +1,34 @@
1
+ /**
2
+ * Same as the TypeScript built-in type `Omit` except that it works on actual runtime values.
3
+ *
4
+ * @category Object
5
+ * @category Package : @augment-vir/common
6
+ * @example
7
+ *
8
+ * ```ts
9
+ * import {omitObjectKeys} from '@augment-vir/common';
10
+ *
11
+ * omitObjectKeys({a: 'a', b: 'b'}, ['a']);
12
+ * // output is `{b: 'b'}`
13
+ * ```
14
+ *
15
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
16
+ */
1
17
  export declare function omitObjectKeys<const ObjectGeneric, const KeyGeneric extends keyof ObjectGeneric>(inputObject: Readonly<ObjectGeneric>, omitTheseKeys: ReadonlyArray<KeyGeneric>): Omit<ObjectGeneric, KeyGeneric>;
18
+ /**
19
+ * Same as the TypeScript built-in type `Pick` except that it works on actual runtime values.
20
+ *
21
+ * @category Object
22
+ * @category Package : @augment-vir/common
23
+ * @example
24
+ *
25
+ * ```ts
26
+ * import {pickObjectKeys} from '@augment-vir/common';
27
+ *
28
+ * pickObjectKeys({a: 'a', b: 'b'}, ['a']);
29
+ * // output is `{a: 'a'}`
30
+ * ```
31
+ *
32
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
33
+ */
2
34
  export declare function pickObjectKeys<const ObjectGeneric, const KeyGeneric extends keyof ObjectGeneric>(inputObject: Readonly<ObjectGeneric>, pickTheseKeys: ReadonlyArray<KeyGeneric>): Pick<ObjectGeneric, KeyGeneric>;
@@ -1,9 +1,41 @@
1
1
  import { filterObject } from './object-filter.js';
2
+ /**
3
+ * Same as the TypeScript built-in type `Omit` except that it works on actual runtime values.
4
+ *
5
+ * @category Object
6
+ * @category Package : @augment-vir/common
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * import {omitObjectKeys} from '@augment-vir/common';
11
+ *
12
+ * omitObjectKeys({a: 'a', b: 'b'}, ['a']);
13
+ * // output is `{b: 'b'}`
14
+ * ```
15
+ *
16
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
17
+ */
2
18
  export function omitObjectKeys(inputObject, omitTheseKeys) {
3
19
  return filterObject(inputObject, (currentKey) => {
4
20
  return !omitTheseKeys.includes(currentKey);
5
21
  });
6
22
  }
23
+ /**
24
+ * Same as the TypeScript built-in type `Pick` except that it works on actual runtime values.
25
+ *
26
+ * @category Object
27
+ * @category Package : @augment-vir/common
28
+ * @example
29
+ *
30
+ * ```ts
31
+ * import {pickObjectKeys} from '@augment-vir/common';
32
+ *
33
+ * pickObjectKeys({a: 'a', b: 'b'}, ['a']);
34
+ * // output is `{a: 'a'}`
35
+ * ```
36
+ *
37
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
38
+ */
7
39
  export function pickObjectKeys(inputObject, pickTheseKeys) {
8
40
  return filterObject(inputObject, (currentKey) => {
9
41
  return pickTheseKeys.includes(currentKey);
@@ -1,2 +1,11 @@
1
1
  import { CompleteRequire } from '@augment-vir/core';
2
+ /**
3
+ * Gets an object's values. This is the same as
4
+ * [`Object.values`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/values)
5
+ * except that it has better TypeScript types.
6
+ *
7
+ * @category Object
8
+ * @category Package : @augment-vir/common
9
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
10
+ */
2
11
  export declare function getObjectTypedValues<ObjectGeneric>(input: ObjectGeneric): CompleteRequire<ObjectGeneric>[keyof CompleteRequire<ObjectGeneric>][];
@@ -1,4 +1,13 @@
1
1
  import { getObjectTypedKeys } from '@augment-vir/core';
2
+ /**
3
+ * Gets an object's values. This is the same as
4
+ * [`Object.values`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/values)
5
+ * except that it has better TypeScript types.
6
+ *
7
+ * @category Object
8
+ * @category Package : @augment-vir/common
9
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
10
+ */
2
11
  export function getObjectTypedValues(input) {
3
12
  return getObjectTypedKeys(input).map((key) => input[key]);
4
13
  }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Creates the equivalent of CJS's
3
+ * [`__dirname`](https://nodejs.org/docs/latest/api/globals.html#__dirname) and
4
+ * [`__filename`](https://nodejs.org/docs/latest/api/globals.html#__filename) for ESM modules.
5
+ *
6
+ * This is the equivalent of
7
+ * [`import.meta.dirname`](https://nodejs.org/api/esm.html#importmetadirname) and
8
+ * [`import.meta.filename`](https://nodejs.org/api/esm.html#importmetafilename) added to Node.js
9
+ * v20.11.0 but is compatible with older versions of Node.js as well as browsers.
10
+ *
11
+ * @category Path : Common
12
+ * @category Package : @augment-vir/common
13
+ * @example
14
+ *
15
+ * ```ts
16
+ * import {getEsmPath} from '@augment-vir/common';
17
+ *
18
+ * const {filePath, dirPath} = getEsmPath(import.meta);
19
+ * ```
20
+ *
21
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
22
+ */
23
+ export declare function getEsmPath(importMeta: ImportMeta): {
24
+ filePath: string;
25
+ dirPath: string;
26
+ };
@@ -0,0 +1,31 @@
1
+ import { removeSuffix } from '../string/suffix.js';
2
+ /**
3
+ * Creates the equivalent of CJS's
4
+ * [`__dirname`](https://nodejs.org/docs/latest/api/globals.html#__dirname) and
5
+ * [`__filename`](https://nodejs.org/docs/latest/api/globals.html#__filename) for ESM modules.
6
+ *
7
+ * This is the equivalent of
8
+ * [`import.meta.dirname`](https://nodejs.org/api/esm.html#importmetadirname) and
9
+ * [`import.meta.filename`](https://nodejs.org/api/esm.html#importmetafilename) added to Node.js
10
+ * v20.11.0 but is compatible with older versions of Node.js as well as browsers.
11
+ *
12
+ * @category Path : Common
13
+ * @category Package : @augment-vir/common
14
+ * @example
15
+ *
16
+ * ```ts
17
+ * import {getEsmPath} from '@augment-vir/common';
18
+ *
19
+ * const {filePath, dirPath} = getEsmPath(import.meta);
20
+ * ```
21
+ *
22
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
23
+ */
24
+ export function getEsmPath(importMeta) {
25
+ const filePath = new URL('', importMeta.url).pathname;
26
+ const dirPath = removeSuffix({ value: new URL('.', importMeta.url).pathname, suffix: '/' });
27
+ return {
28
+ filePath,
29
+ dirPath,
30
+ };
31
+ }
@@ -0,0 +1,38 @@
1
+ import { AnyObject, type AnyFunction } from '@augment-vir/core';
2
+ /**
3
+ * A base type for Prisma model payloads because Prisma doesn't give us one. This currently only
4
+ * includes the properties that are used within this package.
5
+ *
6
+ * Note: this omits the `composites` property because I don't have any examples of what those
7
+ * actually are.
8
+ *
9
+ * @category Prisma : Common
10
+ * @category Package : @augment-vir/common
11
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
12
+ */
13
+ export type BasePrismaPayload = {
14
+ name: string;
15
+ objects: Record<string, BasePrismaPayload | BasePrismaPayload[] | null>;
16
+ scalars: AnyObject;
17
+ };
18
+ /**
19
+ * Base Prisma client type that all `PrismaClient` instances should be able to match, with enough
20
+ * data that it'll omit random accidental objects.
21
+ *
22
+ * @category Prisma : Common
23
+ * @category Package : @augment-vir/common
24
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
25
+ */
26
+ export type BasePrismaClient = {
27
+ $connect: AnyFunction;
28
+ $disconnect: AnyFunction;
29
+ $executeRaw: AnyFunction;
30
+ $executeRawUnsafe: AnyFunction;
31
+ $extends: AnyFunction;
32
+ $on: AnyFunction;
33
+ $queryRaw: AnyFunction;
34
+ $queryRawUnsafe: AnyFunction;
35
+ $transaction: AnyFunction;
36
+ } & {
37
+ [ModelName in string]: any;
38
+ };
@@ -0,0 +1,29 @@
1
+ import type { BasePrismaClient } from './base-prisma-types.js';
2
+ import type { PrismaModelName } from './prisma-model-name.js';
3
+ /**
4
+ * A basic model entry with only its immediate properties.
5
+ *
6
+ * @category Prisma : Common
7
+ * @category Package : @augment-vir/common
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * import type {PrismaClient} from '@prisma/client';
12
+ * import type {PrismaBasicModel} from '@augment-vir/common';
13
+ *
14
+ * function doThing(fullModel: PrismaBasicModel<PrismaClient, 'user'>) {}
15
+ * ```
16
+ *
17
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
18
+ */
19
+ export type PrismaBasicModel<PrismaClient extends BasePrismaClient, Model extends PrismaModelName<PrismaClient>> = PrismaClient['model'][Model]['payload']['scalars'];
20
+ /**
21
+ * Basic model entries for all models in the database.
22
+ *
23
+ * @category Prisma : Common
24
+ * @category Package : @augment-vir/common
25
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
26
+ */
27
+ export type PrismaAllBasicModels<PrismaClient extends BasePrismaClient> = Partial<{
28
+ [ModelName in PrismaModelName<PrismaClient>]: PrismaBasicModel<PrismaClient, ModelName>[];
29
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { type BasePrismaClient, type BasePrismaPayload } from './base-prisma-types.js';
2
+ import type { PrismaModelName } from './prisma-model-name.js';
3
+ /**
4
+ * A full model entry with all relations from the given Prisma type map and model name.
5
+ *
6
+ * @category Prisma : Common
7
+ * @category Package : @augment-vir/common
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * import type {Prisma} from '@prisma/client';
12
+ * import type {FullPrismaModel} from '@augment-vir/common';
13
+ *
14
+ * function doThing(fullModel: FullModel<Prisma.TypeMap, 'User'>) {}
15
+ * ```
16
+ *
17
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
18
+ */
19
+ export type PrismaFullModel<PrismaClient extends BasePrismaClient, Model extends PrismaModelName<PrismaClient>> = ExpandPrismaTypeMapPayload<PrismaClient[Model][symbol]['types']['payload']>;
20
+ /**
21
+ * Expand a Prisma payload into its scalars and recursive relations.
22
+ *
23
+ * @category Prisma : Common : Util
24
+ * @category Package : @augment-vir/common
25
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
26
+ */
27
+ export type ExpandPrismaTypeMapPayload<Payload extends BasePrismaPayload> = Payload['scalars'] & {
28
+ [Key in keyof Payload['objects']]: ExpandPotentialArrayPrismaTypeMapPayload<NonNullable<Payload['objects'][Key]>> | (null extends Payload['objects'][Key] ? null : never);
29
+ };
30
+ /**
31
+ * Expand a payload that might be inside of an array, keeping it inside of an array if it is.
32
+ *
33
+ * @category Prisma : Common : Util
34
+ * @category Package : @augment-vir/common
35
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
36
+ */
37
+ export type ExpandPotentialArrayPrismaTypeMapPayload<PayloadWrapper extends BasePrismaPayload | BasePrismaPayload[]> = PayloadWrapper extends (infer ActualPayload extends BasePrismaPayload)[] ? ExpandPrismaTypeMapPayload<ActualPayload>[] : PayloadWrapper extends BasePrismaPayload ? ExpandPrismaTypeMapPayload<PayloadWrapper> : never;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,159 @@
1
+ import type { BasePrismaClient } from './base-prisma-types.js';
2
+ import type { PrismaModelName } from './prisma-model-name.js';
3
+ /**
4
+ * Use this to define mock entries that _shouldn't_ be saved to the database so that we can easily
5
+ * write tests for missing data.
6
+ *
7
+ * @category Prisma : Common
8
+ * @category Package : @augment-vir/common
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * import type {PrismaClient} from '@prisma/client';
13
+ * import {prismaModelCreateExclude, PrismaKeyedModelCreate} from '@augment-vir/common';
14
+ *
15
+ * export const mockUsers = {
16
+ * user1: {
17
+ * id: 1,
18
+ * authRole: 'admin',
19
+ * },
20
+ * missingUser: {
21
+ * id: -1,
22
+ * authRole: 'user',
23
+ * [prismaModelCreateExclude]: true,
24
+ * },
25
+ * } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
26
+ * ```
27
+ *
28
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
29
+ */
30
+ export declare const prismaModelCreateExclude: unique symbol;
31
+ /**
32
+ * Use this to prevent the id property from being included when creating a mock record, allowing the
33
+ * database's internal auto-increment functionality to generate one. This is necessary when testing
34
+ * creation of new records because manually specified ids do not increment the auto incrementor.
35
+ *
36
+ * @category Prisma : Common
37
+ * @category Package : @augment-vir/common
38
+ * @example
39
+ *
40
+ * ```ts
41
+ * import type {PrismaClient} from '@prisma/client';
42
+ * import {prismaModelCreateOmitId, PrismaKeyedModelCreate} from '@augment-vir/common';
43
+ *
44
+ * export const mockUsers = {
45
+ * user1: {
46
+ * id: 1,
47
+ * authRole: 'admin',
48
+ * [prismaModelCreateOmitId]: true,
49
+ * },
50
+ * user2: {
51
+ * id: 2,
52
+ * authRole: 'admin',
53
+ * [prismaModelCreateOmitId]: true,
54
+ * },
55
+ * } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
56
+ * ```
57
+ *
58
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
59
+ */
60
+ export declare const prismaModelCreateOmitId: unique symbol;
61
+ /**
62
+ * Extracts the creation data for a model from the given `PrismaClient` type.
63
+ *
64
+ * @category Prisma : Common
65
+ * @category Package : @augment-vir/common
66
+ * @example
67
+ *
68
+ * ```ts
69
+ * import type {PrismaClient} from '@prisma/client';
70
+ * import type {PrismaModelCreate} from '@augment-vir/common';
71
+ *
72
+ * function doThing(entry: PrismaModelCreate<PrismaClient, 'User'>) {}
73
+ * ```
74
+ *
75
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
76
+ */
77
+ export type PrismaModelCreate<PrismaClient extends BasePrismaClient, Model extends PrismaModelName<PrismaClient>> = NonNullable<Parameters<PrismaClient[Model]['create']>[0]> extends {
78
+ data?: infer Data;
79
+ } ? NonNullable<Data> & Partial<{
80
+ [prismaModelCreateExclude]: true;
81
+ [prismaModelCreateOmitId]: true;
82
+ }> : `ERROR: failed to infer creation entry for model '${Model}'`;
83
+ /**
84
+ * A type for creating multiple Prisma create mocks that are named for future reference.
85
+ *
86
+ * @category Prisma : Common
87
+ * @category Package : @augment-vir/common
88
+ * @example
89
+ *
90
+ * ```ts
91
+ * import {PrismaKeyedModelCreate} from '@augment-vir/common';
92
+ * import type {PrismaClient} from '@prisma/client';
93
+ *
94
+ * const mockUsers = {
95
+ * mockUser1: {
96
+ * first_name: 'one',
97
+ * id: 123,
98
+ * // etc.
99
+ * },
100
+ * mockUser2: {
101
+ * first_name: 'two',
102
+ * id: 124,
103
+ * auth_role: 'user',
104
+ * // etc.
105
+ * },
106
+ * } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
107
+ * ```
108
+ *
109
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
110
+ */
111
+ export type PrismaKeyedModelCreate<PrismaClient extends BasePrismaClient, Model extends PrismaModelName<PrismaClient>> = {
112
+ [EntryName in string]: PrismaModelCreate<PrismaClient, Model>;
113
+ };
114
+ /**
115
+ * Model create data stored by model name in either array or keyed form. Used in
116
+ * `prisma.client.addData()` from `@augment-vir/node`.
117
+ *
118
+ * @category Prisma : Common
119
+ * @category Package : @augment-vir/common
120
+ * @example
121
+ *
122
+ * ```ts
123
+ * import {PrismaKeyedModelCreate} from '@augment-vir/common';
124
+ * import type {PrismaClient} from '@prisma/client';
125
+ *
126
+ * const mockData: ModelCreateData<PrismaClient> = {
127
+ * user: {
128
+ * mockUser1: {
129
+ * first_name: 'one',
130
+ * id: 123,
131
+ * // etc.
132
+ * },
133
+ * mockUser2: {
134
+ * first_name: 'two',
135
+ * id: 124,
136
+ * auth_role: 'user',
137
+ * // etc.
138
+ * },
139
+ * },
140
+ * region: [
141
+ * {
142
+ * id: 1,
143
+ * name: 'North America',
144
+ * // etc.
145
+ * },
146
+ * {
147
+ * id: 2,
148
+ * name: 'Europe',
149
+ * // etc.
150
+ * },
151
+ * ],
152
+ * };
153
+ * ```
154
+ *
155
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
156
+ */
157
+ export type PrismaAllModelsCreate<PrismaClient extends BasePrismaClient> = Readonly<Partial<{
158
+ [Model in PrismaModelName<PrismaClient>]: Readonly<PrismaKeyedModelCreate<PrismaClient, Model>> | ReadonlyArray<Readonly<PrismaModelCreate<PrismaClient, Model>>>;
159
+ }>>;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Use this to define mock entries that _shouldn't_ be saved to the database so that we can easily
3
+ * write tests for missing data.
4
+ *
5
+ * @category Prisma : Common
6
+ * @category Package : @augment-vir/common
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * import type {PrismaClient} from '@prisma/client';
11
+ * import {prismaModelCreateExclude, PrismaKeyedModelCreate} from '@augment-vir/common';
12
+ *
13
+ * export const mockUsers = {
14
+ * user1: {
15
+ * id: 1,
16
+ * authRole: 'admin',
17
+ * },
18
+ * missingUser: {
19
+ * id: -1,
20
+ * authRole: 'user',
21
+ * [prismaModelCreateExclude]: true,
22
+ * },
23
+ * } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
24
+ * ```
25
+ *
26
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
27
+ */
28
+ export const prismaModelCreateExclude = Symbol('prisma-model-create-exclude');
29
+ /**
30
+ * Use this to prevent the id property from being included when creating a mock record, allowing the
31
+ * database's internal auto-increment functionality to generate one. This is necessary when testing
32
+ * creation of new records because manually specified ids do not increment the auto incrementor.
33
+ *
34
+ * @category Prisma : Common
35
+ * @category Package : @augment-vir/common
36
+ * @example
37
+ *
38
+ * ```ts
39
+ * import type {PrismaClient} from '@prisma/client';
40
+ * import {prismaModelCreateOmitId, PrismaKeyedModelCreate} from '@augment-vir/common';
41
+ *
42
+ * export const mockUsers = {
43
+ * user1: {
44
+ * id: 1,
45
+ * authRole: 'admin',
46
+ * [prismaModelCreateOmitId]: true,
47
+ * },
48
+ * user2: {
49
+ * id: 2,
50
+ * authRole: 'admin',
51
+ * [prismaModelCreateOmitId]: true,
52
+ * },
53
+ * } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
54
+ * ```
55
+ *
56
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
57
+ */
58
+ export const prismaModelCreateOmitId = Symbol('prisma-model-create-exclude-id');
@@ -0,0 +1,18 @@
1
+ import { BasePrismaClient } from './base-prisma-types.js';
2
+ /**
3
+ * Extracts all model names from a generated `PrismaClient`.
4
+ *
5
+ * @category Prisma : Common
6
+ * @category Package : @augment-vir/common
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * import type {PrismaClient} from '@prisma/client';
11
+ * import type {PrismaModelName} from '@augment-vir/common';
12
+ *
13
+ * function doThing(modelName: PrismaModelName<PrismaClient>) {}
14
+ * ```
15
+ *
16
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
17
+ */
18
+ export type PrismaModelName<PrismaClient extends BasePrismaClient> = Exclude<keyof PrismaClient, `$${string}` | symbol>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,22 @@
1
1
  import { AnyDuration } from '@date-vir/duration';
2
+ /**
3
+ * An error thrown by {@link wrapPromiseInTimeout} when the timeout is reached.
4
+ *
5
+ * @category Promise
6
+ * @category Package : @augment-vir/common
7
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
8
+ */
2
9
  export declare class PromiseTimeoutError extends Error {
3
10
  readonly duration: AnyDuration;
4
11
  readonly name = "PromiseTimeoutError";
5
12
  constructor(duration: AnyDuration, failureMessage?: string | undefined);
6
13
  }
14
+ /**
15
+ * Wraps an already-created Promise in a timeout, causing a rejection if the original Promise isn't
16
+ * resolved by then.
17
+ *
18
+ * @category Promise
19
+ * @category Package : @augment-vir/common
20
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
21
+ */
7
22
  export declare function wrapPromiseInTimeout<T>(duration: Readonly<AnyDuration>, originalPromise: PromiseLike<T>, failureMessage?: string | undefined): Promise<T>;
@@ -1,6 +1,13 @@
1
1
  import { check } from '@augment-vir/assert';
2
2
  import { ensureError } from '@augment-vir/core';
3
3
  import { convertDuration, DurationUnit } from '@date-vir/duration';
4
+ /**
5
+ * An error thrown by {@link wrapPromiseInTimeout} when the timeout is reached.
6
+ *
7
+ * @category Promise
8
+ * @category Package : @augment-vir/common
9
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
10
+ */
4
11
  export class PromiseTimeoutError extends Error {
5
12
  duration;
6
13
  name = 'PromiseTimeoutError';
@@ -14,6 +21,14 @@ export class PromiseTimeoutError extends Error {
14
21
  this.duration = duration;
15
22
  }
16
23
  }
24
+ /**
25
+ * Wraps an already-created Promise in a timeout, causing a rejection if the original Promise isn't
26
+ * resolved by then.
27
+ *
28
+ * @category Promise
29
+ * @category Package : @augment-vir/common
30
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
31
+ */
17
32
  export function wrapPromiseInTimeout(duration, originalPromise, failureMessage) {
18
33
  const milliseconds = convertDuration(duration, DurationUnit.Milliseconds).milliseconds;
19
34
  return new Promise(async (resolve, reject) => {
@@ -6,13 +6,19 @@
6
6
  *
7
7
  * This function uses cryptographically secure randomness.
8
8
  *
9
+ * @category Random
10
+ * @category Package : @augment-vir/common
9
11
  * @example
10
12
  *
11
13
  * ```ts
14
+ * import {randomBoolean} from '@augment-vir/common';
15
+ *
12
16
  * randomBoolean(50); // 50% chance to return true
13
17
  * randomBoolean(0); // always false, 0% chance of being true
14
18
  * randomBoolean(100); // always true, 100% chance of being true
15
19
  * randomBoolean(59.67); // 59% chance of being true
16
20
  * ```
21
+ *
22
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
17
23
  */
18
24
  export declare function randomBoolean(percentLikelyToBeTrue?: number): boolean;
@@ -8,14 +8,20 @@ import { randomInteger } from './random-integer.js';
8
8
  *
9
9
  * This function uses cryptographically secure randomness.
10
10
  *
11
+ * @category Random
12
+ * @category Package : @augment-vir/common
11
13
  * @example
12
14
  *
13
15
  * ```ts
16
+ * import {randomBoolean} from '@augment-vir/common';
17
+ *
14
18
  * randomBoolean(50); // 50% chance to return true
15
19
  * randomBoolean(0); // always false, 0% chance of being true
16
20
  * randomBoolean(100); // always true, 100% chance of being true
17
21
  * randomBoolean(59.67); // 59% chance of being true
18
22
  * ```
23
+ *
24
+ * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
19
25
  */
20
26
  export function randomBoolean(percentLikelyToBeTrue = 50) {
21
27
  return (randomInteger({ min: 0, max: 99 }) <