@ezez/utils 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/CHANGELOG.md +24 -8
  2. package/README.md +41 -18
  3. package/dist/ensureDate.d.ts +3 -0
  4. package/dist/ensureDate.d.ts.map +1 -0
  5. package/dist/ensureDate.js +11 -0
  6. package/dist/ensureDate.js.map +1 -0
  7. package/dist/ensurePrefix.d.ts +3 -0
  8. package/dist/ensurePrefix.d.ts.map +1 -0
  9. package/dist/ensurePrefix.js +11 -0
  10. package/dist/ensurePrefix.js.map +1 -0
  11. package/dist/ensureSuffix.d.ts +3 -0
  12. package/dist/ensureSuffix.d.ts.map +1 -0
  13. package/dist/ensureSuffix.js +11 -0
  14. package/dist/ensureSuffix.js.map +1 -0
  15. package/dist/ensureTimestamp.d.ts +3 -0
  16. package/dist/ensureTimestamp.d.ts.map +1 -0
  17. package/dist/ensureTimestamp.js +11 -0
  18. package/dist/ensureTimestamp.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +8 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/isEmpty.js +1 -1
  24. package/dist/isEmpty.js.map +1 -1
  25. package/dist/isNumericString.d.ts +10 -0
  26. package/dist/isNumericString.d.ts.map +1 -0
  27. package/dist/isNumericString.js +61 -0
  28. package/dist/isNumericString.js.map +1 -0
  29. package/dist/occurrences.d.ts +7 -0
  30. package/dist/occurrences.d.ts.map +1 -0
  31. package/dist/occurrences.js +27 -0
  32. package/dist/occurrences.js.map +1 -0
  33. package/dist/stripPrefix.d.ts +3 -0
  34. package/dist/stripPrefix.d.ts.map +1 -0
  35. package/dist/stripPrefix.js +11 -0
  36. package/dist/stripPrefix.js.map +1 -0
  37. package/dist/stripSuffix.d.ts +3 -0
  38. package/dist/stripSuffix.d.ts.map +1 -0
  39. package/dist/stripSuffix.js +11 -0
  40. package/dist/stripSuffix.js.map +1 -0
  41. package/docs/assets/search.js +1 -1
  42. package/docs/functions/cap.html +15 -5
  43. package/docs/functions/capitalize.html +15 -5
  44. package/docs/functions/coalesce.html +15 -5
  45. package/docs/functions/ensureArray.html +15 -5
  46. package/docs/functions/ensureDate.html +126 -0
  47. package/docs/functions/ensureError.html +15 -5
  48. package/docs/functions/ensurePrefix.html +128 -0
  49. package/docs/functions/ensureSuffix.html +128 -0
  50. package/docs/functions/ensureTimestamp.html +126 -0
  51. package/docs/functions/get.html +15 -5
  52. package/docs/functions/getMultiple.html +15 -5
  53. package/docs/functions/insertSeparator.html +15 -5
  54. package/docs/functions/isEmpty.html +15 -5
  55. package/docs/functions/isNumericString.html +123 -0
  56. package/docs/functions/isPlainObject.html +15 -5
  57. package/docs/functions/last.html +15 -5
  58. package/docs/functions/mapAsync.html +15 -5
  59. package/docs/functions/mapValues.html +15 -5
  60. package/docs/functions/match.html +15 -5
  61. package/docs/functions/merge.html +23 -13
  62. package/docs/functions/mostFrequent.html +15 -5
  63. package/docs/functions/noop.html +15 -5
  64. package/docs/functions/occurrences.html +135 -0
  65. package/docs/functions/omit.html +15 -5
  66. package/docs/functions/pick.html +15 -5
  67. package/docs/functions/pull.html +15 -5
  68. package/docs/functions/remove.html +15 -5
  69. package/docs/functions/rethrow.html +15 -5
  70. package/docs/functions/scale.html +15 -5
  71. package/docs/functions/seq.html +15 -5
  72. package/docs/functions/seqEarlyBreak.html +15 -5
  73. package/docs/functions/set.html +15 -5
  74. package/docs/functions/setImmutable.html +15 -5
  75. package/docs/functions/sortBy.html +15 -5
  76. package/docs/functions/stripPrefix.html +122 -0
  77. package/docs/functions/stripSuffix.html +122 -0
  78. package/docs/functions/throttle.html +15 -5
  79. package/docs/functions/truthy.html +15 -5
  80. package/docs/functions/wait.html +15 -5
  81. package/docs/functions/waitFor.html +15 -5
  82. package/docs/functions/waitSync.html +15 -5
  83. package/docs/index.html +86 -22
  84. package/docs/interfaces/GetMultipleSource.html +15 -5
  85. package/docs/interfaces/GetSource.html +15 -5
  86. package/docs/interfaces/IsNumericStringOptions.html +90 -0
  87. package/docs/interfaces/OccurencesOptions.html +71 -0
  88. package/docs/interfaces/SetImmutableSource.html +15 -5
  89. package/docs/interfaces/SetSource.html +15 -5
  90. package/docs/interfaces/ThrottleOptions.html +7 -7
  91. package/docs/interfaces/ThrottledFunctionExtras.html +7 -7
  92. package/docs/modules.html +24 -4
  93. package/docs/pages/Introduction.html +14 -4
  94. package/docs/types/MapValuesFn.html +15 -5
  95. package/docs/types/MatchCallback.html +15 -5
  96. package/docs/types/SeqEarlyBreaker.html +15 -5
  97. package/docs/types/SeqFn.html +15 -5
  98. package/docs/types/SeqFunctions.html +15 -5
  99. package/docs/types/SetImmutablePath.html +15 -5
  100. package/docs/types/ThrottledFunction.html +15 -5
  101. package/docs/variables/mapValuesUNSET.html +15 -5
  102. package/docs/variables/mergeUNSET.html +15 -5
  103. package/esm/ensureDate.d.ts +3 -0
  104. package/esm/ensureDate.d.ts.map +1 -0
  105. package/esm/ensureDate.js +8 -0
  106. package/esm/ensureDate.js.map +1 -0
  107. package/esm/ensurePrefix.d.ts +3 -0
  108. package/esm/ensurePrefix.d.ts.map +1 -0
  109. package/esm/ensurePrefix.js +8 -0
  110. package/esm/ensurePrefix.js.map +1 -0
  111. package/esm/ensureSuffix.d.ts +3 -0
  112. package/esm/ensureSuffix.d.ts.map +1 -0
  113. package/esm/ensureSuffix.js +8 -0
  114. package/esm/ensureSuffix.js.map +1 -0
  115. package/esm/ensureTimestamp.d.ts +3 -0
  116. package/esm/ensureTimestamp.d.ts.map +1 -0
  117. package/esm/ensureTimestamp.js +8 -0
  118. package/esm/ensureTimestamp.js.map +1 -0
  119. package/esm/index.d.ts +8 -0
  120. package/esm/index.d.ts.map +1 -1
  121. package/esm/index.js +8 -0
  122. package/esm/index.js.map +1 -1
  123. package/esm/isEmpty.js +1 -1
  124. package/esm/isEmpty.js.map +1 -1
  125. package/esm/isNumericString.d.ts +10 -0
  126. package/esm/isNumericString.d.ts.map +1 -0
  127. package/esm/isNumericString.js +58 -0
  128. package/esm/isNumericString.js.map +1 -0
  129. package/esm/occurrences.d.ts +7 -0
  130. package/esm/occurrences.d.ts.map +1 -0
  131. package/esm/occurrences.js +24 -0
  132. package/esm/occurrences.js.map +1 -0
  133. package/esm/stripPrefix.d.ts +3 -0
  134. package/esm/stripPrefix.d.ts.map +1 -0
  135. package/esm/stripPrefix.js +8 -0
  136. package/esm/stripPrefix.js.map +1 -0
  137. package/esm/stripSuffix.d.ts +3 -0
  138. package/esm/stripSuffix.d.ts.map +1 -0
  139. package/esm/stripSuffix.js +8 -0
  140. package/esm/stripSuffix.js.map +1 -0
  141. package/package.json +1 -1
  142. package/src/ensureDate.spec.ts +13 -0
  143. package/src/ensureDate.ts +18 -0
  144. package/src/ensurePrefix.spec.ts +11 -0
  145. package/src/ensurePrefix.ts +18 -0
  146. package/src/ensureSuffix.spec.ts +11 -0
  147. package/src/ensureSuffix.ts +18 -0
  148. package/src/ensureTimestamp.spec.ts +11 -0
  149. package/src/ensureTimestamp.ts +18 -0
  150. package/src/index.ts +8 -0
  151. package/src/isEmpty.ts +1 -1
  152. package/src/isNumericString.spec.ts +100 -0
  153. package/src/isNumericString.ts +94 -0
  154. package/src/occurrences.spec.ts +20 -0
  155. package/src/occurrences.ts +53 -0
  156. package/src/stripPrefix.spec.ts +13 -0
  157. package/src/stripPrefix.ts +15 -0
  158. package/src/stripSuffix.spec.ts +13 -0
  159. package/src/stripSuffix.ts +16 -0
