@warp-drive-mirror/utilities 5.10.0-alpha.2 → 5.10.0-alpha.20

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 (131) hide show
  1. package/README.md +92 -7
  2. package/cjs-dist/string.cjs +23 -8
  3. package/cjs-dist/string.cjs.map +1 -1
  4. package/dist/-private.d.ts +0 -2
  5. package/dist/-private.d.ts.map +1 -1
  6. package/dist/-private.js +1 -1
  7. package/dist/active-record.d.ts +21 -6
  8. package/dist/active-record.d.ts.map +1 -1
  9. package/dist/active-record.js +17 -8
  10. package/dist/active-record.js.map +1 -1
  11. package/dist/{builder-utils-BkXwUT0x.js → builder-utils-bjXbHa-m.js} +2 -3
  12. package/dist/{builder-utils-BkXwUT0x.js.map → builder-utils-bjXbHa-m.js.map} +1 -1
  13. package/dist/derivations.d.ts +3 -2
  14. package/dist/derivations.d.ts.map +1 -1
  15. package/dist/derivations.js +7 -2
  16. package/dist/derivations.js.map +1 -1
  17. package/dist/handlers.d.ts +26 -9
  18. package/dist/handlers.d.ts.map +1 -1
  19. package/dist/handlers.js +29 -9
  20. package/dist/handlers.js.map +1 -1
  21. package/dist/{index-BeMAuqgZ.d.ts → index-Dv5kZpGe.d.ts} +47 -3
  22. package/dist/index-Dv5kZpGe.d.ts.map +1 -0
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +54 -8
  25. package/dist/index.js.map +1 -1
  26. package/dist/{inflections-DzBsjJqj.js → inflections-CWdUh2K_.js} +2 -3
  27. package/dist/{inflections-DzBsjJqj.js.map → inflections-CWdUh2K_.js.map} +1 -1
  28. package/dist/json-api.d.ts +51 -11
  29. package/dist/json-api.d.ts.map +1 -1
  30. package/dist/json-api.js +43 -12
  31. package/dist/json-api.js.map +1 -1
  32. package/dist/rest.d.ts +20 -6
  33. package/dist/rest.d.ts.map +1 -1
  34. package/dist/rest.js +17 -8
  35. package/dist/rest.js.map +1 -1
  36. package/dist/{string-CWmAluxh.js → string-DFhbMVCj.js} +23 -6
  37. package/dist/string-DFhbMVCj.js.map +1 -0
  38. package/dist/string.d.ts +19 -4
  39. package/dist/string.d.ts.map +1 -1
  40. package/dist/string.js +1 -1
  41. package/dist/unpkg/dev/-private.js +1 -1
  42. package/dist/unpkg/dev/active-record.js +17 -8
  43. package/dist/unpkg/dev/active-record.js.map +1 -1
  44. package/dist/unpkg/dev/{builder-utils-BkXwUT0x.js → builder-utils-bjXbHa-m.js} +2 -3
  45. package/dist/unpkg/dev/{builder-utils-BkXwUT0x.js.map → builder-utils-bjXbHa-m.js.map} +1 -1
  46. package/dist/unpkg/dev/derivations.js +7 -2
  47. package/dist/unpkg/dev/derivations.js.map +1 -1
  48. package/dist/unpkg/dev/handlers.js +29 -9
  49. package/dist/unpkg/dev/handlers.js.map +1 -1
  50. package/dist/unpkg/dev/index.js +54 -8
  51. package/dist/unpkg/dev/index.js.map +1 -1
  52. package/dist/unpkg/dev/{inflections-DzBsjJqj.js → inflections-CWdUh2K_.js} +2 -3
  53. package/dist/unpkg/dev/{inflections-DzBsjJqj.js.map → inflections-CWdUh2K_.js.map} +1 -1
  54. package/dist/unpkg/dev/json-api.js +43 -12
  55. package/dist/unpkg/dev/json-api.js.map +1 -1
  56. package/dist/unpkg/dev/rest.js +17 -8
  57. package/dist/unpkg/dev/rest.js.map +1 -1
  58. package/dist/unpkg/dev/{string-j4ur-TDs.js → string-D9jrClhQ.js} +23 -6
  59. package/dist/unpkg/dev/string-D9jrClhQ.js.map +1 -0
  60. package/dist/unpkg/dev/string.js +1 -1
  61. package/dist/unpkg/dev-deprecated/-private.js +1 -1
  62. package/dist/unpkg/dev-deprecated/active-record.js +17 -8
  63. package/dist/unpkg/dev-deprecated/active-record.js.map +1 -1
  64. package/dist/unpkg/dev-deprecated/{builder-utils-BkXwUT0x.js → builder-utils-bjXbHa-m.js} +2 -3
  65. package/dist/unpkg/dev-deprecated/{builder-utils-BkXwUT0x.js.map → builder-utils-bjXbHa-m.js.map} +1 -1
  66. package/dist/unpkg/dev-deprecated/derivations.js +7 -2
  67. package/dist/unpkg/dev-deprecated/derivations.js.map +1 -1
  68. package/dist/unpkg/dev-deprecated/handlers.js +29 -9
  69. package/dist/unpkg/dev-deprecated/handlers.js.map +1 -1
  70. package/dist/unpkg/dev-deprecated/index.js +54 -8
  71. package/dist/unpkg/dev-deprecated/index.js.map +1 -1
  72. package/dist/unpkg/dev-deprecated/{inflections-DzBsjJqj.js → inflections-CWdUh2K_.js} +2 -3
  73. package/dist/unpkg/dev-deprecated/{inflections-DzBsjJqj.js.map → inflections-CWdUh2K_.js.map} +1 -1
  74. package/dist/unpkg/dev-deprecated/json-api.js +43 -12
  75. package/dist/unpkg/dev-deprecated/json-api.js.map +1 -1
  76. package/dist/unpkg/dev-deprecated/rest.js +17 -8
  77. package/dist/unpkg/dev-deprecated/rest.js.map +1 -1
  78. package/dist/unpkg/dev-deprecated/{string-j4ur-TDs.js → string-D9jrClhQ.js} +23 -6
  79. package/dist/unpkg/dev-deprecated/string-D9jrClhQ.js.map +1 -0
  80. package/dist/unpkg/dev-deprecated/string.js +1 -1
  81. package/dist/unpkg/prod/-private.js +1 -1
  82. package/dist/unpkg/prod/active-record.js +17 -8
  83. package/dist/unpkg/prod/active-record.js.map +1 -1
  84. package/dist/unpkg/prod/builder-utils-bjXbHa-m.js +15 -0
  85. package/dist/unpkg/prod/{builder-utils-BkXwUT0x.js.map → builder-utils-bjXbHa-m.js.map} +1 -1
  86. package/dist/unpkg/prod/derivations.js +7 -2
  87. package/dist/unpkg/prod/derivations.js.map +1 -1
  88. package/dist/unpkg/prod/handlers.js +29 -9
  89. package/dist/unpkg/prod/handlers.js.map +1 -1
  90. package/dist/unpkg/prod/index.js +54 -8
  91. package/dist/unpkg/prod/index.js.map +1 -1
  92. package/dist/unpkg/prod/inflections-CWdUh2K_.js +79 -0
  93. package/dist/unpkg/prod/{inflections-DzBsjJqj.js.map → inflections-CWdUh2K_.js.map} +1 -1
  94. package/dist/unpkg/prod/json-api.js +43 -12
  95. package/dist/unpkg/prod/json-api.js.map +1 -1
  96. package/dist/unpkg/prod/rest.js +17 -8
  97. package/dist/unpkg/prod/rest.js.map +1 -1
  98. package/dist/unpkg/prod/string-Du9nRZEd.js +300 -0
  99. package/dist/unpkg/prod/string-Du9nRZEd.js.map +1 -0
  100. package/dist/unpkg/prod/string.js +1 -1
  101. package/dist/unpkg/prod-deprecated/-private.js +1 -1
  102. package/dist/unpkg/prod-deprecated/active-record.js +17 -8
  103. package/dist/unpkg/prod-deprecated/active-record.js.map +1 -1
  104. package/dist/unpkg/prod-deprecated/{builder-utils-BkXwUT0x.js → builder-utils-bjXbHa-m.js} +2 -3
  105. package/dist/unpkg/prod-deprecated/{builder-utils-BkXwUT0x.js.map → builder-utils-bjXbHa-m.js.map} +1 -1
  106. package/dist/unpkg/prod-deprecated/derivations.js +7 -2
  107. package/dist/unpkg/prod-deprecated/derivations.js.map +1 -1
  108. package/dist/unpkg/prod-deprecated/handlers.js +29 -9
  109. package/dist/unpkg/prod-deprecated/handlers.js.map +1 -1
  110. package/dist/unpkg/prod-deprecated/index.js +54 -8
  111. package/dist/unpkg/prod-deprecated/index.js.map +1 -1
  112. package/dist/unpkg/prod-deprecated/{inflections-DzBsjJqj.js → inflections-CWdUh2K_.js} +2 -3
  113. package/dist/unpkg/prod-deprecated/{inflections-DzBsjJqj.js.map → inflections-CWdUh2K_.js.map} +1 -1
  114. package/dist/unpkg/prod-deprecated/json-api.js +43 -12
  115. package/dist/unpkg/prod-deprecated/json-api.js.map +1 -1
  116. package/dist/unpkg/prod-deprecated/rest.js +17 -8
  117. package/dist/unpkg/prod-deprecated/rest.js.map +1 -1
  118. package/dist/unpkg/prod-deprecated/{string-T1ahjLdj.js → string-Du9nRZEd.js} +23 -6
  119. package/dist/unpkg/prod-deprecated/string-Du9nRZEd.js.map +1 -0
  120. package/dist/unpkg/prod-deprecated/string.js +1 -1
  121. package/logos/README.md +1 -1
  122. package/package.json +9 -9
  123. package/dist/index-BeMAuqgZ.d.ts.map +0 -1
  124. package/dist/string-CWmAluxh.js.map +0 -1
  125. package/dist/unpkg/dev/string-j4ur-TDs.js.map +0 -1
  126. package/dist/unpkg/dev-deprecated/string-j4ur-TDs.js.map +0 -1
  127. package/dist/unpkg/prod/builder-utils-BkXwUT0x.js +0 -16
  128. package/dist/unpkg/prod/inflections-DzBsjJqj.js +0 -80
  129. package/dist/unpkg/prod/string-T1ahjLdj.js +0 -283
  130. package/dist/unpkg/prod/string-T1ahjLdj.js.map +0 -1
  131. package/dist/unpkg/prod-deprecated/string-T1ahjLdj.js.map +0 -1
