@sparted/shared-library 0.0.18 → 1.0.1-O
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.circleci/config.yml +40 -0
- package/.eslintignore +1 -0
- package/.eslintrc.js +17 -0
- package/.gitignore +37 -0
- package/CHANGELOG.md +43 -0
- package/README.md +26 -0
- package/{array → dist/array}/array-to-map.d.ts +1 -1
- package/{array → dist/array}/array-to-map.js +1 -1
- package/dist/array/array-to-map.js.map +1 -0
- package/{array → dist/array}/get-values-from-keys.js +1 -3
- package/dist/array/get-values-from-keys.js.map +1 -0
- package/dist/cdn/cdn.factory.d.ts +11 -0
- package/dist/cdn/cdn.factory.js +59 -0
- package/dist/cdn/cdn.factory.js.map +1 -0
- package/dist/cdn/index.d.ts +2 -0
- package/dist/cdn/index.js +10 -0
- package/dist/cdn/types/cdn-factory.type.d.ts +26 -0
- package/dist/cdn/types/index.d.ts +1 -0
- package/dist/cdn/utils/extract-info-from-url.util.d.ts +6 -0
- package/dist/cdn/utils/extract-info-from-url.util.js +20 -0
- package/dist/cdn/utils/extract-info-from-url.util.js.map +1 -0
- package/dist/cdn/utils/get-cdn-from-s3-url.util.d.ts +6 -0
- package/dist/cdn/utils/get-cdn-from-s3-url.util.js +20 -0
- package/dist/cdn/utils/get-cdn-from-s3-url.util.js.map +1 -0
- package/dist/cdn/utils/get-cdn-url.util.d.ts +8 -0
- package/dist/cdn/utils/get-cdn-url.util.js +13 -0
- package/dist/cdn/utils/get-cdn-url.util.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/{index.js → dist/index.js} +8 -3
- package/{index.js.map → dist/index.js.map} +1 -1
- package/dist/linked-list/apply-diff-linked-list.js.map +1 -0
- package/{linked-list → dist/linked-list}/create-linked-list.js +2 -2
- package/dist/linked-list/create-linked-list.js.map +1 -0
- package/dist/linked-list/find-linked-list.js +26 -0
- package/dist/linked-list/find-linked-list.js.map +1 -0
- package/{linked-list → dist/linked-list}/get-linked-list.js.map +1 -1
- package/{linked-list → dist/linked-list}/linked-list-utils.js +3 -3
- package/dist/linked-list/linked-list-utils.js.map +1 -0
- package/{linked-list → dist/linked-list}/reduce-linked-list.js +3 -5
- package/dist/linked-list/reduce-linked-list.js.map +1 -0
- package/{linked-list → dist/linked-list}/remove-linked-list.js +1 -1
- package/dist/linked-list/remove-linked-list.js.map +1 -0
- package/dist/linked-list/update-linked-list.js.map +1 -0
- package/dist/linked-list/while-linked-list.js.map +1 -0
- package/dist/math/clamp-number.js.map +1 -0
- package/dist/math/interpolate.js.map +1 -0
- package/dist/package.json +61 -0
- package/dist/parsing/parse-boolean.js.map +1 -0
- package/dist/parsing/parse-enum.js.map +1 -0
- package/dist/parsing/parse-number.js.map +1 -0
- package/{predicates → dist/predicates}/is-function.js +1 -3
- package/dist/predicates/is-function.js.map +1 -0
- package/{predicates → dist/predicates}/is-null.js +1 -3
- package/dist/predicates/is-null.js.map +1 -0
- package/{predicates → dist/predicates}/is-object.js +1 -3
- package/dist/predicates/is-object.js.map +1 -0
- package/{predicates → dist/predicates}/is-primitive.js +1 -3
- package/dist/predicates/is-primitive.js.map +1 -0
- package/{predicates → dist/predicates}/is-undefined.js +1 -3
- package/dist/predicates/is-undefined.js.map +1 -0
- package/dist/string/index.js.map +1 -0
- package/dist/time/constants.js.map +1 -0
- package/dist/time/convert.js.map +1 -0
- package/{date → dist/time}/format-minutes.js.map +1 -1
- package/dist/time/get-time-diff-as-string.js.map +1 -0
- package/{date → dist/time}/index.d.ts +1 -1
- package/{date → dist/time}/index.js +3 -0
- package/dist/time/index.js.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/global.d.ts +2 -0
- package/package.json +13 -2
- package/rollup.config.ts +15 -0
- package/src/array/__tests__/array-to-map.test.ts +50 -0
- package/src/array/__tests__/get-values-from-keys.test.ts +14 -0
- package/src/array/array-to-map.ts +32 -0
- package/src/array/get-values-from-keys.ts +3 -0
- package/src/array/index.ts +2 -0
- package/src/cdn/__tests__/cdn.factory.test.ts +126 -0
- package/src/cdn/__tests__/utils.test.ts +466 -0
- package/src/cdn/cdn.factory.ts +73 -0
- package/src/cdn/index.ts +2 -0
- package/src/cdn/types/cdn-factory.type.ts +39 -0
- package/src/cdn/types/index.ts +1 -0
- package/src/cdn/utils/extract-info-from-url.util.ts +25 -0
- package/src/cdn/utils/get-cdn-from-s3-url.util.ts +20 -0
- package/src/cdn/utils/get-cdn-url.util.ts +26 -0
- package/src/formatting/__tests__/format-number.test.ts +11 -0
- package/src/formatting/format-number.ts +14 -0
- package/src/formatting/index.ts +1 -0
- package/src/fp/__tests__/run-while.test.ts +29 -0
- package/src/fp/index.ts +1 -0
- package/src/fp/run-while.ts +54 -0
- package/src/http/__tests__/build-search-params.test.ts +17 -0
- package/src/http/__tests__/encode-search-object.test.ts +34 -0
- package/src/http/__tests__/fetch-with-timeout.test.ts +50 -0
- package/src/http/build-search-params.ts +18 -0
- package/src/http/encode-search-object.ts +39 -0
- package/src/http/fetch-with-timeout.ts +24 -0
- package/src/http/index.ts +3 -0
- package/{index.d.ts → src/index.ts} +14 -13
- package/src/linked-list/__tests__/apply-diff-linked-list.test.ts +103 -0
- package/src/linked-list/__tests__/create-linked-list.test.ts +204 -0
- package/src/linked-list/__tests__/find-linked-list.test.ts +40 -0
- package/src/linked-list/__tests__/get-linked-list.test.ts +28 -0
- package/src/linked-list/__tests__/insert-linked-list.test.ts +186 -0
- package/src/linked-list/__tests__/linked-list-utils.test.ts +252 -0
- package/src/linked-list/__tests__/reduce-linked-list.test.ts +31 -0
- package/src/linked-list/__tests__/remove-linked-list.test.ts +129 -0
- package/src/linked-list/__tests__/update-linked-list.test.ts +53 -0
- package/src/linked-list/__tests__/while-linked-list.test.ts +58 -0
- package/src/linked-list/apply-diff-linked-list.ts +35 -0
- package/src/linked-list/create-linked-list.ts +79 -0
- package/src/linked-list/find-linked-list.ts +26 -0
- package/src/linked-list/get-linked-list.ts +9 -0
- package/src/linked-list/index.ts +2 -0
- package/src/linked-list/insert-linked-list.ts +50 -0
- package/src/linked-list/linked-list-utils.ts +143 -0
- package/src/linked-list/reduce-linked-list.ts +18 -0
- package/src/linked-list/remove-linked-list.ts +36 -0
- package/src/linked-list/type.ts +38 -0
- package/src/linked-list/update-linked-list.ts +29 -0
- package/src/linked-list/while-linked-list.ts +33 -0
- package/src/math/__tests__/clamp-number.test.ts +30 -0
- package/src/math/__tests__/interpolate.test.ts +28 -0
- package/src/math/__tests__/number-range.test.ts +59 -0
- package/src/math/__tests__/random-number.test.ts +11 -0
- package/src/math/clamp-number.ts +8 -0
- package/src/math/index.ts +4 -0
- package/src/math/interpolate.ts +18 -0
- package/src/math/number-range.ts +16 -0
- package/src/math/random-number.ts +10 -0
- package/src/object/__tests__/merge-deep.test.ts +56 -0
- package/src/object/index.ts +1 -0
- package/src/object/merge-deep.ts +27 -0
- package/src/parsing/__tests__/parse-boolean.test.ts +15 -0
- package/src/parsing/__tests__/parse-enum.test.ts +19 -0
- package/src/parsing/__tests__/parse-number.test.ts +20 -0
- package/src/parsing/index.ts +3 -0
- package/src/parsing/parse-boolean.ts +10 -0
- package/src/parsing/parse-enum.ts +16 -0
- package/src/parsing/parse-number.ts +12 -0
- package/src/predicates/__tests__/is-function.test.ts +11 -0
- package/src/predicates/__tests__/is-null.test.ts +11 -0
- package/src/predicates/__tests__/is-object.test.ts +11 -0
- package/src/predicates/__tests__/is-primitive.test.ts +42 -0
- package/src/predicates/__tests__/is-undefined.test.ts +11 -0
- package/src/predicates/__tests__/is-uuid.test.ts +13 -0
- package/src/predicates/index.ts +5 -0
- package/src/predicates/is-function.ts +3 -0
- package/src/predicates/is-null.ts +3 -0
- package/src/predicates/is-object.ts +3 -0
- package/src/predicates/is-primitive.ts +19 -0
- package/src/predicates/is-undefined.ts +3 -0
- package/src/predicates/is-uuid.ts +3 -0
- package/src/promise/__tests__/delay.test.ts +13 -0
- package/src/promise/__tests__/execute-or-resolve-default.test.ts +25 -0
- package/src/promise/__tests__/execute-with-delay.test.ts +24 -0
- package/src/promise/delay.ts +3 -0
- package/src/promise/execute-or-resolve-default.ts +14 -0
- package/src/promise/execute-with-delay.ts +6 -0
- package/src/promise/index.ts +3 -0
- package/src/string/__tests__/replace-in-template.test.ts +52 -0
- package/src/string/index.ts +1 -0
- package/src/string/replace-in-template.ts +45 -0
- package/src/time/__tests__/convert.test.ts +14 -0
- package/src/time/__tests__/format-minutes.test.ts +10 -0
- package/src/time/__tests__/get-time-diff-as-string.test.ts +128 -0
- package/src/time/constants.ts +4 -0
- package/src/time/convert.ts +5 -0
- package/src/time/format-minutes.ts +9 -0
- package/src/time/get-time-diff-as-string.ts +196 -0
- package/src/time/index.ts +4 -0
- package/src/types/function.ts +1 -0
- package/src/types/general.ts +10 -0
- package/src/types/index.ts +4 -0
- package/src/types/object.ts +33 -0
- package/src/types/search.ts +29 -0
- package/tsconfig.eslint.json +8 -0
- package/tsconfig.json +25 -0
- package/yarn.lock +4028 -0
- package/array/array-to-map.js.map +0 -1
- package/array/get-values-from-keys.js.map +0 -1
- package/date/constants.js.map +0 -1
- package/date/convert.js.map +0 -1
- package/date/get-time-diff-as-string.js.map +0 -1
- package/linked-list/apply-diff-linked-list.js.map +0 -1
- package/linked-list/create-linked-list.js.map +0 -1
- package/linked-list/find-linked-list.js +0 -28
- package/linked-list/find-linked-list.js.map +0 -1
- package/linked-list/linked-list-utils.js.map +0 -1
- package/linked-list/reduce-linked-list.js.map +0 -1
- package/linked-list/remove-linked-list.js.map +0 -1
- package/linked-list/update-linked-list.js.map +0 -1
- package/linked-list/while-linked-list.js.map +0 -1
- package/math/clamp-number.js.map +0 -1
- package/math/index.js.map +0 -1
- package/math/interpolate.js.map +0 -1
- package/parsing/parse-boolean.js.map +0 -1
- package/parsing/parse-enum.js.map +0 -1
- package/parsing/parse-number.js.map +0 -1
- package/predicates/is-function.js.map +0 -1
- package/predicates/is-null.js.map +0 -1
- package/predicates/is-object.js.map +0 -1
- package/predicates/is-primitive.js.map +0 -1
- package/predicates/is-undefined.js.map +0 -1
- /package/{_virtual → dist/_virtual}/_tslib.js +0 -0
- /package/{_virtual → dist/_virtual}/_tslib.js.map +0 -0
- /package/{array → dist/array}/get-values-from-keys.d.ts +0 -0
- /package/{array → dist/array}/index.d.ts +0 -0
- /package/{array → dist/array}/index.js +0 -0
- /package/{array → dist/array}/index.js.map +0 -0
- /package/{formatting → dist/cdn}/index.js.map +0 -0
- /package/{types → dist/cdn/types}/index.js +0 -0
- /package/{types → dist/cdn/types}/index.js.map +0 -0
- /package/{formatting → dist/formatting}/format-number.d.ts +0 -0
- /package/{formatting → dist/formatting}/format-number.js +0 -0
- /package/{formatting → dist/formatting}/format-number.js.map +0 -0
- /package/{formatting → dist/formatting}/index.d.ts +0 -0
- /package/{formatting → dist/formatting}/index.js +0 -0
- /package/{fp → dist/formatting}/index.js.map +0 -0
- /package/{fp → dist/fp}/index.d.ts +0 -0
- /package/{fp → dist/fp}/index.js +0 -0
- /package/{linked-list → dist/fp}/index.js.map +0 -0
- /package/{fp → dist/fp}/run-while.d.ts +0 -0
- /package/{fp → dist/fp}/run-while.js +0 -0
- /package/{fp → dist/fp}/run-while.js.map +0 -0
- /package/{http → dist/http}/encode-search-object.d.ts +0 -0
- /package/{http → dist/http}/encode-search-object.js +0 -0
- /package/{http → dist/http}/encode-search-object.js.map +0 -0
- /package/{http → dist/http}/fetch-with-timeout.d.ts +0 -0
- /package/{http → dist/http}/fetch-with-timeout.js +0 -0
- /package/{http → dist/http}/fetch-with-timeout.js.map +0 -0
- /package/{http → dist/http}/index.d.ts +0 -0
- /package/{http → dist/http}/index.js +0 -0
- /package/{http → dist/http}/index.js.map +0 -0
- /package/{linked-list → dist/linked-list}/apply-diff-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/apply-diff-linked-list.js +0 -0
- /package/{linked-list → dist/linked-list}/create-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/find-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/get-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/get-linked-list.js +0 -0
- /package/{linked-list → dist/linked-list}/index.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/index.js +0 -0
- /package/{object → dist/linked-list}/index.js.map +0 -0
- /package/{linked-list → dist/linked-list}/insert-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/insert-linked-list.js +0 -0
- /package/{linked-list → dist/linked-list}/insert-linked-list.js.map +0 -0
- /package/{linked-list → dist/linked-list}/linked-list-utils.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/reduce-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/remove-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/type.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/update-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/update-linked-list.js +0 -0
- /package/{linked-list → dist/linked-list}/while-linked-list.d.ts +0 -0
- /package/{linked-list → dist/linked-list}/while-linked-list.js +0 -0
- /package/{math → dist/math}/clamp-number.d.ts +0 -0
- /package/{math → dist/math}/clamp-number.js +0 -0
- /package/{math → dist/math}/index.d.ts +0 -0
- /package/{math → dist/math}/index.js +0 -0
- /package/{date → dist/math}/index.js.map +0 -0
- /package/{math → dist/math}/interpolate.d.ts +0 -0
- /package/{math → dist/math}/interpolate.js +0 -0
- /package/{math → dist/math}/number-range.d.ts +0 -0
- /package/{math → dist/math}/number-range.js +0 -0
- /package/{math → dist/math}/number-range.js.map +0 -0
- /package/{math → dist/math}/random-number.d.ts +0 -0
- /package/{math → dist/math}/random-number.js +0 -0
- /package/{math → dist/math}/random-number.js.map +0 -0
- /package/{object → dist/object}/index.d.ts +0 -0
- /package/{object → dist/object}/index.js +0 -0
- /package/{string → dist/object}/index.js.map +0 -0
- /package/{object → dist/object}/merge-deep.d.ts +0 -0
- /package/{object → dist/object}/merge-deep.js +0 -0
- /package/{object → dist/object}/merge-deep.js.map +0 -0
- /package/{parsing → dist/parsing}/index.d.ts +0 -0
- /package/{parsing → dist/parsing}/index.js +0 -0
- /package/{parsing → dist/parsing}/index.js.map +0 -0
- /package/{parsing → dist/parsing}/parse-boolean.d.ts +0 -0
- /package/{parsing → dist/parsing}/parse-boolean.js +0 -0
- /package/{parsing → dist/parsing}/parse-enum.d.ts +0 -0
- /package/{parsing → dist/parsing}/parse-enum.js +0 -0
- /package/{parsing → dist/parsing}/parse-number.d.ts +0 -0
- /package/{parsing → dist/parsing}/parse-number.js +0 -0
- /package/{predicates → dist/predicates}/index.d.ts +0 -0
- /package/{predicates → dist/predicates}/index.js +0 -0
- /package/{predicates → dist/predicates}/index.js.map +0 -0
- /package/{predicates → dist/predicates}/is-function.d.ts +0 -0
- /package/{predicates → dist/predicates}/is-null.d.ts +0 -0
- /package/{predicates → dist/predicates}/is-object.d.ts +0 -0
- /package/{predicates → dist/predicates}/is-primitive.d.ts +0 -0
- /package/{predicates → dist/predicates}/is-undefined.d.ts +0 -0
- /package/{predicates → dist/predicates}/is-uuid.d.ts +0 -0
- /package/{promise → dist/promise}/delay.d.ts +0 -0
- /package/{promise → dist/promise}/delay.js +0 -0
- /package/{promise → dist/promise}/delay.js.map +0 -0
- /package/{promise → dist/promise}/execute-or-resolve-default.d.ts +0 -0
- /package/{promise → dist/promise}/execute-or-resolve-default.js +0 -0
- /package/{promise → dist/promise}/execute-or-resolve-default.js.map +0 -0
- /package/{promise → dist/promise}/execute-with-delay.d.ts +0 -0
- /package/{promise → dist/promise}/execute-with-delay.js +0 -0
- /package/{promise → dist/promise}/execute-with-delay.js.map +0 -0
- /package/{promise → dist/promise}/index.d.ts +0 -0
- /package/{promise → dist/promise}/index.js +0 -0
- /package/{promise → dist/promise}/index.js.map +0 -0
- /package/{string → dist/string}/index.d.ts +0 -0
- /package/{string → dist/string}/index.js +0 -0
- /package/{string → dist/string}/replace-in-template.d.ts +0 -0
- /package/{string → dist/string}/replace-in-template.js +0 -0
- /package/{string → dist/string}/replace-in-template.js.map +0 -0
- /package/{date → dist/time}/constants.d.ts +0 -0
- /package/{date → dist/time}/constants.js +0 -0
- /package/{date → dist/time}/convert.d.ts +0 -0
- /package/{date → dist/time}/convert.js +0 -0
- /package/{date → dist/time}/format-minutes.d.ts +0 -0
- /package/{date → dist/time}/format-minutes.js +0 -0
- /package/{date → dist/time}/get-time-diff-as-string.d.ts +0 -0
- /package/{date → dist/time}/get-time-diff-as-string.js +0 -0
- /package/{types → dist/types}/function.d.ts +0 -0
- /package/{types → dist/types}/general.d.ts +0 -0
- /package/{types → dist/types}/index.d.ts +0 -0
- /package/{types → dist/types}/object.d.ts +0 -0
- /package/{types → dist/types}/search.d.ts +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Javascript Node CircleCI 2.0 configuration file
|
|
2
|
+
#
|
|
3
|
+
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
|
|
4
|
+
#
|
|
5
|
+
version: 2.1
|
|
6
|
+
jobs:
|
|
7
|
+
test:
|
|
8
|
+
docker:
|
|
9
|
+
- image: cimg/node:18.10.0
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- checkout
|
|
13
|
+
|
|
14
|
+
- run:
|
|
15
|
+
name: Set npm token
|
|
16
|
+
command: 'echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc'
|
|
17
|
+
|
|
18
|
+
- run:
|
|
19
|
+
name: Install node modules
|
|
20
|
+
command: yarn
|
|
21
|
+
|
|
22
|
+
- run:
|
|
23
|
+
name: Check lint
|
|
24
|
+
command: yarn lint
|
|
25
|
+
|
|
26
|
+
- run:
|
|
27
|
+
name: Run tests
|
|
28
|
+
# Limit resources as the default parameters overload the CPU of the machine and makes tests hang
|
|
29
|
+
command: yarn test --maxWorkers=50%
|
|
30
|
+
|
|
31
|
+
- run:
|
|
32
|
+
name: Build
|
|
33
|
+
command: yarn build
|
|
34
|
+
|
|
35
|
+
workflows:
|
|
36
|
+
version: 2
|
|
37
|
+
|
|
38
|
+
autodeploy:
|
|
39
|
+
jobs:
|
|
40
|
+
- test
|
package/.eslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dist/
|
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
env: {
|
|
3
|
+
es2021: true,
|
|
4
|
+
node: true,
|
|
5
|
+
},
|
|
6
|
+
extends: '@sparted',
|
|
7
|
+
parserOptions: {
|
|
8
|
+
project: './tsconfig.eslint.json',
|
|
9
|
+
},
|
|
10
|
+
rules: {
|
|
11
|
+
// Preference for this project
|
|
12
|
+
'import/prefer-default-export': 'off',
|
|
13
|
+
|
|
14
|
+
// Preference for this project
|
|
15
|
+
'object-curly-newline': 'off',
|
|
16
|
+
},
|
|
17
|
+
};
|
package/.gitignore
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
*.dat
|
|
2
|
+
*.iml
|
|
3
|
+
*.log
|
|
4
|
+
*.out
|
|
5
|
+
*.pid
|
|
6
|
+
*.seed
|
|
7
|
+
*.sublime-*
|
|
8
|
+
*.swo
|
|
9
|
+
*.swp
|
|
10
|
+
*.tgz
|
|
11
|
+
*.xml
|
|
12
|
+
.tmp
|
|
13
|
+
.env
|
|
14
|
+
doc/*.json
|
|
15
|
+
|
|
16
|
+
# Mac Related files
|
|
17
|
+
.DS_Store
|
|
18
|
+
|
|
19
|
+
# IDE Related Files
|
|
20
|
+
.idea
|
|
21
|
+
.project
|
|
22
|
+
|
|
23
|
+
# eslint
|
|
24
|
+
.eslintcache
|
|
25
|
+
|
|
26
|
+
# jest
|
|
27
|
+
jest-stare
|
|
28
|
+
|
|
29
|
+
# JS Related files
|
|
30
|
+
bower_components
|
|
31
|
+
npm-debug.log
|
|
32
|
+
node_modules
|
|
33
|
+
nestjs/node_modules
|
|
34
|
+
.npmrc
|
|
35
|
+
|
|
36
|
+
# Build
|
|
37
|
+
dist
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
## 1.0.10
|
|
2
|
+
- Add valueOf type
|
|
3
|
+
|
|
4
|
+
## 1.0.9
|
|
5
|
+
- Add option to remove image compression
|
|
6
|
+
|
|
7
|
+
## 1.0.8
|
|
8
|
+
- Fix crash when passing undefined to extractInfoFromUrl function
|
|
9
|
+
|
|
10
|
+
## 1.0.7
|
|
11
|
+
- Fix Twicpics resizing
|
|
12
|
+
|
|
13
|
+
## 1.0.6
|
|
14
|
+
- Add current map to `dataModifier` function on `arrayToMap`
|
|
15
|
+
|
|
16
|
+
## 1.0.5
|
|
17
|
+
- CDN abstraction for Imgix and Twicpics
|
|
18
|
+
|
|
19
|
+
## 1.0.0
|
|
20
|
+
- Breaking change: rename date folder into time
|
|
21
|
+
- Export convertion functions from time
|
|
22
|
+
|
|
23
|
+
## 0.0.18
|
|
24
|
+
- Change update behavior to fully replace updated items
|
|
25
|
+
|
|
26
|
+
## 0.0.17
|
|
27
|
+
- Remove error thrown when not every items have been visisted
|
|
28
|
+
|
|
29
|
+
## 0.0.16
|
|
30
|
+
- Fix an issue when initializing an empty linked list
|
|
31
|
+
|
|
32
|
+
## 0.0.15
|
|
33
|
+
- Rollback target version, change output format
|
|
34
|
+
|
|
35
|
+
## 0.0.14
|
|
36
|
+
- Bump target version in tsconfig
|
|
37
|
+
|
|
38
|
+
## 0.0.13
|
|
39
|
+
- Bring most utilities from the back-office, mobile-app and nest to this package (#32q6ude)
|
|
40
|
+
|
|
41
|
+
## 0.0.1
|
|
42
|
+
- Library initialisation (#2ykhvcg)
|
|
43
|
+
- Fix files taken as packaged
|
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Shared-library
|
|
2
|
+
|
|
3
|
+
Regroup low levels utils to share across Sparted's projects. Nothing should be platform specific and it should ideally not depend on any external library.
|
|
4
|
+
|
|
5
|
+
# Publishing
|
|
6
|
+
|
|
7
|
+
Since we want to be able to do the following sub imports when using the library:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { function1, function2 } from '@sparted/shared-library/array';
|
|
11
|
+
import { function3, function4 } from '@sparted/shared-library/strings';
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
While also being able to import everything from the root.
|
|
15
|
+
|
|
16
|
+
We'll need to do some rollup/npm trickery to keep everything tree-shakable and intuitive.
|
|
17
|
+
|
|
18
|
+
To do so, we copy the package.json inside the generated dist folder when building the library. Then we run `npm publish` from inside the dist folder.
|
|
19
|
+
|
|
20
|
+
What this do, is take everything inside the dist folder and publish as its standalone package. This enables us to import directly from `@sparted/shared-library/array` without adding `dist` since `dist/array` becomes a root folder. If we do not do this and instead run `npm publish` in the root directory, the package would keep the folder structure and we would need to add `dist` in imports. eg: `@sparted/shared-library/dist/array`.
|
|
21
|
+
|
|
22
|
+
## How to publish
|
|
23
|
+
|
|
24
|
+
1. Update the `package.json` version
|
|
25
|
+
2. Run `yarn build-and-publish` (this command assumes the `package.json` version was not already published)
|
|
26
|
+
3. The new version should be commited and pushed
|
|
@@ -6,7 +6,7 @@ export declare type ArrayToMapOptions<InitialValue, ModifiedValue = InitialValue
|
|
|
6
6
|
/**
|
|
7
7
|
* Transform the initial data into another value
|
|
8
8
|
*/
|
|
9
|
-
dataModifier?: (value: InitialValue) => ModifiedValue;
|
|
9
|
+
dataModifier?: (value: InitialValue, map: Readonly<Record<string, ModifiedValue>>) => ModifiedValue;
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* Transform an array to a map.
|
|
@@ -10,7 +10,7 @@ const arrayToMap = (array, options) => {
|
|
|
10
10
|
return array.reduce((acc, current) => {
|
|
11
11
|
const key = selectKey(current);
|
|
12
12
|
const value = options.dataModifier
|
|
13
|
-
? options.dataModifier(current)
|
|
13
|
+
? options.dataModifier(current, acc)
|
|
14
14
|
: current;
|
|
15
15
|
return Object.assign(Object.assign({}, acc), { [key]: value });
|
|
16
16
|
}, {});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-to-map.js","sources":["../../src/array/array-to-map.ts"],"sourcesContent":["export type ArrayToMapOptions<InitialValue, ModifiedValue = InitialValue> = {\n /**\n * Function to return the key used in the map.\n */\n selectKey: (value: InitialValue) => string,\n /**\n * Transform the initial data into another value\n */\n dataModifier?: (value: InitialValue, map: Readonly<Record<string, ModifiedValue>>) => ModifiedValue;\n};\n\n/**\n * Transform an array to a map.\n */\nexport const arrayToMap = <InitialValue, ModifiedValue = InitialValue>(\n array: ReadonlyArray<InitialValue>,\n options: ArrayToMapOptions<InitialValue, ModifiedValue>,\n) => {\n const { selectKey } = options;\n\n return array.reduce<Record<string, ModifiedValue>>((acc, current) => {\n const key = selectKey(current);\n const value = options.dataModifier\n ? options.dataModifier(current, acc)\n : current;\n\n return {\n ...acc,\n [key]: value as ModifiedValue,\n };\n }, {});\n};\n"],"names":[],"mappings":";;;;AAWA;;AAEG;MACU,UAAU,GAAG,CACxB,KAAkC,EAClC,OAAuD,KACrD;AACF,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE9B,OAAO,KAAK,CAAC,MAAM,CAAgC,CAAC,GAAG,EAAE,OAAO,KAAI;AAClE,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY;cAC9B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;cAClC,OAAO,CAAC;AAEZ,QAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,GAAG,CACN,EAAA,EAAA,CAAC,GAAG,GAAG,KAAsB,EAC7B,CAAA,CAAA;KACH,EAAE,EAAE,CAAC,CAAC;AACT;;;;"}
|
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
const valuesFromKeys = (keys, map) =>
|
|
6
|
-
return keys.map((key) => map[key]);
|
|
7
|
-
};
|
|
5
|
+
const valuesFromKeys = (keys, map) => (keys.map((key) => map[key]));
|
|
8
6
|
|
|
9
7
|
exports.valuesFromKeys = valuesFromKeys;
|
|
10
8
|
//# sourceMappingURL=get-values-from-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-values-from-keys.js","sources":["../../src/array/get-values-from-keys.ts"],"sourcesContent":["export const valuesFromKeys = <T>(keys: string[], map: Record<string, T>) => (\n keys.map((key) => map[key])\n);\n"],"names":[],"mappings":";;;;AAAa,MAAA,cAAc,GAAG,CAAI,IAAc,EAAE,GAAsB,MACtE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CreateCdn, TransformationQueries } from './types';
|
|
2
|
+
export declare const imgixTransformationQueries: TransformationQueries;
|
|
3
|
+
export declare const twicpicsTransformationQueries: TransformationQueries;
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param type cdn provider: 'twicpics' | 'imgix'
|
|
7
|
+
* @param domain provider domain
|
|
8
|
+
* @param instanceMapper domain + the result of the instanceMapper will form the base path
|
|
9
|
+
* @returns \{ getCdnUrl, transformationQueries \}
|
|
10
|
+
*/
|
|
11
|
+
export declare const createCdn: CreateCdn;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var getCdnFromS3Url_util = require('./utils/get-cdn-from-s3-url.util.js');
|
|
6
|
+
var getCdnUrl_util = require('./utils/get-cdn-url.util.js');
|
|
7
|
+
|
|
8
|
+
const imgixTransformationQueries = ({ fit, devicePixelRatio, height, width, quality, }) => [
|
|
9
|
+
'?auto=compress,format',
|
|
10
|
+
fit === 'crop' ? '&fit=crop' : '',
|
|
11
|
+
Number.isFinite(devicePixelRatio) ? `&dpr=${devicePixelRatio}` : '',
|
|
12
|
+
Number.isFinite(height) ? `&h=${height}` : '',
|
|
13
|
+
Number.isFinite(width) ? `&w=${width}` : '',
|
|
14
|
+
quality !== undefined && quality >= 0 && quality <= 100
|
|
15
|
+
? `&q=${quality}`
|
|
16
|
+
: '',
|
|
17
|
+
].join('');
|
|
18
|
+
const twicpicsTransformationQueries = (params) => {
|
|
19
|
+
if (params.fit !== undefined) {
|
|
20
|
+
if (params.width === undefined || params.height === undefined) {
|
|
21
|
+
// eslint-disable-next-line no-console
|
|
22
|
+
console.error('⚠️ The Twicpics api needs a width and a height.');
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
return `?twic=v1/${params.fit}=${params.width}x${params.height}`;
|
|
26
|
+
}
|
|
27
|
+
if (params.width !== undefined) {
|
|
28
|
+
const resizeHeight = params.height !== undefined ? `x${params.height}` : '';
|
|
29
|
+
return `?twic=v1/cover=${params.width}${resizeHeight}`;
|
|
30
|
+
}
|
|
31
|
+
return '';
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* @param type cdn provider: 'twicpics' | 'imgix'
|
|
36
|
+
* @param domain provider domain
|
|
37
|
+
* @param instanceMapper domain + the result of the instanceMapper will form the base path
|
|
38
|
+
* @returns \{ getCdnUrl, transformationQueries \}
|
|
39
|
+
*/
|
|
40
|
+
const createCdn = ({ type, domain, instanceMapper }) => {
|
|
41
|
+
const getCdnUrl = getCdnUrl_util.getCdnUrlFactory({
|
|
42
|
+
domain,
|
|
43
|
+
instanceMapper,
|
|
44
|
+
transformationQueries: type === 'imgix'
|
|
45
|
+
? imgixTransformationQueries
|
|
46
|
+
: twicpicsTransformationQueries,
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
getCdnUrl,
|
|
50
|
+
getCdnFromS3Url: getCdnFromS3Url_util.getCdnFromS3UrlFactory({
|
|
51
|
+
getCdnUrl,
|
|
52
|
+
}),
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.createCdn = createCdn;
|
|
57
|
+
exports.imgixTransformationQueries = imgixTransformationQueries;
|
|
58
|
+
exports.twicpicsTransformationQueries = twicpicsTransformationQueries;
|
|
59
|
+
//# sourceMappingURL=cdn.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdn.factory.js","sources":["../../src/cdn/cdn.factory.ts"],"sourcesContent":["import type { CreateCdn, TransformationQueries } from './types';\nimport { getCdnFromS3UrlFactory } from './utils/get-cdn-from-s3-url.util';\nimport { getCdnUrlFactory } from './utils/get-cdn-url.util';\n\nexport const imgixTransformationQueries: TransformationQueries = ({\n fit,\n devicePixelRatio,\n height,\n width,\n quality,\n}) => [\n '?auto=compress,format',\n fit === 'crop' ? '&fit=crop' : '',\n Number.isFinite(devicePixelRatio) ? `&dpr=${devicePixelRatio}` : '',\n Number.isFinite(height) ? `&h=${height}` : '',\n Number.isFinite(width) ? `&w=${width}` : '',\n quality !== undefined && quality >= 0 && quality <= 100\n ? `&q=${quality}`\n : '',\n].join('');\n\nexport const twicpicsTransformationQueries: TransformationQueries = (\n params,\n) => {\n if (params.fit !== undefined) {\n if (params.width === undefined || params.height === undefined) {\n // eslint-disable-next-line no-console\n console.error('⚠️ The Twicpics api needs a width and a height.');\n return '';\n }\n return `?twic=v1/${params.fit}=${params.width}x${params.height}`;\n }\n if (params.width !== undefined) {\n const resizeHeight = params.height !== undefined ? `x${params.height}` : '';\n return `?twic=v1/cover=${params.width}${resizeHeight}`;\n }\n return '';\n};\n\n/**\n *\n * @param type cdn provider: 'twicpics' | 'imgix'\n * @param domain provider domain\n * @param instanceMapper domain + the result of the instanceMapper will form the base path\n * @returns \\{ getCdnUrl, transformationQueries \\}\n */\nexport const createCdn: CreateCdn = ({ type, domain, instanceMapper }) => {\n const getCdnUrl = getCdnUrlFactory({\n domain,\n instanceMapper,\n transformationQueries:\n type === 'imgix'\n ? imgixTransformationQueries\n : twicpicsTransformationQueries,\n });\n\n return {\n getCdnUrl,\n getCdnFromS3Url: getCdnFromS3UrlFactory({\n getCdnUrl,\n }),\n };\n};\n"],"names":["getCdnUrlFactory","getCdnFromS3UrlFactory"],"mappings":";;;;;;;AAIa,MAAA,0BAA0B,GAA0B,CAAC,EAChE,GAAG,EACH,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,GACR,KAAK;IACJ,uBAAuB;IACvB,GAAG,KAAK,MAAM,GAAG,WAAW,GAAG,EAAE;AACjC,IAAA,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAA,KAAA,EAAQ,gBAAgB,CAAA,CAAE,GAAG,EAAE;AACnE,IAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAA,GAAA,EAAM,MAAM,CAAA,CAAE,GAAG,EAAE;AAC7C,IAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,GAAG,EAAE;IAC3C,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,GAAG;UACnD,CAAM,GAAA,EAAA,OAAO,CAAE,CAAA;AACjB,UAAE,EAAE;AACP,CAAA,CAAC,IAAI,CAAC,EAAE,EAAE;AAEE,MAAA,6BAA6B,GAA0B,CAClE,MAAM,KACJ;AACF,IAAA,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;QAC5B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;;AAE7D,YAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAClE,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,CAAY,SAAA,EAAA,MAAM,CAAC,GAAG,CAAI,CAAA,EAAA,MAAM,CAAC,KAAK,CAAI,CAAA,EAAA,MAAM,CAAC,MAAM,EAAE,CAAC;AAClE,KAAA;AACD,IAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;AAC9B,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,GAAG,CAAI,CAAA,EAAA,MAAM,CAAC,MAAM,CAAA,CAAE,GAAG,EAAE,CAAC;AAC5E,QAAA,OAAO,kBAAkB,MAAM,CAAC,KAAK,CAAG,EAAA,YAAY,EAAE,CAAC;AACxD,KAAA;AACD,IAAA,OAAO,EAAE,CAAC;AACZ,EAAE;AAEF;;;;;;AAMG;AACI,MAAM,SAAS,GAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,KAAI;IACvE,MAAM,SAAS,GAAGA,+BAAgB,CAAC;QACjC,MAAM;QACN,cAAc;QACd,qBAAqB,EACnB,IAAI,KAAK,OAAO;AACd,cAAE,0BAA0B;AAC5B,cAAE,6BAA6B;AACpC,KAAA,CAAC,CAAC;IAEH,OAAO;QACL,SAAS;QACT,eAAe,EAAEC,2CAAsB,CAAC;YACtC,SAAS;SACV,CAAC;KACH,CAAC;AACJ;;;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare type BaseUrlMapperFunc = (instanceId: string) => string;
|
|
2
|
+
export declare type Transformation = {
|
|
3
|
+
fit?: 'crop' | 'contain';
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
devicePixelRatio?: number;
|
|
7
|
+
quality?: number;
|
|
8
|
+
};
|
|
9
|
+
export declare type CdnParams = {
|
|
10
|
+
asThumbnail?: boolean;
|
|
11
|
+
transformation?: Transformation;
|
|
12
|
+
};
|
|
13
|
+
export declare type TransformationQueries = (params: Transformation) => string;
|
|
14
|
+
export declare type GetCdnUrl = (instanceId: string, path: `/${string}`, params?: CdnParams) => string;
|
|
15
|
+
export declare type GetCdnFromS3Url = (url: string, params?: CdnParams) => string;
|
|
16
|
+
export declare type InstanceMapper = (instanceId: string) => string;
|
|
17
|
+
export declare type CdnConfig = {
|
|
18
|
+
type: 'twicpics' | 'imgix';
|
|
19
|
+
domain: `https://${string}`;
|
|
20
|
+
instanceMapper: InstanceMapper;
|
|
21
|
+
};
|
|
22
|
+
export declare type Cdn = {
|
|
23
|
+
getCdnUrl: GetCdnUrl;
|
|
24
|
+
getCdnFromS3Url: GetCdnFromS3Url;
|
|
25
|
+
};
|
|
26
|
+
export declare type CreateCdn = (config: CdnConfig) => Cdn;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './cdn-factory.type';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const S3_URL_RE = /https:\/\/sparted-prod-([^.]+)\.s3(\.eu-west-1)?(\.amazonaws\.com)?(\.fr-par\.scw\.cloud)?(\/[^?]+)/;
|
|
6
|
+
const extractInfoFromUrl = (url) => {
|
|
7
|
+
if (typeof url !== 'string') {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const matchS3Url = url.match(S3_URL_RE);
|
|
11
|
+
if (!matchS3Url) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const instanceId = matchS3Url[1];
|
|
15
|
+
const path = matchS3Url[5];
|
|
16
|
+
return { instanceId, path };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
exports.extractInfoFromUrl = extractInfoFromUrl;
|
|
20
|
+
//# sourceMappingURL=extract-info-from-url.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-info-from-url.util.js","sources":["../../../src/cdn/utils/extract-info-from-url.util.ts"],"sourcesContent":["type ExtractInfoFromUrl = (url: string) =>\n| {\n instanceId: string;\n path: `/${string}`;\n}\n| undefined;\n\nconst S3_URL_RE = /https:\\/\\/sparted-prod-([^.]+)\\.s3(\\.eu-west-1)?(\\.amazonaws\\.com)?(\\.fr-par\\.scw\\.cloud)?(\\/[^?]+)/;\n\nexport const extractInfoFromUrl: ExtractInfoFromUrl = (url) => {\n if (typeof url !== 'string') {\n return undefined;\n }\n\n const matchS3Url = url.match(S3_URL_RE);\n\n if (!matchS3Url) {\n return undefined;\n }\n\n const instanceId = matchS3Url[1];\n const path = matchS3Url[5] as `/${string}`;\n\n return { instanceId, path };\n};\n"],"names":[],"mappings":";;;;AAOA,MAAM,SAAS,GAAG,qGAAqG,CAAC;AAE3G,MAAA,kBAAkB,GAAuB,CAAC,GAAG,KAAI;AAC5D,IAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;AAED,IAAA,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACjC,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAiB,CAAC;AAE3C,IAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9B;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var extractInfoFromUrl_util = require('./extract-info-from-url.util.js');
|
|
6
|
+
|
|
7
|
+
function getCdnFromS3UrlFactory(config) {
|
|
8
|
+
return (url, params) => {
|
|
9
|
+
const { getCdnUrl } = config;
|
|
10
|
+
const info = extractInfoFromUrl_util.extractInfoFromUrl(url);
|
|
11
|
+
if (info === undefined) {
|
|
12
|
+
return url;
|
|
13
|
+
}
|
|
14
|
+
const { instanceId, path } = info;
|
|
15
|
+
return getCdnUrl(instanceId, path, params);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.getCdnFromS3UrlFactory = getCdnFromS3UrlFactory;
|
|
20
|
+
//# sourceMappingURL=get-cdn-from-s3-url.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-cdn-from-s3-url.util.js","sources":["../../../src/cdn/utils/get-cdn-from-s3-url.util.ts"],"sourcesContent":["import type { GetCdnFromS3Url, GetCdnUrl } from '../types';\nimport { extractInfoFromUrl } from './extract-info-from-url.util';\n\ntype FactoryConfig = {\n getCdnUrl: GetCdnUrl;\n};\n\nexport function getCdnFromS3UrlFactory(config: FactoryConfig): GetCdnFromS3Url {\n return (url, params) => {\n const { getCdnUrl } = config;\n\n const info = extractInfoFromUrl(url);\n if (info === undefined) {\n return url;\n }\n const { instanceId, path } = info;\n\n return getCdnUrl(instanceId, path, params);\n };\n}\n"],"names":["extractInfoFromUrl"],"mappings":";;;;;;AAOM,SAAU,sBAAsB,CAAC,MAAqB,EAAA;AAC1D,IAAA,OAAO,CAAC,GAAG,EAAE,MAAM,KAAI;AACrB,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;AAE7B,QAAA,MAAM,IAAI,GAAGA,0CAAkB,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AACD,QAAA,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAElC,OAAO,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7C,KAAC,CAAC;AACJ;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GetCdnUrl, InstanceMapper, TransformationQueries } from '../types';
|
|
2
|
+
declare type FactoryConfig = {
|
|
3
|
+
domain: `https://${string}`;
|
|
4
|
+
instanceMapper: InstanceMapper;
|
|
5
|
+
transformationQueries: TransformationQueries;
|
|
6
|
+
};
|
|
7
|
+
export declare const getCdnUrlFactory: (config: FactoryConfig) => GetCdnUrl;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const DEFAULT_THUMBNAIL_CONFIG = { width: 300, height: 300 };
|
|
6
|
+
const getCdnUrlFactory = (config) => (instanceId, path, params = {}) => {
|
|
7
|
+
const { domain, instanceMapper, transformationQueries } = config;
|
|
8
|
+
const { transformation = params.asThumbnail ? DEFAULT_THUMBNAIL_CONFIG : {}, } = params;
|
|
9
|
+
return `${domain}${instanceMapper(instanceId)}${path}${transformationQueries(transformation)}`;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.getCdnUrlFactory = getCdnUrlFactory;
|
|
13
|
+
//# sourceMappingURL=get-cdn-url.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-cdn-url.util.js","sources":["../../../src/cdn/utils/get-cdn-url.util.ts"],"sourcesContent":["import type {\n GetCdnUrl,\n InstanceMapper,\n Transformation,\n TransformationQueries,\n} from '../types';\n\nconst DEFAULT_THUMBNAIL_CONFIG: Transformation = { width: 300, height: 300 };\n\ntype FactoryConfig = {\n domain: `https://${string}`;\n instanceMapper: InstanceMapper;\n transformationQueries: TransformationQueries;\n};\n\nexport const getCdnUrlFactory = (config: FactoryConfig): GetCdnUrl => (instanceId, path, params = {}) => {\n const { domain, instanceMapper, transformationQueries } = config;\n\n const {\n transformation = params.asThumbnail ? DEFAULT_THUMBNAIL_CONFIG : {},\n } = params;\n\n return `${domain}${instanceMapper(\n instanceId,\n )}${path}${transformationQueries(transformation)}`;\n};\n"],"names":[],"mappings":";;;;AAOA,MAAM,wBAAwB,GAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAQhE,MAAA,gBAAgB,GAAG,CAAC,MAAqB,KAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,KAAI;IACtG,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC;AAEjE,IAAA,MAAM,EACJ,cAAc,GAAG,MAAM,CAAC,WAAW,GAAG,wBAAwB,GAAG,EAAE,GACpE,GAAG,MAAM,CAAC;AAEX,IAAA,OAAO,CAAG,EAAA,MAAM,CAAG,EAAA,cAAc,CAC/B,UAAU,CACX,CAAG,EAAA,IAAI,GAAG,qBAAqB,CAAC,cAAc,CAAC,EAAE,CAAC;AACrD;;;;"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './array';
|
|
2
|
+
export * from './cdn';
|
|
3
|
+
export * from './time';
|
|
4
|
+
export * from './formatting';
|
|
5
|
+
export * from './fp';
|
|
6
|
+
export * from './http';
|
|
7
|
+
export * from './linked-list';
|
|
8
|
+
export * from './math';
|
|
9
|
+
export * from './object';
|
|
10
|
+
export * from './parsing';
|
|
11
|
+
export * from './predicates';
|
|
12
|
+
export * from './promise';
|
|
13
|
+
export * from './string';
|
|
14
|
+
export * from './types';
|
|
@@ -4,9 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var arrayToMap = require('./array/array-to-map.js');
|
|
6
6
|
var getValuesFromKeys = require('./array/get-values-from-keys.js');
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
7
|
+
var cdn_factory = require('./cdn/cdn.factory.js');
|
|
8
|
+
var constants = require('./time/constants.js');
|
|
9
|
+
var convert = require('./time/convert.js');
|
|
10
|
+
var formatMinutes = require('./time/format-minutes.js');
|
|
11
|
+
var getTimeDiffAsString = require('./time/get-time-diff-as-string.js');
|
|
10
12
|
var formatNumber = require('./formatting/format-number.js');
|
|
11
13
|
var runWhile = require('./fp/run-while.js');
|
|
12
14
|
var encodeSearchObject = require('./http/encode-search-object.js');
|
|
@@ -34,10 +36,13 @@ var replaceInTemplate = require('./string/replace-in-template.js');
|
|
|
34
36
|
|
|
35
37
|
exports.arrayToMap = arrayToMap.arrayToMap;
|
|
36
38
|
exports.valuesFromKeys = getValuesFromKeys.valuesFromKeys;
|
|
39
|
+
exports.createCdn = cdn_factory.createCdn;
|
|
37
40
|
exports.MS_DAY = constants.MS_DAY;
|
|
38
41
|
exports.MS_HOUR = constants.MS_HOUR;
|
|
39
42
|
exports.MS_MINUTE = constants.MS_MINUTE;
|
|
40
43
|
exports.MS_SECOND = constants.MS_SECOND;
|
|
44
|
+
exports.msToHour = convert.msToHour;
|
|
45
|
+
exports.msToMinute = convert.msToMinute;
|
|
41
46
|
exports.formatMinutes = formatMinutes.formatMinutes;
|
|
42
47
|
exports.getTimeDiffAsString = getTimeDiffAsString.getTimeDiffAsString;
|
|
43
48
|
exports.formatNumber = formatNumber.formatNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-diff-linked-list.js","sources":["../../src/linked-list/apply-diff-linked-list.ts"],"sourcesContent":["import { LinkedList, LinkedListItem } from './type';\n\nexport const applyDiffLinkedList = <T extends LinkedListItem>(\n before: T | null,\n after: T | null,\n list: LinkedList<T>,\n) => {\n // Delete\n if (!after && before) {\n return list.remove(before.id);\n }\n\n // Insert\n if (!before && after) {\n return list.insert(after);\n }\n\n // For the following commands, none of the 2 items can be null\n // We dont use && because checks are already done above, but ts cannot infer that they cannot be null afterwards\n if (!before || !after) {\n throw new Error('Cannot have both before & after as null');\n }\n\n if (before.id !== after.id) {\n throw new Error('Cannot change id of a ListNode');\n }\n\n const listWithPotentialReorder = before.nextId === after.nextId\n ? list\n : list\n .remove(before.id)\n .insert(after);\n\n return listWithPotentialReorder.update(after);\n};\n"],"names":[],"mappings":";;;;AAEa,MAAA,mBAAmB,GAAG,CACjC,MAAgB,EAChB,KAAe,EACf,IAAmB,KACjB;;AAEF,IAAA,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/B,KAAA;;AAGD,IAAA,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAA;;;AAID,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;AACrB,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC5D,KAAA;AAED,IAAA,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;AAC1B,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACnD,KAAA;IAED,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAC7D,UAAE,IAAI;AACN,UAAE,IAAI;AACH,aAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;aACjB,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnB,IAAA,OAAO,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD;;;;"}
|
|
@@ -30,7 +30,7 @@ const createLinkedList = (headId, items) => {
|
|
|
30
30
|
previousId: current.id,
|
|
31
31
|
format: currentNodeFormat,
|
|
32
32
|
count: newCount,
|
|
33
|
-
}
|
|
33
|
+
},
|
|
34
34
|
};
|
|
35
35
|
}, {
|
|
36
36
|
initValue: {
|
|
@@ -42,7 +42,7 @@ const createLinkedList = (headId, items) => {
|
|
|
42
42
|
items,
|
|
43
43
|
});
|
|
44
44
|
const manipulationConfig = {
|
|
45
|
-
factory: (
|
|
45
|
+
factory: (newList) => createLinkedList(newList.headId, newList.items),
|
|
46
46
|
/**
|
|
47
47
|
* At this point isDoubleLinked cannot be undefined
|
|
48
48
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-linked-list.js","sources":["../../src/linked-list/create-linked-list.ts"],"sourcesContent":["import { LinkedListItem, LinkedList, ManipulationConfig, LinkedListFormat } 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 format: LinkedListFormat | null,\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 { format, count } = walkListItemRecord((acc, current) => {\n const newCount = acc.count + 1;\n const currentNodeFormat: LinkedListFormat = current.previousId !== undefined ? 'double' : 'single';\n const incompatibleFormats = acc.format !== null && acc.format !== currentNodeFormat;\n\n if (incompatibleFormats || (currentNodeFormat === 'double' && 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 format: currentNodeFormat,\n count: newCount,\n },\n };\n }, {\n initValue: {\n format: null,\n count: 0,\n previousId: null,\n } as LinkedListValidation,\n startId: headId,\n items,\n });\n\n const manipulationConfig: ManipulationConfig<T> = {\n factory: (newList) => createLinkedList(newList.headId, newList.items),\n /**\n * At this point isDoubleLinked cannot be undefined\n */\n format,\n list,\n };\n\n const linkedList: LinkedList<T> = {\n head,\n items,\n format,\n size: count,\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};\n"],"names":["walkListItemRecord","reduceLinkedList","findLinkedList","whileLinkedList","removeLinkedList","insertLinkedList","getLinkedList","updateLinkedList","applyDiffLinkedList"],"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,MAAM,EAAE,KAAK,EAAE,GAAGA,kCAAkB,CAAC,CAAC,GAAG,EAAE,OAAO,KAAI;AAC5D,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AAC/B,QAAA,MAAM,iBAAiB,GAAqB,OAAO,CAAC,UAAU,KAAK,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACnG,QAAA,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,iBAAiB,CAAC;AAEpF,QAAA,IAAI,mBAAmB,KAAK,iBAAiB,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,CAAC,EAAE;AACpG,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC7D,SAAA;QAED,OAAO;AACL,YAAA,MAAM,EAAE;gBACN,UAAU,EAAE,OAAO,CAAC,EAAE;AACtB,gBAAA,MAAM,EAAE,iBAAiB;AACzB,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA;SACF,CAAC;AACJ,KAAC,EAAE;AACD,QAAA,SAAS,EAAE;AACT,YAAA,MAAM,EAAE,IAAI;AACZ,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,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;AACrE;;AAEG;QACH,MAAM;QACN,IAAI;KACL,CAAC;AAEF,IAAA,MAAM,UAAU,GAAkB;QAChC,IAAI;QACJ,KAAK;QACL,MAAM;AACN,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,KAAKC,iCAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC;QAChE,IAAI,EAAE,CAAC,SAAS,KAAKC,6BAAc,CAAC,SAAS,EAAE,IAAI,CAAC;AACpD,QAAA,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAKC,+BAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;QACxE,MAAM,EAAE,CAAC,EAAE,KAAKC,iCAAgB,CAAC,EAAE,EAAE,kBAAkB,CAAC;QACxD,MAAM,EAAE,CAAC,IAAI,KAAKC,iCAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAC5D,GAAG,EAAE,CAAC,EAAE,KAAKC,2BAAa,CAAC,EAAE,EAAE,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,IAAI,KAAKC,iCAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC;AAC5D,QAAA,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,KAAKC,uCAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;KAC7E,CAAC;AAEF,IAAA,OAAO,UAAU,CAAC;AACpB;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var linkedListUtils = require('./linked-list-utils.js');
|
|
6
|
+
|
|
7
|
+
const findLinkedList = (predicate, list) => (linkedListUtils.walkListItemRecord((acc, item) => {
|
|
8
|
+
if (predicate(item)) {
|
|
9
|
+
return {
|
|
10
|
+
result: item,
|
|
11
|
+
control: {
|
|
12
|
+
stop: true,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
result: acc,
|
|
18
|
+
};
|
|
19
|
+
}, {
|
|
20
|
+
initValue: null,
|
|
21
|
+
items: list.items,
|
|
22
|
+
startId: list.headId,
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
exports.findLinkedList = findLinkedList;
|
|
26
|
+
//# sourceMappingURL=find-linked-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-linked-list.js","sources":["../../src/linked-list/find-linked-list.ts"],"sourcesContent":["import { LinkedListItem, ItemPredicate, SimpleLinkedList } from './type';\nimport { walkListItemRecord } from './linked-list-utils';\n\nexport const findLinkedList = <Item extends LinkedListItem>(\n predicate: ItemPredicate<Item>,\n list: SimpleLinkedList<Item>,\n): Item | null => (\n walkListItemRecord((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"],"names":["walkListItemRecord"],"mappings":";;;;;;AAGa,MAAA,cAAc,GAAG,CAC5B,SAA8B,EAC9B,IAA4B,MAE1BA,kCAAkB,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AAC/B,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;QACnB,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;SACF,CAAC;AACH,KAAA;IAED,OAAO;AACL,QAAA,MAAM,EAAE,GAAG;KACZ,CAAC;AACJ,CAAC,EAAE;AACD,IAAA,SAAS,EAAE,IAAmB;IAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,OAAO,EAAE,IAAI,CAAC,MAAM;AACrB,CAAA,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-linked-list.js","sources":["../../src/linked-list/get-linked-list.ts"],"sourcesContent":["import { SimpleLinkedList, LinkedListItem } from './type';\n\nexport const getLinkedList = <T extends LinkedListItem>(id: string, list: SimpleLinkedList<T>) => {\n if (list.items[id]) {\n return list.items[id];\n }\n\n return null;\n}
|
|
1
|
+
{"version":3,"file":"get-linked-list.js","sources":["../../src/linked-list/get-linked-list.ts"],"sourcesContent":["import { SimpleLinkedList, LinkedListItem } from './type';\n\nexport const getLinkedList = <T extends LinkedListItem>(id: string, list: SimpleLinkedList<T>) => {\n if (list.items[id]) {\n return list.items[id];\n }\n\n return null;\n};\n"],"names":[],"mappings":";;;;MAEa,aAAa,GAAG,CAA2B,EAAU,EAAE,IAAyB,KAAI;AAC/F,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;;;;"}
|
|
@@ -34,11 +34,11 @@ const walkListItemRecord = (callback, config) => {
|
|
|
34
34
|
if (!currentItem) {
|
|
35
35
|
throw new Error('Cul de sac detected');
|
|
36
36
|
}
|
|
37
|
-
const { result, control } = callback(current.accumulator, currentItem);
|
|
37
|
+
const { result: currentResult, control } = callback(current.accumulator, currentItem);
|
|
38
38
|
return {
|
|
39
|
-
accumulator:
|
|
39
|
+
accumulator: currentResult,
|
|
40
40
|
currentId: currentItem.nextId,
|
|
41
|
-
control
|
|
41
|
+
control,
|
|
42
42
|
};
|
|
43
43
|
},
|
|
44
44
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-list-utils.js","sources":["../../src/linked-list/linked-list-utils.ts"],"sourcesContent":["import { runWhile } from '../fp';\nimport { LinkedListFormat, LinkedListItem, SimpleLinkedList } 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 { 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: currentResult, control } = callback(current.accumulator, currentItem);\n\n return {\n accumulator: currentResult,\n currentId: currentItem.nextId,\n control,\n };\n },\n });\n\n return result.accumulator;\n};\n\nexport const findPreviousId = <T extends LinkedListItem>(id: string | null, list: SimpleLinkedList<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, format: LinkedListFormat | null) => {\n /**\n * An empty linked list won't have any format yet, it will be\n * determined by the first item inserted in the list.\n */\n if (format === null) {\n return;\n }\n\n const incompatibleWithDoubleLinks = item.previousId === undefined && format === 'double';\n const incompatibleWithSingleLink = item.previousId !== undefined && format === 'single';\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: SimpleLinkedList<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};\n"],"names":["runWhile"],"mappings":"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"}
|
|
@@ -6,11 +6,9 @@ var linkedListUtils = require('./linked-list-utils.js');
|
|
|
6
6
|
|
|
7
7
|
const reduceLinkedList = (cb, initValue, list) => {
|
|
8
8
|
const { items, headId } = list;
|
|
9
|
-
return linkedListUtils.walkListItemRecord((acc, current) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
}, {
|
|
9
|
+
return linkedListUtils.walkListItemRecord((acc, current) => ({
|
|
10
|
+
result: cb(acc, current),
|
|
11
|
+
}), {
|
|
14
12
|
startId: headId,
|
|
15
13
|
items,
|
|
16
14
|
initValue,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reduce-linked-list.js","sources":["../../src/linked-list/reduce-linked-list.ts"],"sourcesContent":["import { ReduceCallback, LinkedListItem, SimpleLinkedList } 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: SimpleLinkedList<Item>,\n): Result => {\n const { items, headId } = list;\n\n return walkListItemRecord((acc, current) => ({\n result: cb(acc, current),\n }), {\n startId: headId,\n items,\n initValue,\n });\n};\n"],"names":["walkListItemRecord"],"mappings":";;;;;;AAGa,MAAA,gBAAgB,GAAG,CAC9B,EAAgC,EAChC,SAAiB,EACjB,IAA4B,KAClB;AACV,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE/B,OAAOA,kCAAkB,CAAC,CAAC,GAAG,EAAE,OAAO,MAAM;AAC3C,QAAA,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,KAAA,CAAC,EAAE;AACF,QAAA,OAAO,EAAE,MAAM;QACf,KAAK;QACL,SAAS;AACV,KAAA,CAAC,CAAC;AACL;;;;"}
|