package/CHANGELOG.md CHANGED
@@ -3,12 +3,25 @@ All notable changes to this project will be documented in this file.
3
3
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
4
4
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
5
5
 
6
- ## [0.24.1+]
7
- ### Dev
8
- - added missing docs
9
- - fixed some jsdoc strings (so they contain types for non-ts users)
10
- - fixed typedoc warnings
11
- - README update, preparing to rename library
6
+ ## [1.2.0] - 2023-03-01
7
+ ### Added
8
+ - `ensureDate` method
9
+ - `ensurePrefix` method
10
+ - `ensureSuffix` method
11
+ - `ensureTimestamp` method
12
+ - `stripPrefix` method
13
+ - `stripSuffix` method
14
+
15
+ ## [1.1.0] - 2023-02-20
16
+ ### Added
17
+ - `isNumericString` method
18
+ - `occurrences` method
19
+ ### Changed
20
+ - `isEmpty` throws `TypeError` instead of `Error` on primitives
21
+
22
+ ## [1.0.0] - 2023-02-19
23
+ ### Added
24
+ - `isPlainObject` method
12
25
  ### Breaking
13
26
  - changed `isEmpty` to throw on primitives
14
27
  - `makeArray` is renamed to `ensureArray`
@@ -20,8 +33,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
20
33
  ### Changed
