@bemedev/decompose 1.2.0 → 1.3.1
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/lib/flatByKey.cjs +27 -0
- package/lib/flatByKey.cjs.map +1 -0
- package/lib/{flat.d.ts → flatByKey.d.ts} +3 -3
- package/lib/flatByKey.d.ts.map +1 -0
- package/lib/flatByKey.js +25 -0
- package/lib/flatByKey.js.map +1 -0
- package/lib/index.cjs +2 -0
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/types.types.cjs.map +1 -1
- package/lib/types.types.d.ts +1 -1
- package/lib/types.types.d.ts.map +1 -1
- package/lib/types.types.js.map +1 -1
- package/package.json +7 -6
- package/lib/flat.cjs +0 -40
- package/lib/flat.cjs.map +0 -1
- package/lib/flat.d.ts.map +0 -1
- package/lib/flat.js +0 -38
- package/lib/flat.js.map +0 -1
|
@@ -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
|
|
9
|
+
export declare const flatByKey: Flat;
|
|
10
10
|
export {};
|
|
11
|
-
//# sourceMappingURL=
|
|
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"}
|
package/lib/flatByKey.js
ADDED
|
@@ -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
package/lib/index.d.ts.map
CHANGED
|
@@ -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":";;;;;;"}
|
package/lib/types.types.cjs.map
CHANGED
|
@@ -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 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;;
|
|
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, sep> as ExcludeFrom<\n K,\n KEY,\n sep\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;;AA0FN,MAAM,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,QAAQ,EAAE,KAAK;;AAyEjB;;;;;"}
|
package/lib/types.types.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ type _FlatByKey<T, KEY extends types.PickKeysBy<T, object>, wc extends boolean =
|
|
|
31
31
|
sep: sep;
|
|
32
32
|
object: 'object';
|
|
33
33
|
}> extends infer D ? {
|
|
34
|
-
[K in ExtractEndsFrom<keyof D & string, KEY> as ExcludeFrom<K, KEY>]: wc extends true ? D[K] : Omit<D[K], KEY>;
|
|
34
|
+
[K in ExtractEndsFrom<keyof D & string, KEY, sep> as ExcludeFrom<K, KEY, sep>]: wc extends true ? D[K] : Omit<D[K], KEY>;
|
|
35
35
|
} : never) & Record<sep, T>;
|
|
36
36
|
export type FlatOptions = {
|
|
37
37
|
sep?: string;
|
package/lib/types.types.d.ts.map
CHANGED
|
@@ -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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"}
|
package/lib/types.types.js.map
CHANGED
|
@@ -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 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;;
|
|
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, sep> as ExcludeFrom<\n K,\n KEY,\n sep\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;;AA0FN,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.
|
|
3
|
+
"version": "1.3.1",
|
|
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",
|
|
@@ -58,15 +58,15 @@
|
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@bemedev/fsf": "^0.8.0",
|
|
61
|
-
"@bemedev/rollup-config": "^0.1.
|
|
61
|
+
"@bemedev/rollup-config": "^0.1.2",
|
|
62
62
|
"@bemedev/vitest-alias": "^0.0.3",
|
|
63
63
|
"@bemedev/vitest-exclude": "^0.1.1",
|
|
64
64
|
"@bemedev/vitest-extended": "^1.3.6",
|
|
65
65
|
"@eslint/eslintrc": "^3.3.1",
|
|
66
66
|
"@eslint/js": "^9.33.0",
|
|
67
67
|
"@types/node": "^24.2.1",
|
|
68
|
-
"@typescript-eslint/eslint-plugin": "^8.39.
|
|
69
|
-
"@typescript-eslint/parser": "^8.39.
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^8.39.1",
|
|
69
|
+
"@typescript-eslint/parser": "^8.39.1",
|
|
70
70
|
"@vitest/coverage-v8": "^3.2.4",
|
|
71
71
|
"eslint": "^9.33.0",
|
|
72
72
|
"glob": "^11.0.3",
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"vitest": "^3.2.4"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
|
+
"@bemedev/build-tests": "^0.1.1",
|
|
87
88
|
"ts-deepmerge": "^7.0.3"
|
|
88
89
|
},
|
|
89
90
|
"peerDependencies": {
|
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;;;;"}
|