@bemedev/decompose 1.1.4 → 1.3.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/README.md CHANGED
@@ -34,25 +34,7 @@ const recomposed = recompose(decomposed);
34
34
  // Returns original object structure
35
35
  ```
36
36
 
37
- ## Changelog
38
-
39
- <details>
40
- <summary>View changelog</summary>
41
-
42
- ### [0.8.1] - 2024-03-15 19:30
43
-
44
- - Fix decompose array
45
-
46
- <br/>
47
-
48
- ### [0.8.0] - 2024-02-18 19:30
49
-
50
- - Initial public release
51
- - Added core decompose functionality
52
- - Added recompose function
53
- - Added TypeScript support
54
-
55
- </details>
37
+ ## [CHANGELOG](https://github.com/chlbri/decompose/blob/main/CHANGELOG.md)
56
38
 
57
39
  ## License
58
40
 
@@ -70,4 +52,4 @@ chlbri (bri_lvi@icloud.com)
70
52
 
71
53
  ## Liens
72
54
 
73
- - [Documentation](https://github.com/chlbri/types)
55
+ - [Documentation](https://github.com/chlbri/decompose)
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var types_types = require('./types.types.cjs');
4
+
5
+ const _flat = (val, omitKey, options, path = '') => {
6
+ const _options = { ...types_types.DEFAULT_FLAT_OPTIONS, ...options };
7
+ const { [omitKey]: recursives, ...rest } = val;
8
+ const check = _options.children;
9
+ let out = {};
10
+ out[path === '' ? _options.sep : path] = check ? val : rest;
11
+ if (recursives) {
12
+ for (const key in recursives) {
13
+ if (Object.prototype.hasOwnProperty.call(recursives, key)) {
14
+ const element = recursives[key];
15
+ const inner = _flat(element, omitKey, options, `${path}${_options.sep}${key}`);
16
+ out = { ...out, ...inner };
17
+ }
18
+ }
19
+ }
20
+ return out;
21
+ };
22
+ const flatByKey = (val, key, options) => _flat(val, key, options);
23
+ flatByKey.low = _flat;
24
+ flatByKey.strict = _flat;
25
+
26
+ exports.flatByKey = flatByKey;
27
+ //# sourceMappingURL=flatByKey.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatByKey.cjs","sources":["../src/flatByKey.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\nimport {\n DEFAULT_FLAT_OPTIONS,\n type FlatByKey,\n type FlatOptions,\n} from './types.types';\n\ntype Flat_F = <\n T extends types.Ru,\n omit extends types.PickKeysBy<T, object> & string,\n>(\n val: T,\n omitKey: omit,\n options?: FlatOptions,\n) => FlatByKey<T, omit, FlatOptions>;\n\ntype _Flat_F = (\n val: any,\n omitKey: string,\n options?: FlatOptions,\n path?: string,\n) => any;\n\nexport type Flat = Flat_F & {\n strict: Flat_F;\n low: _Flat_F;\n};\n\nconst _flat: _Flat_F = (val, omitKey, options, path = '') => {\n const _options = { ...DEFAULT_FLAT_OPTIONS, ...options };\n const { [omitKey]: recursives, ...rest } = val;\n\n const check = _options.children;\n\n let out: any = {};\n out[path === '' ? _options.sep : path] = check ? val : rest;\n\n if (recursives) {\n for (const key in recursives) {\n if (Object.prototype.hasOwnProperty.call(recursives, key)) {\n const element = recursives[key];\n const inner = _flat(\n element,\n omitKey,\n options,\n `${path}${_options.sep}${key}`,\n );\n out = { ...out, ...inner };\n }\n }\n }\n\n return out;\n};\n\nexport const flatByKey: Flat = (val, key, options) =>\n _flat(val, key, options);\nflatByKey.low = _flat;\nflatByKey.strict = _flat;\n"],"names":["DEFAULT_FLAT_OPTIONS"],"mappings":";;;;AA4BA,MAAM,KAAK,GAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,KAAI;IAC1D,MAAM,QAAQ,GAAG,EAAE,GAAGA,gCAAoB,EAAE,GAAG,OAAO,EAAE;AACxD,IAAA,MAAM,EAAE,CAAC,OAAO,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;AAE9C,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ;IAE/B,IAAI,GAAG,GAAQ,EAAE;IACjB,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI;IAE3D,IAAI,UAAU,EAAE;AACd,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACzD,gBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,EACP,OAAO,EACP,OAAO,EACP,GAAG,IAAI,CAAA,EAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAA,CAAE,CAC/B;gBACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE;YAC5B;QACF;IACF;AAEA,IAAA,OAAO,GAAG;AACZ,CAAC;MAEY,SAAS,GAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,KAC/C,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO;AACzB,SAAS,CAAC,GAAG,GAAG,KAAK;AACrB,SAAS,CAAC,MAAM,GAAG,KAAK;;;;"}
@@ -1,11 +1,11 @@
1
1
  import type { types } from '@bemedev/types';
2
2
  import { type FlatByKey, type FlatOptions } from './types.types';
3
3
  type Flat_F = <T extends types.Ru, omit extends types.PickKeysBy<T, object> & string>(val: T, omitKey: omit, options?: FlatOptions) => FlatByKey<T, omit, FlatOptions>;
4
- type _Flat_F = (val: any, omitKey: string, options?: FlatOptions) => any;
4
+ type _Flat_F = (val: any, omitKey: string, options?: FlatOptions, path?: string) => any;
5
5
  export type Flat = Flat_F & {
6
6
  strict: Flat_F;
7
7
  low: _Flat_F;
8
8
  };
9
- export declare const flat: Flat;
9
+ export declare const flatByKey: Flat;
10
10
  export {};
11
- //# sourceMappingURL=flat.d.ts.map
11
+ //# sourceMappingURL=flatByKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatByKey.d.ts","sourceRoot":"","sources":["../src/flatByKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAEvB,KAAK,MAAM,GAAG,CACZ,CAAC,SAAS,KAAK,CAAC,EAAE,EAClB,IAAI,SAAS,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,EAEjD,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,IAAI,EACb,OAAO,CAAC,EAAE,WAAW,KAClB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAErC,KAAK,OAAO,GAAG,CACb,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,WAAW,EACrB,IAAI,CAAC,EAAE,MAAM,KACV,GAAG,CAAC;AAET,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AA6BF,eAAO,MAAM,SAAS,EAAE,IACE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { DEFAULT_FLAT_OPTIONS } from './types.types.js';
2
+
3
+ const _flat = (val, omitKey, options, path = '') => {
4
+ const _options = { ...DEFAULT_FLAT_OPTIONS, ...options };
5
+ const { [omitKey]: recursives, ...rest } = val;
6
+ const check = _options.children;
7
+ let out = {};
8
+ out[path === '' ? _options.sep : path] = check ? val : rest;
9
+ if (recursives) {
10
+ for (const key in recursives) {
11
+ if (Object.prototype.hasOwnProperty.call(recursives, key)) {
12
+ const element = recursives[key];
13
+ const inner = _flat(element, omitKey, options, `${path}${_options.sep}${key}`);
14
+ out = { ...out, ...inner };
15
+ }
16
+ }
17
+ }
18
+ return out;
19
+ };
20
+ const flatByKey = (val, key, options) => _flat(val, key, options);
21
+ flatByKey.low = _flat;
22
+ flatByKey.strict = _flat;
23
+
24
+ export { flatByKey };
25
+ //# sourceMappingURL=flatByKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatByKey.js","sources":["../src/flatByKey.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\nimport {\n DEFAULT_FLAT_OPTIONS,\n type FlatByKey,\n type FlatOptions,\n} from './types.types';\n\ntype Flat_F = <\n T extends types.Ru,\n omit extends types.PickKeysBy<T, object> & string,\n>(\n val: T,\n omitKey: omit,\n options?: FlatOptions,\n) => FlatByKey<T, omit, FlatOptions>;\n\ntype _Flat_F = (\n val: any,\n omitKey: string,\n options?: FlatOptions,\n path?: string,\n) => any;\n\nexport type Flat = Flat_F & {\n strict: Flat_F;\n low: _Flat_F;\n};\n\nconst _flat: _Flat_F = (val, omitKey, options, path = '') => {\n const _options = { ...DEFAULT_FLAT_OPTIONS, ...options };\n const { [omitKey]: recursives, ...rest } = val;\n\n const check = _options.children;\n\n let out: any = {};\n out[path === '' ? _options.sep : path] = check ? val : rest;\n\n if (recursives) {\n for (const key in recursives) {\n if (Object.prototype.hasOwnProperty.call(recursives, key)) {\n const element = recursives[key];\n const inner = _flat(\n element,\n omitKey,\n options,\n `${path}${_options.sep}${key}`,\n );\n out = { ...out, ...inner };\n }\n }\n }\n\n return out;\n};\n\nexport const flatByKey: Flat = (val, key, options) =>\n _flat(val, key, options);\nflatByKey.low = _flat;\nflatByKey.strict = _flat;\n"],"names":[],"mappings":";;AA4BA,MAAM,KAAK,GAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,KAAI;IAC1D,MAAM,QAAQ,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,OAAO,EAAE;AACxD,IAAA,MAAM,EAAE,CAAC,OAAO,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;AAE9C,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ;IAE/B,IAAI,GAAG,GAAQ,EAAE;IACjB,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI;IAE3D,IAAI,UAAU,EAAE;AACd,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACzD,gBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,EACP,OAAO,EACP,OAAO,EACP,GAAG,IAAI,CAAA,EAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAA,CAAE,CAC/B;gBACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE;YAC5B;QACF;IACF;AAEA,IAAA,OAAO,GAAG;AACZ,CAAC;MAEY,SAAS,GAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,KAC/C,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO;AACzB,SAAS,CAAC,GAAG,GAAG,KAAK;AACrB,SAAS,CAAC,MAAM,GAAG,KAAK;;;;"}
package/lib/index.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  var decompose = require('./decompose.cjs');
4
4
  var decomposeKeys = require('./decomposeKeys.cjs');
5
5
  var decomposeSV = require('./decomposeSV.cjs');
6
+ var flatByKey = require('./flatByKey.cjs');
6
7
  var recompose = require('./recompose.cjs');
7
8
  var sortMap = require('./sortMap.cjs');
8
9
  var types_types = require('./types.types.cjs');
@@ -12,6 +13,7 @@ var types_types = require('./types.types.cjs');
12
13
  exports.decompose = decompose.decompose;
13
14
  exports.decomposeKeys = decomposeKeys.decomposeKeys;
14
15
  exports.decomposeSV = decomposeSV.decomposeSV;
16
+ exports.flatByKey = flatByKey.flatByKey;
15
17
  exports.recompose = recompose.recompose;
16
18
  exports.recomposeObjectUrl = recompose.recomposeObjectUrl;
17
19
  exports.sortMap = sortMap.sortMap;
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
package/lib/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './decompose';
2
2
  export * from './decomposeKeys';
3
3
  export * from './decomposeSV';
4
+ export * from './flatByKey';
4
5
  export * from './recompose';
5
6
  export * from './sortMap';
6
7
  export * from './types.types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
package/lib/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { decompose } from './decompose.js';
2
2
  export { decomposeKeys } from './decomposeKeys.js';
3
3
  export { decomposeSV } from './decomposeSV.js';
4
+ export { flatByKey } from './flatByKey.js';
4
5
  export { recompose, recomposeObjectUrl } from './recompose.js';
5
6
  export { sortMap } from './sortMap.js';
6
7
  export { DEFAULT_DECOMPOSE_OPTIONS, DEFAULT_FLAT_OPTIONS } from './types.types.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.types.cjs","sources":["../src/types.types.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\n\nexport type StateMatching<\n T extends StateValue,\n Key = keyof T,\n> = T extends StateValueMap\n ? Key extends string\n ? T[Key] extends StateValueMap\n ? `${Key}.${StateMatching<T[Key]>}` | Key\n : `${Key}.${T[Key] & string}` | Key\n : never\n : T;\n\nexport type KeysMatching<\n T extends types.TrueObject,\n AddObjectKeys extends boolean = true,\n Key extends keyof T = keyof T,\n> = Key extends string\n ? Required<T[Key]> extends types.TrueObject\n ?\n | `${Key}.${KeysMatching<Required<T[Key]>, AddObjectKeys> & string}`\n | (AddObjectKeys extends true ? Key : never)\n : Key\n : never;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type EmptyObject = {};\n\n// #region Decompose\n\n// #region type Decompose\ntype WO = 'key' | 'object' | 'both';\n\ntype _Decompose<\n T,\n sep extends string = '.',\n wo extends WO = 'key',\n Remaining extends string = '',\n> = {\n [k in keyof T]: T[k] extends infer Tk\n ? types._UnionToIntersection2<\n Tk extends types.AnyArray<infer A>\n ? number extends Tk['length']\n ? (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject) &\n (wo extends 'key' | 'both'\n ? {\n [Key in `${Remaining}${k & string}${sep}[${number}]`]: A;\n }\n : EmptyObject)\n : Extract<\n {\n [Key in Extract<\n keyof Tk,\n `${number}`\n > as `${Remaining}${k & string}${sep}[${Key & string}]`]: Tk[Key] extends infer TK2\n ? TK2 extends Ru\n ? _Decompose<\n TK2,\n sep,\n wo,\n `${Remaining}${k & string}${sep}[${Key & string}]${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : never\n : never;\n } extends infer ARR\n ? ARR[keyof ARR]\n : never,\n object\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : Tk extends Ru\n ? object extends Tk\n ? Record<`${Remaining}${k & string}`, Tk>\n : _Decompose<\n Tk,\n sep,\n wo,\n `${Remaining}${k & string}${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : never\n >\n : never;\n}[keyof T];\n\nexport type DecomposeOptions = {\n sep?: string;\n object?: WO;\n start?: boolean;\n};\n\nexport const DEFAULT_DECOMPOSE_OPTIONS = {\n sep: '.',\n object: 'key',\n start: true,\n} as const satisfies DecomposeOptions;\n\ntype DefaultDecomposeOptions = typeof DEFAULT_DECOMPOSE_OPTIONS;\n\nexport type Decompose<\n T,\n O extends DecomposeOptions = DefaultDecomposeOptions,\n sep extends string = O['sep'] extends string\n ? O['sep']\n : DefaultDecomposeOptions['sep'],\n> =\n NonNullable<unknown> extends T\n ? NonNullable<unknown>\n : types.UnionToIntersection<\n _Decompose<\n T,\n sep,\n O['object'] extends WO\n ? O['object']\n : DefaultDecomposeOptions['object'],\n O['start'] extends infer S extends boolean\n ? S extends true\n ? sep\n : ''\n : sep\n >\n >;\n// #endregion\n\n// #endregion\n\n// #region type FlatByKey\ntype _ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Exclude<\n S extends `${string}${T}${infer V}` ? _ExcludeFrom<V, T, Delimiter> : S,\n `${string}${string}${Delimiter}${string}` | ''\n>;\n\nexport type ExtractEndsFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Extract<\n S,\n `${string}${Delimiter}${T}${_ExcludeFrom<S, T, Delimiter>}`\n>;\n\nexport type ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = S extends `${infer P}${Delimiter}${T}${infer V}`\n ? ExcludeFrom<`${P}${V}`, T, Delimiter>\n : S;\n\n// export type ExcludeFrom<\n// S extends string,\n// T extends string,\n// Delimiter extends string = '.',\n// > = _ExcludeFrom2<ExtractFrom<S, T, Delimiter>, T>;\n\ntype _FlatByKey<\n T,\n KEY extends types.PickKeysBy<T, object>,\n wc extends boolean = false,\n sep extends string = '.',\n> = (Decompose<T, { sep: sep; object: 'object' }> extends infer D\n ? {\n [K in ExtractEndsFrom<keyof D & string, KEY> as ExcludeFrom<\n K,\n KEY\n >]: wc extends true ? D[K] : Omit<D[K], KEY>;\n }\n : never) &\n Record<sep, T>;\n\nexport type FlatOptions = {\n sep?: string;\n children?: boolean;\n};\n\nexport const DEFAULT_FLAT_OPTIONS = {\n sep: '.',\n children: false,\n} as const satisfies FlatOptions;\n\ntype DefaultFlatOptions = typeof DEFAULT_FLAT_OPTIONS;\n\nexport type FlatByKey<\n T,\n omit extends types.PickKeysBy<T, object>,\n O extends FlatOptions = DefaultFlatOptions,\n> = _FlatByKey<\n T,\n omit,\n O['children'] extends boolean\n ? O['children']\n : DefaultFlatOptions['children'],\n O['sep'] extends string ? O['sep'] : DefaultFlatOptions['sep']\n>;\n\n//#endregion\n\nexport type StateValue = string | StateValueMap;\n\nexport interface StateValueMap {\n [key: string]: StateValue;\n}\n\nexport type Ru = Record<string, unknown>;\n\n// #region Recompose\n// #region Preparation\n\nexport type UnionKeys<U> = U extends Record<infer K, any> ? K : never;\n\ntype SplitSeparator<S extends string> = S extends `${infer A}.${string}`\n ? A\n : S;\n\n// Simple tuple creation for arrays up to 10 elements\n\nexport type IndexString = `[${number}]`;\n\n// #endregion\n\ntype _Recompose<T extends Ru> = {\n [key in keyof T as SplitSeparator<\n key & string\n >]: types._UnionToIntersection1<\n key extends `${string}.${infer A}`\n ? A extends `${string}.${string}`\n ? _Recompose<Record<A, T[key]>>\n : Record<A, T[key]>\n : T[key]\n >;\n};\n\nexport type Recompose<T extends Ru> = Recompose3<_Recompose<T>>;\n\nexport type Compare<T, U> = T extends U\n ? U extends T\n ? true\n : false\n : false;\n\nexport type Recompose3<T extends types.To> = keyof T extends never\n ? NonNullable<unknown>\n : keyof T extends IndexString\n ? types.ValuesOf<T>[]\n : {\n [K in keyof T]: T[K] extends infer TK extends types.To\n ? Recompose3<TK>\n : T[K];\n };\n\n// #endregion\n"],"names":[],"mappings":";;AA8GO,MAAM,yBAAyB,GAAG;AACvC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,IAAI;;AAqFN,MAAM,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,QAAQ,EAAE,KAAK;;AAyEjB;;;;;"}
1
+ {"version":3,"file":"types.types.cjs","sources":["../src/types.types.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\n\nexport type StateMatching<\n T extends StateValue,\n Key = keyof T,\n> = T extends StateValueMap\n ? Key extends string\n ? T[Key] extends StateValueMap\n ? `${Key}.${StateMatching<T[Key]>}` | Key\n : `${Key}.${T[Key] & string}` | Key\n : never\n : T;\n\nexport type KeysMatching<\n T extends types.TrueObject,\n AddObjectKeys extends boolean = true,\n Key extends keyof T = keyof T,\n> = Key extends string\n ? Required<T[Key]> extends types.TrueObject\n ?\n | `${Key}.${KeysMatching<Required<T[Key]>, AddObjectKeys> & string}`\n | (AddObjectKeys extends true ? Key : never)\n : Key\n : never;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type EmptyObject = {};\n\n// #region Decompose\n\n// #region type Decompose\ntype WO = 'key' | 'object' | 'both';\n\ntype _Decompose<\n T,\n sep extends string = '.',\n wo extends WO = 'key',\n Remaining extends string = '',\n> = {\n [k in Exclude<keyof T, undefined>]: T[k] extends infer Tk\n ? types._UnionToIntersection2<\n Tk extends types.AnyArray<infer A>\n ? number extends Tk['length']\n ? (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject) &\n (wo extends 'key' | 'both'\n ? {\n [Key in `${Remaining}${k & string}${sep}[${number}]`]: A;\n }\n : EmptyObject)\n : Extract<\n {\n [Key in Extract<\n keyof Tk,\n `${number}`\n > as `${Remaining}${k & string}${sep}[${Key & string}]`]: Tk[Key] extends infer TK2\n ? TK2 extends Ru\n ? _Decompose<\n TK2,\n sep,\n wo,\n `${Remaining}${k & string}${sep}[${Key & string}]${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : never\n : never;\n } extends infer ARR\n ? ARR[keyof ARR]\n : never,\n object\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : Tk extends Ru\n ? object extends Required<Tk>\n ? Record<`${Remaining}${k & string}`, Tk>\n : _Decompose<\n Required<Tk>,\n sep,\n wo,\n `${Remaining}${k & string}${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : never\n >\n : never;\n}[Exclude<keyof T, undefined>];\n\nexport type DecomposeOptions = {\n sep?: string;\n object?: WO;\n start?: boolean;\n};\n\nexport const DEFAULT_DECOMPOSE_OPTIONS = {\n sep: '.',\n object: 'key',\n start: true,\n} as const satisfies DecomposeOptions;\n\ntype DefaultDecomposeOptions = typeof DEFAULT_DECOMPOSE_OPTIONS;\n\nexport type Decompose<\n T,\n O extends DecomposeOptions = DefaultDecomposeOptions,\n sep extends string = O['sep'] extends string\n ? O['sep']\n : DefaultDecomposeOptions['sep'],\n> =\n NonNullable<unknown> extends Required<T>\n ? NonNullable<unknown>\n : types.UnionToIntersection<\n _Decompose<\n T,\n sep,\n O['object'] extends WO\n ? O['object']\n : DefaultDecomposeOptions['object'],\n O['start'] extends infer S extends boolean\n ? S extends true\n ? sep\n : ''\n : sep\n >\n > extends infer P\n ? {\n [K in keyof P]: P[K];\n }\n : never;\n// #endregion\n\n// #endregion\n\n// #region type FlatByKey\ntype _ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Exclude<\n S extends `${string}${T}${infer V}` ? _ExcludeFrom<V, T, Delimiter> : S,\n `${string}${string}${Delimiter}${string}` | ''\n>;\n\nexport type ExtractEndsFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Extract<\n S,\n `${string}${Delimiter}${T}${_ExcludeFrom<S, T, Delimiter>}`\n>;\n\nexport type ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = S extends `${infer P}${Delimiter}${T}${infer V}`\n ? ExcludeFrom<`${P}${V}`, T, Delimiter>\n : S;\n\n// export type ExcludeFrom<\n// S extends string,\n// T extends string,\n// Delimiter extends string = '.',\n// > = _ExcludeFrom2<ExtractFrom<S, T, Delimiter>, T>;\n\ntype _FlatByKey<\n T,\n KEY extends types.PickKeysBy<T, object>,\n wc extends boolean = false,\n sep extends string = '.',\n> = (Decompose<T, { sep: sep; object: 'object' }> extends infer D\n ? {\n [K in ExtractEndsFrom<keyof D & string, KEY> as ExcludeFrom<\n K,\n KEY\n >]: wc extends true ? D[K] : Omit<D[K], KEY>;\n }\n : never) &\n Record<sep, T>;\n\nexport type FlatOptions = {\n sep?: string;\n children?: boolean;\n};\n\nexport const DEFAULT_FLAT_OPTIONS = {\n sep: '.',\n children: false,\n} as const satisfies FlatOptions;\n\ntype DefaultFlatOptions = typeof DEFAULT_FLAT_OPTIONS;\n\nexport type FlatByKey<\n T,\n omit extends types.PickKeysBy<T, object>,\n O extends FlatOptions = DefaultFlatOptions,\n> = _FlatByKey<\n T,\n omit,\n O['children'] extends boolean\n ? O['children']\n : DefaultFlatOptions['children'],\n O['sep'] extends string ? O['sep'] : DefaultFlatOptions['sep']\n>;\n\n//#endregion\n\nexport type StateValue = string | StateValueMap;\n\nexport interface StateValueMap {\n [key: string]: StateValue;\n}\n\nexport type Ru = Record<string, unknown>;\n\n// #region Recompose\n// #region Preparation\n\nexport type UnionKeys<U> = U extends Record<infer K, any> ? K : never;\n\ntype SplitSeparator<S extends string> = S extends `${infer A}.${string}`\n ? A\n : S;\n\n// Simple tuple creation for arrays up to 10 elements\n\nexport type IndexString = `[${number}]`;\n\n// #endregion\n\ntype _Recompose<T extends Ru> = {\n [key in keyof T as SplitSeparator<\n key & string\n >]: types._UnionToIntersection1<\n key extends `${string}.${infer A}`\n ? A extends `${string}.${string}`\n ? _Recompose<Record<A, T[key]>>\n : Record<A, T[key]>\n : T[key]\n >;\n};\n\nexport type Recompose<T extends Ru> = Recompose3<_Recompose<T>>;\n\nexport type Compare<T, U> = T extends U\n ? U extends T\n ? true\n : false\n : false;\n\nexport type Recompose3<T extends types.To> = keyof T extends never\n ? NonNullable<unknown>\n : keyof T extends IndexString\n ? types.ValuesOf<T>[]\n : {\n [K in keyof T]: T[K] extends infer TK extends types.To\n ? Recompose3<TK>\n : T[K];\n };\n\n// #endregion\n"],"names":[],"mappings":";;AA8GO,MAAM,yBAAyB,GAAG;AACvC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,IAAI;;AAyFN,MAAM,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,QAAQ,EAAE,KAAK;;AAyEjB;;;;;"}
@@ -4,12 +4,12 @@ export type KeysMatching<T extends types.TrueObject, AddObjectKeys extends boole
4
4
  export type EmptyObject = {};
5
5
  type WO = 'key' | 'object' | 'both';
6
6
  type _Decompose<T, sep extends string = '.', wo extends WO = 'key', Remaining extends string = ''> = {
7
- [k in keyof T]: T[k] extends infer Tk ? types._UnionToIntersection2<Tk extends types.AnyArray<infer A> ? number extends Tk['length'] ? (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : EmptyObject) & (wo extends 'key' | 'both' ? {
7
+ [k in Exclude<keyof T, undefined>]: T[k] extends infer Tk ? types._UnionToIntersection2<Tk extends types.AnyArray<infer A> ? number extends Tk['length'] ? (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : EmptyObject) & (wo extends 'key' | 'both' ? {
8
8
  [Key in `${Remaining}${k & string}${sep}[${number}]`]: A;
9
9
  } : EmptyObject) : Extract<{
10
10
  [Key in Extract<keyof Tk, `${number}`> as `${Remaining}${k & string}${sep}[${Key & string}]`]: Tk[Key] extends infer TK2 ? TK2 extends Ru ? _Decompose<TK2, sep, wo, `${Remaining}${k & string}${sep}[${Key & string}]${sep}`> & (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}${sep}[${Key & string}]`, TK2> : EmptyObject) : wo extends 'key' | 'both' ? Record<`${Remaining}${k & string}${sep}[${Key & string}]`, TK2> : never : never;