21
34
  - added some examples to docs
22
35
  - in jsdoc added a warning to get/set and family about using them with TS
23
- ### Added
24
- - `isPlainObject` method
36
+ ### Dev
37
+ - added missing docs
38
+ - fixed some jsdoc strings (so they contain types for non-ts users)
39
+ - fixed typedoc warnings
40
+ - README update, preparing to rename library
25
41
 
26
42
  ## [0.24.1] - 2022-11-08
27
43
  ### Dev
package/README.md CHANGED
@@ -29,38 +29,61 @@ object, with just some properties copied. Easy, right? Few lines of code? Lodash
29
29
 
30
30
  ## Supported methods
31
31
 
32
- - `cap` - cap a value between lower and upper bound
32
+ ### String related
33
+ - `addPrefix` - add prefix to a string if not already present
34
+ - `addSuffix` - add suffix to a string if not already present
33
35
  - `capitalize` - capitalize a string, optionally lower casing the rest
34
- - `coalesce` - return first non-nullish value
36
+ - `isNumericString` - check if given value is a numeric string, features configurable
37
+ - `occurrences` - count occurrences of a substring in a string, optionally allow overlapping
38
+ - `stripPrefix` - strip prefix from a string
39
+ - `stripSuffix` - strip suffix from a string
40
+
41
+ ### Number related
42
+ - `cap` - cap a value between lower and upper bound
43
+ - `scale` - scale given value from old range to new range
44
+
45
+ ### Array related
35
46
  - `ensureArray` - ensure that given value is an array
36
- - `ensureError` - ensure that given value is an error
37
- - `get` - extract a value from a deep object using specified path, optionally with a default value
38
- - `getMultiple` - same as above, but test multiple paths
39
47
  - `insertSeparator` - insert a separator between every character in an array
40
- - `isEmpty` - check if given value is empty
41
- - `isPlainObject` - check if given value is a plain object
42
48
  - `last` - get last element of an array
43
- - `mapAsync` - map an array asynchronously if sync version blocks your event loop for too long
44
- - `mapValues` - map values of an object
45
49
  - `match` - split your array into two groups - one that matches given predicate, and one that doesn't
46
- - `merge` - merge two objects shallowly, allowing to remove properties while doing so
47
50
  - `mostFrequent` - find most frequent value in an array
48
- - `noop` - do nothing
49
- - `omit` - omit properties from an object
50
- - `pick` - pick some properties from an object
51
51
  - `pull` - remove values from an array (by mutating)
52
52
  - `remove` - remove values from an array (by mutating) using predicate function and return removed values
