@sparted/shared-library 0.0.13 → 0.0.14

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.
Files changed (77) hide show
  1. package/_virtual/_tslib.js +1 -50
  2. package/_virtual/_tslib.js.map +1 -1
  3. package/array/array-to-map.js +6 -9
  4. package/array/array-to-map.js.map +1 -1
  5. package/array/get-values-from-keys.js +2 -2
  6. package/array/get-values-from-keys.js.map +1 -1
  7. package/date/constants.js +4 -4
  8. package/date/constants.js.map +1 -1
  9. package/date/convert.js +2 -2
  10. package/date/convert.js.map +1 -1
  11. package/date/format-minutes.js +6 -6
  12. package/date/format-minutes.js.map +1 -1
  13. package/date/get-time-diff-as-string.js +30 -32
  14. package/date/get-time-diff-as-string.js.map +1 -1
  15. package/formatting/format-number.js +7 -7
  16. package/formatting/format-number.js.map +1 -1
  17. package/fp/run-while.js +5 -6
  18. package/fp/run-while.js.map +1 -1
  19. package/http/encode-search-object.js +9 -13
  20. package/http/encode-search-object.js.map +1 -1
  21. package/http/fetch-with-timeout.js +6 -6
  22. package/http/fetch-with-timeout.js.map +1 -1
  23. package/linked-list/apply-diff-linked-list.js +2 -2
  24. package/linked-list/apply-diff-linked-list.js.map +1 -1
  25. package/linked-list/create-linked-list.js +24 -24
  26. package/linked-list/create-linked-list.js.map +1 -1
  27. package/linked-list/find-linked-list.js +2 -3
  28. package/linked-list/find-linked-list.js.map +1 -1
  29. package/linked-list/get-linked-list.js +1 -1
  30. package/linked-list/get-linked-list.js.map +1 -1
  31. package/linked-list/insert-linked-list.js +11 -13
  32. package/linked-list/insert-linked-list.js.map +1 -1
  33. package/linked-list/linked-list-utils.js +26 -27
  34. package/linked-list/linked-list-utils.js.map +1 -1
  35. package/linked-list/reduce-linked-list.js +5 -5
  36. package/linked-list/reduce-linked-list.js.map +1 -1
  37. package/linked-list/remove-linked-list.js +11 -12
  38. package/linked-list/remove-linked-list.js.map +1 -1
  39. package/linked-list/update-linked-list.js +6 -7
  40. package/linked-list/update-linked-list.js.map +1 -1
  41. package/linked-list/while-linked-list.js +4 -5
  42. package/linked-list/while-linked-list.js.map +1 -1
  43. package/math/clamp-number.js +2 -3
  44. package/math/clamp-number.js.map +1 -1
  45. package/math/interpolate.js +4 -4
  46. package/math/interpolate.js.map +1 -1
  47. package/math/number-range.js +3 -4
  48. package/math/number-range.js.map +1 -1
  49. package/math/random-number.js +2 -3
  50. package/math/random-number.js.map +1 -1
  51. package/object/merge-deep.js +6 -9
  52. package/object/merge-deep.js.map +1 -1
  53. package/package.json +1 -1
  54. package/parsing/parse-boolean.js +1 -1
  55. package/parsing/parse-boolean.js.map +1 -1
  56. package/parsing/parse-enum.js +3 -3
  57. package/parsing/parse-enum.js.map +1 -1
  58. package/parsing/parse-number.js +2 -2
  59. package/parsing/parse-number.js.map +1 -1
  60. package/predicates/is-function.js +1 -1
  61. package/predicates/is-function.js.map +1 -1
  62. package/predicates/is-null.js +1 -1
  63. package/predicates/is-null.js.map +1 -1
  64. package/predicates/is-object.js +1 -1
  65. package/predicates/is-object.js.map +1 -1
  66. package/predicates/is-primitive.js +4 -4
  67. package/predicates/is-primitive.js.map +1 -1
  68. package/predicates/is-undefined.js +1 -1
  69. package/predicates/is-undefined.js.map +1 -1
  70. package/promise/delay.js +2 -2
  71. package/promise/delay.js.map +1 -1
  72. package/promise/execute-or-resolve-default.js +2 -2
  73. package/promise/execute-or-resolve-default.js.map +1 -1
  74. package/promise/execute-with-delay.js +5 -11
  75. package/promise/execute-with-delay.js.map +1 -1
  76. package/string/replace-in-template.js +8 -10
  77. package/string/replace-in-template.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"create-linked-list.js","sources":["../../src/linked-list/create-linked-list.ts"],"sourcesContent":["import { LinkedListItem, LinkedList, ManipulationConfig } from './type';\n\nimport { reduceLinkedList } from './reduce-linked-list';\nimport { findLinkedList } from './find-linked-list';\nimport { whileLinkedList } from './while-linked-list';\nimport { walkListItemRecord } from './linked-list-utils';\nimport { removeLinkedList } from './remove-linked-list';\nimport { insertLinkedList } from './insert-linked-list';\nimport { getLinkedList } from './get-linked-list';\nimport { updateLinkedList } from './update-linked-list';\nimport { applyDiffLinkedList } from './apply-diff-linked-list';\n\ntype LinkedListValidation = {\n isDoubleLinked?: boolean,\n previousId: null | string,\n count: number,\n}\n\nexport const createLinkedList = <T extends LinkedListItem>(headId: string | null, items: Record<string, T>): LinkedList<T> => {\n const head = headId ? items[headId] : null;\n\n if (head === undefined) {\n throw new Error('Cannot find the head.');\n }\n\n const list = { headId, items };\n\n const { isDoubleLinked, count } = walkListItemRecord((acc, current) => {\n const newCount = acc.count + 1;\n const isDoubleLinked = current.previousId !== undefined;\n const incompatibleFormats = acc.isDoubleLinked !== undefined && acc.isDoubleLinked !== isDoubleLinked;\n\n if (incompatibleFormats || (isDoubleLinked && current.previousId !== acc.previousId)) {\n throw new Error('Invalid previous node in the linked list');\n }\n\n return {\n result: {\n previousId: current.id,\n count: newCount,\n isDoubleLinked,\n }\n }\n }, {\n initValue: {\n isDoubleLinked: undefined,\n count: 0,\n previousId: null,\n } as LinkedListValidation,\n startId: headId,\n items,\n });\n\n const manipulationConfig: ManipulationConfig<T> = {\n factory: (list) => createLinkedList(list.headId, list.items),\n /**\n * At this point isDoubleLinked cannot be undefined\n */\n isDoubleLinkList: isDoubleLinked!,\n list,\n };\n\n const linkedList: LinkedList<T> = {\n head,\n items,\n size: count,\n isDoubleLinked: isDoubleLinked!,\n reduce: (cb, initValue) => reduceLinkedList(cb, initValue, list),\n find: (predicate) => findLinkedList(predicate, list),\n while: (predicate, startId) => whileLinkedList(predicate, list, startId),\n remove: (id) => removeLinkedList(id, manipulationConfig),\n insert: (item) => insertLinkedList(item, manipulationConfig),\n get: (id) => getLinkedList(id, list),\n update: (item) => updateLinkedList(item, manipulationConfig),\n applyDiff: (before, after) => applyDiffLinkedList(before, after, linkedList),\n };\n\n return linkedList;\n};"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-linked-list.js","sources":["../../src/linked-list/create-linked-list.ts"],"sourcesContent":["import { LinkedListItem, LinkedList, ManipulationConfig } from './type';\n\nimport { reduceLinkedList } from './reduce-linked-list';\nimport { findLinkedList } from './find-linked-list';\nimport { whileLinkedList } from './while-linked-list';\nimport { walkListItemRecord } from './linked-list-utils';\nimport { removeLinkedList } from './remove-linked-list';\nimport { insertLinkedList } from './insert-linked-list';\nimport { getLinkedList } from './get-linked-list';\nimport { updateLinkedList } from './update-linked-list';\nimport { applyDiffLinkedList } from './apply-diff-linked-list';\n\ntype LinkedListValidation = {\n isDoubleLinked?: boolean,\n previousId: null | string,\n count: number,\n}\n\nexport const createLinkedList = <T extends LinkedListItem>(headId: string | null, items: Record<string, T>): LinkedList<T> => {\n const head = headId ? items[headId] : null;\n\n if (head === undefined) {\n throw new Error('Cannot find the head.');\n }\n\n const list = { headId, items };\n\n const { isDoubleLinked, count } = walkListItemRecord((acc, current) => {\n const newCount = acc.count + 1;\n const isDoubleLinked = current.previousId !== undefined;\n const incompatibleFormats = acc.isDoubleLinked !== undefined && acc.isDoubleLinked !== isDoubleLinked;\n\n if (incompatibleFormats || (isDoubleLinked && current.previousId !== acc.previousId)) {\n throw new Error('Invalid previous node in the linked list');\n }\n\n return {\n result: {\n previousId: current.id,\n count: newCount,\n isDoubleLinked,\n }\n }\n }, {\n initValue: {\n isDoubleLinked: undefined,\n count: 0,\n previousId: null,\n } as LinkedListValidation,\n startId: headId,\n items,\n });\n\n const manipulationConfig: ManipulationConfig<T> = {\n factory: (list) => createLinkedList(list.headId, list.items),\n /**\n * At this point isDoubleLinked cannot be undefined\n */\n isDoubleLinkList: isDoubleLinked!,\n list,\n };\n\n const linkedList: LinkedList<T> = {\n head,\n items,\n size: count,\n isDoubleLinked: isDoubleLinked!,\n reduce: (cb, initValue) => reduceLinkedList(cb, initValue, list),\n find: (predicate) => findLinkedList(predicate, list),\n while: (predicate, startId) => whileLinkedList(predicate, list, startId),\n remove: (id) => removeLinkedList(id, manipulationConfig),\n insert: (item) => insertLinkedList(item, manipulationConfig),\n get: (id) => getLinkedList(id, list),\n update: (item) => updateLinkedList(item, manipulationConfig),\n applyDiff: (before, after) => applyDiffLinkedList(before, after, linkedList),\n };\n\n return linkedList;\n};"],"names":[],"mappings":";;;;;;;;;;MAkBa,gBAAgB,GAAG,CAA2B,MAAqB,EAAE,KAAwB,KAAmB;AAC3H,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAE3C,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC1C,KAAA;AAED,IAAA,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAE/B,IAAA,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,CAAC,GAAG,EAAE,OAAO,KAAI;AACpE,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AAC/B,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;AACxD,QAAA,MAAM,mBAAmB,GAAG,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,KAAK,cAAc,CAAC;AAEtG,QAAA,IAAI,mBAAmB,KAAK,cAAc,IAAI,OAAO,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,CAAC,EAAE;AACpF,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC7D,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE;gBACN,UAAU,EAAE,OAAO,CAAC,EAAE;AACtB,gBAAA,KAAK,EAAE,QAAQ;gBACf,cAAc;AACf,aAAA;SACF,CAAA;AACH,KAAC,EAAE;AACD,QAAA,SAAS,EAAE;AACT,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,UAAU,EAAE,IAAI;AACO,SAAA;AACzB,QAAA,OAAO,EAAE,MAAM;QACf,KAAK;AACN,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,kBAAkB,GAA0B;AAChD,QAAA,OAAO,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;AAC5D;;AAEG;AACH,QAAA,gBAAgB,EAAE,cAAe;QACjC,IAAI;KACL,CAAC;AAEF,IAAA,MAAM,UAAU,GAAkB;QAChC,IAAI;QACJ,KAAK;AACL,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,cAAc,EAAE,cAAe;AAC/B,QAAA,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC;QAChE,IAAI,EAAE,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC;AACpD,QAAA,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;QACxE,MAAM,EAAE,CAAC,EAAE,KAAK,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,CAAC;QACxD,MAAM,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAC5D,GAAG,EAAE,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC;AAC5D,QAAA,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;KAC7E,CAAC;AAEF,IAAA,OAAO,UAAU,CAAC;AACpB;;;;"}
@@ -1,8 +1,7 @@
1
1
  import { walkListItemRecord } from './linked-list-utils.js';
2
2
 
3
- var findLinkedList = function (predicate, list) {
4
- list.headId;
5
- return walkListItemRecord(function (acc, item) {
3
+ const findLinkedList = (predicate, list) => {
4
+ return walkListItemRecord((acc, item) => {
6
5
  if (predicate(item)) {
7
6
  return {
8
7
  result: item,
@@ -1 +1 @@
1
- {"version":3,"file":"find-linked-list.js","sources":["../../src/linked-list/find-linked-list.ts"],"sourcesContent":["import { LinkedListItem, ItemPredicate, HeadAndItems } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const findLinkedList = <Item extends LinkedListItem>(\n predicate: ItemPredicate<Item>,\n list: HeadAndItems<Item>,\n): Item | null => {\n const { headId } = list;\n\n return walkListItemRecord(\n (acc, item) => {\n if (predicate(item)) {\n return {\n result: item,\n control: {\n stop: true,\n },\n };\n };\n\n return {\n result: acc,\n };\n }, {\n initValue: null as Item | null,\n items: list.items,\n startId: list.headId,\n },\n );\n};\n"],"names":[],"mappings":";;AAGa,IAAA,cAAc,GAAG,UAC5B,SAA8B,EAC9B,IAAwB,EAAA;AAEhB,IAAW,IAAI,CAAA,OAAC;AAExB,IAAA,OAAO,kBAAkB,CACvB,UAAC,GAAG,EAAE,IAAI,EAAA;AACR,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO;AACL,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA;aACF,CAAC;AACH,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;SACZ,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,SAAS,EAAE,IAAmB;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,MAAM;AACrB,KAAA,CACF,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"find-linked-list.js","sources":["../../src/linked-list/find-linked-list.ts"],"sourcesContent":["import { LinkedListItem, ItemPredicate, HeadAndItems } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const findLinkedList = <Item extends LinkedListItem>(\n predicate: ItemPredicate<Item>,\n list: HeadAndItems<Item>,\n): Item | null => {\n const { headId } = list;\n\n return walkListItemRecord(\n (acc, item) => {\n if (predicate(item)) {\n return {\n result: item,\n control: {\n stop: true,\n },\n };\n };\n\n return {\n result: acc,\n };\n }, {\n initValue: null as Item | null,\n items: list.items,\n startId: list.headId,\n },\n );\n};\n"],"names":[],"mappings":";;MAGa,cAAc,GAAG,CAC5B,SAA8B,EAC9B,IAAwB,KACT;AAGf,IAAA,OAAO,kBAAkB,CACvB,CAAC,GAAG,EAAE,IAAI,KAAI;AACZ,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO;AACL,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA;aACF,CAAC;AACH,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;SACZ,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,SAAS,EAAE,IAAmB;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,MAAM;AACrB,KAAA,CACF,CAAC;AACJ;;;;"}
@@ -1,4 +1,4 @@
1
- var getLinkedList = function (id, list) {
1
+ const getLinkedList = (id, list) => {
2
2
  if (list.items[id]) {
3
3
  return list.items[id];
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-linked-list.js","sources":["../../src/linked-list/get-linked-list.ts"],"sourcesContent":["import { HeadAndItems, LinkedListItem } from './type';\n\nexport const getLinkedList = <T extends LinkedListItem>(id: string, list: HeadAndItems<T>) => {\n if (list.items[id]) {\n return list.items[id];\n }\n\n return null;\n}"],"names":[],"mappings":"AAEa,IAAA,aAAa,GAAG,UAA2B,EAAU,EAAE,IAAqB,EAAA;AACvF,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACd;;;;"}
1
+ {"version":3,"file":"get-linked-list.js","sources":["../../src/linked-list/get-linked-list.ts"],"sourcesContent":["import { HeadAndItems, LinkedListItem } from './type';\n\nexport const getLinkedList = <T extends LinkedListItem>(id: string, list: HeadAndItems<T>) => {\n if (list.items[id]) {\n return list.items[id];\n }\n\n return null;\n}"],"names":[],"mappings":"MAEa,aAAa,GAAG,CAA2B,EAAU,EAAE,IAAqB,KAAI;AAC3F,IAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACd;;;;"}
@@ -1,25 +1,23 @@
1
- import { __assign } from '../_virtual/_tslib.js';
2
1
  import { assertItemCompatibility, assertPresence, findPreviousId, assertNewNodePosition } from './linked-list-utils.js';
3
2
 
4
- var insertLinkedList = function (item, config) {
5
- var _a, _b, _c;
6
- var isDoubleLinkList = config.isDoubleLinkList, list = config.list, factory = config.factory;
3
+ const insertLinkedList = (item, config) => {
4
+ const { isDoubleLinkList, list, factory } = config;
7
5
  assertItemCompatibility(item, isDoubleLinkList);
8
6
  assertPresence(item.nextId, list.items);
9
7
  assertPresence(item.previousId, list.items);
10
- var previousId = isDoubleLinkList
8
+ const previousId = isDoubleLinkList
11
9
  ? item.previousId
12
10
  : findPreviousId(item.nextId, list);
13
11
  assertNewNodePosition(item, {
14
- previousId: previousId,
15
- list: list,
12
+ previousId,
13
+ list,
16
14
  });
17
- var newHeadId = item.nextId === list.headId ? item.id : list.headId;
18
- var newItems = __assign(__assign(__assign(__assign({}, list.items), (previousId ? (_a = {},
19
- _a[previousId] = __assign(__assign({}, list.items[previousId]), { nextId: item.id }),
20
- _a) : {})), (isDoubleLinkList && item.nextId ? (_b = {},
21
- _b[item.nextId] = __assign(__assign({}, list.items[item.nextId]), (isDoubleLinkList ? { previousId: item.id } : {})),
22
- _b) : {})), (_c = {}, _c[item.id] = item, _c));
15
+ const newHeadId = item.nextId === list.headId ? item.id : list.headId;
16
+ const newItems = Object.assign(Object.assign(Object.assign(Object.assign({}, list.items), (previousId ? {
17
+ [previousId]: Object.assign(Object.assign({}, list.items[previousId]), { nextId: item.id }),
18
+ } : {})), (isDoubleLinkList && item.nextId ? {
19
+ [item.nextId]: Object.assign(Object.assign({}, list.items[item.nextId]), (isDoubleLinkList ? { previousId: item.id } : {})),
20
+ } : {})), { [item.id]: item });
23
21
  return factory({
24
22
  headId: newHeadId,
25
23
  items: newItems,
@@ -1 +1 @@
1
- {"version":3,"file":"insert-linked-list.js","sources":["../../src/linked-list/insert-linked-list.ts"],"sourcesContent":["import { ManipulationConfig, LinkedListItem } from './type';\n\nimport {\n findPreviousId,\n assertItemCompatibility,\n assertPresence,\n assertNewNodePosition,\n} from './linked-list-utils';\n\nexport const insertLinkedList = <T extends LinkedListItem>(item: T, config: ManipulationConfig<T>) => {\n const { isDoubleLinkList, list, factory } = config;\n\n assertItemCompatibility(item, isDoubleLinkList);\n assertPresence(item.nextId, list.items);\n assertPresence(item.previousId, list.items);\n\n const previousId = isDoubleLinkList\n ? item.previousId!\n : findPreviousId(item.nextId, list);\n\n assertNewNodePosition(item, {\n previousId,\n list,\n });\n\n const newHeadId = item.nextId === list.headId ? item.id : list.headId;\n const newItems = {\n ...list.items,\n ...(previousId ? {\n [previousId]: {\n ...list.items[previousId],\n nextId: item.id,\n },\n } : {}),\n ...(isDoubleLinkList && item.nextId ? {\n [item.nextId]: {\n ...list.items[item.nextId],\n ...(isDoubleLinkList ? { previousId: item.id } : {}),\n },\n } : {}),\n [item.id]: item,\n };\n\n return factory({\n headId: newHeadId,\n items: newItems,\n });\n};\n"],"names":[],"mappings":";;;AASa,IAAA,gBAAgB,GAAG,UAA2B,IAAO,EAAE,MAA6B,EAAA;;AACvF,IAAA,IAAA,gBAAgB,GAAoB,MAAM,CAAA,gBAA1B,EAAE,IAAI,GAAc,MAAM,CAAA,IAApB,EAAE,OAAO,GAAK,MAAM,QAAX,CAAY;AAEnD,IAAA,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAChD,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAM,UAAU,GAAG,gBAAgB;UAC/B,IAAI,CAAC,UAAW;UAChB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEtC,qBAAqB,CAAC,IAAI,EAAE;AAC1B,QAAA,UAAU,EAAA,UAAA;AACV,QAAA,IAAI,EAAA,IAAA;AACL,KAAA,CAAC,CAAC;IAEH,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACtE,IAAM,QAAQ,2CACT,IAAI,CAAC,KAAK,CACV,GAAC,UAAU,IAAE,EAAA,GAAA,EAAA;AACd,QAAA,EAAA,CAAC,UAAU,CAAA,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA,EAAA,EACzB,MAAM,EAAE,IAAI,CAAC,EAAE,EAChB,CAAA;cACC,EAAE,EACH,GAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,IAAE,EAAA,GAAA,EAAA;AACnC,QAAA,EAAA,CAAC,IAAI,CAAC,MAAM,CAAA,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IACtB,gBAAgB,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,EACpD;cACC,EAAE,EACL,GAAA,EAAA,GAAA,EAAA,EAAA,EAAA,CAAA,IAAI,CAAC,EAAE,CAAA,GAAG,IAAI,EAAA,EAAA,EAChB,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC;AACb,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA,CAAC,CAAC;AACL;;;;"}
1
+ {"version":3,"file":"insert-linked-list.js","sources":["../../src/linked-list/insert-linked-list.ts"],"sourcesContent":["import { ManipulationConfig, LinkedListItem } from './type';\n\nimport {\n findPreviousId,\n assertItemCompatibility,\n assertPresence,\n assertNewNodePosition,\n} from './linked-list-utils';\n\nexport const insertLinkedList = <T extends LinkedListItem>(item: T, config: ManipulationConfig<T>) => {\n const { isDoubleLinkList, list, factory } = config;\n\n assertItemCompatibility(item, isDoubleLinkList);\n assertPresence(item.nextId, list.items);\n assertPresence(item.previousId, list.items);\n\n const previousId = isDoubleLinkList\n ? item.previousId!\n : findPreviousId(item.nextId, list);\n\n assertNewNodePosition(item, {\n previousId,\n list,\n });\n\n const newHeadId = item.nextId === list.headId ? item.id : list.headId;\n const newItems = {\n ...list.items,\n ...(previousId ? {\n [previousId]: {\n ...list.items[previousId],\n nextId: item.id,\n },\n } : {}),\n ...(isDoubleLinkList && item.nextId ? {\n [item.nextId]: {\n ...list.items[item.nextId],\n ...(isDoubleLinkList ? { previousId: item.id } : {}),\n },\n } : {}),\n [item.id]: item,\n };\n\n return factory({\n headId: newHeadId,\n items: newItems,\n });\n};\n"],"names":[],"mappings":";;MASa,gBAAgB,GAAG,CAA2B,IAAO,EAAE,MAA6B,KAAI;IACnG,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAEnD,IAAA,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAChD,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,gBAAgB;UAC/B,IAAI,CAAC,UAAW;UAChB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEtC,qBAAqB,CAAC,IAAI,EAAE;QAC1B,UAAU;QACV,IAAI;AACL,KAAA,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACtE,MAAM,QAAQ,GACT,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,IACT,UAAU,GAAG;AACf,QAAA,CAAC,UAAU,GACN,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KACzB,MAAM,EAAE,IAAI,CAAC,EAAE,EAChB,CAAA;AACF,KAAA,GAAG,EAAE,EACH,GAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,GAAG;AACpC,QAAA,CAAC,IAAI,CAAC,MAAM,GACP,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACvB,GAAC,gBAAgB,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,EACpD;AACF,KAAA,GAAG,EAAE,EACN,EAAA,EAAA,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,GAChB,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC;AACb,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA,CAAC,CAAC;AACL;;;;"}
@@ -1,11 +1,11 @@
1
1
  import { runWhile } from '../fp/run-while.js';
2
2
 
3
- var walkListItemRecord = function (callback, config) {
3
+ const walkListItemRecord = (callback, config) => {
4
4
  var _a;
5
- var items = config.items, startId = config.startId, initValue = config.initValue;
6
- var visited = new Set();
7
- var totalNodes = Object.keys(items).length;
8
- var _b = runWhile({
5
+ const { items, startId, initValue } = config;
6
+ const visited = new Set();
7
+ const totalNodes = Object.keys(items).length;
8
+ const { iterationCount, result } = runWhile({
9
9
  iterationLimit: totalNodes + 1,
10
10
  initialValue: {
11
11
  currentId: startId,
@@ -14,32 +14,31 @@ var walkListItemRecord = function (callback, config) {
14
14
  stop: false,
15
15
  },
16
16
  },
17
- predicate: function (_a) {
18
- var control = _a.control, currentId = _a.currentId;
19
- var stop = control === null || control === void 0 ? void 0 : control.stop;
20
- var forcedStop = stop === undefined ? false : stop;
17
+ predicate: ({ control, currentId }) => {
18
+ const stop = control === null || control === void 0 ? void 0 : control.stop;
19
+ const forcedStop = stop === undefined ? false : stop;
21
20
  /**
22
21
  * Stop early or when the end is reached
23
22
  */
24
23
  return !forcedStop && currentId !== null;
25
24
  },
26
- callback: function (current) {
25
+ callback: (current) => {
27
26
  if (visited.has(current.currentId)) {
28
27
  throw new Error('Infinite loop found');
29
28
  }
30
29
  visited.add(current.currentId);
31
- var currentItem = items[current.currentId];
30
+ const currentItem = items[current.currentId];
32
31
  if (!currentItem) {
33
32
  throw new Error('Cul de sac detected');
34
33
  }
35
- var _a = callback(current.accumulator, currentItem), result = _a.result, control = _a.control;
34
+ const { result, control } = callback(current.accumulator, currentItem);
36
35
  return {
37
36
  accumulator: result,
38
37
  currentId: currentItem.nextId,
39
38
  control: control,
40
39
  };
41
40
  },
42
- }), iterationCount = _b.iterationCount, result = _b.result;
41
+ });
43
42
  /**
44
43
  * When force stopping the walk, we will always have unvisited
45
44
  * nodes, so we skip this check.
@@ -49,11 +48,11 @@ var walkListItemRecord = function (callback, config) {
49
48
  }
50
49
  return result.accumulator;
51
50
  };
52
- var findPreviousId = function (id, list) {
51
+ const findPreviousId = (id, list) => {
53
52
  if (id === list.headId) {
54
53
  return null;
55
54
  }
56
- return walkListItemRecord(function (acc, current) {
55
+ return walkListItemRecord((acc, current) => {
57
56
  if (current.nextId === id) {
58
57
  return {
59
58
  result: current.id,
@@ -71,25 +70,25 @@ var findPreviousId = function (id, list) {
71
70
  items: list.items,
72
71
  });
73
72
  };
74
- var assertItemCompatibility = function (item, isDoubleLinkList) {
75
- var incompatibleWithDoubleLinks = item.previousId === undefined && isDoubleLinkList;
76
- var incompatibleWithSingleLink = item.previousId !== undefined && !isDoubleLinkList;
73
+ const assertItemCompatibility = (item, isDoubleLinkList) => {
74
+ const incompatibleWithDoubleLinks = item.previousId === undefined && isDoubleLinkList;
75
+ const incompatibleWithSingleLink = item.previousId !== undefined && !isDoubleLinkList;
77
76
  if (incompatibleWithDoubleLinks || incompatibleWithSingleLink) {
78
- throw new Error("Node is incompatible with the list (id: ".concat(item.id, ")"));
77
+ throw new Error(`Node is incompatible with the list (id: ${item.id})`);
79
78
  }
80
79
  };
81
- var assertPresence = function (id, items) {
80
+ const assertPresence = (id, items) => {
82
81
  if (id && !items[id]) {
83
- throw new Error("Node not found in the list (id: ".concat(id, ")"));
82
+ throw new Error(`Node not found in the list (id: ${id})`);
84
83
  }
85
84
  };
86
- var assertNewNodePosition = function (item, config) {
87
- var previousId = config.previousId, list = config.list;
88
- var insertionMiddleError = previousId && list.items[previousId].nextId !== item.nextId;
89
- var insertionTailError = previousId && item.nextId === null && list.items[previousId].nextId !== null;
90
- var insertionHeadError = previousId === null && item.nextId !== list.headId;
85
+ const assertNewNodePosition = (item, config) => {
86
+ const { previousId, list } = config;
87
+ const insertionMiddleError = previousId && list.items[previousId].nextId !== item.nextId;
88
+ const insertionTailError = previousId && item.nextId === null && list.items[previousId].nextId !== null;
89
+ const insertionHeadError = previousId === null && item.nextId !== list.headId;
91
90
  if (insertionMiddleError || insertionTailError || insertionHeadError) {
92
- throw new Error("Invalid position for given node (id: ".concat(item.id, ")"));
91
+ throw new Error(`Invalid position for given node (id: ${item.id})`);
93
92
  }
94
93
  };
95
94
 
@@ -1 +1 @@
1
- {"version":3,"file":"linked-list-utils.js","sources":["../../src/linked-list/linked-list-utils.ts"],"sourcesContent":["import { runWhile } from '../fp';\nimport { LinkedListItem, HeadAndItems} from './type';\n\nexport type WalkConfig<T extends LinkedListItem, Result> = {\n startId: string | null,\n items: Record<string, T>,\n initValue: Result,\n}\n\ntype WalkCallbackResult<R> = {\n result: R,\n control?: {\n stop?: boolean,\n },\n};\n\nexport type WalkCallback<Item, Result> = (accumulator: Result, current: Item) => WalkCallbackResult<Result>;\n\ntype RunWhileValue<T> = {\n currentId: string | null,\n accumulator: T,\n control: WalkCallbackResult<any>['control'],\n}\n\nexport const walkListItemRecord = <T extends LinkedListItem, Result>(\n callback: WalkCallback<T, Result>,\n config: WalkConfig<T, Result>,\n) => {\n const { items, startId, initValue } = config;\n const visited = new Set();\n const totalNodes = Object.keys(items).length;\n\n const { iterationCount, result } = runWhile({\n iterationLimit: totalNodes + 1,\n initialValue: {\n currentId: startId, \n accumulator: initValue,\n control: {\n stop: false,\n },\n } as RunWhileValue<Result>,\n predicate: ({ control, currentId }) => {\n const stop = control?.stop;\n const forcedStop = stop === undefined ? false : stop;\n\n /**\n * Stop early or when the end is reached\n */\n return !forcedStop && currentId !== null;\n },\n callback: (current) => {\n if (visited.has(current.currentId)) {\n throw new Error('Infinite loop found');\n }\n\n visited.add(current.currentId);\n\n const currentItem = items[current.currentId!];\n\n if (!currentItem) {\n throw new Error('Cul de sac detected');\n }\n\n const { result, control } = callback(current.accumulator, currentItem);\n\n return {\n accumulator: result,\n currentId: currentItem.nextId,\n control: control,\n };\n },\n });\n\n /**\n * When force stopping the walk, we will always have unvisited\n * nodes, so we skip this check.\n */\n if (iterationCount !== totalNodes && result.control?.stop !== true) {\n throw new Error('Isolated nodes found');\n }\n\n return result.accumulator;\n};\n\nexport const findPreviousId = <T extends LinkedListItem>(id: string | null, list: HeadAndItems<T>) => {\n if (id === list.headId) {\n return null;\n }\n\n return walkListItemRecord(\n (acc, current) => {\n if (current.nextId === id) {\n return {\n result: current.id,\n control: {\n stop: true,\n },\n };\n }\n\n return {\n result: acc,\n }\n },\n {\n initValue: null as null | string,\n startId: list.headId,\n items: list.items,\n }\n )\n};\n\nexport const assertItemCompatibility = <T extends LinkedListItem>(item: T, isDoubleLinkList: boolean) => {\n const incompatibleWithDoubleLinks = item.previousId === undefined && isDoubleLinkList;\n const incompatibleWithSingleLink = item.previousId !== undefined && !isDoubleLinkList;\n\n if (incompatibleWithDoubleLinks || incompatibleWithSingleLink) {\n throw new Error(`Node is incompatible with the list (id: ${item.id})`);\n }\n}\n\nexport const assertPresence = (id: string | null | undefined, items: Record<string, unknown>) => {\n if (id && !items[id]) {\n throw new Error(`Node not found in the list (id: ${id})`);\n }\n}\n\ntype PositionAssertionConfig = {\n previousId: string | null,\n list: HeadAndItems<LinkedListItem>,\n};\n\nexport const assertNewNodePosition = <T extends LinkedListItem>(item: T, config: PositionAssertionConfig) => {\n const { previousId, list } = config;\n\n const insertionMiddleError = previousId && list.items[previousId].nextId !== item.nextId;\n const insertionTailError = previousId && item.nextId === null && list.items[previousId].nextId !== null;\n const insertionHeadError = previousId === null && item.nextId !== list.headId;\n\n if (insertionMiddleError || insertionTailError || insertionHeadError) {\n throw new Error(`Invalid position for given node (id: ${item.id})`);\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linked-list-utils.js","sources":["../../src/linked-list/linked-list-utils.ts"],"sourcesContent":["import { runWhile } from '../fp';\nimport { LinkedListItem, HeadAndItems} from './type';\n\nexport type WalkConfig<T extends LinkedListItem, Result> = {\n startId: string | null,\n items: Record<string, T>,\n initValue: Result,\n}\n\ntype WalkCallbackResult<R> = {\n result: R,\n control?: {\n stop?: boolean,\n },\n};\n\nexport type WalkCallback<Item, Result> = (accumulator: Result, current: Item) => WalkCallbackResult<Result>;\n\ntype RunWhileValue<T> = {\n currentId: string | null,\n accumulator: T,\n control: WalkCallbackResult<any>['control'],\n}\n\nexport const walkListItemRecord = <T extends LinkedListItem, Result>(\n callback: WalkCallback<T, Result>,\n config: WalkConfig<T, Result>,\n) => {\n const { items, startId, initValue } = config;\n const visited = new Set();\n const totalNodes = Object.keys(items).length;\n\n const { iterationCount, result } = runWhile({\n iterationLimit: totalNodes + 1,\n initialValue: {\n currentId: startId, \n accumulator: initValue,\n control: {\n stop: false,\n },\n } as RunWhileValue<Result>,\n predicate: ({ control, currentId }) => {\n const stop = control?.stop;\n const forcedStop = stop === undefined ? false : stop;\n\n /**\n * Stop early or when the end is reached\n */\n return !forcedStop && currentId !== null;\n },\n callback: (current) => {\n if (visited.has(current.currentId)) {\n throw new Error('Infinite loop found');\n }\n\n visited.add(current.currentId);\n\n const currentItem = items[current.currentId!];\n\n if (!currentItem) {\n throw new Error('Cul de sac detected');\n }\n\n const { result, control } = callback(current.accumulator, currentItem);\n\n return {\n accumulator: result,\n currentId: currentItem.nextId,\n control: control,\n };\n },\n });\n\n /**\n * When force stopping the walk, we will always have unvisited\n * nodes, so we skip this check.\n */\n if (iterationCount !== totalNodes && result.control?.stop !== true) {\n throw new Error('Isolated nodes found');\n }\n\n return result.accumulator;\n};\n\nexport const findPreviousId = <T extends LinkedListItem>(id: string | null, list: HeadAndItems<T>) => {\n if (id === list.headId) {\n return null;\n }\n\n return walkListItemRecord(\n (acc, current) => {\n if (current.nextId === id) {\n return {\n result: current.id,\n control: {\n stop: true,\n },\n };\n }\n\n return {\n result: acc,\n }\n },\n {\n initValue: null as null | string,\n startId: list.headId,\n items: list.items,\n }\n )\n};\n\nexport const assertItemCompatibility = <T extends LinkedListItem>(item: T, isDoubleLinkList: boolean) => {\n const incompatibleWithDoubleLinks = item.previousId === undefined && isDoubleLinkList;\n const incompatibleWithSingleLink = item.previousId !== undefined && !isDoubleLinkList;\n\n if (incompatibleWithDoubleLinks || incompatibleWithSingleLink) {\n throw new Error(`Node is incompatible with the list (id: ${item.id})`);\n }\n}\n\nexport const assertPresence = (id: string | null | undefined, items: Record<string, unknown>) => {\n if (id && !items[id]) {\n throw new Error(`Node not found in the list (id: ${id})`);\n }\n}\n\ntype PositionAssertionConfig = {\n previousId: string | null,\n list: HeadAndItems<LinkedListItem>,\n};\n\nexport const assertNewNodePosition = <T extends LinkedListItem>(item: T, config: PositionAssertionConfig) => {\n const { previousId, list } = config;\n\n const insertionMiddleError = previousId && list.items[previousId].nextId !== item.nextId;\n const insertionTailError = previousId && item.nextId === null && list.items[previousId].nextId !== null;\n const insertionHeadError = previousId === null && item.nextId !== list.headId;\n\n if (insertionMiddleError || insertionTailError || insertionHeadError) {\n throw new Error(`Invalid position for given node (id: ${item.id})`);\n }\n}"],"names":[],"mappings":";;MAwBa,kBAAkB,GAAG,CAChC,QAAiC,EACjC,MAA6B,KAC3B;;IACF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AAC7C,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAE7C,IAAA,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC1C,cAAc,EAAE,UAAU,GAAG,CAAC;AAC9B,QAAA,YAAY,EAAE;AACZ,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,KAAK;AACZ,aAAA;AACuB,SAAA;QAC1B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAI;YACpC,MAAM,IAAI,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,IAAI,CAAC;AAC3B,YAAA,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC;AAErD;;AAEG;AACH,YAAA,OAAO,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC;SAC1C;AACD,QAAA,QAAQ,EAAE,CAAC,OAAO,KAAI;YACpB,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAClC,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACxC,aAAA;AAED,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE/B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC;YAE9C,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACxC,aAAA;AAED,YAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEvE,OAAO;AACL,gBAAA,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,WAAW,CAAC,MAAM;AAC7B,gBAAA,OAAO,EAAE,OAAO;aACjB,CAAC;SACH;AACF,KAAA,CAAC,CAAC;AAEH;;;AAGG;AACH,IAAA,IAAI,cAAc,KAAK,UAAU,IAAI,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,MAAK,IAAI,EAAE;AAClE,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACzC,KAAA;IAED,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,EAAE;MAEW,cAAc,GAAG,CAA2B,EAAiB,EAAE,IAAqB,KAAI;AACnG,IAAA,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE;AACtB,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,OAAO,kBAAkB,CACvB,CAAC,GAAG,EAAE,OAAO,KAAI;AACf,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE;YACzB,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,EAAE;AAClB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA;aACF,CAAC;AACH,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;SACZ,CAAA;AACH,KAAC,EACD;AACE,QAAA,SAAS,EAAE,IAAqB;QAChC,OAAO,EAAE,IAAI,CAAC,MAAM;QACpB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,KAAA,CACF,CAAA;AACH,EAAE;MAEW,uBAAuB,GAAG,CAA2B,IAAO,EAAE,gBAAyB,KAAI;IACtG,MAAM,2BAA2B,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,gBAAgB,CAAC;IACtF,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC;IAEtF,IAAI,2BAA2B,IAAI,0BAA0B,EAAE;QAC7D,MAAM,IAAI,KAAK,CAAC,CAAA,wCAAA,EAA2C,IAAI,CAAC,EAAE,CAAG,CAAA,CAAA,CAAC,CAAC;AACxE,KAAA;AACH,EAAC;MAEY,cAAc,GAAG,CAAC,EAA6B,EAAE,KAA8B,KAAI;AAC9F,IAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AACpB,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,CAAA,CAAA,CAAG,CAAC,CAAC;AAC3D,KAAA;AACH,EAAC;MAOY,qBAAqB,GAAG,CAA2B,IAAO,EAAE,MAA+B,KAAI;AAC1G,IAAA,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;AAEpC,IAAA,MAAM,oBAAoB,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IACzF,MAAM,kBAAkB,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;AACxG,IAAA,MAAM,kBAAkB,GAAG,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;AAE9E,IAAA,IAAI,oBAAoB,IAAI,kBAAkB,IAAI,kBAAkB,EAAE;QACpE,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,IAAI,CAAC,EAAE,CAAG,CAAA,CAAA,CAAC,CAAC;AACrE,KAAA;AACH;;;;"}
@@ -1,15 +1,15 @@
1
1
  import { walkListItemRecord } from './linked-list-utils.js';
2
2
 
3
- var reduceLinkedList = function (cb, initValue, list) {
4
- var items = list.items, headId = list.headId;
5
- return walkListItemRecord(function (acc, current) {
3
+ const reduceLinkedList = (cb, initValue, list) => {
4
+ const { items, headId } = list;
5
+ return walkListItemRecord((acc, current) => {
6
6
  return {
7
7
  result: cb(acc, current),
8
8
  };
9
9
  }, {
10
10
  startId: headId,
11
- items: items,
12
- initValue: initValue,
11
+ items,
12
+ initValue,
13
13
  });
14
14
  };
15
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"reduce-linked-list.js","sources":["../../src/linked-list/reduce-linked-list.ts"],"sourcesContent":["import { ReduceCallback, LinkedListItem, HeadAndItems } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const reduceLinkedList = <Item extends LinkedListItem, Result>(\n cb: ReduceCallback<Item, Result>,\n initValue: Result,\n list: HeadAndItems<Item>,\n): Result => {\n const { items, headId } = list;\n\n return walkListItemRecord((acc, current) => {\n return {\n result: cb(acc, current),\n };\n }, {\n startId: headId,\n items,\n initValue,\n });\n};\n"],"names":[],"mappings":";;IAGa,gBAAgB,GAAG,UAC9B,EAAgC,EAChC,SAAiB,EACjB,IAAwB,EAAA;IAEhB,IAAA,KAAK,GAAa,IAAI,CAAA,KAAjB,EAAE,MAAM,GAAK,IAAI,CAAA,MAAT,CAAU;AAE/B,IAAA,OAAO,kBAAkB,CAAC,UAAC,GAAG,EAAE,OAAO,EAAA;QACrC,OAAO;AACL,YAAA,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC;SACzB,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAA,KAAA;AACL,QAAA,SAAS,EAAA,SAAA;AACV,KAAA,CAAC,CAAC;AACL;;;;"}
1
+ {"version":3,"file":"reduce-linked-list.js","sources":["../../src/linked-list/reduce-linked-list.ts"],"sourcesContent":["import { ReduceCallback, LinkedListItem, HeadAndItems } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const reduceLinkedList = <Item extends LinkedListItem, Result>(\n cb: ReduceCallback<Item, Result>,\n initValue: Result,\n list: HeadAndItems<Item>,\n): Result => {\n const { items, headId } = list;\n\n return walkListItemRecord((acc, current) => {\n return {\n result: cb(acc, current),\n };\n }, {\n startId: headId,\n items,\n initValue,\n });\n};\n"],"names":[],"mappings":";;AAGa,MAAA,gBAAgB,GAAG,CAC9B,EAAgC,EAChC,SAAiB,EACjB,IAAwB,KACd;AACV,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;AAE/B,IAAA,OAAO,kBAAkB,CAAC,CAAC,GAAG,EAAE,OAAO,KAAI;QACzC,OAAO;AACL,YAAA,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC;SACzB,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,OAAO,EAAE,MAAM;QACf,KAAK;QACL,SAAS;AACV,KAAA,CAAC,CAAC;AACL;;;;"}
@@ -1,20 +1,19 @@
1
- import { __rest, __assign } from '../_virtual/_tslib.js';
1
+ import { __rest } from '../_virtual/_tslib.js';
2
2
  import { assertPresence, findPreviousId } from './linked-list-utils.js';
3
3
 
4
- var removeLinkedList = function (id, config) {
5
- var _a, _b;
6
- var isDoubleLinkList = config.isDoubleLinkList, list = config.list, factory = config.factory;
7
- var _c = list.items, _d = id, itemToDelete = _c[_d], otherItems = __rest(_c, [typeof _d === "symbol" ? _d : _d + ""]);
4
+ const removeLinkedList = (id, config) => {
5
+ const { isDoubleLinkList, list, factory } = config;
6
+ const _a = list.items, _b = id, itemToDelete = _a[_b], otherItems = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
8
7
  assertPresence(id, list.items);
9
- var previousId = isDoubleLinkList
8
+ const previousId = isDoubleLinkList
10
9
  ? itemToDelete.previousId
11
10
  : findPreviousId(id, list);
12
- var newHeadId = previousId === null ? itemToDelete.nextId : list.headId;
13
- var newItems = __assign(__assign(__assign({}, otherItems), (previousId ? (_a = {},
14
- _a[previousId] = __assign(__assign({}, otherItems[previousId]), { nextId: itemToDelete.nextId }),
15
- _a) : {})), (isDoubleLinkList && itemToDelete.nextId ? (_b = {},
16
- _b[itemToDelete.nextId] = __assign(__assign({}, otherItems[itemToDelete.nextId]), (isDoubleLinkList ? { previousId: previousId } : {})),
17
- _b) : {}));
11
+ const newHeadId = previousId === null ? itemToDelete.nextId : list.headId;
12
+ const newItems = Object.assign(Object.assign(Object.assign({}, otherItems), (previousId ? {
13
+ [previousId]: Object.assign(Object.assign({}, otherItems[previousId]), { nextId: itemToDelete.nextId }),
14
+ } : {})), (isDoubleLinkList && itemToDelete.nextId ? {
15
+ [itemToDelete.nextId]: Object.assign(Object.assign({}, otherItems[itemToDelete.nextId]), (isDoubleLinkList ? { previousId } : {}))
16
+ } : {}));
18
17
  return factory({
19
18
  headId: newHeadId,
20
19
  items: newItems,
@@ -1 +1 @@
1
- {"version":3,"file":"remove-linked-list.js","sources":["../../src/linked-list/remove-linked-list.ts"],"sourcesContent":["import { ManipulationConfig, LinkedListItem } from './type';\nimport { assertPresence, findPreviousId } from './linked-list-utils';\n\nexport const removeLinkedList = <T extends LinkedListItem>(id: string, config: ManipulationConfig<T>) => {\n const { isDoubleLinkList, list, factory } = config;\n const { [id]: itemToDelete, ...otherItems } = list.items;\n\n assertPresence(id, list.items);\n\n const previousId = isDoubleLinkList\n ? itemToDelete.previousId!\n : findPreviousId(id, list);\n\n const newHeadId = previousId === null ? itemToDelete.nextId : list.headId;\n const newItems = {\n ...otherItems,\n ...(previousId ? {\n [previousId]: {\n ...otherItems[previousId],\n nextId: itemToDelete.nextId,\n },\n } : {}),\n ...(isDoubleLinkList && itemToDelete.nextId ? {\n [itemToDelete.nextId]: {\n ...otherItems[itemToDelete.nextId],\n ...(isDoubleLinkList ? { previousId } : {}),\n }\n } : {}),\n };\n\n return factory({\n headId: newHeadId,\n items: newItems,\n });\n};"],"names":[],"mappings":";;;AAGa,IAAA,gBAAgB,GAAG,UAA2B,EAAU,EAAE,MAA6B,EAAA;;AAC1F,IAAA,IAAA,gBAAgB,GAAoB,MAAM,CAAA,gBAA1B,EAAE,IAAI,GAAc,MAAM,CAAA,IAApB,EAAE,OAAO,GAAK,MAAM,QAAX,CAAY;AACnD,IAAA,IAA8C,EAAA,GAAA,IAAI,CAAC,KAAK,EAAhD,EAAC,GAAA,EAAG,EAAE,YAAY,SAAA,EAAK,UAAU,GAAnC,MAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAAqC,CAAa,CAAC;AAEzD,IAAA,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAE/B,IAAM,UAAU,GAAG,gBAAgB;UAC/B,YAAY,CAAC,UAAW;AAC1B,UAAE,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAE7B,IAAA,IAAM,SAAS,GAAG,UAAU,KAAK,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1E,IAAA,IAAM,QAAQ,GACT,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,UAAU,IACT,UAAU,IAAE,EAAA,GAAA,EAAA;AACd,QAAA,EAAA,CAAC,UAAU,CAAA,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,UAAU,CAAC,UAAU,CAAC,CACzB,EAAA,EAAA,MAAM,EAAE,YAAY,CAAC,MAAM,EAC5B,CAAA;cACC,EAAE,EACH,GAAC,gBAAgB,IAAI,YAAY,CAAC,MAAM,IAAE,EAAA,GAAA,EAAA;QAC3C,EAAC,CAAA,YAAY,CAAC,MAAM,CACf,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAC/B,GAAC,gBAAgB,GAAG,EAAE,UAAU,EAAA,UAAA,EAAE,GAAG,EAAE,EAC3C;AACD,QAAA,EAAA,IAAE,EAAE,EACP,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC;AACb,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA,CAAC,CAAC;AACL;;;;"}
1
+ {"version":3,"file":"remove-linked-list.js","sources":["../../src/linked-list/remove-linked-list.ts"],"sourcesContent":["import { ManipulationConfig, LinkedListItem } from './type';\nimport { assertPresence, findPreviousId } from './linked-list-utils';\n\nexport const removeLinkedList = <T extends LinkedListItem>(id: string, config: ManipulationConfig<T>) => {\n const { isDoubleLinkList, list, factory } = config;\n const { [id]: itemToDelete, ...otherItems } = list.items;\n\n assertPresence(id, list.items);\n\n const previousId = isDoubleLinkList\n ? itemToDelete.previousId!\n : findPreviousId(id, list);\n\n const newHeadId = previousId === null ? itemToDelete.nextId : list.headId;\n const newItems = {\n ...otherItems,\n ...(previousId ? {\n [previousId]: {\n ...otherItems[previousId],\n nextId: itemToDelete.nextId,\n },\n } : {}),\n ...(isDoubleLinkList && itemToDelete.nextId ? {\n [itemToDelete.nextId]: {\n ...otherItems[itemToDelete.nextId],\n ...(isDoubleLinkList ? { previousId } : {}),\n }\n } : {}),\n };\n\n return factory({\n headId: newHeadId,\n items: newItems,\n });\n};"],"names":[],"mappings":";;;MAGa,gBAAgB,GAAG,CAA2B,EAAU,EAAE,MAA6B,KAAI;IACtG,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AACnD,IAAA,MAA8C,EAAA,GAAA,IAAI,CAAC,KAAK,EAAhD,EAAC,GAAA,EAAG,EAAE,YAAY,SAAA,EAAK,UAAU,GAAnC,MAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA,KAAA,QAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,CAAqC,CAAa,CAAC;AAEzD,IAAA,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,gBAAgB;UAC/B,YAAY,CAAC,UAAW;AAC1B,UAAE,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAE7B,IAAA,MAAM,SAAS,GAAG,UAAU,KAAK,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1E,MAAM,QAAQ,iDACT,UAAU,CAAA,GACT,UAAU,GAAG;AACf,QAAA,CAAC,UAAU,GACN,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,UAAU,CAAC,UAAU,CAAC,CAAA,EAAA,EACzB,MAAM,EAAE,YAAY,CAAC,MAAM,EAC5B,CAAA;AACF,KAAA,GAAG,EAAE,EACH,GAAC,gBAAgB,IAAI,YAAY,CAAC,MAAM,GAAG;QAC5C,CAAC,YAAY,CAAC,MAAM,GAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChB,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA,GAC9B,gBAAgB,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAC3C;AACF,KAAA,GAAG,EAAE,EACP,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC;AACb,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA,CAAC,CAAC;AACL;;;;"}
@@ -1,16 +1,15 @@
1
- import { __rest, __assign } from '../_virtual/_tslib.js';
1
+ import { __rest } from '../_virtual/_tslib.js';
2
2
  import { assertPresence } from './linked-list-utils.js';
3
3
 
4
- var updateLinkedList = function (item, config) {
5
- var _a;
6
- var list = config.list, factory = config.factory;
4
+ const updateLinkedList = (item, config) => {
5
+ const { list, factory } = config;
7
6
  assertPresence(item.id, list.items);
8
7
  /**
9
8
  * This method should not update any ids.
10
9
  */
11
- item.nextId; item.previousId; item.id; var updatableProperties = __rest(item, ["nextId", "previousId", "id"]);
12
- var currentItem = list.items[item.id];
13
- var newItems = __assign(__assign({}, list.items), (_a = {}, _a[item.id] = __assign(__assign({}, currentItem), updatableProperties), _a));
10
+ const updatableProperties = __rest(item, ["nextId", "previousId", "id"]);
11
+ const currentItem = list.items[item.id];
12
+ const newItems = Object.assign(Object.assign({}, list.items), { [item.id]: Object.assign(Object.assign({}, currentItem), updatableProperties) });
14
13
  return factory({
15
14
  headId: list.headId,
16
15
  items: newItems,
@@ -1 +1 @@
1
- {"version":3,"file":"update-linked-list.js","sources":["../../src/linked-list/update-linked-list.ts"],"sourcesContent":["import { ManipulationConfig, LinkedListItem } from './type';\nimport { assertPresence } from './linked-list-utils';\n\nexport const updateLinkedList = <T extends LinkedListItem>(item: T, config: ManipulationConfig<T>) => {\n const { list, factory } = config;\n\n assertPresence(item.id, list.items);\n\n /**\n * This method should not update any ids.\n */\n const { nextId, previousId, id, ...updatableProperties } = item;\n const currentItem = list.items[item.id];\n\n const newItems = {\n ...list.items,\n [item.id]: {\n ...currentItem,\n ...updatableProperties,\n },\n };\n\n return factory({\n headId: list.headId,\n items: newItems,\n });\n};\n"],"names":[],"mappings":";;;AAGa,IAAA,gBAAgB,GAAG,UAA2B,IAAO,EAAG,MAA6B,EAAA;;IACxF,IAAA,IAAI,GAAc,MAAM,CAAA,IAApB,EAAE,OAAO,GAAK,MAAM,CAAA,OAAX,CAAY;IAEjC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAEpC;;AAEG;IACwD,IAAI,CAAA,MAAjD,EAA6C,IAAI,CAArC,UAAA,CAAA,CAAiC,IAAI,GAAjC,CAAK,KAAA,mBAAmB,UAAK,IAAI,EAAzD,CAAkD,QAAA,EAAA,YAAA,EAAA,IAAA,CAAA,EAAQ;IAChE,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAExC,IAAA,IAAM,QAAQ,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACT,IAAI,CAAC,KAAK,CACZ,GAAA,EAAA,GAAA,EAAA,EAAA,EAAA,CAAA,IAAI,CAAC,EAAE,CACH,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,WAAW,CACX,EAAA,mBAAmB,OAEzB,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA,CAAC,CAAC;AACL;;;;"}
1
+ {"version":3,"file":"update-linked-list.js","sources":["../../src/linked-list/update-linked-list.ts"],"sourcesContent":["import { ManipulationConfig, LinkedListItem } from './type';\nimport { assertPresence } from './linked-list-utils';\n\nexport const updateLinkedList = <T extends LinkedListItem>(item: T, config: ManipulationConfig<T>) => {\n const { list, factory } = config;\n\n assertPresence(item.id, list.items);\n\n /**\n * This method should not update any ids.\n */\n const { nextId, previousId, id, ...updatableProperties } = item;\n const currentItem = list.items[item.id];\n\n const newItems = {\n ...list.items,\n [item.id]: {\n ...currentItem,\n ...updatableProperties,\n },\n };\n\n return factory({\n headId: list.headId,\n items: newItems,\n });\n};\n"],"names":[],"mappings":";;;MAGa,gBAAgB,GAAG,CAA2B,IAAO,EAAG,MAA6B,KAAI;AACpG,IAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEjC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAEpC;;AAEG;AACH,IAAA,MAAmC,mBAAmB,GAAK,MAAA,CAAA,IAAI,EAAzD,CAAA,QAAA,EAAA,YAAA,EAAA,IAAA,CAAkD,EAAQ;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAExC,IAAA,MAAM,QAAQ,GACT,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,KACb,CAAC,IAAI,CAAC,EAAE,GACH,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,WAAW,CACX,EAAA,mBAAmB,IAEzB,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA,CAAC,CAAC;AACL;;;;"}
@@ -1,15 +1,14 @@
1
- import { __spreadArray } from '../_virtual/_tslib.js';
2
1
  import { walkListItemRecord } from './linked-list-utils.js';
3
2
 
4
- var whileLinkedList = function (predicate, list, startId) {
3
+ const whileLinkedList = (predicate, list, startId) => {
5
4
  if (startId && !list.items[startId]) {
6
5
  throw new Error('Cannot start from a node that does not exist');
7
6
  }
8
- return walkListItemRecord(function (acc, item) {
9
- var itemMatched = predicate(item);
7
+ return walkListItemRecord((acc, item) => {
8
+ const itemMatched = predicate(item);
10
9
  if (itemMatched) {
11
10
  return {
12
- result: __spreadArray(__spreadArray([], acc, true), [item.id], false),
11
+ result: [...acc, item.id],
13
12
  };
14
13
  }
15
14
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"while-linked-list.js","sources":["../../src/linked-list/while-linked-list.ts"],"sourcesContent":["\n\nimport { LinkedListItem, ItemPredicate, HeadAndItems } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const whileLinkedList = <Item extends LinkedListItem>(\n predicate: ItemPredicate<Item>,\n list: HeadAndItems<Item>,\n startId?: string,\n): string[] => {\n if (startId && !list.items[startId]) {\n throw new Error('Cannot start from a node that does not exist');\n }\n\n return walkListItemRecord(\n (acc, item) => {\n const itemMatched = predicate(item);\n\n if (itemMatched) {\n return {\n result: [...acc, item.id],\n };\n }\n\n return {\n result: acc,\n control: {\n stop: true,\n },\n };\n }, {\n initValue: [] as string[],\n startId: startId || list.headId,\n items: list.items,\n },\n );\n};\n"],"names":[],"mappings":";;;IAKa,eAAe,GAAG,UAC7B,SAA8B,EAC9B,IAAwB,EACxB,OAAgB,EAAA;IAEhB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACnC,QAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACjE,KAAA;AAED,IAAA,OAAO,kBAAkB,CACvB,UAAC,GAAG,EAAE,IAAI,EAAA;AACR,QAAA,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpC,QAAA,IAAI,WAAW,EAAE;YACf,OAAO;AACL,gBAAA,MAAM,kCAAM,GAAG,EAAA,IAAA,CAAA,EAAA,CAAE,IAAI,CAAC,EAAE,CAAC,EAAA,KAAA,CAAA;aAC1B,CAAC;AACH,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;SACF,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,SAAS,EAAE,EAAc;AACzB,QAAA,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,KAAA,CACF,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"while-linked-list.js","sources":["../../src/linked-list/while-linked-list.ts"],"sourcesContent":["\n\nimport { LinkedListItem, ItemPredicate, HeadAndItems } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const whileLinkedList = <Item extends LinkedListItem>(\n predicate: ItemPredicate<Item>,\n list: HeadAndItems<Item>,\n startId?: string,\n): string[] => {\n if (startId && !list.items[startId]) {\n throw new Error('Cannot start from a node that does not exist');\n }\n\n return walkListItemRecord(\n (acc, item) => {\n const itemMatched = predicate(item);\n\n if (itemMatched) {\n return {\n result: [...acc, item.id],\n };\n }\n\n return {\n result: acc,\n control: {\n stop: true,\n },\n };\n }, {\n initValue: [] as string[],\n startId: startId || list.headId,\n items: list.items,\n },\n );\n};\n"],"names":[],"mappings":";;AAKa,MAAA,eAAe,GAAG,CAC7B,SAA8B,EAC9B,IAAwB,EACxB,OAAgB,KACJ;IACZ,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACnC,QAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACjE,KAAA;AAED,IAAA,OAAO,kBAAkB,CACvB,CAAC,GAAG,EAAE,IAAI,KAAI;AACZ,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpC,QAAA,IAAI,WAAW,EAAE;YACf,OAAO;gBACL,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;aAC1B,CAAC;AACH,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;SACF,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,SAAS,EAAE,EAAc;AACzB,QAAA,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,KAAA,CACF,CAAC;AACJ;;;;"}
@@ -1,8 +1,7 @@
1
1
  import { assertNumberRange } from './number-range.js';
2
2
 
3
- var clampNumber = function (num, _a) {
4
- var min = _a.min, max = _a.max;
5
- assertNumberRange({ min: min, max: max });
3
+ const clampNumber = (num, { min, max }) => {
4
+ assertNumberRange({ min, max });
6
5
  return Math.min(Math.max(num, min), max);
7
6
  };
8
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"clamp-number.js","sources":["../../src/math/clamp-number.ts"],"sourcesContent":["import { assertNumberRange } from './number-range';\nimport type { NumberRange } from './number-range';\n\nexport const clampNumber = (num: number, { min, max }: NumberRange) => {\n assertNumberRange({ min, max });\n\n return Math.min(Math.max(num, min), max);\n};"],"names":[],"mappings":";;AAGa,IAAA,WAAW,GAAG,UAAC,GAAW,EAAE,EAAyB,EAAA;QAAvB,GAAG,GAAA,EAAA,CAAA,GAAA,EAAE,GAAG,GAAA,EAAA,CAAA,GAAA,CAAA;IACjD,iBAAiB,CAAC,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC,CAAC;AAEhC,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3C;;;;"}
1
+ {"version":3,"file":"clamp-number.js","sources":["../../src/math/clamp-number.ts"],"sourcesContent":["import { assertNumberRange } from './number-range';\nimport type { NumberRange } from './number-range';\n\nexport const clampNumber = (num: number, { min, max }: NumberRange) => {\n assertNumberRange({ min, max });\n\n return Math.min(Math.max(num, min), max);\n};"],"names":[],"mappings":";;AAGO,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAe,KAAI;AACpE,IAAA,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAEhC,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3C;;;;"}
@@ -1,13 +1,13 @@
1
1
  import { isNumberInRange } from './number-range.js';
2
2
 
3
- var interpolate = function (num, inputRange, outputRange) {
4
- var x1 = inputRange[0], x2 = inputRange[1];
5
- var y1 = outputRange[0], y2 = outputRange[1];
3
+ const interpolate = (num, inputRange, outputRange) => {
4
+ const [x1, x2] = inputRange;
5
+ const [y1, y2] = outputRange;
6
6
  if (x1 > x2) {
7
7
  throw new Error('interpolate: inputRange[0] should not be superior to inputRange[1]');
8
8
  }
9
9
  if (!isNumberInRange(num, { min: x1, max: x2 })) {
10
- throw new Error("interpolate: input number {".concat(num, "} is not in range of {").concat(x1, "}-{").concat(x2, "}"));
10
+ throw new Error(`interpolate: input number {${num}} is not in range of {${x1}}-{${x2}}`);
11
11
  }
12
12
  return y1 + ((num - x1) / (x2 - x1)) * (y2 - y1);
13
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"interpolate.js","sources":["../../src/math/interpolate.ts"],"sourcesContent":["import { isNumberInRange } from './number-range';\n\nexport type RangeArray = [number, number];\n\nexport const interpolate = (num: number, inputRange: RangeArray, outputRange: RangeArray) => {\n const [x1, x2] = inputRange;\n const [y1, y2] = outputRange;\n\n if (x1 > x2) {\n throw new Error('interpolate: inputRange[0] should not be superior to inputRange[1]');\n }\n\n if (!isNumberInRange(num, { min: x1, max: x2 })) {\n throw new Error(`interpolate: input number {${num}} is not in range of {${x1}}-{${x2}}`);\n }\n\n return y1 + ((num - x1) / (x2 - x1)) * (y2 - y1);\n};"],"names":[],"mappings":";;IAIa,WAAW,GAAG,UAAC,GAAW,EAAE,UAAsB,EAAE,WAAuB,EAAA;IAC/E,IAAA,EAAE,GAAQ,UAAU,CAAA,CAAA,CAAlB,EAAE,EAAE,GAAI,UAAU,CAAA,CAAA,CAAd,CAAe;IACrB,IAAA,EAAE,GAAQ,WAAW,CAAA,CAAA,CAAnB,EAAE,EAAE,GAAI,WAAW,CAAA,CAAA,CAAf,CAAgB;IAE7B,IAAI,EAAE,GAAG,EAAE,EAAE;AACX,QAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;AACvF,KAAA;AAED,IAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QAC/C,MAAM,IAAI,KAAK,CAAC,6BAA8B,CAAA,MAAA,CAAA,GAAG,EAAyB,wBAAA,CAAA,CAAA,MAAA,CAAA,EAAE,EAAM,KAAA,CAAA,CAAA,MAAA,CAAA,EAAE,EAAG,GAAA,CAAA,CAAC,CAAC;AAC1F,KAAA;IAED,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACnD;;;;"}
1
+ {"version":3,"file":"interpolate.js","sources":["../../src/math/interpolate.ts"],"sourcesContent":["import { isNumberInRange } from './number-range';\n\nexport type RangeArray = [number, number];\n\nexport const interpolate = (num: number, inputRange: RangeArray, outputRange: RangeArray) => {\n const [x1, x2] = inputRange;\n const [y1, y2] = outputRange;\n\n if (x1 > x2) {\n throw new Error('interpolate: inputRange[0] should not be superior to inputRange[1]');\n }\n\n if (!isNumberInRange(num, { min: x1, max: x2 })) {\n throw new Error(`interpolate: input number {${num}} is not in range of {${x1}}-{${x2}}`);\n }\n\n return y1 + ((num - x1) / (x2 - x1)) * (y2 - y1);\n};"],"names":[],"mappings":";;AAIa,MAAA,WAAW,GAAG,CAAC,GAAW,EAAE,UAAsB,EAAE,WAAuB,KAAI;AAC1F,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC;AAC5B,IAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC;IAE7B,IAAI,EAAE,GAAG,EAAE,EAAE;AACX,QAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;AACvF,KAAA;AAED,IAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QAC/C,MAAM,IAAI,KAAK,CAAC,CAA8B,2BAAA,EAAA,GAAG,CAAyB,sBAAA,EAAA,EAAE,CAAM,GAAA,EAAA,EAAE,CAAG,CAAA,CAAA,CAAC,CAAC;AAC1F,KAAA;IAED,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACnD;;;;"}
@@ -1,11 +1,10 @@
1
- var assertNumberRange = function (range) {
1
+ const assertNumberRange = (range) => {
2
2
  if (range.min > range.max) {
3
3
  throw new Error('Invalid number range: min must be lower than or equal to max');
4
4
  }
5
5
  };
6
- var isNumberInRange = function (num, _a) {
7
- var min = _a.min, max = _a.max;
8
- assertNumberRange({ min: min, max: max });
6
+ const isNumberInRange = (num, { min, max }) => {
7
+ assertNumberRange({ min, max });
9
8
  return num >= min && num <= max;
10
9
  };
11
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"number-range.js","sources":["../../src/math/number-range.ts"],"sourcesContent":["export type NumberRange = {\n min: number,\n max: number,\n};\n\nexport const assertNumberRange = (range: NumberRange) => {\n if (range.min > range.max) {\n throw new Error('Invalid number range: min must be lower than or equal to max');\n }\n};\n\nexport const isNumberInRange = (num: number, { min, max }: NumberRange) => {\n assertNumberRange({ min, max });\n\n return num >= min && num <= max;\n};\n"],"names":[],"mappings":"AAKO,IAAM,iBAAiB,GAAG,UAAC,KAAkB,EAAA;AAClD,IAAA,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;AACjF,KAAA;AACH,EAAE;AAEW,IAAA,eAAe,GAAG,UAAC,GAAW,EAAE,EAAyB,EAAA;QAAvB,GAAG,GAAA,EAAA,CAAA,GAAA,EAAE,GAAG,GAAA,EAAA,CAAA,GAAA,CAAA;IACrD,iBAAiB,CAAC,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC,CAAC;AAEhC,IAAA,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;AAClC;;;;"}
1
+ {"version":3,"file":"number-range.js","sources":["../../src/math/number-range.ts"],"sourcesContent":["export type NumberRange = {\n min: number,\n max: number,\n};\n\nexport const assertNumberRange = (range: NumberRange) => {\n if (range.min > range.max) {\n throw new Error('Invalid number range: min must be lower than or equal to max');\n }\n};\n\nexport const isNumberInRange = (num: number, { min, max }: NumberRange) => {\n assertNumberRange({ min, max });\n\n return num >= min && num <= max;\n};\n"],"names":[],"mappings":"AAKa,MAAA,iBAAiB,GAAG,CAAC,KAAkB,KAAI;AACtD,IAAA,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;AACjF,KAAA;AACH,EAAE;AAEK,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAe,KAAI;AACxE,IAAA,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAEhC,IAAA,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;AAClC;;;;"}
@@ -1,8 +1,7 @@
1
1
  import { assertNumberRange } from './number-range.js';
2
2
 
3
- var randomNumber = function (_a) {
4
- var min = _a.min, max = _a.max;
5
- assertNumberRange({ min: min, max: max });
3
+ const randomNumber = ({ min, max }) => {
4
+ assertNumberRange({ min, max });
6
5
  return Math.floor(Math.random() * (max - min) + min);
7
6
  };
8
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"random-number.js","sources":["../../src/math/random-number.ts"],"sourcesContent":["import { assertNumberRange } from './number-range';\nimport type { NumberRange } from './number-range';\n\nexport const randomNumber = ({ min, max }: NumberRange) => {\n assertNumberRange({ min, max });\n\n return Math.floor(\n Math.random() * (max - min) + min,\n );\n};\n"],"names":[],"mappings":";;AAGO,IAAM,YAAY,GAAG,UAAC,EAAyB,EAAA;QAAvB,GAAG,GAAA,EAAA,CAAA,GAAA,EAAE,GAAG,GAAA,EAAA,CAAA,GAAA,CAAA;IACrC,iBAAiB,CAAC,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC,CAAC;AAEhC,IAAA,OAAO,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAClC,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"random-number.js","sources":["../../src/math/random-number.ts"],"sourcesContent":["import { assertNumberRange } from './number-range';\nimport type { NumberRange } from './number-range';\n\nexport const randomNumber = ({ min, max }: NumberRange) => {\n assertNumberRange({ min, max });\n\n return Math.floor(\n Math.random() * (max - min) + min,\n );\n};\n"],"names":[],"mappings":";;AAGa,MAAA,YAAY,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAe,KAAI;AACxD,IAAA,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAEhC,IAAA,OAAO,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAClC,CAAC;AACJ;;;;"}
@@ -1,22 +1,19 @@
1
- import { __assign } from '../_virtual/_tslib.js';
2
-
3
1
  // https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript/8511350#8511350
4
- var isObject = function (a) { return typeof a === 'object' && a !== null; };
5
- var isValueType = function (a) { return (!isObject(a) || Array.isArray(a)); };
6
- var mergeDeep = function (a, b) {
2
+ const isObject = (a) => typeof a === 'object' && a !== null;
3
+ const isValueType = (a) => (!isObject(a) || Array.isArray(a));
4
+ const mergeDeep = (a, b) => {
7
5
  if (isValueType(a) || isValueType(b)) {
8
6
  return b;
9
7
  }
10
- return Object.keys(b).reduce(function (acc, key) {
11
- var _a;
8
+ return Object.keys(b).reduce((acc, key) => {
12
9
  if (!(key in a)) {
13
10
  return acc;
14
11
  }
15
12
  if (b[key] === a[key]) {
16
13
  return acc;
17
14
  }
18
- var merged = mergeDeep(a[key], b[key]);
19
- return __assign(__assign({}, acc), (_a = {}, _a[key] = merged, _a));
15
+ const merged = mergeDeep(a[key], b[key]);
16
+ return Object.assign(Object.assign({}, acc), { [key]: merged });
20
17
  }, a);
21
18
  };
22
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"merge-deep.js","sources":["../../src/object/merge-deep.ts"],"sourcesContent":["import type { DeepPartial, ValueType } from '../types';\n\n// https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript/8511350#8511350\nconst isObject = (a: any) => typeof a === 'object' && a !== null;\nconst isValueType = (a: any): a is ValueType => (\n !isObject(a) || Array.isArray(a)\n);\n\nexport const mergeDeep = <T>(a: T, b: DeepPartial<T>): T => {\n if (isValueType(a) || isValueType(b)) {\n return b as T;\n }\n\n return (Object.keys(b) as (keyof T)[]).reduce((acc, key) => {\n if (!(key in a)) {\n return acc;\n }\n\n if (b[key] === a[key]) {\n return acc;\n }\n\n const merged = mergeDeep(a[key], (b[key] as DeepPartial<T[keyof T]>));\n\n return { ...acc, [key]: merged };\n }, a);\n};\n"],"names":[],"mappings":";;AAEA;AACA,IAAM,QAAQ,GAAG,UAAC,CAAM,EAAA,EAAK,OAAA,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAA,EAAA,CAAC;AACjE,IAAM,WAAW,GAAG,UAAC,CAAM,IAAqB,QAC9C,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EADc,EAE/C,CAAC;AAEW,IAAA,SAAS,GAAG,UAAI,CAAI,EAAE,CAAiB,EAAA;IAClD,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;AACpC,QAAA,OAAO,CAAM,CAAC;AACf,KAAA;AAED,IAAA,OAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAiB,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG,EAAA;;AACrD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE;AACf,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;QAED,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AAED,QAAA,IAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAA6B,CAAC,CAAC;AAEtE,QAAA,OAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAY,GAAG,CAAA,GAAA,EAAA,GAAA,EAAA,EAAA,EAAA,CAAG,GAAG,CAAA,GAAG,MAAM,EAAG,EAAA,EAAA,CAAA;KAClC,EAAE,CAAC,CAAC,CAAC;AACR;;;;"}
1
+ {"version":3,"file":"merge-deep.js","sources":["../../src/object/merge-deep.ts"],"sourcesContent":["import type { DeepPartial, ValueType } from '../types';\n\n// https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript/8511350#8511350\nconst isObject = (a: any) => typeof a === 'object' && a !== null;\nconst isValueType = (a: any): a is ValueType => (\n !isObject(a) || Array.isArray(a)\n);\n\nexport const mergeDeep = <T>(a: T, b: DeepPartial<T>): T => {\n if (isValueType(a) || isValueType(b)) {\n return b as T;\n }\n\n return (Object.keys(b) as (keyof T)[]).reduce((acc, key) => {\n if (!(key in a)) {\n return acc;\n }\n\n if (b[key] === a[key]) {\n return acc;\n }\n\n const merged = mergeDeep(a[key], (b[key] as DeepPartial<T[keyof T]>));\n\n return { ...acc, [key]: merged };\n }, a);\n};\n"],"names":[],"mappings":"AAEA;AACA,MAAM,QAAQ,GAAG,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC;AACjE,MAAM,WAAW,GAAG,CAAC,CAAM,MACzB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACjC,CAAC;MAEW,SAAS,GAAG,CAAI,CAAI,EAAE,CAAiB,KAAO;IACzD,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;AACpC,QAAA,OAAO,CAAM,CAAC;AACf,KAAA;AAED,IAAA,OAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AACzD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE;AACf,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;QAED,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAG,CAAC,CAAC,GAAG,CAA6B,CAAC,CAAC;AAEtE,QAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,GAAG,CAAE,EAAA,EAAA,CAAC,GAAG,GAAG,MAAM,EAAG,CAAA,CAAA;KAClC,EAAE,CAAC,CAAC,CAAC;AACR;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sparted/shared-library",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "repository": "git@github.com:Sparted/shared-library.git",
5
5
  "author": "Thomas <duprethomasfr@gmail.com>",
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Parse a string to a boolean. Throw error if string is neither "true" nor "false"
3
3
  */
4
- var parseBoolean = function (value) {
4
+ const parseBoolean = (value) => {
5
5
  if (value !== 'true' && value !== 'false') {
6
6
  throw new Error('Cannot parse value');
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-boolean.js","sources":["../../src/parsing/parse-boolean.ts"],"sourcesContent":["/**\n * Parse a string to a boolean. Throw error if string is neither \"true\" nor \"false\"\n */\n export const parseBoolean = (value: string): boolean => {\n if (value !== 'true' && value !== 'false') {\n throw new Error('Cannot parse value');\n }\n\n return value === 'true';\n};\n"],"names":[],"mappings":"AAAA;;AAEG;AACK,IAAM,YAAY,GAAG,UAAC,KAAa,EAAA;AACzC,IAAA,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE;AACzC,QAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACvC,KAAA;IAED,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B;;;;"}
1
+ {"version":3,"file":"parse-boolean.js","sources":["../../src/parsing/parse-boolean.ts"],"sourcesContent":["/**\n * Parse a string to a boolean. Throw error if string is neither \"true\" nor \"false\"\n */\n export const parseBoolean = (value: string): boolean => {\n if (value !== 'true' && value !== 'false') {\n throw new Error('Cannot parse value');\n }\n\n return value === 'true';\n};\n"],"names":[],"mappings":"AAAA;;AAEG;AACW,MAAA,YAAY,GAAG,CAAC,KAAa,KAAa;AACtD,IAAA,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE;AACzC,QAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACvC,KAAA;IAED,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B;;;;"}