@ngutil/data 0.0.10
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 +7 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/model/index.mjs +2 -0
- package/esm2022/model/meta.mjs +125 -0
- package/esm2022/ngutil-data.mjs +5 -0
- package/esm2022/query/executor.mjs +76 -0
- package/esm2022/query/filter.mjs +288 -0
- package/esm2022/query/grouper.mjs +67 -0
- package/esm2022/query/index.mjs +8 -0
- package/esm2022/query/path.mjs +18 -0
- package/esm2022/query/query.mjs +2 -0
- package/esm2022/query/slice.mjs +61 -0
- package/esm2022/query/slimer.mjs +7 -0
- package/esm2022/query/sorter.mjs +166 -0
- package/fesm2022/ngutil-data.mjs +474 -0
- package/fesm2022/ngutil-data.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/model/index.d.ts +1 -0
- package/model/meta.d.ts +51 -0
- package/package.json +33 -0
- package/query/executor.d.ts +30 -0
- package/query/filter.d.ts +65 -0
- package/query/grouper.d.ts +6 -0
- package/query/index.d.ts +8 -0
- package/query/path.d.ts +2 -0
- package/query/query.d.ts +19 -0
- package/query/slice.d.ts +32 -0
- package/query/slimer.d.ts +18 -0
- package/query/sorter.d.ts +40 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export function groupBy(grouper) {
|
|
2
|
+
return grouperCompile(grouper);
|
|
3
|
+
}
|
|
4
|
+
function grouperCompile(grouper) {
|
|
5
|
+
return _ => undefined;
|
|
6
|
+
}
|
|
7
|
+
export function grouperMerge(...groupers) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
// import { Primitive } from "utility-types"
|
|
11
|
+
// import { Eval, Flatten } from "@ngutil/common"
|
|
12
|
+
// import { type Model } from "./query"
|
|
13
|
+
// import { SorterFn } from "./sorter"
|
|
14
|
+
// export interface Grouped<T extends Model> {
|
|
15
|
+
// items: T[]
|
|
16
|
+
// groups: Group<T>
|
|
17
|
+
// }
|
|
18
|
+
// export type GrouperFn<T extends Model> = (items: T[]) => any
|
|
19
|
+
// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]
|
|
20
|
+
// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean
|
|
21
|
+
// export interface GrouperX<T extends Model> {
|
|
22
|
+
// name: string
|
|
23
|
+
// title?: string
|
|
24
|
+
// isMatch?: GroupKey<T>
|
|
25
|
+
// [key: string]: any
|
|
26
|
+
// }
|
|
27
|
+
// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {
|
|
28
|
+
// key: GroupKey<T>
|
|
29
|
+
// }
|
|
30
|
+
// type _Groupers<T extends Model, F> = keyof F | Grouper<T>
|
|
31
|
+
// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>
|
|
32
|
+
// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }
|
|
33
|
+
// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {
|
|
34
|
+
// grouper: G
|
|
35
|
+
// begin: number
|
|
36
|
+
// end: number
|
|
37
|
+
// }
|
|
38
|
+
// /**
|
|
39
|
+
// * @example
|
|
40
|
+
// * ```ts
|
|
41
|
+
// * const grouped = groupBy(["status"])(items)
|
|
42
|
+
// * // expexted: {[status]: [...items]}
|
|
43
|
+
// *
|
|
44
|
+
// * const grouped = groupBy(["name", "age"])(items)
|
|
45
|
+
// * // expected {[status]: {[age]: [...items]}}
|
|
46
|
+
// *
|
|
47
|
+
// * const STATUS_LABELS = {active: "Active", inactive: "Inactive"}
|
|
48
|
+
// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || "Undefined")])(items)
|
|
49
|
+
// * // expected {["Active" | "Inactive" | "Undefined"]: [...items]}
|
|
50
|
+
// *
|
|
51
|
+
// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || "Undefined"), "age"])(items)
|
|
52
|
+
// * // expected {["Active" | "Inactive" | "Undefined"]: {[age]: [...items]}}
|
|
53
|
+
// * ```
|
|
54
|
+
// */
|
|
55
|
+
// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {
|
|
56
|
+
// return (_a, _b) => 0
|
|
57
|
+
// }
|
|
58
|
+
// export function grouperNormalize() {}
|
|
59
|
+
// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {
|
|
60
|
+
// return _ => undefined
|
|
61
|
+
// }
|
|
62
|
+
// export function grouperMerge<T extends Model, F = Flatten<T>>(
|
|
63
|
+
// ...groupers: Array<Grouper<T, F> | undefined | null>
|
|
64
|
+
// ): Grouper<T, F> | undefined {
|
|
65
|
+
// return undefined
|
|
66
|
+
// }
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3F1ZXJ5L2dyb3VwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxVQUFVLE9BQU8sQ0FBa0MsT0FBc0I7SUFDM0UsT0FBTyxjQUFjLENBQU8sT0FBTyxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFrQyxPQUFzQjtJQUMzRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFBO0FBQ3pCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUN4QixHQUFHLFFBQWlEO0lBRXBELE9BQU8sU0FBUyxDQUFBO0FBQ3BCLENBQUM7QUFFRCw0Q0FBNEM7QUFFNUMsaURBQWlEO0FBRWpELHVDQUF1QztBQUN2QyxzQ0FBc0M7QUFFdEMsOENBQThDO0FBQzlDLGlCQUFpQjtBQUNqQix1QkFBdUI7QUFDdkIsSUFBSTtBQUVKLCtEQUErRDtBQUUvRCxrRkFBa0Y7QUFFbEYsc0ZBQXNGO0FBRXRGLCtDQUErQztBQUMvQyxtQkFBbUI7QUFDbkIscUJBQXFCO0FBQ3JCLDRCQUE0QjtBQUM1Qix5QkFBeUI7QUFDekIsSUFBSTtBQUVKLDZFQUE2RTtBQUM3RSx1QkFBdUI7QUFDdkIsSUFBSTtBQUVKLDREQUE0RDtBQUM1RCxzRkFBc0Y7QUFFdEYsNEZBQTRGO0FBRTVGLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsb0JBQW9CO0FBQ3BCLGtCQUFrQjtBQUNsQixJQUFJO0FBRUosTUFBTTtBQUNOLGNBQWM7QUFDZCxXQUFXO0FBQ1gsZ0RBQWdEO0FBQ2hELHlDQUF5QztBQUN6QyxLQUFLO0FBQ0wscURBQXFEO0FBQ3JELGlEQUFpRDtBQUNqRCxLQUFLO0FBQ0wsb0VBQW9FO0FBQ3BFLDZGQUE2RjtBQUM3RixxRUFBcUU7QUFDckUsS0FBSztBQUNMLG9HQUFvRztBQUNwRyw4RUFBOEU7QUFDOUUsU0FBUztBQUNULE1BQU07QUFDTixnRkFBZ0Y7QUFDaEYsMkJBQTJCO0FBQzNCLElBQUk7QUFFSix3Q0FBd0M7QUFFeEMsd0ZBQXdGO0FBQ3hGLDRCQUE0QjtBQUM1QixJQUFJO0FBRUosaUVBQWlFO0FBQ2pFLDJEQUEyRDtBQUMzRCxpQ0FBaUM7QUFDakMsdUJBQXVCO0FBQ3ZCLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGF0dGVuLCBQcmltaXRpdmUgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5cbmV4cG9ydCB0eXBlIEdyb3VwZXJGbjxUID0gYW55PiA9IChpdGVtOiBhbnkpID0+IFByaW1pdGl2ZVxuXG5leHBvcnQgdHlwZSBHcm91cGVyPFQgZXh0ZW5kcyBNb2RlbCwgRiA9IEZsYXR0ZW48VD4+ID0gYW55XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQgZXh0ZW5kcyBNb2RlbCwgRiA9IEZsYXR0ZW48VD4+KGdyb3VwZXI6IEdyb3VwZXI8VCwgRj4pOiBHcm91cGVyRm48VD4ge1xuICAgIHJldHVybiBncm91cGVyQ29tcGlsZTxULCBGPihncm91cGVyKVxufVxuXG5mdW5jdGlvbiBncm91cGVyQ29tcGlsZTxUIGV4dGVuZHMgTW9kZWwsIEYgPSBGbGF0dGVuPFQ+Pihncm91cGVyOiBHcm91cGVyPFQsIEY+KTogR3JvdXBlckZuPFQ+IHtcbiAgICByZXR1cm4gXyA9PiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwZXJNZXJnZTxUIGV4dGVuZHMgTW9kZWwsIEYgPSBGbGF0dGVuPFQ+PihcbiAgICAuLi5ncm91cGVyczogQXJyYXk8R3JvdXBlcjxULCBGPiB8IHVuZGVmaW5lZCB8IG51bGw+XG4pOiBHcm91cGVyPFQsIEY+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8vIGltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJ1dGlsaXR5LXR5cGVzXCJcblxuLy8gaW1wb3J0IHsgRXZhbCwgRmxhdHRlbiB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbi8vIGltcG9ydCB7IHR5cGUgTW9kZWwgfSBmcm9tIFwiLi9xdWVyeVwiXG4vLyBpbXBvcnQgeyBTb3J0ZXJGbiB9IGZyb20gXCIuL3NvcnRlclwiXG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgR3JvdXBlZDxUIGV4dGVuZHMgTW9kZWw+IHtcbi8vICAgICBpdGVtczogVFtdXG4vLyAgICAgZ3JvdXBzOiBHcm91cDxUPlxuLy8gfVxuXG4vLyBleHBvcnQgdHlwZSBHcm91cGVyRm48VCBleHRlbmRzIE1vZGVsPiA9IChpdGVtczogVFtdKSA9PiBhbnlcblxuLy8gZXhwb3J0IHR5cGUgR3JvdXBLZXk8VCBleHRlbmRzIE1vZGVsPiA9IChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBQcmltaXRpdmVbXVxuXG4vLyBleHBvcnQgdHlwZSBHcm91cEl0ZW1Jc01hdGNoPFQgZXh0ZW5kcyBNb2RlbD4gPSAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhblxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIEdyb3VwZXJYPFQgZXh0ZW5kcyBNb2RlbD4ge1xuLy8gICAgIG5hbWU6IHN0cmluZ1xuLy8gICAgIHRpdGxlPzogc3RyaW5nXG4vLyAgICAgaXNNYXRjaD86IEdyb3VwS2V5PFQ+XG4vLyAgICAgW2tleTogc3RyaW5nXTogYW55XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgR3JvdXBlclhOb3JtYWxpemVkPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBHcm91cGVyWDxUPiB7XG4vLyAgICAga2V5OiBHcm91cEtleTxUPlxuLy8gfVxuXG4vLyB0eXBlIF9Hcm91cGVyczxUIGV4dGVuZHMgTW9kZWwsIEY+ID0ga2V5b2YgRiB8IEdyb3VwZXI8VD5cbi8vIGV4cG9ydCB0eXBlIEdyb3VwZXI8VCBleHRlbmRzIE1vZGVsLCBGID0gRmxhdHRlbjxUPj4gPSBFdmFsPEFycmF5PF9Hcm91cGVyczxULCBGPj4+XG5cbi8vIGV4cG9ydCB0eXBlIEdyb3VwZXJOb3JtYWxpemVkPFQgZXh0ZW5kcyBNb2RlbD4gPSB7IFtrZXk6IHN0cmluZ106IEdyb3VwZXJYTm9ybWFsaXplZDxUPiB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgR3JvdXA8VCBleHRlbmRzIE1vZGVsLCBHIGV4dGVuZHMgR3JvdXBlcjxUPiA9IEdyb3VwZXI8VD4+IHtcbi8vICAgICBncm91cGVyOiBHXG4vLyAgICAgYmVnaW46IG51bWJlclxuLy8gICAgIGVuZDogbnVtYmVyXG4vLyB9XG5cbi8vIC8qKlxuLy8gICogQGV4YW1wbGVcbi8vICAqIGBgYHRzXG4vLyAgKiBjb25zdCBncm91cGVkID0gZ3JvdXBCeShbXCJzdGF0dXNcIl0pKGl0ZW1zKVxuLy8gICogLy8gZXhwZXh0ZWQ6IHtbc3RhdHVzXTogWy4uLml0ZW1zXX1cbi8vICAqXG4vLyAgKiBjb25zdCBncm91cGVkID0gZ3JvdXBCeShbXCJuYW1lXCIsIFwiYWdlXCJdKShpdGVtcylcbi8vICAqIC8vIGV4cGVjdGVkIHtbc3RhdHVzXToge1thZ2VdOiBbLi4uaXRlbXNdfX1cbi8vICAqXG4vLyAgKiBjb25zdCBTVEFUVVNfTEFCRUxTID0ge2FjdGl2ZTogXCJBY3RpdmVcIiwgaW5hY3RpdmU6IFwiSW5hY3RpdmVcIn1cbi8vICAqIGNvbnN0IGdyb3VwZWQgPSBncm91cEJ5KFsoaXRlbSkgPT4gKFNUQVRVU19MQUJFTFNbaXRlbS5zdGF0dXNdIHx8IFwiVW5kZWZpbmVkXCIpXSkoaXRlbXMpXG4vLyAgKiAvLyBleHBlY3RlZCB7W1wiQWN0aXZlXCIgfCBcIkluYWN0aXZlXCIgfCBcIlVuZGVmaW5lZFwiXTogWy4uLml0ZW1zXX1cbi8vICAqXG4vLyAgKiBjb25zdCBncm91cGVkID0gZ3JvdXBCeShbKGl0ZW0pID0+IChTVEFUVVNfTEFCRUxTW2l0ZW0uc3RhdHVzXSB8fCBcIlVuZGVmaW5lZFwiKSwgXCJhZ2VcIl0pKGl0ZW1zKVxuLy8gICogLy8gZXhwZWN0ZWQge1tcIkFjdGl2ZVwiIHwgXCJJbmFjdGl2ZVwiIHwgXCJVbmRlZmluZWRcIl06IHtbYWdlXTogWy4uLml0ZW1zXX19XG4vLyAgKiBgYGBcbi8vICAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnk8VCBleHRlbmRzIE1vZGVsPihncm91cGVyczogR3JvdXBlcjxUPik6IFNvcnRlckZuPFQ+IHtcbi8vICAgICByZXR1cm4gKF9hLCBfYikgPT4gMFxuLy8gfVxuXG4vLyBleHBvcnQgZnVuY3Rpb24gZ3JvdXBlck5vcm1hbGl6ZSgpIHt9XG5cbi8vIGV4cG9ydCBmdW5jdGlvbiBncm91cGVyQ29tcGlsZTxUIGV4dGVuZHMgTW9kZWw+KGdyb3VwZXJzOiBHcm91cGVyPFQ+KTogR3JvdXBlckZuPFQ+IHtcbi8vICAgICByZXR1cm4gXyA9PiB1bmRlZmluZWRcbi8vIH1cblxuLy8gZXhwb3J0IGZ1bmN0aW9uIGdyb3VwZXJNZXJnZTxUIGV4dGVuZHMgTW9kZWwsIEYgPSBGbGF0dGVuPFQ+Pihcbi8vICAgICAuLi5ncm91cGVyczogQXJyYXk8R3JvdXBlcjxULCBGPiB8IHVuZGVmaW5lZCB8IG51bGw+XG4vLyApOiBHcm91cGVyPFQsIEY+IHwgdW5kZWZpbmVkIHtcbi8vICAgICByZXR1cm4gdW5kZWZpbmVkXG4vLyB9XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { filterBy, filterMerge } from "./filter";
|
|
2
|
+
export { groupBy, grouperMerge } from "./grouper";
|
|
3
|
+
export { sortBy, sorterMerge } from "./sorter";
|
|
4
|
+
export { slimBy, slimerMerge } from "./slimer";
|
|
5
|
+
export { sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
|
|
6
|
+
export { pathGetterCompile } from "./path";
|
|
7
|
+
export { queryExecutor } from "./executor";
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBWSxNQUFNLFVBQVUsQ0FBQTtBQUNsRSxPQUFPLEVBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxRCxPQUFPLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN0RCxPQUFPLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN0RCxPQUFPLEVBQVMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRmlsdGVyLCBmaWx0ZXJCeSwgZmlsdGVyTWVyZ2UsIEZpbHRlck9wIH0gZnJvbSBcIi4vZmlsdGVyXCJcbmV4cG9ydCB7IEdyb3VwZXIsIGdyb3VwQnksIGdyb3VwZXJNZXJnZSB9IGZyb20gXCIuL2dyb3VwZXJcIlxuZXhwb3J0IHsgU29ydGVyLCBzb3J0QnksIHNvcnRlck1lcmdlIH0gZnJvbSBcIi4vc29ydGVyXCJcbmV4cG9ydCB7IFNsaW1lciwgc2xpbUJ5LCBzbGltZXJNZXJnZSB9IGZyb20gXCIuL3NsaW1lclwiXG5leHBvcnQgeyBTbGljZSwgc2xpY2VNZXJnZSwgc2xpY2VBcHBseSwgc2xpY2VJbnNlcnQsIHNsaWNlVG9QYWdlcywgc2xpY2VDbGFtcCwgc2xpY2VFcSB9IGZyb20gXCIuL3NsaWNlXCJcbmV4cG9ydCB7IHBhdGhHZXR0ZXJDb21waWxlIH0gZnJvbSBcIi4vcGF0aFwiXG5leHBvcnQgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi9xdWVyeVwiXG5leHBvcnQgeyBxdWVyeUV4ZWN1dG9yLCBRdWVyeUV4ZWN1dG9yIH0gZnJvbSBcIi4vZXhlY3V0b3JcIlxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { flattenDepth } from "lodash";
|
|
2
|
+
export function pathGetterCompile(path) {
|
|
3
|
+
if (!path || path.length === 0) {
|
|
4
|
+
throw new Error("Empty path");
|
|
5
|
+
}
|
|
6
|
+
return path.split(".").reduce((parent, part) => makeGetter(part, parent), (obj) => (obj == null ? [] : [obj]));
|
|
7
|
+
}
|
|
8
|
+
const IsNumber = /^\d+$/;
|
|
9
|
+
function makeGetter(part, parent) {
|
|
10
|
+
if (part === "*") {
|
|
11
|
+
return obj => flattenDepth(parent(obj), 1);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const key = IsNumber.test(part) ? Number(part) : part;
|
|
15
|
+
return obj => parent(obj).map(v => (v != null ? v[key] : undefined));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3F1ZXJ5L3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUtyQyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBWTtJQUMxQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDekIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUMxQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDM0MsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUE7QUFFeEIsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLE1BQWdCO0lBQzlDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDOUMsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNyRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlcHRoIH0gZnJvbSBcImxvZGFzaFwiXG5cbnR5cGUgR2V0dGVyRm4gPSAoc3JjczogYW55W10pID0+IGFueVtdXG5leHBvcnQgdHlwZSBQYXRoR2V0dGVyPFQgPSBhbnksIFIgPSBhbnk+ID0gKG9iajogVCkgPT4gUltdXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoR2V0dGVyQ29tcGlsZShwYXRoOiBzdHJpbmcpOiBQYXRoR2V0dGVyIHtcbiAgICBpZiAoIXBhdGggfHwgcGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgcGF0aFwiKVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2U8R2V0dGVyRm4+KFxuICAgICAgICAocGFyZW50LCBwYXJ0KSA9PiBtYWtlR2V0dGVyKHBhcnQsIHBhcmVudCksXG4gICAgICAgIChvYmo6IGFueSkgPT4gKG9iaiA9PSBudWxsID8gW10gOiBbb2JqXSlcbiAgICApXG59XG5cbmNvbnN0IElzTnVtYmVyID0gL15cXGQrJC9cblxuZnVuY3Rpb24gbWFrZUdldHRlcihwYXJ0OiBzdHJpbmcsIHBhcmVudDogR2V0dGVyRm4pOiBHZXR0ZXJGbiB7XG4gICAgaWYgKHBhcnQgPT09IFwiKlwiKSB7XG4gICAgICAgIHJldHVybiBvYmogPT4gZmxhdHRlbkRlcHRoKHBhcmVudChvYmopLCAxKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IElzTnVtYmVyLnRlc3QocGFydCkgPyBOdW1iZXIocGFydCkgOiBwYXJ0XG4gICAgICAgIHJldHVybiBvYmogPT4gcGFyZW50KG9iaikubWFwKHYgPT4gKHYgIT0gbnVsbCA/IHZba2V5XSA6IHVuZGVmaW5lZCkpXG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEZWVwUmVhZG9ubHkgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyB0eXBlIE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB7IHR5cGUgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCJcbmltcG9ydCB7IHR5cGUgR3JvdXBlciB9IGZyb20gXCIuL2dyb3VwZXJcIlxuaW1wb3J0IHsgdHlwZSBTbGljZSB9IGZyb20gXCIuL3NsaWNlXCJcbmltcG9ydCB7IHR5cGUgU2xpbWVyIH0gZnJvbSBcIi4vc2xpbWVyXCJcbmltcG9ydCB7IHR5cGUgU29ydGVyIH0gZnJvbSBcIi4vc29ydGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeTxUIGV4dGVuZHMgTW9kZWw+IHtcbiAgICBmaWx0ZXI/OiBEZWVwUmVhZG9ubHk8RmlsdGVyPFQ+PlxuICAgIHNvcnRlcj86IERlZXBSZWFkb25seTxTb3J0ZXI8VD4+XG4gICAgc2xpbWVyPzogRGVlcFJlYWRvbmx5PFNsaW1lcjxUPj5cbiAgICBncm91cGVyPzogRGVlcFJlYWRvbmx5PEdyb3VwZXI8VD4+XG4gICAgc2xpY2U/OiBEZWVwUmVhZG9ubHk8U2xpY2U+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlSZXN1bHQ8VCBleHRlbmRzIE1vZGVsPiB7XG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXVxuICAgIHRvdGFsPzogbnVtYmVyXG4gICAgZ3JvdXBzPzogYW55W11cbn1cbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { deepClone } from "@ngutil/common";
|
|
2
|
+
export function sliceMerge(...slices) {
|
|
3
|
+
let result = undefined;
|
|
4
|
+
for (const slice of slices) {
|
|
5
|
+
if (slice == null) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
if (result == null) {
|
|
9
|
+
result = deepClone(slice);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
result = { ...result, ...slice };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Apply slice to array, and force the result length to equal with Slice length,
|
|
19
|
+
* so fill array with undefined if not enought elements
|
|
20
|
+
*/
|
|
21
|
+
export function sliceApply(slice, array) {
|
|
22
|
+
const result = array.slice(slice.start, slice.end);
|
|
23
|
+
result.length = slice.end - slice.start;
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`
|
|
28
|
+
*/
|
|
29
|
+
export function sliceToPages(slice) {
|
|
30
|
+
if (slice.pageSize == null) {
|
|
31
|
+
throw new Error("Missing `step` from slice");
|
|
32
|
+
}
|
|
33
|
+
const start = Math.floor(slice.start / slice.pageSize);
|
|
34
|
+
const end = Math.ceil(slice.end / slice.pageSize);
|
|
35
|
+
return Array.from({ length: end - start }, (_, i) => start + i);
|
|
36
|
+
}
|
|
37
|
+
export function sliceInsert(slice, array, newItems) {
|
|
38
|
+
if (slice.start === slice.end) {
|
|
39
|
+
return array;
|
|
40
|
+
}
|
|
41
|
+
let result = array.slice(0, slice.start);
|
|
42
|
+
result.length = slice.start;
|
|
43
|
+
result = result.concat(newItems);
|
|
44
|
+
result.length = slice.end;
|
|
45
|
+
return result.concat(array.slice(slice.end));
|
|
46
|
+
}
|
|
47
|
+
export function sliceClamp(slice, constraint) {
|
|
48
|
+
return {
|
|
49
|
+
start: Math.max(slice.start, constraint.start),
|
|
50
|
+
end: Math.min(slice.end, constraint.end),
|
|
51
|
+
pageSize: slice.pageSize
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function sliceEq(a, b) {
|
|
55
|
+
return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize;
|
|
56
|
+
}
|
|
57
|
+
// TODO: sliceOverlap(other: Slice): Slice
|
|
58
|
+
// TODO: sliceIncludes(other: Slice): boolean
|
|
59
|
+
// TODO: sliceConcat(...slices: Slice[]): Slice[]
|
|
60
|
+
// TODO: sliceDiff(slice: Slice): Slice[]
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9zbGljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUF1QjFDLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBRyxNQUFlO0lBQ3pDLElBQUksTUFBTSxHQUFzQixTQUFTLENBQUE7SUFFekMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixTQUFRO1FBQ1osQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLEdBQUcsRUFBRSxHQUFJLE1BQWMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFBO1FBQzdDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBWSxFQUFFLEtBQXFCO0lBQzFELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7SUFDdkMsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFZO0lBQ3JDLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVksRUFBRSxLQUFxQixFQUFFLFFBQXdCO0lBQ3JGLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFZLENBQUE7SUFDdkIsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4QyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7SUFFM0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFBO0lBRXpCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQVksRUFBRSxVQUFpQjtJQUN0RCxPQUFPO1FBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzlDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUN4QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7S0FDM0IsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQVEsRUFBRSxDQUFRO0lBQ3RDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUE7QUFDOUUsQ0FBQztBQUVELDBDQUEwQztBQUMxQyw2Q0FBNkM7QUFDN0MsaURBQWlEO0FBQ2pELHlDQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpc3RSYW5nZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuXG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9hcnJheS12aWV3XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB7c3RhcnQ6IDAsIGVuZDogMH0gLy8gZW1wdHkgcmFuZ2VcbiAqIHtzdGFydDogMCwgZW5kOiAxfSAvLyByYW5nZSB3aXRoIG9uZSBpdGVtLmVnIHNsaWNlQXBwbHkoWzEsIDIsIDNdLCB7c3RhcnQ6MCwgZW5kOjF9KSAtPiBbMV1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlIGV4dGVuZHMgTGlzdFJhbmdlIHtcbiAgICAvKipcbiAgICAgKiBTdGFydCBvZiBzbGljZSwgZXhhY3QgaW5kZXggb2YgaXRlbSBpbiBsaXN0XG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEVuZCBvZiBzbGljZSwgbm90IGluY2x1ZGUgZW5kIGluZGV4IG9mIGl0ZW0gaW4gbGlzdFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuZDogbnVtYmVyXG4gICAgcmVhZG9ubHkgcGFnZVNpemU/OiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlTWVyZ2UoLi4uc2xpY2VzOiBTbGljZVtdKSB7XG4gICAgbGV0IHJlc3VsdDogU2xpY2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgIGZvciAoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzKSB7XG4gICAgICAgIGlmIChzbGljZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGVlcENsb25lKHNsaWNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0geyAuLi4ocmVzdWx0IGFzIGFueSksIC4uLnNsaWNlIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBcHBseSBzbGljZSB0byBhcnJheSwgYW5kIGZvcmNlIHRoZSByZXN1bHQgbGVuZ3RoIHRvIGVxdWFsIHdpdGggU2xpY2UgbGVuZ3RoLFxuICogc28gZmlsbCBhcnJheSB3aXRoIHVuZGVmaW5lZCBpZiBub3QgZW5vdWdodCBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2VBcHBseShzbGljZTogU2xpY2UsIGFycmF5OiByZWFkb25seSBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCByZXN1bHQgPSBhcnJheS5zbGljZShzbGljZS5zdGFydCwgc2xpY2UuZW5kKVxuICAgIHJlc3VsdC5sZW5ndGggPSBzbGljZS5lbmQgLSBzbGljZS5zdGFydFxuICAgIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcmV0dXJucyBQYWdlIG51bWJlcnMsIGVnLjogYFsxMCwgMTEsIDEyLCAxMywgLi4uXWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlVG9QYWdlcyhzbGljZTogU2xpY2UpOiBudW1iZXJbXSB7XG4gICAgaWYgKHNsaWNlLnBhZ2VTaXplID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBgc3RlcGAgZnJvbSBzbGljZVwiKVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5mbG9vcihzbGljZS5zdGFydCAvIHNsaWNlLnBhZ2VTaXplKVxuICAgIGNvbnN0IGVuZCA9IE1hdGguY2VpbChzbGljZS5lbmQgLyBzbGljZS5wYWdlU2l6ZSlcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kIC0gc3RhcnQgfSwgKF8sIGkpID0+IHN0YXJ0ICsgaSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlSW5zZXJ0KHNsaWNlOiBTbGljZSwgYXJyYXk6IHJlYWRvbmx5IGFueVtdLCBuZXdJdGVtczogcmVhZG9ubHkgYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKHNsaWNlLnN0YXJ0ID09PSBzbGljZS5lbmQpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5IGFzIGFueVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBhcnJheS5zbGljZSgwLCBzbGljZS5zdGFydClcbiAgICByZXN1bHQubGVuZ3RoID0gc2xpY2Uuc3RhcnRcblxuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQobmV3SXRlbXMpXG4gICAgcmVzdWx0Lmxlbmd0aCA9IHNsaWNlLmVuZFxuXG4gICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoYXJyYXkuc2xpY2Uoc2xpY2UuZW5kKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlQ2xhbXAoc2xpY2U6IFNsaWNlLCBjb25zdHJhaW50OiBTbGljZSk6IFNsaWNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogTWF0aC5tYXgoc2xpY2Uuc3RhcnQsIGNvbnN0cmFpbnQuc3RhcnQpLFxuICAgICAgICBlbmQ6IE1hdGgubWluKHNsaWNlLmVuZCwgY29uc3RyYWludC5lbmQpLFxuICAgICAgICBwYWdlU2l6ZTogc2xpY2UucGFnZVNpemVcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGljZUVxKGE6IFNsaWNlLCBiOiBTbGljZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLnN0YXJ0ID09PSBiLnN0YXJ0ICYmIGEuZW5kID09PSBiLmVuZCAmJiBhLnBhZ2VTaXplID09PSBiLnBhZ2VTaXplXG59XG5cbi8vIFRPRE86IHNsaWNlT3ZlcmxhcChvdGhlcjogU2xpY2UpOiBTbGljZVxuLy8gVE9ETzogc2xpY2VJbmNsdWRlcyhvdGhlcjogU2xpY2UpOiBib29sZWFuXG4vLyBUT0RPOiBzbGljZUNvbmNhdCguLi5zbGljZXM6IFNsaWNlW10pOiBTbGljZVtdXG4vLyBUT0RPOiBzbGljZURpZmYoc2xpY2U6IFNsaWNlKTogU2xpY2VbXVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function slimBy(slimer) { }
|
|
2
|
+
export function slimerNormalize(slimer) { }
|
|
3
|
+
function slimerCompile(slimer) {
|
|
4
|
+
return item => item;
|
|
5
|
+
}
|
|
6
|
+
export function slimerMerge(...slimers) { }
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpbWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc2xpbWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxNQUFNLFVBQVUsTUFBTSxDQUFrQixNQUFpQixJQUFTLENBQUM7QUFFbkUsTUFBTSxVQUFVLGVBQWUsQ0FBa0IsTUFBaUIsSUFBUyxDQUFDO0FBRTVFLFNBQVMsYUFBYSxDQUFrQixNQUFpQjtJQUNyRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFrQixHQUFHLE9BQWtCLElBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCJcblxuLyoqXG4gKiBAZXhtYXBsZVxuICogYGBgdHNcbiAqIFtcbiAqICBcImZpZWxkX25hbWVcIixcbiAqICB7XCJjaGlsZF9uYW1lXCI6IFtcImNoaWxkX2ZpZWxkX25hbWVcIl19LFxuICogIHtcImNoaWxkcmVuXCI6IFtcImNoaWxkcmVuX2ZpZWxkX25hbWVcIiwge1wiJHR5cGVcIjogQXJ0aWNsZSwgc2xpbWVyOiBbXCJpZFwiLCBcInRpdGxlXCJdfV19LFxuICogIHtcIiR0eXBlXCI6IEVtcGxveWVlLCBzbGltZXI6IFtcIm5hbWVcIl19LlxuICogIHtcIiRmaWx0ZXJcIjogRmlsdGVyPFQsIEY+fVxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFNsaW1lcjxUIGV4dGVuZHMgTW9kZWw+ID0gYW55XG5leHBvcnQgdHlwZSBTbGltZXJGbjxUPiA9IChpdGVtOiBUKSA9PiBUXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGltQnk8VCBleHRlbmRzIE1vZGVsPihzbGltZXI6IFNsaW1lcjxUPik6IHZvaWQge31cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaW1lck5vcm1hbGl6ZTxUIGV4dGVuZHMgTW9kZWw+KHNsaW1lcjogU2xpbWVyPFQ+KTogdm9pZCB7fVxuXG5mdW5jdGlvbiBzbGltZXJDb21waWxlPFQgZXh0ZW5kcyBNb2RlbD4oc2xpbWVyOiBTbGltZXI8VD4pOiBTbGltZXJGbjxUPiB7XG4gICAgcmV0dXJuIGl0ZW0gPT4gaXRlbVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xpbWVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsPiguLi5zbGltZXJzOiBTbGltZXI8VD4pOiB2b2lkIHt9XG4iXX0=
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { flattenDeep, isEqual } from "lodash";
|
|
2
|
+
import { deepClone, isPlainObject } from "@ngutil/common";
|
|
3
|
+
import { pathGetterCompile } from "./path";
|
|
4
|
+
/**
|
|
5
|
+
* @example
|
|
6
|
+
*```ts
|
|
7
|
+
* items.toSorted(sortBy([{"author.name": "asc"}]))
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export function sortBy(sorters) {
|
|
11
|
+
if (sorters.length === 0) {
|
|
12
|
+
throw new Error("Empty sorter");
|
|
13
|
+
}
|
|
14
|
+
return _sorterCompile(sorters);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Normalize sorter definition
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* normalizeSorter([{id: "asc"}]) -> [{path: "id", isAsc: true, emptyFirst: true}]
|
|
22
|
+
* normalizeSorter([{id: {dir: "desc", emptyFirst: false}}]) -> [{path: "id", isAsc: false, emptyFirst: false}]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function sorterNormalize(sorters) {
|
|
26
|
+
return flattenDeep(sorters.map((s) => Object.entries(s).map(([k, v]) => {
|
|
27
|
+
if (typeof v === "string") {
|
|
28
|
+
const isAsc = v.toLowerCase() === "asc";
|
|
29
|
+
return { path: k, isAsc, emptyFirst: isAsc ? false : true };
|
|
30
|
+
}
|
|
31
|
+
else if (isPlainObject(v)) {
|
|
32
|
+
return {
|
|
33
|
+
path: k,
|
|
34
|
+
isAsc: (v.dir || "asc").toLowerCase() === "asc",
|
|
35
|
+
emptyFirst: v.emptyFirst == null ? true : !!v.emptyFirst
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
throw new Error(`Invalid sorter: ${v}`);
|
|
40
|
+
}
|
|
41
|
+
})));
|
|
42
|
+
}
|
|
43
|
+
function _sorterCompile(sorters) {
|
|
44
|
+
if (sorters.length === 0) {
|
|
45
|
+
return (_a, _b) => 0;
|
|
46
|
+
}
|
|
47
|
+
const norm = sorterNormalize(sorters).map(createComparator);
|
|
48
|
+
if (norm.length === 1) {
|
|
49
|
+
return norm[0];
|
|
50
|
+
}
|
|
51
|
+
const initial = norm.pop();
|
|
52
|
+
return norm.reduceRight((next, curr) => (a, b) => {
|
|
53
|
+
const r = curr(a, b);
|
|
54
|
+
return r === 0 ? next(a, b) : r;
|
|
55
|
+
}, initial);
|
|
56
|
+
}
|
|
57
|
+
function createComparator({ path, isAsc, emptyFirst }) {
|
|
58
|
+
const getter = pathGetterCompile(path);
|
|
59
|
+
if (isAsc) {
|
|
60
|
+
return (a, b) => compare(getter(a), getter(b), emptyFirst);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function compare(a, b, emptyFirst) {
|
|
67
|
+
// console.log("COMPARE", a, b)
|
|
68
|
+
if (a == null && b != null) {
|
|
69
|
+
return emptyFirst === true ? -1 : 1;
|
|
70
|
+
}
|
|
71
|
+
else if (a != null && b == null) {
|
|
72
|
+
return emptyFirst === true ? 1 : -1;
|
|
73
|
+
}
|
|
74
|
+
else if (a == null && b == null) {
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
else if (isEqual(a, b)) {
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
else if (typeof a === "number" && typeof b === "number") {
|
|
81
|
+
return a - b;
|
|
82
|
+
}
|
|
83
|
+
else if (typeof a === "string" && typeof b === "string") {
|
|
84
|
+
const al = a.length;
|
|
85
|
+
const bl = b.length;
|
|
86
|
+
// if both lengths is 0 the code execution not reach that point, because a === b
|
|
87
|
+
if (emptyFirst === true) {
|
|
88
|
+
if (al === 0) {
|
|
89
|
+
return -1;
|
|
90
|
+
}
|
|
91
|
+
else if (bl === 0) {
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
if (al === 0) {
|
|
97
|
+
return 1;
|
|
98
|
+
}
|
|
99
|
+
else if (bl === 0) {
|
|
100
|
+
return -1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return a.localeCompare(b);
|
|
104
|
+
}
|
|
105
|
+
else if (Array.isArray(a) && Array.isArray(b)) {
|
|
106
|
+
const al = a.length;
|
|
107
|
+
const bl = b.length;
|
|
108
|
+
const l = Math.min(al, bl);
|
|
109
|
+
for (let i = 0; i < l; i++) {
|
|
110
|
+
const res = compare(a[i], b[i], emptyFirst);
|
|
111
|
+
if (res !== 0) {
|
|
112
|
+
return res;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (al === bl) {
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
if (emptyFirst === true) {
|
|
119
|
+
if (al === 0) {
|
|
120
|
+
return -1;
|
|
121
|
+
}
|
|
122
|
+
else if (bl === 0) {
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (al === 0) {
|
|
128
|
+
return 1;
|
|
129
|
+
}
|
|
130
|
+
else if (bl === 0) {
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return al - bl;
|
|
135
|
+
}
|
|
136
|
+
else if (isPlainObject(a) && isPlainObject(b)) {
|
|
137
|
+
return JSON.stringify(a).localeCompare(JSON.stringify(b));
|
|
138
|
+
}
|
|
139
|
+
return a > b ? -1 : 1;
|
|
140
|
+
}
|
|
141
|
+
export function sorterMerge(...sorters) {
|
|
142
|
+
let result;
|
|
143
|
+
for (const sorter of sorters) {
|
|
144
|
+
if (sorter == null) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (result == null) {
|
|
148
|
+
result = deepClone(sorter);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
for (const sentry of sorter) {
|
|
152
|
+
for (const [k, v] of Object.entries(sentry)) {
|
|
153
|
+
const existing = result.find((value) => value[k] != null);
|
|
154
|
+
if (existing) {
|
|
155
|
+
;
|
|
156
|
+
existing[k] = deepClone(v);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
result.push({ [k]: deepClone(v) });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFB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QUMsRUFBUyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgZGVlcENsb25lLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgcGF0aEdldHRlckNvbXBpbGUgfSBmcm9tIFwiLi9wYXRoXCJcblxuZXhwb3J0IHR5cGUgU29ydGVyRm48VCA9IGFueT4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyXG5cbmV4cG9ydCBjb25zdCBlbnVtIFNvcnREaXJlY3Rpb24ge1xuICAgIEFzYyA9IFwiYXNjXCIsXG4gICAgRGVzYyA9IFwiZGVzY1wiXG59XG5cbnR5cGUgRGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5Bc2MgfCBTb3J0RGlyZWN0aW9uLkRlc2MgfCBcImFzY1wiIHwgXCJkZXNjXCJcbnR5cGUgRGlyZWN0aW9uRXh0cmEgPSB7IGRpcjogRGlyZWN0aW9uOyBlbXB0eUZpcnN0OiBib29sZWFuIH1cblxudHlwZSBfU29ydGVyPEY+ID0geyBbSyBpbiBrZXlvZiBGXTogeyBba2V5IGluIEtdOiBEaXJlY3Rpb24gfCBEaXJlY3Rpb25FeHRyYSB9IH1ba2V5b2YgRl1cbi8vIFRPRE86IGZpeCByZWN1cnNpb25cbi8vIGV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8X1NvcnRlcjxGbGF0dGVuPFQ+Pj5cbmV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8eyBba2V5OiBzdHJpbmddOiBEaXJlY3Rpb24gfCBEaXJlY3Rpb25FeHRyYSB9PlxuXG50eXBlIE5vcm1hbGl6ZWRFbnRyeSA9IHsgcGF0aDogc3RyaW5nOyBpc0FzYzogYm9vbGVhbjsgZW1wdHlGaXJzdDogYm9vbGVhbiB9XG5leHBvcnQgdHlwZSBTb3J0ZXJOb3JtYWxpemVkID0gQXJyYXk8Tm9ybWFsaXplZEVudHJ5PlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKmBgYHRzXG4gKiBpdGVtcy50b1NvcnRlZChzb3J0QnkoW3tcImF1dGhvci5uYW1lXCI6IFwiYXNjXCJ9XSkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlckZuPFQ+IHtcbiAgICBpZiAoc29ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgc29ydGVyXCIpXG4gICAgfVxuICAgIHJldHVybiBfc29ydGVyQ29tcGlsZTxUPihzb3J0ZXJzKSBhcyBhbnlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc29ydGVyIGRlZmluaXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIG5vcm1hbGl6ZVNvcnRlcihbe2lkOiBcImFzY1wifV0pIC0+IFt7cGF0aDogXCJpZFwiLCBpc0FzYzogdHJ1ZSwgZW1wdHlGaXJzdDogdHJ1ZX1dXG4gKiBub3JtYWxpemVTb3J0ZXIoW3tpZDoge2RpcjogXCJkZXNjXCIsIGVtcHR5Rmlyc3Q6IGZhbHNlfX1dKSAtPiBbe3BhdGg6IFwiaWRcIiwgaXNBc2M6IGZhbHNlLCBlbXB0eUZpcnN0OiBmYWxzZX1dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRlck5vcm1hbGl6ZTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlck5vcm1hbGl6ZWQge1xuICAgIHJldHVybiBmbGF0dGVuRGVlcChcbiAgICAgICAgKHNvcnRlcnMgYXMgYW55KS5tYXAoKHM6IGFueSkgPT5cbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHMpLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXNjID0gdi50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IGssIGlzQXNjLCBlbXB0eUZpcnN0OiBpc0FzYyA/IGZhbHNlIDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBrLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBc2M6ICgodiBhcyBEaXJlY3Rpb25FeHRyYSkuZGlyIHx8IFwiYXNjXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiYXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUZpcnN0OiAodiBhcyBEaXJlY3Rpb25FeHRyYSkuZW1wdHlGaXJzdCA9PSBudWxsID8gdHJ1ZSA6ICEhKHYgYXMgRGlyZWN0aW9uRXh0cmEpLmVtcHR5Rmlyc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzb3J0ZXI6ICR7dn1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9zb3J0ZXJDb21waWxlPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyRm48VD4ge1xuICAgIGlmIChzb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKF9hLCBfYikgPT4gMFxuICAgIH1cblxuICAgIGNvbnN0IG5vcm0gPSBzb3J0ZXJOb3JtYWxpemU8VD4oc29ydGVycykubWFwKGNyZWF0ZUNvbXBhcmF0b3IpXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBub3JtWzBdXG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbCA9IG5vcm0ucG9wKCkhXG4gICAgcmV0dXJuIG5vcm0ucmVkdWNlUmlnaHQ8U29ydGVyRm48VD4+KFxuICAgICAgICAobmV4dCwgY3VycikgPT4gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjdXJyKGEsIGIpXG4gICAgICAgICAgICByZXR1cm4gciA9PT0gMCA/IG5leHQoYSwgYikgOiByXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxcbiAgICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBhcmF0b3IoeyBwYXRoLCBpc0FzYywgZW1wdHlGaXJzdCB9OiBOb3JtYWxpemVkRW50cnkpOiBTb3J0ZXJGbiB7XG4gICAgY29uc3QgZ2V0dGVyID0gcGF0aEdldHRlckNvbXBpbGUocGF0aClcbiAgICBpZiAoaXNBc2MpIHtcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBjb21wYXJlKGdldHRlcihhKSwgZ2V0dGVyKGIpLCBlbXB0eUZpcnN0KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYSwgYikgPT4gY29tcGFyZShnZXR0ZXIoYSksIGdldHRlcihiKSwgIWVtcHR5Rmlyc3QpICogLTFcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKGE6IGFueSwgYjogYW55LCBlbXB0eUZpcnN0OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkNPTVBBUkVcIiwgYSwgYilcbiAgICBpZiAoYSA9PSBudWxsICYmIGIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IC0xIDogMVxuICAgIH0gZWxzZSBpZiAoYSAhPSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IDEgOiAtMVxuICAgIH0gZWxzZSBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAoaXNFcXVhbChhLCBiKSkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgLy8gaWYgYm90aCBsZW5ndGhzIGlzIDAgdGhlIGNvZGUgZXhlY3V0aW9uIG5vdCByZWFjaCB0aGF0IHBvaW50LCBiZWNhdXNlIGEgPT09IGJcbiAgICAgICAgaWYgKGVtcHR5Rmlyc3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgY29uc3QgbCA9IE1hdGgubWluKGFsLCBibClcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gY29tcGFyZShhW2ldLCBiW2ldLCBlbXB0eUZpcnN0KVxuICAgICAgICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbCA9PT0gYmwpIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHlGaXJzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWwgLSBibFxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhKS5sb2NhbGVDb21wYXJlKEpTT04uc3RyaW5naWZ5KGIpKVxuICAgIH1cblxuICAgIHJldHVybiBhID4gYiA/IC0xIDogMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsPiguLi5zb3J0ZXJzOiBBcnJheTxTb3J0ZXI8VD4gfCB1bmRlZmluZWQgfCBudWxsPik6IFNvcnRlcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogU29ydGVyPFQ+IHwgdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG4gICAgICAgIGlmIChzb3J0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGRlZXBDbG9uZShzb3J0ZXIpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZW50cnkgb2Ygc29ydGVyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSAocmVzdWx0IGFzIGFueSkuZmluZCgodmFsdWU6IGFueSkgPT4gdmFsdWVba10gIT0gbnVsbClcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgOyhleGlzdGluZyBhcyBhbnkpW2tdID0gZGVlcENsb25lKHYpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBba106IGRlZXBDbG9uZSh2KSB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4iXX0=
|