53
+ - `sortBy` - sort an array by given property (create callback function for `Array.prototype.sort`)
54
+
55
+ ### Object related
56
+ - `isPlainObject` - check if given value is a plain object
57
+ - `mapValues` - map values of an object
58
+ - `merge` - merge two objects shallowly, allowing to remove properties while doing so
59
+ - `omit` - omit properties from an object
60
+ - `pick` - pick some properties from an object
61
+
62
+ ### Date related
63
+ - `ensureDate` - ensure that given value is a Date instance
64
+ - `ensureTimestamp` - ensure that given value is a numeric timestamp
65
+
66
+ ### Type safety
67
+ - `coalesce` - return first non-nullish value
68
+ - `ensureError` - ensure that given value is an error
69
+
70
+ ### Flow related
71
+ - `mapAsync` - map an array asynchronously if sync version blocks your event loop for too long
72
+ - `noop` - do nothing
53
73
  - `rethrow` - throw given value
54
- - `scale` - scale given value from old range to new range
55
74
  - `seq` - sequentially execute Promise-returning functions until one returns a value
75
+ - `wait` - wait given amount of time (async)
76
+ - `waitSync` - wait given amount of time (sync)
77
+ - `waitFor` - wait for a condition to be true, checking every given amount of time
78
+
79
+ ### Various
80
+ - `get` - extract a value from a deep object using specified path, optionally with a default value
81
+ - `getMultiple` - same as above, but test multiple paths
56
82
  - `set` - set a value in a deep object using specified path
57
83
  - `setImmutable` - set a value in a deep object using specified path, but return a new object
58
- - `sortBy` - sort an array by given property (create callback function for `Array.prototype.sort`)
84
+ - `isEmpty` - check if given value is empty
59
85
  - `throttle` - throttle a function, very configurable
60
86
  - `truthy` - is value truthy? (useful for filtering with more correct TypeScript support than `filter(Boolean)`)
61
- - `wait` - wait given amount of time (async)
62
- - `waitSync` - wait given amount of time (sync)
63
- - `waitFor` - wait for a condition to be true, checking every given amount of time
64
87
 
65
88
  Methods will be added as I need them. I am open for suggestions and PRs. See next heading for list of methods that I
66
89
  want to add.
@@ -0,0 +1,3 @@
1
+ declare const ensureDate: (date: Date | number) => Date;
2
+ export { ensureDate, };
3
+ //# sourceMappingURL=ensureDate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureDate.d.ts","sourceRoot":"","sources":["../src/ensureDate.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,UAAU,SAAU,IAAI,GAAG,MAAM,KAAG,IAKzC,CAAC;AAEF,OAAO,EACH,UAAU,GACb,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureDate = void 0;
4
+ const ensureDate = (date) => {
5
+ if (typeof date === "number") {
6
+ return new Date(date);
7
+ }
8
+ return date;
9
+ };
10
+ exports.ensureDate = ensureDate;
11
+ //# sourceMappingURL=ensureDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureDate.js","sourceRoot":"","sources":["../src/ensureDate.ts"],"names":[],"mappings":";;;AAQA,MAAM,UAAU,GAAG,CAAC,IAAmB,EAAQ,EAAE;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAGE,gCAAU"}
@@ -0,0 +1,3 @@
1
+ declare const ensurePrefix: (string: string, prefix: string) => string;
2
+ export { ensurePrefix, };
3
+ //# sourceMappingURL=ensurePrefix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensurePrefix.d.ts","sourceRoot":"","sources":["../src/ensurePrefix.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,YAAY,WAAY,MAAM,UAAU,MAAM,WAKnD,CAAC;AAEF,OAAO,EACH,YAAY,GACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensurePrefix = void 0;
4
+ const ensurePrefix = (string, prefix) => {
5
+ if (string.startsWith(prefix)) {
6
+ return string;
7
+ }
8
+ return prefix + string;
9
+ };
10
+ exports.ensurePrefix = ensurePrefix;
11
+ //# sourceMappingURL=ensurePrefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensurePrefix.js","sourceRoot":"","sources":["../src/ensurePrefix.ts"],"names":[],"mappings":";;;AAQA,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;IACpD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC3B,OAAO,MAAM,CAAC;KACjB;IACD,OAAO,MAAM,GAAG,MAAM,CAAC;AAC3B,CAAC,CAAC;AAGE,oCAAY"}
@@ -0,0 +1,3 @@
1
+ declare const ensureSuffix: (string: string, suffix: string) => string;
2
+ export { ensureSuffix, };
3
+ //# sourceMappingURL=ensureSuffix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureSuffix.d.ts","sourceRoot":"","sources":["../src/ensureSuffix.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,YAAY,WAAY,MAAM,UAAU,MAAM,WAKnD,CAAC;AAEF,OAAO,EACH,YAAY,GACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureSuffix = void 0;
4
+ const ensureSuffix = (string, suffix) => {
5
+ if (string.endsWith(suffix)) {
6
+ return string;
7
+ }
8
+ return string + suffix;
9
+ };
10
+ exports.ensureSuffix = ensureSuffix;
11
+ //# sourceMappingURL=ensureSuffix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureSuffix.js","sourceRoot":"","sources":["../src/ensureSuffix.ts"],"names":[],"mappings":";;;AAQA,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;IACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACzB,OAAO,MAAM,CAAC;KACjB;IACD,OAAO,MAAM,GAAG,MAAM,CAAC;AAC3B,CAAC,CAAC;AAGE,oCAAY"}
@@ -0,0 +1,3 @@
1
+ declare const ensureTimestamp: (date: Date | number) => number;
2
+ export { ensureTimestamp, };
3
+ //# sourceMappingURL=ensureTimestamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureTimestamp.d.ts","sourceRoot":"","sources":["../src/ensureTimestamp.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,eAAe,SAAU,IAAI,GAAG,MAAM,KAAG,MAK9C,CAAC;AAEF,OAAO,EACH,eAAe,GAClB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureTimestamp = void 0;
4
+ const ensureTimestamp = (date) => {
5
+ if (typeof date === "number") {
6
+ return date;
7
+ }
8
+ return date.getTime();
9
+ };
10
+ exports.ensureTimestamp = ensureTimestamp;
11
+ //# sourceMappingURL=ensureTimestamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureTimestamp.js","sourceRoot":"","sources":["../src/ensureTimestamp.ts"],"names":[],"mappings":";;;AAQA,MAAM,eAAe,GAAG,CAAC,IAAmB,EAAU,EAAE;IACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,OAAO,IAAI,CAAC;KACf;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC,CAAC;AAGE,0CAAe"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,17 @@
1
+ export * from "./ensurePrefix.js";
2
+ export * from "./ensureSuffix.js";
1
3
  export * from "./cap.js";