11
- } extends infer ARR ? ARR[keyof ARR] : never, object> & (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : EmptyObject) : Tk extends Ru ? object extends Tk ? Record<`${Remaining}${k & string}`, Tk> : _Decompose<Tk, sep, wo, `${Remaining}${k & string}${sep}`> & (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : EmptyObject) : wo extends 'key' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : never> : never;
12
- }[keyof T];
11
+ } extends infer ARR ? ARR[keyof ARR] : never, object> & (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : EmptyObject) : Tk extends Ru ? object extends Required<Tk> ? Record<`${Remaining}${k & string}`, Tk> : _Decompose<Required<Tk>, sep, wo, `${Remaining}${k & string}${sep}`> & (wo extends 'object' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : EmptyObject) : wo extends 'key' | 'both' ? Record<`${Remaining}${k & string}`, Tk> : never> : never;
12
+ }[Exclude<keyof T, undefined>];
13
13
  export type DecomposeOptions = {
14
14
  sep?: string;
15
15
  object?: WO;
@@ -21,7 +21,9 @@ export declare const DEFAULT_DECOMPOSE_OPTIONS: {
21
21
  readonly start: true;
22
22
  };
23
23
  type DefaultDecomposeOptions = typeof DEFAULT_DECOMPOSE_OPTIONS;
24
- export type Decompose<T, O extends DecomposeOptions = DefaultDecomposeOptions, sep extends string = O['sep'] extends string ? O['sep'] : DefaultDecomposeOptions['sep']> = NonNullable<unknown> extends T ? NonNullable<unknown> : types.UnionToIntersection<_Decompose<T, sep, O['object'] extends WO ? O['object'] : DefaultDecomposeOptions['object'], O['start'] extends infer S extends boolean ? S extends true ? sep : '' : sep>>;
24
+ export type Decompose<T, O extends DecomposeOptions = DefaultDecomposeOptions, sep extends string = O['sep'] extends string ? O['sep'] : DefaultDecomposeOptions['sep']> = NonNullable<unknown> extends Required<T> ? NonNullable<unknown> : types.UnionToIntersection<_Decompose<T, sep, O['object'] extends WO ? O['object'] : DefaultDecomposeOptions['object'], O['start'] extends infer S extends boolean ? S extends true ? sep : '' : sep>> extends infer P ? {
25
+ [K in keyof P]: P[K];
26
+ } : never;
25
27
  type _ExcludeFrom<S extends string, T extends string, Delimiter extends string = '.'> = Exclude<S extends `${string}${T}${infer V}` ? _ExcludeFrom<V, T, Delimiter> : S, `${string}${string}${Delimiter}${string}` | ''>;
26
28
  export type ExtractEndsFrom<S extends string, T extends string, Delimiter extends string = '.'> = Extract<S, `${string}${Delimiter}${T}${_ExcludeFrom<S, T, Delimiter>}`>;
27
29
  export type ExcludeFrom<S extends string, T extends string, Delimiter extends string = '.'> = S extends `${infer P}${Delimiter}${T}${infer V}` ? ExcludeFrom<`${P}${V}`, T, Delimiter> : S;
@@ -1 +1 @@
1
- {"version":3,"file":"types.types.d.ts","sourceRoot":"","sources":["../src/types.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.types.d.ts","sourceRoot":"","sources":["../src/types.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.types.js","sources":["../src/types.types.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\n\nexport type StateMatching<\n T extends StateValue,\n Key = keyof T,\n> = T extends StateValueMap\n ? Key extends string\n ? T[Key] extends StateValueMap\n ? `${Key}.${StateMatching<T[Key]>}` | Key\n : `${Key}.${T[Key] & string}` | Key\n : never\n : T;\n\nexport type KeysMatching<\n T extends types.TrueObject,\n AddObjectKeys extends boolean = true,\n Key extends keyof T = keyof T,\n> = Key extends string\n ? Required<T[Key]> extends types.TrueObject\n ?\n | `${Key}.${KeysMatching<Required<T[Key]>, AddObjectKeys> & string}`\n | (AddObjectKeys extends true ? Key : never)\n : Key\n : never;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type EmptyObject = {};\n\n// #region Decompose\n\n// #region type Decompose\ntype WO = 'key' | 'object' | 'both';\n\ntype _Decompose<\n T,\n sep extends string = '.',\n wo extends WO = 'key',\n Remaining extends string = '',\n> = {\n [k in keyof T]: T[k] extends infer Tk\n ? types._UnionToIntersection2<\n Tk extends types.AnyArray<infer A>\n ? number extends Tk['length']\n ? (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject) &\n (wo extends 'key' | 'both'\n ? {\n [Key in `${Remaining}${k & string}${sep}[${number}]`]: A;\n }\n : EmptyObject)\n : Extract<\n {\n [Key in Extract<\n keyof Tk,\n `${number}`\n > as `${Remaining}${k & string}${sep}[${Key & string}]`]: Tk[Key] extends infer TK2\n ? TK2 extends Ru\n ? _Decompose<\n TK2,\n sep,\n wo,\n `${Remaining}${k & string}${sep}[${Key & string}]${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : never\n : never;\n } extends infer ARR\n ? ARR[keyof ARR]\n : never,\n object\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : Tk extends Ru\n ? object extends Tk\n ? Record<`${Remaining}${k & string}`, Tk>\n : _Decompose<\n Tk,\n sep,\n wo,\n `${Remaining}${k & string}${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : never\n >\n : never;\n}[keyof T];\n\nexport type DecomposeOptions = {\n sep?: string;\n object?: WO;\n start?: boolean;\n};\n\nexport const DEFAULT_DECOMPOSE_OPTIONS = {\n sep: '.',\n object: 'key',\n start: true,\n} as const satisfies DecomposeOptions;\n\ntype DefaultDecomposeOptions = typeof DEFAULT_DECOMPOSE_OPTIONS;\n\nexport type Decompose<\n T,\n O extends DecomposeOptions = DefaultDecomposeOptions,\n sep extends string = O['sep'] extends string\n ? O['sep']\n : DefaultDecomposeOptions['sep'],\n> =\n NonNullable<unknown> extends T\n ? NonNullable<unknown>\n : types.UnionToIntersection<\n _Decompose<\n T,\n sep,\n O['object'] extends WO\n ? O['object']\n : DefaultDecomposeOptions['object'],\n O['start'] extends infer S extends boolean\n ? S extends true\n ? sep\n : ''\n : sep\n >\n >;\n// #endregion\n\n// #endregion\n\n// #region type FlatByKey\ntype _ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Exclude<\n S extends `${string}${T}${infer V}` ? _ExcludeFrom<V, T, Delimiter> : S,\n `${string}${string}${Delimiter}${string}` | ''\n>;\n\nexport type ExtractEndsFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Extract<\n S,\n `${string}${Delimiter}${T}${_ExcludeFrom<S, T, Delimiter>}`\n>;\n\nexport type ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = S extends `${infer P}${Delimiter}${T}${infer V}`\n ? ExcludeFrom<`${P}${V}`, T, Delimiter>\n : S;\n\n// export type ExcludeFrom<\n// S extends string,\n// T extends string,\n// Delimiter extends string = '.',\n// > = _ExcludeFrom2<ExtractFrom<S, T, Delimiter>, T>;\n\ntype _FlatByKey<\n T,\n KEY extends types.PickKeysBy<T, object>,\n wc extends boolean = false,\n sep extends string = '.',\n> = (Decompose<T, { sep: sep; object: 'object' }> extends infer D\n ? {\n [K in ExtractEndsFrom<keyof D & string, KEY> as ExcludeFrom<\n K,\n KEY\n >]: wc extends true ? D[K] : Omit<D[K], KEY>;\n }\n : never) &\n Record<sep, T>;\n\nexport type FlatOptions = {\n sep?: string;\n children?: boolean;\n};\n\nexport const DEFAULT_FLAT_OPTIONS = {\n sep: '.',\n children: false,\n} as const satisfies FlatOptions;\n\ntype DefaultFlatOptions = typeof DEFAULT_FLAT_OPTIONS;\n\nexport type FlatByKey<\n T,\n omit extends types.PickKeysBy<T, object>,\n O extends FlatOptions = DefaultFlatOptions,\n> = _FlatByKey<\n T,\n omit,\n O['children'] extends boolean\n ? O['children']\n : DefaultFlatOptions['children'],\n O['sep'] extends string ? O['sep'] : DefaultFlatOptions['sep']\n>;\n\n//#endregion\n\nexport type StateValue = string | StateValueMap;\n\nexport interface StateValueMap {\n [key: string]: StateValue;\n}\n\nexport type Ru = Record<string, unknown>;\n\n// #region Recompose\n// #region Preparation\n\nexport type UnionKeys<U> = U extends Record<infer K, any> ? K : never;\n\ntype SplitSeparator<S extends string> = S extends `${infer A}.${string}`\n ? A\n : S;\n\n// Simple tuple creation for arrays up to 10 elements\n\nexport type IndexString = `[${number}]`;\n\n// #endregion\n\ntype _Recompose<T extends Ru> = {\n [key in keyof T as SplitSeparator<\n key & string\n >]: types._UnionToIntersection1<\n key extends `${string}.${infer A}`\n ? A extends `${string}.${string}`\n ? _Recompose<Record<A, T[key]>>\n : Record<A, T[key]>\n : T[key]\n >;\n};\n\nexport type Recompose<T extends Ru> = Recompose3<_Recompose<T>>;\n\nexport type Compare<T, U> = T extends U\n ? U extends T\n ? true\n : false\n : false;\n\nexport type Recompose3<T extends types.To> = keyof T extends never\n ? NonNullable<unknown>\n : keyof T extends IndexString\n ? types.ValuesOf<T>[]\n : {\n [K in keyof T]: T[K] extends infer TK extends types.To\n ? Recompose3<TK>\n : T[K];\n };\n\n// #endregion\n"],"names":[],"mappings":"AA8GO,MAAM,yBAAyB,GAAG;AACvC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,IAAI;;AAqFN,MAAM,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,QAAQ,EAAE,KAAK;;AAyEjB;;;;"}
1
+ {"version":3,"file":"types.types.js","sources":["../src/types.types.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\n\nexport type StateMatching<\n T extends StateValue,\n Key = keyof T,\n> = T extends StateValueMap\n ? Key extends string\n ? T[Key] extends StateValueMap\n ? `${Key}.${StateMatching<T[Key]>}` | Key\n : `${Key}.${T[Key] & string}` | Key\n : never\n : T;\n\nexport type KeysMatching<\n T extends types.TrueObject,\n AddObjectKeys extends boolean = true,\n Key extends keyof T = keyof T,\n> = Key extends string\n ? Required<T[Key]> extends types.TrueObject\n ?\n | `${Key}.${KeysMatching<Required<T[Key]>, AddObjectKeys> & string}`\n | (AddObjectKeys extends true ? Key : never)\n : Key\n : never;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type EmptyObject = {};\n\n// #region Decompose\n\n// #region type Decompose\ntype WO = 'key' | 'object' | 'both';\n\ntype _Decompose<\n T,\n sep extends string = '.',\n wo extends WO = 'key',\n Remaining extends string = '',\n> = {\n [k in Exclude<keyof T, undefined>]: T[k] extends infer Tk\n ? types._UnionToIntersection2<\n Tk extends types.AnyArray<infer A>\n ? number extends Tk['length']\n ? (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject) &\n (wo extends 'key' | 'both'\n ? {\n [Key in `${Remaining}${k & string}${sep}[${number}]`]: A;\n }\n : EmptyObject)\n : Extract<\n {\n [Key in Extract<\n keyof Tk,\n `${number}`\n > as `${Remaining}${k & string}${sep}[${Key & string}]`]: Tk[Key] extends infer TK2\n ? TK2 extends Ru\n ? _Decompose<\n TK2,\n sep,\n wo,\n `${Remaining}${k & string}${sep}[${Key & string}]${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<\n `${Remaining}${k & string}${sep}[${Key & string}]`,\n TK2\n >\n : never\n : never;\n } extends infer ARR\n ? ARR[keyof ARR]\n : never,\n object\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : Tk extends Ru\n ? object extends Required<Tk>\n ? Record<`${Remaining}${k & string}`, Tk>\n : _Decompose<\n Required<Tk>,\n sep,\n wo,\n `${Remaining}${k & string}${sep}`\n > &\n (wo extends 'object' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : EmptyObject)\n : wo extends 'key' | 'both'\n ? Record<`${Remaining}${k & string}`, Tk>\n : never\n >\n : never;\n}[Exclude<keyof T, undefined>];\n\nexport type DecomposeOptions = {\n sep?: string;\n object?: WO;\n start?: boolean;\n};\n\nexport const DEFAULT_DECOMPOSE_OPTIONS = {\n sep: '.',\n object: 'key',\n start: true,\n} as const satisfies DecomposeOptions;\n\ntype DefaultDecomposeOptions = typeof DEFAULT_DECOMPOSE_OPTIONS;\n\nexport type Decompose<\n T,\n O extends DecomposeOptions = DefaultDecomposeOptions,\n sep extends string = O['sep'] extends string\n ? O['sep']\n : DefaultDecomposeOptions['sep'],\n> =\n NonNullable<unknown> extends Required<T>\n ? NonNullable<unknown>\n : types.UnionToIntersection<\n _Decompose<\n T,\n sep,\n O['object'] extends WO\n ? O['object']\n : DefaultDecomposeOptions['object'],\n O['start'] extends infer S extends boolean\n ? S extends true\n ? sep\n : ''\n : sep\n >\n > extends infer P\n ? {\n [K in keyof P]: P[K];\n }\n : never;\n// #endregion\n\n// #endregion\n\n// #region type FlatByKey\ntype _ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Exclude<\n S extends `${string}${T}${infer V}` ? _ExcludeFrom<V, T, Delimiter> : S,\n `${string}${string}${Delimiter}${string}` | ''\n>;\n\nexport type ExtractEndsFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = Extract<\n S,\n `${string}${Delimiter}${T}${_ExcludeFrom<S, T, Delimiter>}`\n>;\n\nexport type ExcludeFrom<\n S extends string,\n T extends string,\n Delimiter extends string = '.',\n> = S extends `${infer P}${Delimiter}${T}${infer V}`\n ? ExcludeFrom<`${P}${V}`, T, Delimiter>\n : S;\n\n// export type ExcludeFrom<\n// S extends string,\n// T extends string,\n// Delimiter extends string = '.',\n// > = _ExcludeFrom2<ExtractFrom<S, T, Delimiter>, T>;\n\ntype _FlatByKey<\n T,\n KEY extends types.PickKeysBy<T, object>,\n wc extends boolean = false,\n sep extends string = '.',\n> = (Decompose<T, { sep: sep; object: 'object' }> extends infer D\n ? {\n [K in ExtractEndsFrom<keyof D & string, KEY> as ExcludeFrom<\n K,\n KEY\n >]: wc extends true ? D[K] : Omit<D[K], KEY>;\n }\n : never) &\n Record<sep, T>;\n\nexport type FlatOptions = {\n sep?: string;\n children?: boolean;\n};\n\nexport const DEFAULT_FLAT_OPTIONS = {\n sep: '.',\n children: false,\n} as const satisfies FlatOptions;\n\ntype DefaultFlatOptions = typeof DEFAULT_FLAT_OPTIONS;\n\nexport type FlatByKey<\n T,\n omit extends types.PickKeysBy<T, object>,\n O extends FlatOptions = DefaultFlatOptions,\n> = _FlatByKey<\n T,\n omit,\n O['children'] extends boolean\n ? O['children']\n : DefaultFlatOptions['children'],\n O['sep'] extends string ? O['sep'] : DefaultFlatOptions['sep']\n>;\n\n//#endregion\n\nexport type StateValue = string | StateValueMap;\n\nexport interface StateValueMap {\n [key: string]: StateValue;\n}\n\nexport type Ru = Record<string, unknown>;\n\n// #region Recompose\n// #region Preparation\n\nexport type UnionKeys<U> = U extends Record<infer K, any> ? K : never;\n\ntype SplitSeparator<S extends string> = S extends `${infer A}.${string}`\n ? A\n : S;\n\n// Simple tuple creation for arrays up to 10 elements\n\nexport type IndexString = `[${number}]`;\n\n// #endregion\n\ntype _Recompose<T extends Ru> = {\n [key in keyof T as SplitSeparator<\n key & string\n >]: types._UnionToIntersection1<\n key extends `${string}.${infer A}`\n ? A extends `${string}.${string}`\n ? _Recompose<Record<A, T[key]>>\n : Record<A, T[key]>\n : T[key]\n >;\n};\n\nexport type Recompose<T extends Ru> = Recompose3<_Recompose<T>>;\n\nexport type Compare<T, U> = T extends U\n ? U extends T\n ? true\n : false\n : false;\n\nexport type Recompose3<T extends types.To> = keyof T extends never\n ? NonNullable<unknown>\n : keyof T extends IndexString\n ? types.ValuesOf<T>[]\n : {\n [K in keyof T]: T[K] extends infer TK extends types.To\n ? Recompose3<TK>\n : T[K];\n };\n\n// #endregion\n"],"names":[],"mappings":"AA8GO,MAAM,yBAAyB,GAAG;AACvC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,IAAI;;AAyFN,MAAM,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,QAAQ,EAAE,KAAK;;AAyEjB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bemedev/decompose",
3
- "version": "1.1.4",
3
+ "version": "1.3.0",
4
4
  "description": "Decompose object and so more",
5
5
  "author": {
6
6
  "email": "bri_lvi@icloud.com",
@@ -37,8 +37,8 @@
37
37
  "ci:admin": "pnpm run rm && pnpm run upgrade && pnpm run ci",
38
38
  "rollup": "rollup -c",
39
39
  "build": "rm -rf lib && pnpm run rollup",
40
- "pretest": "pnpm run build",
41
- "posttest": "pnpm run prettier && pnpm run p-q",
40
+ "pretest": "pnpm run build && pnpm build-tests pre",
41
+ "posttest": "pnpm build-tests post && pnpm run prettier && pnpm run p-q",
42
42
  "rm": "pnpx rimraf -rf node_modules pnpm-lock.yaml",
43
43
  "p-q": "pretty-quick",
44
44
  "rinit": "pnpm run rm && pnpm run config",
@@ -54,22 +54,21 @@
54
54
  "lint-watch": "onchange --await-write-finish 5500 \"**/*\" -- pnpm run lint",
55
55
  "prepublishOnly": "",
56
56
  "prepare": "husky",
57
- "upgrade": "pnpm upgrade --latest"
57
+ "upgrade": "pnpm up --latest"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@bemedev/fsf": "^0.8.0",
61
- "@bemedev/rollup-config": "^0.1.1",
62
- "@bemedev/types": "^0.4.1",
61
+ "@bemedev/rollup-config": "^0.1.2",
63
62
  "@bemedev/vitest-alias": "^0.0.3",
64
63
  "@bemedev/vitest-exclude": "^0.1.1",
65
64
  "@bemedev/vitest-extended": "^1.3.6",
66
65
  "@eslint/eslintrc": "^3.3.1",
67
- "@eslint/js": "^9.32.0",
68
- "@types/node": "^24.2.0",
66
+ "@eslint/js": "^9.33.0",
67
+ "@types/node": "^24.2.1",
69
68
  "@typescript-eslint/eslint-plugin": "^8.39.0",
70
69
  "@typescript-eslint/parser": "^8.39.0",
71
70
  "@vitest/coverage-v8": "^3.2.4",
72
- "eslint": "^9.32.0",
71
+ "eslint": "^9.33.0",
73
72
  "glob": "^11.0.3",
74
73
  "globals": "^16.3.0",
75
74
  "husky": "^9.1.7",
@@ -85,9 +84,10 @@
85
84
  "vitest": "^3.2.4"
86
85
  },
87
86
  "dependencies": {
87
+ "@bemedev/build-tests": "^0.1.1",
88
88
  "ts-deepmerge": "^7.0.3"
89
89
  },
90
90
  "peerDependencies": {
91
- "@bemedev/types": "^0.1.8"
91
+ "@bemedev/types": "0.4.2"
92
92
  }
93
93
  }
package/lib/flat.cjs DELETED
@@ -1,40 +0,0 @@
1
- 'use strict';
2
-
3
- var decompose = require('./decompose.cjs');
4
- var types_types = require('./types.types.cjs');
5
-
6
- const _flat = (val, omitKey, options = types_types.DEFAULT_FLAT_OPTIONS) => {
7
- const { sep, children } = {
8
- ...types_types.DEFAULT_FLAT_OPTIONS,
9
- ...options,
10
- };
11
- const first = decompose.decompose(val, {
12
- object: 'object',
13
- sep,
14
- start: true,
15
- });
16
- const output = {};
17
- const entries = Object.entries(first);
18
- if (entries.length === 0)
19
- return output;
20
- entries
21
- .filter(([k]) => {
22
- const splits = k.split(`${sep}${omitKey}${sep}`);
23
- const last = splits[splits.length - 1];
24
- return !last.includes(omitKey);
25
- })
26
- .forEach(([k, v]) => {
27
- const _value = structuredClone(v);
28
- if (!children)
29
- delete _value[omitKey];
30
- const key = k.replace(new RegExp(`${omitKey}${sep}`, 'g'), '');
31
- output[key] = _value;
32
- });
33
- return output;
34
- };
35
- const flat = (val, key, options) => _flat(val, key, options);
36
- flat.low = _flat;
37
- flat.strict = _flat;
38
-
39
- exports.flat = flat;
40
- //# sourceMappingURL=flat.cjs.map
package/lib/flat.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"flat.cjs","sources":["../src/flat.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\nimport { decompose } from './decompose';\nimport {\n DEFAULT_FLAT_OPTIONS,\n type FlatByKey,\n type FlatOptions,\n} from './types.types';\n\ntype Flat_F = <\n T extends types.Ru,\n omit extends types.PickKeysBy<T, object> & string,\n>(\n val: T,\n omitKey: omit,\n options?: FlatOptions,\n) => FlatByKey<T, omit, FlatOptions>;\n\ntype _Flat_F = (val: any, omitKey: string, options?: FlatOptions) => any;\n\nexport type Flat = Flat_F & {\n strict: Flat_F;\n low: _Flat_F;\n};\n\nconst _flat: _Flat_F = (val, omitKey, options = DEFAULT_FLAT_OPTIONS) => {\n const { sep, children } = {\n ...DEFAULT_FLAT_OPTIONS,\n ...options,\n };\n\n const first = decompose(val, {\n object: 'object',\n sep,\n start: true,\n });\n\n const output: any = {};\n\n const entries: [string, any][] = Object.entries(first);\n if (entries.length === 0) return output;\n\n entries\n .filter(([k]) => {\n const splits = k.split(`${sep}${omitKey}${sep}`);\n const last = splits[splits.length - 1];\n\n return !last.includes(omitKey);\n })\n .forEach(([k, v]) => {\n const _value = structuredClone(v);\n if (!children) delete _value[omitKey];\n const key = k.replace(new RegExp(`${omitKey}${sep}`, 'g'), '');\n\n output[key] = _value;\n });\n\n return output;\n};\n\nexport const flat: Flat = (val, key, options) => _flat(val, key, options);\nflat.low = _flat;\nflat.strict = _flat;\n"],"names":["DEFAULT_FLAT_OPTIONS","decompose"],"mappings":";;;;;AAwBA,MAAM,KAAK,GAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAGA,gCAAoB,KAAI;AACtE,IAAA,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AACxB,QAAA,GAAGA,gCAAoB;AACvB,QAAA,GAAG,OAAO;KACX;AAED,IAAA,MAAM,KAAK,GAAGC,mBAAS,CAAC,GAAG,EAAE;AAC3B,QAAA,MAAM,EAAE,QAAQ;QAChB,GAAG;AACH,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA,CAAC;IAEF,MAAM,MAAM,GAAQ,EAAE;IAEtB,MAAM,OAAO,GAAoB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACtD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM;IAEvC;AACG,SAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,OAAO,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAEtC,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,IAAA,CAAC;SACA,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AAClB,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AAE9D,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;AACtB,IAAA,CAAC,CAAC;AAEJ,IAAA,OAAO,MAAM;AACf,CAAC;MAEY,IAAI,GAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO;AACxE,IAAI,CAAC,GAAG,GAAG,KAAK;AAChB,IAAI,CAAC,MAAM,GAAG,KAAK;;;;"}
package/lib/flat.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"flat.d.ts","sourceRoot":"","sources":["../src/flat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAEvB,KAAK,MAAM,GAAG,CACZ,CAAC,SAAS,KAAK,CAAC,EAAE,EAClB,IAAI,SAAS,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,EAEjD,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,IAAI,EACb,OAAO,CAAC,EAAE,WAAW,KAClB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAErC,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,GAAG,CAAC;AAEzE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAqCF,eAAO,MAAM,IAAI,EAAE,IAAsD,CAAC"}
package/lib/flat.js DELETED
@@ -1,38 +0,0 @@
1
- import { decompose } from './decompose.js';
2
- import { DEFAULT_FLAT_OPTIONS } from './types.types.js';
3
-
4
- const _flat = (val, omitKey, options = DEFAULT_FLAT_OPTIONS) => {
5
- const { sep, children } = {
6
- ...DEFAULT_FLAT_OPTIONS,
7
- ...options,
8
- };
9
- const first = decompose(val, {
10
- object: 'object',
11
- sep,
12
- start: true,
13
- });
14
- const output = {};
15
- const entries = Object.entries(first);
16
- if (entries.length === 0)
17
- return output;
18
- entries
19
- .filter(([k]) => {
20
- const splits = k.split(`${sep}${omitKey}${sep}`);
21
- const last = splits[splits.length - 1];
22
- return !last.includes(omitKey);
23
- })
24
- .forEach(([k, v]) => {
25
- const _value = structuredClone(v);
26
- if (!children)
27
- delete _value[omitKey];
28
- const key = k.replace(new RegExp(`${omitKey}${sep}`, 'g'), '');
29
- output[key] = _value;
30
- });
31
- return output;
32
- };
33
- const flat = (val, key, options) => _flat(val, key, options);
34
- flat.low = _flat;
35
- flat.strict = _flat;
36
-
37
- export { flat };
38
- //# sourceMappingURL=flat.js.map
package/lib/flat.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"flat.js","sources":["../src/flat.ts"],"sourcesContent":["import type { types } from '@bemedev/types';\nimport { decompose } from './decompose';\nimport {\n DEFAULT_FLAT_OPTIONS,\n type FlatByKey,\n type FlatOptions,\n} from './types.types';\n\ntype Flat_F = <\n T extends types.Ru,\n omit extends types.PickKeysBy<T, object> & string,\n>(\n val: T,\n omitKey: omit,\n options?: FlatOptions,\n) => FlatByKey<T, omit, FlatOptions>;\n\ntype _Flat_F = (val: any, omitKey: string, options?: FlatOptions) => any;\n\nexport type Flat = Flat_F & {\n strict: Flat_F;\n low: _Flat_F;\n};\n\nconst _flat: _Flat_F = (val, omitKey, options = DEFAULT_FLAT_OPTIONS) => {\n const { sep, children } = {\n ...DEFAULT_FLAT_OPTIONS,\n ...options,\n };\n\n const first = decompose(val, {\n object: 'object',\n sep,\n start: true,\n });\n\n const output: any = {};\n\n const entries: [string, any][] = Object.entries(first);\n if (entries.length === 0) return output;\n\n entries\n .filter(([k]) => {\n const splits = k.split(`${sep}${omitKey}${sep}`);\n const last = splits[splits.length - 1];\n\n return !last.includes(omitKey);\n })\n .forEach(([k, v]) => {\n const _value = structuredClone(v);\n if (!children) delete _value[omitKey];\n const key = k.replace(new RegExp(`${omitKey}${sep}`, 'g'), '');\n\n output[key] = _value;\n });\n\n return output;\n};\n\nexport const flat: Flat = (val, key, options) => _flat(val, key, options);\nflat.low = _flat;\nflat.strict = _flat;\n"],"names":[],"mappings":";;;AAwBA,MAAM,KAAK,GAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,oBAAoB,KAAI;AACtE,IAAA,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;AACxB,QAAA,GAAG,oBAAoB;AACvB,QAAA,GAAG,OAAO;KACX;AAED,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE;AAC3B,QAAA,MAAM,EAAE,QAAQ;QAChB,GAAG;AACH,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA,CAAC;IAEF,MAAM,MAAM,GAAQ,EAAE;IAEtB,MAAM,OAAO,GAAoB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACtD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM;IAEvC;AACG,SAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI;AACd,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,OAAO,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAEtC,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,IAAA,CAAC;SACA,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AAClB,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AAE9D,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;AACtB,IAAA,CAAC,CAAC;AAEJ,IAAA,OAAO,MAAM;AACf,CAAC;MAEY,IAAI,GAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO;AACxE,IAAI,CAAC,GAAG,GAAG,KAAK;AAChB,IAAI,CAAC,MAAM,GAAG,KAAK;;;;"}