package/README.md CHANGED
@@ -8,13 +8,11 @@
8
8
  />
9
9
  </p>
10
10
 
11
- ![NPM Stable Version](https://img.shields.io/npm/v/ember-data/latest?label=version&style=flat&color=fdb155)
12
- ![NPM Downloads](https://img.shields.io/npm/dm/ember-data.svg?style=flat&color=fdb155)
11
+ ![NPM Stable Version](https://img.shields.io/npm/v/%40warp-drive%2Futilities/latest?label=version&style=flat&color=fdb155)
12
+ ![NPM Downloads](https://img.shields.io/npm/dm/%40warp-drive%2Futilities.svg?style=flat&color=fdb155)
13
13
  ![License](https://img.shields.io/github/license/warp-drive-data/warp-drive.svg?style=flat&color=fdb155)
14
- [![EmberJS Discord Community Server](https://img.shields.io/badge/EmberJS-grey?logo=discord&logoColor=fdb155)](https://discord.gg/zT3asNS
15
- )
16
- [![WarpDrive Discord Server](https://img.shields.io/badge/WarpDrive-grey?logo=discord&logoColor=fdb155)](https://discord.gg/PHBbnWJx5S
17
- )
14
+ [![EmberJS Discord Community Server](https://img.shields.io/badge/EmberJS-grey?logo=discord&logoColor=fdb155)](https://discord.gg/zT3asNS)
15
+ [![WarpDrive Discord Server](https://img.shields.io/badge/WarpDrive-grey?logo=discord&logoColor=fdb155)](https://discord.gg/PHBbnWJx5S)
18
16
 
19
17
  # @warp-drive-mirror/utilities
20
18
 
@@ -25,12 +23,39 @@
25
23
  Utilities that Apps building with <em>Warp</em><strong>Drive</strong> may find useful.
26
24
  </p>
27
25
 
26
+ ## Usage
27
+
28
+ Build URLs and query strings, or use the request builders that compose them:
29
+
30
+ ```ts
31
+ import { buildBaseURL, buildQueryParams } from '@warp-drive-mirror/utilities';
32
+
33
+ const baseURL = buildBaseURL({
34
+ host: 'https://api.example.com',
35
+ namespace: 'api/v1',
36
+ resourcePath: 'emberDevelopers',
37
+ op: 'query',
38
+ identifier: { type: 'ember-developer' }
39
+ });
40
+ const url = `${baseURL}?${buildQueryParams({ name: 'Chris', include:['pets'] })}`;
41
+ // => 'https://api.example.com/api/v1/emberDevelopers?include=pets&name=Chris'
42
+ ```
43
+
28
44
  <br>
29
45
 
30
46
  ## Documentation
31
47
 
32
- *Get Started* → [Guides](https://docs.warp-drive.io)
48
+ *Get Started* → [Guides](https://warp-drive.io/guides/)
49
+
50
+ API docs for this package → [@warp-drive-mirror/utilities](https://warp-drive.io/api/@warp-drive-mirror/utilities/)
33
51
 
52
+ - [Installation](https://warp-drive.io/guides/installation/#other-packages): install `@warp-drive-mirror/utilities` at the same version as `@warp-drive-mirror/core`.
53
+ - [Builders](https://warp-drive.io/guides/the-manual/requests/builders): write request builders, and keep cache keys stable with `sortQueryParams`, `buildQueryParams` and `filterEmpty`.
54
+ - [Making Requests](https://warp-drive.io/guides/the-manual/requests/): make a request with the `findRecord` builder, and the `AutoCompress` and `Gate` handlers.
55
+ - [Handlers](https://warp-drive.io/guides/the-manual/requests/handlers): normalize a response with `dasherize` and `singularize` from `@warp-drive-mirror/utilities/string`.
56
+ - [Typing Requests](https://warp-drive.io/guides/the-manual/requests/typing-requests): pass a response's meta type to the builders.
57
+ - [Basic Usage](https://warp-drive.io/guides/the-manual/cookbook/basic-usage): configure `setBuildURLConfig` and page through results with the `query` builder.
58
+ - [Naming Conventions](https://warp-drive.io/guides/the-manual/cookbook/naming-conventions): how `findRecord` turns a resource type into a URL path.
34
59
 
35
60
  <br>
36
61
 
@@ -43,3 +68,63 @@ Refer to the [Code of Conduct](https://github.com/warp-drive-data/warp-drive/blo
43
68
  ### License
44
69
 
45
70
  This project is licensed under the [MIT License](LICENSE.md).
71
+
72
+ ### ♥️ Credits
73
+
74
+ <details>
75
+ <summary>Brought to you with ♥️ love by <a href="https://emberjs.com" title="EmberJS">🐹 Ember</a></summary>
76
+
77
+ <style type="text/css">
78
+ img.project-logo {
79
+ padding: 0 5em 1em 5em;
80
+ width: 100px;
81
+ border-bottom: 2px solid #bbb;
82
+ margin: 0 auto;
83
+ display: block;
84
+ }
85
+ details > summary {
86
+ font-size: 1.1rem;
87
+ line-height: 1rem;
88
+ margin-bottom: 1rem;
89
+ }
90
+ details {
91
+ font-size: 1rem;
92
+ }
93
+ details > summary strong {
94
+ display: inline-block;
95
+ padding: .2rem 0;
96
+ color: #000;
97
+ border-bottom: 3px solid #bbb;
98
+ }
99
+
100
+ details > details {
101
+ margin-left: 2rem;
102
+ }
103
+ details > details > summary {
104
+ font-size: 1rem;
105
+ line-height: 1rem;
106
+ margin-bottom: 1rem;
107
+ }
108
+ details > details > summary strong {
109
+ display: inline-block;
110
+ padding: .2rem 0;
111
+ color: #555;
112
+ border-bottom: 2px solid #555;
113
+ }
114
+ details > details {
115
+ font-size: .85rem;
116
+ }
117
+
118
+ @media (prefers-color-scheme: dark) {
119
+ details > summary strong {
120
+ color: #fff;
121
+ }
122
+ }
123
+ @media (prefers-color-scheme: dark) {
124
+ details > details > summary strong {
125
+ color: #afaba0;
126
+ border-bottom: 2px solid #afaba0;
127
+ }
128
+ }
129
+ </style>
130
+ </details>
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- //#region ../../node_modules/.pnpm/@warp-d_5e1563e0e582c8365bb74466d3761d6d/node_modules/@warp-drive-mirror/core/dist/utils/string.js
2
+ // ../../node_modules/.pnpm/@warp-d_5e1563e0e582c8365bb74466d3761d6d/node_modules/@warp-drive-mirror/core/dist/utils/string.js
3
3
  const DEFAULT_MAX_CACHE_SIZE = 1e4;
4
4
  /**
5
5
  * An LRUCache implementation with upsert semantics.
@@ -72,8 +72,7 @@ function dasherize$1(str) {
72
72
  return STRING_DASHERIZE_CACHE.get(str);
73
73
  }
74
74
 
75
- //#endregion
76
- //#region src/-private/string/inflections.ts
75
+ // src/-private/string/inflections.ts
77
76
  const defaultRules = {
78
77
  plurals: [
79
78
  [/$/, "s"],
@@ -150,8 +149,7 @@ const defaultRules = {
150
149
  ]
151
150
  };
152
151
 
153
- //#endregion
154
- //#region src/-private/string/transform.ts
152
+ // src/-private/string/transform.ts
155
153
  const STRING_CAMELIZE_REGEXP_1 = /(\-|\_|\.|\s)+(.)?/g;
156
154
  const STRING_CAMELIZE_REGEXP_2 = /(^|\/)([A-Z])/g;
157
155
  const CAMELIZE_CACHE = new LRUCache((key) => key.replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) => chr ? chr.toUpperCase() : "").replace(STRING_CAMELIZE_REGEXP_2, (match) => match.toLowerCase()));
@@ -173,6 +171,7 @@ const CAPITALIZE_CACHE = new LRUCache((str) => str.replace(STRING_CAPITALIZE_REG
173
171
  * dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'
174
172
  * ```
175
173
  *
174
+ * @summary Converts camelCase, underscored, or spaced strings to dasherized form, such as `innerHTML` to `inner-html`.
176
175
  * @public
177
176
  * @since 4.13.0
178
177
  */
@@ -191,6 +190,8 @@ const dasherize = dasherize$1;
191
190
  * camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'
192
191
  * ```
193
192
  *
193
+ * @summary Converts dashed, underscored, dotted, or spaced strings to lowerCamelCase, such as `action_name` to
194
+ * `actionName`.
194
195
  * @public
195
196
  * @since 4.13.0
196
197
  */
@@ -210,6 +211,7 @@ function camelize(str) {
210
211
  * underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'
211
212
  * ```
212
213
  *
214
+ * @summary Converts camelCase, dashed, or spaced strings to lowercase snake_case, such as `innerHTML` to `inner_html`.
213
215
  * @public
214
216
  * @since 4.13.0
215
217
  */
@@ -229,6 +231,7 @@ function underscore(str) {
229
231
  * capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'
230
232
  * ```
231
233
  *
234
+ * @summary Uppercases the first letter of a string, and of each `/`-separated path segment, leaving the rest unchanged.
232
235
  * @public
233
236
  * @since 4.13.0
234
237
  */
@@ -239,6 +242,8 @@ function capitalize(str) {
239
242
  * Sets the maximum size of the LRUCache for all string transformation functions.
240
243
  * The default size is 10,000.
241
244
  *
245
+ * @summary Sets how many results the `camelize`, `underscore`, `capitalize`, and `dasherize` caches each keep (default
246
+ * 10,000).
242
247
  * @public
243
248
  * @since 4.13.0
244
249
  */
@@ -249,8 +254,7 @@ function setMaxLRUCacheSize(size) {
249
254
  STRING_DASHERIZE_CACHE.size = size;
250
255
  }
251
256
 
252
- //#endregion
253
- //#region src/-private/string/inflect.ts
257
+ // src/-private/string/inflect.ts
254
258
  const BLANK_REGEX = /^\s*$/;
255
259
  const LAST_WORD_DASHED_REGEX = /([\w/-]+[_/\s-])([a-z\d]+$)/;
256
260
  const LAST_WORD_CAMELIZED_REGEX = /([\w/\s-]+)([A-Z][a-z\d]*$)/;
@@ -270,6 +274,7 @@ const PLURAL_RULES = new Map(defaultRules.plurals.reverse());
270
274
  * Marks a word as uncountable. Uncountable words are not pluralized
271
275
  * or singularized.
272
276
  *
277
+ * @summary Registers a word that `pluralize` and `singularize` should always return unchanged.
273
278
  * @public
274
279
  * @since 4.13.0
275
280
  */
@@ -280,6 +285,7 @@ function uncountable(word) {
280
285
  * Marks a list of words as uncountable. Uncountable words are not pluralized
281
286
  * or singularized.
282
287
  *
288
+ * @summary Registers a list of words that `pluralize` and `singularize` should always return unchanged.
283
289
  * @public
284
290
  * @since 4.13.0
285
291
  */
@@ -292,6 +298,8 @@ function loadUncountable(uncountables) {
292
298
  * Marks a word as irregular. Irregular words have unique
293
299
  * pluralization and singularization rules.
294
300
  *
301
+ * @summary Registers a singular and plural word pair that `pluralize` and `singularize` map directly instead of
302
+ * applying rules.
295
303
  * @public
296
304
  * @since 4.13.0
297
305
  */
@@ -305,6 +313,7 @@ function irregular(single, plur) {
305
313
  * Marks a list of word pairs as irregular. Irregular words have unique
306
314
  * pluralization and singularization rules.
307
315
  *
316
+ * @summary Registers a list of singular and plural word pairs that `pluralize` and `singularize` map directly.
308
317
  * @public
309
318
  * @since 4.13.0
310
319
  */
@@ -320,6 +329,7 @@ loadIrregular(defaultRules.irregularPairs);
320
329
  /**
321
330
  * Clears the caches for singularize and pluralize.
322
331
  *
332
+ * @summary Empties the cached results of `singularize` and `pluralize` while keeping all inflection rules.
323
333
  * @public
324
334
  * @since 4.13.0
325
335
  */
@@ -330,6 +340,7 @@ function clear() {
330
340
  /**
331
341
  * Resets the inflection rules to the defaults.
332
342
  *
343
+ * @summary Discards all custom inflection rules and caches, then restores the built-in default rules.
333
344
  * @public
334
345
  * @since 4.13.0
335
346
  */
@@ -344,6 +355,7 @@ function resetToDefaults() {
344
355
  * Clears all inflection rules
345
356
  * and resets the caches for singularize and pluralize.
346
357
  *
358
+ * @summary Removes every inflection rule, including the defaults, and empties the `singularize` and `pluralize` caches.
347
359
  * @public
348
360
  * @since 4.13.0
349
361
  */
@@ -359,6 +371,7 @@ function clearRules() {
359
371
  /**
360
372
  * Singularizes a word.
361
373
  *
374
+ * @summary Returns the singular form of an English word using the registered inflection rules, with cached results.
362
375
  * @public
363
376
  * @since 4.13.0
364
377
  */
@@ -369,6 +382,7 @@ function singularize(word) {
369
382
  /**
370
383
  * Pluralizes a word.
371
384
  *
385
+ * @summary Returns the plural form of an English word using the registered inflection rules, with cached results.
372
386
  * @public
373
387
  * @since 4.13.0
374
388
  */
@@ -386,6 +400,7 @@ function unshiftMap(v, map) {
386
400
  /**
387
401
  * Adds a pluralization rule.
388
402
  *
403
+ * @summary Adds a regex and replacement rule that `pluralize` checks before all existing plural rules.
389
404
  * @public
390
405
  * @since 4.13.0
391
406
  */
@@ -396,6 +411,7 @@ function plural(regex, string) {
396
411
  /**
397
412
  * Adds a singularization rule.
398
413
  *
414
+ * @summary Adds a regex and replacement rule that `singularize` checks before all existing singular rules.
399
415
  * @public
400
416
  * @since 4.13.0
401
417
  */
@@ -428,7 +444,6 @@ function inflect(word, typeRules, irregulars) {
428
444
  return word;
429
445
  }
430
446
 
431
- //#endregion
432
447
  exports.camelize = camelize;
433
448
  exports.capitalize = capitalize;
434
449
  exports.clear = clear;
@@ -1 +1 @@
1
- {"version":3,"file":"string.cjs","names":["DEFAULT_MAX_CACHE_SIZE","LRUCache","constructor","doWork","size","state","Map","get","key","value","delete","set","newValue","k","clear","STRING_DASHERIZE_REGEXP","STRING_DECAMELIZE_REGEXP","STRING_DASHERIZE_CACHE","replace","toLowerCase","dasherize","str","internalDasherize","LRUCache","defaultRules","capitalize","BLANK_REGEX","LAST_WORD_DASHED_REGEX","LAST_WORD_CAMELIZED_REGEX","CAMELIZED_REGEX","SINGULARS","word","_singularize","PLURALS","_pluralize","UNCOUNTABLE","Set","uncountable","IRREGULAR","Map","INVERSE_IRREGULAR","SINGULAR_RULES","singular","reverse","PLURAL_RULES","plurals","add","toLowerCase","loadUncountable","uncountables","forEach","irregular","single","plur","set","loadIrregular","irregularPairs","pair","clear","resetToDefaults","clearRules","v","singularize","get","pluralize","unshiftMap","map","rules","entries","rule","plural","regex","string","has","delete","inflect","typeRules","irregulars","isBlank","test","lowercase","wordSplit","exec","lastWord","isCamelized","substitution","match","replace","RegExp"],"sources":["../../../node_modules/.pnpm/@warp-d_5e1563e0e582c8365bb74466d3761d6d/node_modules/@warp-drive-mirror/core/dist/utils/string.js","../src/-private/string/inflections.ts","../src/-private/string/transform.ts","../src/-private/string/inflect.ts"],"sourcesContent":["import { DEBUG } from '@warp-drive-mirror/core/build-config/env';\n\nconst DEFAULT_MAX_CACHE_SIZE = 10_000;\n\n/**\n * An LRUCache implementation with upsert semantics.\n *\n * This implementation is *not* generic, but focuses on\n * performance tuning for the string transformation cases\n * where the key maps to the value very simply.\n *\n * It takes a work function that should generate a new value\n * for a given key when called. It will be called when the key\n * is not found in the cache.\n *\n * It keeps track of the number of hits, misses, and ejections\n * in DEBUG envs, which is useful for tuning the cache size.\n *\n * This is an internal utility class for use by this module\n * and by `@warp-drive-mirror/utilities/string`. It is not intended\n * for use outside of these modules at this time.\n *\n * @private\n */\nexport class LRUCache<T, V> {\n declare size: number;\n declare state: Map<T, V>;\n declare doWork: (k: T) => V;\n\n // debug stats\n declare _hits: number;\n declare _misses: number;\n declare _ejected: number;\n\n constructor(doWork: (k: T) => V, size?: number) {\n this.size = size || DEFAULT_MAX_CACHE_SIZE;\n this.state = new Map();\n this.doWork = doWork;\n\n if (DEBUG) {\n this._hits = 0;\n this._misses = 0;\n this._ejected = 0;\n }\n }\n\n get(key: T): V {\n const value = this.state.get(key);\n if (value) {\n if (DEBUG) {\n this._hits++;\n }\n this.state.delete(key);\n this.state.set(key, value);\n return value;\n }\n if (DEBUG) {\n this._misses++;\n }\n\n const newValue = this.doWork(key);\n this.set(key, newValue);\n return newValue;\n }\n\n set(key: T, value: V): void {\n if (this.state.size === this.size) {\n for (const [k] of this.state) {\n if (DEBUG) {\n this._ejected++;\n }\n this.state.delete(k);\n break;\n }\n }\n this.state.set(key, value);\n }\n\n clear(): void {\n this.state.clear();\n if (DEBUG) {\n this._hits = 0;\n this._misses = 0;\n this._ejected = 0;\n }\n }\n}\n\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\n/**\n * The {@link LRUCache} backing {@link dasherize}, keyed by the original\n * (un-dasherized) string.\n *\n * @private\n */\nexport const STRING_DASHERIZE_CACHE: LRUCache<string, string> = new LRUCache<string, string>((key: string) =>\n key.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase().replace(STRING_DASHERIZE_REGEXP, '-')\n);\n\n/**\n * This is an internal utility function that converts a string\n * to a dasherized format. Library consumers should use the\n * re-exported version from `@warp-drive-mirror/utilities/string` instead.\n *\n * This version is only in this location to support a deprecated\n * behavior in the core package and will be removed in a future.\n *\n * @private\n */\nexport function dasherize(str: string): string {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n","export type RulesArray = Array<[RegExp, string]>;\ntype DefaultRulesType = {\n plurals: RulesArray;\n singular: RulesArray;\n irregularPairs: Array<[string, string]>;\n uncountable: string[];\n};\n\nexport const defaultRules: DefaultRulesType = {\n plurals: [\n [/$/, 's'],\n [/s$/i, 's'],\n [/^(ax|test)is$/i, '$1es'],\n [/(octop|vir)us$/i, '$1i'],\n [/(octop|vir)i$/i, '$1i'],\n [/(alias|status|bonus)$/i, '$1es'],\n [/(tu|bu)s$/i, '$1ses'],\n [/(buffal|tomat)o$/i, '$1oes'],\n [/([ti])um$/i, '$1a'],\n [/([ti])a$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:([^f])fe|([lr])f)$/i, '$1$2ves'],\n [/(hive)$/i, '$1s'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/(x|ch|ss|sh)$/i, '$1es'],\n [/(matr|vert|ind)(?:ix|ex)$/i, '$1ices'],\n [/^(m|l)ouse$/i, '$1ice'],\n [/^(m|l)ice$/i, '$1ice'],\n [/^(ox)$/i, '$1en'],\n [/^(oxen)$/i, '$1'],\n [/(quiz)$/i, '$1zes'],\n ],\n\n singular: [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, '$1sis'],\n [/(^analy)(sis|ses)$/i, '$1sis'],\n [/([^f])ves$/i, '$1fe'],\n [/(hive)s$/i, '$1'],\n [/(tive)s$/i, '$1'],\n [/([lr])ves$/i, '$1f'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/(x|ch|ss|sh)es$/i, '$1'],\n [/^(m|l)ice$/i, '$1ouse'],\n [/(tus|bus)(es)?$/i, '$1'],\n [/(o)es$/i, '$1'],\n [/(shoe)s$/i, '$1'],\n [/(cris|test)(is|es)$/i, '$1is'],\n [/^(a)x[ie]s$/i, '$1xis'],\n [/(octop|vir)(us|i)$/i, '$1us'],\n [/(alias|status|bonus)(es)?$/i, '$1'],\n [/^(ox)en/i, '$1'],\n [/(vert|ind)ices$/i, '$1ex'],\n [/(matr)ices$/i, '$1ix'],\n [/(quiz)zes$/i, '$1'],\n [/(database)s$/i, '$1'],\n ],\n\n irregularPairs: [\n ['person', 'people'],\n ['man', 'men'],\n ['child', 'children'],\n ['sex', 'sexes'],\n ['move', 'moves'],\n ['cow', 'kine'],\n ['zombie', 'zombies'],\n ],\n\n uncountable: ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'jeans', 'police'],\n};\n","import { dasherize as internalDasherize, LRUCache, STRING_DASHERIZE_CACHE } from '@warp-drive-mirror/core/utils/string';\n\n// oxlint-disable-next-line no-useless-escape\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\nconst CAMELIZE_CACHE = new LRUCache<string, string>((key: string) =>\n key\n .replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr: string | null) => (chr ? chr.toUpperCase() : ''))\n .replace(STRING_CAMELIZE_REGEXP_2, (match /*, separator, chr */) => match.toLowerCase())\n);\n\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\n// oxlint-disable-next-line no-useless-escape\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new LRUCache<string, string>((str: string) =>\n str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase()\n);\n\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\nconst CAPITALIZE_CACHE = new LRUCache<string, string>((str: string) =>\n str.replace(STRING_CAPITALIZE_REGEXP, (match /*, separator, chr */) => match.toUpperCase())\n);\n\n/**\n * Replaces underscores, spaces, or camelCase with dashes.\n *\n * ```js\n * import { dasherize } from '@warp-drive-mirror/utilities/string';\n *\n * dasherize('innerHTML'); // 'inner-html'\n * dasherize('action_name'); // 'action-name'\n * dasherize('css-class-name'); // 'css-class-name'\n * dasherize('my favorite items'); // 'my-favorite-items'\n * dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n * ```\n *\n * @public\n * @since 4.13.0\n */\nexport const dasherize: (str: string) => string = internalDasherize;\n\n/**\n * Returns the lowerCamelCase form of a string.\n *\n * ```js\n * import { camelize } from '@warp-drive-mirror/utilities/string';\n *\n * camelize('innerHTML'); // 'innerHTML'\n * camelize('action_name'); // 'actionName'\n * camelize('css-class-name'); // 'cssClassName'\n * camelize('my favorite items'); // 'myFavoriteItems'\n * camelize('My Favorite Items'); // 'myFavoriteItems'\n * camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'\n * ```\n *\n * @public\n * @since 4.13.0\n */\nexport function camelize(str: string): string {\n return CAMELIZE_CACHE.get(str);\n}\n\n/**\n * Returns the lower\\_case\\_and\\_underscored form of a string.\n *\n * ```js\n * import { underscore } from '@warp-drive-mirror/utilities/string';\n *\n * underscore('innerHTML'); // 'inner_html'\n * underscore('action_name'); // 'action_name'\n * underscore('css-class-name'); // 'css_class_name'\n * underscore('my favorite items'); // 'my_favorite_items'\n * underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n * ```\n *\n * @public\n * @since 4.13.0\n */\nexport function underscore(str: string): string {\n return UNDERSCORE_CACHE.get(str);\n}\n\n/**\n * Returns the Capitalized form of a string\n *\n * ```js\n * import { capitalize } from '@warp-drive-mirror/utilities/string';\n *\n * capitalize('innerHTML') // 'InnerHTML'\n * capitalize('action_name') // 'Action_name'\n * capitalize('css-class-name') // 'Css-class-name'\n * capitalize('my favorite items') // 'My favorite items'\n * capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n * ```\n *\n * @public\n * @since 4.13.0\n */\nexport function capitalize(str: string): string {\n return CAPITALIZE_CACHE.get(str);\n}\n\n/**\n * Sets the maximum size of the LRUCache for all string transformation functions.\n * The default size is 10,000.\n *\n * @public\n * @since 4.13.0\n */\nexport function setMaxLRUCacheSize(size: number): void {\n CAMELIZE_CACHE.size = size;\n UNDERSCORE_CACHE.size = size;\n CAPITALIZE_CACHE.size = size;\n STRING_DASHERIZE_CACHE.size = size;\n}\n","import { assert } from '@warp-drive-mirror/core/build-config/macros';\nimport { LRUCache } from '@warp-drive-mirror/core/utils/string';\n\nimport { defaultRules } from './inflections.ts';\nimport { capitalize } from './transform.ts';\n\nconst BLANK_REGEX = /^\\s*$/;\nconst LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\nconst LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\nconst CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\n\nconst SINGULARS = new LRUCache<string, string>((word: string) => {\n return _singularize(word);\n});\nconst PLURALS = new LRUCache<string, string>((word: string) => {\n return _pluralize(word);\n});\nconst UNCOUNTABLE = new Set(defaultRules.uncountable);\nconst IRREGULAR: Map<string, string> = new Map();\nconst INVERSE_IRREGULAR: Map<string, string> = new Map();\nconst SINGULAR_RULES = new Map(defaultRules.singular.reverse());\nconst PLURAL_RULES = new Map(defaultRules.plurals.reverse());\n\n/**\n * Marks a word as uncountable. Uncountable words are not pluralized\n * or singularized.\n *\n * @public\n * @since 4.13.0\n */\nexport function uncountable(word: string): void {\n UNCOUNTABLE.add(word.toLowerCase());\n}\n\n/**\n * Marks a list of words as uncountable. Uncountable words are not pluralized\n * or singularized.\n *\n * @public\n * @since 4.13.0\n */\nexport function loadUncountable(uncountables: string[]): void {\n uncountables.forEach((word) => {\n uncountable(word);\n });\n}\n\n/**\n * Marks a word as irregular. Irregular words have unique\n * pluralization and singularization rules.\n *\n * @public\n * @since 4.13.0\n */\nexport function irregular(single: string, plur: string): void {\n //pluralizing\n IRREGULAR.set(single.toLowerCase(), plur);\n IRREGULAR.set(plur.toLowerCase(), plur);\n\n //singularizing\n INVERSE_IRREGULAR.set(plur.toLowerCase(), single);\n INVERSE_IRREGULAR.set(single.toLowerCase(), single);\n}\n\n/**\n * Marks a list of word pairs as irregular. Irregular words have unique\n * pluralization and singularization rules.\n *\n * @public\n * @since 4.13.0\n */\nexport function loadIrregular(irregularPairs: Array<[string, string]>): void {\n irregularPairs.forEach((pair) => {\n //pluralizing\n IRREGULAR.set(pair[0].toLowerCase(), pair[1]);\n IRREGULAR.set(pair[1].toLowerCase(), pair[1]);\n\n //singularizing\n INVERSE_IRREGULAR.set(pair[1].toLowerCase(), pair[0]);\n INVERSE_IRREGULAR.set(pair[0].toLowerCase(), pair[0]);\n });\n}\nloadIrregular(defaultRules.irregularPairs);\n\n/**\n * Clears the caches for singularize and pluralize.\n *\n * @public\n * @since 4.13.0\n */\nexport function clear(): void {\n SINGULARS.clear();\n PLURALS.clear();\n}\n\n/**\n * Resets the inflection rules to the defaults.\n *\n * @public\n * @since 4.13.0\n */\nexport function resetToDefaults(): void {\n clearRules();\n defaultRules.uncountable.forEach((v) => UNCOUNTABLE.add(v));\n defaultRules.singular.forEach((v) => SINGULAR_RULES.set(v[0], v[1]));\n defaultRules.plurals.forEach((v) => PLURAL_RULES.set(v[0], v[1]));\n loadIrregular(defaultRules.irregularPairs);\n}\n\n/**\n * Clears all inflection rules\n * and resets the caches for singularize and pluralize.\n *\n * @public\n * @since 4.13.0\n */\nexport function clearRules(): void {\n SINGULARS.clear();\n PLURALS.clear();\n UNCOUNTABLE.clear();\n IRREGULAR.clear();\n INVERSE_IRREGULAR.clear();\n SINGULAR_RULES.clear();\n PLURAL_RULES.clear();\n}\n\n/**\n * Singularizes a word.\n *\n * @public\n * @since 4.13.0\n */\nexport function singularize(word: string): string {\n assert(`singularize expects to receive a non-empty string`, typeof word === 'string' && word.length > 0);\n if (!word) return '';\n return SINGULARS.get(word);\n}\n\n/**\n * Pluralizes a word.\n *\n * @public\n * @since 4.13.0\n */\nexport function pluralize(word: string): string {\n assert(`pluralize expects to receive a non-empty string`, typeof word === 'string' && word.length > 0);\n if (!word) return '';\n return PLURALS.get(word);\n}\n\nfunction unshiftMap<K, V>(v: [K, V], map: Map<K, V>) {\n // reorder\n const rules = [v, ...map.entries()];\n map.clear();\n rules.forEach((rule) => {\n map.set(rule[0], rule[1]);\n });\n}\n\n/**\n * Adds a pluralization rule.\n *\n * @public\n * @since 4.13.0\n */\nexport function plural(regex: RegExp, string: string): void {\n // rule requires reordering if exists, so remove it first\n if (PLURAL_RULES.has(regex)) {\n PLURAL_RULES.delete(regex);\n }\n\n // reorder\n unshiftMap([regex, string], PLURAL_RULES);\n}\n\n/**\n * Adds a singularization rule.\n *\n * @public\n * @since 4.13.0\n */\nexport function singular(regex: RegExp, string: string): void {\n // rule requires reordering if exists, so remove it first\n if (SINGULAR_RULES.has(regex)) {\n SINGULAR_RULES.delete(regex);\n }\n\n // reorder\n unshiftMap([regex, string], SINGULAR_RULES);\n}\n\nfunction _pluralize(word: string) {\n return inflect(word, PLURAL_RULES, IRREGULAR);\n}\n\nfunction _singularize(word: string) {\n return inflect(word, SINGULAR_RULES, INVERSE_IRREGULAR);\n}\n\nfunction inflect(word: string, typeRules: Map<RegExp, string>, irregulars: Map<string, string>) {\n // empty strings\n const isBlank = !word || BLANK_REGEX.test(word);\n if (isBlank) {\n return word;\n }\n\n // basic uncountables\n const lowercase = word.toLowerCase();\n if (UNCOUNTABLE.has(lowercase)) {\n return word;\n }\n\n // adv uncountables\n const wordSplit = LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n const lastWord = wordSplit ? wordSplit[2].toLowerCase() : null;\n if (lastWord && UNCOUNTABLE.has(lastWord)) {\n return word;\n }\n\n // handle irregulars\n const isCamelized = CAMELIZED_REGEX.test(word);\n for (let [rule, substitution] of irregulars) {\n if (lowercase.match(rule + '$')) {\n if (isCamelized && lastWord && irregulars.has(lastWord)) {\n substitution = capitalize(substitution);\n rule = capitalize(rule);\n }\n\n return word.replace(new RegExp(rule, 'i'), substitution);\n }\n }\n\n // do the actual inflection\n for (const [rule, substitution] of typeRules) {\n if (rule.test(word)) {\n return word.replace(rule, substitution);\n }\n }\n\n return word;\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"string.cjs","names":["DEFAULT_MAX_CACHE_SIZE","LRUCache","constructor","doWork","size","state","Map","get","key","value","delete","set","newValue","k","clear","STRING_DASHERIZE_REGEXP","STRING_DECAMELIZE_REGEXP","STRING_DASHERIZE_CACHE","replace","toLowerCase","dasherize","str","dasherize","internalDasherize","LRUCache","defaultRules","capitalize","BLANK_REGEX","LAST_WORD_DASHED_REGEX","LAST_WORD_CAMELIZED_REGEX","CAMELIZED_REGEX","SINGULARS","word","_singularize","PLURALS","_pluralize","UNCOUNTABLE","Set","uncountable","IRREGULAR","Map","INVERSE_IRREGULAR","SINGULAR_RULES","singular","reverse","PLURAL_RULES","plurals","add","toLowerCase","loadUncountable","uncountables","forEach","irregular","single","plur","set","loadIrregular","irregularPairs","pair","clear","resetToDefaults","clearRules","v","singularize","get","pluralize","unshiftMap","map","rules","entries","rule","plural","regex","string","has","delete","inflect","typeRules","irregulars","isBlank","test","lowercase","wordSplit","exec","lastWord","isCamelized","substitution","match","replace","RegExp"],"sources":["../../../node_modules/.pnpm/@warp-d_5e1563e0e582c8365bb74466d3761d6d/node_modules/@warp-drive-mirror/core/dist/utils/string.js","../src/-private/string/inflections.ts","../src/-private/string/transform.ts","../src/-private/string/inflect.ts"],"sourcesContent":["import { DEBUG } from '@warp-drive-mirror/core/build-config/env';\n\nconst DEFAULT_MAX_CACHE_SIZE = 10_000;\n\n/**\n * An LRUCache implementation with upsert semantics.\n *\n * This implementation is *not* generic, but focuses on\n * performance tuning for the string transformation cases\n * where the key maps to the value very simply.\n *\n * It takes a work function that should generate a new value\n * for a given key when called. It will be called when the key\n * is not found in the cache.\n *\n * It keeps track of the number of hits, misses, and ejections\n * in DEBUG envs, which is useful for tuning the cache size.\n *\n * This is an internal utility class for use by this module\n * and by `@warp-drive-mirror/utilities/string`. It is not intended\n * for use outside of these modules at this time.\n *\n * @private\n */\nexport class LRUCache<T, V> {\n declare size: number;\n declare state: Map<T, V>;\n declare doWork: (k: T) => V;\n\n // debug stats\n declare _hits: number;\n declare _misses: number;\n declare _ejected: number;\n\n constructor(doWork: (k: T) => V, size?: number) {\n this.size = size || DEFAULT_MAX_CACHE_SIZE;\n this.state = new Map();\n this.doWork = doWork;\n\n if (DEBUG) {\n this._hits = 0;\n this._misses = 0;\n this._ejected = 0;\n }\n }\n\n get(key: T): V {\n const value = this.state.get(key);\n if (value) {\n if (DEBUG) {\n this._hits++;\n }\n this.state.delete(key);\n this.state.set(key, value);\n return value;\n }\n if (DEBUG) {\n this._misses++;\n }\n\n const newValue = this.doWork(key);\n this.set(key, newValue);\n return newValue;\n }\n\n set(key: T, value: V): void {\n if (this.state.size === this.size) {\n for (const [k] of this.state) {\n if (DEBUG) {\n this._ejected++;\n }\n this.state.delete(k);\n break;\n }\n }\n this.state.set(key, value);\n }\n\n clear(): void {\n this.state.clear();\n if (DEBUG) {\n this._hits = 0;\n this._misses = 0;\n this._ejected = 0;\n }\n }\n}\n\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\n/**\n * The {@link LRUCache} backing {@link dasherize}, keyed by the original\n * (un-dasherized) string.\n *\n * @private\n */\nexport const STRING_DASHERIZE_CACHE: LRUCache<string, string> = new LRUCache<string, string>((key: string) =>\n key.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase().replace(STRING_DASHERIZE_REGEXP, '-')\n);\n\n/**\n * This is an internal utility function that converts a string\n * to a dasherized format. Library consumers should use the\n * re-exported version from `@warp-drive-mirror/utilities/string` instead.\n *\n * This version is only in this location to support a deprecated\n * behavior in the core package and will be removed in a future.\n *\n * @private\n */\nexport function dasherize(str: string): string {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n","export type RulesArray = Array<[RegExp, string]>;\ntype DefaultRulesType = {\n plurals: RulesArray;\n singular: RulesArray;\n irregularPairs: Array<[string, string]>;\n uncountable: string[];\n};\n\nexport const defaultRules: DefaultRulesType = {\n plurals: [\n [/$/, 's'],\n [/s$/i, 's'],\n [/^(ax|test)is$/i, '$1es'],\n [/(octop|vir)us$/i, '$1i'],\n [/(octop|vir)i$/i, '$1i'],\n [/(alias|status|bonus)$/i, '$1es'],\n [/(tu|bu)s$/i, '$1ses'],\n [/(buffal|tomat)o$/i, '$1oes'],\n [/([ti])um$/i, '$1a'],\n [/([ti])a$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:([^f])fe|([lr])f)$/i, '$1$2ves'],\n [/(hive)$/i, '$1s'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/(x|ch|ss|sh)$/i, '$1es'],\n [/(matr|vert|ind)(?:ix|ex)$/i, '$1ices'],\n [/^(m|l)ouse$/i, '$1ice'],\n [/^(m|l)ice$/i, '$1ice'],\n [/^(ox)$/i, '$1en'],\n [/^(oxen)$/i, '$1'],\n [/(quiz)$/i, '$1zes'],\n ],\n\n singular: [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, '$1sis'],\n [/(^analy)(sis|ses)$/i, '$1sis'],\n [/([^f])ves$/i, '$1fe'],\n [/(hive)s$/i, '$1'],\n [/(tive)s$/i, '$1'],\n [/([lr])ves$/i, '$1f'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/(x|ch|ss|sh)es$/i, '$1'],\n [/^(m|l)ice$/i, '$1ouse'],\n [/(tus|bus)(es)?$/i, '$1'],\n [/(o)es$/i, '$1'],\n [/(shoe)s$/i, '$1'],\n [/(cris|test)(is|es)$/i, '$1is'],\n [/^(a)x[ie]s$/i, '$1xis'],\n [/(octop|vir)(us|i)$/i, '$1us'],\n [/(alias|status|bonus)(es)?$/i, '$1'],\n [/^(ox)en/i, '$1'],\n [/(vert|ind)ices$/i, '$1ex'],\n [/(matr)ices$/i, '$1ix'],\n [/(quiz)zes$/i, '$1'],\n [/(database)s$/i, '$1'],\n ],\n\n irregularPairs: [\n ['person', 'people'],\n ['man', 'men'],\n ['child', 'children'],\n ['sex', 'sexes'],\n ['move', 'moves'],\n ['cow', 'kine'],\n ['zombie', 'zombies'],\n ],\n\n uncountable: ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'jeans', 'police'],\n};\n","import { dasherize as internalDasherize, LRUCache, STRING_DASHERIZE_CACHE } from '@warp-drive-mirror/core/utils/string';\n\n// oxlint-disable-next-line no-useless-escape\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\nconst CAMELIZE_CACHE = new LRUCache<string, string>((key: string) =>\n key\n .replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr: string | null) => (chr ? chr.toUpperCase() : ''))\n .replace(STRING_CAMELIZE_REGEXP_2, (match /*, separator, chr */) => match.toLowerCase())\n);\n\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\n// oxlint-disable-next-line no-useless-escape\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new LRUCache<string, string>((str: string) =>\n str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase()\n);\n\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\nconst CAPITALIZE_CACHE = new LRUCache<string, string>((str: string) =>\n str.replace(STRING_CAPITALIZE_REGEXP, (match /*, separator, chr */) => match.toUpperCase())\n);\n\n/**\n * Replaces underscores, spaces, or camelCase with dashes.\n *\n * ```js\n * import { dasherize } from '@warp-drive-mirror/utilities/string';\n *\n * dasherize('innerHTML'); // 'inner-html'\n * dasherize('action_name'); // 'action-name'\n * dasherize('css-class-name'); // 'css-class-name'\n * dasherize('my favorite items'); // 'my-favorite-items'\n * dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n * ```\n *\n * @summary Converts camelCase, underscored, or spaced strings to dasherized form, such as `innerHTML` to `inner-html`.\n * @public\n * @since 4.13.0\n */\nexport const dasherize: (str: string) => string = internalDasherize;\n\n/**\n * Returns the lowerCamelCase form of a string.\n *\n * ```js\n * import { camelize } from '@warp-drive-mirror/utilities/string';\n *\n * camelize('innerHTML'); // 'innerHTML'\n * camelize('action_name'); // 'actionName'\n * camelize('css-class-name'); // 'cssClassName'\n * camelize('my favorite items'); // 'myFavoriteItems'\n * camelize('My Favorite Items'); // 'myFavoriteItems'\n * camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'\n * ```\n *\n * @summary Converts dashed, underscored, dotted, or spaced strings to lowerCamelCase, such as `action_name` to\n * `actionName`.\n * @public\n * @since 4.13.0\n */\nexport function camelize(str: string): string {\n return CAMELIZE_CACHE.get(str);\n}\n\n/**\n * Returns the lower\\_case\\_and\\_underscored form of a string.\n *\n * ```js\n * import { underscore } from '@warp-drive-mirror/utilities/string';\n *\n * underscore('innerHTML'); // 'inner_html'\n * underscore('action_name'); // 'action_name'\n * underscore('css-class-name'); // 'css_class_name'\n * underscore('my favorite items'); // 'my_favorite_items'\n * underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n * ```\n *\n * @summary Converts camelCase, dashed, or spaced strings to lowercase snake_case, such as `innerHTML` to `inner_html`.\n * @public\n * @since 4.13.0\n */\nexport function underscore(str: string): string {\n return UNDERSCORE_CACHE.get(str);\n}\n\n/**\n * Returns the Capitalized form of a string\n *\n * ```js\n * import { capitalize } from '@warp-drive-mirror/utilities/string';\n *\n * capitalize('innerHTML') // 'InnerHTML'\n * capitalize('action_name') // 'Action_name'\n * capitalize('css-class-name') // 'Css-class-name'\n * capitalize('my favorite items') // 'My favorite items'\n * capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n * ```\n *\n * @summary Uppercases the first letter of a string, and of each `/`-separated path segment, leaving the rest unchanged.\n * @public\n * @since 4.13.0\n */\nexport function capitalize(str: string): string {\n return CAPITALIZE_CACHE.get(str);\n}\n\n/**\n * Sets the maximum size of the LRUCache for all string transformation functions.\n * The default size is 10,000.\n *\n * @summary Sets how many results the `camelize`, `underscore`, `capitalize`, and `dasherize` caches each keep (default\n * 10,000).\n * @public\n * @since 4.13.0\n */\nexport function setMaxLRUCacheSize(size: number): void {\n CAMELIZE_CACHE.size = size;\n UNDERSCORE_CACHE.size = size;\n CAPITALIZE_CACHE.size = size;\n STRING_DASHERIZE_CACHE.size = size;\n}\n","import { assert } from '@warp-drive-mirror/core/build-config/macros';\nimport { LRUCache } from '@warp-drive-mirror/core/utils/string';\n\nimport { defaultRules } from './inflections.ts';\nimport { capitalize } from './transform.ts';\n\nconst BLANK_REGEX = /^\\s*$/;\nconst LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\nconst LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\nconst CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\n\nconst SINGULARS = new LRUCache<string, string>((word: string) => {\n return _singularize(word);\n});\nconst PLURALS = new LRUCache<string, string>((word: string) => {\n return _pluralize(word);\n});\nconst UNCOUNTABLE = new Set(defaultRules.uncountable);\nconst IRREGULAR: Map<string, string> = new Map();\nconst INVERSE_IRREGULAR: Map<string, string> = new Map();\nconst SINGULAR_RULES = new Map(defaultRules.singular.reverse());\nconst PLURAL_RULES = new Map(defaultRules.plurals.reverse());\n\n/**\n * Marks a word as uncountable. Uncountable words are not pluralized\n * or singularized.\n *\n * @summary Registers a word that `pluralize` and `singularize` should always return unchanged.\n * @public\n * @since 4.13.0\n */\nexport function uncountable(word: string): void {\n UNCOUNTABLE.add(word.toLowerCase());\n}\n\n/**\n * Marks a list of words as uncountable. Uncountable words are not pluralized\n * or singularized.\n *\n * @summary Registers a list of words that `pluralize` and `singularize` should always return unchanged.\n * @public\n * @since 4.13.0\n */\nexport function loadUncountable(uncountables: string[]): void {\n uncountables.forEach((word) => {\n uncountable(word);\n });\n}\n\n/**\n * Marks a word as irregular. Irregular words have unique\n * pluralization and singularization rules.\n *\n * @summary Registers a singular and plural word pair that `pluralize` and `singularize` map directly instead of\n * applying rules.\n * @public\n * @since 4.13.0\n */\nexport function irregular(single: string, plur: string): void {\n //pluralizing\n IRREGULAR.set(single.toLowerCase(), plur);\n IRREGULAR.set(plur.toLowerCase(), plur);\n\n //singularizing\n INVERSE_IRREGULAR.set(plur.toLowerCase(), single);\n INVERSE_IRREGULAR.set(single.toLowerCase(), single);\n}\n\n/**\n * Marks a list of word pairs as irregular. Irregular words have unique\n * pluralization and singularization rules.\n *\n * @summary Registers a list of singular and plural word pairs that `pluralize` and `singularize` map directly.\n * @public\n * @since 4.13.0\n */\nexport function loadIrregular(irregularPairs: Array<[string, string]>): void {\n irregularPairs.forEach((pair) => {\n //pluralizing\n IRREGULAR.set(pair[0].toLowerCase(), pair[1]);\n IRREGULAR.set(pair[1].toLowerCase(), pair[1]);\n\n //singularizing\n INVERSE_IRREGULAR.set(pair[1].toLowerCase(), pair[0]);\n INVERSE_IRREGULAR.set(pair[0].toLowerCase(), pair[0]);\n });\n}\nloadIrregular(defaultRules.irregularPairs);\n\n/**\n * Clears the caches for singularize and pluralize.\n *\n * @summary Empties the cached results of `singularize` and `pluralize` while keeping all inflection rules.\n * @public\n * @since 4.13.0\n */\nexport function clear(): void {\n SINGULARS.clear();\n PLURALS.clear();\n}\n\n/**\n * Resets the inflection rules to the defaults.\n *\n * @summary Discards all custom inflection rules and caches, then restores the built-in default rules.\n * @public\n * @since 4.13.0\n */\nexport function resetToDefaults(): void {\n clearRules();\n defaultRules.uncountable.forEach((v) => UNCOUNTABLE.add(v));\n defaultRules.singular.forEach((v) => SINGULAR_RULES.set(v[0], v[1]));\n defaultRules.plurals.forEach((v) => PLURAL_RULES.set(v[0], v[1]));\n loadIrregular(defaultRules.irregularPairs);\n}\n\n/**\n * Clears all inflection rules\n * and resets the caches for singularize and pluralize.\n *\n * @summary Removes every inflection rule, including the defaults, and empties the `singularize` and `pluralize` caches.\n * @public\n * @since 4.13.0\n */\nexport function clearRules(): void {\n SINGULARS.clear();\n PLURALS.clear();\n UNCOUNTABLE.clear();\n IRREGULAR.clear();\n INVERSE_IRREGULAR.clear();\n SINGULAR_RULES.clear();\n PLURAL_RULES.clear();\n}\n\n/**\n * Singularizes a word.\n *\n * @summary Returns the singular form of an English word using the registered inflection rules, with cached results.\n * @public\n * @since 4.13.0\n */\nexport function singularize(word: string): string {\n assert(`singularize expects to receive a non-empty string`, typeof word === 'string' && word.length > 0);\n if (!word) return '';\n return SINGULARS.get(word);\n}\n\n/**\n * Pluralizes a word.\n *\n * @summary Returns the plural form of an English word using the registered inflection rules, with cached results.\n * @public\n * @since 4.13.0\n */\nexport function pluralize(word: string): string {\n assert(`pluralize expects to receive a non-empty string`, typeof word === 'string' && word.length > 0);\n if (!word) return '';\n return PLURALS.get(word);\n}\n\nfunction unshiftMap<K, V>(v: [K, V], map: Map<K, V>) {\n // reorder\n const rules = [v, ...map.entries()];\n map.clear();\n rules.forEach((rule) => {\n map.set(rule[0], rule[1]);\n });\n}\n\n/**\n * Adds a pluralization rule.\n *\n * @summary Adds a regex and replacement rule that `pluralize` checks before all existing plural rules.\n * @public\n * @since 4.13.0\n */\nexport function plural(regex: RegExp, string: string): void {\n // rule requires reordering if exists, so remove it first\n if (PLURAL_RULES.has(regex)) {\n PLURAL_RULES.delete(regex);\n }\n\n // reorder\n unshiftMap([regex, string], PLURAL_RULES);\n}\n\n/**\n * Adds a singularization rule.\n *\n * @summary Adds a regex and replacement rule that `singularize` checks before all existing singular rules.\n * @public\n * @since 4.13.0\n */\nexport function singular(regex: RegExp, string: string): void {\n // rule requires reordering if exists, so remove it first\n if (SINGULAR_RULES.has(regex)) {\n SINGULAR_RULES.delete(regex);\n }\n\n // reorder\n unshiftMap([regex, string], SINGULAR_RULES);\n}\n\nfunction _pluralize(word: string) {\n return inflect(word, PLURAL_RULES, IRREGULAR);\n}\n\nfunction _singularize(word: string) {\n return inflect(word, SINGULAR_RULES, INVERSE_IRREGULAR);\n}\n\nfunction inflect(word: string, typeRules: Map<RegExp, string>, irregulars: Map<string, string>) {\n // empty strings\n const isBlank = !word || BLANK_REGEX.test(word);\n if (isBlank) {\n return word;\n }\n\n // basic uncountables\n const lowercase = word.toLowerCase();\n if (UNCOUNTABLE.has(lowercase)) {\n return word;\n }\n\n // adv uncountables\n const wordSplit = LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n const lastWord = wordSplit ? wordSplit[2].toLowerCase() : null;\n if (lastWord && UNCOUNTABLE.has(lastWord)) {\n return word;\n }\n\n // handle irregulars\n const isCamelized = CAMELIZED_REGEX.test(word);\n for (let [rule, substitution] of irregulars) {\n if (lowercase.match(rule + '$')) {\n if (isCamelized && lastWord && irregulars.has(lastWord)) {\n substitution = capitalize(substitution);\n rule = capitalize(rule);\n }\n\n return word.replace(new RegExp(rule, 'i'), substitution);\n }\n }\n\n // do the actual inflection\n for (const [rule, substitution] of typeRules) {\n if (rule.test(word)) {\n return word.replace(rule, substitution);\n }\n }\n\n return word;\n}\n"],"ignoreList":[0],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- //#region src/-private/string/inflections.d.ts
2
1
  type RulesArray = Array<[RegExp, string]>;
3
2
  type DefaultRulesType = {
4
3
  plurals: RulesArray;
@@ -7,6 +6,5 @@ type DefaultRulesType = {
7
6
  uncountable: string[];
8
7
  };
9
8
  declare const defaultRules: DefaultRulesType;
10
- //#endregion
11
9
  export { defaultRules as InflectionRuleDefaults };
12
10
  //# sourceMappingURL=-private.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"-private.d.ts","names":[],"sources":["../src/-private/string/inflections.ts"],"mappings":";KAAY,aAAa,OAAO;KAC3B;EACH,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB;;cAGW,cAAc"}
1
+ {"version":3,"file":"-private.d.ts","names":[],"sources":["../src/-private/string/inflections.ts"],"mappings":"A,KAAY,aAAa,OAAO;KAC3B;EACH,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB;;cAGW,cAAc"}
package/dist/-private.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as defaultRules } from "./inflections-DzBsjJqj.js";
1
+ import { t as defaultRules } from "./inflections-CWdUh2K_.js";
2
2
 
3
3
  export { defaultRules as InflectionRuleDefaults };
@@ -3,11 +3,13 @@ import { TypeFromInstance, TypedRecordInstance } from "@warp-drive-mirror/core/t
3
3
  import { ConstrainedRequestOptions, CreateRequestOptions, DeleteRequestOptions, FindRecordOptions, FindRecordRequestOptions, QueryRequestOptions, RemotelyAccessibleIdentifier, UpdateRequestOptions } from "@warp-drive-mirror/core/types/request";
4
4
  import { Meta } from "@warp-drive-mirror/core/types/spec/json-api-raw";
5
5
  import { QueryParamsSource } from "@warp-drive-mirror/core/types/params";
6
- //#region src/-private/active-record/find-record.d.ts
7
6
  /**
8
7
  * Builds request options to fetch a single resource by a known id or identifier
9
8
  * configured for the url and header expectations of most ActiveRecord APIs.
10
9
  *
10
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
11
+ * when to use one.
12
+ *
11
13
  * **Basic Usage**
12
14
  *
13
15
  * ```ts
@@ -55,6 +57,8 @@ import { QueryParamsSource } from "@warp-drive-mirror/core/types/params";
55
57
  * const data = await store.request(options);
56
58
  * ```
57
59
  *
60
+ * @summary Builds a `GET` request for one resource by type and id, using ActiveRecord-style pluralized, underscored
61
+ * URLs.
58
62
  * @public
59
63
  * @param identifier
60
64
  * @param options
@@ -63,12 +67,13 @@ export declare function findRecord<T, M extends Meta | undefined = Meta | undefi
63
67
  export declare function findRecord(identifier: RemotelyAccessibleIdentifier, options?: FindRecordOptions): FindRecordRequestOptions;
64
68
  export declare function findRecord<T, M extends Meta | undefined = Meta | undefined, E extends object = object>(type: TypeFromInstance<T>, id: string, options?: FindRecordOptions): FindRecordRequestOptions<ReactiveDataDocument<T, M, E>, T>;
65
69
  export declare function findRecord(type: string, id: string, options?: FindRecordOptions): FindRecordRequestOptions;
66
- //#endregion
67
- //#region src/-private/active-record/query.d.ts
68
70
  /**
69
71
  * Builds request options to query for resources, usually by a primary
70
72
  * type, configured for the url and header expectations of most ActiveRecord APIs.
71
73
  *
74
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
75
+ * when to use one.
76
+ *
72
77
  * **Basic Usage**
73
78
  *
74
79
  * ```ts
@@ -107,6 +112,7 @@ export declare function findRecord(type: string, id: string, options?: FindRecor
107
112
  * const data = await store.request(options);
108
113
  * ```
109
114
  *
115
+ * @summary Builds a `GET` request that queries a resource type with query params, using ActiveRecord-style URLs.
110
116
  * @public
111
117
  * @param identifier
112
118
  * @param query
@@ -114,12 +120,13 @@ export declare function findRecord(type: string, id: string, options?: FindRecor
114
120
  */
115
121
  export declare function query<T, M extends Meta | undefined = Meta | undefined, E extends object = object>(type: TypeFromInstance<T>, query?: QueryParamsSource, options?: ConstrainedRequestOptions): QueryRequestOptions<ReactiveDataDocument<T[], M, E>>;
116
122
  export declare function query(type: string, query?: QueryParamsSource, options?: ConstrainedRequestOptions): QueryRequestOptions;
117
- //#endregion
118
- //#region src/-private/active-record/save-record.d.ts
119
123
  /**
120
124
  * Builds request options to delete record for resources,
121
125
  * configured for the url, method and header expectations of ActiveRecord APIs.
122
126
  *
127
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
128
+ * when to use one.
129
+ *
123
130
  * **Basic Usage**
124
131
  *
125
132
  * ```ts
@@ -161,6 +168,7 @@ export declare function query(type: string, query?: QueryParamsSource, options?:
161
168
  * const data = await store.request(options);
162
169
  * ```
163
170
  *
171
+ * @summary Builds a `DELETE` request that persists deletion of an existing record, using ActiveRecord-style URLs.
164
172
  * @public
165
173
  * @param record
166
174
  * @param options
@@ -171,6 +179,9 @@ export declare function deleteRecord(record: unknown, options?: ConstrainedReque
171
179
  * Builds request options to create new record for resources,
172
180
  * configured for the url, method and header expectations of most ActiveRecord APIs.
173
181
  *
182
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
183
+ * when to use one.
184
+ *
174
185
  * **Basic Usage**
175
186
  *
176
187
  * ```ts
@@ -202,6 +213,7 @@ export declare function deleteRecord(record: unknown, options?: ConstrainedReque
202
213
  * const data = await store.request(options);
203
214
  * ```
204
215
  *
216
+ * @summary Builds a `POST` request that saves a newly created record, using ActiveRecord-style URLs.
205
217
  * @public
206
218
  * @param record
207
219
  * @param options
@@ -212,6 +224,9 @@ export declare function createRecord(record: unknown, options?: ConstrainedReque
212
224
  * Builds request options to update existing record for resources,
213
225
  * configured for the url, method and header expectations of most ActiveRecord APIs.
214
226
  *
227
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
228
+ * when to use one.
229
+ *
215
230
  * **Basic Usage**
216
231
  *
217
232
  * ```ts
@@ -246,6 +261,7 @@ export declare function createRecord(record: unknown, options?: ConstrainedReque
246
261
  * const data = await store.request(options);
247
262
  * ```
248
263
  *
264
+ * @summary Builds a `PUT` (or `PATCH`) request that saves changes to an existing record, using ActiveRecord-style URLs.
249
265
  * @public
250
266
  * @param record
251
267
  * @param options
@@ -256,5 +272,4 @@ export declare function updateRecord<T extends TypedRecordInstance, RT extends T
256
272
  export declare function updateRecord(record: unknown, options?: ConstrainedRequestOptions & {
257
273
  patch?: boolean;
258
274
  }): UpdateRequestOptions;
259
- //#endregion
260
275
  //# sourceMappingURL=active-record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-record.d.ts","names":[],"sources":["../src/-private/active-record/find-record.ts","../src/-private/active-record/query.ts","../src/-private/active-record/save-record.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAoEgB,WAAW,GAAG,UAAU,mBAAmB,kBAAkB,2BAC3E,YAAY,6BAA6B,iBAAiB,KAC1D,UAAU,oBACT,yBAAyB,qBAAqB,GAAG,GAAG,IAAI;wBAC3C,WACd,YAAY,8BACZ,UAAU,oBACT;wBACa,WAAW,GAAG,UAAU,mBAAmB,kBAAkB,2BAC3E,MAAM,iBAAiB,IACvB,YACA,UAAU,oBACT,yBAAyB,qBAAqB,GAAG,GAAG,IAAI;wBAC3C,WAAW,cAAc,YAAY,UAAU,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBCxBnE,MAAM,GAAG,UAAU,mBAAmB,kBAAkB,2BACtE,MAAM,iBAAiB,IACvB,QAAQ,mBACR,UAAU,4BACT,oBAAoB,qBAAqB,KAAK,GAAG;wBACpC,MACd,cACA,QAAQ,mBACR,UAAU,4BACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBCSa,aAAa,GAAG,QAAQ,GAAG,UAAU,4BAA4B,qBAAqB;wBACtF,aAAa,iBAAiB,UAAU,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAqEpE,aAAa,GAAG,QAAQ,GAAG,UAAU,4BAA4B,qBAAqB;wBACtF,aAAa,iBAAiB,UAAU,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAuEpE,aACd,UAAU,qBACV,WAAW,sBAAsB,GACjC,UAAU,mBAAmB,kBAC7B,2BAEA,QAAQ,GACR,UAAU;EAA8B;IACvC,qBAAqB,qBAAqB,IAAI,GAAG,IAAI;wBACxC,aACd,iBACA,UAAU;EAA8B;IACvC"}
1
+ {"version":3,"file":"active-record.d.ts","names":[],"sources":["../src/-private/active-record/find-record.ts","../src/-private/active-record/query.ts","../src/-private/active-record/save-record.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAyEgB,WAAW,GAAG,UAAU,mBAAmB,kBAAkB,2BAC3E,YAAY,6BAA6B,iBAAiB,KAC1D,UAAU,oBACT,yBAAyB,qBAAqB,GAAG,GAAG,IAAI;wBAC3C,WACd,YAAY,8BACZ,UAAU,oBACT;wBACa,WAAW,GAAG,UAAU,mBAAmB,kBAAkB,2BAC3E,MAAM,iBAAiB,IACvB,YACA,UAAU,oBACT,yBAAyB,qBAAqB,GAAG,GAAG,IAAI;wBAC3C,WAAW,cAAc,YAAY,UAAU,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBCzBnE,MAAM,GAAG,UAAU,mBAAmB,kBAAkB,2BACtE,MAAM,iBAAiB,IACvB,QAAQ,mBACR,UAAU,4BACT,oBAAoB,qBAAqB,KAAK,GAAG;wBACpC,MACd,cACA,QAAQ,mBACR,UAAU,4BACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBCSa,aAAa,GAAG,QAAQ,GAAG,UAAU,4BAA4B,qBAAqB;wBACtF,aAAa,iBAAiB,UAAU,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAyEpE,aAAa,GAAG,QAAQ,GAAG,UAAU,4BAA4B,qBAAqB;wBACtF,aAAa,iBAAiB,UAAU,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA2EpE,aACd,UAAU,qBACV,WAAW,sBAAsB,GACjC,UAAU,mBAAmB,kBAC7B,2BAEA,QAAQ,GACR,UAAU;EAA8B;IACvC,qBAAqB,qBAAqB,IAAI,GAAG,IAAI;wBACxC,aACd,iBACA,UAAU;EAA8B;IACvC"}
@@ -1,10 +1,10 @@
1
1
  import { buildBaseURL, buildQueryParams } from "./index.js";
2
- import { g as underscore, s as pluralize } from "./string-CWmAluxh.js";
3
- import { n as extractCacheOptions, t as copyForwardUrlOptions } from "./builder-utils-BkXwUT0x.js";
2
+ import { g as underscore, s as pluralize } from "./string-DFhbMVCj.js";
3
+ import { n as extractCacheOptions, t as copyForwardUrlOptions } from "./builder-utils-bjXbHa-m.js";
4
4
  import { getGlobalConfig, macroCondition } from "@embroider/macros";
5
5
  import { recordIdentifierFor } from "@warp-drive-mirror/core";
6
6
 
7
- //#region src/-private/active-record/find-record.ts
7
+ // src/-private/active-record/find-record.ts
8
8
  function findRecord(arg1, arg2, arg3) {
9
9
  const identifier = typeof arg1 === "string" ? {
10
10
  type: arg1,
@@ -31,8 +31,7 @@ function findRecord(arg1, arg2, arg3) {
31
31
  };
32
32
  }
33
33
 
34
- //#endregion
35
- //#region src/-private/active-record/query.ts
34
+ // src/-private/active-record/query.ts
36
35
  function query(type, query = {}, options = {}) {
37
36
  const cacheOptions = extractCacheOptions(options);
38
37
  const urlOptions = {
@@ -54,8 +53,7 @@ function query(type, query = {}, options = {}) {
54
53
  };
55
54
  }
56
55
 
57
- //#endregion
58
- //#region src/-private/active-record/save-record.ts
56
+ // src/-private/active-record/save-record.ts
59
57
  function isExisting(identifier) {
60
58
  return "id" in identifier && identifier.id !== null && "type" in identifier && identifier.type !== null;
61
59
  }
@@ -63,6 +61,9 @@ function isExisting(identifier) {
63
61
  * Builds request options to delete record for resources,
64
62
  * configured for the url, method and header expectations of ActiveRecord APIs.
65
63
  *
64
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
65
+ * when to use one.
66
+ *
66
67
  * **Basic Usage**
67
68
  *
68
69
  * ```ts
@@ -104,6 +105,7 @@ function isExisting(identifier) {
104
105
  * const data = await store.request(options);
105
106
  * ```
106
107
  *
108
+ * @summary Builds a `DELETE` request that persists deletion of an existing record, using ActiveRecord-style URLs.
107
109
  * @public
108
110
  * @param record
109
111
  * @param options
@@ -138,6 +140,9 @@ function deleteRecord(record, options = {}) {
138
140
  * Builds request options to create new record for resources,
139
141
  * configured for the url, method and header expectations of most ActiveRecord APIs.
140
142
  *
143
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
144
+ * when to use one.
145
+ *
141
146
  * **Basic Usage**
142
147
  *
143
148
  * ```ts
@@ -169,6 +174,7 @@ function deleteRecord(record, options = {}) {
169
174
  * const data = await store.request(options);
170
175
  * ```
171
176
  *
177
+ * @summary Builds a `POST` request that saves a newly created record, using ActiveRecord-style URLs.
172
178
  * @public
173
179
  * @param record
174
180
  * @param options
@@ -200,6 +206,9 @@ function createRecord(record, options = {}) {
200
206
  * Builds request options to update existing record for resources,
201
207
  * configured for the url, method and header expectations of most ActiveRecord APIs.
202
208
  *
209
+ * See the [Builders](/guides/the-manual/requests/builders) guide for what request builders do and
210
+ * when to use one.
211
+ *
203
212
  * **Basic Usage**
204
213
  *
205
214
  * ```ts
@@ -234,6 +243,7 @@ function createRecord(record, options = {}) {
234
243
  * const data = await store.request(options);
235
244
  * ```
236
245
  *
246
+ * @summary Builds a `PUT` (or `PATCH`) request that saves changes to an existing record, using ActiveRecord-style URLs.
237
247
  * @public
238
248
  * @param record
239
249
  * @param options
@@ -265,6 +275,5 @@ function updateRecord(record, options = {}) {
265
275
  };
266
276
  }
267
277
 
268
- //#endregion
269
278
  export { createRecord, deleteRecord, findRecord, query, updateRecord };
270
279
  //# sourceMappingURL=active-record.js.map