2
4
  export * from "./capitalize.js";
3
5
  export * from "./coalesce.js";
4
6
  export * from "./ensureArray.js";
7
+ export * from "./ensureDate.js";
5
8
  export * from "./ensureError.js";
9
+ export * from "./ensureTimestamp.js";
6
10
  export * from "./get.js";
7
11
  export * from "./getMultiple.js";
8
12
  export * from "./insertSeparator.js";
9
13
  export * from "./isEmpty.js";
14
+ export * from "./isNumericString.js";
10
15
  export * from "./isPlainObject.js";
11
16
  export * from "./last.js";
12
17
  export * from "./mapAsync.js";
@@ -15,6 +20,7 @@ export * from "./match.js";
15
20
  export * from "./merge.js";
16
21
  export * from "./mostFrequent.js";
17
22
  export * from "./noop.js";
23
+ export * from "./occurrences.js";
18
24
  export * from "./omit.js";
19
25
  export * from "./pick.js";
20
26
  export * from "./pull.js";
@@ -25,6 +31,8 @@ export * from "./seq.js";
25
31
  export * from "./set.js";
26
32
  export * from "./setImmutable.js";
27
33
  export * from "./sortBy.js";
34
+ export * from "./stripPrefix.js";
35
+ export * from "./stripSuffix.js";
28
36
  export * from "./throttle.js";
29
37
  export * from "./truthy.js";
30
38
  export * from "./wait.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -14,15 +14,20 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ensurePrefix.js"), exports);
18
+ __exportStar(require("./ensureSuffix.js"), exports);
17
19
  __exportStar(require("./cap.js"), exports);
18
20
  __exportStar(require("./capitalize.js"), exports);
19
21
  __exportStar(require("./coalesce.js"), exports);
20
22
  __exportStar(require("./ensureArray.js"), exports);
23
+ __exportStar(require("./ensureDate.js"), exports);
21
24
  __exportStar(require("./ensureError.js"), exports);
25
+ __exportStar(require("./ensureTimestamp.js"), exports);
22
26
  __exportStar(require("./get.js"), exports);
23
27
  __exportStar(require("./getMultiple.js"), exports);
24
28
  __exportStar(require("./insertSeparator.js"), exports);
25
29
  __exportStar(require("./isEmpty.js"), exports);
30
+ __exportStar(require("./isNumericString.js"), exports);
26
31
  __exportStar(require("./isPlainObject.js"), exports);
