@ls-stack/utils 3.63.0 → 3.66.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.
- package/dist/{arrayUtils.d.cts → arrayUtils.d.mts} +24 -23
- package/dist/arrayUtils.mjs +249 -0
- package/dist/assertions-qMxfVhSu.mjs +207 -0
- package/dist/{assertions.d.ts → assertions.d.mts} +4 -3
- package/dist/assertions.mjs +3 -0
- package/dist/asyncQueue.d.mts +497 -0
- package/dist/asyncQueue.mjs +757 -0
- package/dist/{awaitDebounce.d.cts → awaitDebounce.d.mts} +11 -6
- package/dist/awaitDebounce.mjs +54 -0
- package/dist/{cache.d.ts → cache.d.mts} +76 -68
- package/dist/cache.mjs +355 -0
- package/dist/castValues-DfICShCc.mjs +19 -0
- package/dist/{castValues.d.cts → castValues.d.mts} +3 -2
- package/dist/castValues.mjs +3 -0
- package/dist/{concurrentCalls.d.ts → concurrentCalls.d.mts} +74 -65
- package/dist/concurrentCalls.mjs +295 -0
- package/dist/consoleFmt.d.mts +55 -0
- package/dist/consoleFmt.mjs +63 -0
- package/dist/conversions-DTmwEMIu.mjs +12 -0
- package/dist/conversions.d.mts +4 -0
- package/dist/conversions.mjs +3 -0
- package/dist/createThrottleController.d.mts +18 -0
- package/dist/createThrottleController.mjs +40 -0
- package/dist/debounce.d.mts +47 -0
- package/dist/debounce.mjs +117 -0
- package/dist/dedent.d.mts +74 -0
- package/dist/dedent.mjs +80 -0
- package/dist/deepEqual-C7EZEixx.mjs +78 -0
- package/dist/{deepEqual.d.cts → deepEqual.d.mts} +3 -2
- package/dist/deepEqual.mjs +3 -0
- package/dist/{deepReplaceValues.d.cts → deepReplaceValues.d.mts} +4 -3
- package/dist/deepReplaceValues.mjs +61 -0
- package/dist/diffParser.d.mts +63 -0
- package/dist/diffParser.mjs +410 -0
- package/dist/enhancedMap.d.mts +21 -0
- package/dist/enhancedMap.mjs +69 -0
- package/dist/exhaustiveMatch.d.mts +10 -0
- package/dist/exhaustiveMatch.mjs +48 -0
- package/dist/{filterObjectOrArrayKeys.d.cts → filterObjectOrArrayKeys.d.mts} +15 -8
- package/dist/filterObjectOrArrayKeys.mjs +497 -0
- package/dist/{getAutoIncrementId.d.cts → getAutoIncrementId.d.mts} +9 -5
- package/dist/getAutoIncrementId.mjs +53 -0
- package/dist/{getCompositeKey.d.cts → getCompositeKey.d.mts} +3 -2
- package/dist/getCompositeKey.mjs +50 -0
- package/dist/{getValueStableKey.d.cts → getValueStableKey.d.mts} +5 -3
- package/dist/getValueStableKey.mjs +17 -0
- package/dist/{hash.d.cts → hash.d.mts} +3 -2
- package/dist/hash.mjs +28 -0
- package/dist/interpolate.d.mts +17 -0
- package/dist/interpolate.mjs +28 -0
- package/dist/{iteratorUtils.d.cts → iteratorUtils.d.mts} +5 -4
- package/dist/iteratorUtils.mjs +39 -0
- package/dist/keepPrevIfUnchanged.d.mts +12 -0
- package/dist/keepPrevIfUnchanged.mjs +9 -0
- package/dist/keyedMap.d.mts +76 -0
- package/dist/keyedMap.mjs +139 -0
- package/dist/keyedSet.d.mts +77 -0
- package/dist/keyedSet.mjs +129 -0
- package/dist/{levenshtein.d.cts → levenshtein.d.mts} +3 -2
- package/dist/levenshtein.mjs +121 -0
- package/dist/main.d.mts +4 -0
- package/dist/main.mjs +7 -0
- package/dist/matchPath.d.mts +50 -0
- package/dist/matchPath.mjs +81 -0
- package/dist/mathUtils-BDP1lM_z.mjs +81 -0
- package/dist/{mathUtils.d.cts → mathUtils.d.mts} +3 -2
- package/dist/mathUtils.mjs +3 -0
- package/dist/{mutationUtils.d.cts → mutationUtils.d.mts} +6 -5
- package/dist/mutationUtils.mjs +44 -0
- package/dist/{objUtils.d.ts → objUtils.d.mts} +8 -6
- package/dist/objUtils.mjs +115 -0
- package/dist/parallelAsyncCalls.d.mts +83 -0
- package/dist/parallelAsyncCalls.mjs +121 -0
- package/dist/partialEqual.d.mts +139 -0
- package/dist/partialEqual.mjs +1055 -0
- package/dist/promiseUtils.d.mts +9 -0
- package/dist/promiseUtils.mjs +17 -0
- package/dist/regexUtils.d.mts +18 -0
- package/dist/regexUtils.mjs +34 -0
- package/dist/{retryOnError.d.cts → retryOnError.d.mts} +38 -37
- package/dist/retryOnError.mjs +91 -0
- package/dist/{runShellCmd.d.ts → runShellCmd.d.mts} +24 -15
- package/dist/runShellCmd.mjs +151 -0
- package/dist/{safeJson.d.cts → safeJson.d.mts} +3 -2
- package/dist/safeJson.mjs +30 -0
- package/dist/{saferTyping.d.cts → saferTyping.d.mts} +4 -3
- package/dist/saferTyping.mjs +45 -0
- package/dist/serializeXML.d.mts +23 -0
- package/dist/serializeXML.mjs +74 -0
- package/dist/{shallowEqual.d.cts → shallowEqual.d.mts} +3 -2
- package/dist/shallowEqual.mjs +54 -0
- package/dist/sleep.d.mts +4 -0
- package/dist/sleep.mjs +7 -0
- package/dist/stringUtils-DjhWOiYn.mjs +113 -0
- package/dist/{stringUtils.d.cts → stringUtils.d.mts} +3 -2
- package/dist/stringUtils.mjs +3 -0
- package/dist/{testUtils.d.ts → testUtils.d.mts} +83 -52
- package/dist/testUtils.mjs +310 -0
- package/dist/{throttle.d.ts → throttle.d.mts} +18 -17
- package/dist/throttle.mjs +102 -0
- package/dist/time-sr2lhQRw.mjs +67 -0
- package/dist/{time.d.ts → time.d.mts} +8 -7
- package/dist/time.mjs +3 -0
- package/dist/{timers.d.cts → timers.d.mts} +22 -13
- package/dist/timers.mjs +220 -0
- package/dist/{tsResult.d.cts → tsResult.d.mts} +52 -48
- package/dist/tsResult.mjs +142 -0
- package/dist/typeGuards-B1mzA-Rz.mjs +128 -0
- package/dist/{typeGuards.d.cts → typeGuards.d.mts} +3 -2
- package/dist/typeGuards.mjs +3 -0
- package/dist/{typeUtils.d.ts → typeUtils.d.mts} +13 -34
- package/dist/typeUtils.mjs +1 -0
- package/dist/{typedStrings.d.cts → typedStrings.d.mts} +5 -4
- package/dist/typedStrings.mjs +131 -0
- package/dist/typingFnUtils-Bb8drgKF.mjs +101 -0
- package/dist/{typingFnUtils.d.cts → typingFnUtils.d.mts} +13 -22
- package/dist/typingFnUtils.mjs +3 -0
- package/dist/{typingTestUtils.d.cts → typingTestUtils.d.mts} +11 -15
- package/dist/typingTestUtils.mjs +80 -0
- package/dist/typingUtils.d.mts +20 -0
- package/dist/typingUtils.mjs +1 -0
- package/dist/yamlStringify.d.mts +17 -0
- package/dist/yamlStringify.mjs +189 -0
- package/package.json +65 -234
- package/dist/arrayUtils.cjs +0 -229
- package/dist/arrayUtils.d.ts +0 -171
- package/dist/arrayUtils.js +0 -42
- package/dist/assertions.cjs +0 -107
- package/dist/assertions.d.cts +0 -192
- package/dist/assertions.js +0 -25
- package/dist/asyncQueue.cjs +0 -672
- package/dist/asyncQueue.d.cts +0 -488
- package/dist/asyncQueue.d.ts +0 -488
- package/dist/asyncQueue.js +0 -631
- package/dist/awaitDebounce.cjs +0 -106
- package/dist/awaitDebounce.d.ts +0 -41
- package/dist/awaitDebounce.js +0 -28
- package/dist/cache.cjs +0 -367
- package/dist/cache.d.cts +0 -228
- package/dist/cache.js +0 -19
- package/dist/castValues.cjs +0 -50
- package/dist/castValues.d.ts +0 -4
- package/dist/castValues.js +0 -8
- package/dist/chunk-5DZT3Z5Z.js +0 -8
- package/dist/chunk-6FBIEPWU.js +0 -96
- package/dist/chunk-6FIBVC2P.js +0 -56
- package/dist/chunk-7CQPOM5I.js +0 -100
- package/dist/chunk-B6DNOZCP.js +0 -369
- package/dist/chunk-BM4PYVOX.js +0 -109
- package/dist/chunk-C2SVCIWE.js +0 -57
- package/dist/chunk-CCUPDGSZ.js +0 -132
- package/dist/chunk-DBOWTYR4.js +0 -49
- package/dist/chunk-DFXNVEH6.js +0 -14
- package/dist/chunk-DX2524CZ.js +0 -314
- package/dist/chunk-GMJTLFM6.js +0 -60
- package/dist/chunk-IATIXMCE.js +0 -20
- package/dist/chunk-II4R3VVX.js +0 -25
- package/dist/chunk-JF2MDHOJ.js +0 -40
- package/dist/chunk-JQFUKJU5.js +0 -71
- package/dist/chunk-MI4UE2PQ.js +0 -561
- package/dist/chunk-PUKVXYYL.js +0 -52
- package/dist/chunk-QQS7I7ZL.js +0 -16
- package/dist/chunk-VAAMRG4K.js +0 -20
- package/dist/chunk-WFQJUJTC.js +0 -182
- package/dist/chunk-ZXIKIA5B.js +0 -178
- package/dist/concurrentCalls.cjs +0 -406
- package/dist/concurrentCalls.d.cts +0 -116
- package/dist/concurrentCalls.js +0 -346
- package/dist/consoleFmt.cjs +0 -85
- package/dist/consoleFmt.d.cts +0 -54
- package/dist/consoleFmt.d.ts +0 -54
- package/dist/consoleFmt.js +0 -60
- package/dist/conversions.cjs +0 -44
- package/dist/conversions.d.cts +0 -3
- package/dist/conversions.d.ts +0 -3
- package/dist/conversions.js +0 -6
- package/dist/createThrottleController.cjs +0 -193
- package/dist/createThrottleController.d.cts +0 -13
- package/dist/createThrottleController.d.ts +0 -13
- package/dist/createThrottleController.js +0 -61
- package/dist/debounce.cjs +0 -157
- package/dist/debounce.d.cts +0 -46
- package/dist/debounce.d.ts +0 -46
- package/dist/debounce.js +0 -8
- package/dist/dedent.cjs +0 -104
- package/dist/dedent.d.cts +0 -73
- package/dist/dedent.d.ts +0 -73
- package/dist/dedent.js +0 -79
- package/dist/deepEqual.cjs +0 -96
- package/dist/deepEqual.d.ts +0 -21
- package/dist/deepEqual.js +0 -8
- package/dist/deepReplaceValues.cjs +0 -87
- package/dist/deepReplaceValues.d.ts +0 -27
- package/dist/deepReplaceValues.js +0 -7
- package/dist/enhancedMap.cjs +0 -131
- package/dist/enhancedMap.d.cts +0 -20
- package/dist/enhancedMap.d.ts +0 -20
- package/dist/enhancedMap.js +0 -10
- package/dist/exhaustiveMatch.cjs +0 -66
- package/dist/exhaustiveMatch.d.cts +0 -9
- package/dist/exhaustiveMatch.d.ts +0 -9
- package/dist/exhaustiveMatch.js +0 -40
- package/dist/filterObjectOrArrayKeys.cjs +0 -619
- package/dist/filterObjectOrArrayKeys.d.ts +0 -88
- package/dist/filterObjectOrArrayKeys.js +0 -9
- package/dist/getAutoIncrementId.cjs +0 -44
- package/dist/getAutoIncrementId.d.ts +0 -46
- package/dist/getAutoIncrementId.js +0 -18
- package/dist/getCompositeKey.cjs +0 -86
- package/dist/getCompositeKey.d.ts +0 -11
- package/dist/getCompositeKey.js +0 -8
- package/dist/getValueStableKey.cjs +0 -89
- package/dist/getValueStableKey.d.ts +0 -15
- package/dist/getValueStableKey.js +0 -11
- package/dist/hash.cjs +0 -57
- package/dist/hash.d.ts +0 -7
- package/dist/hash.js +0 -32
- package/dist/interpolate.cjs +0 -88
- package/dist/interpolate.d.cts +0 -11
- package/dist/interpolate.d.ts +0 -11
- package/dist/interpolate.js +0 -46
- package/dist/iteratorUtils.cjs +0 -73
- package/dist/iteratorUtils.d.ts +0 -10
- package/dist/iteratorUtils.js +0 -44
- package/dist/keepPrevIfUnchanged.cjs +0 -102
- package/dist/keepPrevIfUnchanged.d.cts +0 -7
- package/dist/keepPrevIfUnchanged.d.ts +0 -7
- package/dist/keepPrevIfUnchanged.js +0 -7
- package/dist/levenshtein.cjs +0 -180
- package/dist/levenshtein.d.ts +0 -5
- package/dist/levenshtein.js +0 -153
- package/dist/main.cjs +0 -32
- package/dist/main.d.cts +0 -3
- package/dist/main.d.ts +0 -3
- package/dist/main.js +0 -7
- package/dist/matchPath.cjs +0 -155
- package/dist/matchPath.d.cts +0 -53
- package/dist/matchPath.d.ts +0 -53
- package/dist/matchPath.js +0 -108
- package/dist/mathUtils.cjs +0 -81
- package/dist/mathUtils.d.ts +0 -54
- package/dist/mathUtils.js +0 -22
- package/dist/mutationUtils.cjs +0 -153
- package/dist/mutationUtils.d.ts +0 -15
- package/dist/mutationUtils.js +0 -55
- package/dist/objUtils.cjs +0 -242
- package/dist/objUtils.d.cts +0 -28
- package/dist/objUtils.js +0 -38
- package/dist/parallelAsyncCalls.cjs +0 -162
- package/dist/parallelAsyncCalls.d.cts +0 -82
- package/dist/parallelAsyncCalls.d.ts +0 -82
- package/dist/parallelAsyncCalls.js +0 -126
- package/dist/partialEqual.cjs +0 -1196
- package/dist/partialEqual.d.cts +0 -141
- package/dist/partialEqual.d.ts +0 -141
- package/dist/partialEqual.js +0 -1168
- package/dist/promiseUtils.cjs +0 -38
- package/dist/promiseUtils.d.cts +0 -8
- package/dist/promiseUtils.d.ts +0 -8
- package/dist/promiseUtils.js +0 -6
- package/dist/regexUtils.cjs +0 -60
- package/dist/regexUtils.d.cts +0 -17
- package/dist/regexUtils.d.ts +0 -17
- package/dist/regexUtils.js +0 -33
- package/dist/retryOnError.cjs +0 -130
- package/dist/retryOnError.d.ts +0 -83
- package/dist/retryOnError.js +0 -101
- package/dist/runShellCmd.cjs +0 -127
- package/dist/runShellCmd.d.cts +0 -90
- package/dist/runShellCmd.js +0 -98
- package/dist/safeJson.cjs +0 -45
- package/dist/safeJson.d.ts +0 -16
- package/dist/safeJson.js +0 -8
- package/dist/saferTyping.cjs +0 -52
- package/dist/saferTyping.d.ts +0 -47
- package/dist/saferTyping.js +0 -23
- package/dist/serializeXML.cjs +0 -154
- package/dist/serializeXML.d.cts +0 -22
- package/dist/serializeXML.d.ts +0 -22
- package/dist/serializeXML.js +0 -116
- package/dist/shallowEqual.cjs +0 -88
- package/dist/shallowEqual.d.ts +0 -4
- package/dist/shallowEqual.js +0 -63
- package/dist/sleep.cjs +0 -32
- package/dist/sleep.d.cts +0 -3
- package/dist/sleep.d.ts +0 -3
- package/dist/sleep.js +0 -6
- package/dist/stringUtils.cjs +0 -155
- package/dist/stringUtils.d.ts +0 -55
- package/dist/stringUtils.js +0 -50
- package/dist/testUtils.cjs +0 -1490
- package/dist/testUtils.d.cts +0 -133
- package/dist/testUtils.js +0 -359
- package/dist/throttle.cjs +0 -282
- package/dist/throttle.d.cts +0 -98
- package/dist/throttle.js +0 -38
- package/dist/time.cjs +0 -152
- package/dist/time.d.cts +0 -25
- package/dist/time.js +0 -38
- package/dist/timers.cjs +0 -194
- package/dist/timers.d.ts +0 -121
- package/dist/timers.js +0 -156
- package/dist/tsResult.cjs +0 -226
- package/dist/tsResult.d.ts +0 -114
- package/dist/tsResult.js +0 -180
- package/dist/typeGuards.cjs +0 -70
- package/dist/typeGuards.d.ts +0 -111
- package/dist/typeGuards.js +0 -18
- package/dist/typeUtils.cjs +0 -18
- package/dist/typeUtils.d.cts +0 -61
- package/dist/typeUtils.js +0 -0
- package/dist/typedStrings.cjs +0 -90
- package/dist/typedStrings.d.ts +0 -163
- package/dist/typedStrings.js +0 -57
- package/dist/typingFnUtils.cjs +0 -96
- package/dist/typingFnUtils.d.ts +0 -100
- package/dist/typingFnUtils.js +0 -30
- package/dist/typingTestUtils.cjs +0 -52
- package/dist/typingTestUtils.d.ts +0 -79
- package/dist/typingTestUtils.js +0 -27
- package/dist/typingUtils.cjs +0 -18
- package/dist/typingUtils.d.cts +0 -35
- package/dist/typingUtils.d.ts +0 -35
- package/dist/typingUtils.js +0 -0
- package/dist/yamlStringify.cjs +0 -423
- package/dist/yamlStringify.d.cts +0 -10
- package/dist/yamlStringify.d.ts +0 -10
- package/dist/yamlStringify.js +0 -9
|
@@ -1,34 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
};
|
|
4
|
-
type NonPartial<T> = {
|
|
5
|
-
[K in keyof Required<T>]: T[K];
|
|
6
|
-
};
|
|
1
|
+
//#region src/typeUtils.d.ts
|
|
2
|
+
type PartialRecord<K$1 extends keyof any, T> = { [P in K$1]?: T };
|
|
3
|
+
type NonPartial<T> = { [K in keyof Required<T>]: T[K] };
|
|
7
4
|
/**
|
|
8
5
|
* @deprecated Use `ObjKeysWithValuesOfType` from `@ls-stack/utils/typeUtils`
|
|
9
6
|
* instead
|
|
10
7
|
*/
|
|
11
|
-
type ObjKeysWithValuesOfType<Obj extends Record<PropertyKey, unknown>, ValueType> = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
type
|
|
15
|
-
keyof T
|
|
16
|
-
] extends [never] ? false : true : false;
|
|
17
|
-
type Prettify<T extends Record<string, unknown>> = {
|
|
18
|
-
[P in keyof T]: T[P];
|
|
19
|
-
} & {};
|
|
20
|
-
type DeepPrettify<T> = {
|
|
21
|
-
[K in keyof T]: T[K] extends Record<string, unknown> ? DeepPrettify<T[K]> : T[K];
|
|
22
|
-
} & {};
|
|
8
|
+
type ObjKeysWithValuesOfType<Obj extends Record<PropertyKey, unknown>, ValueType> = { [K in keyof Obj]: Obj[K] extends ValueType ? K : never }[keyof Obj];
|
|
9
|
+
type IsAny<T> = unknown extends T ? [keyof T] extends [never] ? false : true : false;
|
|
10
|
+
type Prettify<T extends Record<string, unknown>> = { [P in keyof T]: T[P] } & {};
|
|
11
|
+
type DeepPrettify<T> = { [K in keyof T]: T[K] extends Record<string, unknown> ? DeepPrettify<T[K]> : T[K] } & {};
|
|
23
12
|
type DefaultSkipTransverseDeepReplace = Date | RegExp | ((...args: any[]) => any) | Error | Set<any> | Map<any, any> | WeakSet<any> | WeakMap<any, any>;
|
|
24
13
|
type PathMatches<CurrentPath extends string, SkipPaths extends string> = true extends (SkipPaths extends any ? CurrentPath extends SkipPaths ? true : SkipPaths extends `${infer Prefix}[*]${infer Suffix}` ? CurrentPath extends `${Prefix}[${string}]${Suffix}` ? true : false : false : false) ? true : false;
|
|
25
14
|
type BuildPath<BasePath extends string, Key extends PropertyKey> = BasePath extends '$' ? Key extends string | number ? `${Key}` : never : Key extends string | number ? `${BasePath}.${Key}` : never;
|
|
26
15
|
type BuildArrayPath<BasePath extends string> = BasePath extends '$' ? '[*]' : `${BasePath}[*]`;
|
|
27
|
-
type DeepReplaceValueImpl<T, ReplaceType, NewType, SkipPaths extends string | undefined, SkipType, Path extends string = '$'> = SkipPaths extends string ? PathMatches<Path, SkipPaths> extends true ? T : T extends ReplaceType ? T extends SkipType ? T : NewType : T extends readonly (infer U)[] ? Array<DeepReplaceValueImpl<U, ReplaceType, NewType, SkipPaths, SkipType, BuildArrayPath<Path>>> : T extends SkipType ? T : T extends Record<string, any> ? {
|
|
28
|
-
[K in keyof T]: DeepReplaceValueImpl<T[K], ReplaceType, NewType, SkipPaths, SkipType, BuildPath<Path, K>>;
|
|
29
|
-
} : T : T extends ReplaceType ? T extends SkipType ? T : NewType : T extends readonly (infer U)[] ? Array<DeepReplaceValueImpl<U, ReplaceType, NewType, SkipPaths, SkipType, BuildArrayPath<Path>>> : T extends SkipType ? T : T extends Record<string, any> ? {
|
|
30
|
-
[K in keyof T]: DeepReplaceValueImpl<T[K], ReplaceType, NewType, SkipPaths, SkipType, BuildPath<Path, K>>;
|
|
31
|
-
} : T;
|
|
16
|
+
type DeepReplaceValueImpl<T, ReplaceType, NewType, SkipPaths extends string | undefined, SkipType, Path extends string = '$'> = SkipPaths extends string ? PathMatches<Path, SkipPaths> extends true ? T : T extends ReplaceType ? T extends SkipType ? T : NewType : T extends readonly (infer U)[] ? Array<DeepReplaceValueImpl<U, ReplaceType, NewType, SkipPaths, SkipType, BuildArrayPath<Path>>> : T extends SkipType ? T : T extends Record<string, any> ? { [K in keyof T]: DeepReplaceValueImpl<T[K], ReplaceType, NewType, SkipPaths, SkipType, BuildPath<Path, K>> } : T : T extends ReplaceType ? T extends SkipType ? T : NewType : T extends readonly (infer U)[] ? Array<DeepReplaceValueImpl<U, ReplaceType, NewType, SkipPaths, SkipType, BuildArrayPath<Path>>> : T extends SkipType ? T : T extends Record<string, any> ? { [K in keyof T]: DeepReplaceValueImpl<T[K], ReplaceType, NewType, SkipPaths, SkipType, BuildPath<Path, K>> } : T;
|
|
32
17
|
/**
|
|
33
18
|
* Replaces all values that extends `ReplaceType` with `NewType` in a deeply
|
|
34
19
|
* nested object or array.
|
|
@@ -41,21 +26,15 @@ type DeepReplaceValueImpl<T, ReplaceType, NewType, SkipPaths extends string | un
|
|
|
41
26
|
* @template SkipTypes - The types to skip in transverse and replace.
|
|
42
27
|
*/
|
|
43
28
|
type DeepReplaceValue<T, ReplaceType, NewType, SkipPaths extends string | undefined = undefined, SkipTypes = DefaultSkipTransverseDeepReplace> = DeepReplaceValueImpl<T, ReplaceType, NewType, SkipPaths, SkipTypes>;
|
|
44
|
-
type KeysWithUndefinedValues<T extends Record<string, unknown>> = {
|
|
45
|
-
[K in keyof T]: undefined extends T[K] ? K : never;
|
|
46
|
-
}[keyof T];
|
|
29
|
+
type KeysWithUndefinedValues<T extends Record<string, unknown>> = { [K in keyof T]: undefined extends T[K] ? K : never }[keyof T];
|
|
47
30
|
/**
|
|
48
31
|
* Marks all possible undefined values as partial at the root level of the
|
|
49
32
|
* object.
|
|
50
33
|
*/
|
|
51
34
|
type PartialPossiblyUndefinedValues<T extends Record<string, unknown>> = Prettify<Partial<Pick<T, KeysWithUndefinedValues<T>>> & Omit<T, KeysWithUndefinedValues<T>>>;
|
|
52
|
-
type PickUndefinedKeys<T> = {
|
|
53
|
-
|
|
54
|
-
}[keyof T];
|
|
55
|
-
type PickRequiredKeys<T> = {
|
|
56
|
-
[K in keyof T]: undefined extends T[K] ? never : K;
|
|
57
|
-
}[keyof T];
|
|
35
|
+
type PickUndefinedKeys<T> = { [K in keyof T]: undefined extends T[K] ? K : never }[keyof T];
|
|
36
|
+
type PickRequiredKeys<T> = { [K in keyof T]: undefined extends T[K] ? never : K }[keyof T];
|
|
58
37
|
type MakeUndefinedKeysOptional<T> = Prettify<Partial<Pick<T, PickUndefinedKeys<T>>> & Pick<T, PickRequiredKeys<T>>>;
|
|
59
38
|
type StringWithAutoComplete<T extends string> = T | (string & {});
|
|
60
|
-
|
|
61
|
-
export
|
|
39
|
+
//#endregion
|
|
40
|
+
export { DeepPrettify, DeepReplaceValue, DefaultSkipTransverseDeepReplace, IsAny, MakeUndefinedKeysOptional, NonPartial, ObjKeysWithValuesOfType, PartialPossiblyUndefinedValues, PartialRecord, Prettify, StringWithAutoComplete };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/typedStrings.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* A type representing a string that contains a specific substring. Uses
|
|
3
4
|
* template literal types to ensure type safety at compile time.
|
|
@@ -101,7 +102,7 @@ declare function splitTypedString<T extends string>(str: StringContaining<NoInfe
|
|
|
101
102
|
* (1-based)
|
|
102
103
|
* @returns A tuple with exactly two string elements
|
|
103
104
|
*/
|
|
104
|
-
declare function splitTypedStringAt<T extends string>(str: StringContaining<NoInfer<T>> | StringStartingWith<NoInfer<T>> | StringEndingWith<NoInfer<T>>, separator: T,
|
|
105
|
+
declare function splitTypedStringAt<T extends string>(str: StringContaining<NoInfer<T>> | StringStartingWith<NoInfer<T>> | StringEndingWith<NoInfer<T>>, separator: T,
|
|
105
106
|
/**
|
|
106
107
|
* The position of the separator to split at.
|
|
107
108
|
*
|
|
@@ -122,7 +123,7 @@ splitAtNSeparatorPos?: number): [string, string];
|
|
|
122
123
|
* ```;
|
|
123
124
|
*/
|
|
124
125
|
type NonEmptyString = string & {
|
|
125
|
-
|
|
126
|
+
__nonEmptyString: true;
|
|
126
127
|
};
|
|
127
128
|
/**
|
|
128
129
|
* Type guard function that checks if a string is non-empty. Narrows the type to
|
|
@@ -159,5 +160,5 @@ declare function asNonEmptyStringOrNull(str: string): NonEmptyString | null;
|
|
|
159
160
|
* @throws Error if the string is empty
|
|
160
161
|
*/
|
|
161
162
|
declare function assertStringIsNonEmpty(str: string): asserts str is NonEmptyString;
|
|
162
|
-
|
|
163
|
-
export {
|
|
163
|
+
//#endregion
|
|
164
|
+
export { NonEmptyString, StringContaining, StringEndingWith, StringStartingWith, asNonEmptyStringOrNull, asNonEmptyStringOrThrow, assertStringIsNonEmpty, isNonEmptyString, splitTypedString, splitTypedStringAt, stringContains, stringEndsWith, stringStartsWith };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
//#region src/typedStrings.ts
|
|
2
|
+
/**
|
|
3
|
+
* Type guard function that checks if a string contains a specific substring.
|
|
4
|
+
* Narrows the type to `StringContaining<T>` when the check passes.
|
|
5
|
+
*
|
|
6
|
+
* @param str - The string to check
|
|
7
|
+
* @param substring - The substring to search for
|
|
8
|
+
* @returns `true` if the string contains the substring, `false` otherwise
|
|
9
|
+
*/
|
|
10
|
+
function stringContains(str, substring) {
|
|
11
|
+
return str.includes(substring);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Type guard function that checks if a string starts with a specific substring.
|
|
15
|
+
* Narrows the type to `StringStartingWith<T>` when the check passes.
|
|
16
|
+
*
|
|
17
|
+
* @param str - The string to check
|
|
18
|
+
* @param substring - The substring to check for at the beginning
|
|
19
|
+
* @returns `true` if the string starts with the substring, `false` otherwise
|
|
20
|
+
*/
|
|
21
|
+
function stringStartsWith(str, substring) {
|
|
22
|
+
return str.startsWith(substring);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Type guard function that checks if a string ends with a specific substring.
|
|
26
|
+
* Narrows the type to `StringEndingWith<T>` when the check passes.
|
|
27
|
+
*
|
|
28
|
+
* @param str - The string to check
|
|
29
|
+
* @param substring - The substring to check for at the end
|
|
30
|
+
* @returns `true` if the string ends with the substring, `false` otherwise
|
|
31
|
+
*/
|
|
32
|
+
function stringEndsWith(str, substring) {
|
|
33
|
+
return str.endsWith(substring);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Splits a typed string by a separator that is guaranteed to exist in the
|
|
37
|
+
* string. Returns an array with at least two elements: the parts before and
|
|
38
|
+
* after the first separator, plus any additional parts if there are multiple
|
|
39
|
+
* separators.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* const path: StringContaining<'/'> = 'src/utils/types.ts';
|
|
44
|
+
* const [first, second, ...rest] = splitTypedString(path, '/');
|
|
45
|
+
* // first: 'src', second: 'utils', rest: ['types.ts']
|
|
46
|
+
* ```;
|
|
47
|
+
*
|
|
48
|
+
* @param str - A string that contains, starts with, or ends with the separator
|
|
49
|
+
* @param separator - The separator to split by
|
|
50
|
+
* @returns An array with at least two string elements
|
|
51
|
+
*/
|
|
52
|
+
function splitTypedString(str, separator) {
|
|
53
|
+
return str.split(separator);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Splits a typed string at a specific occurrence of the separator. Unlike
|
|
57
|
+
* `splitTypedString`, this returns exactly two parts: everything before the nth
|
|
58
|
+
* separator and everything after it.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* const path: StringContaining<'.'> = 'file.name.ext';
|
|
63
|
+
* const [name, ext] = splitTypedStringAt(path, '.', 2);
|
|
64
|
+
* // name: 'file.name', ext: 'ext'
|
|
65
|
+
* ```;
|
|
66
|
+
*
|
|
67
|
+
* @param str - A string that contains, starts with, or ends with the separator
|
|
68
|
+
* @param separator - The separator to split by
|
|
69
|
+
* @param splitAtNSeparatorPos - The position of the separator to split at
|
|
70
|
+
* (1-based)
|
|
71
|
+
* @returns A tuple with exactly two string elements
|
|
72
|
+
*/
|
|
73
|
+
function splitTypedStringAt(str, separator, splitAtNSeparatorPos = 1) {
|
|
74
|
+
const parts = str.split(separator);
|
|
75
|
+
let leftPart = parts[0];
|
|
76
|
+
let rightPart = parts.slice(1).join(separator);
|
|
77
|
+
if (leftPart === void 0) throw new Error("String does not contain the separator");
|
|
78
|
+
if (splitAtNSeparatorPos > 1) {
|
|
79
|
+
leftPart = parts.slice(0, splitAtNSeparatorPos).join(separator);
|
|
80
|
+
rightPart = parts.slice(splitAtNSeparatorPos).join(separator);
|
|
81
|
+
}
|
|
82
|
+
return [leftPart, rightPart];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Type guard function that checks if a string is non-empty. Narrows the type to
|
|
86
|
+
* `NonEmptyString` when the check passes.
|
|
87
|
+
*
|
|
88
|
+
* @param str - The string to check
|
|
89
|
+
* @returns `true` if the string has length > 0, `false` otherwise
|
|
90
|
+
*/
|
|
91
|
+
function isNonEmptyString(str) {
|
|
92
|
+
return str.length > 0;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Converts a string to `NonEmptyString` or throws an error if the string is
|
|
96
|
+
* empty. Use this when you need to ensure a string is non-empty and want to
|
|
97
|
+
* fail fast.
|
|
98
|
+
*
|
|
99
|
+
* @param str - The string to convert
|
|
100
|
+
* @returns The string as `NonEmptyString`
|
|
101
|
+
* @throws Error if the string is empty
|
|
102
|
+
*/
|
|
103
|
+
function asNonEmptyStringOrThrow(str) {
|
|
104
|
+
if (isNonEmptyString(str)) return str;
|
|
105
|
+
throw new Error("String is empty");
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Converts a string to `NonEmptyString` or returns `null` if the string is
|
|
109
|
+
* empty. Use this when empty strings should be handled gracefully rather than
|
|
110
|
+
* throwing errors.
|
|
111
|
+
*
|
|
112
|
+
* @param str - The string to convert
|
|
113
|
+
* @returns The string as `NonEmptyString` or `null` if empty
|
|
114
|
+
*/
|
|
115
|
+
function asNonEmptyStringOrNull(str) {
|
|
116
|
+
if (isNonEmptyString(str)) return str;
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Assertion function that ensures a string is non-empty. Throws an error if the
|
|
121
|
+
* string is empty, otherwise narrows the type to `NonEmptyString`.
|
|
122
|
+
*
|
|
123
|
+
* @param str - The string to assert as non-empty
|
|
124
|
+
* @throws Error if the string is empty
|
|
125
|
+
*/
|
|
126
|
+
function assertStringIsNonEmpty(str) {
|
|
127
|
+
if (!isNonEmptyString(str)) throw new Error("String is empty");
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
export { asNonEmptyStringOrNull, asNonEmptyStringOrThrow, assertStringIsNonEmpty, isNonEmptyString, splitTypedString, splitTypedStringAt, stringContains, stringEndsWith, stringStartsWith };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
//#region src/typingFnUtils.ts
|
|
2
|
+
function asNonPartial(obj) {
|
|
3
|
+
return obj;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A wrapper to Object.entries with a better typing inference
|
|
7
|
+
*
|
|
8
|
+
* @param obj
|
|
9
|
+
*/
|
|
10
|
+
function typedObjectEntries(obj) {
|
|
11
|
+
return Object.entries(obj);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A wrapper to Object.entries with a better typing inference, but with strict
|
|
15
|
+
* typing narrowing keys to strings.
|
|
16
|
+
*
|
|
17
|
+
* @param obj
|
|
18
|
+
*/
|
|
19
|
+
function strictTypedObjectEntries(obj) {
|
|
20
|
+
return Object.entries(obj);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A wrapper to Object.keys with a better typing inference
|
|
24
|
+
*
|
|
25
|
+
* @param obj
|
|
26
|
+
*/
|
|
27
|
+
function typedObjectKeys(obj) {
|
|
28
|
+
return Object.keys(obj);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A safe way to cast types, use to substitute the `as Type`
|
|
32
|
+
*
|
|
33
|
+
* @param value
|
|
34
|
+
*/
|
|
35
|
+
function asType(value) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Narrow a string to a union of strings
|
|
40
|
+
*
|
|
41
|
+
* @param key
|
|
42
|
+
* @param union
|
|
43
|
+
*/
|
|
44
|
+
function narrowStringToUnion(key, union) {
|
|
45
|
+
if (!key) return void 0;
|
|
46
|
+
if (union instanceof Set) return union.has(key) ? key : void 0;
|
|
47
|
+
if (union.includes(key)) return key;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Type helper to check if a type is a subtype of another type.
|
|
51
|
+
*
|
|
52
|
+
* @template BaseType - The base type to check against
|
|
53
|
+
* @template SubType - The type that should extend BaseType
|
|
54
|
+
* @returns Returns undefined, only used for type checking
|
|
55
|
+
*/
|
|
56
|
+
function typeOnRightExtendsLeftType() {}
|
|
57
|
+
/** @deprecated Use typeOnRightExtendsLeftType instead */
|
|
58
|
+
const isSubTypeOf = typeOnRightExtendsLeftType;
|
|
59
|
+
/**
|
|
60
|
+
* Type helper to narrow a string to a key of an object.
|
|
61
|
+
*
|
|
62
|
+
* @param key
|
|
63
|
+
* @param obj
|
|
64
|
+
*/
|
|
65
|
+
function isObjKey(key, obj) {
|
|
66
|
+
return typeof key === "string" && key in obj;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Type helper to compare two union types and determine their relationship.
|
|
70
|
+
*
|
|
71
|
+
* @template T - The first union type (left side)
|
|
72
|
+
* @template U - The second union type (right side)
|
|
73
|
+
* @param _diff - Null if unions are identical, or an object describing the
|
|
74
|
+
* errors
|
|
75
|
+
*/
|
|
76
|
+
function unionsAreTheSame(_diff) {}
|
|
77
|
+
function asPartialUndefinedValues(value) {
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Type guard to check if an array has at least one element.
|
|
82
|
+
*
|
|
83
|
+
* @param array - The array to check
|
|
84
|
+
* @returns True if the array is non-empty, false otherwise
|
|
85
|
+
*/
|
|
86
|
+
function isNonEmptyArray(array) {
|
|
87
|
+
return array.length > 0;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Type guard to check if an object has a specific key and narrow its type.
|
|
91
|
+
*
|
|
92
|
+
* @param obj - The object to check
|
|
93
|
+
* @param key - The key to check for
|
|
94
|
+
* @returns True if the object has the key, false otherwise
|
|
95
|
+
*/
|
|
96
|
+
function objectHasKey(obj, key) {
|
|
97
|
+
return key in obj;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
export { isObjKey as a, objectHasKey as c, typedObjectEntries as d, typedObjectKeys as f, isNonEmptyArray as i, strictTypedObjectEntries as l, asPartialUndefinedValues as n, isSubTypeOf as o, unionsAreTheSame as p, asType as r, narrowStringToUnion as s, asNonPartial as t, typeOnRightExtendsLeftType as u };
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import { PartialPossiblyUndefinedValues } from
|
|
2
|
-
import { NonPartial } from
|
|
1
|
+
import { PartialPossiblyUndefinedValues } from "./typeUtils.mjs";
|
|
2
|
+
import { NonPartial } from "./typingUtils.mjs";
|
|
3
3
|
|
|
4
|
+
//#region src/typingFnUtils.d.ts
|
|
4
5
|
declare function asNonPartial<T extends Record<string, unknown>>(obj: T): NonPartial<T>;
|
|
5
6
|
/**
|
|
6
7
|
* A wrapper to Object.entries with a better typing inference
|
|
7
8
|
*
|
|
8
9
|
* @param obj
|
|
9
10
|
*/
|
|
10
|
-
declare function typedObjectEntries<T extends Record<string, unknown>>(obj: T): NonNullable<{
|
|
11
|
-
[K in keyof T]: [K, T[K]];
|
|
12
|
-
}[keyof T]>[];
|
|
11
|
+
declare function typedObjectEntries<T extends Record<string, unknown>>(obj: T): NonNullable<{ [K in keyof T]: [K, T[K]] }[keyof T]>[];
|
|
13
12
|
/**
|
|
14
13
|
* A wrapper to Object.entries with a better typing inference, but with strict
|
|
15
14
|
* typing narrowing keys to strings.
|
|
16
15
|
*
|
|
17
16
|
* @param obj
|
|
18
17
|
*/
|
|
19
|
-
declare function strictTypedObjectEntries<T extends Record<string, unknown>>(obj: T): NonNullable<{
|
|
20
|
-
[K in keyof T]: [K & string, T[K]];
|
|
21
|
-
}[keyof T]>[];
|
|
18
|
+
declare function strictTypedObjectEntries<T extends Record<string, unknown>>(obj: T): NonNullable<{ [K in keyof T]: [K & string, T[K]] }[keyof T]>[];
|
|
22
19
|
/**
|
|
23
20
|
* A wrapper to Object.keys with a better typing inference
|
|
24
21
|
*
|
|
@@ -55,17 +52,13 @@ declare const isSubTypeOf: typeof typeOnRightExtendsLeftType;
|
|
|
55
52
|
* @param obj
|
|
56
53
|
*/
|
|
57
54
|
declare function isObjKey<T extends Record<string, unknown>>(key: unknown, obj: T): key is keyof T;
|
|
58
|
-
type UnionDiff<T, U> = [
|
|
59
|
-
|
|
60
|
-
] extends [U] ? [
|
|
61
|
-
U
|
|
62
|
-
] extends [T] ? null : {
|
|
63
|
-
onRightHasExtraErr: Exclude<U, T>;
|
|
55
|
+
type UnionDiff<T, U> = [T] extends [U] ? [U] extends [T] ? null : {
|
|
56
|
+
onRightHasExtraErr: Exclude<U, T>;
|
|
64
57
|
} : [U] extends [T] ? {
|
|
65
|
-
|
|
58
|
+
onRightHasMissingErr: Exclude<T, U>;
|
|
66
59
|
} : {
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
onRightHasExtraErr: Exclude<U, T>;
|
|
61
|
+
onRightHasMissingErr: Exclude<T, U>;
|
|
69
62
|
};
|
|
70
63
|
/**
|
|
71
64
|
* Type helper to compare two union types and determine their relationship.
|
|
@@ -93,8 +86,6 @@ declare function isNonEmptyArray<T>(array: T[]): array is NonEmptyArray<T>;
|
|
|
93
86
|
* @param key - The key to check for
|
|
94
87
|
* @returns True if the object has the key, false otherwise
|
|
95
88
|
*/
|
|
96
|
-
declare function objectHasKey<T extends string>(obj: object, key: T): obj is object & {
|
|
97
|
-
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
export { type NonEmptyArray, asNonPartial, asPartialUndefinedValues, asType, isNonEmptyArray, isObjKey, isSubTypeOf, narrowStringToUnion, objectHasKey, strictTypedObjectEntries, typeOnRightExtendsLeftType, typedObjectEntries, typedObjectKeys, unionsAreTheSame };
|
|
89
|
+
declare function objectHasKey<T extends string>(obj: object, key: T): obj is object & { [K in T]: unknown };
|
|
90
|
+
//#endregion
|
|
91
|
+
export { NonEmptyArray, asNonPartial, asPartialUndefinedValues, asType, isNonEmptyArray, isObjKey, isSubTypeOf, narrowStringToUnion, objectHasKey, strictTypedObjectEntries, typeOnRightExtendsLeftType, typedObjectEntries, typedObjectKeys, unionsAreTheSame };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { a as isObjKey, c as objectHasKey, d as typedObjectEntries, f as typedObjectKeys, i as isNonEmptyArray, l as strictTypedObjectEntries, n as asPartialUndefinedValues, o as isSubTypeOf, p as unionsAreTheSame, r as asType, s as narrowStringToUnion, t as asNonPartial, u as typeOnRightExtendsLeftType } from "./typingFnUtils-Bb8drgKF.mjs";
|
|
2
|
+
|
|
3
|
+
export { asNonPartial, asPartialUndefinedValues, asType, isNonEmptyArray, isObjKey, isSubTypeOf, narrowStringToUnion, objectHasKey, strictTypedObjectEntries, typeOnRightExtendsLeftType, typedObjectEntries, typedObjectKeys, unionsAreTheSame };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/typingTestUtils.d.ts
|
|
2
|
+
type TestTypeIsEqual<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
|
|
2
3
|
type TestTypeNotEqual<X, Y> = true extends TestTypeIsEqual<X, Y> ? false : true;
|
|
3
4
|
declare function test(title: string, func: () => any): void;
|
|
4
5
|
declare function describe(title: string, func: () => any): void;
|
|
@@ -48,12 +49,7 @@ declare function expectTypesAre<X, Y>(result: TestTypeIsEqual<X, Y> extends true
|
|
|
48
49
|
* @param result Optional error parameter that appears only when types don't
|
|
49
50
|
* match
|
|
50
51
|
*/
|
|
51
|
-
declare function expectTypesAreEqual<X, Y>(...result: TestTypeIsEqual<X, Y> extends true ? [] : [
|
|
52
|
-
error: 'type assertion failed, types should be equal but',
|
|
53
|
-
typeOnLeft: X,
|
|
54
|
-
_: 'is not equal to',
|
|
55
|
-
typeOnRight: Y
|
|
56
|
-
]): void;
|
|
52
|
+
declare function expectTypesAreEqual<X, Y>(...result: TestTypeIsEqual<X, Y> extends true ? [] : [error: 'type assertion failed, types should be equal but', typeOnLeft: X, _: 'is not equal to', typeOnRight: Y]): void;
|
|
57
53
|
/**
|
|
58
54
|
* Helper function for type testing that ensures two types are not equal. If
|
|
59
55
|
* types are equal, it will show a compile-time error.
|
|
@@ -68,12 +64,12 @@ declare function expectTypesAreEqual<X, Y>(...result: TestTypeIsEqual<X, Y> exte
|
|
|
68
64
|
*/
|
|
69
65
|
declare function expectTypesAreNotEqual<X, Y>(...result: TestTypeIsEqual<X, Y> extends false ? [] : ['error: type assertion failed, types should be NOT equal']): void;
|
|
70
66
|
declare const typingTest: {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
test: typeof test;
|
|
68
|
+
describe: typeof describe;
|
|
69
|
+
expectType: typeof expectType;
|
|
70
|
+
expectTypesAre: typeof expectTypesAre;
|
|
71
|
+
expectTypesAreEqual: typeof expectTypesAreEqual;
|
|
72
|
+
expectTypesAreNotEqual: typeof expectTypesAreNotEqual;
|
|
77
73
|
};
|
|
78
|
-
|
|
79
|
-
export {
|
|
74
|
+
//#endregion
|
|
75
|
+
export { TestTypeIsEqual, TestTypeNotEqual, typingTest };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
//#region src/typingTestUtils.ts
|
|
2
|
+
function test(title, func) {
|
|
3
|
+
func();
|
|
4
|
+
}
|
|
5
|
+
function describe(title, func) {
|
|
6
|
+
func();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Helper function for type testing that ensures a type extends `true`. Used in
|
|
10
|
+
* combination with `TestTypeIsEqual` to verify type equality at compile time.
|
|
11
|
+
*
|
|
12
|
+
* @deprecated Use {@link expectTypesAreEqual} or {@link expectTypesAreNotEqual}
|
|
13
|
+
* instead
|
|
14
|
+
* @example
|
|
15
|
+
* expectType<TestTypeIsEqual<string, string>>(); // OK
|
|
16
|
+
* expectType<TestTypeIsEqual<string, number>>(); // Type error
|
|
17
|
+
*
|
|
18
|
+
* @template T Type that must extend `true`
|
|
19
|
+
* @returns An empty object cast to type T
|
|
20
|
+
*/
|
|
21
|
+
function expectType() {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Helper function for type testing that compares two types and expects a
|
|
26
|
+
* specific result. This function allows for more explicit type equality
|
|
27
|
+
* assertions with a descriptive result.
|
|
28
|
+
*
|
|
29
|
+
* @deprecated Use {@link expectTypesAreEqual} or {@link expectTypesAreNotEqual}
|
|
30
|
+
* instead
|
|
31
|
+
* @example
|
|
32
|
+
* expectTypesAre<string, string>('equal'); // OK
|
|
33
|
+
* expectTypesAre<string, number>('notEqual'); // OK
|
|
34
|
+
* expectTypesAre<string, string>('notEqual'); // Type error
|
|
35
|
+
*
|
|
36
|
+
* @template X First type to compare
|
|
37
|
+
* @template Y Second type to compare
|
|
38
|
+
* @param result Expected comparison result: 'equal' if types are equal,
|
|
39
|
+
* 'notEqual' if they differ
|
|
40
|
+
*/
|
|
41
|
+
function expectTypesAre(result) {}
|
|
42
|
+
/**
|
|
43
|
+
* Helper function for type testing that ensures two types are equal. If types
|
|
44
|
+
* are not equal, it will show a compile-time error with details about the
|
|
45
|
+
* mismatch.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* expectTypesAreEqual<string, string>(); // OK
|
|
49
|
+
* expectTypesAreEqual<string, number>(); // Compile error with details
|
|
50
|
+
*
|
|
51
|
+
* @template X First type to compare
|
|
52
|
+
* @template Y Second type to compare
|
|
53
|
+
* @param result Optional error parameter that appears only when types don't
|
|
54
|
+
* match
|
|
55
|
+
*/
|
|
56
|
+
function expectTypesAreEqual(...result) {}
|
|
57
|
+
/**
|
|
58
|
+
* Helper function for type testing that ensures two types are not equal. If
|
|
59
|
+
* types are equal, it will show a compile-time error.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* expectTypesAreNotEqual<string, number>(); // OK
|
|
63
|
+
* expectTypesAreNotEqual<string, string>(); // Compile error
|
|
64
|
+
*
|
|
65
|
+
* @template X First type to compare
|
|
66
|
+
* @template Y Second type to compare
|
|
67
|
+
* @param result Optional error parameter that appears only when types match
|
|
68
|
+
*/
|
|
69
|
+
function expectTypesAreNotEqual(...result) {}
|
|
70
|
+
const typingTest = {
|
|
71
|
+
test,
|
|
72
|
+
describe,
|
|
73
|
+
expectType,
|
|
74
|
+
expectTypesAre,
|
|
75
|
+
expectTypesAreEqual,
|
|
76
|
+
expectTypesAreNotEqual
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
export { typingTest };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/typingUtils.d.ts
|
|
2
|
+
/** @deprecated Use `PartialRecord` from `@ls-stack/utils/typeUtils` instead */
|
|
3
|
+
type PartialRecord<K$1 extends keyof any, T> = { [P in K$1]?: T };
|
|
4
|
+
/** @deprecated Use `NonPartial` from `@ls-stack/utils/typeUtils` instead */
|
|
5
|
+
type NonPartial<T> = { [K in keyof Required<T>]: T[K] };
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use `ObjKeysWithValuesOfType` from `@ls-stack/utils/typeUtils`
|
|
8
|
+
* instead
|
|
9
|
+
*/
|
|
10
|
+
type ObjKeysWithValuesOfType<Obj extends Record<PropertyKey, unknown>, ValueType> = { [K in keyof Obj]: Obj[K] extends ValueType ? K : never }[keyof Obj];
|
|
11
|
+
/** @deprecated Use `IsAny` from `@ls-stack/utils/typeUtils` instead */
|
|
12
|
+
type IsAny<T> = unknown extends T ? [keyof T] extends [never] ? false : true : false;
|
|
13
|
+
/** @deprecated Use `DeepPrettify` from `@ls-stack/utils/typeUtils` instead */
|
|
14
|
+
type Prettify<T extends Record<string, unknown>> = { [P in keyof T]: T[P] } & {};
|
|
15
|
+
/** @deprecated Use `DeepPrettify` from `@ls-stack/utils/typeUtils` instead */
|
|
16
|
+
type DeepPrettify<T> = { [K in keyof T]: T[K] extends Record<string, unknown> ? DeepPrettify<T[K]> : T[K] } & {};
|
|
17
|
+
type AddPrefixToObjKeys<T extends Record<string, unknown>, Prefix extends string> = { [K in keyof T & string as `${Prefix}${K}`]: T[K] };
|
|
18
|
+
type AddSuffixToObjKeys<T extends Record<string, unknown>, Suffix extends string> = { [K in keyof T & string as `${K}${Suffix}`]: T[K] };
|
|
19
|
+
//#endregion
|
|
20
|
+
export { AddPrefixToObjKeys, AddSuffixToObjKeys, DeepPrettify, IsAny, NonPartial, ObjKeysWithValuesOfType, PartialRecord, Prettify };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/yamlStringify.d.ts
|
|
2
|
+
type YamlStringifyOptions = {
|
|
3
|
+
maxLineLength?: number;
|
|
4
|
+
showUndefined?: boolean;
|
|
5
|
+
maxDepth?: number;
|
|
6
|
+
collapseObjects?: boolean;
|
|
7
|
+
addRootObjSpaces?: 'before' | 'after' | 'beforeAndAfter' | false;
|
|
8
|
+
};
|
|
9
|
+
declare function yamlStringify(obj: unknown, {
|
|
10
|
+
maxLineLength,
|
|
11
|
+
showUndefined,
|
|
12
|
+
maxDepth,
|
|
13
|
+
collapseObjects,
|
|
14
|
+
addRootObjSpaces
|
|
15
|
+
}?: YamlStringifyOptions): string;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { YamlStringifyOptions, yamlStringify };
|