@ngutil/data 0.0.12 → 0.0.13

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.
@@ -1,8 +1,8 @@
1
1
  export { filterBy, filterMerge } from "./filter";
2
2
  export { groupBy, grouperMerge } from "./grouper";
3
- export { sortBy, sorterMerge } from "./sorter";
3
+ export { sortBy, sorterMerge, sorterFind } from "./sorter";
4
4
  export { slimBy, slimerMerge } from "./slimer";
5
5
  export { sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
6
6
  export { pathGetterCompile } from "./path";
7
7
  export { queryExecutor } from "./executor";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBWSxNQUFNLFVBQVUsQ0FBQTtBQUNsRSxPQUFPLEVBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxRCxPQUFPLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBd0MsTUFBTSxVQUFVLENBQUE7QUFDNUYsT0FBTyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDdEQsT0FBTyxFQUFTLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3ZHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUUxQyxPQUFPLEVBQUUsYUFBYSxFQUFpQixNQUFNLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZpbHRlciwgZmlsdGVyQnksIGZpbHRlck1lcmdlLCBGaWx0ZXJPcCB9IGZyb20gXCIuL2ZpbHRlclwiXG5leHBvcnQgeyBHcm91cGVyLCBncm91cEJ5LCBncm91cGVyTWVyZ2UgfSBmcm9tIFwiLi9ncm91cGVyXCJcbmV4cG9ydCB7IFNvcnRlciwgc29ydEJ5LCBzb3J0ZXJNZXJnZSwgU29ydERpciwgU29ydERpcmVjdGlvbiwgU29ydERpckV4dHJhIH0gZnJvbSBcIi4vc29ydGVyXCJcbmV4cG9ydCB7IFNsaW1lciwgc2xpbUJ5LCBzbGltZXJNZXJnZSB9IGZyb20gXCIuL3NsaW1lclwiXG5leHBvcnQgeyBTbGljZSwgc2xpY2VNZXJnZSwgc2xpY2VBcHBseSwgc2xpY2VJbnNlcnQsIHNsaWNlVG9QYWdlcywgc2xpY2VDbGFtcCwgc2xpY2VFcSB9IGZyb20gXCIuL3NsaWNlXCJcbmV4cG9ydCB7IHBhdGhHZXR0ZXJDb21waWxlIH0gZnJvbSBcIi4vcGF0aFwiXG5leHBvcnQgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi9xdWVyeVwiXG5leHBvcnQgeyBxdWVyeUV4ZWN1dG9yLCBRdWVyeUV4ZWN1dG9yIH0gZnJvbSBcIi4vZXhlY3V0b3JcIlxuIl19
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBWSxNQUFNLFVBQVUsQ0FBQTtBQUNsRSxPQUFPLEVBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxRCxPQUFPLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBd0MsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3hHLE9BQU8sRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3RELE9BQU8sRUFBUyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFMUMsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxZQUFZLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGaWx0ZXIsIGZpbHRlckJ5LCBmaWx0ZXJNZXJnZSwgRmlsdGVyT3AgfSBmcm9tIFwiLi9maWx0ZXJcIlxuZXhwb3J0IHsgR3JvdXBlciwgZ3JvdXBCeSwgZ3JvdXBlck1lcmdlIH0gZnJvbSBcIi4vZ3JvdXBlclwiXG5leHBvcnQgeyBTb3J0ZXIsIHNvcnRCeSwgc29ydGVyTWVyZ2UsIFNvcnREaXIsIFNvcnREaXJlY3Rpb24sIFNvcnREaXJFeHRyYSwgc29ydGVyRmluZCB9IGZyb20gXCIuL3NvcnRlclwiXG5leHBvcnQgeyBTbGltZXIsIHNsaW1CeSwgc2xpbWVyTWVyZ2UgfSBmcm9tIFwiLi9zbGltZXJcIlxuZXhwb3J0IHsgU2xpY2UsIHNsaWNlTWVyZ2UsIHNsaWNlQXBwbHksIHNsaWNlSW5zZXJ0LCBzbGljZVRvUGFnZXMsIHNsaWNlQ2xhbXAsIHNsaWNlRXEgfSBmcm9tIFwiLi9zbGljZVwiXG5leHBvcnQgeyBwYXRoR2V0dGVyQ29tcGlsZSB9IGZyb20gXCIuL3BhdGhcIlxuZXhwb3J0IHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4vcXVlcnlcIlxuZXhwb3J0IHsgcXVlcnlFeGVjdXRvciwgUXVlcnlFeGVjdXRvciB9IGZyb20gXCIuL2V4ZWN1dG9yXCJcbiJdfQ==
@@ -163,4 +163,11 @@ export function sorterMerge(...sorters) {
163
163
  }
164
164
  return result;
165
165
  }
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFB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QUMsRUFBUyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgZGVlcENsb25lLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgcGF0aEdldHRlckNvbXBpbGUgfSBmcm9tIFwiLi9wYXRoXCJcblxuZXhwb3J0IHR5cGUgU29ydGVyRm48VCA9IGFueT4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyXG5cbmV4cG9ydCBjb25zdCBlbnVtIFNvcnREaXJlY3Rpb24ge1xuICAgIEFzYyA9IFwiYXNjXCIsXG4gICAgRGVzYyA9IFwiZGVzY1wiXG59XG5cbmV4cG9ydCB0eXBlIFNvcnREaXIgPSBTb3J0RGlyZWN0aW9uLkFzYyB8IFNvcnREaXJlY3Rpb24uRGVzYyB8IFwiYXNjXCIgfCBcImRlc2NcIlxuZXhwb3J0IHR5cGUgU29ydERpckV4dHJhID0geyBkaXI6IFNvcnREaXI7IGVtcHR5Rmlyc3Q6IGJvb2xlYW4gfVxuXG50eXBlIF9Tb3J0ZXI8Rj4gPSB7IFtLIGluIGtleW9mIEZdOiB7IFtrZXkgaW4gS106IFNvcnREaXIgfCBTb3J0RGlyRXh0cmEgfSB9W2tleW9mIEZdXG4vLyBUT0RPOiBmaXggcmVjdXJzaW9uXG4vLyBleHBvcnQgdHlwZSBTb3J0ZXI8VCBleHRlbmRzIE1vZGVsPiA9IEFycmF5PF9Tb3J0ZXI8RmxhdHRlbjxUPj4+XG5leHBvcnQgdHlwZSBTb3J0ZXI8VCBleHRlbmRzIE1vZGVsPiA9IEFycmF5PHsgW2tleTogc3RyaW5nXTogU29ydERpciB8IFNvcnREaXJFeHRyYSB9PlxuXG50eXBlIE5vcm1hbGl6ZWRFbnRyeSA9IHsgcGF0aDogc3RyaW5nOyBpc0FzYzogYm9vbGVhbjsgZW1wdHlGaXJzdDogYm9vbGVhbiB9XG5leHBvcnQgdHlwZSBTb3J0ZXJOb3JtYWxpemVkID0gQXJyYXk8Tm9ybWFsaXplZEVudHJ5PlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKmBgYHRzXG4gKiBpdGVtcy50b1NvcnRlZChzb3J0QnkoW3tcImF1dGhvci5uYW1lXCI6IFwiYXNjXCJ9XSkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlckZuPFQ+IHtcbiAgICBpZiAoc29ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgc29ydGVyXCIpXG4gICAgfVxuICAgIHJldHVybiBfc29ydGVyQ29tcGlsZTxUPihzb3J0ZXJzKSBhcyBhbnlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc29ydGVyIGRlZmluaXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIG5vcm1hbGl6ZVNvcnRlcihbe2lkOiBcImFzY1wifV0pIC0+IFt7cGF0aDogXCJpZFwiLCBpc0FzYzogdHJ1ZSwgZW1wdHlGaXJzdDogdHJ1ZX1dXG4gKiBub3JtYWxpemVTb3J0ZXIoW3tpZDoge2RpcjogXCJkZXNjXCIsIGVtcHR5Rmlyc3Q6IGZhbHNlfX1dKSAtPiBbe3BhdGg6IFwiaWRcIiwgaXNBc2M6IGZhbHNlLCBlbXB0eUZpcnN0OiBmYWxzZX1dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRlck5vcm1hbGl6ZTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlck5vcm1hbGl6ZWQge1xuICAgIHJldHVybiBmbGF0dGVuRGVlcChcbiAgICAgICAgKHNvcnRlcnMgYXMgYW55KS5tYXAoKHM6IGFueSkgPT5cbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHMpLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXNjID0gdi50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IGssIGlzQXNjLCBlbXB0eUZpcnN0OiBpc0FzYyA/IGZhbHNlIDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBrLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBc2M6ICgodiBhcyBTb3J0RGlyRXh0cmEpLmRpciB8fCBcImFzY1wiKS50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlGaXJzdDogKHYgYXMgU29ydERpckV4dHJhKS5lbXB0eUZpcnN0ID09IG51bGwgPyB0cnVlIDogISEodiBhcyBTb3J0RGlyRXh0cmEpLmVtcHR5Rmlyc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzb3J0ZXI6ICR7dn1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9zb3J0ZXJDb21waWxlPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyRm48VD4ge1xuICAgIGlmIChzb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKF9hLCBfYikgPT4gMFxuICAgIH1cblxuICAgIGNvbnN0IG5vcm0gPSBzb3J0ZXJOb3JtYWxpemU8VD4oc29ydGVycykubWFwKGNyZWF0ZUNvbXBhcmF0b3IpXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBub3JtWzBdXG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbCA9IG5vcm0ucG9wKCkhXG4gICAgcmV0dXJuIG5vcm0ucmVkdWNlUmlnaHQ8U29ydGVyRm48VD4+KFxuICAgICAgICAobmV4dCwgY3VycikgPT4gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjdXJyKGEsIGIpXG4gICAgICAgICAgICByZXR1cm4gciA9PT0gMCA/IG5leHQoYSwgYikgOiByXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWxcbiAgICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBhcmF0b3IoeyBwYXRoLCBpc0FzYywgZW1wdHlGaXJzdCB9OiBOb3JtYWxpemVkRW50cnkpOiBTb3J0ZXJGbiB7XG4gICAgY29uc3QgZ2V0dGVyID0gcGF0aEdldHRlckNvbXBpbGUocGF0aClcbiAgICBpZiAoaXNBc2MpIHtcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBjb21wYXJlKGdldHRlcihhKSwgZ2V0dGVyKGIpLCBlbXB0eUZpcnN0KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYSwgYikgPT4gY29tcGFyZShnZXR0ZXIoYSksIGdldHRlcihiKSwgIWVtcHR5Rmlyc3QpICogLTFcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlKGE6IGFueSwgYjogYW55LCBlbXB0eUZpcnN0OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkNPTVBBUkVcIiwgYSwgYilcbiAgICBpZiAoYSA9PSBudWxsICYmIGIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IC0xIDogMVxuICAgIH0gZWxzZSBpZiAoYSAhPSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1wdHlGaXJzdCA9PT0gdHJ1ZSA/IDEgOiAtMVxuICAgIH0gZWxzZSBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAoaXNFcXVhbChhLCBiKSkge1xuICAgICAgICByZXR1cm4gMFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgLy8gaWYgYm90aCBsZW5ndGhzIGlzIDAgdGhlIGNvZGUgZXhlY3V0aW9uIG5vdCByZWFjaCB0aGF0IHBvaW50LCBiZWNhdXNlIGEgPT09IGJcbiAgICAgICAgaWYgKGVtcHR5Rmlyc3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICBjb25zdCBhbCA9IGEubGVuZ3RoXG4gICAgICAgIGNvbnN0IGJsID0gYi5sZW5ndGhcbiAgICAgICAgY29uc3QgbCA9IE1hdGgubWluKGFsLCBibClcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gY29tcGFyZShhW2ldLCBiW2ldLCBlbXB0eUZpcnN0KVxuICAgICAgICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbCA9PT0gYmwpIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHlGaXJzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWwgLSBibFxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhKS5sb2NhbGVDb21wYXJlKEpTT04uc3RyaW5naWZ5KGIpKVxuICAgIH1cblxuICAgIHJldHVybiBhID4gYiA/IC0xIDogMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsPiguLi5zb3J0ZXJzOiBBcnJheTxTb3J0ZXI8VD4gfCB1bmRlZmluZWQgfCBudWxsPik6IFNvcnRlcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogU29ydGVyPFQ+IHwgdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG4gICAgICAgIGlmIChzb3J0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGRlZXBDbG9uZShzb3J0ZXIpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzZW50cnkgb2Ygc29ydGVyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSAocmVzdWx0IGFzIGFueSkuZmluZCgodmFsdWU6IGFueSkgPT4gdmFsdWVba10gIT0gbnVsbClcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgOyhleGlzdGluZyBhcyBhbnkpW2tdID0gZGVlcENsb25lKHYpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBba106IGRlZXBDbG9uZSh2KSB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4iXX0=
166
+ export function sorterFind(sorters, name) {
167
+ const sorter = sorters.find(v => v[name] != null);
168
+ if (sorter != null) {
169
+ return sorter[name];
170
+ }
171
+ return undefined;
172
+ }
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFB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QUMsRUFBUyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBR0QsTUFBTSxVQUFVLFVBQVUsQ0FBa0IsT0FBa0IsRUFBRSxJQUFZO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFDakQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBRXBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbGF0dGVuRGVlcCwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBwYXRoR2V0dGVyQ29tcGlsZSB9IGZyb20gXCIuL3BhdGhcIlxuXG5leHBvcnQgdHlwZSBTb3J0ZXJGbjxUID0gYW55PiA9IChhOiBULCBiOiBUKSA9PiBudW1iZXJcblxuZXhwb3J0IGNvbnN0IGVudW0gU29ydERpcmVjdGlvbiB7XG4gICAgQXNjID0gXCJhc2NcIixcbiAgICBEZXNjID0gXCJkZXNjXCJcbn1cblxuZXhwb3J0IHR5cGUgU29ydERpciA9IFNvcnREaXJlY3Rpb24uQXNjIHwgU29ydERpcmVjdGlvbi5EZXNjIHwgXCJhc2NcIiB8IFwiZGVzY1wiXG5leHBvcnQgdHlwZSBTb3J0RGlyRXh0cmEgPSB7IGRpcjogU29ydERpcjsgZW1wdHlGaXJzdDogYm9vbGVhbiB9XG5cbnR5cGUgX1NvcnRlcjxGPiA9IHsgW0sgaW4ga2V5b2YgRl06IHsgW2tleSBpbiBLXTogU29ydERpciB8IFNvcnREaXJFeHRyYSB9IH1ba2V5b2YgRl1cbi8vIFRPRE86IGZpeCByZWN1cnNpb25cbi8vIGV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8X1NvcnRlcjxGbGF0dGVuPFQ+Pj5cbmV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8eyBba2V5OiBzdHJpbmddOiBTb3J0RGlyIHwgU29ydERpckV4dHJhIH0+XG5cbnR5cGUgTm9ybWFsaXplZEVudHJ5ID0geyBwYXRoOiBzdHJpbmc7IGlzQXNjOiBib29sZWFuOyBlbXB0eUZpcnN0OiBib29sZWFuIH1cbmV4cG9ydCB0eXBlIFNvcnRlck5vcm1hbGl6ZWQgPSBBcnJheTxOb3JtYWxpemVkRW50cnk+XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqYGBgdHNcbiAqIGl0ZW1zLnRvU29ydGVkKHNvcnRCeShbe1wiYXV0aG9yLm5hbWVcIjogXCJhc2NcIn1dKSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5PFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyRm48VD4ge1xuICAgIGlmIChzb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBzb3J0ZXJcIilcbiAgICB9XG4gICAgcmV0dXJuIF9zb3J0ZXJDb21waWxlPFQ+KHNvcnRlcnMpIGFzIGFueVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBzb3J0ZXIgZGVmaW5pdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogbm9ybWFsaXplU29ydGVyKFt7aWQ6IFwiYXNjXCJ9XSkgLT4gW3twYXRoOiBcImlkXCIsIGlzQXNjOiB0cnVlLCBlbXB0eUZpcnN0OiB0cnVlfV1cbiAqIG5vcm1hbGl6ZVNvcnRlcihbe2lkOiB7ZGlyOiBcImRlc2NcIiwgZW1wdHlGaXJzdDogZmFsc2V9fV0pIC0+IFt7cGF0aDogXCJpZFwiLCBpc0FzYzogZmFsc2UsIGVtcHR5Rmlyc3Q6IGZhbHNlfV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyTm9ybWFsaXplPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyTm9ybWFsaXplZCB7XG4gICAgcmV0dXJuIGZsYXR0ZW5EZWVwKFxuICAgICAgICAoc29ydGVycyBhcyBhbnkpLm1hcCgoczogYW55KSA9PlxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocykubWFwKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBc2MgPSB2LnRvTG93ZXJDYXNlKCkgPT09IFwiYXNjXCJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGF0aDogaywgaXNBc2MsIGVtcHR5Rmlyc3Q6IGlzQXNjID8gZmFsc2UgOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGssXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FzYzogKCh2IGFzIFNvcnREaXJFeHRyYSkuZGlyIHx8IFwiYXNjXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiYXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUZpcnN0OiAodiBhcyBTb3J0RGlyRXh0cmEpLmVtcHR5Rmlyc3QgPT0gbnVsbCA/IHRydWUgOiAhISh2IGFzIFNvcnREaXJFeHRyYSkuZW1wdHlGaXJzdFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNvcnRlcjogJHt2fWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIClcbn1cblxuZnVuY3Rpb24gX3NvcnRlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihzb3J0ZXJzOiBTb3J0ZXI8VD4pOiBTb3J0ZXJGbjxUPiB7XG4gICAgaWYgKHNvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoX2EsIF9iKSA9PiAwXG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybSA9IHNvcnRlck5vcm1hbGl6ZTxUPihzb3J0ZXJzKS5tYXAoY3JlYXRlQ29tcGFyYXRvcilcbiAgICBpZiAobm9ybS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1bMF1cbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsID0gbm9ybS5wb3AoKSFcbiAgICByZXR1cm4gbm9ybS5yZWR1Y2VSaWdodDxTb3J0ZXJGbjxUPj4oXG4gICAgICAgIChuZXh0LCBjdXJyKSA9PiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgY29uc3QgciA9IGN1cnIoYSwgYilcbiAgICAgICAgICAgIHJldHVybiByID09PSAwID8gbmV4dChhLCBiKSA6IHJcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFxuICAgIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGFyYXRvcih7IHBhdGgsIGlzQXNjLCBlbXB0eUZpcnN0IH06IE5vcm1hbGl6ZWRFbnRyeSk6IFNvcnRlckZuIHtcbiAgICBjb25zdCBnZXR0ZXIgPSBwYXRoR2V0dGVyQ29tcGlsZShwYXRoKVxuICAgIGlmIChpc0FzYykge1xuICAgICAgICByZXR1cm4gKGEsIGIpID0+IGNvbXBhcmUoZ2V0dGVyKGEpLCBnZXR0ZXIoYiksIGVtcHR5Rmlyc3QpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBjb21wYXJlKGdldHRlcihhKSwgZ2V0dGVyKGIpLCAhZW1wdHlGaXJzdCkgKiAtMVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUoYTogYW55LCBiOiBhbnksIGVtcHR5Rmlyc3Q6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiQ09NUEFSRVwiLCBhLCBiKVxuICAgIGlmIChhID09IG51bGwgJiYgYiAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUZpcnN0ID09PSB0cnVlID8gLTEgOiAxXG4gICAgfSBlbHNlIGlmIChhICE9IG51bGwgJiYgYiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUZpcnN0ID09PSB0cnVlID8gMSA6IC0xXG4gICAgfSBlbHNlIGlmIChhID09IG51bGwgJiYgYiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSBlbHNlIGlmIChpc0VxdWFsKGEsIGIpKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgYiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gYSAtIGJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBiID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGFsID0gYS5sZW5ndGhcbiAgICAgICAgY29uc3QgYmwgPSBiLmxlbmd0aFxuICAgICAgICAvLyBpZiBib3RoIGxlbmd0aHMgaXMgMCB0aGUgY29kZSBleGVjdXRpb24gbm90IHJlYWNoIHRoYXQgcG9pbnQsIGJlY2F1c2UgYSA9PT0gYlxuICAgICAgICBpZiAoZW1wdHlGaXJzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIGNvbnN0IGFsID0gYS5sZW5ndGhcbiAgICAgICAgY29uc3QgYmwgPSBiLmxlbmd0aFxuICAgICAgICBjb25zdCBsID0gTWF0aC5taW4oYWwsIGJsKVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBjb21wYXJlKGFbaV0sIGJbaV0sIGVtcHR5Rmlyc3QpXG4gICAgICAgICAgICBpZiAocmVzICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsID09PSBibCkge1xuICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbXB0eUZpcnN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbCAtIGJsXG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpLmxvY2FsZUNvbXBhcmUoSlNPTi5zdHJpbmdpZnkoYikpXG4gICAgfVxuXG4gICAgcmV0dXJuIGEgPiBiID8gLTEgOiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZXJNZXJnZTxUIGV4dGVuZHMgTW9kZWw+KC4uLnNvcnRlcnM6IEFycmF5PFNvcnRlcjxUPiB8IHVuZGVmaW5lZCB8IG51bGw+KTogU29ydGVyPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVzdWx0OiBTb3J0ZXI8VD4gfCB1bmRlZmluZWRcblxuICAgIGZvciAoY29uc3Qgc29ydGVyIG9mIHNvcnRlcnMpIHtcbiAgICAgICAgaWYgKHNvcnRlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGVlcENsb25lKHNvcnRlcilcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNlbnRyeSBvZiBzb3J0ZXIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHNlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IChyZXN1bHQgYXMgYW55KS5maW5kKCh2YWx1ZTogYW55KSA9PiB2YWx1ZVtrXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgICA7KGV4aXN0aW5nIGFzIGFueSlba10gPSBkZWVwQ2xvbmUodilcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IFtrXTogZGVlcENsb25lKHYpIH0gYXMgYW55KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyRmluZDxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPiwgbmFtZTogc3RyaW5nKTogU29ydERpciB8IFNvcnREaXJFeHRyYSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc29ydGVyID0gc29ydGVycy5maW5kKHYgPT4gdltuYW1lXSAhPSBudWxsKVxuICAgIGlmIChzb3J0ZXIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc29ydGVyW25hbWVdXG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcblxufVxuIl19
@@ -1,4 +1,5 @@
1
- import { sorterMerge } from "../../query";
1
+ import { map } from "rxjs";
2
+ import { sorterMerge, sorterFind } from "../../query";
2
3
  import { mergedProperty, Property, PropertyCombined } from "./abstract";