27
32
  __exportStar(require("./last.js"), exports);
28
33
  __exportStar(require("./mapAsync.js"), exports);
@@ -31,6 +36,7 @@ __exportStar(require("./match.js"), exports);
31
36
  __exportStar(require("./merge.js"), exports);
32
37
  __exportStar(require("./mostFrequent.js"), exports);
33
38
  __exportStar(require("./noop.js"), exports);
39
+ __exportStar(require("./occurrences.js"), exports);
34
40
  __exportStar(require("./omit.js"), exports);
35
41
  __exportStar(require("./pick.js"), exports);
36
42
  __exportStar(require("./pull.js"), exports);
@@ -41,6 +47,8 @@ __exportStar(require("./seq.js"), exports);
41
47
  __exportStar(require("./set.js"), exports);
42
48
  __exportStar(require("./setImmutable.js"), exports);
43
49
  __exportStar(require("./sortBy.js"), exports);
50
+ __exportStar(require("./stripPrefix.js"), exports);
51
+ __exportStar(require("./stripSuffix.js"), exports);
44
52
  __exportStar(require("./throttle.js"), exports);
45
53
  __exportStar(require("./truthy.js"), exports);
46
54
  __exportStar(require("./wait.js"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,2CAAyB;AACzB,kDAAgC;AAChC,gDAA8B;AAC9B,mDAAiC;AACjC,mDAAiC;AACjC,2CAAyB;AACzB,mDAAiC;AACjC,uDAAqC;AACrC,+CAA6B;AAC7B,qDAAmC;AACnC,4CAA0B;AAC1B,gDAA8B;AAC9B,iDAA+B;AAC/B,6CAA2B;AAC3B,6CAA2B;AAC3B,oDAAkC;AAClC,4CAA0B;AAC1B,4CAA0B;AAC1B,4CAA0B;AAC1B,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B;AAC7B,6CAA2B;AAC3B,2CAAyB;AACzB,2CAAyB;AACzB,oDAAkC;AAClC,8CAA4B;AAC5B,gDAA8B;AAC9B,8CAA4B;AAC5B,4CAA0B;AAC1B,+CAA6B;AAC7B,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,oDAAkC;AAClC,oDAAkC;AAClC,2CAAyB;AACzB,kDAAgC;AAChC,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,mDAAiC;AACjC,uDAAqC;AACrC,2CAAyB;AACzB,mDAAiC;AACjC,uDAAqC;AACrC,+CAA6B;AAC7B,uDAAqC;AACrC,qDAAmC;AACnC,4CAA0B;AAC1B,gDAA8B;AAC9B,iDAA+B;AAC/B,6CAA2B;AAC3B,6CAA2B;AAC3B,oDAAkC;AAClC,4CAA0B;AAC1B,mDAAiC;AACjC,4CAA0B;AAC1B,4CAA0B;AAC1B,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B;AAC7B,6CAA2B;AAC3B,2CAAyB;AACzB,2CAAyB;AACzB,oDAAkC;AAClC,8CAA4B;AAC5B,mDAAiC;AACjC,mDAAiC;AACjC,gDAA8B;AAC9B,8CAA4B;AAC5B,4CAA0B;AAC1B,+CAA6B;AAC7B,gDAA8B"}
package/dist/isEmpty.js CHANGED
@@ -9,7 +9,7 @@ const isEmpty = (obj) => {
9
9
  return true;
10
10
  }
11
11
  if (typeof obj !== "object") {
12
- throw new Error("isEmpty cannot be used on primitives");
12
+ throw new TypeError("isEmpty cannot be used on primitives");
13
13
  }
14
14
  if (Array.isArray(obj)) {
15
15
  return !Object.keys(obj).length;
@@ -1 +1 @@
1
- {"version":3,"file":"isEmpty.js","sourceRoot":"","sources":["../src/isEmpty.ts"],"names":[],"mappings":";;;AA2BA,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,OAAO,IAAI,CAAC;KACf;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KAC3D;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;KACnC;IACD,IAAI,QAAQ,IAAI,GAAG,EAAE;QACjB,OAAO,CAAE,GAAwB,CAAC,MAAM,CAAC;KAC5C;IACD,IAAI,MAAM,IAAI,GAAG,EAAE;QACf,OAAO,CAAE,GAAsB,CAAC,IAAI,CAAC;KACxC;IACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC,CAAC;AAEO,0BAAO"}
1
+ {"version":3,"file":"isEmpty.js","sourceRoot":"","sources":["../src/isEmpty.ts"],"names":[],"mappings":";;;AA2BA,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,OAAO,IAAI,CAAC;KACf;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACzB,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;KAC/D;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;KACnC;IACD,IAAI,QAAQ,IAAI,GAAG,EAAE;QACjB,OAAO,CAAE,GAAwB,CAAC,MAAM,CAAC;KAC5C;IACD,IAAI,MAAM,IAAI,GAAG,EAAE;QACf,OAAO,CAAE,GAAsB,CAAC,IAAI,CAAC;KACxC;IACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC,CAAC;AAEO,0BAAO"}
@@ -0,0 +1,10 @@
1
+ interface Options {
2
+ allowFloats?: boolean;
3
+ allowExponents?: boolean;
4
+ allowInfinity?: boolean;
5
+ allowNaN?: boolean;
6
+ }
7
+ declare const isNumericString: (string: string, options?: Options) => boolean;
8
+ export { isNumericString, };
9
+ export type { Options as IsNumericStringOptions, };
10
+ //# sourceMappingURL=isNumericString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNumericString.d.ts","sourceRoot":"","sources":["../src/isNumericString.ts"],"names":[],"mappings":"AAAA,UAAU,OAAO;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAcD,QAAA,MAAM,eAAe,WAAY,MAAM,YAAW,OAAO,YAkExD,CAAC;AAEF,OAAO,EACH,eAAe,GAClB,CAAC;AAEF,YAAY,EACR,OAAO,IAAI,sBAAsB,GACpC,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNumericString = void 0;
4
+ const NOT_FOUND = -1;
5
+ const isNumericString = (string, options = {}) => {
6
+ if (typeof string !== "string") {
7
+ throw new TypeError("Expected a string");
8
+ }
9
+ if (options.allowNaN && string === "NaN") {
10
+ return true;
11
+ }
12
+ if (options.allowInfinity && (string === "Infinity" || string === "-Infinity")) {
13
+ return true;
14
+ }
15
+ let normalized = string.toLowerCase();
16
+ if (normalized.startsWith("-")) {
17
+ normalized = normalized.slice(1);
18
+ }
19
+ const parts = normalized.split(".");
20
+ if (parts.length > (options.allowFloats ? 2 : 1)) {
21
+ return false;
22
+ }
23
+ const expParts = parts[parts.length - 1].split("e");
24
+ if (!options.allowExponents) {
25
+ if (expParts.length > 1) {
26
+ return false;
27
+ }
28
+ }
29
+ else {
30
+ if (expParts.length > 2) {
31
+ return false;
32
+ }
33
+ }
34
+ const hasPlusAt = normalized.indexOf("+");
35
+ if (hasPlusAt > NOT_FOUND) {
36
+ if (!options.allowExponents) {
37
+ return false;
38
+ }
39
+ if (hasPlusAt !== normalized.lastIndexOf("+")) {
40
+ return false;
41
+ }
42
+ if (hasPlusAt !== normalized.indexOf("e") + 1) {
43
+ return false;
44
+ }
45
+ }
46
+ const hasMinusAt = normalized.indexOf("-");
47
+ if (hasMinusAt > NOT_FOUND) {
48
+ if (!options.allowExponents) {
49
+ return false;
50
+ }
51
+ if (hasMinusAt !== normalized.lastIndexOf("-")) {
52
+ return false;
53
+ }
54
+ if (hasMinusAt !== normalized.indexOf("e") + 1) {
55
+ return false;
56
+ }
57
+ }
58
+ return Boolean(/^[\de.+-]+$/.exec(normalized));
59
+ };
60
+ exports.isNumericString = isNumericString;
61
+ //# sourceMappingURL=isNumericString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNumericString.js","sourceRoot":"","sources":["../src/isNumericString.ts"],"names":[],"mappings":";;;AAOA,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC;AAYrB,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,UAAmB,EAAE,EAAE,EAAE;IAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5B,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;KAC5C;IAED,IAAI,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;QACtC,OAAO,IAAI,CAAC;KACf;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW,CAAC,EAAE;QAC5E,OAAO,IAAI,CAAC;KACf;IAED,IAAI,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QAC5B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACpC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAGpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9C,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;QACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,OAAO,KAAK,CAAC;SAChB;KACJ;SACI;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,SAAS,GAAG,SAAS,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YACzB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,SAAS,KAAK,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,SAAS,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC3C,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,UAAU,GAAG,SAAS,EAAE;QACxB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YACzB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,UAAU,KAAK,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAC5C,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,UAAU,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC5C,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAGE,0CAAe"}
@@ -0,0 +1,7 @@
1
+ interface Options {
2
+ overlap?: boolean;
3
+ }
4
+ declare const occurrences: (string: string, search: string, { overlap }?: Options) => number;
5
+ export { occurrences, };
6
+ export type { Options as OccurencesOptions, };
7
+ //# sourceMappingURL=occurrences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occurrences.d.ts","sourceRoot":"","sources":["../src/occurrences.ts"],"names":[],"mappings":"AAAA,UAAU,OAAO;IAIb,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAeD,QAAA,MAAM,WAAW,WAAY,MAAM,UAAU,MAAM,gBAAe,OAAO,WAwBxE,CAAC;AAEF,OAAO,EACH,WAAW,GACd,CAAC;AAEF,YAAY,EACR,OAAO,IAAI,iBAAiB,GAC/B,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.occurrences = void 0;
4
+ const NOT_FOUND = -1;
5
+ const occurrences = (string, search, { overlap } = {}) => {
6
+ if (typeof string !== "string") {
7
+ throw new TypeError("Expected a string");
8
+ }
9
+ if (typeof search !== "string") {
10
+ throw new TypeError("Expected a string");
11
+ }
12
+ if (search.length === 0) {
13
+ return 0;
14
+ }
15
+ let n = 0, i = 0;
16
+ while (true) {
17
+ i = string.indexOf(search, i);
18
+ if (i === NOT_FOUND) {
19
+ break;
20
+ }
21
+ n++;
22
+ i += overlap ? 1 : search.length;
23
+ }
24
+ return n;
25
+ };
26
+ exports.occurrences = occurrences;
27
+ //# sourceMappingURL=occurrences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occurrences.js","sourceRoot":"","sources":["../src/occurrences.ts"],"names":[],"mappings":";;;AAOA,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC;AAarB,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,OAAO,KAAc,EAAE,EAAE,EAAE;IAC9E,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5B,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;KAC5C;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5B,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;KAC5C;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,OAAO,CAAC,CAAC;KACZ;IACD,IAAI,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,CAAC;IAGV,OAAO,IAAI,EAAE;QACT,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,MAAM;SACT;QACD,CAAC,EAAE,CAAC;QACJ,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;KACpC;IACD,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAGE,kCAAW"}
@@ -0,0 +1,3 @@
1
+ declare const stripPrefix: (from: string, prefix: string) => string;
2
+ export { stripPrefix, };
3
+ //# sourceMappingURL=stripPrefix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripPrefix.d.ts","sourceRoot":"","sources":["../src/stripPrefix.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,WAAW,SAAU,MAAM,UAAU,MAAM,KAAG,MAKnD,CAAC;AAEF,OAAO,EACH,WAAW,GACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripPrefix = void 0;
4
+ const stripPrefix = (from, prefix) => {
5
+ if (from.startsWith(prefix)) {
6
+ return from.slice(prefix.length);
7
+ }
8
+ return from;
9
+ };
10
+ exports.stripPrefix = stripPrefix;
11
+ //# sourceMappingURL=stripPrefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripPrefix.js","sourceRoot":"","sources":["../src/stripPrefix.ts"],"names":[],"mappings":";;;AAKA,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,MAAc,EAAU,EAAE;IACzD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACpC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAGE,kCAAW"}
@@ -0,0 +1,3 @@
1
+ declare const stripSuffix: (from: string, suffix: string) => string;
2
+ export { stripSuffix, };
3
+ //# sourceMappingURL=stripSuffix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripSuffix.d.ts","sourceRoot":"","sources":["../src/stripSuffix.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,WAAW,SAAU,MAAM,UAAU,MAAM,KAAG,MAKnD,CAAC;AAEF,OAAO,EACH,WAAW,GACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripSuffix = void 0;
4
+ const stripSuffix = (from, suffix) => {
5
+ if (from.endsWith(suffix)) {
6
+ return from.slice(0, -suffix.length);
7
+ }
8
+ return from;
9
+ };
10
+ exports.stripSuffix = stripSuffix;
11
+ //# sourceMappingURL=stripSuffix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripSuffix.js","sourceRoot":"","sources":["../src/stripSuffix.ts"],"names":[],"mappings":";;;AAMA,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,MAAc,EAAU,EAAE;IACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACxC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAGE,kCAAW"}