3
4
  export class SorterProperty extends Property {
4
5
  update(other) {
@@ -10,7 +11,33 @@ export class SorterCombined extends PropertyCombined {
10
11
  super(...arguments);
11
12
  this.normal = new SorterProperty(undefined);
12
13
  this.forced = new SorterProperty(undefined);
14
+ // TODO: normalized sorter
13
15
  this.merged$ = mergedProperty(sorterMerge, this.normal, this.forced);
14
16
  }
17
+ of(name) {
18
+ return this.merged$.pipe(map((sorters) => sorterFind(sorters, name)));
19
+ }
20
+ directionOf(name) {
21
+ return this.of(name).pipe(map(value => {
22
+ if (value == null) {
23
+ return undefined;
24
+ }
25
+ else if (typeof value === "string") {
26
+ return value;
27
+ }
28
+ else {
29
+ return value.dir;
30
+ }
31
+ }));
32
+ }
33
+ isSet(name) {
34
+ return this.directionOf(name).pipe(map(v => v != null));
35
+ }
36
+ isAsc(name) {
37
+ return this.directionOf(name).pipe(map(v => v === "asc" /* SortDirection.Asc */));
38
+ }
39
+ isDesc(name) {
40
+ return this.directionOf(name).pipe(map(v => v === "desc" /* SortDirection.Desc */));
41
+ }
15
42
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdkUsTUFBTSxPQUFPLGNBQWtCLFNBQVEsUUFBVztJQUNyQyxNQUFNLENBQUMsS0FBUTtRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBRSxJQUF1QixDQUFDLEtBQUssRUFBRSxLQUFZLENBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNyRixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sY0FBa0IsU0FBUSxnQkFBbUI7SUFBMUQ7O1FBQ2EsV0FBTSxHQUFHLElBQUksY0FBYyxDQUFJLFNBQVMsQ0FBQyxDQUFBO1FBQ3pDLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxZQUFPLEdBQTRDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckgsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgc29ydGVyTWVyZ2UgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuXG5leHBvcnQgY2xhc3MgU29ydGVyUHJvcGVydHk8VD4gZXh0ZW5kcyBQcm9wZXJ0eTxUPiB7XG4gICAgb3ZlcnJpZGUgdXBkYXRlKG90aGVyOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KHNvcnRlck1lcmdlKCh0aGlzIGFzIHsgdmFsdWU6IGFueSB9KS52YWx1ZSwgb3RoZXIgYXMgYW55KSBhcyBhbnksIGZhbHNlKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNvcnRlckNvbWJpbmVkPFQ+IGV4dGVuZHMgUHJvcGVydHlDb21iaW5lZDxUPiB7XG4gICAgb3ZlcnJpZGUgbm9ybWFsID0gbmV3IFNvcnRlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICBvdmVycmlkZSBmb3JjZWQgPSBuZXcgU29ydGVyUHJvcGVydHk8VD4odW5kZWZpbmVkKVxuICAgIG92ZXJyaWRlIG1lcmdlZCQ6IE9ic2VydmFibGU8RGVlcFJlYWRvbmx5PFQ+IHwgdW5kZWZpbmVkPiA9IG1lcmdlZFByb3BlcnR5KHNvcnRlck1lcmdlLCB0aGlzLm5vcm1hbCwgdGhpcy5mb3JjZWQpXG59XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFJdEMsT0FBTyxFQUFFLFdBQVcsRUFBaUIsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3ZFLE1BQU0sT0FBTyxjQUFrQixTQUFRLFFBQVc7SUFDckMsTUFBTSxDQUFDLEtBQVE7UUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsSUFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBWSxDQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckYsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGNBQWdDLFNBQVEsZ0JBQW1CO0lBQXhFOztRQUNhLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxXQUFNLEdBQUcsSUFBSSxjQUFjLENBQUksU0FBUyxDQUFDLENBQUE7UUFDbEQsMEJBQTBCO1FBQ2pCLFlBQU8sR0FBNEMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQStCckgsQ0FBQztJQTdCRyxFQUFFLENBQUMsSUFBWTtRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNuRCxDQUFBO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoQixPQUFPLFNBQVMsQ0FBQTtZQUNwQixDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sS0FBSyxDQUFBO1lBQ2hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUE7WUFDcEIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxrQ0FBc0IsQ0FBQyxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLG9DQUF1QixDQUFDLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IERlZXBSZWFkb25seSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IHNvcnRlck1lcmdlLCBTb3J0RGlyZWN0aW9uLCBzb3J0ZXJGaW5kIH0gZnJvbSBcIi4uLy4uL3F1ZXJ5XCJcbmltcG9ydCB7IG1lcmdlZFByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlDb21iaW5lZCB9IGZyb20gXCIuL2Fic3RyYWN0XCJcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVsXCJcblxuZXhwb3J0IGNsYXNzIFNvcnRlclByb3BlcnR5PFQ+IGV4dGVuZHMgUHJvcGVydHk8VD4ge1xuICAgIG92ZXJyaWRlIHVwZGF0ZShvdGhlcjogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldChzb3J0ZXJNZXJnZSgodGhpcyBhcyB7IHZhbHVlOiBhbnkgfSkudmFsdWUsIG90aGVyIGFzIGFueSkgYXMgYW55LCBmYWxzZSlcbiAgICB9XG59XG5cblxudHlwZSBPZlR5cGVzPFQgZXh0ZW5kcyBNb2RlbD4gPSBSZXR1cm5UeXBlPHR5cGVvZiBzb3J0ZXJGaW5kPFQ+PlxuXG5leHBvcnQgY2xhc3MgU29ydGVyQ29tYmluZWQ8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFByb3BlcnR5Q29tYmluZWQ8VD4ge1xuICAgIG92ZXJyaWRlIG5vcm1hbCA9IG5ldyBTb3J0ZXJQcm9wZXJ0eTxUPih1bmRlZmluZWQpXG4gICAgb3ZlcnJpZGUgZm9yY2VkID0gbmV3IFNvcnRlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICAvLyBUT0RPOiBub3JtYWxpemVkIHNvcnRlclxuICAgIG92ZXJyaWRlIG1lcmdlZCQ6IE9ic2VydmFibGU8RGVlcFJlYWRvbmx5PFQ+IHwgdW5kZWZpbmVkPiA9IG1lcmdlZFByb3BlcnR5KHNvcnRlck1lcmdlLCB0aGlzLm5vcm1hbCwgdGhpcy5mb3JjZWQpXG5cbiAgICBvZihuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE9mVHlwZXM8VD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyZ2VkJC5waXBlKFxuICAgICAgICAgICAgbWFwKChzb3J0ZXJzOiBhbnkpID0+IHNvcnRlckZpbmQoc29ydGVycywgbmFtZSkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBkaXJlY3Rpb25PZihuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2YobmFtZSkucGlwZShtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZGlyXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgIH1cblxuICAgIGlzU2V0KG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb25PZihuYW1lKS5waXBlKG1hcCh2ID0+IHYgIT0gbnVsbCkpXG4gICAgfVxuXG4gICAgaXNBc2MobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbk9mKG5hbWUpLnBpcGUobWFwKHYgPT4gdiA9PT0gU29ydERpcmVjdGlvbi5Bc2MpKVxuICAgIH1cblxuICAgIGlzRGVzYyhuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uT2YobmFtZSkucGlwZShtYXAodiA9PiB2ID09PSBTb3J0RGlyZWN0aW9uLkRlc2MpKVxuICAgIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { DataSource as CdkDataSource } from "@angular/cdk/collections";
2
2
  import { Directive, Input, Optional } from "@angular/core";
3
- import { toSignal } from "@angular/core/rxjs-interop";
3
+ import { takeUntilDestroyed, toSignal } from "@angular/core/rxjs-interop";
4
4
  import { combineLatest, finalize, of, ReplaySubject, share, Subject, Subscription, switchMap, takeUntil, tap, throwError } from "rxjs";
5
5
  import { Busy } from "@ngutil/common";
6
6
  import { DataProvider } from "../provider/provider";
@@ -38,7 +38,7 @@ import * as i1 from "@ngutil/common";
38
38
  * ```
39
39
  */
40
40
  export class DataSourceProxy extends CdkDataSource {
41
- set source(value) {
41
+ set value(value) {
42
42
  this.#valueSub?.unsubscribe();
43
43
  this.#valueSub = coerceDataSource(value)
44
44
  .pipe(tap(v => {
@@ -46,14 +46,18 @@ export class DataSourceProxy extends CdkDataSource {
46
46
  throw new Error("Missing DataSource");
47
47
  }
48
48
  }))
49
- .subscribe(this.source$);
49
+ .subscribe(this.#value);
50
+ }
51
+ get value() {
52
+ return this.#valueSig();
50
53
  }
51
54
  #valueSub;
55
+ #value;
56
+ #valueSig;
52
57
  set filter(value) {
53
58
  this.#filter.next(value);
54
59
  }
55
60
  #filter;
56
- // TODO: maybe mergedFilter$ = this.value$.pipe(switchMap(value => value.filter.merged$))
57
61
  set sorter(value) {
58
62
  this.#sorter.next(value);
59
63
  }
@@ -69,9 +73,11 @@ export class DataSourceProxy extends CdkDataSource {
69
73
  #subs;
70
74
  constructor(busy) {
71
75
  super();
72
- this.source$ = new ReplaySubject(1);
73
- this.items$ = this.source$.pipe(switchMap(value => value.items$), share());
74
- this.busy$ = this.source$.pipe(switchMap(value => value.busy$), share());
76
+ this.#value = new ReplaySubject(1);
77
+ this.value$ = this.#value.pipe(takeUntilDestroyed());
78
+ this.#valueSig = toSignal(this.value$);
79
+ this.items$ = this.value$.pipe(switchMap(value => value.items$), share());
80
+ this.busy$ = this.value$.pipe(switchMap(value => value.busy$), share());
75
81
  this.isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false });
76
82
  this.#filter = new ReplaySubject(1);
77
83
  this.#sorter = new ReplaySubject(1);
@@ -82,16 +88,16 @@ export class DataSourceProxy extends CdkDataSource {
82
88
  if (busy != null) {
83
89
  this.#subs.add(busy.connect(this.busy$).subscribe());
84
90
  }
85
- this.#subs.add(combineLatest({ src: this.source$, filter: this.#filter }).subscribe(({ src, filter }) => {
91
+ this.#subs.add(combineLatest({ src: this.value$, filter: this.#filter }).subscribe(({ src, filter }) => {
86
92
  src.filter.forced.set(filter);
87
93
  }));
88
- this.#subs.add(combineLatest({ src: this.source$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {
94
+ this.#subs.add(combineLatest({ src: this.value$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {
89
95
  src.sorter.forced.set(sorter);
90
96
  }));
91
- this.#subs.add(combineLatest({ src: this.source$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {
97
+ this.#subs.add(combineLatest({ src: this.value$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {
92
98
  src.grouper.forced.set(grouper);
93
99
  }));
94
- this.#subs.add(combineLatest({ src: this.source$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {
100
+ this.#subs.add(combineLatest({ src: this.value$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {
95
101
  src.slimer.forced.set(slimer);
96
102
  }));
97
103
  }
@@ -100,7 +106,7 @@ export class DataSourceProxy extends CdkDataSource {
100
106
  const until = new Subject();
101
107
  this.#cvSubs.get(collectionViewer)?.next();
102
108
  this.#cvSubs.set(collectionViewer, until);
103
- return this.source$.pipe(switchMap(value => value.connect(collectionViewer)), takeUntil(until), finalize(() => this.#cvSubs.delete(collectionViewer)));
109
+ return this.value$.pipe(switchMap(value => value.connect(collectionViewer)), takeUntil(until), finalize(() => this.#cvSubs.delete(collectionViewer)));
104
110
  }
105
111
  disconnect(collectionViewer) {
106
112
  this.#cvSubs.get(collectionViewer)?.next();
@@ -112,7 +118,7 @@ export class DataSourceProxy extends CdkDataSource {
112
118
  this.#subs.unsubscribe();
113
119
  }
114
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, deps: [{ token: i1.Busy, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
115
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { source: ["nuDataSource", "source"], filter: "filter", sorter: "sorter", grouper: "grouper", slimer: "slimer" }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
121
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"], filter: "filter", sorter: "sorter", grouper: "grouper", slimer: "slimer" }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
116
122
  }
117
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, decorators: [{
118
124
  type: Directive,
@@ -123,7 +129,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
123
129
  }]
124
130
  }], ctorParameters: () => [{ type: i1.Busy, decorators: [{
125
131
  type: Optional
126
- }] }], propDecorators: { source: [{
132
+ }] }], propDecorators: { value: [{
127
133
  type: Input,
128
134
  args: [{ required: true, alias: "nuDataSource" }]
129
135
  }], filter: [{
@@ -137,7 +143,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
137
143
  }] } });
138
144
  function coerceDataSource(value) {
139
145
  if (value instanceof DataSourceProxy) {
140
- return value.source$;
146
+ return value.value$;
141
147
  }
142
148
  else if (value instanceof DataSource) {
143
149
  return of(value);
@@ -149,4 +155,4 @@ function coerceDataSource(value) {
149
155
  return throwError(() => new Error("Invalid DataSource value"));
150
156
  }
151
157
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXJELE9BQU8sRUFDSCxhQUFhLEVBQ2IsUUFBUSxFQUVSLEVBQUUsRUFDRixhQUFhLEVBQ2IsS0FBSyxFQUNMLE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLElBQUksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7O0FBSXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQU1ILE1BQU0sT0FBTyxlQUNULFNBQVEsYUFBNEI7SUFHcEMsSUFDSSxNQUFNLENBQUMsS0FBeUI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFJLEtBQUssQ0FBQzthQUN0QyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1lBQ3pDLENBQUM7UUFD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LE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BCLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCJcblxuaW1wb3J0IHtcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGZpbmFsaXplLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcCxcbiAgICB0aHJvd0Vycm9yXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgQnVzeSwgQ29ubmVjdFByb3RvY29sIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgRGF0YVByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyL3Byb3ZpZGVyXCJcbmltcG9ydCB7IEZpbHRlciwgR3JvdXBlciwgU2xpbWVyLCBTb3J0ZXIgfSBmcm9tIFwiLi4vcXVlcnlcIlxuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gXCIuL3NvdXJjZVwiXG5cbmV4cG9ydCB0eXBlIERhdGFTb3VyY2VJbnB1dDxUIGV4dGVuZHMgTW9kZWw+ID0gYW55XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDx0YWJsZSBbbnVEYXRhU291cmNlXT1cIi4uLlwiIFtmaWx0ZXJdPVwie2lzQWN0aXZlOiB0cnVlfVwiIFtzb3J0ZXJdPVwiW3tuYW1lOiAnYXNjJ31dXCI+PC90YWJsZT5cbiAqIGBgYFxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgdGVtcGxhdGU6IGA8dGFibGUgW251RGF0YVNvdXJjZV09XCJ1c2VycyRcIj48L3RhYmxlPmBcbiAqIH0pXG4gKiBjbGFzcyBVc2VyVGFibGUge1xuICogICByZWFkb25seSB1c2VyU2VydmljZSA9IGluamVjdChVc2VyU2VydmljZSlcbiAqICAgcmVhZG9ubHkgdXNlcnMkID0gVXNlclNlcnZpY2UuYWxsKClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYHRzXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6IFwidGFibGUubXktdGFibGVcIixcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjUwXCIgY2xhc3M9XCJleGFtcGxlLXZpZXdwb3J0XCI+XG4gKiAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgZGF0YVNvdXJjZVwiIGNsYXNzPVwiZXhhbXBsZS1pdGVtXCI+e3tpdGVtfX08L2Rpdj5cbiAqICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gKiAgIGBcbiAqIH0pXG4gKiBjbGFzcyBUYWJsZUNvbXBvbmVudCB7XG4gKiAgIHJlYWRvbmx5IGRhdGFTb3VyY2UgPSBpbmplY3QoRGF0YVNvdXJjZVByb3h5KVxuICogfVxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1cIixcbiAgICBleHBvcnRBczogXCJudURhdGFTb3VyY2VcIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlUHJveHk8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+XG4gICAgZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbm5lY3RQcm90b2NvbFxue1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogXCJudURhdGFTb3VyY2VcIiB9KVxuICAgIHNldCBzb3VyY2UodmFsdWU6IERhdGFTb3VyY2VJbnB1dDxUPikge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IGNvZXJjZURhdGFTb3VyY2U8VD4odmFsdWUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAodiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRGF0YVNvdXJjZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5zb3VyY2UkKVxuICAgIH1cbiAgICAjdmFsdWVTdWI/OiBTdWJzY3JpcHRpb25cbiAgICByZWFkb25seSBzb3VyY2UkID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YVNvdXJjZTxUPj4oMSlcblxuICAgIHJlYWRvbmx5IGl0ZW1zJCA9IHRoaXMuc291cmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuaXRlbXMkKSxcbiAgICAgICAgc2hhcmUoKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGJ1c3kkID0gdGhpcy5zb3VyY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5idXN5JCksXG4gICAgICAgIHNoYXJlKClcbiAgICApXG4gICAgcmVhZG9ubHkgaXNCdXN5ID0gdG9TaWduYWwodGhpcy5idXN5JCwgeyByZWplY3RFcnJvcnM6IHRydWUsIGluaXRpYWxWYWx1ZTogZmFsc2UgfSlcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZpbHRlcih2YWx1ZTogRmlsdGVyPFQ+KSB7XG4gICAgICAgIHRoaXMuI2ZpbHRlci5uZXh0KHZhbHVlKVxuICAgIH1cbiAgICByZWFkb25seSAjZmlsdGVyID0gbmV3IFJlcGxheVN1YmplY3Q8RmlsdGVyPFQ+PigxKVxuICAgIC8vIFRPRE86IG1heWJlIG1lcmdlZEZpbHRlciQgPSB0aGlzLnZhbHVlJC5waXBlKHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5maWx0ZXIubWVyZ2VkJCkpXG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzb3J0ZXIodmFsdWU6IFNvcnRlcjxUPikge1xuICAgICAgICB0aGlzLiNzb3J0ZXIubmV4dCh2YWx1ZSlcbiAgICB9XG4gICAgcmVhZG9ubHkgI3NvcnRlciA9IG5ldyBSZXBsYXlTdWJqZWN0PFNvcnRlcjxUPj4oMSlcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGdyb3VwZXIodmFsdWU6IEdyb3VwZXI8VD4pIHtcbiAgICAgICAgdGhpcy4jZ3JvdXBlci5uZXh0KHZhbHVlKVxuICAgIH1cbiAgICByZWFkb25seSAjZ3JvdXBlciA9IG5ldyBSZXBsYXlTdWJqZWN0PEdyb3VwZXI8VD4+KDEpXG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzbGltZXIodmFsdWU6IFNsaW1lcjxUPikge1xuICAgICAgICB0aGlzLiNzbGltZXIubmV4dCh2YWx1ZSlcbiAgICB9XG4gICAgcmVhZG9ubHkgI3NsaW1lciA9IG5ldyBSZXBsYXlTdWJqZWN0PFNsaW1lcjxUPj4oMSlcblxuICAgIHJlYWRvbmx5ICNzdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpXG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBidXN5PzogQnVzeTxhbnk+KSB7XG4gICAgICAgIHN1cGVyKClcblxuICAgICAgICBpZiAoYnVzeSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNzdWJzLmFkZChidXN5LmNvbm5lY3QodGhpcy5idXN5JCkuc3Vic2NyaWJlKCkpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNzdWJzLmFkZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoeyBzcmM6IHRoaXMuc291cmNlJCwgZmlsdGVyOiB0aGlzLiNmaWx0ZXIgfSkuc3Vic2NyaWJlKCh7IHNyYywgZmlsdGVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzcmMuZmlsdGVyLmZvcmNlZC5zZXQoZmlsdGVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuI3N1YnMuYWRkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7IHNyYzogdGhpcy5zb3VyY2UkLCBzb3J0ZXI6IHRoaXMuI3NvcnRlciB9KS5zdWJzY3JpYmUoKHsgc3JjLCBzb3J0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHNyYy5zb3J0ZXIuZm9yY2VkLnNldChzb3J0ZXIpXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy4jc3Vicy5hZGQoXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KHsgc3JjOiB0aGlzLnNvdXJjZSQsIGdyb3VwZXI6IHRoaXMuI2dyb3VwZXIgfSkuc3Vic2NyaWJlKCh7IHNyYywgZ3JvdXBlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3JjLmdyb3VwZXIuZm9yY2VkLnNldChncm91cGVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuI3N1YnMuYWRkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7IHNyYzogdGhpcy5zb3VyY2UkLCBzbGltZXI6IHRoaXMuI3NsaW1lciB9KS5zdWJzY3JpYmUoKHsgc3JjLCBzbGltZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHNyYy5zbGltZXIuZm9yY2VkLnNldChzbGltZXIpXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2UkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodW50aWwpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLiNzdWJzLnVuc3Vic2NyaWJlKClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvZXJjZURhdGFTb3VyY2U8VCBleHRlbmRzIE1vZGVsPih2YWx1ZTogRGF0YVNvdXJjZUlucHV0PFQ+KTogT2JzZXJ2YWJsZTxEYXRhU291cmNlPFQ+PiB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVNvdXJjZVByb3h5KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zb3VyY2UkXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlLnRvRGF0YVNvdXJjZSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIkludmFsaWQgRGF0YVNvdXJjZSB2YWx1ZVwiKSlcbiAgICB9XG59XG4iXX0=
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQVMsTUFBTSxlQUFlLENBQUE7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXpFLE9BQU8sRUFDSCxhQUFhLEVBQ2IsUUFBUSxFQUVSLEVBQUUsRUFDRixhQUFhLEVBQ2IsS0FBSyxFQUNMLE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLElBQUksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7O0FBSXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQU1ILE1BQU0sT0FBTyxlQUNULFNBQVEsYUFBNEI7SUFHcEMsSUFDSSxLQUFLLENBQUMsS0FBeUI7UUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFJLEtBQUssQ0FBQzthQUN0QyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1lB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T0YsTUFBTTtzQkFEVCxLQUFLO2dCQU9GLE9BQU87c0JBRFYsS0FBSztnQkFPRixNQUFNO3NCQURULEtBQUs7O0FBbUVWLFNBQVMsZ0JBQWdCLENBQWtCLEtBQXlCO0lBQ2hFLElBQUksS0FBSyxZQUFZLGVBQWUsRUFBRSxDQUFDO1FBQ25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQTtJQUN2QixDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDckMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEIsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSBhcyBDZGtEYXRhU291cmNlLCBDb2xsZWN0aW9uVmlld2VyIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiXG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBpbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQge1xuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZmluYWxpemUsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBSZXBsYXlTdWJqZWN0LFxuICAgIHNoYXJlLFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaXB0aW9uLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlVW50aWwsXG4gICAgdGFwLFxuICAgIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBCdXN5LCBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIvcHJvdmlkZXJcIlxuaW1wb3J0IHsgRmlsdGVyLCBHcm91cGVyLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4vc291cmNlXCJcblxuZXhwb3J0IHR5cGUgRGF0YVNvdXJjZUlucHV0PFQgZXh0ZW5kcyBNb2RlbD4gPSBhbnlcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHRhYmxlIFtudURhdGFTb3VyY2VdPVwiLi4uXCIgW2ZpbHRlcl09XCJ7aXNBY3RpdmU6IHRydWV9XCIgW3NvcnRlcl09XCJbe25hbWU6ICdhc2MnfV1cIj48L3RhYmxlPlxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICB0ZW1wbGF0ZTogYDx0YWJsZSBbbnVEYXRhU291cmNlXT1cInVzZXJzJFwiPjwvdGFibGU+YFxuICogfSlcbiAqIGNsYXNzIFVzZXJUYWJsZSB7XG4gKiAgIHJlYWRvbmx5IHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKVxuICogICByZWFkb25seSB1c2VycyQgPSBVc2VyU2VydmljZS5hbGwoKVxuICogfVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogXCJ0YWJsZS5teS10YWJsZVwiLFxuICogICB0ZW1wbGF0ZTogYFxuICogICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiNTBcIiBjbGFzcz1cImV4YW1wbGUtdmlld3BvcnRcIj5cbiAqICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBkYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLWl0ZW1cIj57e2l0ZW19fTwvZGl2PlxuICogICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAqICAgYFxuICogfSlcbiAqIGNsYXNzIFRhYmxlQ29tcG9uZW50IHtcbiAqICAgcmVhZG9ubHkgZGF0YVNvdXJjZSA9IGluamVjdChEYXRhU291cmNlUHJveHkpXG4gKiB9XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVwiLFxuICAgIGV4cG9ydEFzOiBcIm51RGF0YVNvdXJjZVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eTxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD5cbiAgICBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD5cbiAgICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQ29ubmVjdFByb3RvY29sIHtcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogXCJudURhdGFTb3VyY2VcIiB9KVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRGF0YVNvdXJjZUlucHV0PFQ+KSB7XG4gICAgICAgIHRoaXMuI3ZhbHVlU3ViPy51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMuI3ZhbHVlU3ViID0gY29lcmNlRGF0YVNvdXJjZTxUPih2YWx1ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEYXRhU291cmNlXCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLiN2YWx1ZSlcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogRGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZVNpZygpIVxuICAgIH1cblxuICAgICN2YWx1ZVN1Yj86IFN1YnNjcmlwdGlvblxuICAgIHJlYWRvbmx5ICN2YWx1ZSA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGFTb3VyY2U8VD4+KDEpXG4gICAgcmVhZG9ubHkgdmFsdWUkID0gdGhpcy4jdmFsdWUucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICByZWFkb25seSAjdmFsdWVTaWcgPSB0b1NpZ25hbCh0aGlzLnZhbHVlJClcblxuICAgIHJlYWRvbmx5IGl0ZW1zJCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pdGVtcyQpLFxuICAgICAgICBzaGFyZSgpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgYnVzeSQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuYnVzeSQpLFxuICAgICAgICBzaGFyZSgpXG4gICAgKVxuICAgIHJlYWRvbmx5IGlzQnVzeSA9IHRvU2lnbmFsKHRoaXMuYnVzeSQsIHsgcmVqZWN0RXJyb3JzOiB0cnVlLCBpbml0aWFsVmFsdWU6IGZhbHNlIH0pXG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBmaWx0ZXIodmFsdWU6IEZpbHRlcjxUPikge1xuICAgICAgICB0aGlzLiNmaWx0ZXIubmV4dCh2YWx1ZSlcbiAgICB9XG4gICAgcmVhZG9ubHkgI2ZpbHRlciA9IG5ldyBSZXBsYXlTdWJqZWN0PEZpbHRlcjxUPj4oMSlcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNvcnRlcih2YWx1ZTogU29ydGVyPFQ+KSB7XG4gICAgICAgIHRoaXMuI3NvcnRlci5uZXh0KHZhbHVlKVxuICAgIH1cbiAgICByZWFkb25seSAjc29ydGVyID0gbmV3IFJlcGxheVN1YmplY3Q8U29ydGVyPFQ+PigxKVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZ3JvdXBlcih2YWx1ZTogR3JvdXBlcjxUPikge1xuICAgICAgICB0aGlzLiNncm91cGVyLm5leHQodmFsdWUpXG4gICAgfVxuICAgIHJlYWRvbmx5ICNncm91cGVyID0gbmV3IFJlcGxheVN1YmplY3Q8R3JvdXBlcjxUPj4oMSlcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNsaW1lcih2YWx1ZTogU2xpbWVyPFQ+KSB7XG4gICAgICAgIHRoaXMuI3NsaW1lci5uZXh0KHZhbHVlKVxuICAgIH1cbiAgICByZWFkb25seSAjc2xpbWVyID0gbmV3IFJlcGxheVN1YmplY3Q8U2xpbWVyPFQ+PigxKVxuXG4gICAgcmVhZG9ubHkgI3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKClcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIGJ1c3k/OiBCdXN5PGFueT4pIHtcbiAgICAgICAgc3VwZXIoKVxuXG4gICAgICAgIGlmIChidXN5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI3N1YnMuYWRkKGJ1c3kuY29ubmVjdCh0aGlzLmJ1c3kkKS5zdWJzY3JpYmUoKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3N1YnMuYWRkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7IHNyYzogdGhpcy52YWx1ZSQsIGZpbHRlcjogdGhpcy4jZmlsdGVyIH0pLnN1YnNjcmliZSgoeyBzcmMsIGZpbHRlciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3JjLmZpbHRlci5mb3JjZWQuc2V0KGZpbHRlcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLiNzdWJzLmFkZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoeyBzcmM6IHRoaXMudmFsdWUkLCBzb3J0ZXI6IHRoaXMuI3NvcnRlciB9KS5zdWJzY3JpYmUoKHsgc3JjLCBzb3J0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHNyYy5zb3J0ZXIuZm9yY2VkLnNldChzb3J0ZXIpXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy4jc3Vicy5hZGQoXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KHsgc3JjOiB0aGlzLnZhbHVlJCwgZ3JvdXBlcjogdGhpcy4jZ3JvdXBlciB9KS5zdWJzY3JpYmUoKHsgc3JjLCBncm91cGVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzcmMuZ3JvdXBlci5mb3JjZWQuc2V0KGdyb3VwZXIpXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy4jc3Vicy5hZGQoXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KHsgc3JjOiB0aGlzLnZhbHVlJCwgc2xpbWVyOiB0aGlzLiNzbGltZXIgfSkuc3Vic2NyaWJlKCh7IHNyYywgc2xpbWVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzcmMuc2xpbWVyLmZvcmNlZC5zZXQoc2xpbWVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodW50aWwpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLiNzdWJzLnVuc3Vic2NyaWJlKClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvZXJjZURhdGFTb3VyY2U8VCBleHRlbmRzIE1vZGVsPih2YWx1ZTogRGF0YVNvdXJjZUlucHV0PFQ+KTogT2JzZXJ2YWJsZTxEYXRhU291cmNlPFQ+PiB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVNvdXJjZVByb3h5KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSRcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVNvdXJjZSkge1xuICAgICAgICByZXR1cm4gb2YodmFsdWUpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFQcm92aWRlcikge1xuICAgICAgICByZXR1cm4gb2YodmFsdWUudG9EYXRhU291cmNlKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiSW52YWxpZCBEYXRhU291cmNlIHZhbHVlXCIpKVxuICAgIH1cbn1cbiJdfQ==
@@ -5,7 +5,7 @@ import { BehaviorSubject, map, combineLatest, take, of, shareReplay, ReplaySubje
5
5
  import { DataSource as DataSource$1 } from '@angular/cdk/collections';
6
6
  import * as i0 from '@angular/core';
7
7
  import { Directive, Optional, Input } from '@angular/core';
8
- import { toSignal } from '@angular/core/rxjs-interop';
8
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
9
9
 
10
10
  function pathGetterCompile(path) {
11
11
  if (!path || path.length === 0) {
@@ -538,6 +538,13 @@ function sorterMerge(...sorters) {
538
538
  }
539
539
  return result;
540
540
  }
541
+ function sorterFind(sorters, name) {
542
+ const sorter = sorters.find(v => v[name] != null);
543
+ if (sorter != null) {
544
+ return sorter[name];
545
+ }
546
+ return undefined;
547
+ }
541
548
 
542
549
  function slimBy(slimer) { }
543
550
  function slimerNormalize(slimer) { }
@@ -935,8 +942,34 @@ class SorterCombined extends PropertyCombined {
935
942
  super(...arguments);
936
943
  this.normal = new SorterProperty(undefined);
937
944
  this.forced = new SorterProperty(undefined);
945
+ // TODO: normalized sorter
938
946
  this.merged$ = mergedProperty(sorterMerge, this.normal, this.forced);
939
947
  }
948
+ of(name) {
949
+ return this.merged$.pipe(map((sorters) => sorterFind(sorters, name)));
950
+ }
951
+ directionOf(name) {
952
+ return this.of(name).pipe(map(value => {
953
+ if (value == null) {
954
+ return undefined;
955
+ }
956
+ else if (typeof value === "string") {
957
+ return value;
958
+ }
959
+ else {
960
+ return value.dir;
961
+ }
962
+ }));
963
+ }
964
+ isSet(name) {
965
+ return this.directionOf(name).pipe(map(v => v != null));
966
+ }
967
+ isAsc(name) {
968
+ return this.directionOf(name).pipe(map(v => v === "asc" /* SortDirection.Asc */));
969
+ }
970
+ isDesc(name) {
971
+ return this.directionOf(name).pipe(map(v => v === "desc" /* SortDirection.Desc */));
972
+ }
940
973
  }
941
974
 
942
975
  class SlimerProperty extends Property {
@@ -1101,7 +1134,7 @@ class DataSource extends DataSource$1 {
1101
1134
  * ```
1102
1135
  */
1103
1136
  class DataSourceProxy extends DataSource$1 {
1104
- set source(value) {
1137
+ set value(value) {
1105
1138
  this.#valueSub?.unsubscribe();
1106
1139
  this.#valueSub = coerceDataSource(value)
1107
1140
  .pipe(tap(v => {
@@ -1109,14 +1142,18 @@ class DataSourceProxy extends DataSource$1 {
1109
1142
  throw new Error("Missing DataSource");
1110
1143
  }
1111
1144
  }))
1112
- .subscribe(this.source$);
1145
+ .subscribe(this.#value);
1146
+ }
1147
+ get value() {
1148
+ return this.#valueSig();
1113
1149
  }
1114
1150
  #valueSub;
1151
+ #value;
1152
+ #valueSig;
1115
1153
  set filter(value) {
1116
1154
  this.#filter.next(value);
1117
1155
  }
1118
1156
  #filter;
1119
- // TODO: maybe mergedFilter$ = this.value$.pipe(switchMap(value => value.filter.merged$))
1120
1157
  set sorter(value) {
1121
1158
  this.#sorter.next(value);
1122
1159
  }
@@ -1132,9 +1169,11 @@ class DataSourceProxy extends DataSource$1 {
1132
1169
  #subs;
1133
1170
  constructor(busy) {
1134
1171
  super();
1135
- this.source$ = new ReplaySubject(1);
1136
- this.items$ = this.source$.pipe(switchMap(value => value.items$), share());
1137
- this.busy$ = this.source$.pipe(switchMap(value => value.busy$), share());
1172
+ this.#value = new ReplaySubject(1);
1173
+ this.value$ = this.#value.pipe(takeUntilDestroyed());
1174
+ this.#valueSig = toSignal(this.value$);
1175
+ this.items$ = this.value$.pipe(switchMap(value => value.items$), share());
1176
+ this.busy$ = this.value$.pipe(switchMap(value => value.busy$), share());
1138
1177
  this.isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false });
1139
1178
  this.#filter = new ReplaySubject(1);
1140
1179
  this.#sorter = new ReplaySubject(1);
@@ -1145,16 +1184,16 @@ class DataSourceProxy extends DataSource$1 {
1145
1184
  if (busy != null) {
1146
1185
  this.#subs.add(busy.connect(this.busy$).subscribe());
1147
1186
  }
1148
- this.#subs.add(combineLatest({ src: this.source$, filter: this.#filter }).subscribe(({ src, filter }) => {
1187
+ this.#subs.add(combineLatest({ src: this.value$, filter: this.#filter }).subscribe(({ src, filter }) => {
1149
1188
  src.filter.forced.set(filter);
1150
1189
  }));
1151
- this.#subs.add(combineLatest({ src: this.source$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {
1190
+ this.#subs.add(combineLatest({ src: this.value$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {
1152
1191
  src.sorter.forced.set(sorter);
1153
1192
  }));
1154
- this.#subs.add(combineLatest({ src: this.source$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {
1193
+ this.#subs.add(combineLatest({ src: this.value$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {
1155
1194
  src.grouper.forced.set(grouper);
1156
1195
  }));
1157
- this.#subs.add(combineLatest({ src: this.source$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {
1196
+ this.#subs.add(combineLatest({ src: this.value$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {
1158
1197
  src.slimer.forced.set(slimer);
1159
1198
  }));
1160
1199
  }
@@ -1163,7 +1202,7 @@ class DataSourceProxy extends DataSource$1 {
1163
1202
  const until = new Subject();
1164
1203
  this.#cvSubs.get(collectionViewer)?.next();
1165
1204
  this.#cvSubs.set(collectionViewer, until);
1166
- return this.source$.pipe(switchMap(value => value.connect(collectionViewer)), takeUntil(until), finalize(() => this.#cvSubs.delete(collectionViewer)));
1205
+ return this.value$.pipe(switchMap(value => value.connect(collectionViewer)), takeUntil(until), finalize(() => this.#cvSubs.delete(collectionViewer)));
1167
1206
  }
1168
1207
  disconnect(collectionViewer) {
1169
1208
  this.#cvSubs.get(collectionViewer)?.next();
@@ -1175,7 +1214,7 @@ class DataSourceProxy extends DataSource$1 {
1175
1214
  this.#subs.unsubscribe();
1176
1215
  }
1177
1216
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, deps: [{ token: i1.Busy, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1178
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { source: ["nuDataSource", "source"], filter: "filter", sorter: "sorter", grouper: "grouper", slimer: "slimer" }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
1217
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"], filter: "filter", sorter: "sorter", grouper: "grouper", slimer: "slimer" }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
1179
1218
  }
1180
1219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxy, decorators: [{
1181
1220
  type: Directive,
@@ -1186,7 +1225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
1186
1225
  }]
1187
1226
  }], ctorParameters: () => [{ type: i1.Busy, decorators: [{
1188
1227
  type: Optional
1189
- }] }], propDecorators: { source: [{
1228
+ }] }], propDecorators: { value: [{
1190
1229
  type: Input,
1191
1230
  args: [{ required: true, alias: "nuDataSource" }]
1192
1231
  }], filter: [{
@@ -1200,7 +1239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
1200
1239
  }] } });
1201
1240
  function coerceDataSource(value) {
1202
1241
  if (value instanceof DataSourceProxy) {
1203
- return value.source$;
1242
+ return value.value$;
1204
1243
  }
1205
1244
  else if (value instanceof DataSource) {
1206
1245
  return of(value);
@@ -1271,5 +1310,5 @@ class ObservableProvider extends LocalProvider {
1271
1310
  * Generated bundle index. Do not edit.
1272
1311
  */
1273
1312
 
1274
- export { ArrayProvider, CollectionStore, DataProvider, DataSource, DataSourceProxy, LocalProvider, MemoryStore, ModelMeta, ModelRefByIndex, ModelRefByKey, ModelRefNorm, ObservableProvider, UnknownMeta, filterBy, filterMerge, groupBy, grouperMerge, pathGetterCompile, queryExecutor, sliceApply, sliceClamp, sliceEq, sliceInsert, sliceMerge, sliceToPages, slimBy, slimerMerge, sortBy, sorterMerge };
1313
+ export { ArrayProvider, CollectionStore, DataProvider, DataSource, DataSourceProxy, LocalProvider, MemoryStore, ModelMeta, ModelRefByIndex, ModelRefByKey, ModelRefNorm, ObservableProvider, UnknownMeta, filterBy, filterMerge, groupBy, grouperMerge, pathGetterCompile, queryExecutor, sliceApply, sliceClamp, sliceEq, sliceInsert, sliceMerge, sliceToPages, slimBy, slimerMerge, sortBy, sorterFind, sorterMerge };
1275
1314
  //# sourceMappingURL=ngutil-data.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/properties/abstract.ts","../../../../packages/data/src/source/properties/filter.ts","../../../../packages/data/src/source/properties/sorter.ts","../../../../packages/data/src/source/properties/slimer.ts","../../../../packages/data/src/source/properties/grouper.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flattenDepth } from \"lodash\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flattenDepth(parent(obj), 1)\n } else {\n const key = IsNumber.test(part) ? Number(part) : part\n return obj => parent(obj).map(v => (v != null ? v[key] : undefined))\n }\n}\n","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isPlainObject, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\n\nexport const enum FilterOp {\n Eq = \"==\",\n EqStrict = \"===\",\n EqInsesitive = \"==*\",\n Neq = \"!=\",\n NeqStrict = \"!==\",\n NeqInsesitive = \"!=*\",\n Gt = \">\",\n GtInsesitive = \">*\",\n Gte = \">=\",\n GteInsesitive = \">=*\",\n Lt = \"<\",\n LtInsesitive = \"<*\",\n Lte = \"<=\",\n LteInsesitive = \"<=*\",\n Contains = \"%\",\n ContainsInsesitive = \"%*\",\n StartsWith = \"^\",\n StartsWithInsesitive = \"^*\",\n EndsWith = \"$\",\n EndsWithInsesitive = \"$*\",\n Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | EndsWith<T>\n | Regexp<T>\n | T\n | undefined\n | null\n\ntype EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>\ntype NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>\ntype Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>\ntype Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>\ntype Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>\ntype Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>\ntype Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>\ntype Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>\ntype Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>\ntype StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>\ntype EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\n\n// /**\n// * @example\n// * ```ts\n// * normalizeFilter({id: 2, name: {\"=*\": \"AnyName\"}}) -> {id: {\"==\": 2}, name: {\"=*\": \"AnyName\"}}}\n// * normalizeFilter({id: {\">\": 0, \"<\": 10}}) -> {\"&\": [{id: {\">\": 0}}, {id: {\"<\": 10}}]}\n// * ```\n// */\n// export function normalizeFilter<T extends Model>(filters: Filters<T>): Filters<T> {\n// return _normalizeFilter(filters)\n// }\n\n// function _normalizeFilter(filters: any, path?: string): any {\n// const result = {} as any\n\n// for (const [path, v] of Object.entries(filters)) {\n// switch (path) {\n// case FilterOp.And:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '&' (AND) operator must have array type\")\n// }\n\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// case FilterOp.Or:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '|' (OR) operator must have array type\")\n// }\n\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// default:\n// for (const entry of asOperators(v)) {\n// switch (entry.op) {\n// case FilterOp.And:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// case FilterOp.Or:\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// default:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And].push({ path, ...entry })\n// }\n// }\n// }\n// }\n\n// return result\n// }\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n let getter: PathGetter\n const result: FilterFn<T>[] = []\n for (const [pth, value] of Object.entries(filters)) {\n switch (pth) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n result.splice(result.length, 0, ...value.map(_filterCompile<T>))\n break\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n result.push(or_(value.map(_filterCompile<T>)))\n break\n\n default:\n getter = pathGetterCompile(pth)\n if (isPlainObject(value)) {\n result.push(and_(Object.entries(value).map(([op, opv]) => filterCompileOp(getter, op as any, opv))))\n } else {\n result.push(filterCompileOp(getter, FilterOp.Eq, value))\n }\n\n break\n }\n }\n return and_(result)\n}\n\nfunction filterCompileOp(getter: PathGetter, op: FilterOp, value: any): FilterFn {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n return and_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n return or_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n let result: { [key: string]: any } | undefined = undefined\n\n for (const filter of filters) {\n if (filter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(filter)\n } else {\n for (const [k, v] of Object.entries(filter)) {\n if (v === undefined) {\n delete result[k]\n continue\n }\n\n result[k] = deepClone(v)\n }\n }\n }\n\n return result as any\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n","import { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n throw new Error(\"Empty sorter\")\n }\n return _sorterCompile<T>(sorters) as any\n}\n\n/**\n * Normalize sorter definition\n *\n * @example\n * ```ts\n * normalizeSorter([{id: \"asc\"}]) -> [{path: \"id\", isAsc: true, emptyFirst: true}]\n * normalizeSorter([{id: {dir: \"desc\", emptyFirst: false}}]) -> [{path: \"id\", isAsc: false, emptyFirst: false}]\n * ```\n */\nexport function sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n return flattenDeep(\n (sorters as any).map((s: any) =>\n Object.entries(s).map(([k, v]) => {\n if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n )\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined {\n let result: Sorter<T> | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n for (const [k, v] of Object.entries(sentry)) {\n const existing = (result as any).find((value: any) => value[k] != null)\n if (existing) {\n ;(existing as any)[k] = deepClone(v)\n } else {\n result.push({ [k]: deepClone(v) } as any)\n }\n }\n }\n }\n\n return result\n}\n","import { Model } from \"../model\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): void {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): void {}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n result.length = slice.end\n\n return result.concat(array.slice(slice.end))\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { groupBy, isEqual, sortBy } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { Query, QueryResult } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { Sorter } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(query: Query<T>, previous?: QueryExecutor<T>): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { filterBy, pathGetterCompile } from \"../query\"\n\nexport type Model = { [key: string]: any }\n\nexport type ModelRef = { key?: Primitive | Array<Primitive>; index?: number }\nexport type ModelRefFilter<T> = (item: T, index: number) => boolean\n\nexport interface ModelMetaProps<T extends Model> {\n readonly keys: readonly string[]\n readonly trackBy?: TrackByFunction<T>\n}\n\nexport type ModelMetaInput<T extends Model> = ModelMeta<T> | ModelMetaProps<T>\n\nexport type TrackedModel<T extends Model> = { index: number; model: T }\n\nexport class ModelMeta<T extends Model> implements ModelMetaProps<T> {\n static coerce<M extends Model>(value: ModelMetaInput<M>): ModelMeta<M> {\n if (value instanceof ModelMeta) {\n return value\n } else {\n return new ModelMeta(value)\n }\n }\n\n readonly keys: readonly string[]\n readonly trackBy: TrackByFunction<T>\n readonly #getKey?: (model: T) => string\n\n constructor(props: ModelMetaProps<T>) {\n this.keys = props.keys\n\n if (this.keys.length > 0) {\n const getters = this.keys.map(pathGetterCompile)\n if (props.trackBy == null) {\n this.trackBy = (index: number, item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n this.trackBy = props.trackBy\n }\n this.#getKey = (item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n if (props.trackBy == null) {\n throw new Error(\"Can't compile track by function without `keys` declaration\")\n } else {\n this.trackBy = props.trackBy\n }\n }\n }\n\n isEqual(a: T, b: T): boolean {\n return isEqual(a, b)\n }\n\n isEqualByTrack(a: TrackedModel<T>, b: TrackedModel<T>): boolean {\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n if (a.index == null || b.index == null) {\n return a.index == null && b.index == null\n }\n\n if (a.model == null || b.model == null) {\n return a.model == null && b.model == null\n }\n\n return this.trackBy(a.index, a.model) === this.trackBy(b.index, b.model)\n }\n\n isEqualByKey(a: T, b: T): boolean {\n if (this.#getKey != null) {\n if (a == null || b == null) {\n return a == null && b == null\n }\n return this.#getKey(a) === this.#getKey(b)\n }\n console.warn(\"Primary keys is not defined for\", a, b)\n return false\n }\n\n normalizeRef(ref: ModelRef | ModelRefNorm): ModelRefNorm {\n if (ref instanceof ModelRefNorm) {\n return ref\n }\n\n if (ref.key != null && ref.index != null) {\n throw new Error(\"Only provide `pk` or `index` value not both\")\n }\n\n if (ref.key != null) {\n const keyValue = (Array.isArray(ref.key) ? ref.key : [ref.key]) as readonly Primitive[]\n\n if (keyValue.length > 0) {\n if (this.keys.length === 0) {\n throw new Error(\"Can't normalize ref without `keys`\")\n }\n\n if (keyValue.length !== this.keys.length) {\n throw new Error(`Wrong number of \\`key\\` values for this keys: [${this.keys.join(\",\")}]`)\n }\n return new ModelRefByKey(keyValue, this.keys)\n } else {\n console.warn(\"Empty key in ModelRef\", ref)\n }\n }\n\n if (ref.index != null) {\n return new ModelRefByIndex(ref.index)\n }\n\n throw new Error(\"Missing `key` or `index` value\")\n }\n}\n\nexport abstract class ModelRefNorm {\n readonly key?: readonly Primitive[]\n readonly index?: number\n\n #filter?: ModelRefFilter<any>\n toFilter() {\n if (this.#filter == null) {\n return (this.#filter = this._asFilter())\n }\n return this.#filter\n }\n\n protected abstract _asFilter(): ModelRefFilter<any>\n}\n\nexport class ModelRefByKey extends ModelRefNorm {\n override readonly key: readonly Primitive[]\n\n #keys: readonly string[]\n constructor(key: readonly Primitive[], keys: readonly string[]) {\n super()\n this.key = key\n this.#keys = keys\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n const filter = {} as any\n for (let i = 0; i < this.#keys.length; i++) {\n filter[this.#keys[i]] = this.key[i]\n }\n return filterBy(filter)\n }\n}\n\nexport class ModelRefByIndex extends ModelRefNorm {\n override readonly index: number\n\n constructor(index: number) {\n super()\n this.index = index\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n return (item: any, index: number) => this.index === index\n }\n}\n\nexport class UnknownMeta<T extends Model> extends ModelMeta<T> {\n constructor() {\n super({ keys: [], trackBy: (index: number) => index })\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { BehaviorSubject, combineLatest, map, Observable } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nexport abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {\n // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })\n\n set(value: T | undefined, clone: boolean = true) {\n if (!isEqual(this.value, value)) {\n if (value != null) {\n this.next(deepFreeze<T>(clone ? deepClone<T>(value) : value) as any)\n } else {\n this.next(undefined)\n }\n }\n }\n\n get() {\n return this.value\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n abstract update(other: T): void\n}\n\nexport abstract class PropertyCombined<T> {\n abstract readonly normal: Property<T>\n abstract readonly forced: Property<T>\n abstract readonly merged$: Observable<DeepReadonly<T> | undefined>\n}\n\nexport function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any> {\n if (props.length > 1) {\n return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))))\n } else {\n return props[0] as any\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { filterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class FilterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(filterMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class FilterCombined<T> extends PropertyCombined<T> {\n override normal = new FilterProperty<T>(undefined)\n override forced = new FilterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(filterMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { sorterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SorterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(sorterMerge((this as { value: any }).value, other as any) as any, false)\n }\n}\n\nexport class SorterCombined<T> extends PropertyCombined<T> {\n override normal = new SorterProperty<T>(undefined)\n override forced = new SorterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(sorterMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { slimerMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SlimerProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(slimerMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class SlimerCombined<T> extends PropertyCombined<T> {\n override normal = new SlimerProperty<T>(undefined)\n override forced = new SlimerProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(slimerMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { grouperMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class GrouperProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(grouperMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class GrouperCombined<T> extends PropertyCombined<T> {\n override normal = new GrouperProperty<T>(undefined)\n override forced = new GrouperProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(grouperMerge, this.normal, this.forced)\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n take,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { isEqual, merge } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, Grouper, Query, Slice, Slimer, Sorter } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\nimport { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from \"./properties\"\n\nconst DEBOUNCE_TIME = 50\n\ntype DSQuery<T extends Model> = Query<T> & { slice: DeepReadonly<Slice> }\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly busy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly filter = new FilterCombined<Filter<T>>()\n readonly sorter = new SorterCombined<Sorter<T>>()\n readonly slimer = new SlimerCombined<Slimer<T>>()\n readonly grouper = new GrouperCombined<Grouper<T>>()\n\n readonly #queryBase = combineLatest({\n filter: this.filter.merged$,\n sorter: this.sorter.merged$,\n slimer: this.slimer.merged$,\n grouper: this.grouper.merged$\n }).pipe(shareReplay(1))\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new Subject<void>()\n readonly reset$: Observable<unknown> = merge(this.#queryBase, this.#reload).pipe(\n tap(() => this.#setBusy(true)),\n switchMap(() => this.store.clear()),\n shareReplay(1)\n )\n\n readonly query$: Observable<DSQuery<T>> = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(\n map(({ base, slice }) => {\n return { ...base, slice }\n }),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n switchMap(({ query }) => {\n return this.store.hasSlice(query.slice).pipe(\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice)\n } else {\n return this.provider.queryList(query).pipe(\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n }\n return this.store.insertSlice(query.slice, result.items)\n }),\n take(1)\n )\n }\n })\n )\n }),\n finalize(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly store: CollectionStore<T>\n constructor(\n public readonly provider: DataProvider<T>,\n store?: CollectionStore<T>\n ) {\n super()\n if (store == null) {\n store = new MemoryStore()\n }\n this.store = store\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n all() {\n return this.setSlice({start: 0, end: Infinity})\n }\n\n realod() {\n this.#reload.next()\n }\n\n getItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.query$.pipe(\n switchMap(query => this.provider.queryItem(refn, query)),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n ),\n take(1)\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: Query<T>) => Observable<X>,\n selfFn: (query: Query<T>) => Observable<X>\n ): Observable<X> {\n return this.query$.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.provider.isAsync) {\n if (this.busy$.value !== busy) {\n this.busy$.next(busy)\n }\n }\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return new Observable((subscriber: Subscriber<readonly (T | undefined)[]>) => {\n const sub1 = collectionViewer.viewChange.subscribe(this.#slice)\n const sub2 = this.items$.subscribe(subscriber)\n\n return () => {\n if (this.#cvSubs.get(collectionViewer) === until) {\n this.#cvSubs.delete(collectionViewer)\n }\n sub1.unsubscribe()\n sub2.unsubscribe()\n }\n }).pipe(takeUntil(until))\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, Input, OnDestroy, Optional } from \"@angular/core\"\nimport { toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { Busy, ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceInput<T extends Model> = any\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model = Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol\n{\n @Input({ required: true, alias: \"nuDataSource\" })\n set source(value: DataSourceInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value)\n .pipe(\n tap(v => {\n if (v == null) {\n throw new Error(\"Missing DataSource\")\n }\n })\n )\n .subscribe(this.source$)\n }\n #valueSub?: Subscription\n readonly source$ = new ReplaySubject<DataSource<T>>(1)\n\n readonly items$ = this.source$.pipe(\n switchMap(value => value.items$),\n share()\n )\n\n readonly busy$ = this.source$.pipe(\n switchMap(value => value.busy$),\n share()\n )\n readonly isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false })\n\n @Input()\n set filter(value: Filter<T>) {\n this.#filter.next(value)\n }\n readonly #filter = new ReplaySubject<Filter<T>>(1)\n // TODO: maybe mergedFilter$ = this.value$.pipe(switchMap(value => value.filter.merged$))\n\n @Input()\n set sorter(value: Sorter<T>) {\n this.#sorter.next(value)\n }\n readonly #sorter = new ReplaySubject<Sorter<T>>(1)\n\n @Input()\n set grouper(value: Grouper<T>) {\n this.#grouper.next(value)\n }\n readonly #grouper = new ReplaySubject<Grouper<T>>(1)\n\n @Input()\n set slimer(value: Slimer<T>) {\n this.#slimer.next(value)\n }\n readonly #slimer = new ReplaySubject<Slimer<T>>(1)\n\n readonly #subs = new Subscription()\n\n constructor(@Optional() busy?: Busy<any>) {\n super()\n\n if (busy != null) {\n this.#subs.add(busy.connect(this.busy$).subscribe())\n }\n\n this.#subs.add(\n combineLatest({ src: this.source$, filter: this.#filter }).subscribe(({ src, filter }) => {\n src.filter.forced.set(filter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {\n src.sorter.forced.set(sorter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {\n src.grouper.forced.set(grouper)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.source$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {\n src.slimer.forced.set(slimer)\n })\n )\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.source$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n this.#subs.unsubscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.source$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { Query, QueryResult, Slice } from \"../query\"\nimport { DataSource } from \"../source\"\nimport type { CollectionStore } from \"../store\"\n\nexport abstract class DataProvider<T extends Model> {\n /**\n * `true` when the provider is making async requests\n */\n abstract readonly isAsync: boolean\n\n /**\n * Metadata of model\n */\n abstract readonly meta: ModelMeta<T>\n\n /**\n * Query items by the given request\n */\n abstract queryList(request: Query<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { Query, queryExecutor, QueryExecutor, QueryResult, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: Query<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: Query<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(take(1), map(items => sliceClamp(slice, {start: 0, end: items.length})))\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\n\nexport class ArrayProvider<T extends Model> extends LocalProvider<T> {\n override readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, items: readonly T[]) {\n super(meta)\n this.items$ = of(items)\n }\n}\n","import type { Observable } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ObservableProvider<T extends Model> extends LocalProvider<T> {\n readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>) {\n super(meta)\n this.items$ = src\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["sortBy","groupBy","CdkDataSource"],"mappings":"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"}
1
+ {"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/properties/abstract.ts","../../../../packages/data/src/source/properties/filter.ts","../../../../packages/data/src/source/properties/sorter.ts","../../../../packages/data/src/source/properties/slimer.ts","../../../../packages/data/src/source/properties/grouper.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flattenDepth } from \"lodash\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flattenDepth(parent(obj), 1)\n } else {\n const key = IsNumber.test(part) ? Number(part) : part\n return obj => parent(obj).map(v => (v != null ? v[key] : undefined))\n }\n}\n","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isPlainObject, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\n\nexport const enum FilterOp {\n Eq = \"==\",\n EqStrict = \"===\",\n EqInsesitive = \"==*\",\n Neq = \"!=\",\n NeqStrict = \"!==\",\n NeqInsesitive = \"!=*\",\n Gt = \">\",\n GtInsesitive = \">*\",\n Gte = \">=\",\n GteInsesitive = \">=*\",\n Lt = \"<\",\n LtInsesitive = \"<*\",\n Lte = \"<=\",\n LteInsesitive = \"<=*\",\n Contains = \"%\",\n ContainsInsesitive = \"%*\",\n StartsWith = \"^\",\n StartsWithInsesitive = \"^*\",\n EndsWith = \"$\",\n EndsWithInsesitive = \"$*\",\n Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | EndsWith<T>\n | Regexp<T>\n | T\n | undefined\n | null\n\ntype EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>\ntype NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>\ntype Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>\ntype Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>\ntype Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>\ntype Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>\ntype Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>\ntype Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>\ntype Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>\ntype StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>\ntype EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\n\n// /**\n// * @example\n// * ```ts\n// * normalizeFilter({id: 2, name: {\"=*\": \"AnyName\"}}) -> {id: {\"==\": 2}, name: {\"=*\": \"AnyName\"}}}\n// * normalizeFilter({id: {\">\": 0, \"<\": 10}}) -> {\"&\": [{id: {\">\": 0}}, {id: {\"<\": 10}}]}\n// * ```\n// */\n// export function normalizeFilter<T extends Model>(filters: Filters<T>): Filters<T> {\n// return _normalizeFilter(filters)\n// }\n\n// function _normalizeFilter(filters: any, path?: string): any {\n// const result = {} as any\n\n// for (const [path, v] of Object.entries(filters)) {\n// switch (path) {\n// case FilterOp.And:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '&' (AND) operator must have array type\")\n// }\n\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// case FilterOp.Or:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '|' (OR) operator must have array type\")\n// }\n\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// default:\n// for (const entry of asOperators(v)) {\n// switch (entry.op) {\n// case FilterOp.And:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// case FilterOp.Or:\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// default:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And].push({ path, ...entry })\n// }\n// }\n// }\n// }\n\n// return result\n// }\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n let getter: PathGetter\n const result: FilterFn<T>[] = []\n for (const [pth, value] of Object.entries(filters)) {\n switch (pth) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n result.splice(result.length, 0, ...value.map(_filterCompile<T>))\n break\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n result.push(or_(value.map(_filterCompile<T>)))\n break\n\n default:\n getter = pathGetterCompile(pth)\n if (isPlainObject(value)) {\n result.push(and_(Object.entries(value).map(([op, opv]) => filterCompileOp(getter, op as any, opv))))\n } else {\n result.push(filterCompileOp(getter, FilterOp.Eq, value))\n }\n\n break\n }\n }\n return and_(result)\n}\n\nfunction filterCompileOp(getter: PathGetter, op: FilterOp, value: any): FilterFn {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n return and_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n return or_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n let result: { [key: string]: any } | undefined = undefined\n\n for (const filter of filters) {\n if (filter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(filter)\n } else {\n for (const [k, v] of Object.entries(filter)) {\n if (v === undefined) {\n delete result[k]\n continue\n }\n\n result[k] = deepClone(v)\n }\n }\n }\n\n return result as any\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n","import { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n throw new Error(\"Empty sorter\")\n }\n return _sorterCompile<T>(sorters) as any\n}\n\n/**\n * Normalize sorter definition\n *\n * @example\n * ```ts\n * normalizeSorter([{id: \"asc\"}]) -> [{path: \"id\", isAsc: true, emptyFirst: true}]\n * normalizeSorter([{id: {dir: \"desc\", emptyFirst: false}}]) -> [{path: \"id\", isAsc: false, emptyFirst: false}]\n * ```\n */\nexport function sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n return flattenDeep(\n (sorters as any).map((s: any) =>\n Object.entries(s).map(([k, v]) => {\n if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n )\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined {\n let result: Sorter<T> | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n for (const [k, v] of Object.entries(sentry)) {\n const existing = (result as any).find((value: any) => value[k] != null)\n if (existing) {\n ;(existing as any)[k] = deepClone(v)\n } else {\n result.push({ [k]: deepClone(v) } as any)\n }\n }\n }\n }\n\n return result\n}\n\n\nexport function sorterFind<T extends Model>(sorters: Sorter<T>, name: string): SortDir | SortDirExtra | undefined {\n const sorter = sorters.find(v => v[name] != null)\n if (sorter != null) {\n return sorter[name]\n }\n return undefined\n\n}\n","import { Model } from \"../model\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): void {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): void {}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n result.length = slice.end\n\n return result.concat(array.slice(slice.end))\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { groupBy, isEqual, sortBy } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { Query, QueryResult } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { Sorter } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(query: Query<T>, previous?: QueryExecutor<T>): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { filterBy, pathGetterCompile } from \"../query\"\n\nexport type Model = { [key: string]: any }\n\nexport type ModelRef = { key?: Primitive | Array<Primitive>; index?: number }\nexport type ModelRefFilter<T> = (item: T, index: number) => boolean\n\nexport interface ModelMetaProps<T extends Model> {\n readonly keys: readonly string[]\n readonly trackBy?: TrackByFunction<T>\n}\n\nexport type ModelMetaInput<T extends Model> = ModelMeta<T> | ModelMetaProps<T>\n\nexport type TrackedModel<T extends Model> = { index: number; model: T }\n\nexport class ModelMeta<T extends Model> implements ModelMetaProps<T> {\n static coerce<M extends Model>(value: ModelMetaInput<M>): ModelMeta<M> {\n if (value instanceof ModelMeta) {\n return value\n } else {\n return new ModelMeta(value)\n }\n }\n\n readonly keys: readonly string[]\n readonly trackBy: TrackByFunction<T>\n readonly #getKey?: (model: T) => string\n\n constructor(props: ModelMetaProps<T>) {\n this.keys = props.keys\n\n if (this.keys.length > 0) {\n const getters = this.keys.map(pathGetterCompile)\n if (props.trackBy == null) {\n this.trackBy = (index: number, item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n this.trackBy = props.trackBy\n }\n this.#getKey = (item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n if (props.trackBy == null) {\n throw new Error(\"Can't compile track by function without `keys` declaration\")\n } else {\n this.trackBy = props.trackBy\n }\n }\n }\n\n isEqual(a: T, b: T): boolean {\n return isEqual(a, b)\n }\n\n isEqualByTrack(a: TrackedModel<T>, b: TrackedModel<T>): boolean {\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n if (a.index == null || b.index == null) {\n return a.index == null && b.index == null\n }\n\n if (a.model == null || b.model == null) {\n return a.model == null && b.model == null\n }\n\n return this.trackBy(a.index, a.model) === this.trackBy(b.index, b.model)\n }\n\n isEqualByKey(a: T, b: T): boolean {\n if (this.#getKey != null) {\n if (a == null || b == null) {\n return a == null && b == null\n }\n return this.#getKey(a) === this.#getKey(b)\n }\n console.warn(\"Primary keys is not defined for\", a, b)\n return false\n }\n\n normalizeRef(ref: ModelRef | ModelRefNorm): ModelRefNorm {\n if (ref instanceof ModelRefNorm) {\n return ref\n }\n\n if (ref.key != null && ref.index != null) {\n throw new Error(\"Only provide `pk` or `index` value not both\")\n }\n\n if (ref.key != null) {\n const keyValue = (Array.isArray(ref.key) ? ref.key : [ref.key]) as readonly Primitive[]\n\n if (keyValue.length > 0) {\n if (this.keys.length === 0) {\n throw new Error(\"Can't normalize ref without `keys`\")\n }\n\n if (keyValue.length !== this.keys.length) {\n throw new Error(`Wrong number of \\`key\\` values for this keys: [${this.keys.join(\",\")}]`)\n }\n return new ModelRefByKey(keyValue, this.keys)\n } else {\n console.warn(\"Empty key in ModelRef\", ref)\n }\n }\n\n if (ref.index != null) {\n return new ModelRefByIndex(ref.index)\n }\n\n throw new Error(\"Missing `key` or `index` value\")\n }\n}\n\nexport abstract class ModelRefNorm {\n readonly key?: readonly Primitive[]\n readonly index?: number\n\n #filter?: ModelRefFilter<any>\n toFilter() {\n if (this.#filter == null) {\n return (this.#filter = this._asFilter())\n }\n return this.#filter\n }\n\n protected abstract _asFilter(): ModelRefFilter<any>\n}\n\nexport class ModelRefByKey extends ModelRefNorm {\n override readonly key: readonly Primitive[]\n\n #keys: readonly string[]\n constructor(key: readonly Primitive[], keys: readonly string[]) {\n super()\n this.key = key\n this.#keys = keys\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n const filter = {} as any\n for (let i = 0; i < this.#keys.length; i++) {\n filter[this.#keys[i]] = this.key[i]\n }\n return filterBy(filter)\n }\n}\n\nexport class ModelRefByIndex extends ModelRefNorm {\n override readonly index: number\n\n constructor(index: number) {\n super()\n this.index = index\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n return (item: any, index: number) => this.index === index\n }\n}\n\nexport class UnknownMeta<T extends Model> extends ModelMeta<T> {\n constructor() {\n super({ keys: [], trackBy: (index: number) => index })\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { BehaviorSubject, combineLatest, map, Observable } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nexport abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {\n // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })\n\n set(value: T | undefined, clone: boolean = true) {\n if (!isEqual(this.value, value)) {\n if (value != null) {\n this.next(deepFreeze<T>(clone ? deepClone<T>(value) : value) as any)\n } else {\n this.next(undefined)\n }\n }\n }\n\n get() {\n return this.value\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n abstract update(other: T): void\n}\n\nexport abstract class PropertyCombined<T> {\n abstract readonly normal: Property<T>\n abstract readonly forced: Property<T>\n abstract readonly merged$: Observable<DeepReadonly<T> | undefined>\n}\n\nexport function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any> {\n if (props.length > 1) {\n return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))))\n } else {\n return props[0] as any\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { filterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class FilterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(filterMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class FilterCombined<T> extends PropertyCombined<T> {\n override normal = new FilterProperty<T>(undefined)\n override forced = new FilterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(filterMerge, this.normal, this.forced)\n}\n","import { Observable, map } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { sorterMerge, SortDirection, sorterFind } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\nimport { Model } from \"../../model\"\n\nexport class SorterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(sorterMerge((this as { value: any }).value, other as any) as any, false)\n }\n}\n\n\ntype OfTypes<T extends Model> = ReturnType<typeof sorterFind<T>>\n\nexport class SorterCombined<T extends Model> extends PropertyCombined<T> {\n override normal = new SorterProperty<T>(undefined)\n override forced = new SorterProperty<T>(undefined)\n // TODO: normalized sorter\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(sorterMerge, this.normal, this.forced)\n\n of(name: string): Observable<OfTypes<T>> {\n return this.merged$.pipe(\n map((sorters: any) => sorterFind(sorters, name))\n )\n }\n\n directionOf(name: string) {\n return this.of(name).pipe(map(value => {\n if (value == null) {\n return undefined\n } else if (typeof value === \"string\") {\n return value\n } else {\n return value.dir\n }\n }))\n }\n\n isSet(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v != null))\n }\n\n isAsc(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v === SortDirection.Asc))\n }\n\n isDesc(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v === SortDirection.Desc))\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { slimerMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SlimerProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(slimerMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class SlimerCombined<T> extends PropertyCombined<T> {\n override normal = new SlimerProperty<T>(undefined)\n override forced = new SlimerProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(slimerMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { grouperMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class GrouperProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(grouperMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class GrouperCombined<T> extends PropertyCombined<T> {\n override normal = new GrouperProperty<T>(undefined)\n override forced = new GrouperProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(grouperMerge, this.normal, this.forced)\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n take,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { isEqual, merge } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, Grouper, Query, Slice, Slimer, Sorter } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\nimport { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from \"./properties\"\n\nconst DEBOUNCE_TIME = 50\n\ntype DSQuery<T extends Model> = Query<T> & { slice: DeepReadonly<Slice> }\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly busy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly filter = new FilterCombined<Filter<T>>()\n readonly sorter = new SorterCombined<Sorter<T>>()\n readonly slimer = new SlimerCombined<Slimer<T>>()\n readonly grouper = new GrouperCombined<Grouper<T>>()\n\n readonly #queryBase = combineLatest({\n filter: this.filter.merged$,\n sorter: this.sorter.merged$,\n slimer: this.slimer.merged$,\n grouper: this.grouper.merged$\n }).pipe(shareReplay(1))\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new Subject<void>()\n readonly reset$: Observable<unknown> = merge(this.#queryBase, this.#reload).pipe(\n tap(() => this.#setBusy(true)),\n switchMap(() => this.store.clear()),\n shareReplay(1)\n )\n\n readonly query$: Observable<DSQuery<T>> = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(\n map(({ base, slice }) => {\n return { ...base, slice }\n }),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n switchMap(({ query }) => {\n return this.store.hasSlice(query.slice).pipe(\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice)\n } else {\n return this.provider.queryList(query).pipe(\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n }\n return this.store.insertSlice(query.slice, result.items)\n }),\n take(1)\n )\n }\n })\n )\n }),\n finalize(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly store: CollectionStore<T>\n constructor(\n public readonly provider: DataProvider<T>,\n store?: CollectionStore<T>\n ) {\n super()\n if (store == null) {\n store = new MemoryStore()\n }\n this.store = store\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n all() {\n return this.setSlice({start: 0, end: Infinity})\n }\n\n realod() {\n this.#reload.next()\n }\n\n getItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.query$.pipe(\n switchMap(query => this.provider.queryItem(refn, query)),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n ),\n take(1)\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: Query<T>) => Observable<X>,\n selfFn: (query: Query<T>) => Observable<X>\n ): Observable<X> {\n return this.query$.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.provider.isAsync) {\n if (this.busy$.value !== busy) {\n this.busy$.next(busy)\n }\n }\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return new Observable((subscriber: Subscriber<readonly (T | undefined)[]>) => {\n const sub1 = collectionViewer.viewChange.subscribe(this.#slice)\n const sub2 = this.items$.subscribe(subscriber)\n\n return () => {\n if (this.#cvSubs.get(collectionViewer) === until) {\n this.#cvSubs.delete(collectionViewer)\n }\n sub1.unsubscribe()\n sub2.unsubscribe()\n }\n }).pipe(takeUntil(until))\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, Input, OnDestroy, Optional, input } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { Busy, ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceInput<T extends Model> = any\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model = Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol {\n\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value)\n .pipe(\n tap(v => {\n if (v == null) {\n throw new Error(\"Missing DataSource\")\n }\n })\n )\n .subscribe(this.#value)\n }\n\n get value(): DataSource<T> {\n return this.#valueSig()!\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly #valueSig = toSignal(this.value$)\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n share()\n )\n\n readonly busy$ = this.value$.pipe(\n switchMap(value => value.busy$),\n share()\n )\n readonly isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false })\n\n @Input()\n set filter(value: Filter<T>) {\n this.#filter.next(value)\n }\n readonly #filter = new ReplaySubject<Filter<T>>(1)\n\n @Input()\n set sorter(value: Sorter<T>) {\n this.#sorter.next(value)\n }\n readonly #sorter = new ReplaySubject<Sorter<T>>(1)\n\n @Input()\n set grouper(value: Grouper<T>) {\n this.#grouper.next(value)\n }\n readonly #grouper = new ReplaySubject<Grouper<T>>(1)\n\n @Input()\n set slimer(value: Slimer<T>) {\n this.#slimer.next(value)\n }\n readonly #slimer = new ReplaySubject<Slimer<T>>(1)\n\n readonly #subs = new Subscription()\n\n constructor(@Optional() busy?: Busy<any>) {\n super()\n\n if (busy != null) {\n this.#subs.add(busy.connect(this.busy$).subscribe())\n }\n\n this.#subs.add(\n combineLatest({ src: this.value$, filter: this.#filter }).subscribe(({ src, filter }) => {\n src.filter.forced.set(filter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {\n src.sorter.forced.set(sorter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {\n src.grouper.forced.set(grouper)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {\n src.slimer.forced.set(slimer)\n })\n )\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n this.#subs.unsubscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { Query, QueryResult, Slice } from \"../query\"\nimport { DataSource } from \"../source\"\nimport type { CollectionStore } from \"../store\"\n\nexport abstract class DataProvider<T extends Model> {\n /**\n * `true` when the provider is making async requests\n */\n abstract readonly isAsync: boolean\n\n /**\n * Metadata of model\n */\n abstract readonly meta: ModelMeta<T>\n\n /**\n * Query items by the given request\n */\n abstract queryList(request: Query<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { Query, queryExecutor, QueryExecutor, QueryResult, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: Query<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: Query<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(take(1), map(items => sliceClamp(slice, {start: 0, end: items.length})))\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\n\nexport class ArrayProvider<T extends Model> extends LocalProvider<T> {\n override readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, items: readonly T[]) {\n super(meta)\n this.items$ = of(items)\n }\n}\n","import type { Observable } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ObservableProvider<T extends Model> extends LocalProvider<T> {\n readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>) {\n super(meta)\n this.items$ = src\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["sortBy","groupBy","CdkDataSource"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngutil/data",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "directory": "../../dist/packages/data/"
@@ -11,7 +11,7 @@
11
11
  "lodash": "^4.17.21",
12
12
  "utility-types": "^3.11.0",
13
13
  "rxjs": "^7.8.1",
14
- "@ngutil/common": "0.0.12"
14
+ "@ngutil/common": "0.0.13"
15
15
  },
16
16
  "sideEffects": false,
17
17
  "module": "fesm2022/ngutil-data.mjs",
package/query/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { Filter, filterBy, filterMerge, FilterOp } from "./filter";
2
2
  export { Grouper, groupBy, grouperMerge } from "./grouper";
3
- export { Sorter, sortBy, sorterMerge, SortDir, SortDirection, SortDirExtra } from "./sorter";
3
+ export { Sorter, sortBy, sorterMerge, SortDir, SortDirection, SortDirExtra, sorterFind } from "./sorter";
4
4
  export { Slimer, slimBy, slimerMerge } from "./slimer";
5
5
  export { Slice, sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
6
6
  export { pathGetterCompile } from "./path";
package/query/sorter.d.ts CHANGED
@@ -37,4 +37,5 @@ export declare function sortBy<T extends Model>(sorters: Sorter<T>): SorterFn<T>
37
37
  export declare function sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized;
38
38
  export declare function compare(a: any, b: any, emptyFirst: boolean): number;
39
39
  export declare function sorterMerge<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined;
40
+ export declare function sorterFind<T extends Model>(sorters: Sorter<T>, name: string): SortDir | SortDirExtra | undefined;
40
41
  export {};
@@ -1,11 +1,20 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { DeepReadonly } from "@ngutil/common";
3
+ import { sorterFind } from "../../query";
3
4
  import { Property, PropertyCombined } from "./abstract";
5
+ import { Model } from "../../model";
4
6
  export declare class SorterProperty<T> extends Property<T> {
5
7
  update(other: T): void;
6
8
  }
7
- export declare class SorterCombined<T> extends PropertyCombined<T> {
9
+ type OfTypes<T extends Model> = ReturnType<typeof sorterFind<T>>;
10
+ export declare class SorterCombined<T extends Model> extends PropertyCombined<T> {
8
11
  normal: SorterProperty<T>;
9
12
  forced: SorterProperty<T>;
10
13
  merged$: Observable<DeepReadonly<T> | undefined>;
14
+ of(name: string): Observable<OfTypes<T>>;
15
+ directionOf(name: string): Observable<import("../../query").SortDir | undefined>;
16
+ isSet(name: string): Observable<boolean>;
17
+ isAsc(name: string): Observable<boolean>;
18
+ isDesc(name: string): Observable<boolean>;
11
19
  }
20
+ export {};
@@ -1,6 +1,6 @@
1
1
  import { DataSource as CdkDataSource, CollectionViewer } from "@angular/cdk/collections";
2
2
  import { OnDestroy } from "@angular/core";
3
- import { Observable, ReplaySubject } from "rxjs";
3
+ import { Observable } from "rxjs";
4
4
  import { Busy, ConnectProtocol } from "@ngutil/common";
5
5
  import { Model } from "../model";
6
6
  import { Filter, Grouper, Slimer, Sorter } from "../query";
@@ -39,8 +39,9 @@ export type DataSourceInput<T extends Model> = any;
39
39
  */
40
40
  export declare class DataSourceProxy<T extends Model = Model> extends CdkDataSource<T | undefined> implements OnDestroy, ConnectProtocol {
41
41
  #private;
42
- set source(value: DataSourceInput<T>);
43
- readonly source$: ReplaySubject<DataSource<T>>;
42
+ set value(value: DataSourceInput<T>);
43
+ get value(): DataSource<T>;
44
+ readonly value$: Observable<DataSource<T>>;
44
45
  readonly items$: Observable<import("@ngutil/data").PartialCollection<T>>;
45
46
  readonly busy$: Observable<boolean>;
46
47
  readonly isBusy: import("@angular/core").Signal<boolean>;
@@ -53,5 +54,5 @@ export declare class DataSourceProxy<T extends Model = Model> extends CdkDataSou
53
54
  disconnect(collectionViewer: CollectionViewer): void;
54
55
  ngOnDestroy(): void;
55
56
  static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceProxy<any>, [{ optional: true; }]>;
56
- static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxy<any>, "[nuDataSource]", ["nuDataSource"], { "source": { "alias": "nuDataSource"; "required": true; }; "filter": { "alias": "filter"; "required": false; }; "sorter": { "alias": "sorter"; "required": false; }; "grouper": { "alias": "grouper"; "required": false; }; "slimer": { "alias": "slimer"; "required": false; }; }, {}, never, never, true, never>;
57
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceProxy<any>, "[nuDataSource]", ["nuDataSource"], { "value": { "alias": "nuDataSource"; "required": true; }; "filter": { "alias": "filter"; "required": false; }; "sorter": { "alias": "sorter"; "required": false; }; "grouper": { "alias": "grouper"; "required": false; }; "slimer": { "alias": "slimer"; "required": false; }; }, {}, never, never, true, never>;
57
58
  }