From c01615d9995fc75e20f3b2f3a8d65ffe2266f4d8 Mon Sep 17 00:00:00 2001 From: Clarence Chan Date: Wed, 13 Sep 2023 16:03:14 -0400 Subject: [PATCH] Add node_modules --- node_modules/.bin/he | 1 + node_modules/.bin/nanoid | 1 + node_modules/.package-lock.json | 226 ++ node_modules/boolbase/README.md | 10 + node_modules/boolbase/index.js | 8 + node_modules/boolbase/package.json | 23 + node_modules/css-select/LICENSE | 11 + node_modules/css-select/README.md | 264 ++ node_modules/css-select/lib/attributes.d.ts | 7 + .../css-select/lib/attributes.d.ts.map | 1 + node_modules/css-select/lib/attributes.js | 236 ++ node_modules/css-select/lib/attributes.js.map | 1 + node_modules/css-select/lib/compile.d.ts | 13 + node_modules/css-select/lib/compile.d.ts.map | 1 + node_modules/css-select/lib/compile.js | 151 ++ node_modules/css-select/lib/compile.js.map | 1 + .../css-select/lib/esm/attributes.d.ts | 7 + .../css-select/lib/esm/attributes.d.ts.map | 1 + node_modules/css-select/lib/esm/attributes.js | 222 ++ .../css-select/lib/esm/attributes.js.map | 1 + node_modules/css-select/lib/esm/compile.d.ts | 13 + .../css-select/lib/esm/compile.d.ts.map | 1 + node_modules/css-select/lib/esm/compile.js | 115 + .../css-select/lib/esm/compile.js.map | 1 + node_modules/css-select/lib/esm/general.d.ts | 3 + .../css-select/lib/esm/general.d.ts.map | 1 + node_modules/css-select/lib/esm/general.js | 144 + .../css-select/lib/esm/general.js.map | 1 + node_modules/css-select/lib/esm/index.d.ts | 50 + .../css-select/lib/esm/index.d.ts.map | 1 + node_modules/css-select/lib/esm/index.js | 115 + node_modules/css-select/lib/esm/index.js.map | 1 + node_modules/css-select/lib/esm/package.json | 1 + .../lib/esm/pseudo-selectors/aliases.d.ts | 5 + .../lib/esm/pseudo-selectors/aliases.d.ts.map | 1 + .../lib/esm/pseudo-selectors/aliases.js | 35 + .../lib/esm/pseudo-selectors/aliases.js.map | 1 + .../lib/esm/pseudo-selectors/filters.d.ts | 4 + .../lib/esm/pseudo-selectors/filters.d.ts.map | 1 + .../lib/esm/pseudo-selectors/filters.js | 143 + .../lib/esm/pseudo-selectors/filters.js.map | 1 + .../lib/esm/pseudo-selectors/index.d.ts | 8 + .../lib/esm/pseudo-selectors/index.d.ts.map | 1 + .../lib/esm/pseudo-selectors/index.js | 40 + .../lib/esm/pseudo-selectors/index.js.map | 1 + .../lib/esm/pseudo-selectors/pseudos.d.ts | 6 + .../lib/esm/pseudo-selectors/pseudos.d.ts.map | 1 + .../lib/esm/pseudo-selectors/pseudos.js | 79 + .../lib/esm/pseudo-selectors/pseudos.js.map | 1 + .../lib/esm/pseudo-selectors/subselects.d.ts | 9 + .../esm/pseudo-selectors/subselects.d.ts.map | 1 + .../lib/esm/pseudo-selectors/subselects.js | 94 + .../esm/pseudo-selectors/subselects.js.map | 1 + node_modules/css-select/lib/esm/sort.d.ts | 12 + node_modules/css-select/lib/esm/sort.d.ts.map | 1 + node_modules/css-select/lib/esm/sort.js | 79 + node_modules/css-select/lib/esm/sort.js.map | 1 + node_modules/css-select/lib/esm/types.d.ts | 167 ++ .../css-select/lib/esm/types.d.ts.map | 1 + node_modules/css-select/lib/esm/types.js | 2 + node_modules/css-select/lib/esm/types.js.map | 1 + node_modules/css-select/lib/general.d.ts | 3 + node_modules/css-select/lib/general.d.ts.map | 1 + node_modules/css-select/lib/general.js | 148 ++ node_modules/css-select/lib/general.js.map | 1 + node_modules/css-select/lib/index.d.ts | 50 + node_modules/css-select/lib/index.d.ts.map | 1 + node_modules/css-select/lib/index.js | 154 ++ node_modules/css-select/lib/index.js.map | 1 + .../lib/pseudo-selectors/aliases.d.ts | 5 + .../lib/pseudo-selectors/aliases.d.ts.map | 1 + .../lib/pseudo-selectors/aliases.js | 34 + .../lib/pseudo-selectors/aliases.js.map | 1 + .../lib/pseudo-selectors/filters.d.ts | 4 + .../lib/pseudo-selectors/filters.d.ts.map | 1 + .../lib/pseudo-selectors/filters.js | 157 ++ .../lib/pseudo-selectors/filters.js.map | 1 + .../lib/pseudo-selectors/index.d.ts | 8 + .../lib/pseudo-selectors/index.d.ts.map | 1 + .../css-select/lib/pseudo-selectors/index.js | 46 + .../lib/pseudo-selectors/index.js.map | 1 + .../lib/pseudo-selectors/pseudos.d.ts | 6 + .../lib/pseudo-selectors/pseudos.d.ts.map | 1 + .../lib/pseudo-selectors/pseudos.js | 93 + .../lib/pseudo-selectors/pseudos.js.map | 1 + .../lib/pseudo-selectors/subselects.d.ts | 9 + .../lib/pseudo-selectors/subselects.d.ts.map | 1 + .../lib/pseudo-selectors/subselects.js | 112 + .../lib/pseudo-selectors/subselects.js.map | 1 + node_modules/css-select/lib/sort.d.ts | 12 + node_modules/css-select/lib/sort.d.ts.map | 1 + node_modules/css-select/lib/sort.js | 84 + node_modules/css-select/lib/sort.js.map | 1 + node_modules/css-select/lib/types.d.ts | 167 ++ node_modules/css-select/lib/types.d.ts.map | 1 + node_modules/css-select/lib/types.js | 3 + node_modules/css-select/lib/types.js.map | 1 + node_modules/css-select/package.json | 81 + node_modules/css-what/LICENSE | 11 + node_modules/css-what/lib/commonjs/index.d.ts | 4 + .../css-what/lib/commonjs/index.d.ts.map | 1 + node_modules/css-what/lib/commonjs/index.js | 23 + node_modules/css-what/lib/commonjs/parse.d.ts | 20 + .../css-what/lib/commonjs/parse.d.ts.map | 1 + node_modules/css-what/lib/commonjs/parse.js | 425 +++ .../css-what/lib/commonjs/stringify.d.ts | 8 + .../css-what/lib/commonjs/stringify.d.ts.map | 1 + .../css-what/lib/commonjs/stringify.js | 138 + node_modules/css-what/lib/commonjs/types.d.ts | 70 + .../css-what/lib/commonjs/types.d.ts.map | 1 + node_modules/css-what/lib/commonjs/types.js | 42 + node_modules/css-what/lib/es/index.d.ts | 4 + node_modules/css-what/lib/es/index.d.ts.map | 1 + node_modules/css-what/lib/es/index.js | 3 + node_modules/css-what/lib/es/parse.d.ts | 20 + node_modules/css-what/lib/es/parse.d.ts.map | 1 + node_modules/css-what/lib/es/parse.js | 420 +++ node_modules/css-what/lib/es/stringify.d.ts | 8 + .../css-what/lib/es/stringify.d.ts.map | 1 + node_modules/css-what/lib/es/stringify.js | 126 + node_modules/css-what/lib/es/types.d.ts | 70 + node_modules/css-what/lib/es/types.d.ts.map | 1 + node_modules/css-what/lib/es/types.js | 39 + node_modules/css-what/package.json | 59 + node_modules/css-what/readme.md | 69 + node_modules/dom-serializer/LICENSE | 11 + node_modules/dom-serializer/README.md | 109 + .../dom-serializer/lib/esm/foreignNames.d.ts | 3 + .../lib/esm/foreignNames.d.ts.map | 1 + .../dom-serializer/lib/esm/foreignNames.js | 100 + .../dom-serializer/lib/esm/index.d.ts | 52 + .../dom-serializer/lib/esm/index.d.ts.map | 1 + node_modules/dom-serializer/lib/esm/index.js | 190 ++ .../dom-serializer/lib/esm/package.json | 1 + .../dom-serializer/lib/foreignNames.d.ts | 3 + .../dom-serializer/lib/foreignNames.d.ts.map | 1 + .../dom-serializer/lib/foreignNames.js | 103 + node_modules/dom-serializer/lib/index.d.ts | 52 + .../dom-serializer/lib/index.d.ts.map | 1 + node_modules/dom-serializer/lib/index.js | 229 ++ node_modules/dom-serializer/package.json | 69 + node_modules/domelementtype/LICENSE | 11 + .../domelementtype/lib/esm/index.d.ts | 48 + .../domelementtype/lib/esm/index.d.ts.map | 1 + node_modules/domelementtype/lib/esm/index.js | 51 + .../domelementtype/lib/esm/package.json | 1 + node_modules/domelementtype/lib/index.d.ts | 48 + .../domelementtype/lib/index.d.ts.map | 1 + node_modules/domelementtype/lib/index.js | 55 + node_modules/domelementtype/package.json | 54 + node_modules/domelementtype/readme.md | 1 + node_modules/domhandler/LICENSE | 11 + node_modules/domhandler/lib/esm/index.d.ts | 76 + .../domhandler/lib/esm/index.d.ts.map | 1 + node_modules/domhandler/lib/esm/index.js | 146 ++ node_modules/domhandler/lib/esm/node.d.ts | 245 ++ node_modules/domhandler/lib/esm/node.d.ts.map | 1 + node_modules/domhandler/lib/esm/node.js | 338 +++ node_modules/domhandler/lib/esm/package.json | 1 + node_modules/domhandler/lib/index.d.ts | 76 + node_modules/domhandler/lib/index.d.ts.map | 1 + node_modules/domhandler/lib/index.js | 165 ++ node_modules/domhandler/lib/node.d.ts | 245 ++ node_modules/domhandler/lib/node.d.ts.map | 1 + node_modules/domhandler/lib/node.js | 474 ++++ node_modules/domhandler/package.json | 73 + node_modules/domhandler/readme.md | 92 + node_modules/domutils/LICENSE | 11 + node_modules/domutils/lib/esm/feeds.d.ts | 71 + node_modules/domutils/lib/esm/feeds.d.ts.map | 1 + node_modules/domutils/lib/esm/feeds.js | 183 ++ node_modules/domutils/lib/esm/feeds.js.map | 1 + node_modules/domutils/lib/esm/helpers.d.ts | 59 + .../domutils/lib/esm/helpers.d.ts.map | 1 + node_modules/domutils/lib/esm/helpers.js | 136 + node_modules/domutils/lib/esm/helpers.js.map | 1 + node_modules/domutils/lib/esm/index.d.ts | 10 + node_modules/domutils/lib/esm/index.d.ts.map | 1 + node_modules/domutils/lib/esm/index.js | 10 + node_modules/domutils/lib/esm/index.js.map | 1 + node_modules/domutils/lib/esm/legacy.d.ts | 68 + node_modules/domutils/lib/esm/legacy.d.ts.map | 1 + node_modules/domutils/lib/esm/legacy.js | 139 + node_modules/domutils/lib/esm/legacy.js.map | 1 + .../domutils/lib/esm/manipulation.d.ts | 49 + .../domutils/lib/esm/manipulation.d.ts.map | 1 + node_modules/domutils/lib/esm/manipulation.js | 134 + .../domutils/lib/esm/manipulation.js.map | 1 + node_modules/domutils/lib/esm/package.json | 1 + node_modules/domutils/lib/esm/querying.d.ts | 64 + .../domutils/lib/esm/querying.d.ts.map | 1 + node_modules/domutils/lib/esm/querying.js | 145 ++ node_modules/domutils/lib/esm/querying.js.map | 1 + node_modules/domutils/lib/esm/stringify.d.ts | 46 + .../domutils/lib/esm/stringify.d.ts.map | 1 + node_modules/domutils/lib/esm/stringify.js | 81 + .../domutils/lib/esm/stringify.js.map | 1 + node_modules/domutils/lib/esm/traversal.d.ts | 67 + .../domutils/lib/esm/traversal.d.ts.map | 1 + node_modules/domutils/lib/esm/traversal.js | 112 + .../domutils/lib/esm/traversal.js.map | 1 + node_modules/domutils/lib/feeds.d.ts | 71 + node_modules/domutils/lib/feeds.d.ts.map | 1 + node_modules/domutils/lib/feeds.js | 191 ++ node_modules/domutils/lib/feeds.js.map | 1 + node_modules/domutils/lib/helpers.d.ts | 59 + node_modules/domutils/lib/helpers.d.ts.map | 1 + node_modules/domutils/lib/helpers.js | 142 + node_modules/domutils/lib/helpers.js.map | 1 + node_modules/domutils/lib/index.d.ts | 10 + node_modules/domutils/lib/index.d.ts.map | 1 + node_modules/domutils/lib/index.js | 33 + node_modules/domutils/lib/index.js.map | 1 + node_modules/domutils/lib/legacy.d.ts | 68 + node_modules/domutils/lib/legacy.d.ts.map | 1 + node_modules/domutils/lib/legacy.js | 153 ++ node_modules/domutils/lib/legacy.js.map | 1 + node_modules/domutils/lib/manipulation.d.ts | 49 + .../domutils/lib/manipulation.d.ts.map | 1 + node_modules/domutils/lib/manipulation.js | 143 + node_modules/domutils/lib/manipulation.js.map | 1 + node_modules/domutils/lib/querying.d.ts | 64 + node_modules/domutils/lib/querying.d.ts.map | 1 + node_modules/domutils/lib/querying.js | 159 ++ node_modules/domutils/lib/querying.js.map | 1 + node_modules/domutils/lib/stringify.d.ts | 46 + node_modules/domutils/lib/stringify.d.ts.map | 1 + node_modules/domutils/lib/stringify.js | 92 + node_modules/domutils/lib/stringify.js.map | 1 + node_modules/domutils/lib/traversal.d.ts | 67 + node_modules/domutils/lib/traversal.d.ts.map | 1 + node_modules/domutils/lib/traversal.js | 126 + node_modules/domutils/lib/traversal.js.map | 1 + node_modules/domutils/package.json | 79 + node_modules/domutils/readme.md | 31 + node_modules/entities/LICENSE | 11 + node_modules/entities/lib/decode.d.ts | 211 ++ node_modules/entities/lib/decode.d.ts.map | 1 + node_modules/entities/lib/decode.js | 536 ++++ node_modules/entities/lib/decode.js.map | 1 + .../entities/lib/decode_codepoint.d.ts | 19 + .../entities/lib/decode_codepoint.d.ts.map | 1 + node_modules/entities/lib/decode_codepoint.js | 76 + .../entities/lib/decode_codepoint.js.map | 1 + node_modules/entities/lib/encode.d.ts | 22 + node_modules/entities/lib/encode.d.ts.map | 1 + node_modules/entities/lib/encode.js | 77 + node_modules/entities/lib/encode.js.map | 1 + node_modules/entities/lib/escape.d.ts | 43 + node_modules/entities/lib/escape.d.ts.map | 1 + node_modules/entities/lib/escape.js | 122 + node_modules/entities/lib/escape.js.map | 1 + node_modules/entities/lib/esm/decode.d.ts | 211 ++ node_modules/entities/lib/esm/decode.d.ts.map | 1 + node_modules/entities/lib/esm/decode.js | 496 ++++ node_modules/entities/lib/esm/decode.js.map | 1 + .../entities/lib/esm/decode_codepoint.d.ts | 19 + .../lib/esm/decode_codepoint.d.ts.map | 1 + .../entities/lib/esm/decode_codepoint.js | 71 + .../entities/lib/esm/decode_codepoint.js.map | 1 + node_modules/entities/lib/esm/encode.d.ts | 22 + node_modules/entities/lib/esm/encode.d.ts.map | 1 + node_modules/entities/lib/esm/encode.js | 69 + node_modules/entities/lib/esm/encode.js.map | 1 + node_modules/entities/lib/esm/escape.d.ts | 43 + node_modules/entities/lib/esm/escape.d.ts.map | 1 + node_modules/entities/lib/esm/escape.js | 116 + node_modules/entities/lib/esm/escape.js.map | 1 + .../lib/esm/generated/decode-data-html.d.ts | 3 + .../esm/generated/decode-data-html.d.ts.map | 1 + .../lib/esm/generated/decode-data-html.js | 7 + .../lib/esm/generated/decode-data-html.js.map | 1 + .../lib/esm/generated/decode-data-xml.d.ts | 3 + .../esm/generated/decode-data-xml.d.ts.map | 1 + .../lib/esm/generated/decode-data-xml.js | 7 + .../lib/esm/generated/decode-data-xml.js.map | 1 + .../lib/esm/generated/encode-html.d.ts | 8 + .../lib/esm/generated/encode-html.d.ts.map | 1 + .../entities/lib/esm/generated/encode-html.js | 10 + .../lib/esm/generated/encode-html.js.map | 1 + node_modules/entities/lib/esm/index.d.ts | 96 + node_modules/entities/lib/esm/index.d.ts.map | 1 + node_modules/entities/lib/esm/index.js | 99 + node_modules/entities/lib/esm/index.js.map | 1 + node_modules/entities/lib/esm/package.json | 1 + .../lib/generated/decode-data-html.d.ts | 3 + .../lib/generated/decode-data-html.d.ts.map | 1 + .../lib/generated/decode-data-html.js | 9 + .../lib/generated/decode-data-html.js.map | 1 + .../lib/generated/decode-data-xml.d.ts | 3 + .../lib/generated/decode-data-xml.d.ts.map | 1 + .../entities/lib/generated/decode-data-xml.js | 9 + .../lib/generated/decode-data-xml.js.map | 1 + .../entities/lib/generated/encode-html.d.ts | 8 + .../lib/generated/encode-html.d.ts.map | 1 + .../entities/lib/generated/encode-html.js | 12 + .../entities/lib/generated/encode-html.js.map | 1 + node_modules/entities/lib/index.d.ts | 96 + node_modules/entities/lib/index.d.ts.map | 1 + node_modules/entities/lib/index.js | 126 + node_modules/entities/lib/index.js.map | 1 + node_modules/entities/package.json | 90 + node_modules/entities/readme.md | 122 + node_modules/he/LICENSE-MIT.txt | 20 + node_modules/he/README.md | 379 +++ node_modules/he/bin/he | 148 ++ node_modules/he/he.js | 345 +++ node_modules/he/man/he.1 | 78 + node_modules/he/package.json | 58 + node_modules/html-entities/LICENSE | 19 + node_modules/html-entities/README.md | 217 ++ node_modules/html-entities/lib/index.d.ts | 20 + node_modules/html-entities/lib/index.js | 199 ++ node_modules/html-entities/lib/index.js.flow | 52 + .../html-entities/lib/named-references.js | 1 + .../html-entities/lib/numeric-unicode-map.js | 1 + .../html-entities/lib/surrogate-pairs.js | 1 + node_modules/html-entities/package.json | 83 + node_modules/ics/LICENSE | 6 + node_modules/ics/README.md | 359 +++ node_modules/ics/dist/defaults.js | 18 + node_modules/ics/dist/index.js | 161 ++ node_modules/ics/dist/pipeline/build.js | 46 + node_modules/ics/dist/pipeline/format.js | 94 + node_modules/ics/dist/pipeline/index.js | 27 + node_modules/ics/dist/pipeline/validate.js | 10 + node_modules/ics/dist/schema/index.js | 115 + node_modules/ics/dist/utils/fold-line.js | 17 + node_modules/ics/dist/utils/format-date.js | 49 + .../ics/dist/utils/format-duration.js | 22 + node_modules/ics/dist/utils/format-text.js | 9 + node_modules/ics/dist/utils/index.js | 76 + node_modules/ics/dist/utils/set-alarm.js | 67 + node_modules/ics/dist/utils/set-contact.js | 38 + .../ics/dist/utils/set-description.js | 11 + .../ics/dist/utils/set-geolocation.js | 11 + node_modules/ics/dist/utils/set-location.js | 11 + node_modules/ics/dist/utils/set-organizer.js | 19 + node_modules/ics/dist/utils/set-summary.js | 11 + node_modules/ics/index.d.ts | 127 + node_modules/ics/package.json | 56 + node_modules/nanoid/LICENSE | 20 + node_modules/nanoid/README.md | 39 + node_modules/nanoid/async/index.browser.cjs | 34 + node_modules/nanoid/async/index.browser.js | 34 + node_modules/nanoid/async/index.cjs | 35 + node_modules/nanoid/async/index.d.ts | 56 + node_modules/nanoid/async/index.js | 35 + node_modules/nanoid/async/index.native.js | 26 + node_modules/nanoid/async/package.json | 12 + node_modules/nanoid/bin/nanoid.cjs | 55 + node_modules/nanoid/index.browser.cjs | 34 + node_modules/nanoid/index.browser.js | 34 + node_modules/nanoid/index.cjs | 45 + node_modules/nanoid/index.d.ts | 91 + node_modules/nanoid/index.js | 45 + node_modules/nanoid/nanoid.js | 1 + node_modules/nanoid/non-secure/index.cjs | 21 + node_modules/nanoid/non-secure/index.d.ts | 33 + node_modules/nanoid/non-secure/index.js | 21 + node_modules/nanoid/non-secure/package.json | 6 + node_modules/nanoid/package.json | 66 + node_modules/nanoid/url-alphabet/index.cjs | 3 + node_modules/nanoid/url-alphabet/index.js | 3 + node_modules/nanoid/url-alphabet/package.json | 6 + node_modules/node-html-parser/CHANGELOG.md | 106 + node_modules/node-html-parser/LICENSE | 7 + node_modules/node-html-parser/README.md | 365 +++ node_modules/node-html-parser/dist/back.d.ts | 1 + node_modules/node-html-parser/dist/back.js | 6 + node_modules/node-html-parser/dist/index.d.ts | 20 + node_modules/node-html-parser/dist/index.js | 32 + node_modules/node-html-parser/dist/main.js | 1644 ++++++++++++ .../node-html-parser/dist/matcher.d.ts | 6 + node_modules/node-html-parser/dist/matcher.js | 106 + .../node-html-parser/dist/nodes/comment.d.ts | 19 + .../node-html-parser/dist/nodes/comment.js | 55 + .../node-html-parser/dist/nodes/html.d.ts | 238 ++ .../node-html-parser/dist/nodes/html.js | 1219 +++++++++ .../node-html-parser/dist/nodes/node.d.ts | 23 + .../node-html-parser/dist/nodes/node.js | 52 + .../node-html-parser/dist/nodes/text.d.ts | 43 + .../node-html-parser/dist/nodes/text.js | 143 + .../node-html-parser/dist/nodes/type.d.ts | 6 + .../node-html-parser/dist/nodes/type.js | 9 + node_modules/node-html-parser/dist/parse.d.ts | 1 + node_modules/node-html-parser/dist/parse.js | 5 + node_modules/node-html-parser/dist/valid.d.ts | 6 + node_modules/node-html-parser/dist/valid.js | 13 + .../node-html-parser/dist/void-tag.d.ts | 7 + .../node-html-parser/dist/void-tag.js | 29 + node_modules/node-html-parser/package.json | 113 + node_modules/nth-check/LICENSE | 11 + node_modules/nth-check/README.md | 136 + node_modules/nth-check/lib/compile.d.ts | 55 + node_modules/nth-check/lib/compile.d.ts.map | 1 + node_modules/nth-check/lib/compile.js | 121 + node_modules/nth-check/lib/compile.js.map | 1 + node_modules/nth-check/lib/esm/compile.d.ts | 55 + .../nth-check/lib/esm/compile.d.ts.map | 1 + node_modules/nth-check/lib/esm/compile.js | 113 + node_modules/nth-check/lib/esm/compile.js.map | 1 + node_modules/nth-check/lib/esm/index.d.ts | 59 + node_modules/nth-check/lib/esm/index.d.ts.map | 1 + node_modules/nth-check/lib/esm/index.js | 63 + node_modules/nth-check/lib/esm/index.js.map | 1 + node_modules/nth-check/lib/esm/package.json | 1 + node_modules/nth-check/lib/esm/parse.d.ts | 9 + node_modules/nth-check/lib/esm/parse.d.ts.map | 1 + node_modules/nth-check/lib/esm/parse.js | 73 + node_modules/nth-check/lib/esm/parse.js.map | 1 + node_modules/nth-check/lib/index.d.ts | 59 + node_modules/nth-check/lib/index.d.ts.map | 1 + node_modules/nth-check/lib/index.js | 70 + node_modules/nth-check/lib/index.js.map | 1 + node_modules/nth-check/lib/parse.d.ts | 9 + node_modules/nth-check/lib/parse.d.ts.map | 1 + node_modules/nth-check/lib/parse.js | 77 + node_modules/nth-check/lib/parse.js.map | 1 + node_modules/nth-check/package.json | 78 + node_modules/property-expr/CHANGELOG.md | 17 + node_modules/property-expr/LICENSE.txt | 21 + node_modules/property-expr/README.md | 104 + node_modules/property-expr/compiler.js | 67 + node_modules/property-expr/index.d.ts | 31 + node_modules/property-expr/index.js | 158 ++ node_modules/property-expr/package.json | 36 + node_modules/tiny-case/README.md | 26 + node_modules/tiny-case/index.d.ts | 15 + node_modules/tiny-case/index.js | 39 + node_modules/tiny-case/package.json | 13 + node_modules/tiny-case/test.js | 82 + node_modules/tiny-case/tsconfig.json | 1 + node_modules/toposort/.npmignore | 1 + node_modules/toposort/.travis.yml | 5 + node_modules/toposort/License | 21 + node_modules/toposort/Makefile | 11 + node_modules/toposort/README.md | 98 + node_modules/toposort/component.json | 24 + node_modules/toposort/graph.svg | 1 + node_modules/toposort/index.js | 98 + node_modules/toposort/package.json | 29 + node_modules/toposort/test.js | 171 ++ node_modules/type-fest/index.d.ts | 95 + node_modules/type-fest/package.json | 52 + node_modules/type-fest/readme.md | 905 +++++++ .../type-fest/source/async-return-type.d.ts | 25 + node_modules/type-fest/source/asyncify.d.ts | 33 + node_modules/type-fest/source/basic.d.ts | 45 + node_modules/type-fest/source/camel-case.d.ts | 73 + .../source/camel-cased-properties-deep.d.ts | 54 + .../source/camel-cased-properties.d.ts | 36 + .../type-fest/source/conditional-except.d.ts | 45 + .../type-fest/source/conditional-keys.d.ts | 47 + .../type-fest/source/conditional-pick.d.ts | 44 + .../type-fest/source/delimiter-case.d.ts | 93 + .../delimiter-cased-properties-deep.d.ts | 60 + .../source/delimiter-cased-properties.d.ts | 37 + node_modules/type-fest/source/entries.d.ts | 62 + node_modules/type-fest/source/entry.d.ts | 65 + node_modules/type-fest/source/exact.d.ts | 73 + node_modules/type-fest/source/except.d.ts | 57 + .../type-fest/source/fixed-length-array.d.ts | 43 + node_modules/type-fest/source/get.d.ts | 184 ++ .../type-fest/source/has-optional-keys.d.ts | 21 + .../type-fest/source/has-required-keys.d.ts | 59 + node_modules/type-fest/source/includes.d.ts | 22 + node_modules/type-fest/source/internal.d.ts | 59 + .../type-fest/source/invariant-of.d.ts | 76 + .../type-fest/source/iterable-element.d.ts | 54 + node_modules/type-fest/source/join.d.ts | 30 + node_modules/type-fest/source/jsonify.d.ts | 90 + node_modules/type-fest/source/kebab-case.d.ts | 38 + .../source/kebab-cased-properties-deep.d.ts | 47 + .../source/kebab-cased-properties.d.ts | 30 + .../type-fest/source/last-array-element.d.ts | 28 + .../source/literal-to-primitive.d.ts | 36 + .../type-fest/source/literal-union.d.ts | 35 + .../type-fest/source/merge-exclusive.d.ts | 41 + node_modules/type-fest/source/merge.d.ts | 27 + .../source/multidimensional-array.d.ts | 43 + .../multidimensional-readonly-array.d.ts | 47 + node_modules/type-fest/source/mutable.d.ts | 5 + node_modules/type-fest/source/numeric.d.ts | 170 ++ .../type-fest/source/observable-like.d.ts | 62 + node_modules/type-fest/source/opaque.d.ts | 107 + .../type-fest/source/optional-keys-of.d.ts | 38 + .../type-fest/source/package-json.d.ts | 663 +++++ .../type-fest/source/partial-deep.d.ts | 113 + .../source/partial-on-undefined-deep.d.ts | 70 + .../type-fest/source/pascal-case.d.ts | 38 + .../source/pascal-cased-properties-deep.d.ts | 54 + .../source/pascal-cased-properties.d.ts | 34 + node_modules/type-fest/source/primitive.d.ts | 13 + node_modules/type-fest/source/promisable.d.ts | 25 + .../type-fest/source/promise-value.d.ts | 29 + .../type-fest/source/readonly-deep.d.ts | 85 + .../type-fest/source/readonly-tuple.d.ts | 41 + .../source/remove-index-signature.d.ts | 104 + node_modules/type-fest/source/replace.d.ts | 67 + .../type-fest/source/require-all-or-none.d.ts | 36 + .../source/require-at-least-one.d.ts | 35 + .../type-fest/source/require-exactly-one.d.ts | 34 + .../type-fest/source/required-keys-of.d.ts | 29 + node_modules/type-fest/source/schema.d.ts | 72 + .../source/screaming-snake-case.d.ts | 33 + .../type-fest/source/set-non-nullable.d.ts | 35 + .../type-fest/source/set-optional.d.ts | 35 + .../type-fest/source/set-required.d.ts | 35 + .../type-fest/source/set-return-type.d.ts | 31 + node_modules/type-fest/source/simplify.d.ts | 83 + node_modules/type-fest/source/snake-case.d.ts | 38 + .../source/snake-cased-properties-deep.d.ts | 47 + .../source/snake-cased-properties.d.ts | 30 + node_modules/type-fest/source/split.d.ts | 29 + node_modules/type-fest/source/spread.d.ts | 85 + .../type-fest/source/string-key-of.d.ts | 25 + .../type-fest/source/stringified.d.ts | 23 + node_modules/type-fest/source/trim.d.ts | 25 + .../type-fest/source/tsconfig-json.d.ts | 1172 +++++++++ .../type-fest/source/typed-array.d.ts | 17 + .../source/union-to-intersection.d.ts | 60 + node_modules/type-fest/source/value-of.d.ts | 42 + node_modules/type-fest/source/writable.d.ts | 40 + node_modules/yup/LICENSE.md | 21 + node_modules/yup/README.md | 1702 ++++++++++++ node_modules/yup/index.d.ts | 861 ++++++ node_modules/yup/index.esm.js | 2283 ++++++++++++++++ node_modules/yup/index.js | 2318 +++++++++++++++++ node_modules/yup/package.json | 58 + 530 files changed, 38186 insertions(+) create mode 120000 node_modules/.bin/he create mode 120000 node_modules/.bin/nanoid create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/boolbase/README.md create mode 100644 node_modules/boolbase/index.js create mode 100644 node_modules/boolbase/package.json create mode 100644 node_modules/css-select/LICENSE create mode 100644 node_modules/css-select/README.md create mode 100644 node_modules/css-select/lib/attributes.d.ts create mode 100644 node_modules/css-select/lib/attributes.d.ts.map create mode 100644 node_modules/css-select/lib/attributes.js create mode 100644 node_modules/css-select/lib/attributes.js.map create mode 100644 node_modules/css-select/lib/compile.d.ts create mode 100644 node_modules/css-select/lib/compile.d.ts.map create mode 100644 node_modules/css-select/lib/compile.js create mode 100644 node_modules/css-select/lib/compile.js.map create mode 100644 node_modules/css-select/lib/esm/attributes.d.ts create mode 100644 node_modules/css-select/lib/esm/attributes.d.ts.map create mode 100644 node_modules/css-select/lib/esm/attributes.js create mode 100644 node_modules/css-select/lib/esm/attributes.js.map create mode 100644 node_modules/css-select/lib/esm/compile.d.ts create mode 100644 node_modules/css-select/lib/esm/compile.d.ts.map create mode 100644 node_modules/css-select/lib/esm/compile.js create mode 100644 node_modules/css-select/lib/esm/compile.js.map create mode 100644 node_modules/css-select/lib/esm/general.d.ts create mode 100644 node_modules/css-select/lib/esm/general.d.ts.map create mode 100644 node_modules/css-select/lib/esm/general.js create mode 100644 node_modules/css-select/lib/esm/general.js.map create mode 100644 node_modules/css-select/lib/esm/index.d.ts create mode 100644 node_modules/css-select/lib/esm/index.d.ts.map create mode 100644 node_modules/css-select/lib/esm/index.js create mode 100644 node_modules/css-select/lib/esm/index.js.map create mode 100644 node_modules/css-select/lib/esm/package.json create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/aliases.js create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/aliases.js.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/filters.js create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/filters.js.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/index.js create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/index.js.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts.map create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/subselects.js create mode 100644 node_modules/css-select/lib/esm/pseudo-selectors/subselects.js.map create mode 100644 node_modules/css-select/lib/esm/sort.d.ts create mode 100644 node_modules/css-select/lib/esm/sort.d.ts.map create mode 100644 node_modules/css-select/lib/esm/sort.js create mode 100644 node_modules/css-select/lib/esm/sort.js.map create mode 100644 node_modules/css-select/lib/esm/types.d.ts create mode 100644 node_modules/css-select/lib/esm/types.d.ts.map create mode 100644 node_modules/css-select/lib/esm/types.js create mode 100644 node_modules/css-select/lib/esm/types.js.map create mode 100644 node_modules/css-select/lib/general.d.ts create mode 100644 node_modules/css-select/lib/general.d.ts.map create mode 100644 node_modules/css-select/lib/general.js create mode 100644 node_modules/css-select/lib/general.js.map create mode 100644 node_modules/css-select/lib/index.d.ts create mode 100644 node_modules/css-select/lib/index.d.ts.map create mode 100644 node_modules/css-select/lib/index.js create mode 100644 node_modules/css-select/lib/index.js.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/aliases.d.ts create mode 100644 node_modules/css-select/lib/pseudo-selectors/aliases.d.ts.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/aliases.js create mode 100644 node_modules/css-select/lib/pseudo-selectors/aliases.js.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/filters.d.ts create mode 100644 node_modules/css-select/lib/pseudo-selectors/filters.d.ts.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/filters.js create mode 100644 node_modules/css-select/lib/pseudo-selectors/filters.js.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/index.d.ts create mode 100644 node_modules/css-select/lib/pseudo-selectors/index.d.ts.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/index.js create mode 100644 node_modules/css-select/lib/pseudo-selectors/index.js.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts create mode 100644 node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/pseudos.js create mode 100644 node_modules/css-select/lib/pseudo-selectors/pseudos.js.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/subselects.d.ts create mode 100644 node_modules/css-select/lib/pseudo-selectors/subselects.d.ts.map create mode 100644 node_modules/css-select/lib/pseudo-selectors/subselects.js create mode 100644 node_modules/css-select/lib/pseudo-selectors/subselects.js.map create mode 100644 node_modules/css-select/lib/sort.d.ts create mode 100644 node_modules/css-select/lib/sort.d.ts.map create mode 100644 node_modules/css-select/lib/sort.js create mode 100644 node_modules/css-select/lib/sort.js.map create mode 100644 node_modules/css-select/lib/types.d.ts create mode 100644 node_modules/css-select/lib/types.d.ts.map create mode 100644 node_modules/css-select/lib/types.js create mode 100644 node_modules/css-select/lib/types.js.map create mode 100644 node_modules/css-select/package.json create mode 100644 node_modules/css-what/LICENSE create mode 100644 node_modules/css-what/lib/commonjs/index.d.ts create mode 100644 node_modules/css-what/lib/commonjs/index.d.ts.map create mode 100644 node_modules/css-what/lib/commonjs/index.js create mode 100644 node_modules/css-what/lib/commonjs/parse.d.ts create mode 100644 node_modules/css-what/lib/commonjs/parse.d.ts.map create mode 100644 node_modules/css-what/lib/commonjs/parse.js create mode 100644 node_modules/css-what/lib/commonjs/stringify.d.ts create mode 100644 node_modules/css-what/lib/commonjs/stringify.d.ts.map create mode 100644 node_modules/css-what/lib/commonjs/stringify.js create mode 100644 node_modules/css-what/lib/commonjs/types.d.ts create mode 100644 node_modules/css-what/lib/commonjs/types.d.ts.map create mode 100644 node_modules/css-what/lib/commonjs/types.js create mode 100644 node_modules/css-what/lib/es/index.d.ts create mode 100644 node_modules/css-what/lib/es/index.d.ts.map create mode 100644 node_modules/css-what/lib/es/index.js create mode 100644 node_modules/css-what/lib/es/parse.d.ts create mode 100644 node_modules/css-what/lib/es/parse.d.ts.map create mode 100644 node_modules/css-what/lib/es/parse.js create mode 100644 node_modules/css-what/lib/es/stringify.d.ts create mode 100644 node_modules/css-what/lib/es/stringify.d.ts.map create mode 100644 node_modules/css-what/lib/es/stringify.js create mode 100644 node_modules/css-what/lib/es/types.d.ts create mode 100644 node_modules/css-what/lib/es/types.d.ts.map create mode 100644 node_modules/css-what/lib/es/types.js create mode 100644 node_modules/css-what/package.json create mode 100644 node_modules/css-what/readme.md create mode 100644 node_modules/dom-serializer/LICENSE create mode 100644 node_modules/dom-serializer/README.md create mode 100644 node_modules/dom-serializer/lib/esm/foreignNames.d.ts create mode 100644 node_modules/dom-serializer/lib/esm/foreignNames.d.ts.map create mode 100644 node_modules/dom-serializer/lib/esm/foreignNames.js create mode 100644 node_modules/dom-serializer/lib/esm/index.d.ts create mode 100644 node_modules/dom-serializer/lib/esm/index.d.ts.map create mode 100644 node_modules/dom-serializer/lib/esm/index.js create mode 100644 node_modules/dom-serializer/lib/esm/package.json create mode 100644 node_modules/dom-serializer/lib/foreignNames.d.ts create mode 100644 node_modules/dom-serializer/lib/foreignNames.d.ts.map create mode 100644 node_modules/dom-serializer/lib/foreignNames.js create mode 100644 node_modules/dom-serializer/lib/index.d.ts create mode 100644 node_modules/dom-serializer/lib/index.d.ts.map create mode 100644 node_modules/dom-serializer/lib/index.js create mode 100644 node_modules/dom-serializer/package.json create mode 100644 node_modules/domelementtype/LICENSE create mode 100644 node_modules/domelementtype/lib/esm/index.d.ts create mode 100644 node_modules/domelementtype/lib/esm/index.d.ts.map create mode 100644 node_modules/domelementtype/lib/esm/index.js create mode 100644 node_modules/domelementtype/lib/esm/package.json create mode 100644 node_modules/domelementtype/lib/index.d.ts create mode 100644 node_modules/domelementtype/lib/index.d.ts.map create mode 100644 node_modules/domelementtype/lib/index.js create mode 100644 node_modules/domelementtype/package.json create mode 100644 node_modules/domelementtype/readme.md create mode 100644 node_modules/domhandler/LICENSE create mode 100644 node_modules/domhandler/lib/esm/index.d.ts create mode 100644 node_modules/domhandler/lib/esm/index.d.ts.map create mode 100644 node_modules/domhandler/lib/esm/index.js create mode 100644 node_modules/domhandler/lib/esm/node.d.ts create mode 100644 node_modules/domhandler/lib/esm/node.d.ts.map create mode 100644 node_modules/domhandler/lib/esm/node.js create mode 100644 node_modules/domhandler/lib/esm/package.json create mode 100644 node_modules/domhandler/lib/index.d.ts create mode 100644 node_modules/domhandler/lib/index.d.ts.map create mode 100644 node_modules/domhandler/lib/index.js create mode 100644 node_modules/domhandler/lib/node.d.ts create mode 100644 node_modules/domhandler/lib/node.d.ts.map create mode 100644 node_modules/domhandler/lib/node.js create mode 100644 node_modules/domhandler/package.json create mode 100644 node_modules/domhandler/readme.md create mode 100644 node_modules/domutils/LICENSE create mode 100644 node_modules/domutils/lib/esm/feeds.d.ts create mode 100644 node_modules/domutils/lib/esm/feeds.d.ts.map create mode 100644 node_modules/domutils/lib/esm/feeds.js create mode 100644 node_modules/domutils/lib/esm/feeds.js.map create mode 100644 node_modules/domutils/lib/esm/helpers.d.ts create mode 100644 node_modules/domutils/lib/esm/helpers.d.ts.map create mode 100644 node_modules/domutils/lib/esm/helpers.js create mode 100644 node_modules/domutils/lib/esm/helpers.js.map create mode 100644 node_modules/domutils/lib/esm/index.d.ts create mode 100644 node_modules/domutils/lib/esm/index.d.ts.map create mode 100644 node_modules/domutils/lib/esm/index.js create mode 100644 node_modules/domutils/lib/esm/index.js.map create mode 100644 node_modules/domutils/lib/esm/legacy.d.ts create mode 100644 node_modules/domutils/lib/esm/legacy.d.ts.map create mode 100644 node_modules/domutils/lib/esm/legacy.js create mode 100644 node_modules/domutils/lib/esm/legacy.js.map create mode 100644 node_modules/domutils/lib/esm/manipulation.d.ts create mode 100644 node_modules/domutils/lib/esm/manipulation.d.ts.map create mode 100644 node_modules/domutils/lib/esm/manipulation.js create mode 100644 node_modules/domutils/lib/esm/manipulation.js.map create mode 100644 node_modules/domutils/lib/esm/package.json create mode 100644 node_modules/domutils/lib/esm/querying.d.ts create mode 100644 node_modules/domutils/lib/esm/querying.d.ts.map create mode 100644 node_modules/domutils/lib/esm/querying.js create mode 100644 node_modules/domutils/lib/esm/querying.js.map create mode 100644 node_modules/domutils/lib/esm/stringify.d.ts create mode 100644 node_modules/domutils/lib/esm/stringify.d.ts.map create mode 100644 node_modules/domutils/lib/esm/stringify.js create mode 100644 node_modules/domutils/lib/esm/stringify.js.map create mode 100644 node_modules/domutils/lib/esm/traversal.d.ts create mode 100644 node_modules/domutils/lib/esm/traversal.d.ts.map create mode 100644 node_modules/domutils/lib/esm/traversal.js create mode 100644 node_modules/domutils/lib/esm/traversal.js.map create mode 100644 node_modules/domutils/lib/feeds.d.ts create mode 100644 node_modules/domutils/lib/feeds.d.ts.map create mode 100644 node_modules/domutils/lib/feeds.js create mode 100644 node_modules/domutils/lib/feeds.js.map create mode 100644 node_modules/domutils/lib/helpers.d.ts create mode 100644 node_modules/domutils/lib/helpers.d.ts.map create mode 100644 node_modules/domutils/lib/helpers.js create mode 100644 node_modules/domutils/lib/helpers.js.map create mode 100644 node_modules/domutils/lib/index.d.ts create mode 100644 node_modules/domutils/lib/index.d.ts.map create mode 100644 node_modules/domutils/lib/index.js create mode 100644 node_modules/domutils/lib/index.js.map create mode 100644 node_modules/domutils/lib/legacy.d.ts create mode 100644 node_modules/domutils/lib/legacy.d.ts.map create mode 100644 node_modules/domutils/lib/legacy.js create mode 100644 node_modules/domutils/lib/legacy.js.map create mode 100644 node_modules/domutils/lib/manipulation.d.ts create mode 100644 node_modules/domutils/lib/manipulation.d.ts.map create mode 100644 node_modules/domutils/lib/manipulation.js create mode 100644 node_modules/domutils/lib/manipulation.js.map create mode 100644 node_modules/domutils/lib/querying.d.ts create mode 100644 node_modules/domutils/lib/querying.d.ts.map create mode 100644 node_modules/domutils/lib/querying.js create mode 100644 node_modules/domutils/lib/querying.js.map create mode 100644 node_modules/domutils/lib/stringify.d.ts create mode 100644 node_modules/domutils/lib/stringify.d.ts.map create mode 100644 node_modules/domutils/lib/stringify.js create mode 100644 node_modules/domutils/lib/stringify.js.map create mode 100644 node_modules/domutils/lib/traversal.d.ts create mode 100644 node_modules/domutils/lib/traversal.d.ts.map create mode 100644 node_modules/domutils/lib/traversal.js create mode 100644 node_modules/domutils/lib/traversal.js.map create mode 100644 node_modules/domutils/package.json create mode 100644 node_modules/domutils/readme.md create mode 100644 node_modules/entities/LICENSE create mode 100644 node_modules/entities/lib/decode.d.ts create mode 100644 node_modules/entities/lib/decode.d.ts.map create mode 100644 node_modules/entities/lib/decode.js create mode 100644 node_modules/entities/lib/decode.js.map create mode 100644 node_modules/entities/lib/decode_codepoint.d.ts create mode 100644 node_modules/entities/lib/decode_codepoint.d.ts.map create mode 100644 node_modules/entities/lib/decode_codepoint.js create mode 100644 node_modules/entities/lib/decode_codepoint.js.map create mode 100644 node_modules/entities/lib/encode.d.ts create mode 100644 node_modules/entities/lib/encode.d.ts.map create mode 100644 node_modules/entities/lib/encode.js create mode 100644 node_modules/entities/lib/encode.js.map create mode 100644 node_modules/entities/lib/escape.d.ts create mode 100644 node_modules/entities/lib/escape.d.ts.map create mode 100644 node_modules/entities/lib/escape.js create mode 100644 node_modules/entities/lib/escape.js.map create mode 100644 node_modules/entities/lib/esm/decode.d.ts create mode 100644 node_modules/entities/lib/esm/decode.d.ts.map create mode 100644 node_modules/entities/lib/esm/decode.js create mode 100644 node_modules/entities/lib/esm/decode.js.map create mode 100644 node_modules/entities/lib/esm/decode_codepoint.d.ts create mode 100644 node_modules/entities/lib/esm/decode_codepoint.d.ts.map create mode 100644 node_modules/entities/lib/esm/decode_codepoint.js create mode 100644 node_modules/entities/lib/esm/decode_codepoint.js.map create mode 100644 node_modules/entities/lib/esm/encode.d.ts create mode 100644 node_modules/entities/lib/esm/encode.d.ts.map create mode 100644 node_modules/entities/lib/esm/encode.js create mode 100644 node_modules/entities/lib/esm/encode.js.map create mode 100644 node_modules/entities/lib/esm/escape.d.ts create mode 100644 node_modules/entities/lib/esm/escape.d.ts.map create mode 100644 node_modules/entities/lib/esm/escape.js create mode 100644 node_modules/entities/lib/esm/escape.js.map create mode 100644 node_modules/entities/lib/esm/generated/decode-data-html.d.ts create mode 100644 node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map create mode 100644 node_modules/entities/lib/esm/generated/decode-data-html.js create mode 100644 node_modules/entities/lib/esm/generated/decode-data-html.js.map create mode 100644 node_modules/entities/lib/esm/generated/decode-data-xml.d.ts create mode 100644 node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/entities/lib/esm/generated/decode-data-xml.js create mode 100644 node_modules/entities/lib/esm/generated/decode-data-xml.js.map create mode 100644 node_modules/entities/lib/esm/generated/encode-html.d.ts create mode 100644 node_modules/entities/lib/esm/generated/encode-html.d.ts.map create mode 100644 node_modules/entities/lib/esm/generated/encode-html.js create mode 100644 node_modules/entities/lib/esm/generated/encode-html.js.map create mode 100644 node_modules/entities/lib/esm/index.d.ts create mode 100644 node_modules/entities/lib/esm/index.d.ts.map create mode 100644 node_modules/entities/lib/esm/index.js create mode 100644 node_modules/entities/lib/esm/index.js.map create mode 100644 node_modules/entities/lib/esm/package.json create mode 100644 node_modules/entities/lib/generated/decode-data-html.d.ts create mode 100644 node_modules/entities/lib/generated/decode-data-html.d.ts.map create mode 100644 node_modules/entities/lib/generated/decode-data-html.js create mode 100644 node_modules/entities/lib/generated/decode-data-html.js.map create mode 100644 node_modules/entities/lib/generated/decode-data-xml.d.ts create mode 100644 node_modules/entities/lib/generated/decode-data-xml.d.ts.map create mode 100644 node_modules/entities/lib/generated/decode-data-xml.js create mode 100644 node_modules/entities/lib/generated/decode-data-xml.js.map create mode 100644 node_modules/entities/lib/generated/encode-html.d.ts create mode 100644 node_modules/entities/lib/generated/encode-html.d.ts.map create mode 100644 node_modules/entities/lib/generated/encode-html.js create mode 100644 node_modules/entities/lib/generated/encode-html.js.map create mode 100644 node_modules/entities/lib/index.d.ts create mode 100644 node_modules/entities/lib/index.d.ts.map create mode 100644 node_modules/entities/lib/index.js create mode 100644 node_modules/entities/lib/index.js.map create mode 100644 node_modules/entities/package.json create mode 100644 node_modules/entities/readme.md create mode 100644 node_modules/he/LICENSE-MIT.txt create mode 100644 node_modules/he/README.md create mode 100755 node_modules/he/bin/he create mode 100644 node_modules/he/he.js create mode 100644 node_modules/he/man/he.1 create mode 100644 node_modules/he/package.json create mode 100644 node_modules/html-entities/LICENSE create mode 100644 node_modules/html-entities/README.md create mode 100644 node_modules/html-entities/lib/index.d.ts create mode 100644 node_modules/html-entities/lib/index.js create mode 100644 node_modules/html-entities/lib/index.js.flow create mode 100644 node_modules/html-entities/lib/named-references.js create mode 100644 node_modules/html-entities/lib/numeric-unicode-map.js create mode 100644 node_modules/html-entities/lib/surrogate-pairs.js create mode 100644 node_modules/html-entities/package.json create mode 100644 node_modules/ics/LICENSE create mode 100644 node_modules/ics/README.md create mode 100644 node_modules/ics/dist/defaults.js create mode 100644 node_modules/ics/dist/index.js create mode 100644 node_modules/ics/dist/pipeline/build.js create mode 100644 node_modules/ics/dist/pipeline/format.js create mode 100644 node_modules/ics/dist/pipeline/index.js create mode 100644 node_modules/ics/dist/pipeline/validate.js create mode 100644 node_modules/ics/dist/schema/index.js create mode 100644 node_modules/ics/dist/utils/fold-line.js create mode 100644 node_modules/ics/dist/utils/format-date.js create mode 100644 node_modules/ics/dist/utils/format-duration.js create mode 100644 node_modules/ics/dist/utils/format-text.js create mode 100644 node_modules/ics/dist/utils/index.js create mode 100644 node_modules/ics/dist/utils/set-alarm.js create mode 100644 node_modules/ics/dist/utils/set-contact.js create mode 100644 node_modules/ics/dist/utils/set-description.js create mode 100644 node_modules/ics/dist/utils/set-geolocation.js create mode 100644 node_modules/ics/dist/utils/set-location.js create mode 100644 node_modules/ics/dist/utils/set-organizer.js create mode 100644 node_modules/ics/dist/utils/set-summary.js create mode 100644 node_modules/ics/index.d.ts create mode 100644 node_modules/ics/package.json create mode 100644 node_modules/nanoid/LICENSE create mode 100644 node_modules/nanoid/README.md create mode 100644 node_modules/nanoid/async/index.browser.cjs create mode 100644 node_modules/nanoid/async/index.browser.js create mode 100644 node_modules/nanoid/async/index.cjs create mode 100644 node_modules/nanoid/async/index.d.ts create mode 100644 node_modules/nanoid/async/index.js create mode 100644 node_modules/nanoid/async/index.native.js create mode 100644 node_modules/nanoid/async/package.json create mode 100755 node_modules/nanoid/bin/nanoid.cjs create mode 100644 node_modules/nanoid/index.browser.cjs create mode 100644 node_modules/nanoid/index.browser.js create mode 100644 node_modules/nanoid/index.cjs create mode 100644 node_modules/nanoid/index.d.ts create mode 100644 node_modules/nanoid/index.js create mode 100644 node_modules/nanoid/nanoid.js create mode 100644 node_modules/nanoid/non-secure/index.cjs create mode 100644 node_modules/nanoid/non-secure/index.d.ts create mode 100644 node_modules/nanoid/non-secure/index.js create mode 100644 node_modules/nanoid/non-secure/package.json create mode 100644 node_modules/nanoid/package.json create mode 100644 node_modules/nanoid/url-alphabet/index.cjs create mode 100644 node_modules/nanoid/url-alphabet/index.js create mode 100644 node_modules/nanoid/url-alphabet/package.json create mode 100755 node_modules/node-html-parser/CHANGELOG.md create mode 100644 node_modules/node-html-parser/LICENSE create mode 100644 node_modules/node-html-parser/README.md create mode 100644 node_modules/node-html-parser/dist/back.d.ts create mode 100644 node_modules/node-html-parser/dist/back.js create mode 100644 node_modules/node-html-parser/dist/index.d.ts create mode 100644 node_modules/node-html-parser/dist/index.js create mode 100644 node_modules/node-html-parser/dist/main.js create mode 100644 node_modules/node-html-parser/dist/matcher.d.ts create mode 100644 node_modules/node-html-parser/dist/matcher.js create mode 100644 node_modules/node-html-parser/dist/nodes/comment.d.ts create mode 100644 node_modules/node-html-parser/dist/nodes/comment.js create mode 100644 node_modules/node-html-parser/dist/nodes/html.d.ts create mode 100644 node_modules/node-html-parser/dist/nodes/html.js create mode 100644 node_modules/node-html-parser/dist/nodes/node.d.ts create mode 100644 node_modules/node-html-parser/dist/nodes/node.js create mode 100644 node_modules/node-html-parser/dist/nodes/text.d.ts create mode 100644 node_modules/node-html-parser/dist/nodes/text.js create mode 100644 node_modules/node-html-parser/dist/nodes/type.d.ts create mode 100644 node_modules/node-html-parser/dist/nodes/type.js create mode 100644 node_modules/node-html-parser/dist/parse.d.ts create mode 100644 node_modules/node-html-parser/dist/parse.js create mode 100644 node_modules/node-html-parser/dist/valid.d.ts create mode 100644 node_modules/node-html-parser/dist/valid.js create mode 100644 node_modules/node-html-parser/dist/void-tag.d.ts create mode 100644 node_modules/node-html-parser/dist/void-tag.js create mode 100644 node_modules/node-html-parser/package.json create mode 100644 node_modules/nth-check/LICENSE create mode 100644 node_modules/nth-check/README.md create mode 100644 node_modules/nth-check/lib/compile.d.ts create mode 100644 node_modules/nth-check/lib/compile.d.ts.map create mode 100644 node_modules/nth-check/lib/compile.js create mode 100644 node_modules/nth-check/lib/compile.js.map create mode 100644 node_modules/nth-check/lib/esm/compile.d.ts create mode 100644 node_modules/nth-check/lib/esm/compile.d.ts.map create mode 100644 node_modules/nth-check/lib/esm/compile.js create mode 100644 node_modules/nth-check/lib/esm/compile.js.map create mode 100644 node_modules/nth-check/lib/esm/index.d.ts create mode 100644 node_modules/nth-check/lib/esm/index.d.ts.map create mode 100644 node_modules/nth-check/lib/esm/index.js create mode 100644 node_modules/nth-check/lib/esm/index.js.map create mode 100644 node_modules/nth-check/lib/esm/package.json create mode 100644 node_modules/nth-check/lib/esm/parse.d.ts create mode 100644 node_modules/nth-check/lib/esm/parse.d.ts.map create mode 100644 node_modules/nth-check/lib/esm/parse.js create mode 100644 node_modules/nth-check/lib/esm/parse.js.map create mode 100644 node_modules/nth-check/lib/index.d.ts create mode 100644 node_modules/nth-check/lib/index.d.ts.map create mode 100644 node_modules/nth-check/lib/index.js create mode 100644 node_modules/nth-check/lib/index.js.map create mode 100644 node_modules/nth-check/lib/parse.d.ts create mode 100644 node_modules/nth-check/lib/parse.d.ts.map create mode 100644 node_modules/nth-check/lib/parse.js create mode 100644 node_modules/nth-check/lib/parse.js.map create mode 100644 node_modules/nth-check/package.json create mode 100644 node_modules/property-expr/CHANGELOG.md create mode 100644 node_modules/property-expr/LICENSE.txt create mode 100644 node_modules/property-expr/README.md create mode 100644 node_modules/property-expr/compiler.js create mode 100644 node_modules/property-expr/index.d.ts create mode 100644 node_modules/property-expr/index.js create mode 100644 node_modules/property-expr/package.json create mode 100644 node_modules/tiny-case/README.md create mode 100644 node_modules/tiny-case/index.d.ts create mode 100644 node_modules/tiny-case/index.js create mode 100644 node_modules/tiny-case/package.json create mode 100644 node_modules/tiny-case/test.js create mode 100644 node_modules/tiny-case/tsconfig.json create mode 100644 node_modules/toposort/.npmignore create mode 100644 node_modules/toposort/.travis.yml create mode 100644 node_modules/toposort/License create mode 100644 node_modules/toposort/Makefile create mode 100644 node_modules/toposort/README.md create mode 100644 node_modules/toposort/component.json create mode 100644 node_modules/toposort/graph.svg create mode 100644 node_modules/toposort/index.js create mode 100644 node_modules/toposort/package.json create mode 100644 node_modules/toposort/test.js create mode 100644 node_modules/type-fest/index.d.ts create mode 100644 node_modules/type-fest/package.json create mode 100644 node_modules/type-fest/readme.md create mode 100644 node_modules/type-fest/source/async-return-type.d.ts create mode 100644 node_modules/type-fest/source/asyncify.d.ts create mode 100644 node_modules/type-fest/source/basic.d.ts create mode 100644 node_modules/type-fest/source/camel-case.d.ts create mode 100644 node_modules/type-fest/source/camel-cased-properties-deep.d.ts create mode 100644 node_modules/type-fest/source/camel-cased-properties.d.ts create mode 100644 node_modules/type-fest/source/conditional-except.d.ts create mode 100644 node_modules/type-fest/source/conditional-keys.d.ts create mode 100644 node_modules/type-fest/source/conditional-pick.d.ts create mode 100644 node_modules/type-fest/source/delimiter-case.d.ts create mode 100644 node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts create mode 100644 node_modules/type-fest/source/delimiter-cased-properties.d.ts create mode 100644 node_modules/type-fest/source/entries.d.ts create mode 100644 node_modules/type-fest/source/entry.d.ts create mode 100644 node_modules/type-fest/source/exact.d.ts create mode 100644 node_modules/type-fest/source/except.d.ts create mode 100644 node_modules/type-fest/source/fixed-length-array.d.ts create mode 100644 node_modules/type-fest/source/get.d.ts create mode 100644 node_modules/type-fest/source/has-optional-keys.d.ts create mode 100644 node_modules/type-fest/source/has-required-keys.d.ts create mode 100644 node_modules/type-fest/source/includes.d.ts create mode 100644 node_modules/type-fest/source/internal.d.ts create mode 100644 node_modules/type-fest/source/invariant-of.d.ts create mode 100644 node_modules/type-fest/source/iterable-element.d.ts create mode 100644 node_modules/type-fest/source/join.d.ts create mode 100644 node_modules/type-fest/source/jsonify.d.ts create mode 100644 node_modules/type-fest/source/kebab-case.d.ts create mode 100644 node_modules/type-fest/source/kebab-cased-properties-deep.d.ts create mode 100644 node_modules/type-fest/source/kebab-cased-properties.d.ts create mode 100644 node_modules/type-fest/source/last-array-element.d.ts create mode 100644 node_modules/type-fest/source/literal-to-primitive.d.ts create mode 100644 node_modules/type-fest/source/literal-union.d.ts create mode 100644 node_modules/type-fest/source/merge-exclusive.d.ts create mode 100644 node_modules/type-fest/source/merge.d.ts create mode 100644 node_modules/type-fest/source/multidimensional-array.d.ts create mode 100644 node_modules/type-fest/source/multidimensional-readonly-array.d.ts create mode 100644 node_modules/type-fest/source/mutable.d.ts create mode 100644 node_modules/type-fest/source/numeric.d.ts create mode 100644 node_modules/type-fest/source/observable-like.d.ts create mode 100644 node_modules/type-fest/source/opaque.d.ts create mode 100644 node_modules/type-fest/source/optional-keys-of.d.ts create mode 100644 node_modules/type-fest/source/package-json.d.ts create mode 100644 node_modules/type-fest/source/partial-deep.d.ts create mode 100644 node_modules/type-fest/source/partial-on-undefined-deep.d.ts create mode 100644 node_modules/type-fest/source/pascal-case.d.ts create mode 100644 node_modules/type-fest/source/pascal-cased-properties-deep.d.ts create mode 100644 node_modules/type-fest/source/pascal-cased-properties.d.ts create mode 100644 node_modules/type-fest/source/primitive.d.ts create mode 100644 node_modules/type-fest/source/promisable.d.ts create mode 100644 node_modules/type-fest/source/promise-value.d.ts create mode 100644 node_modules/type-fest/source/readonly-deep.d.ts create mode 100644 node_modules/type-fest/source/readonly-tuple.d.ts create mode 100644 node_modules/type-fest/source/remove-index-signature.d.ts create mode 100644 node_modules/type-fest/source/replace.d.ts create mode 100644 node_modules/type-fest/source/require-all-or-none.d.ts create mode 100644 node_modules/type-fest/source/require-at-least-one.d.ts create mode 100644 node_modules/type-fest/source/require-exactly-one.d.ts create mode 100644 node_modules/type-fest/source/required-keys-of.d.ts create mode 100644 node_modules/type-fest/source/schema.d.ts create mode 100644 node_modules/type-fest/source/screaming-snake-case.d.ts create mode 100644 node_modules/type-fest/source/set-non-nullable.d.ts create mode 100644 node_modules/type-fest/source/set-optional.d.ts create mode 100644 node_modules/type-fest/source/set-required.d.ts create mode 100644 node_modules/type-fest/source/set-return-type.d.ts create mode 100644 node_modules/type-fest/source/simplify.d.ts create mode 100644 node_modules/type-fest/source/snake-case.d.ts create mode 100644 node_modules/type-fest/source/snake-cased-properties-deep.d.ts create mode 100644 node_modules/type-fest/source/snake-cased-properties.d.ts create mode 100644 node_modules/type-fest/source/split.d.ts create mode 100644 node_modules/type-fest/source/spread.d.ts create mode 100644 node_modules/type-fest/source/string-key-of.d.ts create mode 100644 node_modules/type-fest/source/stringified.d.ts create mode 100644 node_modules/type-fest/source/trim.d.ts create mode 100644 node_modules/type-fest/source/tsconfig-json.d.ts create mode 100644 node_modules/type-fest/source/typed-array.d.ts create mode 100644 node_modules/type-fest/source/union-to-intersection.d.ts create mode 100644 node_modules/type-fest/source/value-of.d.ts create mode 100644 node_modules/type-fest/source/writable.d.ts create mode 100644 node_modules/yup/LICENSE.md create mode 100644 node_modules/yup/README.md create mode 100644 node_modules/yup/index.d.ts create mode 100644 node_modules/yup/index.esm.js create mode 100644 node_modules/yup/index.js create mode 100644 node_modules/yup/package.json diff --git a/node_modules/.bin/he b/node_modules/.bin/he new file mode 120000 index 00000000..2a8eb5e0 --- /dev/null +++ b/node_modules/.bin/he @@ -0,0 +1 @@ +../he/bin/he \ No newline at end of file diff --git a/node_modules/.bin/nanoid b/node_modules/.bin/nanoid new file mode 120000 index 00000000..e2be547b --- /dev/null +++ b/node_modules/.bin/nanoid @@ -0,0 +1 @@ +../nanoid/bin/nanoid.cjs \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 00000000..b967d1d8 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,226 @@ +{ + "name": "ufc-cal", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/ics": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ics/-/ics-3.4.0.tgz", + "integrity": "sha512-ewKO7nF5BKhVKas3XmjB1siXdhJ7OvojY+HmD1ik/lozuzcZdy+Wt6IbB2San2gvHZAMUZhTa4UQyCE1I8e+sw==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.23", + "yup": "^1.2.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.9.tgz", + "integrity": "sha512-nQ+MRf0PmRTLcMalVqMsWvceSaBydBCBlnQSL78HVk/E8e0Aazyao4SI9aB67XAAgOgHMsw7q5dJBUPPt9XE3g==", + "dev": true, + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/property-expr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz", + "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==", + "dev": true + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "dev": true + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.2.0.tgz", + "integrity": "sha512-PPqYKSAXjpRCgLgLKVGPA33v5c/WgEx3wi6NFjIiegz90zSwyMpvTFp/uGcVnnbx6to28pgnzp/q8ih3QRjLMQ==", + "dev": true, + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + } + } +} diff --git a/node_modules/boolbase/README.md b/node_modules/boolbase/README.md new file mode 100644 index 00000000..85eefa5e --- /dev/null +++ b/node_modules/boolbase/README.md @@ -0,0 +1,10 @@ +#boolbase +This very simple module provides two basic functions, one that always returns true (`trueFunc`) and one that always returns false (`falseFunc`). + +###WTF? + +By having only a single instance of these functions around, it's possible to do some nice optimizations. Eg. [`CSSselect`](https://github.com/fb55/CSSselect) uses these functions to determine whether a selector won't match any elements. If that's the case, the DOM doesn't even have to be touched. + +###And why is this a separate module? + +I'm trying to modularize `CSSselect` and most modules depend on these functions. IMHO, having a separate module is the easiest solution to this problem. \ No newline at end of file diff --git a/node_modules/boolbase/index.js b/node_modules/boolbase/index.js new file mode 100644 index 00000000..8799fd95 --- /dev/null +++ b/node_modules/boolbase/index.js @@ -0,0 +1,8 @@ +module.exports = { + trueFunc: function trueFunc(){ + return true; + }, + falseFunc: function falseFunc(){ + return false; + } +}; \ No newline at end of file diff --git a/node_modules/boolbase/package.json b/node_modules/boolbase/package.json new file mode 100644 index 00000000..78330a8f --- /dev/null +++ b/node_modules/boolbase/package.json @@ -0,0 +1,23 @@ +{ + "name": "boolbase", + "version": "1.0.0", + "description": "two functions: One that returns true, one that returns false", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/fb55/boolbase" + }, + "keywords": [ + "boolean", + "function" + ], + "author": "Felix Boehm ", + "license": "ISC", + "bugs": { + "url": "https://github.com/fb55/boolbase/issues" + }, + "homepage": "https://github.com/fb55/boolbase" +} diff --git a/node_modules/css-select/LICENSE b/node_modules/css-select/LICENSE new file mode 100644 index 00000000..c464f863 --- /dev/null +++ b/node_modules/css-select/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/css-select/README.md b/node_modules/css-select/README.md new file mode 100644 index 00000000..2cde38c8 --- /dev/null +++ b/node_modules/css-select/README.md @@ -0,0 +1,264 @@ +# css-select [![NPM version](http://img.shields.io/npm/v/css-select.svg)](https://npmjs.org/package/css-select) [![Build Status](https://travis-ci.com/fb55/css-select.svg?branch=master)](http://travis-ci.com/fb55/css-select) [![Downloads](https://img.shields.io/npm/dm/css-select.svg)](https://npmjs.org/package/css-select) [![Coverage](https://coveralls.io/repos/fb55/css-select/badge.svg?branch=master)](https://coveralls.io/r/fb55/css-select) + +A CSS selector compiler and engine + +## What? + +As a **compiler**, css-select turns CSS selectors into functions that tests if +elements match them. + +As an **engine**, css-select looks through a DOM tree, searching for elements. +Elements are tested "from the top", similar to how browsers execute CSS +selectors. + +In its default configuration, css-select queries the DOM structure of the +[`domhandler`](https://github.com/fb55/domhandler) module (also known as +htmlparser2 DOM). To query alternative DOM structures, see [`Options`](#options) +below. + +**Features:** + +- 🔬 Full implementation of CSS3 selectors, as well as most CSS4 selectors +- 🧪 Partial implementation of jQuery/Sizzle extensions (see + [cheerio-select](https://github.com/cheeriojs/cheerio-select) for the + remaining selectors) +- 🧑‍🔬 High test coverage, including the full test suites from + [`Sizzle`](https://github.com/jquery/sizzle), + [`Qwery`](https://github.com/ded/qwery) and + [`NWMatcher`](https://github.com/dperini/nwmatcher/) and . +- 🥼 Reliably great performance + +## Why? + +Most CSS engines written in JavaScript execute selectors left-to-right. That +means thet execute every component of the selector in order, from left to right. +As an example: For the selector `a b`, these engines will first query for `a` +elements, then search these for `b` elements. (That's the approach of eg. +[`Sizzle`](https://github.com/jquery/sizzle), +[`Qwery`](https://github.com/ded/qwery) and +[`NWMatcher`](https://github.com/dperini/nwmatcher/).) + +While this works, it has some downsides: Children of `a`s will be checked +multiple times; first, to check if they are also `a`s, then, for every superior +`a` once, if they are `b`s. Using +[Big O notation](http://en.wikipedia.org/wiki/Big_O_notation), that would be +`O(n^(k+1))`, where `k` is the number of descendant selectors (that's the space +in the example above). + +The far more efficient approach is to first look for `b` elements, then check if +they have superior `a` elements: Using big O notation again, that would be +`O(n)`. That's called right-to-left execution. + +And that's what css-select does – and why it's quite performant. + +## How does it work? + +By building a stack of functions. + +_Wait, what?_ + +Okay, so let's suppose we want to compile the selector `a b`, for right-to-left +execution. We start by _parsing_ the selector. This turns the selector into an +array of the building blocks. That's what the +[`css-what`](https://github.com/fb55/css-what) module is for, if you want to +have a look. + +Anyway, after parsing, we end up with an array like this one: + +```js +[ + { type: "tag", name: "a" }, + { type: "descendant" }, + { type: "tag", name: "b" }, +]; +``` + +(Actually, this array is wrapped in another array, but that's another story, +involving commas in selectors.) + +Now that we know the meaning of every part of the selector, we can compile it. +That is where things become interesting. + +The basic idea is to turn every part of the selector into a function, which +takes an element as its only argument. The function checks whether a passed +element matches its part of the selector: If it does, the element is passed to +the next function representing the next part of the selector. That function does +the same. If an element is accepted by all parts of the selector, it _matches_ +the selector and double rainbow ALL THE WAY. + +As said before, we want to do right-to-left execution with all the big O +improvements. That means elements are passed from the rightmost part of the +selector (`b` in our example) to the leftmost (~~which would be `c`~~ of course +`a`). + +For traversals, such as the _descendant_ operating the space between `a` and +`b`, we walk up the DOM tree, starting from the element passed as argument. + +_//TODO: More in-depth description. Implementation details. Build a spaceship._ + +## API + +```js +const CSSselect = require("css-select"); +``` + +**Note:** css-select throws errors when invalid selectors are passed to it. This +is done to aid with writing css selectors, but can be unexpected when processing +arbitrary strings. + +#### `CSSselect.selectAll(query, elems, options)` + +Queries `elems`, returns an array containing all matches. + +- `query` can be either a CSS selector or a function. +- `elems` can be either an array of elements, or a single element. If it is an + element, its children will be queried. +- `options` is described below. + +Aliases: `default` export, `CSSselect.iterate(query, elems)`. + +#### `CSSselect.compile(query, options)` + +Compiles the query, returns a function. + +#### `CSSselect.is(elem, query, options)` + +Tests whether or not an element is matched by `query`. `query` can be either a +CSS selector or a function. + +#### `CSSselect.selectOne(query, elems, options)` + +Arguments are the same as for `CSSselect.selectAll(query, elems)`. Only returns +the first match, or `null` if there was no match. + +### Options + +All options are optional. + +- `xmlMode`: When enabled, tag names will be case-sensitive. Default: `false`. +- `rootFunc`: The last function in the stack, will be called with the last + element that's looked at. +- `adapter`: The adapter to use when interacting with the backing DOM + structure. By default it uses the `domutils` module. +- `context`: The context of the current query. Used to limit the scope of + searches. Can be matched directly using the `:scope` pseudo-class. +- `relativeSelector`: By default, selectors are relative to the `context`, + which means that no parent elements of the context will be matched. (Eg. + `a b c` with context `b` will never give any results.) If `relativeSelector` + is set to `false`, selectors won't be + [absolutized](http://www.w3.org/TR/selectors4/#absolutizing) and selectors + can test for parent elements outside of the `context`. +- `cacheResults`: Allow css-select to cache results for some selectors, + sometimes greatly improving querying performance. Disable this if your + document can change in between queries with the same compiled selector. + Default: `true`. +- `pseudos`: A map of pseudo-class names to functions or strings. + +#### Custom Adapters + +A custom adapter must match the interface described +[here](https://github.com/fb55/css-select/blob/1aa44bdd64aaf2ebdfd7f338e2e76bed36521957/src/types.ts#L6-L96). + +You may want to have a look at [`domutils`](https://github.com/fb55/domutils) to +see the default implementation, or at +[`css-select-browser-adapter`](https://github.com/nrkn/css-select-browser-adapter/blob/master/index.js) +for an implementation backed by the DOM. + +## Supported selectors + +_As defined by CSS 4 and / or jQuery._ + +- [Selector lists](https://developer.mozilla.org/en-US/docs/Web/CSS/Selector_list) + (`,`) +- [Universal](https://developer.mozilla.org/en-US/docs/Web/CSS/Universal_selectors) + (`*`) +- [Type](https://developer.mozilla.org/en-US/docs/Web/CSS/Type_selectors) + (``) +- [Descendant](https://developer.mozilla.org/en-US/docs/Web/CSS/Descendant_combinator) + (` `) +- [Child](https://developer.mozilla.org/en-US/docs/Web/CSS/Child_combinator) + (`>`) +- Parent (`<`) +- [Adjacent sibling](https://developer.mozilla.org/en-US/docs/Web/CSS/Adjacent_sibling_combinator) + (`+`) +- [General sibling](https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_combinator) + (`~`) +- [Attribute](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors) + (`[attr=foo]`), with supported comparisons: + - `[attr]` (existential) + - `=` + - `~=` + - `|=` + - `*=` + - `^=` + - `$=` + - `!=` + - `i` and `s` can be added after the comparison to make the comparison + case-insensitive or case-sensitive (eg. `[attr=foo i]`). If neither is + supplied, css-select will follow the HTML spec's + [case-sensitivity rules](https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors). +- Pseudos: + - [`:not`](https://developer.mozilla.org/en-US/docs/Web/CSS/:not) + - [`:contains`](https://api.jquery.com/contains-selector) + - `:icontains` (case-insensitive version of `:contains`) + - [`:has`](https://developer.mozilla.org/en-US/docs/Web/CSS/:has) + - [`:root`](https://developer.mozilla.org/en-US/docs/Web/CSS/:root) + - [`:empty`](https://developer.mozilla.org/en-US/docs/Web/CSS/:empty) + - [`:parent`](https://api.jquery.com/parent-selector) + - [`:first-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child), + [`:last-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-child), + [`:first-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-of-type), + [`:last-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-of-type) + - [`:only-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:only-of-type), + [`:only-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:only-child) + - [`:nth-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child), + [`:nth-last-child`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-child), + [`:nth-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-of-type), + [`:nth-last-of-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-of-type), + - [`:link`](https://developer.mozilla.org/en-US/docs/Web/CSS/:link), + [`:any-link`](https://developer.mozilla.org/en-US/docs/Web/CSS/:any-link) + - [`:visited`](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited), + [`:hover`](https://developer.mozilla.org/en-US/docs/Web/CSS/:hover), + [`:active`](https://developer.mozilla.org/en-US/docs/Web/CSS/:active) + (these depend on optional `Adapter` methods, so these will only match + elements if implemented in `Adapter`) + - [`:selected`](https://api.jquery.com/selected-selector), + [`:checked`](https://developer.mozilla.org/en-US/docs/Web/CSS/:checked) + - [`:enabled`](https://developer.mozilla.org/en-US/docs/Web/CSS/:enabled), + [`:disabled`](https://developer.mozilla.org/en-US/docs/Web/CSS/:disabled) + - [`:required`](https://developer.mozilla.org/en-US/docs/Web/CSS/:required), + [`:optional`](https://developer.mozilla.org/en-US/docs/Web/CSS/:optional) + - [`:header`](https://api.jquery.com/header-selector), + [`:button`](https://api.jquery.com/button-selector), + [`:input`](https://api.jquery.com/input-selector), + [`:text`](https://api.jquery.com/text-selector), + [`:checkbox`](https://api.jquery.com/checkbox-selector), + [`:file`](https://api.jquery.com/file-selector), + [`:password`](https://api.jquery.com/password-selector), + [`:reset`](https://api.jquery.com/reset-selector), + [`:radio`](https://api.jquery.com/radio-selector) etc. + - [`:is`](https://developer.mozilla.org/en-US/docs/Web/CSS/:is), plus its + legacy alias `:matches` + - [`:scope`](https://developer.mozilla.org/en-US/docs/Web/CSS/:scope) + (uses the context from the passed options) + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). Tidelift will +coordinate the fix and disclosure. + +## `css-select` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `css-select` and thousands of other packages are working with +Tidelift to deliver commercial support and maintenance for the open source +dependencies you use to build your applications. Save time, reduce risk, and +improve code health, while paying the maintainers of the exact dependencies you +use. +[Learn more.](https://tidelift.com/subscription/pkg/npm-css-select?utm_source=npm-css-select&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/css-select/lib/attributes.d.ts b/node_modules/css-select/lib/attributes.d.ts new file mode 100644 index 00000000..27b60a58 --- /dev/null +++ b/node_modules/css-select/lib/attributes.d.ts @@ -0,0 +1,7 @@ +import type { CompiledQuery, InternalOptions } from "./types.js"; +import type { AttributeSelector, AttributeAction } from "css-what"; +/** + * Attribute selectors + */ +export declare const attributeRules: Record(next: CompiledQuery, data: AttributeSelector, options: InternalOptions) => CompiledQuery>; +//# sourceMappingURL=attributes.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/attributes.d.ts.map b/node_modules/css-select/lib/attributes.d.ts.map new file mode 100644 index 00000000..aafba154 --- /dev/null +++ b/node_modules/css-select/lib/attributes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["attributes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA+EnE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAC/B,eAAe,EACf,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAC3B,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,KAC1C,aAAa,CAAC,WAAW,CAAC,CAsLlC,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/attributes.js b/node_modules/css-select/lib/attributes.js new file mode 100644 index 00000000..3c6867f6 --- /dev/null +++ b/node_modules/css-select/lib/attributes.js @@ -0,0 +1,236 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.attributeRules = void 0; +var boolbase_1 = __importDefault(require("boolbase")); +/** + * All reserved characters in a regex, used for escaping. + * + * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license + * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794 + */ +var reChars = /[-[\]{}()*+?.,\\^$|#\s]/g; +function escapeRegex(value) { + return value.replace(reChars, "\\$&"); +} +/** + * Attributes that are case-insensitive in HTML. + * + * @private + * @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors + */ +var caseInsensitiveAttributes = new Set([ + "accept", + "accept-charset", + "align", + "alink", + "axis", + "bgcolor", + "charset", + "checked", + "clear", + "codetype", + "color", + "compact", + "declare", + "defer", + "dir", + "direction", + "disabled", + "enctype", + "face", + "frame", + "hreflang", + "http-equiv", + "lang", + "language", + "link", + "media", + "method", + "multiple", + "nohref", + "noresize", + "noshade", + "nowrap", + "readonly", + "rel", + "rev", + "rules", + "scope", + "scrolling", + "selected", + "shape", + "target", + "text", + "type", + "valign", + "valuetype", + "vlink", +]); +function shouldIgnoreCase(selector, options) { + return typeof selector.ignoreCase === "boolean" + ? selector.ignoreCase + : selector.ignoreCase === "quirks" + ? !!options.quirksMode + : !options.xmlMode && caseInsensitiveAttributes.has(selector.name); +} +/** + * Attribute selectors + */ +exports.attributeRules = { + equals: function (next, data, options) { + var adapter = options.adapter; + var name = data.name; + var value = data.value; + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return function (elem) { + var attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length === value.length && + attr.toLowerCase() === value && + next(elem)); + }; + } + return function (elem) { + return adapter.getAttributeValue(elem, name) === value && next(elem); + }; + }, + hyphen: function (next, data, options) { + var adapter = options.adapter; + var name = data.name; + var value = data.value; + var len = value.length; + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return function hyphenIC(elem) { + var attr = adapter.getAttributeValue(elem, name); + return (attr != null && + (attr.length === len || attr.charAt(len) === "-") && + attr.substr(0, len).toLowerCase() === value && + next(elem)); + }; + } + return function hyphen(elem) { + var attr = adapter.getAttributeValue(elem, name); + return (attr != null && + (attr.length === len || attr.charAt(len) === "-") && + attr.substr(0, len) === value && + next(elem)); + }; + }, + element: function (next, data, options) { + var adapter = options.adapter; + var name = data.name, value = data.value; + if (/\s/.test(value)) { + return boolbase_1.default.falseFunc; + } + var regex = new RegExp("(?:^|\\s)".concat(escapeRegex(value), "(?:$|\\s)"), shouldIgnoreCase(data, options) ? "i" : ""); + return function element(elem) { + var attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length >= value.length && + regex.test(attr) && + next(elem)); + }; + }, + exists: function (next, _a, _b) { + var name = _a.name; + var adapter = _b.adapter; + return function (elem) { return adapter.hasAttrib(elem, name) && next(elem); }; + }, + start: function (next, data, options) { + var adapter = options.adapter; + var name = data.name; + var value = data.value; + var len = value.length; + if (len === 0) { + return boolbase_1.default.falseFunc; + } + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return function (elem) { + var attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length >= len && + attr.substr(0, len).toLowerCase() === value && + next(elem)); + }; + } + return function (elem) { + var _a; + return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.startsWith(value)) && + next(elem); + }; + }, + end: function (next, data, options) { + var adapter = options.adapter; + var name = data.name; + var value = data.value; + var len = -value.length; + if (len === 0) { + return boolbase_1.default.falseFunc; + } + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return function (elem) { + var _a; + return ((_a = adapter + .getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.substr(len).toLowerCase()) === value && next(elem); + }; + } + return function (elem) { + var _a; + return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.endsWith(value)) && + next(elem); + }; + }, + any: function (next, data, options) { + var adapter = options.adapter; + var name = data.name, value = data.value; + if (value === "") { + return boolbase_1.default.falseFunc; + } + if (shouldIgnoreCase(data, options)) { + var regex_1 = new RegExp(escapeRegex(value), "i"); + return function anyIC(elem) { + var attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length >= value.length && + regex_1.test(attr) && + next(elem)); + }; + } + return function (elem) { + var _a; + return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.includes(value)) && + next(elem); + }; + }, + not: function (next, data, options) { + var adapter = options.adapter; + var name = data.name; + var value = data.value; + if (value === "") { + return function (elem) { + return !!adapter.getAttributeValue(elem, name) && next(elem); + }; + } + else if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return function (elem) { + var attr = adapter.getAttributeValue(elem, name); + return ((attr == null || + attr.length !== value.length || + attr.toLowerCase() !== value) && + next(elem)); + }; + } + return function (elem) { + return adapter.getAttributeValue(elem, name) !== value && next(elem); + }; + }, +}; +//# sourceMappingURL=attributes.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/attributes.js.map b/node_modules/css-select/lib/attributes.js.map new file mode 100644 index 00000000..e542c973 --- /dev/null +++ b/node_modules/css-select/lib/attributes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["attributes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/compile.d.ts b/node_modules/css-select/lib/compile.d.ts new file mode 100644 index 00000000..f67b508a --- /dev/null +++ b/node_modules/css-select/lib/compile.d.ts @@ -0,0 +1,13 @@ +import { Selector } from "css-what"; +import type { CompiledQuery, InternalOptions, InternalSelector } from "./types.js"; +/** + * Compiles a selector to an executable function. + * + * @param selector Selector to compile. + * @param options Compilation options. + * @param context Optional context for the selector. + */ +export declare function compile(selector: string | Selector[][], options: InternalOptions, context?: Node[] | Node): CompiledQuery; +export declare function compileUnsafe(selector: string | Selector[][], options: InternalOptions, context?: Node[] | Node): CompiledQuery; +export declare function compileToken(token: InternalSelector[][], options: InternalOptions, context?: Node[] | Node): CompiledQuery; +//# sourceMappingURL=compile.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/compile.d.ts.map b/node_modules/css-select/lib/compile.d.ts.map new file mode 100644 index 00000000..59231bc9 --- /dev/null +++ b/node_modules/css-select/lib/compile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAgB,MAAM,UAAU,CAAC;AAQzD,OAAO,KAAK,EACR,aAAa,EACb,eAAe,EACf,gBAAgB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAClD,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAC/B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GACxB,aAAa,CAAC,IAAI,CAAC,CAGrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACxD,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAC/B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GACxB,aAAa,CAAC,WAAW,CAAC,CAG5B;AAqDD,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACvD,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAC3B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GACxB,aAAa,CAAC,WAAW,CAAC,CAsD5B"} \ No newline at end of file diff --git a/node_modules/css-select/lib/compile.js b/node_modules/css-select/lib/compile.js new file mode 100644 index 00000000..cf0507c1 --- /dev/null +++ b/node_modules/css-select/lib/compile.js @@ -0,0 +1,151 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.compileToken = exports.compileUnsafe = exports.compile = void 0; +var css_what_1 = require("css-what"); +var boolbase_1 = __importDefault(require("boolbase")); +var sort_js_1 = __importStar(require("./sort.js")); +var general_js_1 = require("./general.js"); +var subselects_js_1 = require("./pseudo-selectors/subselects.js"); +/** + * Compiles a selector to an executable function. + * + * @param selector Selector to compile. + * @param options Compilation options. + * @param context Optional context for the selector. + */ +function compile(selector, options, context) { + var next = compileUnsafe(selector, options, context); + return (0, subselects_js_1.ensureIsTag)(next, options.adapter); +} +exports.compile = compile; +function compileUnsafe(selector, options, context) { + var token = typeof selector === "string" ? (0, css_what_1.parse)(selector) : selector; + return compileToken(token, options, context); +} +exports.compileUnsafe = compileUnsafe; +function includesScopePseudo(t) { + return (t.type === css_what_1.SelectorType.Pseudo && + (t.name === "scope" || + (Array.isArray(t.data) && + t.data.some(function (data) { return data.some(includesScopePseudo); })))); +} +var DESCENDANT_TOKEN = { type: css_what_1.SelectorType.Descendant }; +var FLEXIBLE_DESCENDANT_TOKEN = { + type: "_flexibleDescendant", +}; +var SCOPE_TOKEN = { + type: css_what_1.SelectorType.Pseudo, + name: "scope", + data: null, +}; +/* + * CSS 4 Spec (Draft): 3.4.1. Absolutizing a Relative Selector + * http://www.w3.org/TR/selectors4/#absolutizing + */ +function absolutize(token, _a, context) { + var adapter = _a.adapter; + // TODO Use better check if the context is a document + var hasContext = !!(context === null || context === void 0 ? void 0 : context.every(function (e) { + var parent = adapter.isTag(e) && adapter.getParent(e); + return e === subselects_js_1.PLACEHOLDER_ELEMENT || (parent && adapter.isTag(parent)); + })); + for (var _i = 0, token_1 = token; _i < token_1.length; _i++) { + var t = token_1[_i]; + if (t.length > 0 && + (0, sort_js_1.isTraversal)(t[0]) && + t[0].type !== css_what_1.SelectorType.Descendant) { + // Don't continue in else branch + } + else if (hasContext && !t.some(includesScopePseudo)) { + t.unshift(DESCENDANT_TOKEN); + } + else { + continue; + } + t.unshift(SCOPE_TOKEN); + } +} +function compileToken(token, options, context) { + var _a; + token.forEach(sort_js_1.default); + context = (_a = options.context) !== null && _a !== void 0 ? _a : context; + var isArrayContext = Array.isArray(context); + var finalContext = context && (Array.isArray(context) ? context : [context]); + // Check if the selector is relative + if (options.relativeSelector !== false) { + absolutize(token, options, finalContext); + } + else if (token.some(function (t) { return t.length > 0 && (0, sort_js_1.isTraversal)(t[0]); })) { + throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled"); + } + var shouldTestNextSiblings = false; + var query = token + .map(function (rules) { + if (rules.length >= 2) { + var first = rules[0], second = rules[1]; + if (first.type !== css_what_1.SelectorType.Pseudo || + first.name !== "scope") { + // Ignore + } + else if (isArrayContext && + second.type === css_what_1.SelectorType.Descendant) { + rules[1] = FLEXIBLE_DESCENDANT_TOKEN; + } + else if (second.type === css_what_1.SelectorType.Adjacent || + second.type === css_what_1.SelectorType.Sibling) { + shouldTestNextSiblings = true; + } + } + return compileRules(rules, options, finalContext); + }) + .reduce(reduceRules, boolbase_1.default.falseFunc); + query.shouldTestNextSiblings = shouldTestNextSiblings; + return query; +} +exports.compileToken = compileToken; +function compileRules(rules, options, context) { + var _a; + return rules.reduce(function (previous, rule) { + return previous === boolbase_1.default.falseFunc + ? boolbase_1.default.falseFunc + : (0, general_js_1.compileGeneralSelector)(previous, rule, options, context, compileToken); + }, (_a = options.rootFunc) !== null && _a !== void 0 ? _a : boolbase_1.default.trueFunc); +} +function reduceRules(a, b) { + if (b === boolbase_1.default.falseFunc || a === boolbase_1.default.trueFunc) { + return a; + } + if (a === boolbase_1.default.falseFunc || b === boolbase_1.default.trueFunc) { + return b; + } + return function combine(elem) { + return a(elem) || b(elem); + }; +} +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/compile.js.map b/node_modules/css-select/lib/compile.js.map new file mode 100644 index 00000000..06342499 --- /dev/null +++ b/node_modules/css-select/lib/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["compile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAyD;AACzD,sDAAgC;AAChC,mDAAmD;AACnD,2CAAsD;AACtD,kEAG0C;AAO1C;;;;;;GAMG;AACH,SAAgB,OAAO,CACnB,QAA+B,EAC/B,OAA2C,EAC3C,OAAuB;IAEvB,IAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,IAAA,2BAAW,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAPD,0BAOC;AAED,SAAgB,aAAa,CACzB,QAA+B,EAC/B,OAA2C,EAC3C,OAAuB;IAEvB,IAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,gBAAK,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,OAAO,YAAY,CAAoB,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAPD,sCAOC;AAED,SAAS,mBAAmB,CAAC,CAAmB;IAC5C,OAAO,CACH,CAAC,CAAC,IAAI,KAAK,uBAAY,CAAC,MAAM;QAC9B,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAA9B,CAA8B,CAAC,CAAC,CAAC,CAClE,CAAC;AACN,CAAC;AAED,IAAM,gBAAgB,GAAa,EAAE,IAAI,EAAE,uBAAY,CAAC,UAAU,EAAE,CAAC;AACrE,IAAM,yBAAyB,GAAqB;IAChD,IAAI,EAAE,qBAAqB;CAC9B,CAAC;AACF,IAAM,WAAW,GAAa;IAC1B,IAAI,EAAE,uBAAY,CAAC,MAAM;IACzB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,IAAI;CACb,CAAC;AAEF;;;GAGG;AACH,SAAS,UAAU,CACf,KAA2B,EAC3B,EAA+C,EAC/C,OAAgB;QADd,OAAO,aAAA;IAGT,qDAAqD;IACrD,IAAM,UAAU,GAAG,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,UAAC,CAAC;QAClC,IAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,mCAAmB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAA,CAAC;IAEH,KAAgB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;QAAlB,IAAM,CAAC,cAAA;QACR,IACI,CAAC,CAAC,MAAM,GAAG,CAAC;YACZ,IAAA,qBAAW,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAY,CAAC,UAAU,EACvC;YACE,gCAAgC;SACnC;aAAM,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;YACnD,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SAC/B;aAAM;YACH,SAAS;SACZ;QAED,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC1B;AACL,CAAC;AAED,SAAgB,YAAY,CACxB,KAA2B,EAC3B,OAA2C,EAC3C,OAAuB;;IAEvB,KAAK,CAAC,OAAO,CAAC,iBAAS,CAAC,CAAC;IAEzB,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,OAAO,CAAC;IACrC,IAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAM,YAAY,GACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9D,oCAAoC;IACpC,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;QACpC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KAC5C;SAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAA,qBAAW,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAjC,CAAiC,CAAC,EAAE;QAC7D,MAAM,IAAI,KAAK,CACX,mFAAmF,CACtF,CAAC;KACL;IAED,IAAI,sBAAsB,GAAG,KAAK,CAAC;IAEnC,IAAM,KAAK,GAAG,KAAK;SACd,GAAG,CAAC,UAAC,KAAK;QACP,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACZ,IAAA,KAAK,GAAY,KAAK,GAAjB,EAAE,MAAM,GAAI,KAAK,GAAT,CAAU;YAE9B,IACI,KAAK,CAAC,IAAI,KAAK,uBAAY,CAAC,MAAM;gBAClC,KAAK,CAAC,IAAI,KAAK,OAAO,EACxB;gBACE,SAAS;aACZ;iBAAM,IACH,cAAc;gBACd,MAAM,CAAC,IAAI,KAAK,uBAAY,CAAC,UAAU,EACzC;gBACE,KAAK,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC;aACxC;iBAAM,IACH,MAAM,CAAC,IAAI,KAAK,uBAAY,CAAC,QAAQ;gBACrC,MAAM,CAAC,IAAI,KAAK,uBAAY,CAAC,OAAO,EACtC;gBACE,sBAAsB,GAAG,IAAI,CAAC;aACjC;SACJ;QAED,OAAO,YAAY,CACf,KAAK,EACL,OAAO,EACP,YAAY,CACf,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CAAC,WAAW,EAAE,kBAAQ,CAAC,SAAS,CAAC,CAAC;IAE7C,KAAK,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAEtD,OAAO,KAAK,CAAC;AACjB,CAAC;AA1DD,oCA0DC;AAED,SAAS,YAAY,CACjB,KAAyB,EACzB,OAA2C,EAC3C,OAAgB;;IAEhB,OAAO,KAAK,CAAC,MAAM,CACf,UAAC,QAAQ,EAAE,IAAI;QACX,OAAA,QAAQ,KAAK,kBAAQ,CAAC,SAAS;YAC3B,CAAC,CAAC,kBAAQ,CAAC,SAAS;YACpB,CAAC,CAAC,IAAA,mCAAsB,EAClB,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,OAAO,EACP,YAAY,CACf;IARP,CAQO,EACX,MAAA,OAAO,CAAC,QAAQ,mCAAI,kBAAQ,CAAC,QAAQ,CACxC,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,CAA6B,EAC7B,CAA6B;IAE7B,IAAI,CAAC,KAAK,kBAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,kBAAQ,CAAC,QAAQ,EAAE;QACrD,OAAO,CAAC,CAAC;KACZ;IACD,IAAI,CAAC,KAAK,kBAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,kBAAQ,CAAC,QAAQ,EAAE;QACrD,OAAO,CAAC,CAAC;KACZ;IAED,OAAO,SAAS,OAAO,CAAC,IAAI;QACxB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;AACN,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/attributes.d.ts b/node_modules/css-select/lib/esm/attributes.d.ts new file mode 100644 index 00000000..27b60a58 --- /dev/null +++ b/node_modules/css-select/lib/esm/attributes.d.ts @@ -0,0 +1,7 @@ +import type { CompiledQuery, InternalOptions } from "./types.js"; +import type { AttributeSelector, AttributeAction } from "css-what"; +/** + * Attribute selectors + */ +export declare const attributeRules: Record(next: CompiledQuery, data: AttributeSelector, options: InternalOptions) => CompiledQuery>; +//# sourceMappingURL=attributes.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/attributes.d.ts.map b/node_modules/css-select/lib/esm/attributes.d.ts.map new file mode 100644 index 00000000..aafba154 --- /dev/null +++ b/node_modules/css-select/lib/esm/attributes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["attributes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA+EnE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAC/B,eAAe,EACf,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAC3B,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,KAC1C,aAAa,CAAC,WAAW,CAAC,CAsLlC,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/attributes.js b/node_modules/css-select/lib/esm/attributes.js new file mode 100644 index 00000000..199467ea --- /dev/null +++ b/node_modules/css-select/lib/esm/attributes.js @@ -0,0 +1,222 @@ +import boolbase from "boolbase"; +/** + * All reserved characters in a regex, used for escaping. + * + * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license + * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794 + */ +const reChars = /[-[\]{}()*+?.,\\^$|#\s]/g; +function escapeRegex(value) { + return value.replace(reChars, "\\$&"); +} +/** + * Attributes that are case-insensitive in HTML. + * + * @private + * @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors + */ +const caseInsensitiveAttributes = new Set([ + "accept", + "accept-charset", + "align", + "alink", + "axis", + "bgcolor", + "charset", + "checked", + "clear", + "codetype", + "color", + "compact", + "declare", + "defer", + "dir", + "direction", + "disabled", + "enctype", + "face", + "frame", + "hreflang", + "http-equiv", + "lang", + "language", + "link", + "media", + "method", + "multiple", + "nohref", + "noresize", + "noshade", + "nowrap", + "readonly", + "rel", + "rev", + "rules", + "scope", + "scrolling", + "selected", + "shape", + "target", + "text", + "type", + "valign", + "valuetype", + "vlink", +]); +function shouldIgnoreCase(selector, options) { + return typeof selector.ignoreCase === "boolean" + ? selector.ignoreCase + : selector.ignoreCase === "quirks" + ? !!options.quirksMode + : !options.xmlMode && caseInsensitiveAttributes.has(selector.name); +} +/** + * Attribute selectors + */ +export const attributeRules = { + equals(next, data, options) { + const { adapter } = options; + const { name } = data; + let { value } = data; + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return (elem) => { + const attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length === value.length && + attr.toLowerCase() === value && + next(elem)); + }; + } + return (elem) => adapter.getAttributeValue(elem, name) === value && next(elem); + }, + hyphen(next, data, options) { + const { adapter } = options; + const { name } = data; + let { value } = data; + const len = value.length; + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return function hyphenIC(elem) { + const attr = adapter.getAttributeValue(elem, name); + return (attr != null && + (attr.length === len || attr.charAt(len) === "-") && + attr.substr(0, len).toLowerCase() === value && + next(elem)); + }; + } + return function hyphen(elem) { + const attr = adapter.getAttributeValue(elem, name); + return (attr != null && + (attr.length === len || attr.charAt(len) === "-") && + attr.substr(0, len) === value && + next(elem)); + }; + }, + element(next, data, options) { + const { adapter } = options; + const { name, value } = data; + if (/\s/.test(value)) { + return boolbase.falseFunc; + } + const regex = new RegExp(`(?:^|\\s)${escapeRegex(value)}(?:$|\\s)`, shouldIgnoreCase(data, options) ? "i" : ""); + return function element(elem) { + const attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length >= value.length && + regex.test(attr) && + next(elem)); + }; + }, + exists(next, { name }, { adapter }) { + return (elem) => adapter.hasAttrib(elem, name) && next(elem); + }, + start(next, data, options) { + const { adapter } = options; + const { name } = data; + let { value } = data; + const len = value.length; + if (len === 0) { + return boolbase.falseFunc; + } + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return (elem) => { + const attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length >= len && + attr.substr(0, len).toLowerCase() === value && + next(elem)); + }; + } + return (elem) => { + var _a; + return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.startsWith(value)) && + next(elem); + }; + }, + end(next, data, options) { + const { adapter } = options; + const { name } = data; + let { value } = data; + const len = -value.length; + if (len === 0) { + return boolbase.falseFunc; + } + if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return (elem) => { + var _a; + return ((_a = adapter + .getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.substr(len).toLowerCase()) === value && next(elem); + }; + } + return (elem) => { + var _a; + return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.endsWith(value)) && + next(elem); + }; + }, + any(next, data, options) { + const { adapter } = options; + const { name, value } = data; + if (value === "") { + return boolbase.falseFunc; + } + if (shouldIgnoreCase(data, options)) { + const regex = new RegExp(escapeRegex(value), "i"); + return function anyIC(elem) { + const attr = adapter.getAttributeValue(elem, name); + return (attr != null && + attr.length >= value.length && + regex.test(attr) && + next(elem)); + }; + } + return (elem) => { + var _a; + return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.includes(value)) && + next(elem); + }; + }, + not(next, data, options) { + const { adapter } = options; + const { name } = data; + let { value } = data; + if (value === "") { + return (elem) => !!adapter.getAttributeValue(elem, name) && next(elem); + } + else if (shouldIgnoreCase(data, options)) { + value = value.toLowerCase(); + return (elem) => { + const attr = adapter.getAttributeValue(elem, name); + return ((attr == null || + attr.length !== value.length || + attr.toLowerCase() !== value) && + next(elem)); + }; + } + return (elem) => adapter.getAttributeValue(elem, name) !== value && next(elem); + }, +}; +//# sourceMappingURL=attributes.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/attributes.js.map b/node_modules/css-select/lib/esm/attributes.js.map new file mode 100644 index 00000000..09d1da69 --- /dev/null +++ b/node_modules/css-select/lib/esm/attributes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["attributes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/compile.d.ts b/node_modules/css-select/lib/esm/compile.d.ts new file mode 100644 index 00000000..f67b508a --- /dev/null +++ b/node_modules/css-select/lib/esm/compile.d.ts @@ -0,0 +1,13 @@ +import { Selector } from "css-what"; +import type { CompiledQuery, InternalOptions, InternalSelector } from "./types.js"; +/** + * Compiles a selector to an executable function. + * + * @param selector Selector to compile. + * @param options Compilation options. + * @param context Optional context for the selector. + */ +export declare function compile(selector: string | Selector[][], options: InternalOptions, context?: Node[] | Node): CompiledQuery; +export declare function compileUnsafe(selector: string | Selector[][], options: InternalOptions, context?: Node[] | Node): CompiledQuery; +export declare function compileToken(token: InternalSelector[][], options: InternalOptions, context?: Node[] | Node): CompiledQuery; +//# sourceMappingURL=compile.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/compile.d.ts.map b/node_modules/css-select/lib/esm/compile.d.ts.map new file mode 100644 index 00000000..59231bc9 --- /dev/null +++ b/node_modules/css-select/lib/esm/compile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAgB,MAAM,UAAU,CAAC;AAQzD,OAAO,KAAK,EACR,aAAa,EACb,eAAe,EACf,gBAAgB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAClD,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAC/B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GACxB,aAAa,CAAC,IAAI,CAAC,CAGrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACxD,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAC/B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GACxB,aAAa,CAAC,WAAW,CAAC,CAG5B;AAqDD,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACvD,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAC3B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,GACxB,aAAa,CAAC,WAAW,CAAC,CAsD5B"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/compile.js b/node_modules/css-select/lib/esm/compile.js new file mode 100644 index 00000000..1f5ee573 --- /dev/null +++ b/node_modules/css-select/lib/esm/compile.js @@ -0,0 +1,115 @@ +import { parse, SelectorType } from "css-what"; +import boolbase from "boolbase"; +import sortRules, { isTraversal } from "./sort.js"; +import { compileGeneralSelector } from "./general.js"; +import { ensureIsTag, PLACEHOLDER_ELEMENT, } from "./pseudo-selectors/subselects.js"; +/** + * Compiles a selector to an executable function. + * + * @param selector Selector to compile. + * @param options Compilation options. + * @param context Optional context for the selector. + */ +export function compile(selector, options, context) { + const next = compileUnsafe(selector, options, context); + return ensureIsTag(next, options.adapter); +} +export function compileUnsafe(selector, options, context) { + const token = typeof selector === "string" ? parse(selector) : selector; + return compileToken(token, options, context); +} +function includesScopePseudo(t) { + return (t.type === SelectorType.Pseudo && + (t.name === "scope" || + (Array.isArray(t.data) && + t.data.some((data) => data.some(includesScopePseudo))))); +} +const DESCENDANT_TOKEN = { type: SelectorType.Descendant }; +const FLEXIBLE_DESCENDANT_TOKEN = { + type: "_flexibleDescendant", +}; +const SCOPE_TOKEN = { + type: SelectorType.Pseudo, + name: "scope", + data: null, +}; +/* + * CSS 4 Spec (Draft): 3.4.1. Absolutizing a Relative Selector + * http://www.w3.org/TR/selectors4/#absolutizing + */ +function absolutize(token, { adapter }, context) { + // TODO Use better check if the context is a document + const hasContext = !!(context === null || context === void 0 ? void 0 : context.every((e) => { + const parent = adapter.isTag(e) && adapter.getParent(e); + return e === PLACEHOLDER_ELEMENT || (parent && adapter.isTag(parent)); + })); + for (const t of token) { + if (t.length > 0 && + isTraversal(t[0]) && + t[0].type !== SelectorType.Descendant) { + // Don't continue in else branch + } + else if (hasContext && !t.some(includesScopePseudo)) { + t.unshift(DESCENDANT_TOKEN); + } + else { + continue; + } + t.unshift(SCOPE_TOKEN); + } +} +export function compileToken(token, options, context) { + var _a; + token.forEach(sortRules); + context = (_a = options.context) !== null && _a !== void 0 ? _a : context; + const isArrayContext = Array.isArray(context); + const finalContext = context && (Array.isArray(context) ? context : [context]); + // Check if the selector is relative + if (options.relativeSelector !== false) { + absolutize(token, options, finalContext); + } + else if (token.some((t) => t.length > 0 && isTraversal(t[0]))) { + throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled"); + } + let shouldTestNextSiblings = false; + const query = token + .map((rules) => { + if (rules.length >= 2) { + const [first, second] = rules; + if (first.type !== SelectorType.Pseudo || + first.name !== "scope") { + // Ignore + } + else if (isArrayContext && + second.type === SelectorType.Descendant) { + rules[1] = FLEXIBLE_DESCENDANT_TOKEN; + } + else if (second.type === SelectorType.Adjacent || + second.type === SelectorType.Sibling) { + shouldTestNextSiblings = true; + } + } + return compileRules(rules, options, finalContext); + }) + .reduce(reduceRules, boolbase.falseFunc); + query.shouldTestNextSiblings = shouldTestNextSiblings; + return query; +} +function compileRules(rules, options, context) { + var _a; + return rules.reduce((previous, rule) => previous === boolbase.falseFunc + ? boolbase.falseFunc + : compileGeneralSelector(previous, rule, options, context, compileToken), (_a = options.rootFunc) !== null && _a !== void 0 ? _a : boolbase.trueFunc); +} +function reduceRules(a, b) { + if (b === boolbase.falseFunc || a === boolbase.trueFunc) { + return a; + } + if (a === boolbase.falseFunc || b === boolbase.trueFunc) { + return b; + } + return function combine(elem) { + return a(elem) || b(elem); + }; +} +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/compile.js.map b/node_modules/css-select/lib/esm/compile.js.map new file mode 100644 index 00000000..8e837030 --- /dev/null +++ b/node_modules/css-select/lib/esm/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,YAAY,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACH,WAAW,EACX,mBAAmB,GACtB,MAAM,kCAAkC,CAAC;AAO1C;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACnB,QAA+B,EAC/B,OAA2C,EAC3C,OAAuB;IAEvB,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,QAA+B,EAC/B,OAA2C,EAC3C,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,OAAO,YAAY,CAAoB,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAmB;IAC5C,OAAO,CACH,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM;QAC9B,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC;AACN,CAAC;AAED,MAAM,gBAAgB,GAAa,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;AACrE,MAAM,yBAAyB,GAAqB;IAChD,IAAI,EAAE,qBAAqB;CAC9B,CAAC;AACF,MAAM,WAAW,GAAa;IAC1B,IAAI,EAAE,YAAY,CAAC,MAAM;IACzB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,IAAI;CACb,CAAC;AAEF;;;GAGG;AACH,SAAS,UAAU,CACf,KAA2B,EAC3B,EAAE,OAAO,EAAsC,EAC/C,OAAgB;IAEhB,qDAAqD;IACrD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,mBAAmB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAA,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACnB,IACI,CAAC,CAAC,MAAM,GAAG,CAAC;YACZ,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EACvC;YACE,gCAAgC;SACnC;aAAM,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;YACnD,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SAC/B;aAAM;YACH,SAAS;SACZ;QAED,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC1B;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CACxB,KAA2B,EAC3B,OAA2C,EAC3C,OAAuB;;IAEvB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEzB,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,OAAO,CAAC;IACrC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,YAAY,GACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9D,oCAAoC;IACpC,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;QACpC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KAC5C;SAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7D,MAAM,IAAI,KAAK,CACX,mFAAmF,CACtF,CAAC;KACL;IAED,IAAI,sBAAsB,GAAG,KAAK,CAAC;IAEnC,MAAM,KAAK,GAAG,KAAK;SACd,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACX,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACnB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;YAE9B,IACI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM;gBAClC,KAAK,CAAC,IAAI,KAAK,OAAO,EACxB;gBACE,SAAS;aACZ;iBAAM,IACH,cAAc;gBACd,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EACzC;gBACE,KAAK,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC;aACxC;iBAAM,IACH,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,QAAQ;gBACrC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,EACtC;gBACE,sBAAsB,GAAG,IAAI,CAAC;aACjC;SACJ;QAED,OAAO,YAAY,CACf,KAAK,EACL,OAAO,EACP,YAAY,CACf,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE7C,KAAK,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAEtD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACjB,KAAyB,EACzB,OAA2C,EAC3C,OAAgB;;IAEhB,OAAO,KAAK,CAAC,MAAM,CACf,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CACf,QAAQ,KAAK,QAAQ,CAAC,SAAS;QAC3B,CAAC,CAAC,QAAQ,CAAC,SAAS;QACpB,CAAC,CAAC,sBAAsB,CAClB,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,OAAO,EACP,YAAY,CACf,EACX,MAAA,OAAO,CAAC,QAAQ,mCAAI,QAAQ,CAAC,QAAQ,CACxC,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,CAA6B,EAC7B,CAA6B;IAE7B,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE;QACrD,OAAO,CAAC,CAAC;KACZ;IACD,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE;QACrD,OAAO,CAAC,CAAC;KACZ;IAED,OAAO,SAAS,OAAO,CAAC,IAAI;QACxB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;AACN,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/general.d.ts b/node_modules/css-select/lib/esm/general.d.ts new file mode 100644 index 00000000..2baa1f31 --- /dev/null +++ b/node_modules/css-select/lib/esm/general.d.ts @@ -0,0 +1,3 @@ +import type { CompiledQuery, InternalOptions, InternalSelector, CompileToken } from "./types.js"; +export declare function compileGeneralSelector(next: CompiledQuery, selector: InternalSelector, options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken): CompiledQuery; +//# sourceMappingURL=general.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/general.d.ts.map b/node_modules/css-select/lib/esm/general.d.ts.map new file mode 100644 index 00000000..82c8d6d4 --- /dev/null +++ b/node_modules/css-select/lib/esm/general.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"general.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["general.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAER,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,YAAY,EACf,MAAM,YAAY,CAAC;AAkBpB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACjE,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,EAC3B,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,GAC9C,aAAa,CAAC,WAAW,CAAC,CAiK5B"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/general.js b/node_modules/css-select/lib/esm/general.js new file mode 100644 index 00000000..743ef7be --- /dev/null +++ b/node_modules/css-select/lib/esm/general.js @@ -0,0 +1,144 @@ +import { attributeRules } from "./attributes.js"; +import { compilePseudoSelector } from "./pseudo-selectors/index.js"; +import { SelectorType } from "css-what"; +function getElementParent(node, adapter) { + const parent = adapter.getParent(node); + if (parent && adapter.isTag(parent)) { + return parent; + } + return null; +} +/* + * All available rules + */ +export function compileGeneralSelector(next, selector, options, context, compileToken) { + const { adapter, equals } = options; + switch (selector.type) { + case SelectorType.PseudoElement: { + throw new Error("Pseudo-elements are not supported by css-select"); + } + case SelectorType.ColumnCombinator: { + throw new Error("Column combinators are not yet supported by css-select"); + } + case SelectorType.Attribute: { + if (selector.namespace != null) { + throw new Error("Namespaced attributes are not yet supported by css-select"); + } + if (!options.xmlMode || options.lowerCaseAttributeNames) { + selector.name = selector.name.toLowerCase(); + } + return attributeRules[selector.action](next, selector, options); + } + case SelectorType.Pseudo: { + return compilePseudoSelector(next, selector, options, context, compileToken); + } + // Tags + case SelectorType.Tag: { + if (selector.namespace != null) { + throw new Error("Namespaced tag names are not yet supported by css-select"); + } + let { name } = selector; + if (!options.xmlMode || options.lowerCaseTags) { + name = name.toLowerCase(); + } + return function tag(elem) { + return adapter.getName(elem) === name && next(elem); + }; + } + // Traversal + case SelectorType.Descendant: { + if (options.cacheResults === false || + typeof WeakSet === "undefined") { + return function descendant(elem) { + let current = elem; + while ((current = getElementParent(current, adapter))) { + if (next(current)) { + return true; + } + } + return false; + }; + } + // @ts-expect-error `ElementNode` is not extending object + const isFalseCache = new WeakSet(); + return function cachedDescendant(elem) { + let current = elem; + while ((current = getElementParent(current, adapter))) { + if (!isFalseCache.has(current)) { + if (adapter.isTag(current) && next(current)) { + return true; + } + isFalseCache.add(current); + } + } + return false; + }; + } + case "_flexibleDescendant": { + // Include element itself, only used while querying an array + return function flexibleDescendant(elem) { + let current = elem; + do { + if (next(current)) + return true; + } while ((current = getElementParent(current, adapter))); + return false; + }; + } + case SelectorType.Parent: { + return function parent(elem) { + return adapter + .getChildren(elem) + .some((elem) => adapter.isTag(elem) && next(elem)); + }; + } + case SelectorType.Child: { + return function child(elem) { + const parent = adapter.getParent(elem); + return parent != null && adapter.isTag(parent) && next(parent); + }; + } + case SelectorType.Sibling: { + return function sibling(elem) { + const siblings = adapter.getSiblings(elem); + for (let i = 0; i < siblings.length; i++) { + const currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling) && next(currentSibling)) { + return true; + } + } + return false; + }; + } + case SelectorType.Adjacent: { + if (adapter.prevElementSibling) { + return function adjacent(elem) { + const previous = adapter.prevElementSibling(elem); + return previous != null && next(previous); + }; + } + return function adjacent(elem) { + const siblings = adapter.getSiblings(elem); + let lastElement; + for (let i = 0; i < siblings.length; i++) { + const currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling)) { + lastElement = currentSibling; + } + } + return !!lastElement && next(lastElement); + }; + } + case SelectorType.Universal: { + if (selector.namespace != null && selector.namespace !== "*") { + throw new Error("Namespaced universal selectors are not yet supported by css-select"); + } + return next; + } + } +} +//# sourceMappingURL=general.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/general.js.map b/node_modules/css-select/lib/esm/general.js.map new file mode 100644 index 00000000..68380681 --- /dev/null +++ b/node_modules/css-select/lib/esm/general.js.map @@ -0,0 +1 @@ +{"version":3,"file":"general.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["general.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/index.d.ts b/node_modules/css-select/lib/esm/index.d.ts new file mode 100644 index 00000000..09113723 --- /dev/null +++ b/node_modules/css-select/lib/esm/index.d.ts @@ -0,0 +1,50 @@ +import type { CompiledQuery, Options, Query, Adapter } from "./types.js"; +export type { Options }; +/** + * Compiles the query, returns a function. + */ +export declare const compile: (selector: string | import("css-what").Selector[][], options?: Options | undefined, context?: Node | Node[] | undefined) => CompiledQuery; +export declare const _compileUnsafe: (selector: string | import("css-what").Selector[][], options?: Options | undefined, context?: Node | Node[] | undefined) => CompiledQuery; +export declare const _compileToken: (selector: import("./types.js").InternalSelector[][], options?: Options | undefined, context?: Node | Node[] | undefined) => CompiledQuery; +export declare function prepareContext(elems: Node | Node[], adapter: Adapter, shouldTestNextSiblings?: boolean): Node[]; +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns All matching elements. + * + */ +export declare const selectAll: (query: Query, elements: Node | Node[], options?: Options | undefined) => ElementNode[]; +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns the first match, or null if there was no match. + */ +export declare const selectOne: (query: Query, elements: Node | Node[], options?: Options | undefined) => ElementNode | null; +/** + * Tests whether or not an element is matched by query. + * + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elem The element to test if it matches the query. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns + */ +export declare function is(elem: ElementNode, query: Query, options?: Options): boolean; +/** + * Alias for selectAll(query, elems, options). + * @see [compile] for supported selector queries. + */ +export default selectAll; +/** @deprecated Use the `pseudos` option instead. */ +export { filters, pseudos, aliases } from "./pseudo-selectors/index.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/index.d.ts.map b/node_modules/css-select/lib/esm/index.d.ts.map new file mode 100644 index 00000000..120c4fec --- /dev/null +++ b/node_modules/css-select/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACR,aAAa,EACb,OAAO,EAEP,KAAK,EACL,OAAO,EAEV,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,OAAO,EAAE,CAAC;AA0CxB;;GAEG;AACH,eAAO,MAAM,OAAO,oMAA0B,CAAC;AAC/C,eAAO,MAAM,cAAc,2MAA6B,CAAC;AACzD,eAAO,MAAM,aAAa,4MAA4B,CAAC;AA6BvD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACzD,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EACnC,sBAAsB,UAAQ,GAC/B,IAAI,EAAE,CAYR;AAiBD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,yJASrB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,8JASrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,EAAE,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAC7C,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EACzB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,GACrC,OAAO,CAKT;AAED;;;GAGG;AACH,eAAe,SAAS,CAAC;AAGzB,oDAAoD;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/index.js b/node_modules/css-select/lib/esm/index.js new file mode 100644 index 00000000..7d827a27 --- /dev/null +++ b/node_modules/css-select/lib/esm/index.js @@ -0,0 +1,115 @@ +import * as DomUtils from "domutils"; +import boolbase from "boolbase"; +import { compile as compileRaw, compileUnsafe, compileToken, } from "./compile.js"; +import { getNextSiblings } from "./pseudo-selectors/subselects.js"; +const defaultEquals = (a, b) => a === b; +const defaultOptions = { + adapter: DomUtils, + equals: defaultEquals, +}; +function convertOptionFormats(options) { + var _a, _b, _c, _d; + /* + * We force one format of options to the other one. + */ + // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`. + const opts = options !== null && options !== void 0 ? options : defaultOptions; + // @ts-expect-error Same as above. + (_a = opts.adapter) !== null && _a !== void 0 ? _a : (opts.adapter = DomUtils); + // @ts-expect-error `equals` does not exist on `Options` + (_b = opts.equals) !== null && _b !== void 0 ? _b : (opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals); + return opts; +} +function wrapCompile(func) { + return function addAdapter(selector, options, context) { + const opts = convertOptionFormats(options); + return func(selector, opts, context); + }; +} +/** + * Compiles the query, returns a function. + */ +export const compile = wrapCompile(compileRaw); +export const _compileUnsafe = wrapCompile(compileUnsafe); +export const _compileToken = wrapCompile(compileToken); +function getSelectorFunc(searchFunc) { + return function select(query, elements, options) { + const opts = convertOptionFormats(options); + if (typeof query !== "function") { + query = compileUnsafe(query, opts, elements); + } + const filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings); + return searchFunc(query, filteredElements, opts); + }; +} +export function prepareContext(elems, adapter, shouldTestNextSiblings = false) { + /* + * Add siblings if the query requires them. + * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692 + */ + if (shouldTestNextSiblings) { + elems = appendNextSiblings(elems, adapter); + } + return Array.isArray(elems) + ? adapter.removeSubsets(elems) + : adapter.getChildren(elems); +} +function appendNextSiblings(elem, adapter) { + // Order matters because jQuery seems to check the children before the siblings + const elems = Array.isArray(elem) ? elem.slice(0) : [elem]; + const elemsLength = elems.length; + for (let i = 0; i < elemsLength; i++) { + const nextSiblings = getNextSiblings(elems[i], adapter); + elems.push(...nextSiblings); + } + return elems; +} +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns All matching elements. + * + */ +export const selectAll = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0 + ? [] + : options.adapter.findAll(query, elems)); +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns the first match, or null if there was no match. + */ +export const selectOne = getSelectorFunc((query, elems, options) => query === boolbase.falseFunc || !elems || elems.length === 0 + ? null + : options.adapter.findOne(query, elems)); +/** + * Tests whether or not an element is matched by query. + * + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elem The element to test if it matches the query. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns + */ +export function is(elem, query, options) { + const opts = convertOptionFormats(options); + return (typeof query === "function" ? query : compileRaw(query, opts))(elem); +} +/** + * Alias for selectAll(query, elems, options). + * @see [compile] for supported selector queries. + */ +export default selectAll; +// Export filters, pseudos and aliases to allow users to supply their own. +/** @deprecated Use the `pseudos` option instead. */ +export { filters, pseudos, aliases } from "./pseudo-selectors/index.js"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/index.js.map b/node_modules/css-select/lib/esm/index.js.map new file mode 100644 index 00000000..b9e98bf8 --- /dev/null +++ b/node_modules/css-select/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/package.json b/node_modules/css-select/lib/esm/package.json new file mode 100644 index 00000000..089153bc --- /dev/null +++ b/node_modules/css-select/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts new file mode 100644 index 00000000..1bcb31a4 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts @@ -0,0 +1,5 @@ +/** + * Aliases are pseudos that are expressed as selectors. + */ +export declare const aliases: Record; +//# sourceMappingURL=aliases.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts.map b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts.map new file mode 100644 index 00000000..37c9e8ce --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"aliases.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwC1C,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js new file mode 100644 index 00000000..49cd6f04 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js @@ -0,0 +1,35 @@ +/** + * Aliases are pseudos that are expressed as selectors. + */ +export const aliases = { + // Links + "any-link": ":is(a, area, link)[href]", + link: ":any-link:not(:visited)", + // Forms + // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements + disabled: `:is( + :is(button, input, select, textarea, optgroup, option)[disabled], + optgroup[disabled] > option, + fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *) + )`, + enabled: ":not(:disabled)", + checked: ":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)", + required: ":is(input, select, textarea)[required]", + optional: ":is(input, select, textarea):not([required])", + // JQuery extensions + // https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness + selected: "option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)", + checkbox: "[type=checkbox]", + file: "[type=file]", + password: "[type=password]", + radio: "[type=radio]", + reset: "[type=reset]", + image: "[type=image]", + submit: "[type=submit]", + parent: ":not(:empty)", + header: ":is(h1, h2, h3, h4, h5, h6)", + button: ":is(button, input[type=button])", + input: ":is(input, textarea, select, button)", + text: "input:is(:not([type!='']), [type=text])", +}; +//# sourceMappingURL=aliases.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js.map b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js.map new file mode 100644 index 00000000..6ef57c9d --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aliases.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAA2B;IAC3C,QAAQ;IAER,UAAU,EAAE,0BAA0B;IACtC,IAAI,EAAE,yBAAyB;IAE/B,QAAQ;IAER,0EAA0E;IAC1E,QAAQ,EAAE;;;;MAIR;IACF,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EACH,6EAA6E;IACjF,QAAQ,EAAE,wCAAwC;IAClD,QAAQ,EAAE,8CAA8C;IAExD,oBAAoB;IAEpB,wFAAwF;IACxF,QAAQ,EACJ,8FAA8F;IAElG,QAAQ,EAAE,iBAAiB;IAC3B,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,iBAAiB;IAC3B,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,eAAe;IAEvB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,6BAA6B;IAErC,MAAM,EAAE,iCAAiC;IACzC,KAAK,EAAE,sCAAsC;IAC7C,IAAI,EAAE,yCAAyC;CAClD,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts b/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts new file mode 100644 index 00000000..a75d0631 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts @@ -0,0 +1,4 @@ +import type { CompiledQuery, InternalOptions } from "../types.js"; +export declare type Filter = (next: CompiledQuery, text: string, options: InternalOptions, context?: Node[]) => CompiledQuery; +export declare const filters: Record; +//# sourceMappingURL=filters.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts.map b/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts.map new file mode 100644 index 00000000..86f1cef3 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"filters.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/filters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAW,MAAM,aAAa,CAAC;AAE3E,oBAAY,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAChD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,KACf,aAAa,CAAC,WAAW,CAAC,CAAC;AAYhC,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2I1C,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/filters.js b/node_modules/css-select/lib/esm/pseudo-selectors/filters.js new file mode 100644 index 00000000..2f939ed2 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/filters.js @@ -0,0 +1,143 @@ +import getNCheck from "nth-check"; +import boolbase from "boolbase"; +function getChildFunc(next, adapter) { + return (elem) => { + const parent = adapter.getParent(elem); + return parent != null && adapter.isTag(parent) && next(elem); + }; +} +export const filters = { + contains(next, text, { adapter }) { + return function contains(elem) { + return next(elem) && adapter.getText(elem).includes(text); + }; + }, + icontains(next, text, { adapter }) { + const itext = text.toLowerCase(); + return function icontains(elem) { + return (next(elem) && + adapter.getText(elem).toLowerCase().includes(itext)); + }; + }, + // Location specific methods + "nth-child"(next, rule, { adapter, equals }) { + const func = getNCheck(rule); + if (func === boolbase.falseFunc) + return boolbase.falseFunc; + if (func === boolbase.trueFunc) + return getChildFunc(next, adapter); + return function nthChild(elem) { + const siblings = adapter.getSiblings(elem); + let pos = 0; + for (let i = 0; i < siblings.length; i++) { + if (equals(elem, siblings[i])) + break; + if (adapter.isTag(siblings[i])) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + "nth-last-child"(next, rule, { adapter, equals }) { + const func = getNCheck(rule); + if (func === boolbase.falseFunc) + return boolbase.falseFunc; + if (func === boolbase.trueFunc) + return getChildFunc(next, adapter); + return function nthLastChild(elem) { + const siblings = adapter.getSiblings(elem); + let pos = 0; + for (let i = siblings.length - 1; i >= 0; i--) { + if (equals(elem, siblings[i])) + break; + if (adapter.isTag(siblings[i])) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + "nth-of-type"(next, rule, { adapter, equals }) { + const func = getNCheck(rule); + if (func === boolbase.falseFunc) + return boolbase.falseFunc; + if (func === boolbase.trueFunc) + return getChildFunc(next, adapter); + return function nthOfType(elem) { + const siblings = adapter.getSiblings(elem); + let pos = 0; + for (let i = 0; i < siblings.length; i++) { + const currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === adapter.getName(elem)) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + "nth-last-of-type"(next, rule, { adapter, equals }) { + const func = getNCheck(rule); + if (func === boolbase.falseFunc) + return boolbase.falseFunc; + if (func === boolbase.trueFunc) + return getChildFunc(next, adapter); + return function nthLastOfType(elem) { + const siblings = adapter.getSiblings(elem); + let pos = 0; + for (let i = siblings.length - 1; i >= 0; i--) { + const currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === adapter.getName(elem)) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + // TODO determine the actual root element + root(next, _rule, { adapter }) { + return (elem) => { + const parent = adapter.getParent(elem); + return (parent == null || !adapter.isTag(parent)) && next(elem); + }; + }, + scope(next, rule, options, context) { + const { equals } = options; + if (!context || context.length === 0) { + // Equivalent to :root + return filters["root"](next, rule, options); + } + if (context.length === 1) { + // NOTE: can't be unpacked, as :has uses this for side-effects + return (elem) => equals(context[0], elem) && next(elem); + } + return (elem) => context.includes(elem) && next(elem); + }, + hover: dynamicStatePseudo("isHovered"), + visited: dynamicStatePseudo("isVisited"), + active: dynamicStatePseudo("isActive"), +}; +/** + * Dynamic state pseudos. These depend on optional Adapter methods. + * + * @param name The name of the adapter method to call. + * @returns Pseudo for the `filters` object. + */ +function dynamicStatePseudo(name) { + return function dynamicPseudo(next, _rule, { adapter }) { + const func = adapter[name]; + if (typeof func !== "function") { + return boolbase.falseFunc; + } + return function active(elem) { + return func(elem) && next(elem); + }; + }; +} +//# sourceMappingURL=filters.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/filters.js.map b/node_modules/css-select/lib/esm/pseudo-selectors/filters.js.map new file mode 100644 index 00000000..605d0cb9 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/filters.js.map @@ -0,0 +1 @@ +{"version":3,"file":"filters.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/filters.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts b/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts new file mode 100644 index 00000000..2c41913c --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts @@ -0,0 +1,8 @@ +import type { CompiledQuery, InternalOptions, CompileToken } from "../types.js"; +import { PseudoSelector } from "css-what"; +import { filters } from "./filters.js"; +import { pseudos } from "./pseudos.js"; +import { aliases } from "./aliases.js"; +export { filters, pseudos, aliases }; +export declare function compilePseudoSelector(next: CompiledQuery, selector: PseudoSelector, options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken): CompiledQuery; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts.map b/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts.map new file mode 100644 index 00000000..ba140978 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAS,cAAc,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAErC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAChE,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,EAC3B,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,GAC9C,aAAa,CAAC,WAAW,CAAC,CA4C5B"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/index.js b/node_modules/css-select/lib/esm/pseudo-selectors/index.js new file mode 100644 index 00000000..ab43243b --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/index.js @@ -0,0 +1,40 @@ +import { parse } from "css-what"; +import { filters } from "./filters.js"; +import { pseudos, verifyPseudoArgs } from "./pseudos.js"; +import { aliases } from "./aliases.js"; +import { subselects } from "./subselects.js"; +export { filters, pseudos, aliases }; +export function compilePseudoSelector(next, selector, options, context, compileToken) { + var _a; + const { name, data } = selector; + if (Array.isArray(data)) { + if (!(name in subselects)) { + throw new Error(`Unknown pseudo-class :${name}(${data})`); + } + return subselects[name](next, data, options, context, compileToken); + } + const userPseudo = (_a = options.pseudos) === null || _a === void 0 ? void 0 : _a[name]; + const stringPseudo = typeof userPseudo === "string" ? userPseudo : aliases[name]; + if (typeof stringPseudo === "string") { + if (data != null) { + throw new Error(`Pseudo ${name} doesn't have any arguments`); + } + // The alias has to be parsed here, to make sure options are respected. + const alias = parse(stringPseudo); + return subselects["is"](next, alias, options, context, compileToken); + } + if (typeof userPseudo === "function") { + verifyPseudoArgs(userPseudo, name, data, 1); + return (elem) => userPseudo(elem, data) && next(elem); + } + if (name in filters) { + return filters[name](next, data, options, context); + } + if (name in pseudos) { + const pseudo = pseudos[name]; + verifyPseudoArgs(pseudo, name, data, 2); + return (elem) => pseudo(elem, options, data) && next(elem); + } + throw new Error(`Unknown pseudo-class :${name}`); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/index.js.map b/node_modules/css-select/lib/esm/pseudo-selectors/index.js.map new file mode 100644 index 00000000..f8fe1e74 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAErC,MAAM,UAAU,qBAAqB,CACjC,IAAgC,EAChC,QAAwB,EACxB,OAA2C,EAC3C,OAA2B,EAC3B,YAA6C;;IAE7C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;SAC7D;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KACvE;IAED,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,OAAO,0CAAG,IAAI,CAAC,CAAC;IAE3C,MAAM,YAAY,GACd,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QAClC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,6BAA6B,CAAC,CAAC;SAChE;QAED,uEAAuE;QACvE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KACxE;IAED,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;QAClC,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE5C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;KACzD;IAED,IAAI,IAAI,IAAI,OAAO,EAAE;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAChE;IAED,IAAI,IAAI,IAAI,OAAO,EAAE;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAExC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9D;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts new file mode 100644 index 00000000..cfcf8d6c --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts @@ -0,0 +1,6 @@ +import type { PseudoSelector } from "css-what"; +import type { InternalOptions } from "../types.js"; +export declare type Pseudo = (elem: ElementNode, options: InternalOptions, subselect?: string | null) => boolean; +export declare const pseudos: Record; +export declare function verifyPseudoArgs>(func: (...args: T) => boolean, name: string, subselect: PseudoSelector["data"], argIndex: number): void; +//# sourceMappingURL=pseudos.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts.map b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts.map new file mode 100644 index 00000000..b2d11373 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pseudos.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/pseudos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,oBAAY,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAChD,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,KACxB,OAAO,CAAC;AAGb,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkF1C,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACrD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,EAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,EACjC,QAAQ,EAAE,MAAM,GACjB,IAAI,CAQN"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js new file mode 100644 index 00000000..fe2ebefc --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js @@ -0,0 +1,79 @@ +// While filters are precompiled, pseudos get called when they are needed +export const pseudos = { + empty(elem, { adapter }) { + return !adapter.getChildren(elem).some((elem) => + // FIXME: `getText` call is potentially expensive. + adapter.isTag(elem) || adapter.getText(elem) !== ""); + }, + "first-child"(elem, { adapter, equals }) { + if (adapter.prevElementSibling) { + return adapter.prevElementSibling(elem) == null; + } + const firstChild = adapter + .getSiblings(elem) + .find((elem) => adapter.isTag(elem)); + return firstChild != null && equals(elem, firstChild); + }, + "last-child"(elem, { adapter, equals }) { + const siblings = adapter.getSiblings(elem); + for (let i = siblings.length - 1; i >= 0; i--) { + if (equals(elem, siblings[i])) + return true; + if (adapter.isTag(siblings[i])) + break; + } + return false; + }, + "first-of-type"(elem, { adapter, equals }) { + const siblings = adapter.getSiblings(elem); + const elemName = adapter.getName(elem); + for (let i = 0; i < siblings.length; i++) { + const currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + return true; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === elemName) { + break; + } + } + return false; + }, + "last-of-type"(elem, { adapter, equals }) { + const siblings = adapter.getSiblings(elem); + const elemName = adapter.getName(elem); + for (let i = siblings.length - 1; i >= 0; i--) { + const currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + return true; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === elemName) { + break; + } + } + return false; + }, + "only-of-type"(elem, { adapter, equals }) { + const elemName = adapter.getName(elem); + return adapter + .getSiblings(elem) + .every((sibling) => equals(elem, sibling) || + !adapter.isTag(sibling) || + adapter.getName(sibling) !== elemName); + }, + "only-child"(elem, { adapter, equals }) { + return adapter + .getSiblings(elem) + .every((sibling) => equals(elem, sibling) || !adapter.isTag(sibling)); + }, +}; +export function verifyPseudoArgs(func, name, subselect, argIndex) { + if (subselect === null) { + if (func.length > argIndex) { + throw new Error(`Pseudo-class :${name} requires an argument`); + } + } + else if (func.length === argIndex) { + throw new Error(`Pseudo-class :${name} doesn't have any arguments`); + } +} +//# sourceMappingURL=pseudos.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js.map b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js.map new file mode 100644 index 00000000..62f4ec3f --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pseudos.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/pseudos.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts new file mode 100644 index 00000000..6555ef2d --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts @@ -0,0 +1,9 @@ +import type { Selector } from "css-what"; +import type { CompiledQuery, InternalOptions, CompileToken, Adapter } from "../types.js"; +/** Used as a placeholder for :has. Will be replaced with the actual element. */ +export declare const PLACEHOLDER_ELEMENT: {}; +export declare function ensureIsTag(next: CompiledQuery, adapter: Adapter): CompiledQuery; +export declare type Subselect = (next: CompiledQuery, subselect: Selector[][], options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken) => CompiledQuery; +export declare function getNextSiblings(elem: Node, adapter: Adapter): ElementNode[]; +export declare const subselects: Record; +//# sourceMappingURL=subselects.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts.map b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts.map new file mode 100644 index 00000000..9950c0cc --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"subselects.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/subselects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EACR,aAAa,EACb,eAAe,EACf,YAAY,EACZ,OAAO,EACV,MAAM,aAAa,CAAC;AAGrB,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,IAAK,CAAC;AAEtC,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACtD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,GACpC,aAAa,CAAC,IAAI,CAAC,CAGrB;AAED,oBAAY,SAAS,GAAG,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACnD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,SAAS,EAAE,QAAQ,EAAE,EAAE,EACvB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,EAC3B,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,KAC5C,aAAa,CAAC,WAAW,CAAC,CAAC;AAEhC,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAC1D,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,GACpC,WAAW,EAAE,CAMf;AAiCD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAgEhD,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js new file mode 100644 index 00000000..25d7e8e4 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js @@ -0,0 +1,94 @@ +import boolbase from "boolbase"; +import { isTraversal } from "../sort.js"; +/** Used as a placeholder for :has. Will be replaced with the actual element. */ +export const PLACEHOLDER_ELEMENT = {}; +export function ensureIsTag(next, adapter) { + if (next === boolbase.falseFunc) + return boolbase.falseFunc; + return (elem) => adapter.isTag(elem) && next(elem); +} +export function getNextSiblings(elem, adapter) { + const siblings = adapter.getSiblings(elem); + if (siblings.length <= 1) + return []; + const elemIndex = siblings.indexOf(elem); + if (elemIndex < 0 || elemIndex === siblings.length - 1) + return []; + return siblings.slice(elemIndex + 1).filter(adapter.isTag); +} +function copyOptions(options) { + // Not copied: context, rootFunc + return { + xmlMode: !!options.xmlMode, + lowerCaseAttributeNames: !!options.lowerCaseAttributeNames, + lowerCaseTags: !!options.lowerCaseTags, + quirksMode: !!options.quirksMode, + cacheResults: !!options.cacheResults, + pseudos: options.pseudos, + adapter: options.adapter, + equals: options.equals, + }; +} +const is = (next, token, options, context, compileToken) => { + const func = compileToken(token, copyOptions(options), context); + return func === boolbase.trueFunc + ? next + : func === boolbase.falseFunc + ? boolbase.falseFunc + : (elem) => func(elem) && next(elem); +}; +/* + * :not, :has, :is, :matches and :where have to compile selectors + * doing this in src/pseudos.ts would lead to circular dependencies, + * so we add them here + */ +export const subselects = { + is, + /** + * `:matches` and `:where` are aliases for `:is`. + */ + matches: is, + where: is, + not(next, token, options, context, compileToken) { + const func = compileToken(token, copyOptions(options), context); + return func === boolbase.falseFunc + ? next + : func === boolbase.trueFunc + ? boolbase.falseFunc + : (elem) => !func(elem) && next(elem); + }, + has(next, subselect, options, _context, compileToken) { + const { adapter } = options; + const opts = copyOptions(options); + opts.relativeSelector = true; + const context = subselect.some((s) => s.some(isTraversal)) + ? // Used as a placeholder. Will be replaced with the actual element. + [PLACEHOLDER_ELEMENT] + : undefined; + const compiled = compileToken(subselect, opts, context); + if (compiled === boolbase.falseFunc) + return boolbase.falseFunc; + const hasElement = ensureIsTag(compiled, adapter); + // If `compiled` is `trueFunc`, we can skip this. + if (context && compiled !== boolbase.trueFunc) { + /* + * `shouldTestNextSiblings` will only be true if the query starts with + * a traversal (sibling or adjacent). That means we will always have a context. + */ + const { shouldTestNextSiblings = false } = compiled; + return (elem) => { + if (!next(elem)) + return false; + context[0] = elem; + const childs = adapter.getChildren(elem); + const nextElements = shouldTestNextSiblings + ? [...childs, ...getNextSiblings(elem, adapter)] + : childs; + return adapter.existsOne(hasElement, nextElements); + }; + } + return (elem) => next(elem) && + adapter.existsOne(hasElement, adapter.getChildren(elem)); + }, +}; +//# sourceMappingURL=subselects.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js.map b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js.map new file mode 100644 index 00000000..39cdd6e1 --- /dev/null +++ b/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js.map @@ -0,0 +1 @@ +{"version":3,"file":"subselects.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/subselects.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/sort.d.ts b/node_modules/css-select/lib/esm/sort.d.ts new file mode 100644 index 00000000..93c996c1 --- /dev/null +++ b/node_modules/css-select/lib/esm/sort.d.ts @@ -0,0 +1,12 @@ +import type { InternalSelector } from "./types.js"; +import { type Traversal } from "css-what"; +export declare function isTraversal(token: InternalSelector): token is Traversal; +/** + * Sort the parts of the passed selector, + * as there is potential for optimization + * (some types of selectors are faster than others) + * + * @param arr Selector to sort + */ +export default function sortByProcedure(arr: InternalSelector[]): void; +//# sourceMappingURL=sort.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/sort.d.ts.map b/node_modules/css-select/lib/esm/sort.d.ts.map new file mode 100644 index 00000000..8e996f4a --- /dev/null +++ b/node_modules/css-select/lib/esm/sort.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["sort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AASzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,IAAI,SAAS,CAEvE;AAWD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAerE"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/sort.js b/node_modules/css-select/lib/esm/sort.js new file mode 100644 index 00000000..b3b3239a --- /dev/null +++ b/node_modules/css-select/lib/esm/sort.js @@ -0,0 +1,79 @@ +import { AttributeAction, SelectorType } from "css-what"; +const procedure = new Map([ + [SelectorType.Universal, 50], + [SelectorType.Tag, 30], + [SelectorType.Attribute, 1], + [SelectorType.Pseudo, 0], +]); +export function isTraversal(token) { + return !procedure.has(token.type); +} +const attributes = new Map([ + [AttributeAction.Exists, 10], + [AttributeAction.Equals, 8], + [AttributeAction.Not, 7], + [AttributeAction.Start, 6], + [AttributeAction.End, 6], + [AttributeAction.Any, 5], +]); +/** + * Sort the parts of the passed selector, + * as there is potential for optimization + * (some types of selectors are faster than others) + * + * @param arr Selector to sort + */ +export default function sortByProcedure(arr) { + const procs = arr.map(getProcedure); + for (let i = 1; i < arr.length; i++) { + const procNew = procs[i]; + if (procNew < 0) + continue; + for (let j = i - 1; j >= 0 && procNew < procs[j]; j--) { + const token = arr[j + 1]; + arr[j + 1] = arr[j]; + arr[j] = token; + procs[j + 1] = procs[j]; + procs[j] = procNew; + } + } +} +function getProcedure(token) { + var _a, _b; + let proc = (_a = procedure.get(token.type)) !== null && _a !== void 0 ? _a : -1; + if (token.type === SelectorType.Attribute) { + proc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4; + if (token.action === AttributeAction.Equals && token.name === "id") { + // Prefer ID selectors (eg. #ID) + proc = 9; + } + if (token.ignoreCase) { + /* + * IgnoreCase adds some overhead, prefer "normal" token + * this is a binary operation, to ensure it's still an int + */ + proc >>= 1; + } + } + else if (token.type === SelectorType.Pseudo) { + if (!token.data) { + proc = 3; + } + else if (token.name === "has" || token.name === "contains") { + proc = 0; // Expensive in any case + } + else if (Array.isArray(token.data)) { + // Eg. :matches, :not + proc = Math.min(...token.data.map((d) => Math.min(...d.map(getProcedure)))); + // If we have traversals, try to avoid executing this selector + if (proc < 0) { + proc = 0; + } + } + else { + proc = 2; + } + } + return proc; +} +//# sourceMappingURL=sort.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/sort.js.map b/node_modules/css-select/lib/esm/sort.js.map new file mode 100644 index 00000000..537c45c4 --- /dev/null +++ b/node_modules/css-select/lib/esm/sort.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["sort.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/types.d.ts b/node_modules/css-select/lib/esm/types.d.ts new file mode 100644 index 00000000..7a0cd8a5 --- /dev/null +++ b/node_modules/css-select/lib/esm/types.d.ts @@ -0,0 +1,167 @@ +import type { Selector } from "css-what"; +export declare type InternalSelector = Selector | { + type: "_flexibleDescendant"; +}; +export declare type Predicate = (v: Value) => boolean; +export interface Adapter { + /** + * Is the node a tag? + */ + isTag: (node: Node) => node is ElementNode; + /** + * Does at least one of passed element nodes pass the test predicate? + */ + existsOne: (test: Predicate, elems: Node[]) => boolean; + /** + * Get the attribute value. + */ + getAttributeValue: (elem: ElementNode, name: string) => string | undefined; + /** + * Get the node's children + */ + getChildren: (node: Node) => Node[]; + /** + * Get the name of the tag + */ + getName: (elem: ElementNode) => string; + /** + * Get the parent of the node + */ + getParent: (node: ElementNode) => Node | null; + /** + * Get the siblings of the node. Note that unlike jQuery's `siblings` method, + * this is expected to include the current node as well + */ + getSiblings: (node: Node) => Node[]; + /** + * Returns the previous element sibling of a node. + */ + prevElementSibling?: (node: Node) => ElementNode | null; + /** + * Get the text content of the node, and its children if it has any. + */ + getText: (node: Node) => string; + /** + * Does the element have the named attribute? + */ + hasAttrib: (elem: ElementNode, name: string) => boolean; + /** + * Takes an array of nodes, and removes any duplicates, as well as any + * nodes whose ancestors are also in the array. + */ + removeSubsets: (nodes: Node[]) => Node[]; + /** + * Finds all of the element nodes in the array that match the test predicate, + * as well as any of their children that match it. + */ + findAll: (test: Predicate, nodes: Node[]) => ElementNode[]; + /** + * Finds the first node in the array that matches the test predicate, or one + * of its children. + */ + findOne: (test: Predicate, elems: Node[]) => ElementNode | null; + /** + * The adapter can also optionally include an equals method, if your DOM + * structure needs a custom equality test to compare two objects which refer + * to the same underlying node. If not provided, `css-select` will fall back to + * `a === b`. + */ + equals?: (a: Node, b: Node) => boolean; + /** + * Is the element in hovered state? + */ + isHovered?: (elem: ElementNode) => boolean; + /** + * Is the element in visited state? + */ + isVisited?: (elem: ElementNode) => boolean; + /** + * Is the element in active state? + */ + isActive?: (elem: ElementNode) => boolean; +} +export interface Options { + /** + * When enabled, tag names will be case-sensitive. + * + * @default false + */ + xmlMode?: boolean; + /** + * Lower-case attribute names. + * + * @default !xmlMode + */ + lowerCaseAttributeNames?: boolean; + /** + * Lower-case tag names. + * + * @default !xmlMode + */ + lowerCaseTags?: boolean; + /** + * Is the document in quirks mode? + * + * This will lead to .className and #id being case-insensitive. + * + * @default false + */ + quirksMode?: boolean; + /** + * Pseudo-classes that override the default ones. + * + * Maps from names to either strings of functions. + * - A string value is a selector that the element must match to be selected. + * - A function is called with the element as its first argument, and optional + * parameters second. If it returns true, the element is selected. + */ + pseudos?: Record boolean)> | undefined; + /** + * The last function in the stack, will be called with the last element + * that's looked at. + */ + rootFunc?: (element: ElementNode) => boolean; + /** + * The adapter to use when interacting with the backing DOM structure. By + * default it uses the `domutils` module. + */ + adapter?: Adapter; + /** + * The context of the current query. Used to limit the scope of searches. + * Can be matched directly using the `:scope` pseudo-class. + */ + context?: Node | Node[]; + /** + * Indicates whether to consider the selector as a relative selector. + * + * Relative selectors that don't include a `:scope` pseudo-class behave + * as if they have a `:scope ` prefix (a `:scope` pseudo-class, followed by + * a descendant selector). + * + * If relative selectors are disabled, selectors starting with a traversal + * will lead to an error. + * + * @default true + * @see {@link https://www.w3.org/TR/selectors-4/#relative} + */ + relativeSelector?: boolean; + /** + * Allow css-select to cache results for some selectors, sometimes greatly + * improving querying performance. Disable this if your document can + * change in between queries with the same compiled selector. + * + * @default true + */ + cacheResults?: boolean; +} +export interface InternalOptions extends Options { + adapter: Adapter; + equals: (a: Node, b: Node) => boolean; +} +export interface CompiledQuery { + (node: ElementNode): boolean; + shouldTestNextSiblings?: boolean; +} +export declare type Query = string | CompiledQuery | Selector[][]; +export declare type CompileToken = (token: InternalSelector[][], options: InternalOptions, context?: Node[] | Node) => CompiledQuery; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/types.d.ts.map b/node_modules/css-select/lib/esm/types.d.ts.map new file mode 100644 index 00000000..d14b18f0 --- /dev/null +++ b/node_modules/css-select/lib/esm/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/types.js b/node_modules/css-select/lib/esm/types.js new file mode 100644 index 00000000..718fd38a --- /dev/null +++ b/node_modules/css-select/lib/esm/types.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/esm/types.js.map b/node_modules/css-select/lib/esm/types.js.map new file mode 100644 index 00000000..d1bde2f8 --- /dev/null +++ b/node_modules/css-select/lib/esm/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/css-select/lib/general.d.ts b/node_modules/css-select/lib/general.d.ts new file mode 100644 index 00000000..2baa1f31 --- /dev/null +++ b/node_modules/css-select/lib/general.d.ts @@ -0,0 +1,3 @@ +import type { CompiledQuery, InternalOptions, InternalSelector, CompileToken } from "./types.js"; +export declare function compileGeneralSelector(next: CompiledQuery, selector: InternalSelector, options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken): CompiledQuery; +//# sourceMappingURL=general.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/general.d.ts.map b/node_modules/css-select/lib/general.d.ts.map new file mode 100644 index 00000000..82c8d6d4 --- /dev/null +++ b/node_modules/css-select/lib/general.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"general.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["general.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAER,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,YAAY,EACf,MAAM,YAAY,CAAC;AAkBpB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACjE,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,EAC3B,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,GAC9C,aAAa,CAAC,WAAW,CAAC,CAiK5B"} \ No newline at end of file diff --git a/node_modules/css-select/lib/general.js b/node_modules/css-select/lib/general.js new file mode 100644 index 00000000..5c068004 --- /dev/null +++ b/node_modules/css-select/lib/general.js @@ -0,0 +1,148 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.compileGeneralSelector = void 0; +var attributes_js_1 = require("./attributes.js"); +var index_js_1 = require("./pseudo-selectors/index.js"); +var css_what_1 = require("css-what"); +function getElementParent(node, adapter) { + var parent = adapter.getParent(node); + if (parent && adapter.isTag(parent)) { + return parent; + } + return null; +} +/* + * All available rules + */ +function compileGeneralSelector(next, selector, options, context, compileToken) { + var adapter = options.adapter, equals = options.equals; + switch (selector.type) { + case css_what_1.SelectorType.PseudoElement: { + throw new Error("Pseudo-elements are not supported by css-select"); + } + case css_what_1.SelectorType.ColumnCombinator: { + throw new Error("Column combinators are not yet supported by css-select"); + } + case css_what_1.SelectorType.Attribute: { + if (selector.namespace != null) { + throw new Error("Namespaced attributes are not yet supported by css-select"); + } + if (!options.xmlMode || options.lowerCaseAttributeNames) { + selector.name = selector.name.toLowerCase(); + } + return attributes_js_1.attributeRules[selector.action](next, selector, options); + } + case css_what_1.SelectorType.Pseudo: { + return (0, index_js_1.compilePseudoSelector)(next, selector, options, context, compileToken); + } + // Tags + case css_what_1.SelectorType.Tag: { + if (selector.namespace != null) { + throw new Error("Namespaced tag names are not yet supported by css-select"); + } + var name_1 = selector.name; + if (!options.xmlMode || options.lowerCaseTags) { + name_1 = name_1.toLowerCase(); + } + return function tag(elem) { + return adapter.getName(elem) === name_1 && next(elem); + }; + } + // Traversal + case css_what_1.SelectorType.Descendant: { + if (options.cacheResults === false || + typeof WeakSet === "undefined") { + return function descendant(elem) { + var current = elem; + while ((current = getElementParent(current, adapter))) { + if (next(current)) { + return true; + } + } + return false; + }; + } + // @ts-expect-error `ElementNode` is not extending object + var isFalseCache_1 = new WeakSet(); + return function cachedDescendant(elem) { + var current = elem; + while ((current = getElementParent(current, adapter))) { + if (!isFalseCache_1.has(current)) { + if (adapter.isTag(current) && next(current)) { + return true; + } + isFalseCache_1.add(current); + } + } + return false; + }; + } + case "_flexibleDescendant": { + // Include element itself, only used while querying an array + return function flexibleDescendant(elem) { + var current = elem; + do { + if (next(current)) + return true; + } while ((current = getElementParent(current, adapter))); + return false; + }; + } + case css_what_1.SelectorType.Parent: { + return function parent(elem) { + return adapter + .getChildren(elem) + .some(function (elem) { return adapter.isTag(elem) && next(elem); }); + }; + } + case css_what_1.SelectorType.Child: { + return function child(elem) { + var parent = adapter.getParent(elem); + return parent != null && adapter.isTag(parent) && next(parent); + }; + } + case css_what_1.SelectorType.Sibling: { + return function sibling(elem) { + var siblings = adapter.getSiblings(elem); + for (var i = 0; i < siblings.length; i++) { + var currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling) && next(currentSibling)) { + return true; + } + } + return false; + }; + } + case css_what_1.SelectorType.Adjacent: { + if (adapter.prevElementSibling) { + return function adjacent(elem) { + var previous = adapter.prevElementSibling(elem); + return previous != null && next(previous); + }; + } + return function adjacent(elem) { + var siblings = adapter.getSiblings(elem); + var lastElement; + for (var i = 0; i < siblings.length; i++) { + var currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling)) { + lastElement = currentSibling; + } + } + return !!lastElement && next(lastElement); + }; + } + case css_what_1.SelectorType.Universal: { + if (selector.namespace != null && selector.namespace !== "*") { + throw new Error("Namespaced universal selectors are not yet supported by css-select"); + } + return next; + } + } +} +exports.compileGeneralSelector = compileGeneralSelector; +//# sourceMappingURL=general.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/general.js.map b/node_modules/css-select/lib/general.js.map new file mode 100644 index 00000000..0832b74e --- /dev/null +++ b/node_modules/css-select/lib/general.js.map @@ -0,0 +1 @@ +{"version":3,"file":"general.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["general.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/index.d.ts b/node_modules/css-select/lib/index.d.ts new file mode 100644 index 00000000..09113723 --- /dev/null +++ b/node_modules/css-select/lib/index.d.ts @@ -0,0 +1,50 @@ +import type { CompiledQuery, Options, Query, Adapter } from "./types.js"; +export type { Options }; +/** + * Compiles the query, returns a function. + */ +export declare const compile: (selector: string | import("css-what").Selector[][], options?: Options | undefined, context?: Node | Node[] | undefined) => CompiledQuery; +export declare const _compileUnsafe: (selector: string | import("css-what").Selector[][], options?: Options | undefined, context?: Node | Node[] | undefined) => CompiledQuery; +export declare const _compileToken: (selector: import("./types.js").InternalSelector[][], options?: Options | undefined, context?: Node | Node[] | undefined) => CompiledQuery; +export declare function prepareContext(elems: Node | Node[], adapter: Adapter, shouldTestNextSiblings?: boolean): Node[]; +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns All matching elements. + * + */ +export declare const selectAll: (query: Query, elements: Node | Node[], options?: Options | undefined) => ElementNode[]; +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns the first match, or null if there was no match. + */ +export declare const selectOne: (query: Query, elements: Node | Node[], options?: Options | undefined) => ElementNode | null; +/** + * Tests whether or not an element is matched by query. + * + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elem The element to test if it matches the query. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns + */ +export declare function is(elem: ElementNode, query: Query, options?: Options): boolean; +/** + * Alias for selectAll(query, elems, options). + * @see [compile] for supported selector queries. + */ +export default selectAll; +/** @deprecated Use the `pseudos` option instead. */ +export { filters, pseudos, aliases } from "./pseudo-selectors/index.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/index.d.ts.map b/node_modules/css-select/lib/index.d.ts.map new file mode 100644 index 00000000..120c4fec --- /dev/null +++ b/node_modules/css-select/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACR,aAAa,EACb,OAAO,EAEP,KAAK,EACL,OAAO,EAEV,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,OAAO,EAAE,CAAC;AA0CxB;;GAEG;AACH,eAAO,MAAM,OAAO,oMAA0B,CAAC;AAC/C,eAAO,MAAM,cAAc,2MAA6B,CAAC;AACzD,eAAO,MAAM,aAAa,4MAA4B,CAAC;AA6BvD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACzD,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EACnC,sBAAsB,UAAQ,GAC/B,IAAI,EAAE,CAYR;AAiBD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,yJASrB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,8JASrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,EAAE,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAC7C,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EACzB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,GACrC,OAAO,CAKT;AAED;;;GAGG;AACH,eAAe,SAAS,CAAC;AAGzB,oDAAoD;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/index.js b/node_modules/css-select/lib/index.js new file mode 100644 index 00000000..0dc6da01 --- /dev/null +++ b/node_modules/css-select/lib/index.js @@ -0,0 +1,154 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.aliases = exports.pseudos = exports.filters = exports.is = exports.selectOne = exports.selectAll = exports.prepareContext = exports._compileToken = exports._compileUnsafe = exports.compile = void 0; +var DomUtils = __importStar(require("domutils")); +var boolbase_1 = __importDefault(require("boolbase")); +var compile_js_1 = require("./compile.js"); +var subselects_js_1 = require("./pseudo-selectors/subselects.js"); +var defaultEquals = function (a, b) { return a === b; }; +var defaultOptions = { + adapter: DomUtils, + equals: defaultEquals, +}; +function convertOptionFormats(options) { + var _a, _b, _c, _d; + /* + * We force one format of options to the other one. + */ + // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`. + var opts = options !== null && options !== void 0 ? options : defaultOptions; + // @ts-expect-error Same as above. + (_a = opts.adapter) !== null && _a !== void 0 ? _a : (opts.adapter = DomUtils); + // @ts-expect-error `equals` does not exist on `Options` + (_b = opts.equals) !== null && _b !== void 0 ? _b : (opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals); + return opts; +} +function wrapCompile(func) { + return function addAdapter(selector, options, context) { + var opts = convertOptionFormats(options); + return func(selector, opts, context); + }; +} +/** + * Compiles the query, returns a function. + */ +exports.compile = wrapCompile(compile_js_1.compile); +exports._compileUnsafe = wrapCompile(compile_js_1.compileUnsafe); +exports._compileToken = wrapCompile(compile_js_1.compileToken); +function getSelectorFunc(searchFunc) { + return function select(query, elements, options) { + var opts = convertOptionFormats(options); + if (typeof query !== "function") { + query = (0, compile_js_1.compileUnsafe)(query, opts, elements); + } + var filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings); + return searchFunc(query, filteredElements, opts); + }; +} +function prepareContext(elems, adapter, shouldTestNextSiblings) { + if (shouldTestNextSiblings === void 0) { shouldTestNextSiblings = false; } + /* + * Add siblings if the query requires them. + * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692 + */ + if (shouldTestNextSiblings) { + elems = appendNextSiblings(elems, adapter); + } + return Array.isArray(elems) + ? adapter.removeSubsets(elems) + : adapter.getChildren(elems); +} +exports.prepareContext = prepareContext; +function appendNextSiblings(elem, adapter) { + // Order matters because jQuery seems to check the children before the siblings + var elems = Array.isArray(elem) ? elem.slice(0) : [elem]; + var elemsLength = elems.length; + for (var i = 0; i < elemsLength; i++) { + var nextSiblings = (0, subselects_js_1.getNextSiblings)(elems[i], adapter); + elems.push.apply(elems, nextSiblings); + } + return elems; +} +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns All matching elements. + * + */ +exports.selectAll = getSelectorFunc(function (query, elems, options) { + return query === boolbase_1.default.falseFunc || !elems || elems.length === 0 + ? [] + : options.adapter.findAll(query, elems); +}); +/** + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elems Elements to query. If it is an element, its children will be queried.. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns the first match, or null if there was no match. + */ +exports.selectOne = getSelectorFunc(function (query, elems, options) { + return query === boolbase_1.default.falseFunc || !elems || elems.length === 0 + ? null + : options.adapter.findOne(query, elems); +}); +/** + * Tests whether or not an element is matched by query. + * + * @template Node The generic Node type for the DOM adapter being used. + * @template ElementNode The Node type for elements for the DOM adapter being used. + * @param elem The element to test if it matches the query. + * @param query can be either a CSS selector string or a compiled query function. + * @param [options] options for querying the document. + * @see compile for supported selector queries. + * @returns + */ +function is(elem, query, options) { + var opts = convertOptionFormats(options); + return (typeof query === "function" ? query : (0, compile_js_1.compile)(query, opts))(elem); +} +exports.is = is; +/** + * Alias for selectAll(query, elems, options). + * @see [compile] for supported selector queries. + */ +exports.default = exports.selectAll; +// Export filters, pseudos and aliases to allow users to supply their own. +/** @deprecated Use the `pseudos` option instead. */ +var index_js_1 = require("./pseudo-selectors/index.js"); +Object.defineProperty(exports, "filters", { enumerable: true, get: function () { return index_js_1.filters; } }); +Object.defineProperty(exports, "pseudos", { enumerable: true, get: function () { return index_js_1.pseudos; } }); +Object.defineProperty(exports, "aliases", { enumerable: true, get: function () { return index_js_1.aliases; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/index.js.map b/node_modules/css-select/lib/index.js.map new file mode 100644 index 00000000..c44e8567 --- /dev/null +++ b/node_modules/css-select/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts b/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts new file mode 100644 index 00000000..1bcb31a4 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts @@ -0,0 +1,5 @@ +/** + * Aliases are pseudos that are expressed as selectors. + */ +export declare const aliases: Record; +//# sourceMappingURL=aliases.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts.map b/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts.map new file mode 100644 index 00000000..37c9e8ce --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"aliases.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/aliases.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwC1C,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/aliases.js b/node_modules/css-select/lib/pseudo-selectors/aliases.js new file mode 100644 index 00000000..c2598895 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/aliases.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.aliases = void 0; +/** + * Aliases are pseudos that are expressed as selectors. + */ +exports.aliases = { + // Links + "any-link": ":is(a, area, link)[href]", + link: ":any-link:not(:visited)", + // Forms + // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements + disabled: ":is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )", + enabled: ":not(:disabled)", + checked: ":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)", + required: ":is(input, select, textarea)[required]", + optional: ":is(input, select, textarea):not([required])", + // JQuery extensions + // https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness + selected: "option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)", + checkbox: "[type=checkbox]", + file: "[type=file]", + password: "[type=password]", + radio: "[type=radio]", + reset: "[type=reset]", + image: "[type=image]", + submit: "[type=submit]", + parent: ":not(:empty)", + header: ":is(h1, h2, h3, h4, h5, h6)", + button: ":is(button, input[type=button])", + input: ":is(input, textarea, select, button)", + text: "input:is(:not([type!='']), [type=text])", +}; +//# sourceMappingURL=aliases.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/aliases.js.map b/node_modules/css-select/lib/pseudo-selectors/aliases.js.map new file mode 100644 index 00000000..6a82f970 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/aliases.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aliases.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/aliases.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,OAAO,GAA2B;IAC3C,QAAQ;IAER,UAAU,EAAE,0BAA0B;IACtC,IAAI,EAAE,yBAAyB;IAE/B,QAAQ;IAER,0EAA0E;IAC1E,QAAQ,EAAE,yMAIR;IACF,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EACH,6EAA6E;IACjF,QAAQ,EAAE,wCAAwC;IAClD,QAAQ,EAAE,8CAA8C;IAExD,oBAAoB;IAEpB,wFAAwF;IACxF,QAAQ,EACJ,8FAA8F;IAElG,QAAQ,EAAE,iBAAiB;IAC3B,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,iBAAiB;IAC3B,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,eAAe;IAEvB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,6BAA6B;IAErC,MAAM,EAAE,iCAAiC;IACzC,KAAK,EAAE,sCAAsC;IAC7C,IAAI,EAAE,yCAAyC;CAClD,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/filters.d.ts b/node_modules/css-select/lib/pseudo-selectors/filters.d.ts new file mode 100644 index 00000000..a75d0631 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/filters.d.ts @@ -0,0 +1,4 @@ +import type { CompiledQuery, InternalOptions } from "../types.js"; +export declare type Filter = (next: CompiledQuery, text: string, options: InternalOptions, context?: Node[]) => CompiledQuery; +export declare const filters: Record; +//# sourceMappingURL=filters.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/filters.d.ts.map b/node_modules/css-select/lib/pseudo-selectors/filters.d.ts.map new file mode 100644 index 00000000..86f1cef3 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/filters.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"filters.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/filters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAW,MAAM,aAAa,CAAC;AAE3E,oBAAY,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAChD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,KACf,aAAa,CAAC,WAAW,CAAC,CAAC;AAYhC,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2I1C,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/filters.js b/node_modules/css-select/lib/pseudo-selectors/filters.js new file mode 100644 index 00000000..981ec2f7 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/filters.js @@ -0,0 +1,157 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.filters = void 0; +var nth_check_1 = __importDefault(require("nth-check")); +var boolbase_1 = __importDefault(require("boolbase")); +function getChildFunc(next, adapter) { + return function (elem) { + var parent = adapter.getParent(elem); + return parent != null && adapter.isTag(parent) && next(elem); + }; +} +exports.filters = { + contains: function (next, text, _a) { + var adapter = _a.adapter; + return function contains(elem) { + return next(elem) && adapter.getText(elem).includes(text); + }; + }, + icontains: function (next, text, _a) { + var adapter = _a.adapter; + var itext = text.toLowerCase(); + return function icontains(elem) { + return (next(elem) && + adapter.getText(elem).toLowerCase().includes(itext)); + }; + }, + // Location specific methods + "nth-child": function (next, rule, _a) { + var adapter = _a.adapter, equals = _a.equals; + var func = (0, nth_check_1.default)(rule); + if (func === boolbase_1.default.falseFunc) + return boolbase_1.default.falseFunc; + if (func === boolbase_1.default.trueFunc) + return getChildFunc(next, adapter); + return function nthChild(elem) { + var siblings = adapter.getSiblings(elem); + var pos = 0; + for (var i = 0; i < siblings.length; i++) { + if (equals(elem, siblings[i])) + break; + if (adapter.isTag(siblings[i])) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + "nth-last-child": function (next, rule, _a) { + var adapter = _a.adapter, equals = _a.equals; + var func = (0, nth_check_1.default)(rule); + if (func === boolbase_1.default.falseFunc) + return boolbase_1.default.falseFunc; + if (func === boolbase_1.default.trueFunc) + return getChildFunc(next, adapter); + return function nthLastChild(elem) { + var siblings = adapter.getSiblings(elem); + var pos = 0; + for (var i = siblings.length - 1; i >= 0; i--) { + if (equals(elem, siblings[i])) + break; + if (adapter.isTag(siblings[i])) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + "nth-of-type": function (next, rule, _a) { + var adapter = _a.adapter, equals = _a.equals; + var func = (0, nth_check_1.default)(rule); + if (func === boolbase_1.default.falseFunc) + return boolbase_1.default.falseFunc; + if (func === boolbase_1.default.trueFunc) + return getChildFunc(next, adapter); + return function nthOfType(elem) { + var siblings = adapter.getSiblings(elem); + var pos = 0; + for (var i = 0; i < siblings.length; i++) { + var currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === adapter.getName(elem)) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + "nth-last-of-type": function (next, rule, _a) { + var adapter = _a.adapter, equals = _a.equals; + var func = (0, nth_check_1.default)(rule); + if (func === boolbase_1.default.falseFunc) + return boolbase_1.default.falseFunc; + if (func === boolbase_1.default.trueFunc) + return getChildFunc(next, adapter); + return function nthLastOfType(elem) { + var siblings = adapter.getSiblings(elem); + var pos = 0; + for (var i = siblings.length - 1; i >= 0; i--) { + var currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + break; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === adapter.getName(elem)) { + pos++; + } + } + return func(pos) && next(elem); + }; + }, + // TODO determine the actual root element + root: function (next, _rule, _a) { + var adapter = _a.adapter; + return function (elem) { + var parent = adapter.getParent(elem); + return (parent == null || !adapter.isTag(parent)) && next(elem); + }; + }, + scope: function (next, rule, options, context) { + var equals = options.equals; + if (!context || context.length === 0) { + // Equivalent to :root + return exports.filters["root"](next, rule, options); + } + if (context.length === 1) { + // NOTE: can't be unpacked, as :has uses this for side-effects + return function (elem) { return equals(context[0], elem) && next(elem); }; + } + return function (elem) { return context.includes(elem) && next(elem); }; + }, + hover: dynamicStatePseudo("isHovered"), + visited: dynamicStatePseudo("isVisited"), + active: dynamicStatePseudo("isActive"), +}; +/** + * Dynamic state pseudos. These depend on optional Adapter methods. + * + * @param name The name of the adapter method to call. + * @returns Pseudo for the `filters` object. + */ +function dynamicStatePseudo(name) { + return function dynamicPseudo(next, _rule, _a) { + var adapter = _a.adapter; + var func = adapter[name]; + if (typeof func !== "function") { + return boolbase_1.default.falseFunc; + } + return function active(elem) { + return func(elem) && next(elem); + }; + }; +} +//# sourceMappingURL=filters.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/filters.js.map b/node_modules/css-select/lib/pseudo-selectors/filters.js.map new file mode 100644 index 00000000..5ce5696f --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/filters.js.map @@ -0,0 +1 @@ +{"version":3,"file":"filters.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/filters.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/index.d.ts b/node_modules/css-select/lib/pseudo-selectors/index.d.ts new file mode 100644 index 00000000..2c41913c --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/index.d.ts @@ -0,0 +1,8 @@ +import type { CompiledQuery, InternalOptions, CompileToken } from "../types.js"; +import { PseudoSelector } from "css-what"; +import { filters } from "./filters.js"; +import { pseudos } from "./pseudos.js"; +import { aliases } from "./aliases.js"; +export { filters, pseudos, aliases }; +export declare function compilePseudoSelector(next: CompiledQuery, selector: PseudoSelector, options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken): CompiledQuery; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/index.d.ts.map b/node_modules/css-select/lib/pseudo-selectors/index.d.ts.map new file mode 100644 index 00000000..ba140978 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAS,cAAc,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAErC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAChE,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,EAC3B,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,GAC9C,aAAa,CAAC,WAAW,CAAC,CA4C5B"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/index.js b/node_modules/css-select/lib/pseudo-selectors/index.js new file mode 100644 index 00000000..25367865 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/index.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.compilePseudoSelector = exports.aliases = exports.pseudos = exports.filters = void 0; +var css_what_1 = require("css-what"); +var filters_js_1 = require("./filters.js"); +Object.defineProperty(exports, "filters", { enumerable: true, get: function () { return filters_js_1.filters; } }); +var pseudos_js_1 = require("./pseudos.js"); +Object.defineProperty(exports, "pseudos", { enumerable: true, get: function () { return pseudos_js_1.pseudos; } }); +var aliases_js_1 = require("./aliases.js"); +Object.defineProperty(exports, "aliases", { enumerable: true, get: function () { return aliases_js_1.aliases; } }); +var subselects_js_1 = require("./subselects.js"); +function compilePseudoSelector(next, selector, options, context, compileToken) { + var _a; + var name = selector.name, data = selector.data; + if (Array.isArray(data)) { + if (!(name in subselects_js_1.subselects)) { + throw new Error("Unknown pseudo-class :".concat(name, "(").concat(data, ")")); + } + return subselects_js_1.subselects[name](next, data, options, context, compileToken); + } + var userPseudo = (_a = options.pseudos) === null || _a === void 0 ? void 0 : _a[name]; + var stringPseudo = typeof userPseudo === "string" ? userPseudo : aliases_js_1.aliases[name]; + if (typeof stringPseudo === "string") { + if (data != null) { + throw new Error("Pseudo ".concat(name, " doesn't have any arguments")); + } + // The alias has to be parsed here, to make sure options are respected. + var alias = (0, css_what_1.parse)(stringPseudo); + return subselects_js_1.subselects["is"](next, alias, options, context, compileToken); + } + if (typeof userPseudo === "function") { + (0, pseudos_js_1.verifyPseudoArgs)(userPseudo, name, data, 1); + return function (elem) { return userPseudo(elem, data) && next(elem); }; + } + if (name in filters_js_1.filters) { + return filters_js_1.filters[name](next, data, options, context); + } + if (name in pseudos_js_1.pseudos) { + var pseudo_1 = pseudos_js_1.pseudos[name]; + (0, pseudos_js_1.verifyPseudoArgs)(pseudo_1, name, data, 2); + return function (elem) { return pseudo_1(elem, options, data) && next(elem); }; + } + throw new Error("Unknown pseudo-class :".concat(name)); +} +exports.compilePseudoSelector = compilePseudoSelector; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/index.js.map b/node_modules/css-select/lib/pseudo-selectors/index.js.map new file mode 100644 index 00000000..93f6fc88 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/index.ts"],"names":[],"mappings":";;;AAeA,qCAAiD;AACjD,2CAAuC;AAK9B,wFALA,oBAAO,OAKA;AAJhB,2CAAyD;AAIvC,wFAJT,oBAAO,OAIS;AAHzB,2CAAuC;AAGZ,wFAHlB,oBAAO,OAGkB;AAFlC,iDAA6C;AAI7C,SAAgB,qBAAqB,CACjC,IAAgC,EAChC,QAAwB,EACxB,OAA2C,EAC3C,OAA2B,EAC3B,YAA6C;;IAErC,IAAA,IAAI,GAAW,QAAQ,KAAnB,EAAE,IAAI,GAAK,QAAQ,KAAb,CAAc;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,IAAI,CAAC,CAAC,IAAI,IAAI,0BAAU,CAAC,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,gCAAyB,IAAI,cAAI,IAAI,MAAG,CAAC,CAAC;SAC7D;QAED,OAAO,0BAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KACvE;IAED,IAAM,UAAU,GAAG,MAAA,OAAO,CAAC,OAAO,0CAAG,IAAI,CAAC,CAAC;IAE3C,IAAM,YAAY,GACd,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QAClC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,iBAAU,IAAI,gCAA6B,CAAC,CAAC;SAChE;QAED,uEAAuE;QACvE,IAAM,KAAK,GAAG,IAAA,gBAAK,EAAC,YAAY,CAAC,CAAC;QAClC,OAAO,0BAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KACxE;IAED,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;QAClC,IAAA,6BAAgB,EAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE5C,OAAO,UAAC,IAAI,IAAK,OAAA,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAApC,CAAoC,CAAC;KACzD;IAED,IAAI,IAAI,IAAI,oBAAO,EAAE;QACjB,OAAO,oBAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAChE;IAED,IAAI,IAAI,IAAI,oBAAO,EAAE;QACjB,IAAM,QAAM,GAAG,oBAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAA,6BAAgB,EAAC,QAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAExC,OAAO,UAAC,IAAI,IAAK,OAAA,QAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAzC,CAAyC,CAAC;KAC9D;IAED,MAAM,IAAI,KAAK,CAAC,gCAAyB,IAAI,CAAE,CAAC,CAAC;AACrD,CAAC;AAlDD,sDAkDC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts b/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts new file mode 100644 index 00000000..cfcf8d6c --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts @@ -0,0 +1,6 @@ +import type { PseudoSelector } from "css-what"; +import type { InternalOptions } from "../types.js"; +export declare type Pseudo = (elem: ElementNode, options: InternalOptions, subselect?: string | null) => boolean; +export declare const pseudos: Record; +export declare function verifyPseudoArgs>(func: (...args: T) => boolean, name: string, subselect: PseudoSelector["data"], argIndex: number): void; +//# sourceMappingURL=pseudos.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts.map b/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts.map new file mode 100644 index 00000000..b2d11373 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pseudos.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/pseudos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,oBAAY,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAChD,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,KACxB,OAAO,CAAC;AAGb,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkF1C,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,EACrD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,EAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,EACjC,QAAQ,EAAE,MAAM,GACjB,IAAI,CAQN"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/pseudos.js b/node_modules/css-select/lib/pseudo-selectors/pseudos.js new file mode 100644 index 00000000..050ac7f7 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/pseudos.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.verifyPseudoArgs = exports.pseudos = void 0; +// While filters are precompiled, pseudos get called when they are needed +exports.pseudos = { + empty: function (elem, _a) { + var adapter = _a.adapter; + return !adapter.getChildren(elem).some(function (elem) { + // FIXME: `getText` call is potentially expensive. + return adapter.isTag(elem) || adapter.getText(elem) !== ""; + }); + }, + "first-child": function (elem, _a) { + var adapter = _a.adapter, equals = _a.equals; + if (adapter.prevElementSibling) { + return adapter.prevElementSibling(elem) == null; + } + var firstChild = adapter + .getSiblings(elem) + .find(function (elem) { return adapter.isTag(elem); }); + return firstChild != null && equals(elem, firstChild); + }, + "last-child": function (elem, _a) { + var adapter = _a.adapter, equals = _a.equals; + var siblings = adapter.getSiblings(elem); + for (var i = siblings.length - 1; i >= 0; i--) { + if (equals(elem, siblings[i])) + return true; + if (adapter.isTag(siblings[i])) + break; + } + return false; + }, + "first-of-type": function (elem, _a) { + var adapter = _a.adapter, equals = _a.equals; + var siblings = adapter.getSiblings(elem); + var elemName = adapter.getName(elem); + for (var i = 0; i < siblings.length; i++) { + var currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + return true; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === elemName) { + break; + } + } + return false; + }, + "last-of-type": function (elem, _a) { + var adapter = _a.adapter, equals = _a.equals; + var siblings = adapter.getSiblings(elem); + var elemName = adapter.getName(elem); + for (var i = siblings.length - 1; i >= 0; i--) { + var currentSibling = siblings[i]; + if (equals(elem, currentSibling)) + return true; + if (adapter.isTag(currentSibling) && + adapter.getName(currentSibling) === elemName) { + break; + } + } + return false; + }, + "only-of-type": function (elem, _a) { + var adapter = _a.adapter, equals = _a.equals; + var elemName = adapter.getName(elem); + return adapter + .getSiblings(elem) + .every(function (sibling) { + return equals(elem, sibling) || + !adapter.isTag(sibling) || + adapter.getName(sibling) !== elemName; + }); + }, + "only-child": function (elem, _a) { + var adapter = _a.adapter, equals = _a.equals; + return adapter + .getSiblings(elem) + .every(function (sibling) { return equals(elem, sibling) || !adapter.isTag(sibling); }); + }, +}; +function verifyPseudoArgs(func, name, subselect, argIndex) { + if (subselect === null) { + if (func.length > argIndex) { + throw new Error("Pseudo-class :".concat(name, " requires an argument")); + } + } + else if (func.length === argIndex) { + throw new Error("Pseudo-class :".concat(name, " doesn't have any arguments")); + } +} +exports.verifyPseudoArgs = verifyPseudoArgs; +//# sourceMappingURL=pseudos.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/pseudos.js.map b/node_modules/css-select/lib/pseudo-selectors/pseudos.js.map new file mode 100644 index 00000000..089cc51c --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/pseudos.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pseudos.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/pseudos.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts b/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts new file mode 100644 index 00000000..6555ef2d --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts @@ -0,0 +1,9 @@ +import type { Selector } from "css-what"; +import type { CompiledQuery, InternalOptions, CompileToken, Adapter } from "../types.js"; +/** Used as a placeholder for :has. Will be replaced with the actual element. */ +export declare const PLACEHOLDER_ELEMENT: {}; +export declare function ensureIsTag(next: CompiledQuery, adapter: Adapter): CompiledQuery; +export declare type Subselect = (next: CompiledQuery, subselect: Selector[][], options: InternalOptions, context: Node[] | undefined, compileToken: CompileToken) => CompiledQuery; +export declare function getNextSiblings(elem: Node, adapter: Adapter): ElementNode[]; +export declare const subselects: Record; +//# sourceMappingURL=subselects.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts.map b/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts.map new file mode 100644 index 00000000..9950c0cc --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"subselects.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/subselects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EACR,aAAa,EACb,eAAe,EACf,YAAY,EACZ,OAAO,EACV,MAAM,aAAa,CAAC;AAGrB,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,IAAK,CAAC;AAEtC,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACtD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,GACpC,aAAa,CAAC,IAAI,CAAC,CAGrB;AAED,oBAAY,SAAS,GAAG,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EACnD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAChC,SAAS,EAAE,QAAQ,EAAE,EAAE,EACvB,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,EAC3B,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,KAC5C,aAAa,CAAC,WAAW,CAAC,CAAC;AAEhC,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,SAAS,IAAI,EAC1D,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,GACpC,WAAW,EAAE,CAMf;AAiCD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAgEhD,CAAC"} \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/subselects.js b/node_modules/css-select/lib/pseudo-selectors/subselects.js new file mode 100644 index 00000000..d2f3b1c6 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/subselects.js @@ -0,0 +1,112 @@ +"use strict"; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.subselects = exports.getNextSiblings = exports.ensureIsTag = exports.PLACEHOLDER_ELEMENT = void 0; +var boolbase_1 = __importDefault(require("boolbase")); +var sort_js_1 = require("../sort.js"); +/** Used as a placeholder for :has. Will be replaced with the actual element. */ +exports.PLACEHOLDER_ELEMENT = {}; +function ensureIsTag(next, adapter) { + if (next === boolbase_1.default.falseFunc) + return boolbase_1.default.falseFunc; + return function (elem) { return adapter.isTag(elem) && next(elem); }; +} +exports.ensureIsTag = ensureIsTag; +function getNextSiblings(elem, adapter) { + var siblings = adapter.getSiblings(elem); + if (siblings.length <= 1) + return []; + var elemIndex = siblings.indexOf(elem); + if (elemIndex < 0 || elemIndex === siblings.length - 1) + return []; + return siblings.slice(elemIndex + 1).filter(adapter.isTag); +} +exports.getNextSiblings = getNextSiblings; +function copyOptions(options) { + // Not copied: context, rootFunc + return { + xmlMode: !!options.xmlMode, + lowerCaseAttributeNames: !!options.lowerCaseAttributeNames, + lowerCaseTags: !!options.lowerCaseTags, + quirksMode: !!options.quirksMode, + cacheResults: !!options.cacheResults, + pseudos: options.pseudos, + adapter: options.adapter, + equals: options.equals, + }; +} +var is = function (next, token, options, context, compileToken) { + var func = compileToken(token, copyOptions(options), context); + return func === boolbase_1.default.trueFunc + ? next + : func === boolbase_1.default.falseFunc + ? boolbase_1.default.falseFunc + : function (elem) { return func(elem) && next(elem); }; +}; +/* + * :not, :has, :is, :matches and :where have to compile selectors + * doing this in src/pseudos.ts would lead to circular dependencies, + * so we add them here + */ +exports.subselects = { + is: is, + /** + * `:matches` and `:where` are aliases for `:is`. + */ + matches: is, + where: is, + not: function (next, token, options, context, compileToken) { + var func = compileToken(token, copyOptions(options), context); + return func === boolbase_1.default.falseFunc + ? next + : func === boolbase_1.default.trueFunc + ? boolbase_1.default.falseFunc + : function (elem) { return !func(elem) && next(elem); }; + }, + has: function (next, subselect, options, _context, compileToken) { + var adapter = options.adapter; + var opts = copyOptions(options); + opts.relativeSelector = true; + var context = subselect.some(function (s) { return s.some(sort_js_1.isTraversal); }) + ? // Used as a placeholder. Will be replaced with the actual element. + [exports.PLACEHOLDER_ELEMENT] + : undefined; + var compiled = compileToken(subselect, opts, context); + if (compiled === boolbase_1.default.falseFunc) + return boolbase_1.default.falseFunc; + var hasElement = ensureIsTag(compiled, adapter); + // If `compiled` is `trueFunc`, we can skip this. + if (context && compiled !== boolbase_1.default.trueFunc) { + /* + * `shouldTestNextSiblings` will only be true if the query starts with + * a traversal (sibling or adjacent). That means we will always have a context. + */ + var _a = compiled.shouldTestNextSiblings, shouldTestNextSiblings_1 = _a === void 0 ? false : _a; + return function (elem) { + if (!next(elem)) + return false; + context[0] = elem; + var childs = adapter.getChildren(elem); + var nextElements = shouldTestNextSiblings_1 + ? __spreadArray(__spreadArray([], childs, true), getNextSiblings(elem, adapter), true) : childs; + return adapter.existsOne(hasElement, nextElements); + }; + } + return function (elem) { + return next(elem) && + adapter.existsOne(hasElement, adapter.getChildren(elem)); + }; + }, +}; +//# sourceMappingURL=subselects.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/pseudo-selectors/subselects.js.map b/node_modules/css-select/lib/pseudo-selectors/subselects.js.map new file mode 100644 index 00000000..40e0c258 --- /dev/null +++ b/node_modules/css-select/lib/pseudo-selectors/subselects.js.map @@ -0,0 +1 @@ +{"version":3,"file":"subselects.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["pseudo-selectors/subselects.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/sort.d.ts b/node_modules/css-select/lib/sort.d.ts new file mode 100644 index 00000000..93c996c1 --- /dev/null +++ b/node_modules/css-select/lib/sort.d.ts @@ -0,0 +1,12 @@ +import type { InternalSelector } from "./types.js"; +import { type Traversal } from "css-what"; +export declare function isTraversal(token: InternalSelector): token is Traversal; +/** + * Sort the parts of the passed selector, + * as there is potential for optimization + * (some types of selectors are faster than others) + * + * @param arr Selector to sort + */ +export default function sortByProcedure(arr: InternalSelector[]): void; +//# sourceMappingURL=sort.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/sort.d.ts.map b/node_modules/css-select/lib/sort.d.ts.map new file mode 100644 index 00000000..8e996f4a --- /dev/null +++ b/node_modules/css-select/lib/sort.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["sort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AASzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,IAAI,SAAS,CAEvE;AAWD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAerE"} \ No newline at end of file diff --git a/node_modules/css-select/lib/sort.js b/node_modules/css-select/lib/sort.js new file mode 100644 index 00000000..d597e825 --- /dev/null +++ b/node_modules/css-select/lib/sort.js @@ -0,0 +1,84 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isTraversal = void 0; +var css_what_1 = require("css-what"); +var procedure = new Map([ + [css_what_1.SelectorType.Universal, 50], + [css_what_1.SelectorType.Tag, 30], + [css_what_1.SelectorType.Attribute, 1], + [css_what_1.SelectorType.Pseudo, 0], +]); +function isTraversal(token) { + return !procedure.has(token.type); +} +exports.isTraversal = isTraversal; +var attributes = new Map([ + [css_what_1.AttributeAction.Exists, 10], + [css_what_1.AttributeAction.Equals, 8], + [css_what_1.AttributeAction.Not, 7], + [css_what_1.AttributeAction.Start, 6], + [css_what_1.AttributeAction.End, 6], + [css_what_1.AttributeAction.Any, 5], +]); +/** + * Sort the parts of the passed selector, + * as there is potential for optimization + * (some types of selectors are faster than others) + * + * @param arr Selector to sort + */ +function sortByProcedure(arr) { + var procs = arr.map(getProcedure); + for (var i = 1; i < arr.length; i++) { + var procNew = procs[i]; + if (procNew < 0) + continue; + for (var j = i - 1; j >= 0 && procNew < procs[j]; j--) { + var token = arr[j + 1]; + arr[j + 1] = arr[j]; + arr[j] = token; + procs[j + 1] = procs[j]; + procs[j] = procNew; + } + } +} +exports.default = sortByProcedure; +function getProcedure(token) { + var _a, _b; + var proc = (_a = procedure.get(token.type)) !== null && _a !== void 0 ? _a : -1; + if (token.type === css_what_1.SelectorType.Attribute) { + proc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4; + if (token.action === css_what_1.AttributeAction.Equals && token.name === "id") { + // Prefer ID selectors (eg. #ID) + proc = 9; + } + if (token.ignoreCase) { + /* + * IgnoreCase adds some overhead, prefer "normal" token + * this is a binary operation, to ensure it's still an int + */ + proc >>= 1; + } + } + else if (token.type === css_what_1.SelectorType.Pseudo) { + if (!token.data) { + proc = 3; + } + else if (token.name === "has" || token.name === "contains") { + proc = 0; // Expensive in any case + } + else if (Array.isArray(token.data)) { + // Eg. :matches, :not + proc = Math.min.apply(Math, token.data.map(function (d) { return Math.min.apply(Math, d.map(getProcedure)); })); + // If we have traversals, try to avoid executing this selector + if (proc < 0) { + proc = 0; + } + } + else { + proc = 2; + } + } + return proc; +} +//# sourceMappingURL=sort.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/sort.js.map b/node_modules/css-select/lib/sort.js.map new file mode 100644 index 00000000..5b4862b7 --- /dev/null +++ b/node_modules/css-select/lib/sort.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["sort.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/types.d.ts b/node_modules/css-select/lib/types.d.ts new file mode 100644 index 00000000..7a0cd8a5 --- /dev/null +++ b/node_modules/css-select/lib/types.d.ts @@ -0,0 +1,167 @@ +import type { Selector } from "css-what"; +export declare type InternalSelector = Selector | { + type: "_flexibleDescendant"; +}; +export declare type Predicate = (v: Value) => boolean; +export interface Adapter { + /** + * Is the node a tag? + */ + isTag: (node: Node) => node is ElementNode; + /** + * Does at least one of passed element nodes pass the test predicate? + */ + existsOne: (test: Predicate, elems: Node[]) => boolean; + /** + * Get the attribute value. + */ + getAttributeValue: (elem: ElementNode, name: string) => string | undefined; + /** + * Get the node's children + */ + getChildren: (node: Node) => Node[]; + /** + * Get the name of the tag + */ + getName: (elem: ElementNode) => string; + /** + * Get the parent of the node + */ + getParent: (node: ElementNode) => Node | null; + /** + * Get the siblings of the node. Note that unlike jQuery's `siblings` method, + * this is expected to include the current node as well + */ + getSiblings: (node: Node) => Node[]; + /** + * Returns the previous element sibling of a node. + */ + prevElementSibling?: (node: Node) => ElementNode | null; + /** + * Get the text content of the node, and its children if it has any. + */ + getText: (node: Node) => string; + /** + * Does the element have the named attribute? + */ + hasAttrib: (elem: ElementNode, name: string) => boolean; + /** + * Takes an array of nodes, and removes any duplicates, as well as any + * nodes whose ancestors are also in the array. + */ + removeSubsets: (nodes: Node[]) => Node[]; + /** + * Finds all of the element nodes in the array that match the test predicate, + * as well as any of their children that match it. + */ + findAll: (test: Predicate, nodes: Node[]) => ElementNode[]; + /** + * Finds the first node in the array that matches the test predicate, or one + * of its children. + */ + findOne: (test: Predicate, elems: Node[]) => ElementNode | null; + /** + * The adapter can also optionally include an equals method, if your DOM + * structure needs a custom equality test to compare two objects which refer + * to the same underlying node. If not provided, `css-select` will fall back to + * `a === b`. + */ + equals?: (a: Node, b: Node) => boolean; + /** + * Is the element in hovered state? + */ + isHovered?: (elem: ElementNode) => boolean; + /** + * Is the element in visited state? + */ + isVisited?: (elem: ElementNode) => boolean; + /** + * Is the element in active state? + */ + isActive?: (elem: ElementNode) => boolean; +} +export interface Options { + /** + * When enabled, tag names will be case-sensitive. + * + * @default false + */ + xmlMode?: boolean; + /** + * Lower-case attribute names. + * + * @default !xmlMode + */ + lowerCaseAttributeNames?: boolean; + /** + * Lower-case tag names. + * + * @default !xmlMode + */ + lowerCaseTags?: boolean; + /** + * Is the document in quirks mode? + * + * This will lead to .className and #id being case-insensitive. + * + * @default false + */ + quirksMode?: boolean; + /** + * Pseudo-classes that override the default ones. + * + * Maps from names to either strings of functions. + * - A string value is a selector that the element must match to be selected. + * - A function is called with the element as its first argument, and optional + * parameters second. If it returns true, the element is selected. + */ + pseudos?: Record boolean)> | undefined; + /** + * The last function in the stack, will be called with the last element + * that's looked at. + */ + rootFunc?: (element: ElementNode) => boolean; + /** + * The adapter to use when interacting with the backing DOM structure. By + * default it uses the `domutils` module. + */ + adapter?: Adapter; + /** + * The context of the current query. Used to limit the scope of searches. + * Can be matched directly using the `:scope` pseudo-class. + */ + context?: Node | Node[]; + /** + * Indicates whether to consider the selector as a relative selector. + * + * Relative selectors that don't include a `:scope` pseudo-class behave + * as if they have a `:scope ` prefix (a `:scope` pseudo-class, followed by + * a descendant selector). + * + * If relative selectors are disabled, selectors starting with a traversal + * will lead to an error. + * + * @default true + * @see {@link https://www.w3.org/TR/selectors-4/#relative} + */ + relativeSelector?: boolean; + /** + * Allow css-select to cache results for some selectors, sometimes greatly + * improving querying performance. Disable this if your document can + * change in between queries with the same compiled selector. + * + * @default true + */ + cacheResults?: boolean; +} +export interface InternalOptions extends Options { + adapter: Adapter; + equals: (a: Node, b: Node) => boolean; +} +export interface CompiledQuery { + (node: ElementNode): boolean; + shouldTestNextSiblings?: boolean; +} +export declare type Query = string | CompiledQuery | Selector[][]; +export declare type CompileToken = (token: InternalSelector[][], options: InternalOptions, context?: Node[] | Node) => CompiledQuery; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/css-select/lib/types.d.ts.map b/node_modules/css-select/lib/types.d.ts.map new file mode 100644 index 00000000..d14b18f0 --- /dev/null +++ b/node_modules/css-select/lib/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/css-select/lib/types.js b/node_modules/css-select/lib/types.js new file mode 100644 index 00000000..11e638d1 --- /dev/null +++ b/node_modules/css-select/lib/types.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/node_modules/css-select/lib/types.js.map b/node_modules/css-select/lib/types.js.map new file mode 100644 index 00000000..d1bde2f8 --- /dev/null +++ b/node_modules/css-select/lib/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"https://raw.githubusercontent.com/fb55/css-select/0f0725a9dfeddd2fdb54eda9656cdbab5bbf6be6/src/","sources":["types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/css-select/package.json b/node_modules/css-select/package.json new file mode 100644 index 00000000..6289eee7 --- /dev/null +++ b/node_modules/css-select/package.json @@ -0,0 +1,81 @@ +{ + "name": "css-select", + "version": "5.1.0", + "description": "a CSS selector compiler/engine", + "author": "Felix Boehm ", + "funding": { + "url": "https://github.com/sponsors/fb55" + }, + "keywords": [ + "css", + "selector", + "sizzle" + ], + "repository": { + "type": "git", + "url": "git://github.com/fb55/css-select.git" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "files": [ + "lib" + ], + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "devDependencies": { + "@types/boolbase": "^1.0.1", + "@types/jest": "^27.4.1", + "@types/node": "^17.0.29", + "@typescript-eslint/eslint-plugin": "^5.21.0", + "@typescript-eslint/parser": "^5.21.0", + "cheerio-soupselect": "^0.1.1", + "eslint": "^8.14.0", + "eslint-config-prettier": "^8.5.0", + "htmlparser2": "^8.0.0", + "jest": "^27.5.1", + "prettier": "^2.6.2", + "ts-jest": "^27.1.4", + "typescript": "^4.6.3" + }, + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint src", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/css-select/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "license": "BSD-2-Clause", + "prettier": { + "tabWidth": 4, + "proseWrap": "always" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + }, + "testMatch": [ + "/test/*.ts" + ] + } +} diff --git a/node_modules/css-what/LICENSE b/node_modules/css-what/LICENSE new file mode 100644 index 00000000..c464f863 --- /dev/null +++ b/node_modules/css-what/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/css-what/lib/commonjs/index.d.ts b/node_modules/css-what/lib/commonjs/index.d.ts new file mode 100644 index 00000000..ee9d66e6 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/index.d.ts @@ -0,0 +1,4 @@ +export * from "./types"; +export { isTraversal, parse } from "./parse"; +export { stringify } from "./stringify"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/index.d.ts.map b/node_modules/css-what/lib/commonjs/index.d.ts.map new file mode 100644 index 00000000..8a428b61 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"} \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/index.js b/node_modules/css-what/lib/commonjs/index.js new file mode 100644 index 00000000..3a2058a0 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/index.js @@ -0,0 +1,23 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.stringify = exports.parse = exports.isTraversal = void 0; +__exportStar(require("./types"), exports); +var parse_1 = require("./parse"); +Object.defineProperty(exports, "isTraversal", { enumerable: true, get: function () { return parse_1.isTraversal; } }); +Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_1.parse; } }); +var stringify_1 = require("./stringify"); +Object.defineProperty(exports, "stringify", { enumerable: true, get: function () { return stringify_1.stringify; } }); diff --git a/node_modules/css-what/lib/commonjs/parse.d.ts b/node_modules/css-what/lib/commonjs/parse.d.ts new file mode 100644 index 00000000..1d6e3a21 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/parse.d.ts @@ -0,0 +1,20 @@ +import { Selector, Traversal } from "./types"; +/** + * Checks whether a specific selector is a traversal. + * This is useful eg. in swapping the order of elements that + * are not traversals. + * + * @param selector Selector to check. + */ +export declare function isTraversal(selector: Selector): selector is Traversal; +/** + * Parses `selector`, optionally with the passed `options`. + * + * @param selector Selector to parse. + * @param options Options for parsing. + * @returns Returns a two-dimensional array. + * The first dimension represents selectors separated by commas (eg. `sub1, sub2`), + * the second contains the relevant tokens for that selector. + */ +export declare function parse(selector: string): Selector[][]; +//# sourceMappingURL=parse.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/parse.d.ts.map b/node_modules/css-what/lib/commonjs/parse.d.ts.map new file mode 100644 index 00000000..e4a5b051 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/parse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EAGR,SAAS,EAIZ,MAAM,SAAS,CAAC;AA6DjB;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAAI,SAAS,CAYrE;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,CAUpD"} \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/parse.js b/node_modules/css-what/lib/commonjs/parse.js new file mode 100644 index 00000000..708de670 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/parse.js @@ -0,0 +1,425 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = exports.isTraversal = void 0; +var types_1 = require("./types"); +var reName = /^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/; +var reEscape = /\\([\da-f]{1,6}\s?|(\s)|.)/gi; +var actionTypes = new Map([ + [126 /* Tilde */, types_1.AttributeAction.Element], + [94 /* Circumflex */, types_1.AttributeAction.Start], + [36 /* Dollar */, types_1.AttributeAction.End], + [42 /* Asterisk */, types_1.AttributeAction.Any], + [33 /* ExclamationMark */, types_1.AttributeAction.Not], + [124 /* Pipe */, types_1.AttributeAction.Hyphen], +]); +// Pseudos, whose data property is parsed as well. +var unpackPseudos = new Set([ + "has", + "not", + "matches", + "is", + "where", + "host", + "host-context", +]); +/** + * Checks whether a specific selector is a traversal. + * This is useful eg. in swapping the order of elements that + * are not traversals. + * + * @param selector Selector to check. + */ +function isTraversal(selector) { + switch (selector.type) { + case types_1.SelectorType.Adjacent: + case types_1.SelectorType.Child: + case types_1.SelectorType.Descendant: + case types_1.SelectorType.Parent: + case types_1.SelectorType.Sibling: + case types_1.SelectorType.ColumnCombinator: + return true; + default: + return false; + } +} +exports.isTraversal = isTraversal; +var stripQuotesFromPseudos = new Set(["contains", "icontains"]); +// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152 +function funescape(_, escaped, escapedWhitespace) { + var high = parseInt(escaped, 16) - 0x10000; + // NaN means non-codepoint + return high !== high || escapedWhitespace + ? escaped + : high < 0 + ? // BMP codepoint + String.fromCharCode(high + 0x10000) + : // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00); +} +function unescapeCSS(str) { + return str.replace(reEscape, funescape); +} +function isQuote(c) { + return c === 39 /* SingleQuote */ || c === 34 /* DoubleQuote */; +} +function isWhitespace(c) { + return (c === 32 /* Space */ || + c === 9 /* Tab */ || + c === 10 /* NewLine */ || + c === 12 /* FormFeed */ || + c === 13 /* CarriageReturn */); +} +/** + * Parses `selector`, optionally with the passed `options`. + * + * @param selector Selector to parse. + * @param options Options for parsing. + * @returns Returns a two-dimensional array. + * The first dimension represents selectors separated by commas (eg. `sub1, sub2`), + * the second contains the relevant tokens for that selector. + */ +function parse(selector) { + var subselects = []; + var endIndex = parseSelector(subselects, "".concat(selector), 0); + if (endIndex < selector.length) { + throw new Error("Unmatched selector: ".concat(selector.slice(endIndex))); + } + return subselects; +} +exports.parse = parse; +function parseSelector(subselects, selector, selectorIndex) { + var tokens = []; + function getName(offset) { + var match = selector.slice(selectorIndex + offset).match(reName); + if (!match) { + throw new Error("Expected name, found ".concat(selector.slice(selectorIndex))); + } + var name = match[0]; + selectorIndex += offset + name.length; + return unescapeCSS(name); + } + function stripWhitespace(offset) { + selectorIndex += offset; + while (selectorIndex < selector.length && + isWhitespace(selector.charCodeAt(selectorIndex))) { + selectorIndex++; + } + } + function readValueWithParenthesis() { + selectorIndex += 1; + var start = selectorIndex; + var counter = 1; + for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) { + if (selector.charCodeAt(selectorIndex) === + 40 /* LeftParenthesis */ && + !isEscaped(selectorIndex)) { + counter++; + } + else if (selector.charCodeAt(selectorIndex) === + 41 /* RightParenthesis */ && + !isEscaped(selectorIndex)) { + counter--; + } + } + if (counter) { + throw new Error("Parenthesis not matched"); + } + return unescapeCSS(selector.slice(start, selectorIndex - 1)); + } + function isEscaped(pos) { + var slashCount = 0; + while (selector.charCodeAt(--pos) === 92 /* BackSlash */) + slashCount++; + return (slashCount & 1) === 1; + } + function ensureNotTraversal() { + if (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) { + throw new Error("Did not expect successive traversals."); + } + } + function addTraversal(type) { + if (tokens.length > 0 && + tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) { + tokens[tokens.length - 1].type = type; + return; + } + ensureNotTraversal(); + tokens.push({ type: type }); + } + function addSpecialAttribute(name, action) { + tokens.push({ + type: types_1.SelectorType.Attribute, + name: name, + action: action, + value: getName(1), + namespace: null, + ignoreCase: "quirks", + }); + } + /** + * We have finished parsing the current part of the selector. + * + * Remove descendant tokens at the end if they exist, + * and return the last index, so that parsing can be + * picked up from here. + */ + function finalizeSubselector() { + if (tokens.length && + tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) { + tokens.pop(); + } + if (tokens.length === 0) { + throw new Error("Empty sub-selector"); + } + subselects.push(tokens); + } + stripWhitespace(0); + if (selector.length === selectorIndex) { + return selectorIndex; + } + loop: while (selectorIndex < selector.length) { + var firstChar = selector.charCodeAt(selectorIndex); + switch (firstChar) { + // Whitespace + case 32 /* Space */: + case 9 /* Tab */: + case 10 /* NewLine */: + case 12 /* FormFeed */: + case 13 /* CarriageReturn */: { + if (tokens.length === 0 || + tokens[0].type !== types_1.SelectorType.Descendant) { + ensureNotTraversal(); + tokens.push({ type: types_1.SelectorType.Descendant }); + } + stripWhitespace(1); + break; + } + // Traversals + case 62 /* GreaterThan */: { + addTraversal(types_1.SelectorType.Child); + stripWhitespace(1); + break; + } + case 60 /* LessThan */: { + addTraversal(types_1.SelectorType.Parent); + stripWhitespace(1); + break; + } + case 126 /* Tilde */: { + addTraversal(types_1.SelectorType.Sibling); + stripWhitespace(1); + break; + } + case 43 /* Plus */: { + addTraversal(types_1.SelectorType.Adjacent); + stripWhitespace(1); + break; + } + // Special attribute selectors: .class, #id + case 46 /* Period */: { + addSpecialAttribute("class", types_1.AttributeAction.Element); + break; + } + case 35 /* Hash */: { + addSpecialAttribute("id", types_1.AttributeAction.Equals); + break; + } + case 91 /* LeftSquareBracket */: { + stripWhitespace(1); + // Determine attribute name and namespace + var name_1 = void 0; + var namespace = null; + if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */) { + // Equivalent to no namespace + name_1 = getName(1); + } + else if (selector.startsWith("*|", selectorIndex)) { + namespace = "*"; + name_1 = getName(2); + } + else { + name_1 = getName(0); + if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ && + selector.charCodeAt(selectorIndex + 1) !== + 61 /* Equal */) { + namespace = name_1; + name_1 = getName(1); + } + } + stripWhitespace(0); + // Determine comparison operation + var action = types_1.AttributeAction.Exists; + var possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex)); + if (possibleAction) { + action = possibleAction; + if (selector.charCodeAt(selectorIndex + 1) !== + 61 /* Equal */) { + throw new Error("Expected `=`"); + } + stripWhitespace(2); + } + else if (selector.charCodeAt(selectorIndex) === 61 /* Equal */) { + action = types_1.AttributeAction.Equals; + stripWhitespace(1); + } + // Determine value + var value = ""; + var ignoreCase = null; + if (action !== "exists") { + if (isQuote(selector.charCodeAt(selectorIndex))) { + var quote = selector.charCodeAt(selectorIndex); + var sectionEnd = selectorIndex + 1; + while (sectionEnd < selector.length && + (selector.charCodeAt(sectionEnd) !== quote || + isEscaped(sectionEnd))) { + sectionEnd += 1; + } + if (selector.charCodeAt(sectionEnd) !== quote) { + throw new Error("Attribute value didn't end"); + } + value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd)); + selectorIndex = sectionEnd + 1; + } + else { + var valueStart = selectorIndex; + while (selectorIndex < selector.length && + ((!isWhitespace(selector.charCodeAt(selectorIndex)) && + selector.charCodeAt(selectorIndex) !== + 93 /* RightSquareBracket */) || + isEscaped(selectorIndex))) { + selectorIndex += 1; + } + value = unescapeCSS(selector.slice(valueStart, selectorIndex)); + } + stripWhitespace(0); + // See if we have a force ignore flag + var forceIgnore = selector.charCodeAt(selectorIndex) | 0x20; + // If the forceIgnore flag is set (either `i` or `s`), use that value + if (forceIgnore === 115 /* LowerS */) { + ignoreCase = false; + stripWhitespace(1); + } + else if (forceIgnore === 105 /* LowerI */) { + ignoreCase = true; + stripWhitespace(1); + } + } + if (selector.charCodeAt(selectorIndex) !== + 93 /* RightSquareBracket */) { + throw new Error("Attribute selector didn't terminate"); + } + selectorIndex += 1; + var attributeSelector = { + type: types_1.SelectorType.Attribute, + name: name_1, + action: action, + value: value, + namespace: namespace, + ignoreCase: ignoreCase, + }; + tokens.push(attributeSelector); + break; + } + case 58 /* Colon */: { + if (selector.charCodeAt(selectorIndex + 1) === 58 /* Colon */) { + tokens.push({ + type: types_1.SelectorType.PseudoElement, + name: getName(2).toLowerCase(), + data: selector.charCodeAt(selectorIndex) === + 40 /* LeftParenthesis */ + ? readValueWithParenthesis() + : null, + }); + continue; + } + var name_2 = getName(1).toLowerCase(); + var data = null; + if (selector.charCodeAt(selectorIndex) === + 40 /* LeftParenthesis */) { + if (unpackPseudos.has(name_2)) { + if (isQuote(selector.charCodeAt(selectorIndex + 1))) { + throw new Error("Pseudo-selector ".concat(name_2, " cannot be quoted")); + } + data = []; + selectorIndex = parseSelector(data, selector, selectorIndex + 1); + if (selector.charCodeAt(selectorIndex) !== + 41 /* RightParenthesis */) { + throw new Error("Missing closing parenthesis in :".concat(name_2, " (").concat(selector, ")")); + } + selectorIndex += 1; + } + else { + data = readValueWithParenthesis(); + if (stripQuotesFromPseudos.has(name_2)) { + var quot = data.charCodeAt(0); + if (quot === data.charCodeAt(data.length - 1) && + isQuote(quot)) { + data = data.slice(1, -1); + } + } + data = unescapeCSS(data); + } + } + tokens.push({ type: types_1.SelectorType.Pseudo, name: name_2, data: data }); + break; + } + case 44 /* Comma */: { + finalizeSubselector(); + tokens = []; + stripWhitespace(1); + break; + } + default: { + if (selector.startsWith("/*", selectorIndex)) { + var endIndex = selector.indexOf("*/", selectorIndex + 2); + if (endIndex < 0) { + throw new Error("Comment was not terminated"); + } + selectorIndex = endIndex + 2; + // Remove leading whitespace + if (tokens.length === 0) { + stripWhitespace(0); + } + break; + } + var namespace = null; + var name_3 = void 0; + if (firstChar === 42 /* Asterisk */) { + selectorIndex += 1; + name_3 = "*"; + } + else if (firstChar === 124 /* Pipe */) { + name_3 = ""; + if (selector.charCodeAt(selectorIndex + 1) === 124 /* Pipe */) { + addTraversal(types_1.SelectorType.ColumnCombinator); + stripWhitespace(2); + break; + } + } + else if (reName.test(selector.slice(selectorIndex))) { + name_3 = getName(0); + } + else { + break loop; + } + if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ && + selector.charCodeAt(selectorIndex + 1) !== 124 /* Pipe */) { + namespace = name_3; + if (selector.charCodeAt(selectorIndex + 1) === + 42 /* Asterisk */) { + name_3 = "*"; + selectorIndex += 2; + } + else { + name_3 = getName(1); + } + } + tokens.push(name_3 === "*" + ? { type: types_1.SelectorType.Universal, namespace: namespace } + : { type: types_1.SelectorType.Tag, name: name_3, namespace: namespace }); + } + } + } + finalizeSubselector(); + return selectorIndex; +} diff --git a/node_modules/css-what/lib/commonjs/stringify.d.ts b/node_modules/css-what/lib/commonjs/stringify.d.ts new file mode 100644 index 00000000..2883b0c3 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/stringify.d.ts @@ -0,0 +1,8 @@ +import { Selector } from "./types"; +/** + * Turns `selector` back into a string. + * + * @param selector Selector to stringify. + */ +export declare function stringify(selector: Selector[][]): string; +//# sourceMappingURL=stringify.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/stringify.d.ts.map b/node_modules/css-what/lib/commonjs/stringify.d.ts.map new file mode 100644 index 00000000..98f99ca7 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/stringify.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiC,MAAM,SAAS,CAAC;AA6BlE;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,CAIxD"} \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/stringify.js b/node_modules/css-what/lib/commonjs/stringify.js new file mode 100644 index 00000000..158b180a --- /dev/null +++ b/node_modules/css-what/lib/commonjs/stringify.js @@ -0,0 +1,138 @@ +"use strict"; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.stringify = void 0; +var types_1 = require("./types"); +var attribValChars = ["\\", '"']; +var pseudoValChars = __spreadArray(__spreadArray([], attribValChars, true), ["(", ")"], false); +var charsToEscapeInAttributeValue = new Set(attribValChars.map(function (c) { return c.charCodeAt(0); })); +var charsToEscapeInPseudoValue = new Set(pseudoValChars.map(function (c) { return c.charCodeAt(0); })); +var charsToEscapeInName = new Set(__spreadArray(__spreadArray([], pseudoValChars, true), [ + "~", + "^", + "$", + "*", + "+", + "!", + "|", + ":", + "[", + "]", + " ", + ".", +], false).map(function (c) { return c.charCodeAt(0); })); +/** + * Turns `selector` back into a string. + * + * @param selector Selector to stringify. + */ +function stringify(selector) { + return selector + .map(function (token) { return token.map(stringifyToken).join(""); }) + .join(", "); +} +exports.stringify = stringify; +function stringifyToken(token, index, arr) { + switch (token.type) { + // Simple types + case types_1.SelectorType.Child: + return index === 0 ? "> " : " > "; + case types_1.SelectorType.Parent: + return index === 0 ? "< " : " < "; + case types_1.SelectorType.Sibling: + return index === 0 ? "~ " : " ~ "; + case types_1.SelectorType.Adjacent: + return index === 0 ? "+ " : " + "; + case types_1.SelectorType.Descendant: + return " "; + case types_1.SelectorType.ColumnCombinator: + return index === 0 ? "|| " : " || "; + case types_1.SelectorType.Universal: + // Return an empty string if the selector isn't needed. + return token.namespace === "*" && + index + 1 < arr.length && + "name" in arr[index + 1] + ? "" + : "".concat(getNamespace(token.namespace), "*"); + case types_1.SelectorType.Tag: + return getNamespacedName(token); + case types_1.SelectorType.PseudoElement: + return "::".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null + ? "" + : "(".concat(escapeName(token.data, charsToEscapeInPseudoValue), ")")); + case types_1.SelectorType.Pseudo: + return ":".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null + ? "" + : "(".concat(typeof token.data === "string" + ? escapeName(token.data, charsToEscapeInPseudoValue) + : stringify(token.data), ")")); + case types_1.SelectorType.Attribute: { + if (token.name === "id" && + token.action === types_1.AttributeAction.Equals && + token.ignoreCase === "quirks" && + !token.namespace) { + return "#".concat(escapeName(token.value, charsToEscapeInName)); + } + if (token.name === "class" && + token.action === types_1.AttributeAction.Element && + token.ignoreCase === "quirks" && + !token.namespace) { + return ".".concat(escapeName(token.value, charsToEscapeInName)); + } + var name_1 = getNamespacedName(token); + if (token.action === types_1.AttributeAction.Exists) { + return "[".concat(name_1, "]"); + } + return "[".concat(name_1).concat(getActionValue(token.action), "=\"").concat(escapeName(token.value, charsToEscapeInAttributeValue), "\"").concat(token.ignoreCase === null ? "" : token.ignoreCase ? " i" : " s", "]"); + } + } +} +function getActionValue(action) { + switch (action) { + case types_1.AttributeAction.Equals: + return ""; + case types_1.AttributeAction.Element: + return "~"; + case types_1.AttributeAction.Start: + return "^"; + case types_1.AttributeAction.End: + return "$"; + case types_1.AttributeAction.Any: + return "*"; + case types_1.AttributeAction.Not: + return "!"; + case types_1.AttributeAction.Hyphen: + return "|"; + case types_1.AttributeAction.Exists: + throw new Error("Shouldn't be here"); + } +} +function getNamespacedName(token) { + return "".concat(getNamespace(token.namespace)).concat(escapeName(token.name, charsToEscapeInName)); +} +function getNamespace(namespace) { + return namespace !== null + ? "".concat(namespace === "*" + ? "*" + : escapeName(namespace, charsToEscapeInName), "|") + : ""; +} +function escapeName(str, charsToEscape) { + var lastIdx = 0; + var ret = ""; + for (var i = 0; i < str.length; i++) { + if (charsToEscape.has(str.charCodeAt(i))) { + ret += "".concat(str.slice(lastIdx, i), "\\").concat(str.charAt(i)); + lastIdx = i + 1; + } + } + return ret.length > 0 ? ret + str.slice(lastIdx) : str; +} diff --git a/node_modules/css-what/lib/commonjs/types.d.ts b/node_modules/css-what/lib/commonjs/types.d.ts new file mode 100644 index 00000000..6eedca46 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/types.d.ts @@ -0,0 +1,70 @@ +export declare type Selector = PseudoSelector | PseudoElement | AttributeSelector | TagSelector | UniversalSelector | Traversal; +export declare enum SelectorType { + Attribute = "attribute", + Pseudo = "pseudo", + PseudoElement = "pseudo-element", + Tag = "tag", + Universal = "universal", + Adjacent = "adjacent", + Child = "child", + Descendant = "descendant", + Parent = "parent", + Sibling = "sibling", + ColumnCombinator = "column-combinator" +} +/** + * Modes for ignore case. + * + * This could be updated to an enum, and the object is + * the current stand-in that will allow code to be updated + * without big changes. + */ +export declare const IgnoreCaseMode: { + readonly Unknown: null; + readonly QuirksMode: "quirks"; + readonly IgnoreCase: true; + readonly CaseSensitive: false; +}; +export interface AttributeSelector { + type: SelectorType.Attribute; + name: string; + action: AttributeAction; + value: string; + ignoreCase: "quirks" | boolean | null; + namespace: string | null; +} +export declare type DataType = Selector[][] | null | string; +export interface PseudoSelector { + type: SelectorType.Pseudo; + name: string; + data: DataType; +} +export interface PseudoElement { + type: SelectorType.PseudoElement; + name: string; + data: string | null; +} +export interface TagSelector { + type: SelectorType.Tag; + name: string; + namespace: string | null; +} +export interface UniversalSelector { + type: SelectorType.Universal; + namespace: string | null; +} +export interface Traversal { + type: TraversalType; +} +export declare enum AttributeAction { + Any = "any", + Element = "element", + End = "end", + Equals = "equals", + Exists = "exists", + Hyphen = "hyphen", + Not = "not", + Start = "start" +} +export declare type TraversalType = SelectorType.Adjacent | SelectorType.Child | SelectorType.Descendant | SelectorType.Parent | SelectorType.Sibling | SelectorType.ColumnCombinator; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/types.d.ts.map b/node_modules/css-what/lib/commonjs/types.d.ts.map new file mode 100644 index 00000000..5759e961 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ,GACd,cAAc,GACd,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,iBAAiB,GACjB,SAAS,CAAC;AAEhB,oBAAY,YAAY;IACpB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,aAAa,mBAAmB;IAChC,GAAG,QAAQ;IACX,SAAS,cAAc;IAGvB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,gBAAgB,sBAAsB;CACzC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,oBAAY,QAAQ,GAAG,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,aAAa,CAAC;CACvB;AAED,oBAAY,eAAe;IACvB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,oBAAY,aAAa,GACnB,YAAY,CAAC,QAAQ,GACrB,YAAY,CAAC,KAAK,GAClB,YAAY,CAAC,UAAU,GACvB,YAAY,CAAC,MAAM,GACnB,YAAY,CAAC,OAAO,GACpB,YAAY,CAAC,gBAAgB,CAAC"} \ No newline at end of file diff --git a/node_modules/css-what/lib/commonjs/types.js b/node_modules/css-what/lib/commonjs/types.js new file mode 100644 index 00000000..9ad74672 --- /dev/null +++ b/node_modules/css-what/lib/commonjs/types.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AttributeAction = exports.IgnoreCaseMode = exports.SelectorType = void 0; +var SelectorType; +(function (SelectorType) { + SelectorType["Attribute"] = "attribute"; + SelectorType["Pseudo"] = "pseudo"; + SelectorType["PseudoElement"] = "pseudo-element"; + SelectorType["Tag"] = "tag"; + SelectorType["Universal"] = "universal"; + // Traversals + SelectorType["Adjacent"] = "adjacent"; + SelectorType["Child"] = "child"; + SelectorType["Descendant"] = "descendant"; + SelectorType["Parent"] = "parent"; + SelectorType["Sibling"] = "sibling"; + SelectorType["ColumnCombinator"] = "column-combinator"; +})(SelectorType = exports.SelectorType || (exports.SelectorType = {})); +/** + * Modes for ignore case. + * + * This could be updated to an enum, and the object is + * the current stand-in that will allow code to be updated + * without big changes. + */ +exports.IgnoreCaseMode = { + Unknown: null, + QuirksMode: "quirks", + IgnoreCase: true, + CaseSensitive: false, +}; +var AttributeAction; +(function (AttributeAction) { + AttributeAction["Any"] = "any"; + AttributeAction["Element"] = "element"; + AttributeAction["End"] = "end"; + AttributeAction["Equals"] = "equals"; + AttributeAction["Exists"] = "exists"; + AttributeAction["Hyphen"] = "hyphen"; + AttributeAction["Not"] = "not"; + AttributeAction["Start"] = "start"; +})(AttributeAction = exports.AttributeAction || (exports.AttributeAction = {})); diff --git a/node_modules/css-what/lib/es/index.d.ts b/node_modules/css-what/lib/es/index.d.ts new file mode 100644 index 00000000..ee9d66e6 --- /dev/null +++ b/node_modules/css-what/lib/es/index.d.ts @@ -0,0 +1,4 @@ +export * from "./types"; +export { isTraversal, parse } from "./parse"; +export { stringify } from "./stringify"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/es/index.d.ts.map b/node_modules/css-what/lib/es/index.d.ts.map new file mode 100644 index 00000000..8a428b61 --- /dev/null +++ b/node_modules/css-what/lib/es/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"} \ No newline at end of file diff --git a/node_modules/css-what/lib/es/index.js b/node_modules/css-what/lib/es/index.js new file mode 100644 index 00000000..1cf4a531 --- /dev/null +++ b/node_modules/css-what/lib/es/index.js @@ -0,0 +1,3 @@ +export * from "./types"; +export { isTraversal, parse } from "./parse"; +export { stringify } from "./stringify"; diff --git a/node_modules/css-what/lib/es/parse.d.ts b/node_modules/css-what/lib/es/parse.d.ts new file mode 100644 index 00000000..1d6e3a21 --- /dev/null +++ b/node_modules/css-what/lib/es/parse.d.ts @@ -0,0 +1,20 @@ +import { Selector, Traversal } from "./types"; +/** + * Checks whether a specific selector is a traversal. + * This is useful eg. in swapping the order of elements that + * are not traversals. + * + * @param selector Selector to check. + */ +export declare function isTraversal(selector: Selector): selector is Traversal; +/** + * Parses `selector`, optionally with the passed `options`. + * + * @param selector Selector to parse. + * @param options Options for parsing. + * @returns Returns a two-dimensional array. + * The first dimension represents selectors separated by commas (eg. `sub1, sub2`), + * the second contains the relevant tokens for that selector. + */ +export declare function parse(selector: string): Selector[][]; +//# sourceMappingURL=parse.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/es/parse.d.ts.map b/node_modules/css-what/lib/es/parse.d.ts.map new file mode 100644 index 00000000..e4a5b051 --- /dev/null +++ b/node_modules/css-what/lib/es/parse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EAGR,SAAS,EAIZ,MAAM,SAAS,CAAC;AA6DjB;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAAI,SAAS,CAYrE;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,CAUpD"} \ No newline at end of file diff --git a/node_modules/css-what/lib/es/parse.js b/node_modules/css-what/lib/es/parse.js new file mode 100644 index 00000000..fe6ea9a4 --- /dev/null +++ b/node_modules/css-what/lib/es/parse.js @@ -0,0 +1,420 @@ +import { SelectorType, AttributeAction, } from "./types"; +const reName = /^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/; +const reEscape = /\\([\da-f]{1,6}\s?|(\s)|.)/gi; +const actionTypes = new Map([ + [126 /* Tilde */, AttributeAction.Element], + [94 /* Circumflex */, AttributeAction.Start], + [36 /* Dollar */, AttributeAction.End], + [42 /* Asterisk */, AttributeAction.Any], + [33 /* ExclamationMark */, AttributeAction.Not], + [124 /* Pipe */, AttributeAction.Hyphen], +]); +// Pseudos, whose data property is parsed as well. +const unpackPseudos = new Set([ + "has", + "not", + "matches", + "is", + "where", + "host", + "host-context", +]); +/** + * Checks whether a specific selector is a traversal. + * This is useful eg. in swapping the order of elements that + * are not traversals. + * + * @param selector Selector to check. + */ +export function isTraversal(selector) { + switch (selector.type) { + case SelectorType.Adjacent: + case SelectorType.Child: + case SelectorType.Descendant: + case SelectorType.Parent: + case SelectorType.Sibling: + case SelectorType.ColumnCombinator: + return true; + default: + return false; + } +} +const stripQuotesFromPseudos = new Set(["contains", "icontains"]); +// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152 +function funescape(_, escaped, escapedWhitespace) { + const high = parseInt(escaped, 16) - 0x10000; + // NaN means non-codepoint + return high !== high || escapedWhitespace + ? escaped + : high < 0 + ? // BMP codepoint + String.fromCharCode(high + 0x10000) + : // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00); +} +function unescapeCSS(str) { + return str.replace(reEscape, funescape); +} +function isQuote(c) { + return c === 39 /* SingleQuote */ || c === 34 /* DoubleQuote */; +} +function isWhitespace(c) { + return (c === 32 /* Space */ || + c === 9 /* Tab */ || + c === 10 /* NewLine */ || + c === 12 /* FormFeed */ || + c === 13 /* CarriageReturn */); +} +/** + * Parses `selector`, optionally with the passed `options`. + * + * @param selector Selector to parse. + * @param options Options for parsing. + * @returns Returns a two-dimensional array. + * The first dimension represents selectors separated by commas (eg. `sub1, sub2`), + * the second contains the relevant tokens for that selector. + */ +export function parse(selector) { + const subselects = []; + const endIndex = parseSelector(subselects, `${selector}`, 0); + if (endIndex < selector.length) { + throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`); + } + return subselects; +} +function parseSelector(subselects, selector, selectorIndex) { + let tokens = []; + function getName(offset) { + const match = selector.slice(selectorIndex + offset).match(reName); + if (!match) { + throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`); + } + const [name] = match; + selectorIndex += offset + name.length; + return unescapeCSS(name); + } + function stripWhitespace(offset) { + selectorIndex += offset; + while (selectorIndex < selector.length && + isWhitespace(selector.charCodeAt(selectorIndex))) { + selectorIndex++; + } + } + function readValueWithParenthesis() { + selectorIndex += 1; + const start = selectorIndex; + let counter = 1; + for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) { + if (selector.charCodeAt(selectorIndex) === + 40 /* LeftParenthesis */ && + !isEscaped(selectorIndex)) { + counter++; + } + else if (selector.charCodeAt(selectorIndex) === + 41 /* RightParenthesis */ && + !isEscaped(selectorIndex)) { + counter--; + } + } + if (counter) { + throw new Error("Parenthesis not matched"); + } + return unescapeCSS(selector.slice(start, selectorIndex - 1)); + } + function isEscaped(pos) { + let slashCount = 0; + while (selector.charCodeAt(--pos) === 92 /* BackSlash */) + slashCount++; + return (slashCount & 1) === 1; + } + function ensureNotTraversal() { + if (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) { + throw new Error("Did not expect successive traversals."); + } + } + function addTraversal(type) { + if (tokens.length > 0 && + tokens[tokens.length - 1].type === SelectorType.Descendant) { + tokens[tokens.length - 1].type = type; + return; + } + ensureNotTraversal(); + tokens.push({ type }); + } + function addSpecialAttribute(name, action) { + tokens.push({ + type: SelectorType.Attribute, + name, + action, + value: getName(1), + namespace: null, + ignoreCase: "quirks", + }); + } + /** + * We have finished parsing the current part of the selector. + * + * Remove descendant tokens at the end if they exist, + * and return the last index, so that parsing can be + * picked up from here. + */ + function finalizeSubselector() { + if (tokens.length && + tokens[tokens.length - 1].type === SelectorType.Descendant) { + tokens.pop(); + } + if (tokens.length === 0) { + throw new Error("Empty sub-selector"); + } + subselects.push(tokens); + } + stripWhitespace(0); + if (selector.length === selectorIndex) { + return selectorIndex; + } + loop: while (selectorIndex < selector.length) { + const firstChar = selector.charCodeAt(selectorIndex); + switch (firstChar) { + // Whitespace + case 32 /* Space */: + case 9 /* Tab */: + case 10 /* NewLine */: + case 12 /* FormFeed */: + case 13 /* CarriageReturn */: { + if (tokens.length === 0 || + tokens[0].type !== SelectorType.Descendant) { + ensureNotTraversal(); + tokens.push({ type: SelectorType.Descendant }); + } + stripWhitespace(1); + break; + } + // Traversals + case 62 /* GreaterThan */: { + addTraversal(SelectorType.Child); + stripWhitespace(1); + break; + } + case 60 /* LessThan */: { + addTraversal(SelectorType.Parent); + stripWhitespace(1); + break; + } + case 126 /* Tilde */: { + addTraversal(SelectorType.Sibling); + stripWhitespace(1); + break; + } + case 43 /* Plus */: { + addTraversal(SelectorType.Adjacent); + stripWhitespace(1); + break; + } + // Special attribute selectors: .class, #id + case 46 /* Period */: { + addSpecialAttribute("class", AttributeAction.Element); + break; + } + case 35 /* Hash */: { + addSpecialAttribute("id", AttributeAction.Equals); + break; + } + case 91 /* LeftSquareBracket */: { + stripWhitespace(1); + // Determine attribute name and namespace + let name; + let namespace = null; + if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */) { + // Equivalent to no namespace + name = getName(1); + } + else if (selector.startsWith("*|", selectorIndex)) { + namespace = "*"; + name = getName(2); + } + else { + name = getName(0); + if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ && + selector.charCodeAt(selectorIndex + 1) !== + 61 /* Equal */) { + namespace = name; + name = getName(1); + } + } + stripWhitespace(0); + // Determine comparison operation + let action = AttributeAction.Exists; + const possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex)); + if (possibleAction) { + action = possibleAction; + if (selector.charCodeAt(selectorIndex + 1) !== + 61 /* Equal */) { + throw new Error("Expected `=`"); + } + stripWhitespace(2); + } + else if (selector.charCodeAt(selectorIndex) === 61 /* Equal */) { + action = AttributeAction.Equals; + stripWhitespace(1); + } + // Determine value + let value = ""; + let ignoreCase = null; + if (action !== "exists") { + if (isQuote(selector.charCodeAt(selectorIndex))) { + const quote = selector.charCodeAt(selectorIndex); + let sectionEnd = selectorIndex + 1; + while (sectionEnd < selector.length && + (selector.charCodeAt(sectionEnd) !== quote || + isEscaped(sectionEnd))) { + sectionEnd += 1; + } + if (selector.charCodeAt(sectionEnd) !== quote) { + throw new Error("Attribute value didn't end"); + } + value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd)); + selectorIndex = sectionEnd + 1; + } + else { + const valueStart = selectorIndex; + while (selectorIndex < selector.length && + ((!isWhitespace(selector.charCodeAt(selectorIndex)) && + selector.charCodeAt(selectorIndex) !== + 93 /* RightSquareBracket */) || + isEscaped(selectorIndex))) { + selectorIndex += 1; + } + value = unescapeCSS(selector.slice(valueStart, selectorIndex)); + } + stripWhitespace(0); + // See if we have a force ignore flag + const forceIgnore = selector.charCodeAt(selectorIndex) | 0x20; + // If the forceIgnore flag is set (either `i` or `s`), use that value + if (forceIgnore === 115 /* LowerS */) { + ignoreCase = false; + stripWhitespace(1); + } + else if (forceIgnore === 105 /* LowerI */) { + ignoreCase = true; + stripWhitespace(1); + } + } + if (selector.charCodeAt(selectorIndex) !== + 93 /* RightSquareBracket */) { + throw new Error("Attribute selector didn't terminate"); + } + selectorIndex += 1; + const attributeSelector = { + type: SelectorType.Attribute, + name, + action, + value, + namespace, + ignoreCase, + }; + tokens.push(attributeSelector); + break; + } + case 58 /* Colon */: { + if (selector.charCodeAt(selectorIndex + 1) === 58 /* Colon */) { + tokens.push({ + type: SelectorType.PseudoElement, + name: getName(2).toLowerCase(), + data: selector.charCodeAt(selectorIndex) === + 40 /* LeftParenthesis */ + ? readValueWithParenthesis() + : null, + }); + continue; + } + const name = getName(1).toLowerCase(); + let data = null; + if (selector.charCodeAt(selectorIndex) === + 40 /* LeftParenthesis */) { + if (unpackPseudos.has(name)) { + if (isQuote(selector.charCodeAt(selectorIndex + 1))) { + throw new Error(`Pseudo-selector ${name} cannot be quoted`); + } + data = []; + selectorIndex = parseSelector(data, selector, selectorIndex + 1); + if (selector.charCodeAt(selectorIndex) !== + 41 /* RightParenthesis */) { + throw new Error(`Missing closing parenthesis in :${name} (${selector})`); + } + selectorIndex += 1; + } + else { + data = readValueWithParenthesis(); + if (stripQuotesFromPseudos.has(name)) { + const quot = data.charCodeAt(0); + if (quot === data.charCodeAt(data.length - 1) && + isQuote(quot)) { + data = data.slice(1, -1); + } + } + data = unescapeCSS(data); + } + } + tokens.push({ type: SelectorType.Pseudo, name, data }); + break; + } + case 44 /* Comma */: { + finalizeSubselector(); + tokens = []; + stripWhitespace(1); + break; + } + default: { + if (selector.startsWith("/*", selectorIndex)) { + const endIndex = selector.indexOf("*/", selectorIndex + 2); + if (endIndex < 0) { + throw new Error("Comment was not terminated"); + } + selectorIndex = endIndex + 2; + // Remove leading whitespace + if (tokens.length === 0) { + stripWhitespace(0); + } + break; + } + let namespace = null; + let name; + if (firstChar === 42 /* Asterisk */) { + selectorIndex += 1; + name = "*"; + } + else if (firstChar === 124 /* Pipe */) { + name = ""; + if (selector.charCodeAt(selectorIndex + 1) === 124 /* Pipe */) { + addTraversal(SelectorType.ColumnCombinator); + stripWhitespace(2); + break; + } + } + else if (reName.test(selector.slice(selectorIndex))) { + name = getName(0); + } + else { + break loop; + } + if (selector.charCodeAt(selectorIndex) === 124 /* Pipe */ && + selector.charCodeAt(selectorIndex + 1) !== 124 /* Pipe */) { + namespace = name; + if (selector.charCodeAt(selectorIndex + 1) === + 42 /* Asterisk */) { + name = "*"; + selectorIndex += 2; + } + else { + name = getName(1); + } + } + tokens.push(name === "*" + ? { type: SelectorType.Universal, namespace } + : { type: SelectorType.Tag, name, namespace }); + } + } + } + finalizeSubselector(); + return selectorIndex; +} diff --git a/node_modules/css-what/lib/es/stringify.d.ts b/node_modules/css-what/lib/es/stringify.d.ts new file mode 100644 index 00000000..2883b0c3 --- /dev/null +++ b/node_modules/css-what/lib/es/stringify.d.ts @@ -0,0 +1,8 @@ +import { Selector } from "./types"; +/** + * Turns `selector` back into a string. + * + * @param selector Selector to stringify. + */ +export declare function stringify(selector: Selector[][]): string; +//# sourceMappingURL=stringify.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/es/stringify.d.ts.map b/node_modules/css-what/lib/es/stringify.d.ts.map new file mode 100644 index 00000000..98f99ca7 --- /dev/null +++ b/node_modules/css-what/lib/es/stringify.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiC,MAAM,SAAS,CAAC;AA6BlE;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,CAIxD"} \ No newline at end of file diff --git a/node_modules/css-what/lib/es/stringify.js b/node_modules/css-what/lib/es/stringify.js new file mode 100644 index 00000000..5f3b8ef9 --- /dev/null +++ b/node_modules/css-what/lib/es/stringify.js @@ -0,0 +1,126 @@ +import { SelectorType, AttributeAction } from "./types"; +const attribValChars = ["\\", '"']; +const pseudoValChars = [...attribValChars, "(", ")"]; +const charsToEscapeInAttributeValue = new Set(attribValChars.map((c) => c.charCodeAt(0))); +const charsToEscapeInPseudoValue = new Set(pseudoValChars.map((c) => c.charCodeAt(0))); +const charsToEscapeInName = new Set([ + ...pseudoValChars, + "~", + "^", + "$", + "*", + "+", + "!", + "|", + ":", + "[", + "]", + " ", + ".", +].map((c) => c.charCodeAt(0))); +/** + * Turns `selector` back into a string. + * + * @param selector Selector to stringify. + */ +export function stringify(selector) { + return selector + .map((token) => token.map(stringifyToken).join("")) + .join(", "); +} +function stringifyToken(token, index, arr) { + switch (token.type) { + // Simple types + case SelectorType.Child: + return index === 0 ? "> " : " > "; + case SelectorType.Parent: + return index === 0 ? "< " : " < "; + case SelectorType.Sibling: + return index === 0 ? "~ " : " ~ "; + case SelectorType.Adjacent: + return index === 0 ? "+ " : " + "; + case SelectorType.Descendant: + return " "; + case SelectorType.ColumnCombinator: + return index === 0 ? "|| " : " || "; + case SelectorType.Universal: + // Return an empty string if the selector isn't needed. + return token.namespace === "*" && + index + 1 < arr.length && + "name" in arr[index + 1] + ? "" + : `${getNamespace(token.namespace)}*`; + case SelectorType.Tag: + return getNamespacedName(token); + case SelectorType.PseudoElement: + return `::${escapeName(token.name, charsToEscapeInName)}${token.data === null + ? "" + : `(${escapeName(token.data, charsToEscapeInPseudoValue)})`}`; + case SelectorType.Pseudo: + return `:${escapeName(token.name, charsToEscapeInName)}${token.data === null + ? "" + : `(${typeof token.data === "string" + ? escapeName(token.data, charsToEscapeInPseudoValue) + : stringify(token.data)})`}`; + case SelectorType.Attribute: { + if (token.name === "id" && + token.action === AttributeAction.Equals && + token.ignoreCase === "quirks" && + !token.namespace) { + return `#${escapeName(token.value, charsToEscapeInName)}`; + } + if (token.name === "class" && + token.action === AttributeAction.Element && + token.ignoreCase === "quirks" && + !token.namespace) { + return `.${escapeName(token.value, charsToEscapeInName)}`; + } + const name = getNamespacedName(token); + if (token.action === AttributeAction.Exists) { + return `[${name}]`; + } + return `[${name}${getActionValue(token.action)}="${escapeName(token.value, charsToEscapeInAttributeValue)}"${token.ignoreCase === null ? "" : token.ignoreCase ? " i" : " s"}]`; + } + } +} +function getActionValue(action) { + switch (action) { + case AttributeAction.Equals: + return ""; + case AttributeAction.Element: + return "~"; + case AttributeAction.Start: + return "^"; + case AttributeAction.End: + return "$"; + case AttributeAction.Any: + return "*"; + case AttributeAction.Not: + return "!"; + case AttributeAction.Hyphen: + return "|"; + case AttributeAction.Exists: + throw new Error("Shouldn't be here"); + } +} +function getNamespacedName(token) { + return `${getNamespace(token.namespace)}${escapeName(token.name, charsToEscapeInName)}`; +} +function getNamespace(namespace) { + return namespace !== null + ? `${namespace === "*" + ? "*" + : escapeName(namespace, charsToEscapeInName)}|` + : ""; +} +function escapeName(str, charsToEscape) { + let lastIdx = 0; + let ret = ""; + for (let i = 0; i < str.length; i++) { + if (charsToEscape.has(str.charCodeAt(i))) { + ret += `${str.slice(lastIdx, i)}\\${str.charAt(i)}`; + lastIdx = i + 1; + } + } + return ret.length > 0 ? ret + str.slice(lastIdx) : str; +} diff --git a/node_modules/css-what/lib/es/types.d.ts b/node_modules/css-what/lib/es/types.d.ts new file mode 100644 index 00000000..6eedca46 --- /dev/null +++ b/node_modules/css-what/lib/es/types.d.ts @@ -0,0 +1,70 @@ +export declare type Selector = PseudoSelector | PseudoElement | AttributeSelector | TagSelector | UniversalSelector | Traversal; +export declare enum SelectorType { + Attribute = "attribute", + Pseudo = "pseudo", + PseudoElement = "pseudo-element", + Tag = "tag", + Universal = "universal", + Adjacent = "adjacent", + Child = "child", + Descendant = "descendant", + Parent = "parent", + Sibling = "sibling", + ColumnCombinator = "column-combinator" +} +/** + * Modes for ignore case. + * + * This could be updated to an enum, and the object is + * the current stand-in that will allow code to be updated + * without big changes. + */ +export declare const IgnoreCaseMode: { + readonly Unknown: null; + readonly QuirksMode: "quirks"; + readonly IgnoreCase: true; + readonly CaseSensitive: false; +}; +export interface AttributeSelector { + type: SelectorType.Attribute; + name: string; + action: AttributeAction; + value: string; + ignoreCase: "quirks" | boolean | null; + namespace: string | null; +} +export declare type DataType = Selector[][] | null | string; +export interface PseudoSelector { + type: SelectorType.Pseudo; + name: string; + data: DataType; +} +export interface PseudoElement { + type: SelectorType.PseudoElement; + name: string; + data: string | null; +} +export interface TagSelector { + type: SelectorType.Tag; + name: string; + namespace: string | null; +} +export interface UniversalSelector { + type: SelectorType.Universal; + namespace: string | null; +} +export interface Traversal { + type: TraversalType; +} +export declare enum AttributeAction { + Any = "any", + Element = "element", + End = "end", + Equals = "equals", + Exists = "exists", + Hyphen = "hyphen", + Not = "not", + Start = "start" +} +export declare type TraversalType = SelectorType.Adjacent | SelectorType.Child | SelectorType.Descendant | SelectorType.Parent | SelectorType.Sibling | SelectorType.ColumnCombinator; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/css-what/lib/es/types.d.ts.map b/node_modules/css-what/lib/es/types.d.ts.map new file mode 100644 index 00000000..5759e961 --- /dev/null +++ b/node_modules/css-what/lib/es/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ,GACd,cAAc,GACd,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,iBAAiB,GACjB,SAAS,CAAC;AAEhB,oBAAY,YAAY;IACpB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,aAAa,mBAAmB;IAChC,GAAG,QAAQ;IACX,SAAS,cAAc;IAGvB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,gBAAgB,sBAAsB;CACzC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,oBAAY,QAAQ,GAAG,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,aAAa,CAAC;CACvB;AAED,oBAAY,eAAe;IACvB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,oBAAY,aAAa,GACnB,YAAY,CAAC,QAAQ,GACrB,YAAY,CAAC,KAAK,GAClB,YAAY,CAAC,UAAU,GACvB,YAAY,CAAC,MAAM,GACnB,YAAY,CAAC,OAAO,GACpB,YAAY,CAAC,gBAAgB,CAAC"} \ No newline at end of file diff --git a/node_modules/css-what/lib/es/types.js b/node_modules/css-what/lib/es/types.js new file mode 100644 index 00000000..a0a33d21 --- /dev/null +++ b/node_modules/css-what/lib/es/types.js @@ -0,0 +1,39 @@ +export var SelectorType; +(function (SelectorType) { + SelectorType["Attribute"] = "attribute"; + SelectorType["Pseudo"] = "pseudo"; + SelectorType["PseudoElement"] = "pseudo-element"; + SelectorType["Tag"] = "tag"; + SelectorType["Universal"] = "universal"; + // Traversals + SelectorType["Adjacent"] = "adjacent"; + SelectorType["Child"] = "child"; + SelectorType["Descendant"] = "descendant"; + SelectorType["Parent"] = "parent"; + SelectorType["Sibling"] = "sibling"; + SelectorType["ColumnCombinator"] = "column-combinator"; +})(SelectorType || (SelectorType = {})); +/** + * Modes for ignore case. + * + * This could be updated to an enum, and the object is + * the current stand-in that will allow code to be updated + * without big changes. + */ +export const IgnoreCaseMode = { + Unknown: null, + QuirksMode: "quirks", + IgnoreCase: true, + CaseSensitive: false, +}; +export var AttributeAction; +(function (AttributeAction) { + AttributeAction["Any"] = "any"; + AttributeAction["Element"] = "element"; + AttributeAction["End"] = "end"; + AttributeAction["Equals"] = "equals"; + AttributeAction["Exists"] = "exists"; + AttributeAction["Hyphen"] = "hyphen"; + AttributeAction["Not"] = "not"; + AttributeAction["Start"] = "start"; +})(AttributeAction || (AttributeAction = {})); diff --git a/node_modules/css-what/package.json b/node_modules/css-what/package.json new file mode 100644 index 00000000..8aa2c44a --- /dev/null +++ b/node_modules/css-what/package.json @@ -0,0 +1,59 @@ +{ + "author": "Felix Böhm (http://feedic.com)", + "name": "css-what", + "description": "a CSS selector parser", + "version": "6.1.0", + "funding": { + "url": "https://github.com/sponsors/fb55" + }, + "repository": { + "type": "git", + "url": "https://github.com/fb55/css-what" + }, + "main": "lib/commonjs/index.js", + "module": "lib/es/index.js", + "types": "lib/es/index.d.ts", + "sideEffects": false, + "files": [ + "lib/**/*" + ], + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint src", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "tsc && tsc -p tsconfig.es.json", + "prepare": "npm run build" + }, + "devDependencies": { + "@types/jest": "^27.4.1", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-node": "^11.1.0", + "jest": "^27.5.1", + "prettier": "^2.6.1", + "ts-jest": "^27.1.4", + "typescript": "^4.6.3" + }, + "engines": { + "node": ">= 6" + }, + "license": "BSD-2-Clause", + "jest": { + "preset": "ts-jest", + "roots": [ + "src" + ] + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/css-what/readme.md b/node_modules/css-what/readme.md new file mode 100644 index 00000000..0c4a198c --- /dev/null +++ b/node_modules/css-what/readme.md @@ -0,0 +1,69 @@ +# css-what + +[![Build Status](https://img.shields.io/github/workflow/status/fb55/css-what/Node.js%20CI/master)](https://github.com/fb55/css-what/actions/workflows/nodejs-test.yml) +[![Coverage](https://img.shields.io/coveralls/github/fb55/css-what/master)](https://coveralls.io/github/fb55/css-what?branch=master) + +A CSS selector parser. + +## Example + +```js +import * as CSSwhat from "css-what"; + +CSSwhat.parse("foo[bar]:baz") + +~> [ + [ + { type: "tag", name: "foo" }, + { + type: "attribute", + name: "bar", + action: "exists", + value: "", + ignoreCase: null + }, + { type: "pseudo", name: "baz", data: null } + ] +] +``` + +## API + +**`CSSwhat.parse(selector)` - Parses `selector`.** + +The function returns a two-dimensional array. The first array represents selectors separated by commas (eg. `sub1, sub2`), the second contains the relevant tokens for that selector. Possible token types are: + +| name | properties | example | output | +| ------------------- | --------------------------------------- | ------------- | ---------------------------------------------------------------------------------------- | +| `tag` | `name` | `div` | `{ type: 'tag', name: 'div' }` | +| `universal` | - | `*` | `{ type: 'universal' }` | +| `pseudo` | `name`, `data` | `:name(data)` | `{ type: 'pseudo', name: 'name', data: 'data' }` | +| `pseudo` | `name`, `data` | `:name` | `{ type: 'pseudo', name: 'name', data: null }` | +| `pseudo-element` | `name` | `::name` | `{ type: 'pseudo-element', name: 'name' }` | +| `attribute` | `name`, `action`, `value`, `ignoreCase` | `[attr]` | `{ type: 'attribute', name: 'attr', action: 'exists', value: '', ignoreCase: false }` | +| `attribute` | `name`, `action`, `value`, `ignoreCase` | `[attr=val]` | `{ type: 'attribute', name: 'attr', action: 'equals', value: 'val', ignoreCase: false }` | +| `attribute` | `name`, `action`, `value`, `ignoreCase` | `[attr^=val]` | `{ type: 'attribute', name: 'attr', action: 'start', value: 'val', ignoreCase: false }` | +| `attribute` | `name`, `action`, `value`, `ignoreCase` | `[attr$=val]` | `{ type: 'attribute', name: 'attr', action: 'end', value: 'val', ignoreCase: false }` | +| `child` | - | `>` | `{ type: 'child' }` | +| `parent` | - | `<` | `{ type: 'parent' }` | +| `sibling` | - | `~` | `{ type: 'sibling' }` | +| `adjacent` | - | `+` | `{ type: 'adjacent' }` | +| `descendant` | - | | `{ type: 'descendant' }` | +| `column-combinator` | - | `\|\|` | `{ type: 'column-combinator' }` | + +**`CSSwhat.stringify(selector)` - Turns `selector` back into a string.** + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## `css-what` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `css-what` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-css-what?utm_source=npm-css-what&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/dom-serializer/LICENSE b/node_modules/dom-serializer/LICENSE new file mode 100644 index 00000000..3d241a8d --- /dev/null +++ b/node_modules/dom-serializer/LICENSE @@ -0,0 +1,11 @@ +License + +(The MIT License) + +Copyright (c) 2014 The cheeriojs contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/dom-serializer/README.md b/node_modules/dom-serializer/README.md new file mode 100644 index 00000000..0a301ab3 --- /dev/null +++ b/node_modules/dom-serializer/README.md @@ -0,0 +1,109 @@ +# dom-serializer [![Build Status](https://travis-ci.com/cheeriojs/dom-serializer.svg?branch=master)](https://travis-ci.com/cheeriojs/dom-serializer) + +Renders a [domhandler](https://github.com/fb55/domhandler) DOM node or an array of domhandler DOM nodes to a string. + +```js +import render from "dom-serializer"; + +// OR + +const render = require("dom-serializer").default; +``` + +# API + +## `render` + +▸ **render**(`node`: Node \| Node[], `options?`: [_Options_](#Options)): _string_ + +Renders a DOM node or an array of DOM nodes to a string. + +Can be thought of as the equivalent of the `outerHTML` of the passed node(s). + +#### Parameters: + +| Name | Type | Default value | Description | +| :-------- | :--------------------------------- | :------------ | :----------------------------- | +| `node` | Node \| Node[] | - | Node to be rendered. | +| `options` | [_DomSerializerOptions_](#Options) | {} | Changes serialization behavior | + +**Returns:** _string_ + +## Options + +### `encodeEntities` + +• `Optional` **decodeEntities**: _boolean | "utf8"_ + +Encode characters that are either reserved in HTML or XML. + +If `xmlMode` is `true` or the value not `'utf8'`, characters outside of the utf8 range will be encoded as well. + +**`default`** `decodeEntities` + +--- + +### `decodeEntities` + +• `Optional` **decodeEntities**: _boolean_ + +Option inherited from parsing; will be used as the default value for `encodeEntities`. + +**`default`** true + +--- + +### `emptyAttrs` + +• `Optional` **emptyAttrs**: _boolean_ + +Print an empty attribute's value. + +**`default`** xmlMode + +**`example`** With emptyAttrs: false: <input checked> + +**`example`** With emptyAttrs: true: <input checked=""> + +--- + +### `selfClosingTags` + +• `Optional` **selfClosingTags**: _boolean_ + +Print self-closing tags for tags without contents. + +**`default`** xmlMode + +**`example`** With selfClosingTags: false: <foo></foo> + +**`example`** With selfClosingTags: true: <foo /> + +--- + +### `xmlMode` + +• `Optional` **xmlMode**: _boolean_ \| _"foreign"_ + +Treat the input as an XML document; enables the `emptyAttrs` and `selfClosingTags` options. + +If the value is `"foreign"`, it will try to correct mixed-case attribute names. + +**`default`** false + +--- + +## Ecosystem + +| Name | Description | +| ------------------------------------------------------------- | ------------------------------------------------------- | +| [htmlparser2](https://github.com/fb55/htmlparser2) | Fast & forgiving HTML/XML parser | +| [domhandler](https://github.com/fb55/domhandler) | Handler for htmlparser2 that turns documents into a DOM | +| [domutils](https://github.com/fb55/domutils) | Utilities for working with domhandler's DOM | +| [css-select](https://github.com/fb55/css-select) | CSS selector engine, compatible with domhandler's DOM | +| [cheerio](https://github.com/cheeriojs/cheerio) | The jQuery API for domhandler's DOM | +| [dom-serializer](https://github.com/cheeriojs/dom-serializer) | Serializer for domhandler's DOM | + +--- + +LICENSE: MIT diff --git a/node_modules/dom-serializer/lib/esm/foreignNames.d.ts b/node_modules/dom-serializer/lib/esm/foreignNames.d.ts new file mode 100644 index 00000000..a8b09380 --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/foreignNames.d.ts @@ -0,0 +1,3 @@ +export declare const elementNames: Map; +export declare const attributeNames: Map; +//# sourceMappingURL=foreignNames.d.ts.map \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/esm/foreignNames.d.ts.map b/node_modules/dom-serializer/lib/esm/foreignNames.d.ts.map new file mode 100644 index 00000000..f471fd0c --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/foreignNames.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"foreignNames.d.ts","sourceRoot":"","sources":["../../src/foreignNames.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qBAwCxB,CAAC;AACF,eAAO,MAAM,cAAc,qBA8D1B,CAAC"} \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/esm/foreignNames.js b/node_modules/dom-serializer/lib/esm/foreignNames.js new file mode 100644 index 00000000..ebd62728 --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/foreignNames.js @@ -0,0 +1,100 @@ +export const elementNames = new Map([ + "altGlyph", + "altGlyphDef", + "altGlyphItem", + "animateColor", + "animateMotion", + "animateTransform", + "clipPath", + "feBlend", + "feColorMatrix", + "feComponentTransfer", + "feComposite", + "feConvolveMatrix", + "feDiffuseLighting", + "feDisplacementMap", + "feDistantLight", + "feDropShadow", + "feFlood", + "feFuncA", + "feFuncB", + "feFuncG", + "feFuncR", + "feGaussianBlur", + "feImage", + "feMerge", + "feMergeNode", + "feMorphology", + "feOffset", + "fePointLight", + "feSpecularLighting", + "feSpotLight", + "feTile", + "feTurbulence", + "foreignObject", + "glyphRef", + "linearGradient", + "radialGradient", + "textPath", +].map((val) => [val.toLowerCase(), val])); +export const attributeNames = new Map([ + "definitionURL", + "attributeName", + "attributeType", + "baseFrequency", + "baseProfile", + "calcMode", + "clipPathUnits", + "diffuseConstant", + "edgeMode", + "filterUnits", + "glyphRef", + "gradientTransform", + "gradientUnits", + "kernelMatrix", + "kernelUnitLength", + "keyPoints", + "keySplines", + "keyTimes", + "lengthAdjust", + "limitingConeAngle", + "markerHeight", + "markerUnits", + "markerWidth", + "maskContentUnits", + "maskUnits", + "numOctaves", + "pathLength", + "patternContentUnits", + "patternTransform", + "patternUnits", + "pointsAtX", + "pointsAtY", + "pointsAtZ", + "preserveAlpha", + "preserveAspectRatio", + "primitiveUnits", + "refX", + "refY", + "repeatCount", + "repeatDur", + "requiredExtensions", + "requiredFeatures", + "specularConstant", + "specularExponent", + "spreadMethod", + "startOffset", + "stdDeviation", + "stitchTiles", + "surfaceScale", + "systemLanguage", + "tableValues", + "targetX", + "targetY", + "textLength", + "viewBox", + "viewTarget", + "xChannelSelector", + "yChannelSelector", + "zoomAndPan", +].map((val) => [val.toLowerCase(), val])); diff --git a/node_modules/dom-serializer/lib/esm/index.d.ts b/node_modules/dom-serializer/lib/esm/index.d.ts new file mode 100644 index 00000000..cdf04f06 --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/index.d.ts @@ -0,0 +1,52 @@ +import type { AnyNode } from "domhandler"; +export interface DomSerializerOptions { + /** + * Print an empty attribute's value. + * + * @default xmlMode + * @example With emptyAttrs: false: <input checked> + * @example With emptyAttrs: true: <input checked=""> + */ + emptyAttrs?: boolean; + /** + * Print self-closing tags for tags without contents. + * + * @default xmlMode + * @example With selfClosingTags: false: <foo></foo> + * @example With selfClosingTags: true: <foo /> + */ + selfClosingTags?: boolean; + /** + * Treat the input as an XML document; enables the `emptyAttrs` and `selfClosingTags` options. + * + * If the value is `"foreign"`, it will try to correct mixed-case attribute names. + * + * @default false + */ + xmlMode?: boolean | "foreign"; + /** + * Encode characters that are either reserved in HTML or XML. + * + * If `xmlMode` is `true` or the value not `'utf8'`, characters outside of the utf8 range will be encoded as well. + * + * @default `decodeEntities` + */ + encodeEntities?: boolean | "utf8"; + /** + * Option inherited from parsing; will be used as the default value for `encodeEntities`. + * + * @default true + */ + decodeEntities?: boolean; +} +/** + * Renders a DOM node or an array of DOM nodes to a string. + * + * Can be thought of as the equivalent of the `outerHTML` of the passed node(s). + * + * @param node Node to be rendered. + * @param options Changes serialization behavior + */ +export declare function render(node: AnyNode | ArrayLike, options?: DomSerializerOptions): string; +export default render; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/esm/index.d.ts.map b/node_modules/dom-serializer/lib/esm/index.d.ts.map new file mode 100644 index 00000000..0476a46f --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EAMR,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA4ED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,EAClC,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAUR;AAED,eAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/esm/index.js b/node_modules/dom-serializer/lib/esm/index.js new file mode 100644 index 00000000..1ccc9d54 --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/index.js @@ -0,0 +1,190 @@ +/* + * Module dependencies + */ +import * as ElementType from "domelementtype"; +import { encodeXML, escapeAttribute, escapeText } from "entities"; +/** + * Mixed-case SVG and MathML tags & attributes + * recognized by the HTML parser. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign + */ +import { elementNames, attributeNames } from "./foreignNames.js"; +const unencodedElements = new Set([ + "style", + "script", + "xmp", + "iframe", + "noembed", + "noframes", + "plaintext", + "noscript", +]); +function replaceQuotes(value) { + return value.replace(/"/g, """); +} +/** + * Format attributes + */ +function formatAttributes(attributes, opts) { + var _a; + if (!attributes) + return; + const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false + ? replaceQuotes + : opts.xmlMode || opts.encodeEntities !== "utf8" + ? encodeXML + : escapeAttribute; + return Object.keys(attributes) + .map((key) => { + var _a, _b; + const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : ""; + if (opts.xmlMode === "foreign") { + /* Fix up mixed-case attribute names */ + key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key; + } + if (!opts.emptyAttrs && !opts.xmlMode && value === "") { + return key; + } + return `${key}="${encode(value)}"`; + }) + .join(" "); +} +/** + * Self-enclosing tags + */ +const singleTag = new Set([ + "area", + "base", + "basefont", + "br", + "col", + "command", + "embed", + "frame", + "hr", + "img", + "input", + "isindex", + "keygen", + "link", + "meta", + "param", + "source", + "track", + "wbr", +]); +/** + * Renders a DOM node or an array of DOM nodes to a string. + * + * Can be thought of as the equivalent of the `outerHTML` of the passed node(s). + * + * @param node Node to be rendered. + * @param options Changes serialization behavior + */ +export function render(node, options = {}) { + const nodes = "length" in node ? node : [node]; + let output = ""; + for (let i = 0; i < nodes.length; i++) { + output += renderNode(nodes[i], options); + } + return output; +} +export default render; +function renderNode(node, options) { + switch (node.type) { + case ElementType.Root: + return render(node.children, options); + // @ts-expect-error We don't use `Doctype` yet + case ElementType.Doctype: + case ElementType.Directive: + return renderDirective(node); + case ElementType.Comment: + return renderComment(node); + case ElementType.CDATA: + return renderCdata(node); + case ElementType.Script: + case ElementType.Style: + case ElementType.Tag: + return renderTag(node, options); + case ElementType.Text: + return renderText(node, options); + } +} +const foreignModeIntegrationPoints = new Set([ + "mi", + "mo", + "mn", + "ms", + "mtext", + "annotation-xml", + "foreignObject", + "desc", + "title", +]); +const foreignElements = new Set(["svg", "math"]); +function renderTag(elem, opts) { + var _a; + // Handle SVG / MathML in HTML + if (opts.xmlMode === "foreign") { + /* Fix up mixed-case element names */ + elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name; + /* Exit foreign mode at integration points */ + if (elem.parent && + foreignModeIntegrationPoints.has(elem.parent.name)) { + opts = { ...opts, xmlMode: false }; + } + } + if (!opts.xmlMode && foreignElements.has(elem.name)) { + opts = { ...opts, xmlMode: "foreign" }; + } + let tag = `<${elem.name}`; + const attribs = formatAttributes(elem.attribs, opts); + if (attribs) { + tag += ` ${attribs}`; + } + if (elem.children.length === 0 && + (opts.xmlMode + ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags + opts.selfClosingTags !== false + : // User explicitly asked for self-closing tags, even in HTML mode + opts.selfClosingTags && singleTag.has(elem.name))) { + if (!opts.xmlMode) + tag += " "; + tag += "/>"; + } + else { + tag += ">"; + if (elem.children.length > 0) { + tag += render(elem.children, opts); + } + if (opts.xmlMode || !singleTag.has(elem.name)) { + tag += ``; + } + } + return tag; +} +function renderDirective(elem) { + return `<${elem.data}>`; +} +function renderText(elem, opts) { + var _a; + let data = elem.data || ""; + // If entities weren't decoded, no need to encode them back + if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false && + !(!opts.xmlMode && + elem.parent && + unencodedElements.has(elem.parent.name))) { + data = + opts.xmlMode || opts.encodeEntities !== "utf8" + ? encodeXML(data) + : escapeText(data); + } + return data; +} +function renderCdata(elem) { + return ``; +} +function renderComment(elem) { + return ``; +} diff --git a/node_modules/dom-serializer/lib/esm/package.json b/node_modules/dom-serializer/lib/esm/package.json new file mode 100644 index 00000000..089153bc --- /dev/null +++ b/node_modules/dom-serializer/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/dom-serializer/lib/foreignNames.d.ts b/node_modules/dom-serializer/lib/foreignNames.d.ts new file mode 100644 index 00000000..a8b09380 --- /dev/null +++ b/node_modules/dom-serializer/lib/foreignNames.d.ts @@ -0,0 +1,3 @@ +export declare const elementNames: Map; +export declare const attributeNames: Map; +//# sourceMappingURL=foreignNames.d.ts.map \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/foreignNames.d.ts.map b/node_modules/dom-serializer/lib/foreignNames.d.ts.map new file mode 100644 index 00000000..bc1d2d0d --- /dev/null +++ b/node_modules/dom-serializer/lib/foreignNames.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"foreignNames.d.ts","sourceRoot":"","sources":["../src/foreignNames.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qBAwCxB,CAAC;AACF,eAAO,MAAM,cAAc,qBA8D1B,CAAC"} \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/foreignNames.js b/node_modules/dom-serializer/lib/foreignNames.js new file mode 100644 index 00000000..3b24b75a --- /dev/null +++ b/node_modules/dom-serializer/lib/foreignNames.js @@ -0,0 +1,103 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.attributeNames = exports.elementNames = void 0; +exports.elementNames = new Map([ + "altGlyph", + "altGlyphDef", + "altGlyphItem", + "animateColor", + "animateMotion", + "animateTransform", + "clipPath", + "feBlend", + "feColorMatrix", + "feComponentTransfer", + "feComposite", + "feConvolveMatrix", + "feDiffuseLighting", + "feDisplacementMap", + "feDistantLight", + "feDropShadow", + "feFlood", + "feFuncA", + "feFuncB", + "feFuncG", + "feFuncR", + "feGaussianBlur", + "feImage", + "feMerge", + "feMergeNode", + "feMorphology", + "feOffset", + "fePointLight", + "feSpecularLighting", + "feSpotLight", + "feTile", + "feTurbulence", + "foreignObject", + "glyphRef", + "linearGradient", + "radialGradient", + "textPath", +].map(function (val) { return [val.toLowerCase(), val]; })); +exports.attributeNames = new Map([ + "definitionURL", + "attributeName", + "attributeType", + "baseFrequency", + "baseProfile", + "calcMode", + "clipPathUnits", + "diffuseConstant", + "edgeMode", + "filterUnits", + "glyphRef", + "gradientTransform", + "gradientUnits", + "kernelMatrix", + "kernelUnitLength", + "keyPoints", + "keySplines", + "keyTimes", + "lengthAdjust", + "limitingConeAngle", + "markerHeight", + "markerUnits", + "markerWidth", + "maskContentUnits", + "maskUnits", + "numOctaves", + "pathLength", + "patternContentUnits", + "patternTransform", + "patternUnits", + "pointsAtX", + "pointsAtY", + "pointsAtZ", + "preserveAlpha", + "preserveAspectRatio", + "primitiveUnits", + "refX", + "refY", + "repeatCount", + "repeatDur", + "requiredExtensions", + "requiredFeatures", + "specularConstant", + "specularExponent", + "spreadMethod", + "startOffset", + "stdDeviation", + "stitchTiles", + "surfaceScale", + "systemLanguage", + "tableValues", + "targetX", + "targetY", + "textLength", + "viewBox", + "viewTarget", + "xChannelSelector", + "yChannelSelector", + "zoomAndPan", +].map(function (val) { return [val.toLowerCase(), val]; })); diff --git a/node_modules/dom-serializer/lib/index.d.ts b/node_modules/dom-serializer/lib/index.d.ts new file mode 100644 index 00000000..cdf04f06 --- /dev/null +++ b/node_modules/dom-serializer/lib/index.d.ts @@ -0,0 +1,52 @@ +import type { AnyNode } from "domhandler"; +export interface DomSerializerOptions { + /** + * Print an empty attribute's value. + * + * @default xmlMode + * @example With emptyAttrs: false: <input checked> + * @example With emptyAttrs: true: <input checked=""> + */ + emptyAttrs?: boolean; + /** + * Print self-closing tags for tags without contents. + * + * @default xmlMode + * @example With selfClosingTags: false: <foo></foo> + * @example With selfClosingTags: true: <foo /> + */ + selfClosingTags?: boolean; + /** + * Treat the input as an XML document; enables the `emptyAttrs` and `selfClosingTags` options. + * + * If the value is `"foreign"`, it will try to correct mixed-case attribute names. + * + * @default false + */ + xmlMode?: boolean | "foreign"; + /** + * Encode characters that are either reserved in HTML or XML. + * + * If `xmlMode` is `true` or the value not `'utf8'`, characters outside of the utf8 range will be encoded as well. + * + * @default `decodeEntities` + */ + encodeEntities?: boolean | "utf8"; + /** + * Option inherited from parsing; will be used as the default value for `encodeEntities`. + * + * @default true + */ + decodeEntities?: boolean; +} +/** + * Renders a DOM node or an array of DOM nodes to a string. + * + * Can be thought of as the equivalent of the `outerHTML` of the passed node(s). + * + * @param node Node to be rendered. + * @param options Changes serialization behavior + */ +export declare function render(node: AnyNode | ArrayLike, options?: DomSerializerOptions): string; +export default render; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/index.d.ts.map b/node_modules/dom-serializer/lib/index.d.ts.map new file mode 100644 index 00000000..6d9d0b66 --- /dev/null +++ b/node_modules/dom-serializer/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,OAAO,EAMR,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA4ED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,EAClC,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAUR;AAED,eAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/dom-serializer/lib/index.js b/node_modules/dom-serializer/lib/index.js new file mode 100644 index 00000000..af996ff4 --- /dev/null +++ b/node_modules/dom-serializer/lib/index.js @@ -0,0 +1,229 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.render = void 0; +/* + * Module dependencies + */ +var ElementType = __importStar(require("domelementtype")); +var entities_1 = require("entities"); +/** + * Mixed-case SVG and MathML tags & attributes + * recognized by the HTML parser. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign + */ +var foreignNames_js_1 = require("./foreignNames.js"); +var unencodedElements = new Set([ + "style", + "script", + "xmp", + "iframe", + "noembed", + "noframes", + "plaintext", + "noscript", +]); +function replaceQuotes(value) { + return value.replace(/"/g, """); +} +/** + * Format attributes + */ +function formatAttributes(attributes, opts) { + var _a; + if (!attributes) + return; + var encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false + ? replaceQuotes + : opts.xmlMode || opts.encodeEntities !== "utf8" + ? entities_1.encodeXML + : entities_1.escapeAttribute; + return Object.keys(attributes) + .map(function (key) { + var _a, _b; + var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : ""; + if (opts.xmlMode === "foreign") { + /* Fix up mixed-case attribute names */ + key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key; + } + if (!opts.emptyAttrs && !opts.xmlMode && value === "") { + return key; + } + return "".concat(key, "=\"").concat(encode(value), "\""); + }) + .join(" "); +} +/** + * Self-enclosing tags + */ +var singleTag = new Set([ + "area", + "base", + "basefont", + "br", + "col", + "command", + "embed", + "frame", + "hr", + "img", + "input", + "isindex", + "keygen", + "link", + "meta", + "param", + "source", + "track", + "wbr", +]); +/** + * Renders a DOM node or an array of DOM nodes to a string. + * + * Can be thought of as the equivalent of the `outerHTML` of the passed node(s). + * + * @param node Node to be rendered. + * @param options Changes serialization behavior + */ +function render(node, options) { + if (options === void 0) { options = {}; } + var nodes = "length" in node ? node : [node]; + var output = ""; + for (var i = 0; i < nodes.length; i++) { + output += renderNode(nodes[i], options); + } + return output; +} +exports.render = render; +exports.default = render; +function renderNode(node, options) { + switch (node.type) { + case ElementType.Root: + return render(node.children, options); + // @ts-expect-error We don't use `Doctype` yet + case ElementType.Doctype: + case ElementType.Directive: + return renderDirective(node); + case ElementType.Comment: + return renderComment(node); + case ElementType.CDATA: + return renderCdata(node); + case ElementType.Script: + case ElementType.Style: + case ElementType.Tag: + return renderTag(node, options); + case ElementType.Text: + return renderText(node, options); + } +} +var foreignModeIntegrationPoints = new Set([ + "mi", + "mo", + "mn", + "ms", + "mtext", + "annotation-xml", + "foreignObject", + "desc", + "title", +]); +var foreignElements = new Set(["svg", "math"]); +function renderTag(elem, opts) { + var _a; + // Handle SVG / MathML in HTML + if (opts.xmlMode === "foreign") { + /* Fix up mixed-case element names */ + elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name; + /* Exit foreign mode at integration points */ + if (elem.parent && + foreignModeIntegrationPoints.has(elem.parent.name)) { + opts = __assign(__assign({}, opts), { xmlMode: false }); + } + } + if (!opts.xmlMode && foreignElements.has(elem.name)) { + opts = __assign(__assign({}, opts), { xmlMode: "foreign" }); + } + var tag = "<".concat(elem.name); + var attribs = formatAttributes(elem.attribs, opts); + if (attribs) { + tag += " ".concat(attribs); + } + if (elem.children.length === 0 && + (opts.xmlMode + ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags + opts.selfClosingTags !== false + : // User explicitly asked for self-closing tags, even in HTML mode + opts.selfClosingTags && singleTag.has(elem.name))) { + if (!opts.xmlMode) + tag += " "; + tag += "/>"; + } + else { + tag += ">"; + if (elem.children.length > 0) { + tag += render(elem.children, opts); + } + if (opts.xmlMode || !singleTag.has(elem.name)) { + tag += ""); + } + } + return tag; +} +function renderDirective(elem) { + return "<".concat(elem.data, ">"); +} +function renderText(elem, opts) { + var _a; + var data = elem.data || ""; + // If entities weren't decoded, no need to encode them back + if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false && + !(!opts.xmlMode && + elem.parent && + unencodedElements.has(elem.parent.name))) { + data = + opts.xmlMode || opts.encodeEntities !== "utf8" + ? (0, entities_1.encodeXML)(data) + : (0, entities_1.escapeText)(data); + } + return data; +} +function renderCdata(elem) { + return ""); +} +function renderComment(elem) { + return ""); +} diff --git a/node_modules/dom-serializer/package.json b/node_modules/dom-serializer/package.json new file mode 100644 index 00000000..002681c0 --- /dev/null +++ b/node_modules/dom-serializer/package.json @@ -0,0 +1,69 @@ +{ + "name": "dom-serializer", + "version": "2.0.0", + "description": "render domhandler DOM nodes to a string", + "author": "Felix Boehm ", + "sideEffects": false, + "keywords": [ + "html", + "xml", + "render" + ], + "repository": { + "type": "git", + "url": "git://github.com/cheeriojs/dom-serializer.git" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "files": [ + "lib/**/*" + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "devDependencies": { + "@types/jest": "^27.4.1", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.18.0", + "@typescript-eslint/parser": "^5.18.0", + "cheerio": "^1.0.0-rc.9", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "htmlparser2": "^7.2.0", + "jest": "^27.5.1", + "prettier": "^2.6.2", + "ts-jest": "^27.1.4", + "typescript": "^4.6.3" + }, + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint --ignore-path .gitignore .", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier \"**/*.{ts,md,json,yml}\" --ignore-path .gitignore", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc", + "build:esm": "tsc --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "funding": "https://github.com/cheeriojs/dom-serializer?sponsor=1", + "license": "MIT" +} diff --git a/node_modules/domelementtype/LICENSE b/node_modules/domelementtype/LICENSE new file mode 100644 index 00000000..c464f863 --- /dev/null +++ b/node_modules/domelementtype/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/domelementtype/lib/esm/index.d.ts b/node_modules/domelementtype/lib/esm/index.d.ts new file mode 100644 index 00000000..72fa4f87 --- /dev/null +++ b/node_modules/domelementtype/lib/esm/index.d.ts @@ -0,0 +1,48 @@ +/** Types of elements found in htmlparser2's DOM */ +export declare enum ElementType { + /** Type for the root element of a document */ + Root = "root", + /** Type for Text */ + Text = "text", + /** Type for */ + Directive = "directive", + /** Type for */ + Comment = "comment", + /** Type for "; +const handler = new DomHandler((error, dom) => { + if (error) { + // Handle error + } else { + // Parsing completed, do something + console.log(dom); + } +}); +const parser = new Parser(handler); +parser.write(rawHtml); +parser.end(); +``` + +Output: + +```javascript +[ + { + data: "Xyz ", + type: "text", + }, + { + type: "script", + name: "script", + attribs: { + language: "javascript", + }, + children: [ + { + data: "var foo = '';<", + type: "text", + }, + ], + }, + { + data: "|<(\/?)([a-zA-Z][-.:0-9_a-zA-Z]*)((?:\s+[^>]*?(?:(?:'[^']*')|(?:"[^"]*"))?)*)\s*(\/?)>/g; + var kAttributePattern = /(?:^|\s)(id|class)\s*=\s*((?:'[^']*')|(?:"[^"]*")|\S+)/gi; + var kElementsClosedByOpening = { + li: { li: true, LI: true }, + LI: { li: true, LI: true }, + p: { p: true, div: true, P: true, DIV: true }, + P: { p: true, div: true, P: true, DIV: true }, + b: { div: true, DIV: true }, + B: { div: true, DIV: true }, + td: { td: true, th: true, TD: true, TH: true }, + TD: { td: true, th: true, TD: true, TH: true }, + th: { td: true, th: true, TD: true, TH: true }, + TH: { td: true, th: true, TD: true, TH: true }, + h1: { h1: true, H1: true }, + H1: { h1: true, H1: true }, + h2: { h2: true, H2: true }, + H2: { h2: true, H2: true }, + h3: { h3: true, H3: true }, + H3: { h3: true, H3: true }, + h4: { h4: true, H4: true }, + H4: { h4: true, H4: true }, + h5: { h5: true, H5: true }, + H5: { h5: true, H5: true }, + h6: { h6: true, H6: true }, + H6: { h6: true, H6: true }, + }; + var kElementsClosedByClosing = { + li: { ul: true, ol: true, UL: true, OL: true }, + LI: { ul: true, ol: true, UL: true, OL: true }, + a: { div: true, DIV: true }, + A: { div: true, DIV: true }, + b: { div: true, DIV: true }, + B: { div: true, DIV: true }, + i: { div: true, DIV: true }, + I: { div: true, DIV: true }, + p: { div: true, DIV: true }, + P: { div: true, DIV: true }, + td: { tr: true, table: true, TR: true, TABLE: true }, + TD: { tr: true, table: true, TR: true, TABLE: true }, + th: { tr: true, table: true, TR: true, TABLE: true }, + TH: { tr: true, table: true, TR: true, TABLE: true }, + }; + var frameflag = 'documentfragmentcontainer'; + /** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + * @param {string} data html + * @return {HTMLElement} root element + */ + function base_parse(data, options) { + var _a, _b; + if (options === void 0) { options = {}; } + var voidTag = new void_tag_1.default((_a = options === null || options === void 0 ? void 0 : options.voidTag) === null || _a === void 0 ? void 0 : _a.closingSlash, (_b = options === null || options === void 0 ? void 0 : options.voidTag) === null || _b === void 0 ? void 0 : _b.tags); + var elements = options.blockTextElements || { + script: true, + noscript: true, + style: true, + pre: true, + }; + var element_names = Object.keys(elements).filter(function (name) { + return Boolean(elements[name]); + }); + var kBlockTextElements = element_names.map(function (it) { return new RegExp("^".concat(it, "$"), 'i'); }); + var kIgnoreElements = element_names.filter(function (it) { return elements[it]; }).map(function (it) { return new RegExp("^".concat(it, "$"), 'i'); }); + function element_should_be_ignore(tag) { + return kIgnoreElements.some(function (it) { return it.test(tag); }); + } + function is_block_text_element(tag) { + return kBlockTextElements.some(function (it) { return it.test(tag); }); + } + var createRange = function (startPos, endPos) { return [startPos - frameFlagOffset, endPos - frameFlagOffset]; }; + var root = new HTMLElement(null, {}, '', null, [0, data.length], voidTag, options); + var currentParent = root; + var stack = [root]; + var lastTextPos = -1; + var noNestedTagIndex = undefined; + var match; + // https://github.com/taoqf/node-html-parser/issues/38 + data = "<".concat(frameflag, ">").concat(data, ""); + var lowerCaseTagName = options.lowerCaseTagName, fixNestedATags = options.fixNestedATags; + var dataEndPos = data.length - (frameflag.length + 2); + var frameFlagOffset = frameflag.length + 2; + while ((match = kMarkupPattern.exec(data))) { + // Note: Object destructuring here consistently tests as higher performance than array destructuring + // eslint-disable-next-line prefer-const + var matchText = match[0], leadingSlash = match[1], tagName = match[2], attributes = match[3], closingSlash = match[4]; + var matchLength = matchText.length; + var tagStartPos = kMarkupPattern.lastIndex - matchLength; + var tagEndPos = kMarkupPattern.lastIndex; + // Add TextNode if content + if (lastTextPos > -1) { + if (lastTextPos + matchLength < tagEndPos) { + var text = data.substring(lastTextPos, tagStartPos); + currentParent.appendChild(new text_1.default(text, currentParent, createRange(lastTextPos, tagStartPos))); + } + } + lastTextPos = kMarkupPattern.lastIndex; + // https://github.com/taoqf/node-html-parser/issues/38 + // Skip frameflag node + if (tagName === frameflag) + continue; + // Handle comments + if (matchText[1] === '!') { + if (options.comment) { + // Only keep what is in between + var text = data.substring(tagStartPos + 4, tagEndPos - 3); + currentParent.appendChild(new comment_1.default(text, currentParent, createRange(tagStartPos, tagEndPos))); + } + continue; + } + /* -- Handle tag matching -- */ + // Fix tag casing if necessary + if (lowerCaseTagName) + tagName = tagName.toLowerCase(); + // Handle opening tags (ie. not ) + if (!leadingSlash) { + /* Populate attributes */ + var attrs = {}; + for (var attMatch = void 0; (attMatch = kAttributePattern.exec(attributes));) { + var key = attMatch[1], val = attMatch[2]; + var isQuoted = val[0] === "'" || val[0] === "\""; + attrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val; + } + var parentTagName = currentParent.rawTagName; + if (!closingSlash && kElementsClosedByOpening[parentTagName]) { + if (kElementsClosedByOpening[parentTagName][tagName]) { + stack.pop(); + currentParent = (0, back_1.default)(stack); + } + } + // Prevent nested A tags by terminating the last A and starting a new one : see issue #144 + if (fixNestedATags && (tagName === 'a' || tagName === 'A')) { + if (noNestedTagIndex !== undefined) { + stack.splice(noNestedTagIndex); + currentParent = (0, back_1.default)(stack); + } + noNestedTagIndex = stack.length; + } + var tagEndPos_1 = kMarkupPattern.lastIndex; + var tagStartPos_1 = tagEndPos_1 - matchLength; + currentParent = currentParent.appendChild( + // Initialize range (end position updated later for closed tags) + new HTMLElement(tagName, attrs, attributes.slice(1), null, createRange(tagStartPos_1, tagEndPos_1), voidTag, options)); + stack.push(currentParent); + if (is_block_text_element(tagName)) { + // Find closing tag + var closeMarkup = ""); + var closeIndex = lowerCaseTagName + ? data.toLocaleLowerCase().indexOf(closeMarkup, kMarkupPattern.lastIndex) + : data.indexOf(closeMarkup, kMarkupPattern.lastIndex); + var textEndPos = closeIndex === -1 ? dataEndPos : closeIndex; + if (element_should_be_ignore(tagName)) { + var text = data.substring(tagEndPos_1, textEndPos); + if (text.length > 0 && /\S/.test(text)) { + currentParent.appendChild(new text_1.default(text, currentParent, createRange(tagEndPos_1, textEndPos))); + } + } + if (closeIndex === -1) { + lastTextPos = kMarkupPattern.lastIndex = data.length + 1; + } + else { + lastTextPos = kMarkupPattern.lastIndex = closeIndex + closeMarkup.length; + // Cause to be treated as self-closing, because no close found + leadingSlash = '/'; + } + } + } + // Handle closing tags or self-closed elements (ie or
) + if (leadingSlash || closingSlash || voidTag.isVoidElement(tagName)) { + while (true) { + if (noNestedTagIndex != null && (tagName === 'a' || tagName === 'A')) + noNestedTagIndex = undefined; + if (currentParent.rawTagName === tagName) { + // Update range end for closed tag + currentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1]; + stack.pop(); + currentParent = (0, back_1.default)(stack); + break; + } + else { + var parentTagName = currentParent.tagName; + // Trying to close current tag, and move on + if (kElementsClosedByClosing[parentTagName]) { + if (kElementsClosedByClosing[parentTagName][tagName]) { + stack.pop(); + currentParent = (0, back_1.default)(stack); + continue; + } + } + // Use aggressive strategy to handle unmatching markups. + break; + } + } + } + } + return stack; + } + exports.base_parse = base_parse; + /** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + */ + function parse(data, options) { + if (options === void 0) { options = {}; } + var stack = base_parse(data, options); + var root = stack[0]; + var _loop_1 = function () { + // Handle each error elements. + var last = stack.pop(); + var oneBefore = (0, back_1.default)(stack); + if (last.parentNode && last.parentNode.parentNode) { + if (last.parentNode === oneBefore && last.tagName === oneBefore.tagName) { + // Pair error case

handle : Fixes to

+ // this is wrong, becouse this will put the H3 outside the current right position which should be inside the current Html Element, see issue 152 for more info + if (options.parseNoneClosedTags !== true) { + oneBefore.removeChild(last); + last.childNodes.forEach(function (child) { + oneBefore.parentNode.appendChild(child); + }); + stack.pop(); + } + } + else { + // Single error

handle: Just removes

+ // Why remove? this is already a HtmlElement and the missing

is already added in this case. see issue 152 for more info + // eslint-disable-next-line no-lonely-if + if (options.parseNoneClosedTags !== true) { + oneBefore.removeChild(last); + last.childNodes.forEach(function (child) { + oneBefore.appendChild(child); + }); + } + } + } + else { + // If it's final element just skip. + } + }; + while (stack.length > 1) { + _loop_1(); + } + // response.childNodes.forEach((node) => { + // if (node instanceof HTMLElement) { + // node.parentNode = null; + // } + // }); + return root; + } + exports.parse = parse; + function resetParent(nodes, parent) { + return nodes.map(function (node) { + node.parentNode = parent; + return node; + }); + } +}); +define("nodes/comment", ["require", "exports", "nodes/node", "nodes/type"], function (require, exports, node_3, type_4) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + node_3 = __importDefault(node_3); + type_4 = __importDefault(type_4); + var CommentNode = /** @class */ (function (_super) { + __extends(CommentNode, _super); + function CommentNode(rawText, parentNode, range) { + if (parentNode === void 0) { parentNode = null; } + var _this = _super.call(this, parentNode, range) || this; + _this.rawText = rawText; + /** + * Node Type declaration. + * @type {Number} + */ + _this.nodeType = type_4.default.COMMENT_NODE; + return _this; + } + CommentNode.prototype.clone = function () { + return new CommentNode(this.rawText, null); + }; + Object.defineProperty(CommentNode.prototype, "text", { + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get: function () { + return this.rawText; + }, + enumerable: false, + configurable: true + }); + CommentNode.prototype.toString = function () { + return ""); + }; + return CommentNode; + }(node_3.default)); + exports.default = CommentNode; +}); +define("parse", ["require", "exports", "nodes/html"], function (require, exports, html_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = void 0; + Object.defineProperty(exports, "default", { enumerable: true, get: function () { return html_1.parse; } }); +}); +define("valid", ["require", "exports", "nodes/html"], function (require, exports, html_2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + /** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + */ + function valid(data, options) { + if (options === void 0) { options = {}; } + var stack = (0, html_2.base_parse)(data, options); + return Boolean(stack.length === 1); + } + exports.default = valid; +}); +define("index", ["require", "exports", "nodes/comment", "nodes/html", "nodes/node", "nodes/text", "nodes/type", "parse", "valid"], function (require, exports, comment_2, html_3, node_4, text_2, type_5, parse_1, valid_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.NodeType = exports.TextNode = exports.Node = exports.valid = exports.CommentNode = exports.HTMLElement = exports.parse = void 0; + comment_2 = __importDefault(comment_2); + html_3 = __importDefault(html_3); + node_4 = __importDefault(node_4); + text_2 = __importDefault(text_2); + type_5 = __importDefault(type_5); + parse_1 = __importDefault(parse_1); + valid_1 = __importDefault(valid_1); + exports.CommentNode = comment_2.default; + exports.HTMLElement = html_3.default; + exports.Node = node_4.default; + exports.TextNode = text_2.default; + exports.NodeType = type_5.default; + exports.valid = valid_1.default; + function parse(data, options) { + if (options === void 0) { options = {}; } + return (0, parse_1.default)(data, options); + } + exports.default = parse; + exports.parse = parse; + parse.parse = parse_1.default; + parse.HTMLElement = html_3.default; + parse.CommentNode = comment_2.default; + parse.valid = valid_1.default; + parse.Node = node_4.default; + parse.TextNode = text_2.default; + parse.NodeType = type_5.default; +}); diff --git a/node_modules/node-html-parser/dist/matcher.d.ts b/node_modules/node-html-parser/dist/matcher.d.ts new file mode 100644 index 00000000..6eb4d7dd --- /dev/null +++ b/node_modules/node-html-parser/dist/matcher.d.ts @@ -0,0 +1,6 @@ +import { Adapter } from 'css-select/lib/types'; +import HTMLElement from './nodes/html'; +import Node from './nodes/node'; +export declare type Predicate = (node: Node) => node is HTMLElement; +declare const _default: Adapter; +export default _default; diff --git a/node_modules/node-html-parser/dist/matcher.js b/node_modules/node-html-parser/dist/matcher.js new file mode 100644 index 00000000..910614cb --- /dev/null +++ b/node_modules/node-html-parser/dist/matcher.js @@ -0,0 +1,106 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var type_1 = __importDefault(require("./nodes/type")); +function isTag(node) { + return node && node.nodeType === type_1.default.ELEMENT_NODE; +} +function getAttributeValue(elem, name) { + return isTag(elem) ? elem.getAttribute(name) : undefined; +} +function getName(elem) { + return ((elem && elem.rawTagName) || '').toLowerCase(); +} +function getChildren(node) { + return node && node.childNodes; +} +function getParent(node) { + return node ? node.parentNode : null; +} +function getText(node) { + return node.text; +} +function removeSubsets(nodes) { + var idx = nodes.length; + var node; + var ancestor; + var replace; + // Check if each node (or one of its ancestors) is already contained in the + // array. + while (--idx > -1) { + node = ancestor = nodes[idx]; + // Temporarily remove the node under consideration + nodes[idx] = null; + replace = true; + while (ancestor) { + if (nodes.indexOf(ancestor) > -1) { + replace = false; + nodes.splice(idx, 1); + break; + } + ancestor = getParent(ancestor); + } + // If the node has been found to be unique, re-insert it. + if (replace) { + nodes[idx] = node; + } + } + return nodes; +} +function existsOne(test, elems) { + return elems.some(function (elem) { + return isTag(elem) ? test(elem) || existsOne(test, getChildren(elem)) : false; + }); +} +function getSiblings(node) { + var parent = getParent(node); + return parent ? getChildren(parent) : []; +} +function hasAttrib(elem, name) { + return getAttributeValue(elem, name) !== undefined; +} +function findOne(test, elems) { + var elem = null; + for (var i = 0, l = elems === null || elems === void 0 ? void 0 : elems.length; i < l && !elem; i++) { + var el = elems[i]; + if (test(el)) { + elem = el; + } + else { + var childs = getChildren(el); + if (childs && childs.length > 0) { + elem = findOne(test, childs); + } + } + } + return elem; +} +function findAll(test, nodes) { + var result = []; + for (var i = 0, j = nodes.length; i < j; i++) { + if (!isTag(nodes[i])) + continue; + if (test(nodes[i])) + result.push(nodes[i]); + var childs = getChildren(nodes[i]); + if (childs) + result = result.concat(findAll(test, childs)); + } + return result; +} +exports.default = { + isTag: isTag, + getAttributeValue: getAttributeValue, + getName: getName, + getChildren: getChildren, + getParent: getParent, + getText: getText, + removeSubsets: removeSubsets, + existsOne: existsOne, + getSiblings: getSiblings, + hasAttrib: hasAttrib, + findOne: findOne, + findAll: findAll +}; diff --git a/node_modules/node-html-parser/dist/nodes/comment.d.ts b/node_modules/node-html-parser/dist/nodes/comment.d.ts new file mode 100644 index 00000000..d9ce29de --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/comment.d.ts @@ -0,0 +1,19 @@ +import HTMLElement from './html'; +import Node from './node'; +import NodeType from './type'; +export default class CommentNode extends Node { + rawText: string; + clone(): CommentNode; + constructor(rawText: string, parentNode?: HTMLElement, range?: [number, number]); + /** + * Node Type declaration. + * @type {Number} + */ + nodeType: NodeType; + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get text(): string; + toString(): string; +} diff --git a/node_modules/node-html-parser/dist/nodes/comment.js b/node_modules/node-html-parser/dist/nodes/comment.js new file mode 100644 index 00000000..9fb75188 --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/comment.js @@ -0,0 +1,55 @@ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var node_1 = __importDefault(require("./node")); +var type_1 = __importDefault(require("./type")); +var CommentNode = /** @class */ (function (_super) { + __extends(CommentNode, _super); + function CommentNode(rawText, parentNode, range) { + if (parentNode === void 0) { parentNode = null; } + var _this = _super.call(this, parentNode, range) || this; + _this.rawText = rawText; + /** + * Node Type declaration. + * @type {Number} + */ + _this.nodeType = type_1.default.COMMENT_NODE; + return _this; + } + CommentNode.prototype.clone = function () { + return new CommentNode(this.rawText, null); + }; + Object.defineProperty(CommentNode.prototype, "text", { + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get: function () { + return this.rawText; + }, + enumerable: false, + configurable: true + }); + CommentNode.prototype.toString = function () { + return ""); + }; + return CommentNode; +}(node_1.default)); +exports.default = CommentNode; diff --git a/node_modules/node-html-parser/dist/nodes/html.d.ts b/node_modules/node-html-parser/dist/nodes/html.d.ts new file mode 100644 index 00000000..98f34aee --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/html.d.ts @@ -0,0 +1,238 @@ +import VoidTag from '../void-tag'; +import Node from './node'; +import NodeType from './type'; +export interface KeyAttributes { + id?: string; + class?: string; +} +export interface Attributes { + [key: string]: string; +} +export interface RawAttributes { + [key: string]: string; +} +export declare type InsertPosition = 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend'; +declare class DOMTokenList { + private _set; + private _afterUpdate; + private _validate; + constructor(valuesInit?: string[], afterUpdate?: (t: DOMTokenList) => void); + add(c: string): void; + replace(c1: string, c2: string): void; + remove(c: string): void; + toggle(c: string): void; + contains(c: string): boolean; + get length(): number; + values(): IterableIterator; + get value(): string[]; + toString(): string; +} +/** + * HTMLElement, which contains a set of children. + * + * Note: this is a minimalist implementation, no complete tree + * structure provided (no parentNode, nextSibling, + * previousSibling etc). + * @class HTMLElement + * @extends {Node} + */ +export default class HTMLElement extends Node { + rawAttrs: string; + private voidTag; + private _attrs; + private _rawAttrs; + private _parseOptions; + rawTagName: string; + id: string; + classList: DOMTokenList; + /** + * Node Type declaration. + */ + nodeType: NodeType; + /** + * Quote attribute values + * @param attr attribute value + * @returns {string} quoted value + */ + private quoteAttribute; + /** + * Creates an instance of HTMLElement. + * @param keyAttrs id and class attribute + * @param [rawAttrs] attributes in string + * + * @memberof HTMLElement + */ + constructor(tagName: string, keyAttrs: KeyAttributes, rawAttrs?: string, parentNode?: HTMLElement, range?: [number, number], voidTag?: VoidTag, _parseOptions?: Partial); + /** + * Remove Child element from childNodes array + * @param {HTMLElement} node node to remove + */ + removeChild(node: Node): this; + /** + * Exchanges given child with new child + * @param {HTMLElement} oldNode node to exchange + * @param {HTMLElement} newNode new node + */ + exchangeChild(oldNode: Node, newNode: Node): this; + get tagName(): string; + set tagName(newname: string); + get localName(): string; + get isVoidElement(): boolean; + /** + * Get escpaed (as-it) text value of current node and its children. + * @return {string} text content + */ + get rawText(): string; + get textContent(): string; + set textContent(val: string); + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get text(): string; + /** + * Get structured Text (with '\n' etc.) + * @return {string} structured text + */ + get structuredText(): string; + toString(): string; + get innerHTML(): string; + set innerHTML(content: string); + set_content(content: string | Node | Node[], options?: Partial): this; + replaceWith(...nodes: (string | Node)[]): this; + get outerHTML(): string; + /** + * Trim element from right (in block) after seeing pattern in a TextNode. + * @param {RegExp} pattern pattern to find + * @return {HTMLElement} reference to current node + */ + trimRight(pattern: RegExp): this; + /** + * Get DOM structure + * @return {string} strucutre + */ + get structure(): string; + /** + * Remove whitespaces in this sub tree. + * @return {HTMLElement} pointer to this + */ + removeWhitespace(): this; + /** + * Query CSS selector to find matching nodes. + * @param {string} selector Simplified CSS selector + * @return {HTMLElement[]} matching elements + */ + querySelectorAll(selector: string): HTMLElement[]; + /** + * Query CSS Selector to find matching node. + * @param {string} selector Simplified CSS selector + * @return {(HTMLElement|null)} matching node + */ + querySelector(selector: string): HTMLElement | null; + /** + * find elements by their tagName + * @param {string} tagName the tagName of the elements to select + */ + getElementsByTagName(tagName: string): Array; + /** + * find element by it's id + * @param {string} id the id of the element to select + */ + getElementById(id: string): HTMLElement; + /** + * traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null. + * @param selector a DOMString containing a selector list + */ + closest(selector: string): HTMLElement; + /** + * Append a child node to childNodes + * @param {Node} node node to append + * @return {Node} node appended + */ + appendChild(node: T): T; + /** + * Get first child node + * @return {Node} first child node + */ + get firstChild(): Node; + /** + * Get last child node + * @return {Node} last child node + */ + get lastChild(): Node; + /** + * Get attributes + * @access private + * @return {Object} parsed and unescaped attributes + */ + get attrs(): Attributes; + get attributes(): Record; + /** + * Get escaped (as-is) attributes + * @return {Object} parsed attributes + */ + get rawAttributes(): RawAttributes; + removeAttribute(key: string): this; + hasAttribute(key: string): boolean; + /** + * Get an attribute + * @return {string} value of the attribute + */ + getAttribute(key: string): string | undefined; + /** + * Set an attribute value to the HTMLElement + * @param {string} key The attribute name + * @param {string} value The value to set, or null / undefined to remove an attribute + */ + setAttribute(key: string, value: string): this; + /** + * Replace all the attributes of the HTMLElement by the provided attributes + * @param {Attributes} attributes the new attribute set + */ + setAttributes(attributes: Attributes): this; + insertAdjacentHTML(where: InsertPosition, html: string): this; + get nextSibling(): Node; + get nextElementSibling(): HTMLElement; + get previousSibling(): Node; + get previousElementSibling(): HTMLElement; + get classNames(): string; + /** + * Clone this Node + */ + clone(): Node; +} +export interface Options { + lowerCaseTagName?: boolean; + comment?: boolean; + /** + * @see PR #215 for explanation + */ + fixNestedATags?: boolean; + parseNoneClosedTags?: boolean; + blockTextElements: { + [tag: string]: boolean; + }; + voidTag?: { + /** + * options, default value is ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'] + */ + tags?: string[]; + /** + * void tag serialisation, add a final slash
+ */ + closingSlash?: boolean; + }; +} +/** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + * @param {string} data html + * @return {HTMLElement} root element + */ +export declare function base_parse(data: string, options?: Partial): HTMLElement[]; +/** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + */ +export declare function parse(data: string, options?: Partial): HTMLElement; +export {}; diff --git a/node_modules/node-html-parser/dist/nodes/html.js b/node_modules/node-html-parser/dist/nodes/html.js new file mode 100644 index 00000000..783d74b3 --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/html.js @@ -0,0 +1,1219 @@ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = exports.base_parse = void 0; +var css_select_1 = require("css-select"); +var he_1 = __importDefault(require("he")); +var back_1 = __importDefault(require("../back")); +var matcher_1 = __importDefault(require("../matcher")); +var void_tag_1 = __importDefault(require("../void-tag")); +var comment_1 = __importDefault(require("./comment")); +var node_1 = __importDefault(require("./node")); +var text_1 = __importDefault(require("./text")); +var type_1 = __importDefault(require("./type")); +function decode(val) { + // clone string + return JSON.parse(JSON.stringify(he_1.default.decode(val))); +} +// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements +var Htags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup']; +var Dtags = ['details', 'dialog', 'dd', 'div', 'dt']; +var Ftags = ['fieldset', 'figcaption', 'figure', 'footer', 'form']; +var tableTags = ['table', 'td', 'tr']; +var htmlTags = ['address', 'article', 'aside', 'blockquote', 'br', 'hr', 'li', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'ul']; +var kBlockElements = new Set(); +function addToKBlockElement() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var addToSet = function (array) { + for (var index = 0; index < array.length; index++) { + var element = array[index]; + kBlockElements.add(element); + kBlockElements.add(element.toUpperCase()); + } + }; + for (var _a = 0, args_1 = args; _a < args_1.length; _a++) { + var arg = args_1[_a]; + addToSet(arg); + } +} +addToKBlockElement(Htags, Dtags, Ftags, tableTags, htmlTags); +var DOMTokenList = /** @class */ (function () { + function DOMTokenList(valuesInit, afterUpdate) { + if (valuesInit === void 0) { valuesInit = []; } + if (afterUpdate === void 0) { afterUpdate = function () { return null; }; } + this._set = new Set(valuesInit); + this._afterUpdate = afterUpdate; + } + DOMTokenList.prototype._validate = function (c) { + if (/\s/.test(c)) { + throw new Error("DOMException in DOMTokenList.add: The token '".concat(c, "' contains HTML space characters, which are not valid in tokens.")); + } + }; + DOMTokenList.prototype.add = function (c) { + this._validate(c); + this._set.add(c); + this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call + }; + DOMTokenList.prototype.replace = function (c1, c2) { + this._validate(c2); + this._set.delete(c1); + this._set.add(c2); + this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call + }; + DOMTokenList.prototype.remove = function (c) { + this._set.delete(c) && this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call + }; + DOMTokenList.prototype.toggle = function (c) { + this._validate(c); + if (this._set.has(c)) + this._set.delete(c); + else + this._set.add(c); + this._afterUpdate(this); // eslint-disable-line @typescript-eslint/no-unsafe-call + }; + DOMTokenList.prototype.contains = function (c) { + return this._set.has(c); + }; + Object.defineProperty(DOMTokenList.prototype, "length", { + get: function () { + return this._set.size; + }, + enumerable: false, + configurable: true + }); + DOMTokenList.prototype.values = function () { + return this._set.values(); + }; + Object.defineProperty(DOMTokenList.prototype, "value", { + get: function () { + return Array.from(this._set.values()); + }, + enumerable: false, + configurable: true + }); + DOMTokenList.prototype.toString = function () { + return Array.from(this._set.values()).join(' '); + }; + return DOMTokenList; +}()); +/** + * HTMLElement, which contains a set of children. + * + * Note: this is a minimalist implementation, no complete tree + * structure provided (no parentNode, nextSibling, + * previousSibling etc). + * @class HTMLElement + * @extends {Node} + */ +var HTMLElement = /** @class */ (function (_super) { + __extends(HTMLElement, _super); + /** + * Creates an instance of HTMLElement. + * @param keyAttrs id and class attribute + * @param [rawAttrs] attributes in string + * + * @memberof HTMLElement + */ + function HTMLElement(tagName, keyAttrs, rawAttrs, parentNode, range, voidTag, _parseOptions) { + if (rawAttrs === void 0) { rawAttrs = ''; } + if (parentNode === void 0) { parentNode = null; } + if (voidTag === void 0) { voidTag = new void_tag_1.default(); } + if (_parseOptions === void 0) { _parseOptions = {}; } + var _this = _super.call(this, parentNode, range) || this; + _this.rawAttrs = rawAttrs; + _this.voidTag = voidTag; + /** + * Node Type declaration. + */ + _this.nodeType = type_1.default.ELEMENT_NODE; + _this.rawTagName = tagName; + _this.rawAttrs = rawAttrs || ''; + _this.id = keyAttrs.id || ''; + _this.childNodes = []; + _this._parseOptions = _parseOptions; + _this.classList = new DOMTokenList(keyAttrs.class ? keyAttrs.class.split(/\s+/) : [], function (classList) { return _this.setAttribute('class', classList.toString()); } // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + ); + if (keyAttrs.id) { + if (!rawAttrs) { + _this.rawAttrs = "id=\"".concat(keyAttrs.id, "\""); + } + } + if (keyAttrs.class) { + if (!rawAttrs) { + var cls = "class=\"".concat(_this.classList.toString(), "\""); + if (_this.rawAttrs) { + _this.rawAttrs += " ".concat(cls); + } + else { + _this.rawAttrs = cls; + } + } + } + return _this; + } + /** + * Quote attribute values + * @param attr attribute value + * @returns {string} quoted value + */ + HTMLElement.prototype.quoteAttribute = function (attr) { + if (attr == null) { + return 'null'; + } + return JSON.stringify(attr.replace(/"/g, '"')).replace(/\\t/g, '\t').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\/g, ''); + }; + /** + * Remove Child element from childNodes array + * @param {HTMLElement} node node to remove + */ + HTMLElement.prototype.removeChild = function (node) { + this.childNodes = this.childNodes.filter(function (child) { + return child !== node; + }); + return this; + }; + /** + * Exchanges given child with new child + * @param {HTMLElement} oldNode node to exchange + * @param {HTMLElement} newNode new node + */ + HTMLElement.prototype.exchangeChild = function (oldNode, newNode) { + var children = this.childNodes; + this.childNodes = children.map(function (child) { + if (child === oldNode) { + return newNode; + } + return child; + }); + return this; + }; + Object.defineProperty(HTMLElement.prototype, "tagName", { + get: function () { + return this.rawTagName ? this.rawTagName.toUpperCase() : this.rawTagName; + }, + set: function (newname) { + this.rawTagName = newname.toLowerCase(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "localName", { + get: function () { + return this.rawTagName.toLowerCase(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "isVoidElement", { + get: function () { + return this.voidTag.isVoidElement(this.localName); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "rawText", { + /** + * Get escpaed (as-it) text value of current node and its children. + * @return {string} text content + */ + get: function () { + // https://github.com/taoqf/node-html-parser/issues/249 + if (/br/i.test(this.rawTagName)) { + return '\n'; + } + return this.childNodes.reduce(function (pre, cur) { + return (pre += cur.rawText); + }, ''); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "textContent", { + get: function () { + return decode(this.rawText); + }, + set: function (val) { + var content = [new text_1.default(val, this)]; + this.childNodes = content; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "text", { + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get: function () { + return decode(this.rawText); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "structuredText", { + /** + * Get structured Text (with '\n' etc.) + * @return {string} structured text + */ + get: function () { + var currentBlock = []; + var blocks = [currentBlock]; + function dfs(node) { + if (node.nodeType === type_1.default.ELEMENT_NODE) { + if (kBlockElements.has(node.rawTagName)) { + if (currentBlock.length > 0) { + blocks.push((currentBlock = [])); + } + node.childNodes.forEach(dfs); + if (currentBlock.length > 0) { + blocks.push((currentBlock = [])); + } + } + else { + node.childNodes.forEach(dfs); + } + } + else if (node.nodeType === type_1.default.TEXT_NODE) { + if (node.isWhitespace) { + // Whitespace node, postponed output + currentBlock.prependWhitespace = true; + } + else { + var text = node.trimmedText; + if (currentBlock.prependWhitespace) { + text = " ".concat(text); + currentBlock.prependWhitespace = false; + } + currentBlock.push(text); + } + } + } + dfs(this); + return blocks + .map(function (block) { + return block.join('').replace(/\s{2,}/g, ' '); // Normalize each line's whitespace + }) + .join('\n') + .replace(/\s+$/, ''); // trimRight; + }, + enumerable: false, + configurable: true + }); + HTMLElement.prototype.toString = function () { + var tag = this.rawTagName; + if (tag) { + var attrs = this.rawAttrs ? " ".concat(this.rawAttrs) : ''; + return this.voidTag.formatNode(tag, attrs, this.innerHTML); + } + return this.innerHTML; + }; + Object.defineProperty(HTMLElement.prototype, "innerHTML", { + get: function () { + return this.childNodes + .map(function (child) { + return child.toString(); + }) + .join(''); + }, + set: function (content) { + var r = parse(content, this._parseOptions); + var nodes = r.childNodes.length ? r.childNodes : [new text_1.default(content, this)]; + resetParent(nodes, this); + resetParent(this.childNodes, null); + this.childNodes = nodes; + }, + enumerable: false, + configurable: true + }); + HTMLElement.prototype.set_content = function (content, options) { + if (options === void 0) { options = {}; } + if (content instanceof node_1.default) { + content = [content]; + } + else if (typeof content == 'string') { + options = __assign(__assign({}, this._parseOptions), options); + var r = parse(content, options); + content = r.childNodes.length ? r.childNodes : [new text_1.default(r.innerHTML, this)]; + } + resetParent(this.childNodes, null); + resetParent(content, this); + this.childNodes = content; + return this; + }; + HTMLElement.prototype.replaceWith = function () { + var _this = this; + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + var parent = this.parentNode; + var content = nodes + .map(function (node) { + if (node instanceof node_1.default) { + return [node]; + } + else if (typeof node == 'string') { + var r = parse(node, _this._parseOptions); + return r.childNodes.length ? r.childNodes : [new text_1.default(node, _this)]; + } + return []; + }) + .flat(); + var idx = parent.childNodes.findIndex(function (child) { + return child === _this; + }); + resetParent([this], null); + parent.childNodes = __spreadArray(__spreadArray(__spreadArray([], parent.childNodes.slice(0, idx), true), resetParent(content, parent), true), parent.childNodes.slice(idx + 1), true); + return this; + }; + Object.defineProperty(HTMLElement.prototype, "outerHTML", { + get: function () { + return this.toString(); + }, + enumerable: false, + configurable: true + }); + /** + * Trim element from right (in block) after seeing pattern in a TextNode. + * @param {RegExp} pattern pattern to find + * @return {HTMLElement} reference to current node + */ + HTMLElement.prototype.trimRight = function (pattern) { + for (var i = 0; i < this.childNodes.length; i++) { + var childNode = this.childNodes[i]; + if (childNode.nodeType === type_1.default.ELEMENT_NODE) { + childNode.trimRight(pattern); + } + else { + var index = childNode.rawText.search(pattern); + if (index > -1) { + childNode.rawText = childNode.rawText.substr(0, index); + // trim all following nodes. + this.childNodes.length = i + 1; + } + } + } + return this; + }; + Object.defineProperty(HTMLElement.prototype, "structure", { + /** + * Get DOM structure + * @return {string} strucutre + */ + get: function () { + var res = []; + var indention = 0; + function write(str) { + res.push(' '.repeat(indention) + str); + } + function dfs(node) { + var idStr = node.id ? "#".concat(node.id) : ''; + var classStr = node.classList.length ? ".".concat(node.classList.value.join('.')) : ''; // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-call + write("".concat(node.rawTagName).concat(idStr).concat(classStr)); + indention++; + node.childNodes.forEach(function (childNode) { + if (childNode.nodeType === type_1.default.ELEMENT_NODE) { + dfs(childNode); + } + else if (childNode.nodeType === type_1.default.TEXT_NODE) { + if (!childNode.isWhitespace) { + write('#text'); + } + } + }); + indention--; + } + dfs(this); + return res.join('\n'); + }, + enumerable: false, + configurable: true + }); + /** + * Remove whitespaces in this sub tree. + * @return {HTMLElement} pointer to this + */ + HTMLElement.prototype.removeWhitespace = function () { + var _this = this; + var o = 0; + this.childNodes.forEach(function (node) { + if (node.nodeType === type_1.default.TEXT_NODE) { + if (node.isWhitespace) { + return; + } + node.rawText = node.trimmedRawText; + } + else if (node.nodeType === type_1.default.ELEMENT_NODE) { + node.removeWhitespace(); + } + _this.childNodes[o++] = node; + }); + this.childNodes.length = o; + return this; + }; + /** + * Query CSS selector to find matching nodes. + * @param {string} selector Simplified CSS selector + * @return {HTMLElement[]} matching elements + */ + HTMLElement.prototype.querySelectorAll = function (selector) { + return (0, css_select_1.selectAll)(selector, this, { + xmlMode: true, + adapter: matcher_1.default, + }); + }; + /** + * Query CSS Selector to find matching node. + * @param {string} selector Simplified CSS selector + * @return {(HTMLElement|null)} matching node + */ + HTMLElement.prototype.querySelector = function (selector) { + return (0, css_select_1.selectOne)(selector, this, { + xmlMode: true, + adapter: matcher_1.default, + }); + }; + /** + * find elements by their tagName + * @param {string} tagName the tagName of the elements to select + */ + HTMLElement.prototype.getElementsByTagName = function (tagName) { + var upperCasedTagName = tagName.toUpperCase(); + var re = []; + var stack = []; + var currentNodeReference = this; + var index = 0; + // index turns to undefined once the stack is empty and the first condition occurs + // which happens once all relevant children are searched through + while (index !== undefined) { + var child = void 0; + // make it work with sparse arrays + do { + child = currentNodeReference.childNodes[index++]; + } while (index < currentNodeReference.childNodes.length && child === undefined); + // if the child does not exist we move on with the last provided index (which belongs to the parentNode) + if (child === undefined) { + currentNodeReference = currentNodeReference.parentNode; + index = stack.pop(); + continue; + } + if (child.nodeType === type_1.default.ELEMENT_NODE) { + // https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName#syntax + if (tagName === '*' || child.tagName === upperCasedTagName) + re.push(child); + // if children are existing push the current status to the stack and keep searching for elements in the level below + if (child.childNodes.length > 0) { + stack.push(index); + currentNodeReference = child; + index = 0; + } + } + } + return re; + }; + /** + * find element by it's id + * @param {string} id the id of the element to select + */ + HTMLElement.prototype.getElementById = function (id) { + var stack = []; + var currentNodeReference = this; + var index = 0; + // index turns to undefined once the stack is empty and the first condition occurs + // which happens once all relevant children are searched through + while (index !== undefined) { + var child = void 0; + // make it work with sparse arrays + do { + child = currentNodeReference.childNodes[index++]; + } while (index < currentNodeReference.childNodes.length && child === undefined); + // if the child does not exist we move on with the last provided index (which belongs to the parentNode) + if (child === undefined) { + currentNodeReference = currentNodeReference.parentNode; + index = stack.pop(); + continue; + } + if (child.nodeType === type_1.default.ELEMENT_NODE) { + if (child.id === id) { + return child; + } + ; + // if children are existing push the current status to the stack and keep searching for elements in the level below + if (child.childNodes.length > 0) { + stack.push(index); + currentNodeReference = child; + index = 0; + } + } + } + return null; + }; + /** + * traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null. + * @param selector a DOMString containing a selector list + */ + HTMLElement.prototype.closest = function (selector) { + var mapChild = new Map(); + var el = this; + var old = null; + function findOne(test, elems) { + var elem = null; + for (var i = 0, l = elems.length; i < l && !elem; i++) { + var el_1 = elems[i]; + if (test(el_1)) { + elem = el_1; + } + else { + var child = mapChild.get(el_1); + if (child) { + elem = findOne(test, [child]); + } + } + } + return elem; + } + while (el) { + mapChild.set(el, old); + old = el; + el = el.parentNode; + } + el = this; + while (el) { + var e = (0, css_select_1.selectOne)(selector, el, { + xmlMode: true, + adapter: __assign(__assign({}, matcher_1.default), { getChildren: function (node) { + var child = mapChild.get(node); + return child && [child]; + }, getSiblings: function (node) { + return [node]; + }, findOne: findOne, findAll: function () { + return []; + } }), + }); + if (e) { + return e; + } + el = el.parentNode; + } + return null; + }; + /** + * Append a child node to childNodes + * @param {Node} node node to append + * @return {Node} node appended + */ + HTMLElement.prototype.appendChild = function (node) { + // remove the node from it's parent + node.remove(); + this.childNodes.push(node); + node.parentNode = this; + return node; + }; + Object.defineProperty(HTMLElement.prototype, "firstChild", { + /** + * Get first child node + * @return {Node} first child node + */ + get: function () { + return this.childNodes[0]; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "lastChild", { + /** + * Get last child node + * @return {Node} last child node + */ + get: function () { + return (0, back_1.default)(this.childNodes); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "attrs", { + /** + * Get attributes + * @access private + * @return {Object} parsed and unescaped attributes + */ + get: function () { + if (this._attrs) { + return this._attrs; + } + this._attrs = {}; + var attrs = this.rawAttributes; + for (var key in attrs) { + var val = attrs[key] || ''; + this._attrs[key.toLowerCase()] = decode(val); + } + return this._attrs; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "attributes", { + get: function () { + var ret_attrs = {}; + var attrs = this.rawAttributes; + for (var key in attrs) { + var val = attrs[key] || ''; + ret_attrs[key] = decode(val); + } + return ret_attrs; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "rawAttributes", { + /** + * Get escaped (as-is) attributes + * @return {Object} parsed attributes + */ + get: function () { + if (this._rawAttrs) { + return this._rawAttrs; + } + var attrs = {}; + if (this.rawAttrs) { + var re = /([a-zA-Z()[\]#@$.?:][a-zA-Z0-9-_:()[\]#]*)(?:\s*=\s*((?:'[^']*')|(?:"[^"]*")|\S+))?/g; + var match = void 0; + while ((match = re.exec(this.rawAttrs))) { + var key = match[1]; + var val = match[2] || null; + if (val && (val[0] === "'" || val[0] === "\"")) + val = val.slice(1, val.length - 1); + attrs[key] = attrs[key] || val; + } + } + this._rawAttrs = attrs; + return attrs; + }, + enumerable: false, + configurable: true + }); + HTMLElement.prototype.removeAttribute = function (key) { + var _this = this; + var attrs = this.rawAttributes; + delete attrs[key]; + // Update this.attribute + if (this._attrs) { + delete this._attrs[key]; + } + // Update rawString + this.rawAttrs = Object.keys(attrs) + .map(function (name) { + var val = _this.quoteAttribute(attrs[name]); + if (val === undefined || val === 'null') { + return name; + } + return "".concat(name, "=").concat(val); + }) + .join(' '); + // Update this.id + if (key === 'id') { + this.id = ''; + } + return this; + }; + HTMLElement.prototype.hasAttribute = function (key) { + return key.toLowerCase() in this.attrs; + }; + /** + * Get an attribute + * @return {string} value of the attribute + */ + HTMLElement.prototype.getAttribute = function (key) { + return this.attrs[key.toLowerCase()]; + }; + /** + * Set an attribute value to the HTMLElement + * @param {string} key The attribute name + * @param {string} value The value to set, or null / undefined to remove an attribute + */ + HTMLElement.prototype.setAttribute = function (key, value) { + var _this = this; + if (arguments.length < 2) { + throw new Error("Failed to execute 'setAttribute' on 'Element'"); + } + var k2 = key.toLowerCase(); + var attrs = this.rawAttributes; + for (var k in attrs) { + if (k.toLowerCase() === k2) { + key = k; + break; + } + } + attrs[key] = String(value); + // update this.attrs + if (this._attrs) { + this._attrs[k2] = decode(attrs[key]); + } + // Update rawString + this.rawAttrs = Object.keys(attrs) + .map(function (name) { + var val = _this.quoteAttribute(attrs[name]); + if (val === 'null' || val === '""') + return name; + return "".concat(name, "=").concat(val); + }) + .join(' '); + // Update this.id + if (key === 'id') { + this.id = value; + } + return this; + }; + /** + * Replace all the attributes of the HTMLElement by the provided attributes + * @param {Attributes} attributes the new attribute set + */ + HTMLElement.prototype.setAttributes = function (attributes) { + var _this = this; + // Invalidate current this.attributes + if (this._attrs) { + delete this._attrs; + } + // Invalidate current this.rawAttributes + if (this._rawAttrs) { + delete this._rawAttrs; + } + // Update rawString + this.rawAttrs = Object.keys(attributes) + .map(function (name) { + var val = attributes[name]; + if (val === 'null' || val === '""') + return name; + return "".concat(name, "=").concat(_this.quoteAttribute(String(val))); + }) + .join(' '); + return this; + }; + HTMLElement.prototype.insertAdjacentHTML = function (where, html) { + var _a, _b, _c; + var _this = this; + if (arguments.length < 2) { + throw new Error('2 arguments required'); + } + var p = parse(html, this._parseOptions); + if (where === 'afterend') { + var idx = this.parentNode.childNodes.findIndex(function (child) { + return child === _this; + }); + resetParent(p.childNodes, this.parentNode); + (_a = this.parentNode.childNodes).splice.apply(_a, __spreadArray([idx + 1, 0], p.childNodes, false)); + } + else if (where === 'afterbegin') { + resetParent(p.childNodes, this); + (_b = this.childNodes).unshift.apply(_b, p.childNodes); + } + else if (where === 'beforeend') { + p.childNodes.forEach(function (n) { + _this.appendChild(n); + }); + } + else if (where === 'beforebegin') { + var idx = this.parentNode.childNodes.findIndex(function (child) { + return child === _this; + }); + resetParent(p.childNodes, this.parentNode); + (_c = this.parentNode.childNodes).splice.apply(_c, __spreadArray([idx, 0], p.childNodes, false)); + } + else { + throw new Error("The value provided ('".concat(where, "') is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'")); + } + return this; + // if (!where || html === undefined || html === null) { + // return; + // } + }; + Object.defineProperty(HTMLElement.prototype, "nextSibling", { + get: function () { + if (this.parentNode) { + var children = this.parentNode.childNodes; + var i = 0; + while (i < children.length) { + var child = children[i++]; + if (this === child) + return children[i] || null; + } + return null; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "nextElementSibling", { + get: function () { + if (this.parentNode) { + var children = this.parentNode.childNodes; + var i = 0; + var find = false; + while (i < children.length) { + var child = children[i++]; + if (find) { + if (child instanceof HTMLElement) { + return child || null; + } + } + else if (this === child) { + find = true; + } + } + return null; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "previousSibling", { + get: function () { + if (this.parentNode) { + var children = this.parentNode.childNodes; + var i = children.length; + while (i > 0) { + var child = children[--i]; + if (this === child) + return children[i - 1] || null; + } + return null; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "previousElementSibling", { + get: function () { + if (this.parentNode) { + var children = this.parentNode.childNodes; + var i = children.length; + var find = false; + while (i > 0) { + var child = children[--i]; + if (find) { + if (child instanceof HTMLElement) { + return child || null; + } + } + else if (this === child) { + find = true; + } + } + return null; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(HTMLElement.prototype, "classNames", { + get: function () { + return this.classList.toString(); + }, + enumerable: false, + configurable: true + }); + /** + * Clone this Node + */ + HTMLElement.prototype.clone = function () { + return parse(this.toString(), this._parseOptions).firstChild; + }; + return HTMLElement; +}(node_1.default)); +exports.default = HTMLElement; +// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name +var kMarkupPattern = /|<(\/?)([a-zA-Z][-.:0-9_a-zA-Z]*)((?:\s+[^>]*?(?:(?:'[^']*')|(?:"[^"]*"))?)*)\s*(\/?)>/g; +var kAttributePattern = /(?:^|\s)(id|class)\s*=\s*((?:'[^']*')|(?:"[^"]*")|\S+)/gi; +var kElementsClosedByOpening = { + li: { li: true, LI: true }, + LI: { li: true, LI: true }, + p: { p: true, div: true, P: true, DIV: true }, + P: { p: true, div: true, P: true, DIV: true }, + b: { div: true, DIV: true }, + B: { div: true, DIV: true }, + td: { td: true, th: true, TD: true, TH: true }, + TD: { td: true, th: true, TD: true, TH: true }, + th: { td: true, th: true, TD: true, TH: true }, + TH: { td: true, th: true, TD: true, TH: true }, + h1: { h1: true, H1: true }, + H1: { h1: true, H1: true }, + h2: { h2: true, H2: true }, + H2: { h2: true, H2: true }, + h3: { h3: true, H3: true }, + H3: { h3: true, H3: true }, + h4: { h4: true, H4: true }, + H4: { h4: true, H4: true }, + h5: { h5: true, H5: true }, + H5: { h5: true, H5: true }, + h6: { h6: true, H6: true }, + H6: { h6: true, H6: true }, +}; +var kElementsClosedByClosing = { + li: { ul: true, ol: true, UL: true, OL: true }, + LI: { ul: true, ol: true, UL: true, OL: true }, + a: { div: true, DIV: true }, + A: { div: true, DIV: true }, + b: { div: true, DIV: true }, + B: { div: true, DIV: true }, + i: { div: true, DIV: true }, + I: { div: true, DIV: true }, + p: { div: true, DIV: true }, + P: { div: true, DIV: true }, + td: { tr: true, table: true, TR: true, TABLE: true }, + TD: { tr: true, table: true, TR: true, TABLE: true }, + th: { tr: true, table: true, TR: true, TABLE: true }, + TH: { tr: true, table: true, TR: true, TABLE: true }, +}; +var frameflag = 'documentfragmentcontainer'; +/** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + * @param {string} data html + * @return {HTMLElement} root element + */ +function base_parse(data, options) { + var _a, _b; + if (options === void 0) { options = {}; } + var voidTag = new void_tag_1.default((_a = options === null || options === void 0 ? void 0 : options.voidTag) === null || _a === void 0 ? void 0 : _a.closingSlash, (_b = options === null || options === void 0 ? void 0 : options.voidTag) === null || _b === void 0 ? void 0 : _b.tags); + var elements = options.blockTextElements || { + script: true, + noscript: true, + style: true, + pre: true, + }; + var element_names = Object.keys(elements).filter(function (name) { + return Boolean(elements[name]); + }); + var kBlockTextElements = element_names.map(function (it) { return new RegExp("^".concat(it, "$"), 'i'); }); + var kIgnoreElements = element_names.filter(function (it) { return elements[it]; }).map(function (it) { return new RegExp("^".concat(it, "$"), 'i'); }); + function element_should_be_ignore(tag) { + return kIgnoreElements.some(function (it) { return it.test(tag); }); + } + function is_block_text_element(tag) { + return kBlockTextElements.some(function (it) { return it.test(tag); }); + } + var createRange = function (startPos, endPos) { return [startPos - frameFlagOffset, endPos - frameFlagOffset]; }; + var root = new HTMLElement(null, {}, '', null, [0, data.length], voidTag, options); + var currentParent = root; + var stack = [root]; + var lastTextPos = -1; + var noNestedTagIndex = undefined; + var match; + // https://github.com/taoqf/node-html-parser/issues/38 + data = "<".concat(frameflag, ">").concat(data, ""); + var lowerCaseTagName = options.lowerCaseTagName, fixNestedATags = options.fixNestedATags; + var dataEndPos = data.length - (frameflag.length + 2); + var frameFlagOffset = frameflag.length + 2; + while ((match = kMarkupPattern.exec(data))) { + // Note: Object destructuring here consistently tests as higher performance than array destructuring + // eslint-disable-next-line prefer-const + var matchText = match[0], leadingSlash = match[1], tagName = match[2], attributes = match[3], closingSlash = match[4]; + var matchLength = matchText.length; + var tagStartPos = kMarkupPattern.lastIndex - matchLength; + var tagEndPos = kMarkupPattern.lastIndex; + // Add TextNode if content + if (lastTextPos > -1) { + if (lastTextPos + matchLength < tagEndPos) { + var text = data.substring(lastTextPos, tagStartPos); + currentParent.appendChild(new text_1.default(text, currentParent, createRange(lastTextPos, tagStartPos))); + } + } + lastTextPos = kMarkupPattern.lastIndex; + // https://github.com/taoqf/node-html-parser/issues/38 + // Skip frameflag node + if (tagName === frameflag) + continue; + // Handle comments + if (matchText[1] === '!') { + if (options.comment) { + // Only keep what is in between + var text = data.substring(tagStartPos + 4, tagEndPos - 3); + currentParent.appendChild(new comment_1.default(text, currentParent, createRange(tagStartPos, tagEndPos))); + } + continue; + } + /* -- Handle tag matching -- */ + // Fix tag casing if necessary + if (lowerCaseTagName) + tagName = tagName.toLowerCase(); + // Handle opening tags (ie. not ) + if (!leadingSlash) { + /* Populate attributes */ + var attrs = {}; + for (var attMatch = void 0; (attMatch = kAttributePattern.exec(attributes));) { + var key = attMatch[1], val = attMatch[2]; + var isQuoted = val[0] === "'" || val[0] === "\""; + attrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val; + } + var parentTagName = currentParent.rawTagName; + if (!closingSlash && kElementsClosedByOpening[parentTagName]) { + if (kElementsClosedByOpening[parentTagName][tagName]) { + stack.pop(); + currentParent = (0, back_1.default)(stack); + } + } + // Prevent nested A tags by terminating the last A and starting a new one : see issue #144 + if (fixNestedATags && (tagName === 'a' || tagName === 'A')) { + if (noNestedTagIndex !== undefined) { + stack.splice(noNestedTagIndex); + currentParent = (0, back_1.default)(stack); + } + noNestedTagIndex = stack.length; + } + var tagEndPos_1 = kMarkupPattern.lastIndex; + var tagStartPos_1 = tagEndPos_1 - matchLength; + currentParent = currentParent.appendChild( + // Initialize range (end position updated later for closed tags) + new HTMLElement(tagName, attrs, attributes.slice(1), null, createRange(tagStartPos_1, tagEndPos_1), voidTag, options)); + stack.push(currentParent); + if (is_block_text_element(tagName)) { + // Find closing tag + var closeMarkup = ""); + var closeIndex = lowerCaseTagName + ? data.toLocaleLowerCase().indexOf(closeMarkup, kMarkupPattern.lastIndex) + : data.indexOf(closeMarkup, kMarkupPattern.lastIndex); + var textEndPos = closeIndex === -1 ? dataEndPos : closeIndex; + if (element_should_be_ignore(tagName)) { + var text = data.substring(tagEndPos_1, textEndPos); + if (text.length > 0 && /\S/.test(text)) { + currentParent.appendChild(new text_1.default(text, currentParent, createRange(tagEndPos_1, textEndPos))); + } + } + if (closeIndex === -1) { + lastTextPos = kMarkupPattern.lastIndex = data.length + 1; + } + else { + lastTextPos = kMarkupPattern.lastIndex = closeIndex + closeMarkup.length; + // Cause to be treated as self-closing, because no close found + leadingSlash = '/'; + } + } + } + // Handle closing tags or self-closed elements (ie or
) + if (leadingSlash || closingSlash || voidTag.isVoidElement(tagName)) { + while (true) { + if (noNestedTagIndex != null && (tagName === 'a' || tagName === 'A')) + noNestedTagIndex = undefined; + if (currentParent.rawTagName === tagName) { + // Update range end for closed tag + currentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1]; + stack.pop(); + currentParent = (0, back_1.default)(stack); + break; + } + else { + var parentTagName = currentParent.tagName; + // Trying to close current tag, and move on + if (kElementsClosedByClosing[parentTagName]) { + if (kElementsClosedByClosing[parentTagName][tagName]) { + stack.pop(); + currentParent = (0, back_1.default)(stack); + continue; + } + } + // Use aggressive strategy to handle unmatching markups. + break; + } + } + } + } + return stack; +} +exports.base_parse = base_parse; +/** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + */ +function parse(data, options) { + if (options === void 0) { options = {}; } + var stack = base_parse(data, options); + var root = stack[0]; + var _loop_1 = function () { + // Handle each error elements. + var last = stack.pop(); + var oneBefore = (0, back_1.default)(stack); + if (last.parentNode && last.parentNode.parentNode) { + if (last.parentNode === oneBefore && last.tagName === oneBefore.tagName) { + // Pair error case

handle : Fixes to

+ // this is wrong, becouse this will put the H3 outside the current right position which should be inside the current Html Element, see issue 152 for more info + if (options.parseNoneClosedTags !== true) { + oneBefore.removeChild(last); + last.childNodes.forEach(function (child) { + oneBefore.parentNode.appendChild(child); + }); + stack.pop(); + } + } + else { + // Single error

handle: Just removes

+ // Why remove? this is already a HtmlElement and the missing

is already added in this case. see issue 152 for more info + // eslint-disable-next-line no-lonely-if + if (options.parseNoneClosedTags !== true) { + oneBefore.removeChild(last); + last.childNodes.forEach(function (child) { + oneBefore.appendChild(child); + }); + } + } + } + else { + // If it's final element just skip. + } + }; + while (stack.length > 1) { + _loop_1(); + } + // response.childNodes.forEach((node) => { + // if (node instanceof HTMLElement) { + // node.parentNode = null; + // } + // }); + return root; +} +exports.parse = parse; +function resetParent(nodes, parent) { + return nodes.map(function (node) { + node.parentNode = parent; + return node; + }); +} diff --git a/node_modules/node-html-parser/dist/nodes/node.d.ts b/node_modules/node-html-parser/dist/nodes/node.d.ts new file mode 100644 index 00000000..11f6881a --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/node.d.ts @@ -0,0 +1,23 @@ +import NodeType from './type'; +import HTMLElement from './html'; +/** + * Node Class as base class for TextNode and HTMLElement. + */ +export default abstract class Node { + parentNode: HTMLElement; + abstract nodeType: NodeType; + childNodes: Node[]; + range: readonly [number, number]; + abstract text: string; + abstract rawText: string; + abstract toString(): string; + abstract clone(): Node; + constructor(parentNode?: HTMLElement, range?: [number, number]); + /** + * Remove current node + */ + remove(): this; + get innerText(): string; + get textContent(): string; + set textContent(val: string); +} diff --git a/node_modules/node-html-parser/dist/nodes/node.js b/node_modules/node-html-parser/dist/nodes/node.js new file mode 100644 index 00000000..54026ad7 --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/node.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var he_1 = require("he"); +/** + * Node Class as base class for TextNode and HTMLElement. + */ +var Node = /** @class */ (function () { + function Node(parentNode, range) { + if (parentNode === void 0) { parentNode = null; } + this.parentNode = parentNode; + this.childNodes = []; + Object.defineProperty(this, 'range', { + enumerable: false, + writable: true, + configurable: true, + value: range !== null && range !== void 0 ? range : [-1, -1] + }); + } + /** + * Remove current node + */ + Node.prototype.remove = function () { + var _this = this; + if (this.parentNode) { + var children = this.parentNode.childNodes; + this.parentNode.childNodes = children.filter(function (child) { + return _this !== child; + }); + this.parentNode = null; + } + return this; + }; + Object.defineProperty(Node.prototype, "innerText", { + get: function () { + return this.rawText; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Node.prototype, "textContent", { + get: function () { + return (0, he_1.decode)(this.rawText); + }, + set: function (val) { + this.rawText = (0, he_1.encode)(val); + }, + enumerable: false, + configurable: true + }); + return Node; +}()); +exports.default = Node; diff --git a/node_modules/node-html-parser/dist/nodes/text.d.ts b/node_modules/node-html-parser/dist/nodes/text.d.ts new file mode 100644 index 00000000..959d8ca8 --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/text.d.ts @@ -0,0 +1,43 @@ +import HTMLElement from './html'; +import Node from './node'; +import NodeType from './type'; +/** + * TextNode to contain a text element in DOM tree. + * @param {string} value [description] + */ +export default class TextNode extends Node { + clone(): TextNode; + constructor(rawText: string, parentNode?: HTMLElement, range?: [number, number]); + /** + * Node Type declaration. + * @type {Number} + */ + nodeType: NodeType; + private _rawText; + private _trimmedRawText?; + private _trimmedText?; + get rawText(): string; + /** + * Set rawText and invalidate trimmed caches + */ + set rawText(text: string); + /** + * Returns raw text with all whitespace trimmed except single leading/trailing non-breaking space + */ + get trimmedRawText(): string; + /** + * Returns text with all whitespace trimmed except single leading/trailing non-breaking space + */ + get trimmedText(): string; + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get text(): string; + /** + * Detect if the node contains only white space. + * @return {boolean} + */ + get isWhitespace(): boolean; + toString(): string; +} diff --git a/node_modules/node-html-parser/dist/nodes/text.js b/node_modules/node-html-parser/dist/nodes/text.js new file mode 100644 index 00000000..9a525ee2 --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/text.js @@ -0,0 +1,143 @@ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var he_1 = require("he"); +var node_1 = __importDefault(require("./node")); +var type_1 = __importDefault(require("./type")); +/** + * TextNode to contain a text element in DOM tree. + * @param {string} value [description] + */ +var TextNode = /** @class */ (function (_super) { + __extends(TextNode, _super); + function TextNode(rawText, parentNode, range) { + if (parentNode === void 0) { parentNode = null; } + var _this = _super.call(this, parentNode, range) || this; + /** + * Node Type declaration. + * @type {Number} + */ + _this.nodeType = type_1.default.TEXT_NODE; + _this._rawText = rawText; + return _this; + } + TextNode.prototype.clone = function () { + return new TextNode(this._rawText, null); + }; + Object.defineProperty(TextNode.prototype, "rawText", { + get: function () { + return this._rawText; + }, + /** + * Set rawText and invalidate trimmed caches + */ + set: function (text) { + this._rawText = text; + this._trimmedRawText = void 0; + this._trimmedText = void 0; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TextNode.prototype, "trimmedRawText", { + /** + * Returns raw text with all whitespace trimmed except single leading/trailing non-breaking space + */ + get: function () { + if (this._trimmedRawText !== undefined) + return this._trimmedRawText; + this._trimmedRawText = trimText(this.rawText); + return this._trimmedRawText; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TextNode.prototype, "trimmedText", { + /** + * Returns text with all whitespace trimmed except single leading/trailing non-breaking space + */ + get: function () { + if (this._trimmedText !== undefined) + return this._trimmedText; + this._trimmedText = trimText(this.text); + return this._trimmedText; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TextNode.prototype, "text", { + /** + * Get unescaped text value of current node and its children. + * @return {string} text content + */ + get: function () { + return (0, he_1.decode)(this.rawText); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(TextNode.prototype, "isWhitespace", { + /** + * Detect if the node contains only white space. + * @return {boolean} + */ + get: function () { + return /^(\s| )*$/.test(this.rawText); + }, + enumerable: false, + configurable: true + }); + TextNode.prototype.toString = function () { + return this.rawText; + }; + return TextNode; +}(node_1.default)); +exports.default = TextNode; +/** + * Trim whitespace except single leading/trailing non-breaking space + */ +function trimText(text) { + var i = 0; + var startPos; + var endPos; + while (i >= 0 && i < text.length) { + if (/\S/.test(text[i])) { + if (startPos === undefined) { + startPos = i; + i = text.length; + } + else { + endPos = i; + i = void 0; + } + } + if (startPos === undefined) + i++; + else + i--; + } + if (startPos === undefined) + startPos = 0; + if (endPos === undefined) + endPos = text.length - 1; + var hasLeadingSpace = startPos > 0 && /[^\S\r\n]/.test(text[startPos - 1]); + var hasTrailingSpace = endPos < (text.length - 1) && /[^\S\r\n]/.test(text[endPos + 1]); + return (hasLeadingSpace ? ' ' : '') + text.slice(startPos, endPos + 1) + (hasTrailingSpace ? ' ' : ''); +} diff --git a/node_modules/node-html-parser/dist/nodes/type.d.ts b/node_modules/node-html-parser/dist/nodes/type.d.ts new file mode 100644 index 00000000..32cc815b --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/type.d.ts @@ -0,0 +1,6 @@ +declare enum NodeType { + ELEMENT_NODE = 1, + TEXT_NODE = 3, + COMMENT_NODE = 8 +} +export default NodeType; diff --git a/node_modules/node-html-parser/dist/nodes/type.js b/node_modules/node-html-parser/dist/nodes/type.js new file mode 100644 index 00000000..d3848b6f --- /dev/null +++ b/node_modules/node-html-parser/dist/nodes/type.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var NodeType; +(function (NodeType) { + NodeType[NodeType["ELEMENT_NODE"] = 1] = "ELEMENT_NODE"; + NodeType[NodeType["TEXT_NODE"] = 3] = "TEXT_NODE"; + NodeType[NodeType["COMMENT_NODE"] = 8] = "COMMENT_NODE"; +})(NodeType || (NodeType = {})); +exports.default = NodeType; diff --git a/node_modules/node-html-parser/dist/parse.d.ts b/node_modules/node-html-parser/dist/parse.d.ts new file mode 100644 index 00000000..0ef09572 --- /dev/null +++ b/node_modules/node-html-parser/dist/parse.d.ts @@ -0,0 +1 @@ +export { parse as default } from './nodes/html'; diff --git a/node_modules/node-html-parser/dist/parse.js b/node_modules/node-html-parser/dist/parse.js new file mode 100644 index 00000000..b016f8b4 --- /dev/null +++ b/node_modules/node-html-parser/dist/parse.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = void 0; +var html_1 = require("./nodes/html"); +Object.defineProperty(exports, "default", { enumerable: true, get: function () { return html_1.parse; } }); diff --git a/node_modules/node-html-parser/dist/valid.d.ts b/node_modules/node-html-parser/dist/valid.d.ts new file mode 100644 index 00000000..c834dd95 --- /dev/null +++ b/node_modules/node-html-parser/dist/valid.d.ts @@ -0,0 +1,6 @@ +import { Options } from './nodes/html'; +/** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + */ +export default function valid(data: string, options?: Partial): boolean; diff --git a/node_modules/node-html-parser/dist/valid.js b/node_modules/node-html-parser/dist/valid.js new file mode 100644 index 00000000..ed9c9be3 --- /dev/null +++ b/node_modules/node-html-parser/dist/valid.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var html_1 = require("./nodes/html"); +/** + * Parses HTML and returns a root element + * Parse a chuck of HTML source. + */ +function valid(data, options) { + if (options === void 0) { options = {}; } + var stack = (0, html_1.base_parse)(data, options); + return Boolean(stack.length === 1); +} +exports.default = valid; diff --git a/node_modules/node-html-parser/dist/void-tag.d.ts b/node_modules/node-html-parser/dist/void-tag.d.ts new file mode 100644 index 00000000..49860310 --- /dev/null +++ b/node_modules/node-html-parser/dist/void-tag.d.ts @@ -0,0 +1,7 @@ +export default class VoidTag { + addClosingSlash: boolean; + private voidTags; + constructor(addClosingSlash?: boolean, tags?: string[]); + formatNode(tag: string, attrs: string, innerHTML: string): string; + isVoidElement(tag: string): boolean; +} diff --git a/node_modules/node-html-parser/dist/void-tag.js b/node_modules/node-html-parser/dist/void-tag.js new file mode 100644 index 00000000..b5ddca41 --- /dev/null +++ b/node_modules/node-html-parser/dist/void-tag.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var VoidTag = /** @class */ (function () { + function VoidTag(addClosingSlash, tags) { + if (addClosingSlash === void 0) { addClosingSlash = false; } + this.addClosingSlash = addClosingSlash; + if (Array.isArray(tags)) { + this.voidTags = tags.reduce(function (set, tag) { + return set.add(tag.toLowerCase()).add(tag.toUpperCase()).add(tag); + }, new Set()); + } + else { + this.voidTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'].reduce(function (set, tag) { + return set.add(tag.toLowerCase()).add(tag.toUpperCase()).add(tag); + }, new Set()); + } + } + VoidTag.prototype.formatNode = function (tag, attrs, innerHTML) { + var addClosingSlash = this.addClosingSlash; + var closingSpace = (addClosingSlash && attrs && !attrs.endsWith(' ')) ? ' ' : ''; + var closingSlash = addClosingSlash ? "".concat(closingSpace, "/") : ''; + return this.isVoidElement(tag.toLowerCase()) ? "<".concat(tag).concat(attrs).concat(closingSlash, ">") : "<".concat(tag).concat(attrs, ">").concat(innerHTML, ""); + }; + VoidTag.prototype.isVoidElement = function (tag) { + return this.voidTags.has(tag); + }; + return VoidTag; +}()); +exports.default = VoidTag; diff --git a/node_modules/node-html-parser/package.json b/node_modules/node-html-parser/package.json new file mode 100644 index 00000000..172147a9 --- /dev/null +++ b/node_modules/node-html-parser/package.json @@ -0,0 +1,113 @@ +{ + "name": "node-html-parser", + "version": "6.1.9", + "description": "A very fast HTML parser, generating a simplified DOM, with basic element query support.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "compile": "tsc", + "build": "npm run lint && npm run clean && npm run compile:cjs && npm run compile:amd", + "compile:cjs": "tsc -m commonjs", + "watch": "npx tsc -m commonjs --watch --preserveWatchOutput", + "compile:amd": "tsc -t es5 -m amd -d false --outFile ./dist/main.js", + "lint": "eslint ./src/*.ts ./src/**/*.ts", + "---------------": "", + "test": "yarn run test:target", + "test:src": "cross-env TEST_TARGET=src yarn run test", + "test:dist": "cross-env TEST_TARGET=dist yarn run test", + "benchmark": "node ./test/benchmark/compare.mjs", + "--------------- ": "", + "clean": "npx rimraf ./dist/", + "clean:global": "yarn run clean && npx rimraf yarn.lock test/yarn.lock test/node_modules node_modules", + "reset": "yarn run clean:global && yarn install && yarn build", + "--------------- ": "", + "test:target": "mocha --recursive \"./test/tests\"", + "test:ci": "cross-env TEST_TARGET=dist yarn run test:target", + "posttest": "yarn run benchmark", + "prepare": "cd test && yarn install", + "release": "standard-version && git push --follow-tags origin main" + }, + "keywords": [ + "html", + "parser", + "nodejs", + "typescript" + ], + "files": [ + "dist", + "README.md", + "LICENSE", + "CHANGELOG.md" + ], + "author": "Xiaoyi Shi ", + "contributors": [ + "taoqf ", + "Ron S. " + ], + "license": "MIT", + "publishConfig": { + "registry": "https://registry.npmjs.org" + }, + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + }, + "devDependencies": { + "@types/entities": "latest", + "@types/he": "latest", + "@types/node": "latest", + "@typescript-eslint/eslint-plugin": "latest", + "@typescript-eslint/eslint-plugin-tslint": "latest", + "@typescript-eslint/parser": "latest", + "blanket": "latest", + "cheerio": "^1.0.0-rc.12", + "cross-env": "^7.0.3", + "eslint": "^8.23.1", + "eslint-config-prettier": "latest", + "eslint-plugin-import": "latest", + "high5": "^1.0.0", + "html-dom-parser": "^3.1.2", + "html-parser": "^0.11.0", + "html5parser": "^2.0.2", + "htmljs-parser": "^5.1.4", + "htmlparser": "^1.7.7", + "htmlparser-benchmark": "^1.1.3", + "htmlparser2": "^8.0.1", + "mocha": "latest", + "mocha-each": "^2.0.1", + "neutron-html5parser": "^0.2.0", + "np": "latest", + "parse5": "^7.1.1", + "rimraf": "^3.0.2", + "saxes": "^6.0.0", + "should": "latest", + "spec": "latest", + "standard-version": "^9.5.0", + "travis-cov": "latest", + "ts-node": "^10.9.1", + "typescript": "latest" + }, + "config": { + "blanket": { + "pattern": "./dist/index.js", + "data-cover-never": [ + "node_modules" + ] + }, + "travis-cov": { + "threshold": 70 + } + }, + "directories": { + "test": "test" + }, + "repository": { + "type": "git", + "url": "https://github.com/taoqf/node-fast-html-parser.git" + }, + "bugs": { + "url": "https://github.com/taoqf/node-fast-html-parser/issues" + }, + "homepage": "https://github.com/taoqf/node-fast-html-parser", + "sideEffects": false +} diff --git a/node_modules/nth-check/LICENSE b/node_modules/nth-check/LICENSE new file mode 100644 index 00000000..c464f863 --- /dev/null +++ b/node_modules/nth-check/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/nth-check/README.md b/node_modules/nth-check/README.md new file mode 100644 index 00000000..7a19d64f --- /dev/null +++ b/node_modules/nth-check/README.md @@ -0,0 +1,136 @@ +# nth-check [![Build Status](https://travis-ci.org/fb55/nth-check.svg)](https://travis-ci.org/fb55/nth-check) + +Parses and compiles CSS nth-checks to highly optimized functions. + +### About + +This module can be used to parse & compile nth-checks, as they are found in CSS 3's `nth-child()` and `nth-last-of-type()`. It can be used to check if a given index matches a given nth-rule, or to generate a sequence of indices matching a given nth-rule. + +`nth-check` focusses on speed, providing optimized functions for different kinds of nth-child formulas, while still following the [spec](http://www.w3.org/TR/css3-selectors/#nth-child-pseudo). + +### API + +```js +import nthCheck, { parse, compile } from "nth-check"; +``` + +##### `nthCheck(formula)` + +Parses and compiles a formula to a highly optimized function. Combination of `parse` and `compile`. + +If the formula doesn't match any elements, it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. Otherwise, a function accepting an _index_ is returned, which returns whether or not the passed _index_ matches the formula. + +**Note**: The nth-rule starts counting at `1`, the returned function at `0`. + +**Example:** + +```js +const check = nthCheck("2n+3"); + +check(0); // `false` +check(1); // `false` +check(2); // `true` +check(3); // `false` +check(4); // `true` +check(5); // `false` +check(6); // `true` +``` + +##### `parse(formula)` + +Parses the expression, throws an `Error` if it fails. Otherwise, returns an array containing the integer step size and the integer offset of the nth rule. + +**Example:** + +```js +parse("2n+3"); // [2, 3] +``` + +##### `compile([a, b])` + +Takes an array with two elements (as returned by `.parse`) and returns a highly optimized function. + +**Example:** + +```js +const check = compile([2, 3]); + +check(0); // `false` +check(1); // `false` +check(2); // `true` +check(3); // `false` +check(4); // `true` +check(5); // `false` +check(6); // `true` +``` + +##### `generate([a, b])` + +Returns a function that produces a monotonously increasing sequence of indices. + +If the sequence has an end, the returned function will return `null` after the last index in the sequence. + +**Example:** An always increasing sequence + +```js +const gen = nthCheck.generate([2, 3]); + +gen(); // `1` +gen(); // `3` +gen(); // `5` +gen(); // `8` +gen(); // `11` +``` + +**Example:** With an end value + +```js +const gen = nthCheck.generate([-2, 5]); + +gen(); // 0 +gen(); // 2 +gen(); // 4 +gen(); // null +``` + +##### `sequence(formula)` + +Parses and compiles a formula to a generator that produces a sequence of indices. Combination of `parse` and `generate`. + +**Example:** An always increasing sequence + +```js +const gen = nthCheck.sequence("2n+3"); + +gen(); // `1` +gen(); // `3` +gen(); // `5` +gen(); // `8` +gen(); // `11` +``` + +**Example:** With an end value + +```js +const gen = nthCheck.sequence("-2n+5"); + +gen(); // 0 +gen(); // 2 +gen(); // 4 +gen(); // null +``` + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## `nth-check` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `nth-check` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-nth-check?utm_source=npm-nth-check&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/nth-check/lib/compile.d.ts b/node_modules/nth-check/lib/compile.d.ts new file mode 100644 index 00000000..63e9be56 --- /dev/null +++ b/node_modules/nth-check/lib/compile.d.ts @@ -0,0 +1,55 @@ +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +export declare function compile(parsed: [a: number, b: number]): (index: number) => boolean; +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function generate(parsed: [a: number, b: number]): () => number | null; +//# sourceMappingURL=compile.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/compile.d.ts.map b/node_modules/nth-check/lib/compile.d.ts.map new file mode 100644 index 00000000..bb64f76c --- /dev/null +++ b/node_modules/nth-check/lib/compile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CACnB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAC/B,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAgC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,IAAI,CA+B5E"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/compile.js b/node_modules/nth-check/lib/compile.js new file mode 100644 index 00000000..cef1af44 --- /dev/null +++ b/node_modules/nth-check/lib/compile.js @@ -0,0 +1,121 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.generate = exports.compile = void 0; +var boolbase_1 = __importDefault(require("boolbase")); +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +function compile(parsed) { + var a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + var b = parsed[1] - 1; + /* + * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`. + * Besides, the specification states that no elements are + * matched when `a` and `b` are 0. + * + * `b < 0` here as we subtracted 1 from `b` above. + */ + if (b < 0 && a <= 0) + return boolbase_1.default.falseFunc; + // When `a` is in the range -1..1, it matches any element (so only `b` is checked). + if (a === -1) + return function (index) { return index <= b; }; + if (a === 0) + return function (index) { return index === b; }; + // When `b <= 0` and `a === 1`, they match any element. + if (a === 1) + return b < 0 ? boolbase_1.default.trueFunc : function (index) { return index >= b; }; + /* + * Otherwise, modulo can be used to check if there is a match. + * + * Modulo doesn't care about the sign, so let's use `a`s absolute value. + */ + var absA = Math.abs(a); + // Get `b mod a`, + a if this is negative. + var bMod = ((b % absA) + absA) % absA; + return a > 1 + ? function (index) { return index >= b && index % absA === bMod; } + : function (index) { return index <= b && index % absA === bMod; }; +} +exports.compile = compile; +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +function generate(parsed) { + var a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + var b = parsed[1] - 1; + var n = 0; + // Make sure to always return an increasing sequence + if (a < 0) { + var aPos_1 = -a; + // Get `b mod a` + var minValue_1 = ((b % aPos_1) + aPos_1) % aPos_1; + return function () { + var val = minValue_1 + aPos_1 * n++; + return val > b ? null : val; + }; + } + if (a === 0) + return b < 0 + ? // There are no result — always return `null` + function () { return null; } + : // Return `b` exactly once + function () { return (n++ === 0 ? b : null); }; + if (b < 0) { + b += a * Math.ceil(-b / a); + } + return function () { return a * n++ + b; }; +} +exports.generate = generate; +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/compile.js.map b/node_modules/nth-check/lib/compile.js.map new file mode 100644 index 00000000..06ec5b9a --- /dev/null +++ b/node_modules/nth-check/lib/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.d.ts b/node_modules/nth-check/lib/esm/compile.d.ts new file mode 100644 index 00000000..63e9be56 --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.d.ts @@ -0,0 +1,55 @@ +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +export declare function compile(parsed: [a: number, b: number]): (index: number) => boolean; +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function generate(parsed: [a: number, b: number]): () => number | null; +//# sourceMappingURL=compile.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.d.ts.map b/node_modules/nth-check/lib/esm/compile.d.ts.map new file mode 100644 index 00000000..bb64f76c --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CACnB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAC/B,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAgC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,IAAI,CA+B5E"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.js b/node_modules/nth-check/lib/esm/compile.js new file mode 100644 index 00000000..317d378c --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.js @@ -0,0 +1,113 @@ +import boolbase from "boolbase"; +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +export function compile(parsed) { + const a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + const b = parsed[1] - 1; + /* + * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`. + * Besides, the specification states that no elements are + * matched when `a` and `b` are 0. + * + * `b < 0` here as we subtracted 1 from `b` above. + */ + if (b < 0 && a <= 0) + return boolbase.falseFunc; + // When `a` is in the range -1..1, it matches any element (so only `b` is checked). + if (a === -1) + return (index) => index <= b; + if (a === 0) + return (index) => index === b; + // When `b <= 0` and `a === 1`, they match any element. + if (a === 1) + return b < 0 ? boolbase.trueFunc : (index) => index >= b; + /* + * Otherwise, modulo can be used to check if there is a match. + * + * Modulo doesn't care about the sign, so let's use `a`s absolute value. + */ + const absA = Math.abs(a); + // Get `b mod a`, + a if this is negative. + const bMod = ((b % absA) + absA) % absA; + return a > 1 + ? (index) => index >= b && index % absA === bMod + : (index) => index <= b && index % absA === bMod; +} +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export function generate(parsed) { + const a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + let b = parsed[1] - 1; + let n = 0; + // Make sure to always return an increasing sequence + if (a < 0) { + const aPos = -a; + // Get `b mod a` + const minValue = ((b % aPos) + aPos) % aPos; + return () => { + const val = minValue + aPos * n++; + return val > b ? null : val; + }; + } + if (a === 0) + return b < 0 + ? // There are no result — always return `null` + () => null + : // Return `b` exactly once + () => (n++ === 0 ? b : null); + if (b < 0) { + b += a * Math.ceil(-b / a); + } + return () => a * n++ + b; +} +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.js.map b/node_modules/nth-check/lib/esm/compile.js.map new file mode 100644 index 00000000..8eccbbab --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CACnB,MAA8B;IAE9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAExB;;;;;;OAMG;IACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC;IAE/C,mFAAmF;IACnF,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;IAC3C,uDAAuD;IACvD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;IAEtE;;;;OAIG;IACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzB,0CAA0C;IAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC;QACR,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI;QAChD,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA8B;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,6DAA6D;IAC7D,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,oDAAoD;IACpD,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QAChB,gBAAgB;QAChB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC5C,OAAO,GAAG,EAAE;YACR,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAElC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC;KACL;IAED,IAAI,CAAC,KAAK,CAAC;QACP,OAAO,CAAC,GAAG,CAAC;YACR,CAAC,CAAC,6CAA6C;gBAC7C,GAAG,EAAE,CAAC,IAAI;YACZ,CAAC,CAAC,0BAA0B;gBAC1B,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9B;IAED,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.d.ts b/node_modules/nth-check/lib/esm/index.d.ts new file mode 100644 index 00000000..2cddd39d --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.d.ts @@ -0,0 +1,59 @@ +import { parse } from "./parse.js"; +import { compile, generate } from "./compile.js"; +export { parse, compile, generate }; +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +export default function nthCheck(formula: string): (index: number) => boolean; +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function sequence(formula: string): () => number | null; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.d.ts.map b/node_modules/nth-check/lib/esm/index.d.ts.map new file mode 100644 index 00000000..17f9cdbd --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAE5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,MAAM,GAAG,IAAI,CAE7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.js b/node_modules/nth-check/lib/esm/index.js new file mode 100644 index 00000000..ae0a6f88 --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.js @@ -0,0 +1,63 @@ +import { parse } from "./parse.js"; +import { compile, generate } from "./compile.js"; +export { parse, compile, generate }; +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +export default function nthCheck(formula) { + return compile(parse(formula)); +} +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export function sequence(formula) { + return generate(parse(formula)); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.js.map b/node_modules/nth-check/lib/esm/index.js.map new file mode 100644 index 00000000..f0b69063 --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/package.json b/node_modules/nth-check/lib/esm/package.json new file mode 100644 index 00000000..089153bc --- /dev/null +++ b/node_modules/nth-check/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/nth-check/lib/esm/parse.d.ts b/node_modules/nth-check/lib/esm/parse.d.ts new file mode 100644 index 00000000..b4f817b6 --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.d.ts @@ -0,0 +1,9 @@ +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +export declare function parse(formula: string): [a: number, b: number]; +//# sourceMappingURL=parse.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/parse.d.ts.map b/node_modules/nth-check/lib/esm/parse.d.ts.map new file mode 100644 index 00000000..8cd4788b --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CA6E7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/parse.js b/node_modules/nth-check/lib/esm/parse.js new file mode 100644 index 00000000..96d1d48e --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.js @@ -0,0 +1,73 @@ +// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo +// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is " \t\r\n\f" +const whitespace = new Set([9, 10, 12, 13, 32]); +const ZERO = "0".charCodeAt(0); +const NINE = "9".charCodeAt(0); +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +export function parse(formula) { + formula = formula.trim().toLowerCase(); + if (formula === "even") { + return [2, 0]; + } + else if (formula === "odd") { + return [2, 1]; + } + // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? + let idx = 0; + let a = 0; + let sign = readSign(); + let number = readNumber(); + if (idx < formula.length && formula.charAt(idx) === "n") { + idx++; + a = sign * (number !== null && number !== void 0 ? number : 1); + skipWhitespace(); + if (idx < formula.length) { + sign = readSign(); + skipWhitespace(); + number = readNumber(); + } + else { + sign = number = 0; + } + } + // Throw if there is anything else + if (number === null || idx < formula.length) { + throw new Error(`n-th rule couldn't be parsed ('${formula}')`); + } + return [a, sign * number]; + function readSign() { + if (formula.charAt(idx) === "-") { + idx++; + return -1; + } + if (formula.charAt(idx) === "+") { + idx++; + } + return 1; + } + function readNumber() { + const start = idx; + let value = 0; + while (idx < formula.length && + formula.charCodeAt(idx) >= ZERO && + formula.charCodeAt(idx) <= NINE) { + value = value * 10 + (formula.charCodeAt(idx) - ZERO); + idx++; + } + // Return `null` if we didn't read anything. + return idx === start ? null : value; + } + function skipWhitespace() { + while (idx < formula.length && + whitespace.has(formula.charCodeAt(idx))) { + idx++; + } + } +} +//# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/parse.js.map b/node_modules/nth-check/lib/esm/parse.js.map new file mode 100644 index 00000000..33b6e330 --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.d.ts b/node_modules/nth-check/lib/index.d.ts new file mode 100644 index 00000000..2cddd39d --- /dev/null +++ b/node_modules/nth-check/lib/index.d.ts @@ -0,0 +1,59 @@ +import { parse } from "./parse.js"; +import { compile, generate } from "./compile.js"; +export { parse, compile, generate }; +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +export default function nthCheck(formula: string): (index: number) => boolean; +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function sequence(formula: string): () => number | null; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.d.ts.map b/node_modules/nth-check/lib/index.d.ts.map new file mode 100644 index 00000000..17f9cdbd --- /dev/null +++ b/node_modules/nth-check/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAE5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,MAAM,GAAG,IAAI,CAE7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.js b/node_modules/nth-check/lib/index.js new file mode 100644 index 00000000..30a7e29c --- /dev/null +++ b/node_modules/nth-check/lib/index.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.sequence = exports.generate = exports.compile = exports.parse = void 0; +var parse_js_1 = require("./parse.js"); +Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_js_1.parse; } }); +var compile_js_1 = require("./compile.js"); +Object.defineProperty(exports, "compile", { enumerable: true, get: function () { return compile_js_1.compile; } }); +Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return compile_js_1.generate; } }); +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +function nthCheck(formula) { + return (0, compile_js_1.compile)((0, parse_js_1.parse)(formula)); +} +exports.default = nthCheck; +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +function sequence(formula) { + return (0, compile_js_1.generate)((0, parse_js_1.parse)(formula)); +} +exports.sequence = sequence; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.js.map b/node_modules/nth-check/lib/index.js.map new file mode 100644 index 00000000..78a1bc57 --- /dev/null +++ b/node_modules/nth-check/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":";;;AAAA,uCAAmC;AAG1B,sFAHA,gBAAK,OAGA;AAFd,2CAAiD;AAEjC,wFAFP,oBAAO,OAEO;AAAE,yFAFP,qBAAQ,OAEO;AAEjC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAwB,QAAQ,CAAC,OAAe;IAC5C,OAAO,IAAA,oBAAO,EAAC,IAAA,gBAAK,EAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAFD,2BAEC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,QAAQ,CAAC,OAAe;IACpC,OAAO,IAAA,qBAAQ,EAAC,IAAA,gBAAK,EAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAFD,4BAEC"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.d.ts b/node_modules/nth-check/lib/parse.d.ts new file mode 100644 index 00000000..b4f817b6 --- /dev/null +++ b/node_modules/nth-check/lib/parse.d.ts @@ -0,0 +1,9 @@ +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +export declare function parse(formula: string): [a: number, b: number]; +//# sourceMappingURL=parse.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.d.ts.map b/node_modules/nth-check/lib/parse.d.ts.map new file mode 100644 index 00000000..8cd4788b --- /dev/null +++ b/node_modules/nth-check/lib/parse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CA6E7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.js b/node_modules/nth-check/lib/parse.js new file mode 100644 index 00000000..904244c4 --- /dev/null +++ b/node_modules/nth-check/lib/parse.js @@ -0,0 +1,77 @@ +"use strict"; +// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = void 0; +// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is " \t\r\n\f" +var whitespace = new Set([9, 10, 12, 13, 32]); +var ZERO = "0".charCodeAt(0); +var NINE = "9".charCodeAt(0); +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +function parse(formula) { + formula = formula.trim().toLowerCase(); + if (formula === "even") { + return [2, 0]; + } + else if (formula === "odd") { + return [2, 1]; + } + // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? + var idx = 0; + var a = 0; + var sign = readSign(); + var number = readNumber(); + if (idx < formula.length && formula.charAt(idx) === "n") { + idx++; + a = sign * (number !== null && number !== void 0 ? number : 1); + skipWhitespace(); + if (idx < formula.length) { + sign = readSign(); + skipWhitespace(); + number = readNumber(); + } + else { + sign = number = 0; + } + } + // Throw if there is anything else + if (number === null || idx < formula.length) { + throw new Error("n-th rule couldn't be parsed ('".concat(formula, "')")); + } + return [a, sign * number]; + function readSign() { + if (formula.charAt(idx) === "-") { + idx++; + return -1; + } + if (formula.charAt(idx) === "+") { + idx++; + } + return 1; + } + function readNumber() { + var start = idx; + var value = 0; + while (idx < formula.length && + formula.charCodeAt(idx) >= ZERO && + formula.charCodeAt(idx) <= NINE) { + value = value * 10 + (formula.charCodeAt(idx) - ZERO); + idx++; + } + // Return `null` if we didn't read anything. + return idx === start ? null : value; + } + function skipWhitespace() { + while (idx < formula.length && + whitespace.has(formula.charCodeAt(idx))) { + idx++; + } + } +} +exports.parse = parse; +//# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.js.map b/node_modules/nth-check/lib/parse.js.map new file mode 100644 index 00000000..c326b3d4 --- /dev/null +++ b/node_modules/nth-check/lib/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/nth-check/package.json b/node_modules/nth-check/package.json new file mode 100644 index 00000000..45ebe83b --- /dev/null +++ b/node_modules/nth-check/package.json @@ -0,0 +1,78 @@ +{ + "name": "nth-check", + "version": "2.1.1", + "description": "Parses and compiles CSS nth-checks to highly optimized functions.", + "author": "Felix Boehm ", + "license": "BSD-2-Clause", + "sideEffects": false, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + }, + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "files": [ + "lib/**/*" + ], + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint .", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/nth-check/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "repository": { + "type": "git", + "url": "https://github.com/fb55/nth-check" + }, + "keywords": [ + "nth-child", + "nth", + "css" + ], + "bugs": { + "url": "https://github.com/fb55/nth-check/issues" + }, + "homepage": "https://github.com/fb55/nth-check", + "dependencies": { + "boolbase": "^1.0.0" + }, + "devDependencies": { + "@types/boolbase": "^1.0.1", + "@types/jest": "^27.5.0", + "@types/node": "^17.0.35", + "@typescript-eslint/eslint-plugin": "^5.25.0", + "@typescript-eslint/parser": "^5.25.0", + "eslint": "^8.15.0", + "eslint-config-prettier": "^8.5.0", + "jest": "^27.5.1", + "prettier": "^2.6.2", + "ts-jest": "^27.1.4", + "typescript": "^4.6.4" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/property-expr/CHANGELOG.md b/node_modules/property-expr/CHANGELOG.md new file mode 100644 index 00000000..8c10af14 --- /dev/null +++ b/node_modules/property-expr/CHANGELOG.md @@ -0,0 +1,17 @@ +## [2.0.4](https://github.com/jquense/expr/compare/v2.0.3...v2.0.4) (2020-08-26) + + + + + +## [2.0.3](https://github.com/jquense/expr/compare/v2.0.2...v2.0.3) (2020-08-17) + + +### Bug Fixes + +* prototype polution vector ([df84691](https://github.com/jquense/expr/commit/df846910915d59f711ce63c1f817815bceab5ff7)) + + + + + diff --git a/node_modules/property-expr/LICENSE.txt b/node_modules/property-expr/LICENSE.txt new file mode 100644 index 00000000..397b66c3 --- /dev/null +++ b/node_modules/property-expr/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Jason Quense + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/property-expr/README.md b/node_modules/property-expr/README.md new file mode 100644 index 00000000..6a69a48c --- /dev/null +++ b/node_modules/property-expr/README.md @@ -0,0 +1,104 @@ +# expr + +Tiny property path utilities, including path parsing and metadata and deep property setters and getters + + npm install property-expr + +## Use + +Setters and getters: + +```js +let expr = require('property-expr') +let obj = { + foo: { + bar: ['hi', { buz: { baz: 'found me!' } }] + } +} + +let getBaz = expr.getter('foo.bar[1]["buz"].baz') +let setBaz = expr.setter('foo.bar[1]["buz"].baz') + +console.log(getBaz(obj)) // => 'found me!' +setBaz(obj, 'set me!') +console.log(obj.foo.bar[1].buz.baz) // => 'set me!' +``` + +### `getter(expression, [ safeAccess ])` + +Returns a function that accepts an obj and returns the value at the supplied expression. You can create a "safe" getter, which won't error out when accessing properties that don't exist, reducing existance checks befroe property access: + +```js +expr.getter('foo.bar.baz', true)({ foo: {} }) // => undefined +//instead of val = foo.bar && foo.bar.baz +``` + +### `setter(expression)` + +Returns a function that accepts an obj and a value and sets the property pointed to by the expression to the supplied value. + +### `expr(expression, [ safeAccess], [ paramName = 'data'])` + +Returns a normalized expression string pointing to a property on root object +`paramName`. + + expr.expr("foo['bar'][0].baz", true, 'obj') // => "(((obj.foo || {})['bar'] || {})[0])" + +### `split(path) -> Array` + +Returns an array of each path segment. + +```js +expr.split("foo['bar'][0].baz") // [ "foo", "'bar'", "0", "baz"] +``` + +### `forEach(path, iterator[, thisArg])` + +Iterate through a path but segment, with some additional helpful metadata about the segment. The iterator function is called with: `pathSegment`, `isBracket`, `isArray`, `idx`, `segments` + +```js +expr.forEach('foo["bar"][1]', function( + pathSegment, + isBracket, + isArray, + idx, + segments +) { + // 'foo' -> isBracket = false, isArray = false, idx = 0 + // '"bar"' -> isBracket = true, isArray = false, idx = 1 + // '0' -> isBracket = false, isArray = true, idx = 2 +}) +``` + +### `normalizePath(path)` + +Returns an array of path segments without quotes and spaces. + +```js +expr.normalizePath('foo["bar"][ "1" ][2][ " sss " ]') +// ['foo', 'bar', '1', '2', ' sss '] +``` + +### `new Cache(maxSize)` + +Just an utility class, returns an instance of cache. When the max size is exceeded, cache clears its storage. + +```js +var cache = new Cache(2) +cache.set('a', 123) // returns 123 +cache.get('a') // returns 123 +cache.clear() + +cache.set('a', 1) +cache.set('b', 2) // cache contains 2 values +cache.set('c', 3) // cache was cleaned automatically and contains 1 value +``` + +### CSP + +This pacakge used to rely on `new Function` to compile setters and getters into fast +reusable functions. Since `new Function` is forbidden by folks using Content Security Policy `unsafe-eval` +we've moved away from that approach. I believe that for most cases the perf hit is not noticable +but if it is in your case please reach out. + +If you really want to use the old version require `property-expr/compiler` instead diff --git a/node_modules/property-expr/compiler.js b/node_modules/property-expr/compiler.js new file mode 100644 index 00000000..70339b84 --- /dev/null +++ b/node_modules/property-expr/compiler.js @@ -0,0 +1,67 @@ +var { Cache, normalizePath, split, forEach } = require('./') + +var setCache = new Cache(512), + getCache = new Cache(512) + +function makeSafe(path, param) { + var result = param, + parts = split(path), + isLast + + forEach(parts, function (part, isBracket, isArray, idx, parts) { + isLast = idx === parts.length - 1 + + part = isBracket || isArray ? '[' + part + ']' : '.' + part + + result += part + (!isLast ? ' || {})' : ')') + }) + + return new Array(parts.length + 1).join('(') + result +} + +function expr(expression, safe, param) { + expression = expression || '' + + if (typeof safe === 'string') { + param = safe + safe = false + } + + param = param || 'data' + + if (expression && expression.charAt(0) !== '[') expression = '.' + expression + + return safe ? makeSafe(expression, param) : param + expression +} + +module.exports = { + expr, + setter: function (path) { + if ( + path.indexOf('__proto__') !== -1 || + path.indexOf('constructor') !== -1 || + path.indexOf('prototype') !== -1 + ) { + return (obj) => obj + } + + return ( + setCache.get(path) || + setCache.set( + path, + new Function('data, value', expr(path, 'data') + ' = value') + ) + ) + }, + + getter: function (path, safe) { + var key = path + '_' + safe + return ( + getCache.get(key) || + getCache.set( + key, + new Function('data', 'return ' + expr(path, safe, 'data')) + ) + ) + }, +} diff --git a/node_modules/property-expr/index.d.ts b/node_modules/property-expr/index.d.ts new file mode 100644 index 00000000..eea85829 --- /dev/null +++ b/node_modules/property-expr/index.d.ts @@ -0,0 +1,31 @@ +export interface Cache { + set(key: string, value: any): value + get(key: string): any + clear(): void +} + +export interface Expr { + setConfig(config: { contentSecurityPolicy: boolean }): void + + Cache: { + new (maxSize: number): Cache + } + + split(path: string): string[] + setter(path: string): (data: any, value: any) => any + getter(path: string, safe?: boolean): (data: any) => any + join(segments: string[]): string + forEach( + path: string | string[], + callback: ( + part: string, + isBracket: boolean, + isArray: boolean, + idx: number, + parts: string[] + ) => any + ): void +} + +declare const expr: Expr +export = expr diff --git a/node_modules/property-expr/index.js b/node_modules/property-expr/index.js new file mode 100644 index 00000000..7903e462 --- /dev/null +++ b/node_modules/property-expr/index.js @@ -0,0 +1,158 @@ +/** + * Based on Kendo UI Core expression code + */ +'use strict' + +function Cache(maxSize) { + this._maxSize = maxSize + this.clear() +} +Cache.prototype.clear = function () { + this._size = 0 + this._values = Object.create(null) +} +Cache.prototype.get = function (key) { + return this._values[key] +} +Cache.prototype.set = function (key, value) { + this._size >= this._maxSize && this.clear() + if (!(key in this._values)) this._size++ + + return (this._values[key] = value) +} + +var SPLIT_REGEX = /[^.^\]^[]+|(?=\[\]|\.\.)/g, + DIGIT_REGEX = /^\d+$/, + LEAD_DIGIT_REGEX = /^\d/, + SPEC_CHAR_REGEX = /[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g, + CLEAN_QUOTES_REGEX = /^\s*(['"]?)(.*?)(\1)\s*$/, + MAX_CACHE_SIZE = 512 + +var pathCache = new Cache(MAX_CACHE_SIZE), + setCache = new Cache(MAX_CACHE_SIZE), + getCache = new Cache(MAX_CACHE_SIZE) + +var config + +module.exports = { + Cache: Cache, + + split: split, + + normalizePath: normalizePath, + + setter: function (path) { + var parts = normalizePath(path) + + return ( + setCache.get(path) || + setCache.set(path, function setter(obj, value) { + var index = 0 + var len = parts.length + var data = obj + + while (index < len - 1) { + var part = parts[index] + if ( + part === '__proto__' || + part === 'constructor' || + part === 'prototype' + ) { + return obj + } + + data = data[parts[index++]] + } + data[parts[index]] = value + }) + ) + }, + + getter: function (path, safe) { + var parts = normalizePath(path) + return ( + getCache.get(path) || + getCache.set(path, function getter(data) { + var index = 0, + len = parts.length + while (index < len) { + if (data != null || !safe) data = data[parts[index++]] + else return + } + return data + }) + ) + }, + + join: function (segments) { + return segments.reduce(function (path, part) { + return ( + path + + (isQuoted(part) || DIGIT_REGEX.test(part) + ? '[' + part + ']' + : (path ? '.' : '') + part) + ) + }, '') + }, + + forEach: function (path, cb, thisArg) { + forEach(Array.isArray(path) ? path : split(path), cb, thisArg) + }, +} + +function normalizePath(path) { + return ( + pathCache.get(path) || + pathCache.set( + path, + split(path).map(function (part) { + return part.replace(CLEAN_QUOTES_REGEX, '$2') + }) + ) + ) +} + +function split(path) { + return path.match(SPLIT_REGEX) || [''] +} + +function forEach(parts, iter, thisArg) { + var len = parts.length, + part, + idx, + isArray, + isBracket + + for (idx = 0; idx < len; idx++) { + part = parts[idx] + + if (part) { + if (shouldBeQuoted(part)) { + part = '"' + part + '"' + } + + isBracket = isQuoted(part) + isArray = !isBracket && /^\d+$/.test(part) + + iter.call(thisArg, part, isBracket, isArray, idx, parts) + } + } +} + +function isQuoted(str) { + return ( + typeof str === 'string' && str && ["'", '"'].indexOf(str.charAt(0)) !== -1 + ) +} + +function hasLeadingNumber(part) { + return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX) +} + +function hasSpecialChars(part) { + return SPEC_CHAR_REGEX.test(part) +} + +function shouldBeQuoted(part) { + return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part)) +} diff --git a/node_modules/property-expr/package.json b/node_modules/property-expr/package.json new file mode 100644 index 00000000..73bca41c --- /dev/null +++ b/node_modules/property-expr/package.json @@ -0,0 +1,36 @@ +{ + "name": "property-expr", + "version": "2.0.5", + "description": "tiny util for getting and setting deep object props safely", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.js", + "index.d.ts", + "compiler.js" + ], + "scripts": { + "test": "node ./test.js", + "debug": "node --inspect-brk ./test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/jquense/expr/" + }, + "keywords": [ + "expr", + "expression", + "setter", + "getter", + "deep", + "property", + "Justin-Beiber", + "accessor" + ], + "author": "@monasticpanic Jason Quense", + "license": "MIT", + "prettier": { + "singleQuote": true, + "semi": false + } +} diff --git a/node_modules/tiny-case/README.md b/node_modules/tiny-case/README.md new file mode 100644 index 00000000..ae391029 --- /dev/null +++ b/node_modules/tiny-case/README.md @@ -0,0 +1,26 @@ +# tiny-case + +Extremely minimal string casing utilities that mimic most of lodash's casing behavior, e.g. +numbers are considered seperate "words". + +```sh +npm i tiny-case +``` + +## Usage + +```js +import { + camelCase, + pascalCase, + snakeCase, + kebabCase, + titleCase, + sentenceCase, + words, + upperFirst, +} from 'tiny-case' + +words('hi-there john') // ['hi', 'there', 'john'] +words(' 1ApplePlease ') // ['1', 'Apple', 'Please'] +``` diff --git a/node_modules/tiny-case/index.d.ts b/node_modules/tiny-case/index.d.ts new file mode 100644 index 00000000..15bdd634 --- /dev/null +++ b/node_modules/tiny-case/index.d.ts @@ -0,0 +1,15 @@ +export function words(str: string): string[] + +export function upperFirst(str: string): string + +export function camelCase(str: string): string + +export function pascalCase(str: string): string + +export function snakeCase(str: string): string + +export function kebabCase(str: string): string + +export function sentenceCase(str: string): string + +export function titleCase(str: string): string diff --git a/node_modules/tiny-case/index.js b/node_modules/tiny-case/index.js new file mode 100644 index 00000000..7671378d --- /dev/null +++ b/node_modules/tiny-case/index.js @@ -0,0 +1,39 @@ +const reWords = /[A-Z\xc0-\xd6\xd8-\xde]?[a-z\xdf-\xf6\xf8-\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde]|$)|(?:[A-Z\xc0-\xd6\xd8-\xde]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde](?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])|$)|[A-Z\xc0-\xd6\xd8-\xde]?(?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\xc0-\xd6\xd8-\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\d*(?:1ST|2ND|3RD|(?![123])\dTH)(?=\b|[a-z_])|\d*(?:1st|2nd|3rd|(?![123])\dth)(?=\b|[A-Z_])|\d+|(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?)*/g + +const words = (str) => str.match(reWords) || [] + +const upperFirst = (str) => str[0].toUpperCase() + str.slice(1) + +const join = (str, d) => words(str).join(d).toLowerCase() + +const camelCase = (str) => + words(str).reduce( + (acc, next) => + `${acc}${ + !acc + ? next.toLowerCase() + : next[0].toUpperCase() + next.slice(1).toLowerCase() + }`, + '', + ) + +const pascalCase = (str) => upperFirst(camelCase(str)) + +const snakeCase = (str) => join(str, '_') + +const kebabCase = (str) => join(str, '-') + +const sentenceCase = (str) => upperFirst(join(str, ' ')) + +const titleCase = (str) => words(str).map(upperFirst).join(' ') + +module.exports = { + words, + upperFirst, + camelCase, + pascalCase, + snakeCase, + kebabCase, + sentenceCase, + titleCase, +} diff --git a/node_modules/tiny-case/package.json b/node_modules/tiny-case/package.json new file mode 100644 index 00000000..94b72364 --- /dev/null +++ b/node_modules/tiny-case/package.json @@ -0,0 +1,13 @@ +{ + "name": "tiny-case", + "version": "1.0.3", + "description": "Tiny Casing utils", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/jquense/tiny-case.git" + }, + "types": "index.d.ts", + "author": "Jason Quense", + "license": "MIT" +} diff --git a/node_modules/tiny-case/test.js b/node_modules/tiny-case/test.js new file mode 100644 index 00000000..7b49b812 --- /dev/null +++ b/node_modules/tiny-case/test.js @@ -0,0 +1,82 @@ +const assert = require('assert') +const t = require('.') + +CamelCase: { + ;[ + ['hi there', 'hiThere'], + ['hi-there', 'hiThere'], + ['hi_there_1', 'hiThere1'], + [' hi_there ', 'hiThere'], + ['1ApplePlease', '1ApplePlease'], + ['CON_STAT', 'conStat'], + ['CaseStatus', 'caseStatus'], + ].forEach(([input, expected]) => { + assert.strictEqual( + t.camelCase(input), + expected, + `${t.camelCase(input)} !== ${expected}`, + ) + }) +} + +PascalCase: { + ;[ + ['hi there', 'HiThere'], + ['hi-there', 'HiThere'], + ['hi_there_1', 'HiThere1'], + [' hi_there ', 'HiThere'], + ['1ApplePlease', '1ApplePlease'], + ].forEach(([input, expected]) => { + assert.strictEqual( + t.pascalCase(input), + expected, + `${t.pascalCase(input)} !== ${expected}`, + ) + }) +} + +SnakeCase: { + ;[ + ['hi there', 'hi_there'], + ['hi-there', 'hi_there'], + ['hi_there_1', 'hi_there_1'], + [' hi_there ', 'hi_there'], + ['1ApplePlease', '1_apple_please'], + ].forEach(([input, expected]) => { + assert.strictEqual( + t.snakeCase(input), + expected, + `${t.snakeCase(input)} !== ${expected}`, + ) + }) +} + +SentenceCase: { + ;[ + ['hi there', 'Hi there'], + ['hi-There', 'Hi there'], + ['hi_there_1', 'Hi there 1'], + [' hi_there ', 'Hi there'], + ].forEach(([input, expected]) => { + assert.strictEqual( + t.sentenceCase(input), + expected, + `${t.sentenceCase(input)} !== ${expected}`, + ) + }) +} + +TitleCase: { + ;[ + ['hi there', 'Hi There'], + ['hi-There', 'Hi There'], + ['hi_there_1', 'Hi There 1'], + [' hi_there ', 'Hi There'], + ].forEach(([input, expected]) => { + assert.strictEqual( + t.titleCase(input), + expected, + `${t.titleCase(input)} !== ${expected}`, + ) + }) +} diff --git a/node_modules/tiny-case/tsconfig.json b/node_modules/tiny-case/tsconfig.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/node_modules/tiny-case/tsconfig.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/node_modules/toposort/.npmignore b/node_modules/toposort/.npmignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/node_modules/toposort/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/toposort/.travis.yml b/node_modules/toposort/.travis.yml new file mode 100644 index 00000000..de50a1f7 --- /dev/null +++ b/node_modules/toposort/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 4 + - 6 + - 8 diff --git a/node_modules/toposort/License b/node_modules/toposort/License new file mode 100644 index 00000000..7975a823 --- /dev/null +++ b/node_modules/toposort/License @@ -0,0 +1,21 @@ + +Toposort - Topological sorting for node.js +Copyright (c) 2012 by Marcel Klehr +MIT LICENSE +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/toposort/Makefile b/node_modules/toposort/Makefile new file mode 100644 index 00000000..0f14dac3 --- /dev/null +++ b/node_modules/toposort/Makefile @@ -0,0 +1,11 @@ + +build: components index.js + @component build --dev + +components: component.json + @component install --dev + +clean: + rm -fr build components template.js + +.PHONY: clean diff --git a/node_modules/toposort/README.md b/node_modules/toposort/README.md new file mode 100644 index 00000000..58d4ab3e --- /dev/null +++ b/node_modules/toposort/README.md @@ -0,0 +1,98 @@ +# Toposort + +Sort directed acyclic graphs + +[![Build Status](https://travis-ci.org/marcelklehr/toposort.png)](https://travis-ci.org/marcelklehr/toposort) + +## Installation + +`npm install toposort` or `component install marcelklehr/toposort` + +then in your code: + +```js +toposort = require('toposort') +``` + +## Usage +We want to sort the following graph. + +![graph](https://cdn.rawgit.com/marcelklehr/toposort/8b14e9fd/graph.svg) + +```js +// First, we define our edges. +var graph = [ + ['put on your shoes', 'tie your shoes'] +, ['put on your shirt', 'put on your jacket'] +, ['put on your shorts', 'put on your jacket'] +, ['put on your shorts', 'put on your shoes'] +] + + +// Now, sort the vertices topologically, to reveal a legal execution order. +toposort(graph) +// [ 'put on your shirt' +// , 'put on your shorts' +// , 'put on your jacket' +// , 'put on your shoes' +// , 'tie your shoes' ] +``` + +(Note that there is no defined order for graph parts that are not connected + -- you could also put on your jacket after having tied your shoes...) + +### Sorting dependencies +It is usually more convenient to specify *dependencies* instead of "sequences". +```js +// This time, edges represent dependencies. +var graph = [ + ['tie your shoes', 'put on your shoes'] +, ['put on your jacket', 'put on your shirt'] +, ['put on your shoes', 'put on your shorts'] +, ['put on your jacket', 'put on your shorts'] +] + +toposort(graph) +// [ 'tie your shoes' +// , 'put on your shoes' +// , 'put on your jacket' +// , 'put on your shirt' +// , 'put on your shorts' ] + +// Now, reversing the list will reveal a legal execution order. +toposort(graph).reverse() +// [ 'put on your shorts' +// , 'put on your shirt' +// , 'put on your jacket' +// , 'put on your shoes' +// , 'tie your shoes' ] +``` + +## API + +### toposort(edges) + ++ edges {Array} An array of directed edges describing a graph. An edge looks like this: `[node1, node2]` (vertices needn't be strings but can be of any type). + +Returns: {Array} a list of vertices, sorted from "start" to "end" + +Throws an error if there are any cycles in the graph. + +### toposort.array(nodes, edges) + ++ nodes {Array} An array of nodes ++ edges {Array} An array of directed edges. You don't need to mention all `nodes` here. + +This is a convenience method that allows you to define nodes that may or may not be connected to any other nodes. The ordering of unconnected nodes is not defined. + +Returns: {Array} a list of vertices, sorted from "start" to "end" + +Throws an error if there are any cycles in the graph. + +## Tests + +Run the tests with `node test.js`. + +## Legal + +MIT License diff --git a/node_modules/toposort/component.json b/node_modules/toposort/component.json new file mode 100644 index 00000000..fe12ae20 --- /dev/null +++ b/node_modules/toposort/component.json @@ -0,0 +1,24 @@ +{ + "name": "toposort", + "author": "Marcel Klehr ", + "repo": "marcelklehr/toposort", + "description": "Topological sort of directed acyclic graphs (like dependency lists)", + "version": "0.2.10", + "keywords": [ + "topological", + "sort", + "sorting", + "graphs", + "graph", + "dependency", + "list", + "dependencies", + "acyclic" + ], + "dependencies": {}, + "development": {}, + "license": "MIT", + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/toposort/graph.svg b/node_modules/toposort/graph.svg new file mode 100644 index 00000000..e14b0d93 --- /dev/null +++ b/node_modules/toposort/graph.svg @@ -0,0 +1 @@ +image/svg+xmlput on your shortsput on your shirtput on your shoesput on your jackettie your shoes diff --git a/node_modules/toposort/index.js b/node_modules/toposort/index.js new file mode 100644 index 00000000..826f9591 --- /dev/null +++ b/node_modules/toposort/index.js @@ -0,0 +1,98 @@ + +/** + * Topological sorting function + * + * @param {Array} edges + * @returns {Array} + */ + +module.exports = function(edges) { + return toposort(uniqueNodes(edges), edges) +} + +module.exports.array = toposort + +function toposort(nodes, edges) { + var cursor = nodes.length + , sorted = new Array(cursor) + , visited = {} + , i = cursor + // Better data structures make algorithm much faster. + , outgoingEdges = makeOutgoingEdges(edges) + , nodesHash = makeNodesHash(nodes) + + // check for unknown nodes + edges.forEach(function(edge) { + if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) { + throw new Error('Unknown node. There is an unknown node in the supplied edges.') + } + }) + + while (i--) { + if (!visited[i]) visit(nodes[i], i, new Set()) + } + + return sorted + + function visit(node, i, predecessors) { + if(predecessors.has(node)) { + var nodeRep + try { + nodeRep = ", node was:" + JSON.stringify(node) + } catch(e) { + nodeRep = "" + } + throw new Error('Cyclic dependency' + nodeRep) + } + + if (!nodesHash.has(node)) { + throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node)) + } + + if (visited[i]) return; + visited[i] = true + + var outgoing = outgoingEdges.get(node) || new Set() + outgoing = Array.from(outgoing) + + if (i = outgoing.length) { + predecessors.add(node) + do { + var child = outgoing[--i] + visit(child, nodesHash.get(child), predecessors) + } while (i) + predecessors.delete(node) + } + + sorted[--cursor] = node + } +} + +function uniqueNodes(arr){ + var res = new Set() + for (var i = 0, len = arr.length; i < len; i++) { + var edge = arr[i] + res.add(edge[0]) + res.add(edge[1]) + } + return Array.from(res) +} + +function makeOutgoingEdges(arr){ + var edges = new Map() + for (var i = 0, len = arr.length; i < len; i++) { + var edge = arr[i] + if (!edges.has(edge[0])) edges.set(edge[0], new Set()) + if (!edges.has(edge[1])) edges.set(edge[1], new Set()) + edges.get(edge[0]).add(edge[1]) + } + return edges +} + +function makeNodesHash(arr){ + var res = new Map() + for (var i = 0, len = arr.length; i < len; i++) { + res.set(arr[i], i) + } + return res +} diff --git a/node_modules/toposort/package.json b/node_modules/toposort/package.json new file mode 100644 index 00000000..0d737aad --- /dev/null +++ b/node_modules/toposort/package.json @@ -0,0 +1,29 @@ +{ + "name": "toposort", + "version": "2.0.2", + "description": "Topological sort of directed ascyclic graphs (like dependecy lists)", + "main": "index.js", + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/marcelklehr/toposort.git" + }, + "devDependencies": { + "vows": "0.7.x" + }, + "keywords": [ + "topological", + "sort", + "sorting", + "graphs", + "graph", + "dependency", + "list", + "dependencies", + "acyclic" + ], + "author": "Marcel Klehr ", + "license": "MIT" +} diff --git a/node_modules/toposort/test.js b/node_modules/toposort/test.js new file mode 100644 index 00000000..2de9d8f0 --- /dev/null +++ b/node_modules/toposort/test.js @@ -0,0 +1,171 @@ +var vows = require('vows') + , toposort = require('./index') + , assert = require('assert') + +var suite = vows.describe('toposort') +suite.addBatch( +{ 'acyclic graphs': + { topic: function() { + /*(read downwards) + 6 3 + | | + 5->2 + | | + 4 1 + */ + return toposort( + [ ["3", '2'] + , ["2", "1"] + , ["6", "5"] + , ["5", "2"] + , ["5", "4"] + ]) + } + , 'should be sorted correctly': function(er, result) { + assert.instanceOf(result, Array) + var failed = [], passed + // valid permutations + ;[ [ '3','6','5','2','1','4' ] + , [ '3','6','5','2','4','1' ] + , [ '6','3','5','2','1','4' ] + , [ '6','5','3','2','1','4' ] + , [ '6','5','3','2','4','1' ] + , [ '6','5', '4','3','2','1' ] + ].forEach(function(solution) { + try { + assert.deepEqual(result, solution) + passed = true + }catch (e) { + failed.push(e) + } + }) + if (!passed) { + console.log(failed) + throw failed[0]; + } + } + } +, 'simple cyclic graphs': + { topic: function() { + /* + foo<->bar + */ + return toposort( + [ ["foo", 'bar'] + , ["bar", "foo"]// cyclic dependecy + ]) + } + , 'should throw an exception': function(_, val) { + assert.instanceOf(val, Error) + } + } +, 'complex cyclic graphs': + { topic: function() { + /* + foo + | + bar<-john + | ^ + ron->tom + */ + return toposort( + [ ["foo", 'bar'] + , ["bar", "ron"] + , ["john", "bar"] + , ["tom", "john"] + , ["ron", "tom"]// cyclic dependecy + ]) + } + , 'should throw an exception': function(_, val) { + assert.instanceOf(val, Error) + } + } +, 'unknown nodes in edges': + { topic: function() { + return toposort.array(['bla'], + [ ["foo", 'bar'] + , ["bar", "ron"] + , ["john", "bar"] + , ["tom", "john"] + , ["ron", "tom"] + ]) + } + , 'should throw an exception': function(_, val) { + assert.instanceOf(val, Error) + } + } +, 'triangular dependency': + { topic: function() { + /* + a-> b + | / + c<- + */ + return toposort([ + ['a', 'b'] + , ['a', 'c'] + , ['b', 'c'] + ]); + } + , 'shouldn\'t throw an error': function(er, result) { + assert.deepEqual(result, ['a', 'b', 'c']) + } + } +, 'toposort.array': + { topic: function() { + return toposort.array(['d', 'c', 'a', 'b'], [['a','b'],['b','c']]) + } + , 'should include unconnected nodes': function(er, result){ + var i = result.indexOf('d') + assert(i >= 0) + result.splice(i, 1) + assert.deepEqual(result, ['a', 'b', 'c']) + } + } +, 'toposort.array mutation': + { topic: function() { + var array = ['d', 'c', 'a', 'b'] + toposort.array(array, [['a','b'],['b','c']]) + return array + } + , 'should not mutate its arguments': function(er, result){ + assert.deepEqual(result, ['d', 'c', 'a', 'b']) + } + } +, 'giant graphs': + { + topic: function() { + var graph = [] + , nodeCount = 100000 + for (var i = 0; i < nodeCount; i++) { + graph.push([i, i + 1]) + } + return graph + } + , 'should sort quickly': function(er, result){ + var start = (new Date).getTime() + var sorted = toposort(result) + var end = (new Date).getTime() + var elapsedSeconds = (end - start) / 1000 + assert(elapsedSeconds < 1) + } + } +, 'object keys': + { + topic: function() { + var o1 = {k1: 'v1', nested: {k2: 'v2'}} + var o2 = {k2: 'v2'} + var o3 = {k3: 'v3'} + var graph = [[o1, o2], [o2, o3]] + return graph + } + , 'should handle object nodes': function(er, result){ + var sorted = toposort(result) + assert.deepEqual(sorted, [{k1: 'v1', nested: {k2: 'v2'}}, {k2: 'v2'}, {k3: 'v3'}]) + } + } +}) +.run(null, function() { + (suite.results.broken+suite.results.errored) > 0 && process.exit(1) + process.exit(0) +}) diff --git a/node_modules/type-fest/index.d.ts b/node_modules/type-fest/index.d.ts new file mode 100644 index 00000000..ee20662e --- /dev/null +++ b/node_modules/type-fest/index.d.ts @@ -0,0 +1,95 @@ +// Basic +export * from './source/primitive'; +export * from './source/typed-array'; +export * from './source/basic'; +export * from './source/observable-like'; + +// Utilities +export {Except} from './source/except'; +export {Mutable} from './source/mutable'; +export {Writable} from './source/writable'; +export {Merge} from './source/merge'; +export {MergeExclusive} from './source/merge-exclusive'; +export {RequireAtLeastOne} from './source/require-at-least-one'; +export {RequireExactlyOne} from './source/require-exactly-one'; +export {RequireAllOrNone} from './source/require-all-or-none'; +export {RemoveIndexSignature} from './source/remove-index-signature'; +export {PartialDeep, PartialDeepOptions} from './source/partial-deep'; +export {PartialOnUndefinedDeep, PartialOnUndefinedDeepOptions} from './source/partial-on-undefined-deep'; +export {ReadonlyDeep} from './source/readonly-deep'; +export {LiteralUnion} from './source/literal-union'; +export {Promisable} from './source/promisable'; +export {Opaque, UnwrapOpaque} from './source/opaque'; +export {InvariantOf} from './source/invariant-of'; +export {SetOptional} from './source/set-optional'; +export {SetRequired} from './source/set-required'; +export {SetNonNullable} from './source/set-non-nullable'; +export {ValueOf} from './source/value-of'; +export {PromiseValue} from './source/promise-value'; +export {AsyncReturnType} from './source/async-return-type'; +export {ConditionalExcept} from './source/conditional-except'; +export {ConditionalKeys} from './source/conditional-keys'; +export {ConditionalPick} from './source/conditional-pick'; +export {UnionToIntersection} from './source/union-to-intersection'; +export {Stringified} from './source/stringified'; +export {FixedLengthArray} from './source/fixed-length-array'; +export {MultidimensionalArray} from './source/multidimensional-array'; +export {MultidimensionalReadonlyArray} from './source/multidimensional-readonly-array'; +export {IterableElement} from './source/iterable-element'; +export {Entry} from './source/entry'; +export {Entries} from './source/entries'; +export {SetReturnType} from './source/set-return-type'; +export {Asyncify} from './source/asyncify'; +export {Simplify, SimplifyOptions} from './source/simplify'; +export {Jsonify} from './source/jsonify'; +export {Schema} from './source/schema'; +export {LiteralToPrimitive} from './source/literal-to-primitive'; +export { + PositiveInfinity, + NegativeInfinity, + Finite, + Integer, + Float, + NegativeFloat, + Negative, + NonNegative, + NegativeInteger, + NonNegativeInteger, +} from './source/numeric'; +export {StringKeyOf} from './source/string-key-of'; +export {Exact} from './source/exact'; +export {ReadonlyTuple} from './source/readonly-tuple'; +export {OptionalKeysOf} from './source/optional-keys-of'; +export {HasOptionalKeys} from './source/has-optional-keys'; +export {RequiredKeysOf} from './source/required-keys-of'; +export {HasRequiredKeys} from './source/has-required-keys'; +export {Spread} from './source/spread'; + +// Template literal types +export {CamelCase} from './source/camel-case'; +export {CamelCasedProperties} from './source/camel-cased-properties'; +export {CamelCasedPropertiesDeep} from './source/camel-cased-properties-deep'; +export {KebabCase} from './source/kebab-case'; +export {KebabCasedProperties} from './source/kebab-cased-properties'; +export {KebabCasedPropertiesDeep} from './source/kebab-cased-properties-deep'; +export {PascalCase} from './source/pascal-case'; +export {PascalCasedProperties} from './source/pascal-cased-properties'; +export {PascalCasedPropertiesDeep} from './source/pascal-cased-properties-deep'; +export {SnakeCase} from './source/snake-case'; +export {SnakeCasedProperties} from './source/snake-cased-properties'; +export {SnakeCasedPropertiesDeep} from './source/snake-cased-properties-deep'; +export {ScreamingSnakeCase} from './source/screaming-snake-case'; +export {DelimiterCase} from './source/delimiter-case'; +export {DelimiterCasedProperties} from './source/delimiter-cased-properties'; +export {DelimiterCasedPropertiesDeep} from './source/delimiter-cased-properties-deep'; +export {Join} from './source/join'; +export {Split} from './source/split'; +export {Trim} from './source/trim'; +export {Replace} from './source/replace'; +export {Includes} from './source/includes'; +export {Get} from './source/get'; +export {LastArrayElement} from './source/last-array-element'; + +// Miscellaneous +export {PackageJson} from './source/package-json'; +export {TsConfigJson} from './source/tsconfig-json'; diff --git a/node_modules/type-fest/package.json b/node_modules/type-fest/package.json new file mode 100644 index 00000000..319558a2 --- /dev/null +++ b/node_modules/type-fest/package.json @@ -0,0 +1,52 @@ +{ + "name": "type-fest", + "version": "2.19.0", + "description": "A collection of essential TypeScript types", + "license": "(MIT OR CC0-1.0)", + "repository": "sindresorhus/type-fest", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=12.20" + }, + "scripts": { + "test": "xo && tsd && tsc && node script/test/source-files-extension.js" + }, + "files": [ + "index.d.ts", + "source" + ], + "keywords": [ + "typescript", + "ts", + "types", + "utility", + "util", + "utilities", + "omit", + "merge", + "json" + ], + "devDependencies": { + "@sindresorhus/tsconfig": "~0.7.0", + "expect-type": "^0.13.0", + "tsd": "^0.20.0", + "typescript": "^4.6.3", + "xo": "^0.43.0" + }, + "types": "./index.d.ts", + "xo": { + "rules": { + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/indent": "off", + "node/no-unsupported-features/es-builtins": "off", + "import/extensions": "off", + "@typescript-eslint/no-redeclare": "off", + "@typescript-eslint/no-confusing-void-expression": "off" + } + } +} diff --git a/node_modules/type-fest/readme.md b/node_modules/type-fest/readme.md new file mode 100644 index 00000000..0d310aad --- /dev/null +++ b/node_modules/type-fest/readme.md @@ -0,0 +1,905 @@ +
+
+
+ type-fest +
+
+ A collection of essential TypeScript types +
+
+
+
+
+ +
+
+
+
+
+ +[![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://giphy.com/gifs/illustration-rainbow-unicorn-26AHG5KGFxSkUWw1i) +[![npm dependents](https://badgen.net/npm/dependents/type-fest)](https://www.npmjs.com/package/type-fest?activeTab=dependents) +[![npm downloads](https://badgen.net/npm/dt/type-fest)](https://www.npmjs.com/package/type-fest) +[![Docs](https://paka.dev/badges/v0/cute.svg)](https://paka.dev/npm/type-fest) + +Many of the types here should have been built-in. You can help by suggesting some of them to the [TypeScript project](https://github.com/Microsoft/TypeScript/blob/main/CONTRIBUTING.md). + +Either add this package as a dependency or copy-paste the needed types. No credit required. 👌 + +PR welcome for additional commonly needed types and docs improvements. Read the [contributing guidelines](.github/contributing.md) first. + +**Help wanted with reviewing [proposals](https://github.com/sindresorhus/type-fest/issues) and [pull requests](https://github.com/sindresorhus/type-fest/pulls).** + +## Install + +```sh +npm install type-fest +``` + +*Requires TypeScript >=4.2* + +## Usage + +```ts +import type {Except} from 'type-fest'; + +type Foo = { + unicorn: string; + rainbow: boolean; +}; + +type FooWithoutRainbow = Except; +//=> {unicorn: string} +``` + +## API + +Click the type names for complete docs. + +### Basic + +- [`Primitive`](source/primitive.d.ts) - Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive). +- [`Class`](source/basic.d.ts) - Matches a [`class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes). +- [`Constructor`](source/basic.d.ts) - Matches a [`class` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes). +- [`TypedArray`](source/typed-array.d.ts) - Matches any [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray), like `Uint8Array` or `Float64Array`. +- [`ObservableLike`](source/observable-like.d.ts) - Matches a value that is like an [Observable](https://github.com/tc39/proposal-observable). + +### Utilities + +- [`Except`](source/except.d.ts) - Create a type from an object type without certain keys. This is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys). +- [`Writable`](source/writable.d.ts) - Create a type that strips `readonly` from all or some of an object's keys. The inverse of `Readonly`. Formerly named `Mutable`. +- [`Merge`](source/merge.d.ts) - Merge two types into a new type. Keys of the second type overrides keys of the first type. +- [`MergeExclusive`](source/merge-exclusive.d.ts) - Create a type that has mutually exclusive keys. +- [`RequireAtLeastOne`](source/require-at-least-one.d.ts) - Create a type that requires at least one of the given keys. +- [`RequireExactlyOne`](source/require-exactly-one.d.ts) - Create a type that requires exactly a single key of the given keys and disallows more. +- [`RequireAllOrNone`](source/require-all-or-none.d.ts) - Create a type that requires all of the given keys or none of the given keys. +- [`RemoveIndexSignature`](source/remove-index-signature.d.ts) - Create a type that only has explicitly defined properties, absent of any index signatures. +- [`PartialDeep`](source/partial-deep.d.ts) - Create a deeply optional version of another type. Use [`Partial`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype) if you only need one level deep. +- [`PartialOnUndefinedDeep`](source/partial-on-undefined-deep.d.ts) - Create a deep version of another type where all keys accepting `undefined` type are set to optional. +- [`ReadonlyDeep`](source/readonly-deep.d.ts) - Create a deeply immutable version of an `object`/`Map`/`Set`/`Array` type. Use [`Readonly`](https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype) if you only need one level deep. +- [`LiteralUnion`](source/literal-union.d.ts) - Create a union type by combining primitive types and literal types without sacrificing auto-completion in IDEs for the literal type part of the union. Workaround for [Microsoft/TypeScript#29729](https://github.com/Microsoft/TypeScript/issues/29729). +- [`Opaque`](source/opaque.d.ts) - Create an [opaque type](https://codemix.com/opaque-types-in-javascript/). +- [`UnwrapOpaque`](source/opaque.d.ts) - Revert an [opaque type](https://codemix.com/opaque-types-in-javascript/) back to its original type. +- [`InvariantOf`](source/invariant-of.d.ts) - Create an [invariant type](https://basarat.gitbook.io/typescript/type-system/type-compatibility#footnote-invariance), which is a type that does not accept supertypes and subtypes. +- [`SetOptional`](source/set-optional.d.ts) - Create a type that makes the given keys optional. +- [`SetRequired`](source/set-required.d.ts) - Create a type that makes the given keys required. +- [`SetNonNullable`](source/set-non-nullable.d.ts) - Create a type that makes the given keys non-nullable. +- [`ValueOf`](source/value-of.d.ts) - Create a union of the given object's values, and optionally specify which keys to get the values from. +- [`ConditionalKeys`](source/conditional-keys.d.ts) - Extract keys from a shape where values extend the given `Condition` type. +- [`ConditionalPick`](source/conditional-pick.d.ts) - Like `Pick` except it selects properties from a shape where the values extend the given `Condition` type. +- [`ConditionalExcept`](source/conditional-except.d.ts) - Like `Omit` except it removes properties from a shape where the values extend the given `Condition` type. +- [`UnionToIntersection`](source/union-to-intersection.d.ts) - Convert a union type to an intersection type. +- [`LiteralToPrimitive`](source/literal-to-primitive.d.ts) - Convert a [literal type](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) to the [primitive type](source/primitive.d.ts) it belongs to. +- [`Stringified`](source/stringified.d.ts) - Create a type with the keys of the given type changed to `string` type. +- [`IterableElement`](source/iterable-element.d.ts) - Get the element type of an `Iterable`/`AsyncIterable`. For example, an array or a generator. +- [`Entry`](source/entry.d.ts) - Create a type that represents the type of an entry of a collection. +- [`Entries`](source/entries.d.ts) - Create a type that represents the type of the entries of a collection. +- [`SetReturnType`](source/set-return-type.d.ts) - Create a function type with a return type of your choice and the same parameters as the given function type. +- [`Simplify`](source/simplify.d.ts) - Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability. +- [`Get`](source/get.d.ts) - Get a deeply-nested property from an object using a key path, like [Lodash's `.get()`](https://lodash.com/docs/latest#get) function. +- [`StringKeyOf`](source/string-key-of.d.ts) - Get keys of the given type as strings. +- [`Schema`](source/schema.d.ts) - Create a deep version of another object type where property values are recursively replaced into a given value type. +- [`Exact`](source/exact.d.ts) - Create a type that does not allow extra properties. +- [`OptionalKeysOf`](source/optional-keys-of.d.ts) - Extract all optional keys from the given type. +- [`HasOptionalKeys`](source/has-optional-keys.d.ts) - Create a `true`/`false` type depending on whether the given type has any optional fields. +- [`RequiredKeysOf`](source/required-keys-of.d.ts) - Extract all required keys from the given type. +- [`HasRequiredKeys`](source/has-required-keys.d.ts) - Create a `true`/`false` type depending on whether the given type has any required fields. +- [`Spread`](source/spread.d.ts) - Mimic the type inferred by TypeScript when merging two objects or two arrays/tuples using the spread syntax. + +### JSON + +- [`Jsonify`](source/jsonify.d.ts) - Transform a type to one that is assignable to the `JsonValue` type. +- [`JsonPrimitive`](source/basic.d.ts) - Matches a JSON primitive. +- [`JsonObject`](source/basic.d.ts) - Matches a JSON object. +- [`JsonArray`](source/basic.d.ts) - Matches a JSON array. +- [`JsonValue`](source/basic.d.ts) - Matches any valid JSON value. + +### Async + +- [`Promisable`](source/promisable.d.ts) - Create a type that represents either the value or the value wrapped in `PromiseLike`. +- [`AsyncReturnType`](source/async-return-type.d.ts) - Unwrap the return type of a function that returns a `Promise`. +- [`Asyncify`](source/asyncify.d.ts) - Create an async version of the given function type. + +### String + +- [`Trim`](source/trim.d.ts) - Remove leading and trailing spaces from a string. +- [`Split`](source/split.d.ts) - Represents an array of strings split using a given character or character set. +- [`Replace`](source/replace.d.ts) - Represents a string with some or all matches replaced by a replacement. + +### Array + +- [`Includes`](source/includes.d.ts) - Returns a boolean for whether the given array includes the given item. +- [`Join`](source/join.d.ts) - Join an array of strings and/or numbers using the given string as a delimiter. +- [`LastArrayElement`](source/last-array-element.d.ts) - Extracts the type of the last element of an array. +- [`FixedLengthArray`](source/fixed-length-array.d.ts) - Create a type that represents an array of the given type and length. +- [`MultidimensionalArray`](source/multidimensional-array.d.ts) - Create a type that represents a multidimensional array of the given type and dimensions. +- [`MultidimensionalReadonlyArray`](source/multidimensional-readonly-array.d.ts) - Create a type that represents a multidimensional readonly array of the given type and dimensions. +- [`ReadonlyTuple`](source/readonly-tuple.d.ts) - Create a type that represents a read-only tuple of the given type and length. + +### Numeric + +- [`PositiveInfinity`](source/numeric.d.ts) - Matches the hidden `Infinity` type. +- [`NegativeInfinity`](source/numeric.d.ts) - Matches the hidden `-Infinity` type. +- [`Finite`](source/numeric.d.ts) - A finite `number`. +- [`Integer`](source/numeric.d.ts) - A `number` that is an integer. +- [`Float`](source/numeric.d.ts) - A `number` that is not an integer. +- [`NegativeFloat`](source/numeric.d.ts) - A negative (`-∞ < x < 0`) `number` that is not an integer. +- [`Negative`](source/numeric.d.ts) - A negative `number`/`bigint` (`-∞ < x < 0`) +- [`NonNegative`](source/numeric.d.ts) - A non-negative `number`/`bigint` (`0 <= x < ∞`). +- [`NegativeInteger`](source/numeric.d.ts) - A negative (`-∞ < x < 0`) `number` that is an integer. +- [`NonNegativeInteger`](source/numeric.d.ts) - A non-negative (`0 <= x < ∞`) `number` that is an integer. + +### Change case + +- [`CamelCase`](source/camel-case.d.ts) - Convert a string literal to camel-case (`fooBar`). +- [`CamelCasedProperties`](source/camel-cased-properties.d.ts) - Convert object properties to camel-case (`fooBar`). +- [`CamelCasedPropertiesDeep`](source/camel-cased-properties-deep.d.ts) - Convert object properties to camel-case recursively (`fooBar`). +- [`KebabCase`](source/kebab-case.d.ts) - Convert a string literal to kebab-case (`foo-bar`). +- [`KebabCasedProperties`](source/kebab-cased-properties.d.ts) - Convert a object properties to kebab-case recursively (`foo-bar`). +- [`KebabCasedPropertiesDeep`](source/kebab-cased-properties-deep.d.ts) - Convert object properties to kebab-case (`foo-bar`). +- [`PascalCase`](source/pascal-case.d.ts) - Converts a string literal to pascal-case (`FooBar`) +- [`PascalCasedProperties`](source/pascal-cased-properties.d.ts) - Converts object properties to pascal-case (`FooBar`) +- [`PascalCasedPropertiesDeep`](source/pascal-cased-properties-deep.d.ts) - Converts object properties to pascal-case (`FooBar`) +- [`SnakeCase`](source/snake-case.d.ts) - Convert a string literal to snake-case (`foo_bar`). +- [`SnakeCasedProperties`](source/snake-cased-properties-deep.d.ts) - Convert object properties to snake-case (`foo_bar`). +- [`SnakeCasedPropertiesDeep`](source/snake-cased-properties-deep.d.ts) - Convert object properties to snake-case recursively (`foo_bar`). +- [`ScreamingSnakeCase`](source/screaming-snake-case.d.ts) - Convert a string literal to screaming-snake-case (`FOO_BAR`). +- [`DelimiterCase`](source/delimiter-case.d.ts) - Convert a string literal to a custom string delimiter casing. +- [`DelimiterCasedProperties`](source/delimiter-cased-properties.d.ts) - Convert object properties to a custom string delimiter casing. +- [`DelimiterCasedPropertiesDeep`](source/delimiter-cased-properties-deep.d.ts) - Convert object properties to a custom string delimiter casing recursively. + +### Miscellaneous + +- [`PackageJson`](source/package-json.d.ts) - Type for [npm's `package.json` file](https://docs.npmjs.com/creating-a-package-json-file). It also includes support for [TypeScript Declaration Files](https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html) and [Yarn Workspaces](https://classic.yarnpkg.com/lang/en/docs/workspaces/). +- [`TsConfigJson`](source/tsconfig-json.d.ts) - Type for [TypeScript's `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) (TypeScript 4.4). + +## Declined types + +*If we decline a type addition, we will make sure to document the better solution here.* + +- [`Diff` and `Spread`](https://github.com/sindresorhus/type-fest/pull/7) - The pull request author didn't provide any real-world use-cases and the PR went stale. If you think this type is useful, provide some real-world use-cases and we might reconsider. +- [`Dictionary`](https://github.com/sindresorhus/type-fest/issues/33) - You only save a few characters (`Dictionary` vs `Record`) from [`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type), which is more flexible and well-known. Also, you shouldn't use an object as a dictionary. We have `Map` in JavaScript now. +- [`ExtractProperties` and `ExtractMethods`](https://github.com/sindresorhus/type-fest/pull/4) - The types violate the single responsibility principle. Instead, refine your types into more granular type hierarchies. +- [`Url2Json`](https://github.com/sindresorhus/type-fest/pull/262) - Inferring search parameters from a URL string is a cute idea, but not very useful in practice, since search parameters are usually dynamic and defined separately. +- [`Nullish`](https://github.com/sindresorhus/type-fest/pull/318) - The type only saves a couple of characters, not everyone knows what "nullish" means, and I'm also trying to [get away from `null`](https://github.com/sindresorhus/meta/discussions/7). +- [`TitleCase`](https://github.com/sindresorhus/type-fest/pull/303) - It's not solving a common need and is a better fit for a separate package. +- [`ExtendOr` and `ExtendAnd`](https://github.com/sindresorhus/type-fest/pull/247) - The benefits don't outweigh having to learn what they mean. +- [`PackageJsonExtras`](https://github.com/sindresorhus/type-fest/issues/371) - There are too many possible configurations that can be put into `package.json`. If you would like to extend `PackageJson` to support an additional configuration in your project, please see the *Extending existing types* section below. + +## Alternative type names + +*If you know one of our types by a different name, add it here for discovery.* + +- `PartialBy` - See [`SetOptional`](https://github.com/sindresorhus/type-fest/blob/main/source/set-optional.d.ts) +- `RecordDeep`- See [`Schema`](https://github.com/sindresorhus/type-fest/blob/main/source/schema.d.ts) + +## Tips + +### Extending existing types + +- [`PackageJson`](source/package-json.d.ts) - There are a lot of tools that place extra configurations inside the `package.json` file. You can extend `PackageJson` to support these additional configurations. +
+ + Example + + + [Playground](https://www.typescriptlang.org/play?#code/JYWwDg9gTgLgBDAnmApnA3gBQIYGMDW2A5igFIDOEAdnNuXAEJ0o4HFmVUC+cAZlBBBwA5ElQBaXinIxhAbgCwAKFCRYCZGnQAZYFRgooPfoJHSANntmKlysWlaESFanAC8jZo-YuaAMgwLKwBhal5gIgB+AC44XX1DADpQqnCiLhsgA) + + ```ts + import type {PackageJson as BasePackageJson} from 'type-fest'; + import type {Linter} from 'eslint'; + + type PackageJson = BasePackageJson & {eslintConfig?: Linter.Config}; + ``` +
+ +### Related + +- [typed-query-selector](https://github.com/g-plane/typed-query-selector) - Enhances `document.querySelector` and `document.querySelectorAll` with a template literal type that matches element types returned from an HTML element query selector. +- [`Linter.Config`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/eslint/index.d.ts) - Definitions for the [ESLint configuration schema](https://eslint.org/docs/user-guide/configuring/language-options). + +### Built-in types + +There are many advanced types most users don't know about. + +- [`Partial`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype) - Make all properties in `T` optional. +
+ + Example + + + [Playground](https://www.typescriptlang.org/play/#code/JYOwLgpgTgZghgYwgAgHIHsAmEDC6QzADmyA3gLABQyycADnanALYQBcyAzmFKEQNxUaddFDAcQAV2YAjaIMoBfKlQQAbOJ05osEAIIMAQpOBrsUMkOR1eANziRkCfISKSoD4Pg4ZseAsTIALyW1DS0DEysHADkvvoMMQA0VsKi4sgAzAAMuVaKClY2wPaOknSYDrguADwA0sgQAB6QIJjaANYQAJ7oMDp+LsQAfAAUXd0cdUnI9mo+uv6uANp1ALoAlKHhyGAAFsCcAHTOAW4eYF4gyxNrwbNwago0ypRWp66jH8QcAApwYmAjxq8SWIy2FDCNDA3ToKFBQyIdR69wmfQG1TOhShyBgomQX3w3GQE2Q6IA8jIAFYQBBgI4TTiEs5bTQYsFInrLTbbHZOIlgZDlSqQABqj0kKBC3yINx6a2xfOQwH6o2FVXFaklwSCIUkbQghBAEEwENSfNOlykEGefNe5uhB2O6sgS3GPRmLogmslG1tLxUOKgEDA7hAuydtteryAA) + + ```ts + interface NodeConfig { + appName: string; + port: number; + } + + class NodeAppBuilder { + private configuration: NodeConfig = { + appName: 'NodeApp', + port: 3000 + }; + + private updateConfig(key: Key, value: NodeConfig[Key]) { + this.configuration[key] = value; + } + + config(config: Partial) { + type NodeConfigKey = keyof NodeConfig; + + for (const key of Object.keys(config) as NodeConfigKey[]) { + const updateValue = config[key]; + + if (updateValue === undefined) { + continue; + } + + this.updateConfig(key, updateValue); + } + + return this; + } + } + + // `Partial`` allows us to provide only a part of the + // NodeConfig interface. + new NodeAppBuilder().config({appName: 'ToDoApp'}); + ``` +
+ +- [`Required`](https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype) - Make all properties in `T` required. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4SwOwFwUwJwGYEMDGNgGED21VQGJZwC2wA3gFCjXAzFJgA2A-AFzADOUckA5gNxUaIYjA4ckvGG07c+g6gF8KQkAgCuEFFDA5O6gEbEwUbLm2ESwABQIixACJIoSdgCUYAR3Vg4MACYAPGYuFvYAfACU5Ko0APRxwADKMBD+wFAAFuh2Vv7OSBlYGdmc8ABu8LHKsRyGxqY4oQT21pTCIHQMjOwA5DAAHgACxAAOjDAAdChYxL0ANLHUouKSMH0AEmAAhJhY6ozpAJ77GTCMjMCiV0ToSAb7UJPPC9WRgrEJwAAqR6MwSRQPFGUFocDgRHYxnEfGAowh-zgUCOwF6KwkUl6tXqJhCeEsxDaS1AXSYfUGI3GUxmc0WSneQA) + + ```ts + interface ContactForm { + email?: string; + message?: string; + } + + function submitContactForm(formData: Required) { + // Send the form data to the server. + } + + submitContactForm({ + email: 'ex@mple.com', + message: 'Hi! Could you tell me more about…', + }); + + // TypeScript error: missing property 'message' + submitContactForm({ + email: 'ex@mple.com', + }); + ``` +
+ +- [`Readonly`](https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype) - Make all properties in `T` readonly. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4UwOwVwW2AZA9gc3mAbmANsA3gKFCOAHkAzMgGkOJABEwAjKZa2kAUQCcvEu32AMQCGAF2FYBIAL4BufDRABLCKLBcywgMZgEKZOoDCiCGSXI8i4hGEwwALmABnUVxXJ57YFgzZHSVF8sT1BpBSItLGEnJz1kAy5LLy0TM2RHACUwYQATEywATwAeAITjU3MAPnkrCJMXLigtUT4AClxgGztKbyDgaX99I1TzAEokr1BRAAslJwA6FIqLAF48TtswHp9MHDla9hJGACswZvmyLjAwAC8wVpm5xZHkUZDaMKIwqyWXYCW0oN4sNlsA1h0ug5gAByACyBQAggAHJHQ7ZBIFoXbzBjMCz7OoQP5YIaJNYQMAAdziCVaALGNSIAHomcAACoFJFgADKWjcSNEwG4vC4ji0wggEEQguiTnMEGALWAV1yAFp8gVgEjeFyuKICvMrCTgVxnst5jtsGC4ljsPNhXxGaAWcAAOq6YRXYDCRg+RWIcA5JSC+kWdCepQ+v3RYCU3RInzRMCGwlpC19NYBW1Ye08R1AA) + + ```ts + enum LogLevel { + Off, + Debug, + Error, + Fatal + }; + + interface LoggerConfig { + name: string; + level: LogLevel; + } + + class Logger { + config: Readonly; + + constructor({name, level}: LoggerConfig) { + this.config = {name, level}; + Object.freeze(this.config); + } + } + + const config: LoggerConfig = { + name: 'MyApp', + level: LogLevel.Debug + }; + + const logger = new Logger(config); + + // TypeScript Error: cannot assign to read-only property. + logger.config.level = LogLevel.Error; + + // We are able to edit config variable as we please. + config.level = LogLevel.Error; + ``` +
+ +- [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) - From `T`, pick a set of properties whose keys are in the union `K`. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4SwOwFwUwJwGYEMDGNgEE5TCgNugN4BQoZwOUBAXMAM5RyQDmA3KeSFABYCuAtgCMISMHloMmENh04oA9tBjQJjFuzIBfYrOAB6PcADCcGElh1gEGAHcKATwAO6ebyjB5CTNlwFwSxFR0BX5HeToYABNgBDh5fm8cfBg6AHIKG3ldA2BHOOcfFNpUygJ0pAhokr4hETFUgDpswywkggAFUwA3MFtgAF5gQgowKhhVKTYKGuFRcXo1aVZgbTIoJ3RW3xhOmB6+wfbcAGsAHi3kgBpgEtGy4AAfG54BWfqAPnZm4AAlZUj4MAkMA8GAGB4vEgfMlLLw6CwPBA8PYRmMgZVgAC6CgmI4cIommQELwICh8RBgKZKvALh1ur0bHQABR5PYMui0Wk7em2ADaAF0AJS0AASABUALIAGQAogR+Mp3CROCAFBBwVC2ikBpj5CgBIqGjizLA5TAFdAmalImAuqlBRoVQh5HBgEy1eDWfs7J5cjzGYKhroVfpDEhHM4MV6GRR5NN0JrtnRg6BVirTFBeHAKYmYY6QNpdB73LmCJZBlSAXAubtvczeSmQMNSuMbmKNgBlHFgPEUNwusBIPAAQlS1xetTmxT0SDoESgdD0C4aACtHMwxytLrohawgA) + + ```ts + interface Article { + title: string; + thumbnail: string; + content: string; + } + + // Creates new type out of the `Article` interface composed + // from the Articles' two properties: `title` and `thumbnail`. + // `ArticlePreview = {title: string; thumbnail: string}` + type ArticlePreview = Pick; + + // Render a list of articles using only title and description. + function renderArticlePreviews(previews: ArticlePreview[]): HTMLElement { + const articles = document.createElement('div'); + + for (const preview of previews) { + // Append preview to the articles. + } + + return articles; + } + + const articles = renderArticlePreviews([ + { + title: 'TypeScript tutorial!', + thumbnail: '/assets/ts.jpg' + } + ]); + ``` +
+ +- [`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type) - Construct a type with a set of properties `K` of type `T`. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/AQ4ejYAUHsGcCWAXBMB2dgwGbAKYC2ADgDYwCeeemCaWArgE7ADGMxAhmuQHQBQoYEnJE8wALKEARnkaxEKdMAC8wAOS0kstGuAAfdQBM8ANzxlRjXQbVaWACwC0JPB0NqA3HwGgIwAJJoWozYHCxixnAsjAhStADmwESMMJYo1Fi4HMCIaPEu+MRklHj8gpqyoeHAAKJFFFTAAN4+giDYCIxwSAByHAR4AFw5SDF5Xm2gJBzdfQPD3WPxE5PAlBxdAPLYNQAelgh4aOHDaPQEMowrIAC+3oJ+AMKMrlrAXFhSAFZ4LEhC9g4-0BmA4JBISXgiCkBQABpILrJ5MhUGhYcATGD6Bk4Hh-jNgABrPDkOBlXyQAAq9ngYmJpOAAHcEOCRjAXqwYODfoo6DhakUSph+Uh7GI4P0xER4Cj0OSQGwMP8tP1hgAlX7swwAHgRl2RvIANALSA08ABtAC6AD4VM1Wm0Kow0MMrYaHYJjGYLLJXZb3at1HYnC43Go-QHQDcvA6-JsmEJXARgCDgMYWAhjIYhDAU+YiMAAFIwex0ZmilMITCGF79TLAGRsAgJYAAZRwSEZGzEABFTOZUrJ5Yn+jwnWgeER6HB7AAKJrADpdXqS4ZqYultTG6azVfqHswPBbtauLY7fayQ7HIbAAAMwBuAEoYw9IBq2Ixs9h2eFMOQYPQObALQKJgggABeYhghCIpikkKRpOQRIknAsZUiIeCttECBEP8NSMCkjDDAARMGziuIYxHwYOjDCMBmDNnAuTxA6irdCOBB1Lh5Dqpqn66tISIykawBnOCtqqC0gbjqc9DgpGkxegOliyfJDrRkAA) + + ```ts + // Positions of employees in our company. + type MemberPosition = 'intern' | 'developer' | 'tech-lead'; + + // Interface describing properties of a single employee. + interface Employee { + firstName: string; + lastName: string; + yearsOfExperience: number; + } + + // Create an object that has all possible `MemberPosition` values set as keys. + // Those keys will store a collection of Employees of the same position. + const team: Record = { + intern: [], + developer: [], + 'tech-lead': [], + }; + + // Our team has decided to help John with his dream of becoming Software Developer. + team.intern.push({ + firstName: 'John', + lastName: 'Doe', + yearsOfExperience: 0 + }); + + // `Record` forces you to initialize all of the property keys. + // TypeScript Error: "tech-lead" property is missing + const teamEmpty: Record = { + intern: null, + developer: null, + }; + ``` +
+ +- [`Exclude`](https://www.typescriptlang.org/docs/handbook/utility-types.html#excludetype-excludedunion) - Exclude from `T` those types that are assignable to `U`. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/JYOwLgpgTgZghgYwgAgMrQG7QMIHsQzADmyA3gFDLIAOuUYAXMiAK4A2byAPsgM5hRQJHqwC2AI2gBucgF9y5MAE9qKAEoQAjiwj8AEnBAATNtGQBeZAAooWphu26wAGmS3e93bRC8IASgsAPmRDJRlyAHoI5ABRAA8ENhYjFFYOZGVVZBgoXFFkAAM0zh5+QRBhZhYJaAKAOkjogEkQZAQ4X2QAdwALCFbaemRgXmQtFjhOMFwq9K6ULuB0lk6U+HYwZAxJnQaYFhAEMGB8ZCIIMAAFOjAANR2IK0HGWISklIAedCgsKDwCYgAbQA5M9gQBdVzFQJ+JhiSRQMiUYYwayZCC4VHPCzmSzAspCYEBWxgFhQAZwKC+FpgJ43VwARgADH4ZFQSWSBjcZPJyPtDsdTvxKWBvr8rD1DCZoJ5HPopaYoK4EPhCEQmGKcKriLCtrhgEYkVQVT5Nr4fmZLLZtMBbFZgT0wGBqES6ghbHBIJqoBKFdBWQpjfh+DQbhY2tqiHVsbjLMVkAB+ZAAZiZaeQTHOVxu9ySjxNaujNwDVHNvzqbBGkBAdPoAfkQA) + + ```ts + interface ServerConfig { + port: null | string | number; + } + + type RequestHandler = (request: Request, response: Response) => void; + + // Exclude `null` type from `null | string | number`. + // In case the port is equal to `null`, we will use default value. + function getPortValue(port: Exclude): number { + if (typeof port === 'string') { + return parseInt(port, 10); + } + + return port; + } + + function startServer(handler: RequestHandler, config: ServerConfig): void { + const server = require('http').createServer(handler); + + const port = config.port === null ? 3000 : getPortValue(config.port); + server.listen(port); + } + ``` +
+ +- [`Extract`](https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union) - Extract from `T` those types that are assignable to `U`. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/CYUwxgNghgTiAEAzArgOzAFwJYHtXzSwEdkQBJYACgEoAueVZAWwCMQYBuAKDDwGcM8MgBF4AXngBlAJ6scESgHIRi6ty5ZUGdoihgEABXZ888AN5d48ANoiAuvUat23K6ihMQ9ATE0BzV3goPy8GZjZOLgBfLi4Aejj4AEEICBwAdz54MAALKFQQ+BxEeAAHY1NgKAwoIKy0grr4DByEUpgccpgMaXgAaxBerCzi+B9-ZulygDouFHRsU1z8kKMYE1RhaqgAHkt4AHkWACt4EAAPbVRgLLWNgBp9gGlBs8uQa6yAUUuYPQwdgNpKM7nh7mMML4CgA+R5WABqUAgpDeVxuhxO1he0jsXGh8EoOBO9COx3BQPo2PBADckaR6IjkSA6PBqTgsMBzPsicdrEC7OJWXSQNwYvFEgAVTS9JLXODpeDpKBZFg4GCoWa8VACIJykAKiQWKy2YQOAioYikCg0OEMDyhRSy4DyxS24KhAAMjyi6gS8AAwjh5OD0iBFHAkJoEOksC1mnkMJq8gUQKDNttKPlnfrwYp3J5XfBHXqoKpfYkAOI4ansTxaeDADmoRSCCBYAbxhC6TDx6rwYHIRX5bScjA4bLJwoDmDwDkfbA9JMrVMVdM1TN69LgkTgwgkchUahqIA) + + ```ts + declare function uniqueId(): number; + + const ID = Symbol('ID'); + + interface Person { + [ID]: number; + name: string; + age: number; + } + + // Allows changing the person data as long as the property key is of string type. + function changePersonData< + Obj extends Person, + Key extends Extract, + Value extends Obj[Key] + > (obj: Obj, key: Key, value: Value): void { + obj[key] = value; + } + + // Tiny Andrew was born. + const andrew = { + [ID]: uniqueId(), + name: 'Andrew', + age: 0, + }; + + // Cool, we're fine with that. + changePersonData(andrew, 'name', 'Pony'); + + // Goverment didn't like the fact that you wanted to change your identity. + changePersonData(andrew, ID, uniqueId()); + ``` +
+ +- [`NonNullable`](https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullabletype) - Exclude `null` and `undefined` from `T`. +
+ + Example + + Works with strictNullChecks set to true. + + [Playground](https://typescript-play.js.org/?target=6#code/C4TwDgpgBACg9gJ2AOQK4FsBGEFQLxQDOwCAlgHYDmUAPlORtrnQwDasDcAUFwPQBU-WAEMkUOADMowqAGNWwwoSgATCBIqlgpOOSjAAFsOBRSy1IQgr9cKJlSlW1mZYQA3HFH68u8xcoBlHA8EACEHJ08Aby4oKDBUTFZSWXjEFEYcAEIALihkXTR2YSSIAB54JDQsHAA+blj4xOTUsHSACkMzPKD3HHDHNQQAGjSkPMqMmoQASh7g-oihqBi4uNIpdraxPAI2VhmVxrX9AzMAOm2ppnwoAA4ABifuE4BfKAhWSyOTuK7CS7pao3AhXF5rV48E4ICDAVAIPT-cGQyG+XTEIgLMJLTx7CAAdygvRCA0iCHaMwarhJOIQjUBSHaACJHk8mYdeLwxtdcVAAOSsh58+lXdr7Dlcq7A3n3J4PEUdADMcspUE53OluAIUGVTx46oAKuAIAFZGQwCYAKIIBCILjUxaDHAMnla+iodjcIA) + + ```ts + type PortNumber = string | number | null; + + /** Part of a class definition that is used to build a server */ + class ServerBuilder { + portNumber!: NonNullable; + + port(this: ServerBuilder, port: PortNumber): ServerBuilder { + if (port == null) { + this.portNumber = 8000; + } else { + this.portNumber = port; + } + + return this; + } + } + + const serverBuilder = new ServerBuilder(); + + serverBuilder + .port('8000') // portNumber = '8000' + .port(null) // portNumber = 8000 + .port(3000); // portNumber = 3000 + + // TypeScript error + serverBuilder.portNumber = null; + ``` +
+ +- [`Parameters`](https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype) - Obtain the parameters of a function type in a tuple. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/GYVwdgxgLglg9mABAZwBYmMANgUwBQxgAOIUAXIgIZgCeA2gLoCUFAbnDACaIDeAUIkQB6IYgCypSlBxUATrMo1ECsJzgBbLEoipqAc0J7EMKMgDkiHLnU4wp46pwAPHMgB0fAL58+oSLARECEosLAA5ABUYG2QAHgAxJGdpVWREPDdMylk9ZApqemZEAF4APipacrw-CApEgBogkKwAYThwckQwEHUAIxxZJl4BYVEImiIZKF0oZRwiWVdbeygJmThgOYgcGFYcbhqApCJsyhtpWXcR1cnEePBoeDAABVPzgbTixFeFd8uEsClADcIxGiygIFkSEOT3SmTc2VydQeRx+ZxwF2QQ34gkEwDgsnSuFmMBKiAADEDjIhYk1Qm0OlSYABqZnYka4xA1DJZHJYkGc7yCbyeRA+CAIZCzNAYbA4CIAdxg2zJwVCkWirjwMswuEaACYmCCgA) + + ```ts + function shuffle(input: any[]): void { + // Mutate array randomly changing its' elements indexes. + } + + function callNTimes any> (func: Fn, callCount: number) { + // Type that represents the type of the received function parameters. + type FunctionParameters = Parameters; + + return function (...args: FunctionParameters) { + for (let i = 0; i < callCount; i++) { + func(...args); + } + } + } + + const shuffleTwice = callNTimes(shuffle, 2); + ``` +
+ +- [`ConstructorParameters`](https://www.typescriptlang.org/docs/handbook/utility-types.html#constructorparameterstype) - Obtain the parameters of a constructor function type in a tuple. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/MYGwhgzhAECCBOAXAlqApgWQPYBM0mgG8AoaaFRENALmgkXmQDsBzAblOmCycTV4D8teo1YdO3JiICuwRFngAKClWENmLAJRFOZRAAtkEAHQq00ALzlklNBzIBfYk+KhIMAJJTEYJsDQAwmDA+mgAPAAq0GgAHnxMODCKTGgA7tCKxllg8CwQtL4AngDaALraFgB80EWa1SRkAA6MAG5gfNAB4FABPDJyCrQR9tDNyG0dwMGhtBhgjWEiGgA00F70vv4RhY3hEZXVVinpc42KmuJkkv3y8Bly8EPaDWTkhiZd7r3e8LK3llwGCMXGQWGhEOsfH5zJlsrl8p0+gw-goAAo5MAAW3BaHgEEilU0tEhmzQ212BJ0ry4SOg+kg+gBBiMximIGA0nAfAQLGk2N4EAAEgzYcYcnkLsRdDTvNEYkYUKwSdCme9WdM0MYwYhFPSIPpJdTkAAzDKxBUaZX+aAAQgsVmkCTQxuYaBw2ng4Ok8CYcotSu8pMur09iG9vuObxZnx6SN+AyUWTF8MN0CcZE4Ywm5jZHK5aB5fP4iCFIqT4oRRTKRLo6lYVNeAHpG50wOzOe1zHr9NLQ+HoABybsD4HOKXXRA1JCoKhBELmI5pNaB6Fz0KKBAodDYPAgSUTmqYsAALx4m5nC6nW9nGq14KtaEUA9gR9PvuNCjQ9BgACNvcwNBtAcLiAA) + + ```ts + class ArticleModel { + title: string; + content?: string; + + constructor(title: string) { + this.title = title; + } + } + + class InstanceCache any)> { + private ClassConstructor: T; + private cache: Map> = new Map(); + + constructor (ctr: T) { + this.ClassConstructor = ctr; + } + + getInstance (...args: ConstructorParameters): InstanceType { + const hash = this.calculateArgumentsHash(...args); + + const existingInstance = this.cache.get(hash); + if (existingInstance !== undefined) { + return existingInstance; + } + + return new this.ClassConstructor(...args); + } + + private calculateArgumentsHash(...args: any[]): string { + // Calculate hash. + return 'hash'; + } + } + + const articleCache = new InstanceCache(ArticleModel); + const amazonArticle = articleCache.getInstance('Amazon forests burining!'); + ``` +
+ +- [`ReturnType`](https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype) - Obtain the return type of a function type. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/MYGwhgzhAECSAmICmBlJAnAbgS2E6A3gFDTTwD2AcuQC4AW2AdgOYAUAlAFzSbnbyEAvkWFFQkGJSQB3GMVI1sNZNwg10TZgG4S0YOUY0kh1es07d+xmvQBXYDXLpWi5UlMaWAGj0GjJ6BtNdkJdBQYIADpXZGgAXmgYpB1ScOwoq38aeN9DYxoU6GFRKzVoJjUwRjwAYXJbPPRuAFkwAAcAHgAxBodsAx9GWwBbACMMAD4cxhloVraOCyYjdAAzMDxoOut1e0d0UNIZ6WhWSPOwdGYIbiqATwBtAF0uaHudUQB6ACpv6ABpJBINqJdAbADW0Do5BOw3u5R2VTwMHIq2gAANtjZ0bkbHsnFCwJh8ONjHp0EgwEZ4JFoN9PkRVr1FAZoMwkDRYIjqkgOrosepoEgAB7+eAwAV2BxOLy6ACCVxgIrFEoMeOl6AACpcwMMORgIB1JRMiBNWKVdhruJKfOdIpdrtwFddXlzKjyACp3Nq842HaDIbL6BrZBIVGhIpB1EMYSLsmjmtWW-YhAA+qegAAYLKQLQj3ZsEsdccmnGcLor2Dn8xGedHGpEIBzEzspfsfMHDNAANTQACMVaIljV5GQkRA5DYmIpVKQAgAJARO9le33BDXIyi0YuLW2nJFGLqkOvxFB0YPdBSaLZ0IwNzyPkO8-xkGgsLh8Al427a3hWAhXwwHA8EHT5PmgAB1bAQBAANJ24adKWpft72RaBUTgRBUCAj89HAM8xCTaBjggABRQx0DuHJv25P9dCkWRZVIAAiBjoFImpmjlFBgA0NpsjadByDacgIDAEAIAAQmYpjoGYgAZSBsmGPw6DtZiiFA8CoJguDmAQmoZ2QvtUKQLdoAYmBTwgdEiCAA) + + ```ts + /** Provides every element of the iterable `iter` into the `callback` function and stores the results in an array. */ + function mapIter< + Elem, + Func extends (elem: Elem) => any, + Ret extends ReturnType + >(iter: Iterable, callback: Func): Ret[] { + const mapped: Ret[] = []; + + for (const elem of iter) { + mapped.push(callback(elem)); + } + + return mapped; + } + + const setObject: Set = new Set(); + const mapObject: Map = new Map(); + + mapIter(setObject, (value: string) => value.indexOf('Foo')); // number[] + + mapIter(mapObject, ([key, value]: [number, string]) => { + return key % 2 === 0 ? value : 'Odd'; + }); // string[] + ``` +
+ +- [`InstanceType`](https://www.typescriptlang.org/docs/handbook/utility-types.html#instancetypetype) - Obtain the instance type of a constructor function type. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/MYGwhgzhAECSAmICmBlJAnAbgS2E6A3gFDTTwD2AcuQC4AW2AdgOYAUAlAFzSbnbyEAvkWFFQkGJSQB3GMVI1sNZNwg10TZgG4S0YOUY0kh1es07d+xmvQBXYDXLpWi5UlMaWAGj0GjJ6BtNdkJdBQYIADpXZGgAXmgYpB1ScOwoq38aeN9DYxoU6GFRKzVoJjUwRjwAYXJbPPRuAFkwAAcAHgAxBodsAx9GWwBbACMMAD4cxhloVraOCyYjdAAzMDxoOut1e0d0UNIZ6WhWSPOwdGYIbiqATwBtAF0uaHudUQB6ACpv6ABpJBINqJdAbADW0Do5BOw3u5R2VTwMHIq2gAANtjZ0bkbHsnFCwJh8ONjHp0EgwEZ4JFoN9PkRVr1FAZoMwkDRYIjqkgOrosepoEgAB7+eAwAV2BxOLy6ACCVxgIrFEoMeOl6AACpcwMMORgIB1JRMiBNWKVdhruJKfOdIpdrtwFddXlzKjyACp3Nq842HaDIbL6BrZBIVGhIpB1EMYSLsmjmtWW-YhAA+qegAAYLKQLQj3ZsEsdccmnGcLor2Dn8xGedHGpEIBzEzspfsfMHDNAANTQACMVaIljV5GQkRA5DYmIpVKQAgAJARO9le33BDXIyi0YuLW2nJFGLqkOvxFB0YPdBSaLZ0IwNzyPkO8-xkGgsLh8Al427a3hWAhXwwHA8EHT5PmgAB1bAQBAANJ24adKWpft72RaBUTgRBUCAj89HAM8xCTaBjggABRQx0DuHJv25P9dCkWRZVIAAiBjoFImpmjlFBgA0NpsjadByDacgIDAEAIAAQmYpjoGYgAZSBsmGPw6DtZiiFA8CoJguDmAQmoZ2QvtUKQLdoAYmBTwgdEiCAA) + + ```ts + class IdleService { + doNothing (): void {} + } + + class News { + title: string; + content: string; + + constructor(title: string, content: string) { + this.title = title; + this.content = content; + } + } + + const instanceCounter: Map = new Map(); + + interface Constructor { + new(...args: any[]): any; + } + + // Keep track how many instances of `Constr` constructor have been created. + function getInstance< + Constr extends Constructor, + Args extends ConstructorParameters + >(constructor: Constr, ...args: Args): InstanceType { + let count = instanceCounter.get(constructor) || 0; + + const instance = new constructor(...args); + + instanceCounter.set(constructor, count + 1); + + console.log(`Created ${count + 1} instances of ${Constr.name} class`); + + return instance; + } + + + const idleService = getInstance(IdleService); + // Will log: `Created 1 instances of IdleService class` + const newsEntry = getInstance(News, 'New ECMAScript proposals!', 'Last month...'); + // Will log: `Created 1 instances of News class` + ``` +
+ +- [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) - Constructs a type by picking all properties from T and then removing K. +
+ + Example + + + [Playground](https://typescript-play.js.org/?target=6#code/JYOwLgpgTgZghgYwgAgIImAWzgG2QbwChlks4BzCAVShwC5kBnMKUcgbmKYAcIFgIjBs1YgOXMpSFMWbANoBdTiW5woFddwAW0kfKWEAvoUIB6U8gDCUCHEiNkICAHdkYAJ69kz4GC3JcPG4oAHteKDABBxCYNAxsPFBIWEQUCAAPJG4wZABySUFcgJAAEzMLXNV1ck0dIuCw6EjBADpy5AB1FAQ4EGQAV0YUP2AHDy8wEOQbUugmBLwtEIA3OcmQnEjuZBgQqE7gAGtgZAhwKHdkHFGwNvGUdDIcAGUliIBJEF3kAF5kAHlML4ADyPBIAGjyBUYRQAPnkqho4NoYQA+TiEGD9EAISIhPozErQMG4AASK2gn2+AApek9pCSXm8wFSQooAJQMUkAFQAsgAZACiOAgmDOOSIJAQ+OYyGl4DgoDmf2QJRCCH6YvALQQNjsEGFovF1NyJWAy1y7OUyHMyE+yRAuFImG4Iq1YDswHxbRINjA-SgfXlHqVUE4xiAA) + + ```ts + interface Animal { + imageUrl: string; + species: string; + images: string[]; + paragraphs: string[]; + } + + // Creates new type with all properties of the `Animal` interface + // except 'images' and 'paragraphs' properties. We can use this + // type to render small hover tooltip for a wiki entry list. + type AnimalShortInfo = Omit; + + function renderAnimalHoverInfo (animals: AnimalShortInfo[]): HTMLElement { + const container = document.createElement('div'); + // Internal implementation. + return container; + } + ``` +
+ +- [`Uppercase`](https://www.typescriptlang.org/docs/handbook/utility-types.html#uppercasestringtype) - Transforms every character in a string into uppercase. +
+ + Example + + + ```ts + type T = Uppercase<'hello'>; // 'HELLO' + + type T2 = Uppercase<'foo' | 'bar'>; // 'FOO' | 'BAR' + + type T3 = Uppercase<`aB${S}`>; + type T4 = T3<'xYz'>; // 'ABXYZ' + + type T5 = Uppercase; // string + type T6 = Uppercase; // any + type T7 = Uppercase; // never + type T8 = Uppercase<42>; // Error, type 'number' does not satisfy the constraint 'string' + ``` +
+ +- [`Lowercase`](https://www.typescriptlang.org/docs/handbook/utility-types.html#lowercasestringtype) - Transforms every character in a string into lowercase. +
+ + Example + + + ```ts + type T = Lowercase<'HELLO'>; // 'hello' + + type T2 = Lowercase<'FOO' | 'BAR'>; // 'foo' | 'bar' + + type T3 = Lowercase<`aB${S}`>; + type T4 = T3<'xYz'>; // 'abxyz' + + type T5 = Lowercase; // string + type T6 = Lowercase; // any + type T7 = Lowercase; // never + type T8 = Lowercase<42>; // Error, type 'number' does not satisfy the constraint 'string' + ``` +
+ +- [`Capitalize`](https://www.typescriptlang.org/docs/handbook/utility-types.html#capitalizestringtype) - Transforms the first character in a string into uppercase. +
+ + Example + + + ```ts + type T = Capitalize<'hello'>; // 'Hello' + + type T2 = Capitalize<'foo' | 'bar'>; // 'Foo' | 'Bar' + + type T3 = Capitalize<`aB${S}`>; + type T4 = T3<'xYz'>; // 'ABxYz' + + type T5 = Capitalize; // string + type T6 = Capitalize; // any + type T7 = Capitalize; // never + type T8 = Capitalize<42>; // Error, type 'number' does not satisfy the constraint 'string' + ``` +
+ +- [`Uncapitalize`](https://www.typescriptlang.org/docs/handbook/utility-types.html#uncapitalizestringtype) - Transforms the first character in a string into lowercase. +
+ + Example + + + ```ts + type T = Uncapitalize<'Hello'>; // 'hello' + + type T2 = Uncapitalize<'Foo' | 'Bar'>; // 'foo' | 'bar' + + type T3 = Uncapitalize<`AB${S}`>; + type T4 = T3<'xYz'>; // 'aBxYz' + + type T5 = Uncapitalize; // string + type T6 = Uncapitalize; // any + type T7 = Uncapitalize; // never + type T8 = Uncapitalize<42>; // Error, type 'number' does not satisfy the constraint 'string' + ``` +
+ +You can find some examples in the [TypeScript docs](https://www.typescriptlang.org/docs/handbook/utility-types.html). + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Jarek Radosz](https://github.com/CvX) +- [Dimitri Benin](https://github.com/BendingBender) +- [Pelle Wessman](https://github.com/voxpelli) + +## License + +SPDX-License-Identifier: (MIT OR CC0-1.0) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/type-fest/source/async-return-type.d.ts b/node_modules/type-fest/source/async-return-type.d.ts new file mode 100644 index 00000000..57cc3631 --- /dev/null +++ b/node_modules/type-fest/source/async-return-type.d.ts @@ -0,0 +1,25 @@ +import type {PromiseValue} from './promise-value'; + +type AsyncFunction = (...args: any[]) => Promise; + +/** +Unwrap the return type of a function that returns a `Promise`. + +There has been [discussion](https://github.com/microsoft/TypeScript/pull/35998) about implementing this type in TypeScript. + +@example +```ts +import type {AsyncReturnType} from 'type-fest'; +import {asyncFunction} from 'api'; + +// This type resolves to the unwrapped return type of `asyncFunction`. +type Value = AsyncReturnType; + +async function doSomething(value: Value) {} + +asyncFunction().then(value => doSomething(value)); +``` + +@category Async +*/ +export type AsyncReturnType = PromiseValue>; diff --git a/node_modules/type-fest/source/asyncify.d.ts b/node_modules/type-fest/source/asyncify.d.ts new file mode 100644 index 00000000..6726b7e1 --- /dev/null +++ b/node_modules/type-fest/source/asyncify.d.ts @@ -0,0 +1,33 @@ +import type {PromiseValue} from './promise-value'; +import type {SetReturnType} from './set-return-type'; + +/** +Create an async version of the given function type, by boxing the return type in `Promise` while keeping the same parameter types. + +Use-case: You have two functions, one synchronous and one asynchronous that do the same thing. Instead of having to duplicate the type definition, you can use `Asyncify` to reuse the synchronous type. + +@example +``` +import type {Asyncify} from 'type-fest'; + +// Synchronous function. +function getFooSync(someArg: SomeType): Foo { + // … +} + +type AsyncifiedFooGetter = Asyncify; +//=> type AsyncifiedFooGetter = (someArg: SomeType) => Promise; + +// Same as `getFooSync` but asynchronous. +const getFooAsync: AsyncifiedFooGetter = (someArg) => { + // TypeScript now knows that `someArg` is `SomeType` automatically. + // It also knows that this function must return `Promise`. + // If you have `@typescript-eslint/promise-function-async` linter rule enabled, it will even report that "Functions that return promises must be async.". + + // … +} +``` + +@category Async +*/ +export type Asyncify any> = SetReturnType>>>; diff --git a/node_modules/type-fest/source/basic.d.ts b/node_modules/type-fest/source/basic.d.ts new file mode 100644 index 00000000..ac74fdc9 --- /dev/null +++ b/node_modules/type-fest/source/basic.d.ts @@ -0,0 +1,45 @@ +/** +Matches a [`class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes). + +@category Class +*/ +export type Class = Constructor & {prototype: T}; + +/** +Matches a [`class` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes). + +@category Class +*/ +export type Constructor = new(...arguments_: Arguments) => T; + +/** +Matches a JSON object. + +This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from. Don't use this as a direct return type as the user would have to double-cast it: `jsonObject as unknown as CustomResponse`. Instead, you could extend your CustomResponse type from it to ensure your type only uses JSON-compatible types: `interface CustomResponse extends JsonObject { … }`. + +@category JSON +*/ +export type JsonObject = {[Key in string]?: JsonValue}; + +/** +Matches a JSON array. + +@category JSON +*/ +export type JsonArray = JsonValue[]; + +/** +Matches any valid JSON primitive value. + +@category JSON +*/ +export type JsonPrimitive = string | number | boolean | null; + +/** +Matches any valid JSON value. + +@see `Jsonify` if you need to transform a type to one that is assignable to `JsonValue`. + +@category JSON +*/ +export type JsonValue = JsonPrimitive | JsonObject | JsonArray; diff --git a/node_modules/type-fest/source/camel-case.d.ts b/node_modules/type-fest/source/camel-case.d.ts new file mode 100644 index 00000000..bcf54fc9 --- /dev/null +++ b/node_modules/type-fest/source/camel-case.d.ts @@ -0,0 +1,73 @@ +import type {WordSeparators} from '../source/internal'; +import type {Split} from './split'; + +/** +Step by step takes the first item in an array literal, formats it and adds it to a string literal, and then recursively appends the remainder. + +Only to be used by `CamelCaseStringArray<>`. + +@see CamelCaseStringArray +*/ +type InnerCamelCaseStringArray = + Parts extends [`${infer FirstPart}`, ...infer RemainingParts] + ? FirstPart extends undefined + ? '' + : FirstPart extends '' + ? InnerCamelCaseStringArray + : `${PreviousPart extends '' ? FirstPart : Capitalize}${InnerCamelCaseStringArray}` + : ''; + +/** +Starts fusing the output of `Split<>`, an array literal of strings, into a camel-cased string literal. + +It's separate from `InnerCamelCaseStringArray<>` to keep a clean API outwards to the rest of the code. + +@see Split +*/ +type CamelCaseStringArray = + Parts extends [`${infer FirstPart}`, ...infer RemainingParts] + ? Uncapitalize<`${FirstPart}${InnerCamelCaseStringArray}`> + : never; + +/** +Convert a string literal to camel-case. + +This can be useful when, for example, converting some kebab-cased command-line flags or a snake-cased database result. + +@example +``` +import type {CamelCase} from 'type-fest'; + +// Simple + +const someVariable: CamelCase<'foo-bar'> = 'fooBar'; + +// Advanced + +type CamelCasedProperties = { + [K in keyof T as CamelCase]: T[K] +}; + +interface RawOptions { + 'dry-run': boolean; + 'full_family_name': string; + foo: number; + BAR: string; + QUZ_QUX: number; + 'OTHER-FIELD': boolean; +} + +const dbResult: CamelCasedProperties = { + dryRun: true, + fullFamilyName: 'bar.js', + foo: 123, + bar: 'foo', + quzQux: 6, + otherField: false +}; +``` + +@category Change case +@category Template literal +*/ +export type CamelCase = K extends string ? CamelCaseStringArray ? Lowercase : K, WordSeparators>> : K; diff --git a/node_modules/type-fest/source/camel-cased-properties-deep.d.ts b/node_modules/type-fest/source/camel-cased-properties-deep.d.ts new file mode 100644 index 00000000..c821dc46 --- /dev/null +++ b/node_modules/type-fest/source/camel-cased-properties-deep.d.ts @@ -0,0 +1,54 @@ +import type {CamelCase} from './camel-case'; + +/** +Convert object properties to camel case recursively. + +This can be useful when, for example, converting some API types from a different style. + +@see CamelCasedProperties +@see CamelCase + +@example +``` +import type {CamelCasedPropertiesDeep} from 'type-fest'; + +interface User { + UserId: number; + UserName: string; +} + +interface UserWithFriends { + UserInfo: User; + UserFriends: User[]; +} + +const result: CamelCasedPropertiesDeep = { + userInfo: { + userId: 1, + userName: 'Tom', + }, + userFriends: [ + { + userId: 2, + userName: 'Jerry', + }, + { + userId: 3, + userName: 'Spike', + }, + ], +}; +``` + +@category Change case +@category Template literal +@category Object +*/ +export type CamelCasedPropertiesDeep = Value extends Function + ? Value + : Value extends Array + ? Array> + : Value extends Set + ? Set> : { + [K in keyof Value as CamelCase]: CamelCasedPropertiesDeep; + }; diff --git a/node_modules/type-fest/source/camel-cased-properties.d.ts b/node_modules/type-fest/source/camel-cased-properties.d.ts new file mode 100644 index 00000000..afe0629e --- /dev/null +++ b/node_modules/type-fest/source/camel-cased-properties.d.ts @@ -0,0 +1,36 @@ +import type {CamelCase} from './camel-case'; + +/** +Convert object properties to camel case but not recursively. + +This can be useful when, for example, converting some API types from a different style. + +@see CamelCasedPropertiesDeep +@see CamelCase + +@example +``` +import type {CamelCasedProperties} from 'type-fest'; + +interface User { + UserId: number; + UserName: string; +} + +const result: CamelCasedProperties = { + userId: 1, + userName: 'Tom', +}; +``` + +@category Change case +@category Template literal +@category Object +*/ +export type CamelCasedProperties = Value extends Function + ? Value + : Value extends Array + ? Value + : { + [K in keyof Value as CamelCase]: Value[K]; + }; diff --git a/node_modules/type-fest/source/conditional-except.d.ts b/node_modules/type-fest/source/conditional-except.d.ts new file mode 100644 index 00000000..d61792a9 --- /dev/null +++ b/node_modules/type-fest/source/conditional-except.d.ts @@ -0,0 +1,45 @@ +import type {Except} from './except'; +import type {ConditionalKeys} from './conditional-keys'; + +/** +Exclude keys from a shape that matches the given `Condition`. + +This is useful when you want to create a new type with a specific set of keys from a shape. For example, you might want to exclude all the primitive properties from a class and form a new shape containing everything but the primitive properties. + +@example +``` +import type {Primitive, ConditionalExcept} from 'type-fest'; + +class Awesome { + name: string; + successes: number; + failures: bigint; + + run() {} +} + +type ExceptPrimitivesFromAwesome = ConditionalExcept; +//=> {run: () => void} +``` + +@example +``` +import type {ConditionalExcept} from 'type-fest'; + +interface Example { + a: string; + b: string | number; + c: () => void; + d: {}; +} + +type NonStringKeysOnly = ConditionalExcept; +//=> {b: string | number; c: () => void; d: {}} +``` + +@category Object +*/ +export type ConditionalExcept = Except< + Base, + ConditionalKeys +>; diff --git a/node_modules/type-fest/source/conditional-keys.d.ts b/node_modules/type-fest/source/conditional-keys.d.ts new file mode 100644 index 00000000..c337dbb2 --- /dev/null +++ b/node_modules/type-fest/source/conditional-keys.d.ts @@ -0,0 +1,47 @@ +/** +Extract the keys from a type where the value type of the key extends the given `Condition`. + +Internally this is used for the `ConditionalPick` and `ConditionalExcept` types. + +@example +``` +import type {ConditionalKeys} from 'type-fest'; + +interface Example { + a: string; + b: string | number; + c?: string; + d: {}; +} + +type StringKeysOnly = ConditionalKeys; +//=> 'a' +``` + +To support partial types, make sure your `Condition` is a union of undefined (for example, `string | undefined`) as demonstrated below. + +@example +``` +import type {ConditionalKeys} from 'type-fest'; + +type StringKeysAndUndefined = ConditionalKeys; +//=> 'a' | 'c' +``` + +@category Object +*/ +export type ConditionalKeys = NonNullable< + // Wrap in `NonNullable` to strip away the `undefined` type from the produced union. + { + // Map through all the keys of the given base type. + [Key in keyof Base]: + // Pick only keys with types extending the given `Condition` type. + Base[Key] extends Condition + // Retain this key since the condition passes. + ? Key + // Discard this key since the condition fails. + : never; + + // Convert the produced object into a union type of the keys which passed the conditional test. + }[keyof Base] +>; diff --git a/node_modules/type-fest/source/conditional-pick.d.ts b/node_modules/type-fest/source/conditional-pick.d.ts new file mode 100644 index 00000000..f90e399b --- /dev/null +++ b/node_modules/type-fest/source/conditional-pick.d.ts @@ -0,0 +1,44 @@ +import type {ConditionalKeys} from './conditional-keys'; + +/** +Pick keys from the shape that matches the given `Condition`. + +This is useful when you want to create a new type from a specific subset of an existing type. For example, you might want to pick all the primitive properties from a class and form a new automatically derived type. + +@example +``` +import type {Primitive, ConditionalPick} from 'type-fest'; + +class Awesome { + name: string; + successes: number; + failures: bigint; + + run() {} +} + +type PickPrimitivesFromAwesome = ConditionalPick; +//=> {name: string; successes: number; failures: bigint} +``` + +@example +``` +import type {ConditionalPick} from 'type-fest'; + +interface Example { + a: string; + b: string | number; + c: () => void; + d: {}; +} + +type StringKeysOnly = ConditionalPick; +//=> {a: string} +``` + +@category Object +*/ +export type ConditionalPick = Pick< + Base, + ConditionalKeys +>; diff --git a/node_modules/type-fest/source/delimiter-case.d.ts b/node_modules/type-fest/source/delimiter-case.d.ts new file mode 100644 index 00000000..770707ef --- /dev/null +++ b/node_modules/type-fest/source/delimiter-case.d.ts @@ -0,0 +1,93 @@ +import type {UpperCaseCharacters, WordSeparators} from '../source/internal'; + +/** +Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters. + +@category Template literal +*/ +export type SplitIncludingDelimiters = + Source extends '' ? [] : + Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}` ? + ( + Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}` + ? UsedDelimiter extends Delimiter + ? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}` + ? [...SplitIncludingDelimiters, UsedDelimiter, ...SplitIncludingDelimiters] + : never + : never + : never + ) : + [Source]; + +/** +Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing. + +@see StringArrayToDelimiterCase +*/ +type StringPartToDelimiterCase = + StringPart extends UsedWordSeparators ? Delimiter : + Start extends true ? Lowercase : + StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase}` : + StringPart; + +/** +Takes the result of a splitted string literal and recursively concatenates it together into the desired casing. + +It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated. + +@see SplitIncludingDelimiters +*/ +type StringArrayToDelimiterCase = + Parts extends [`${infer FirstPart}`, ...infer RemainingParts] + ? `${StringPartToDelimiterCase}${StringArrayToDelimiterCase}` + : Parts extends [string] + ? string + : ''; + +/** +Convert a string literal to a custom string delimiter casing. + +This can be useful when, for example, converting a camel-cased object property to an oddly cased one. + +@see KebabCase +@see SnakeCase + +@example +``` +import type {DelimiterCase} from 'type-fest'; + +// Simple + +const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar'; + +// Advanced + +type OddlyCasedProperties = { + [K in keyof T as DelimiterCase]: T[K] +}; + +interface SomeOptions { + dryRun: boolean; + includeFile: string; + foo: number; +} + +const rawCliOptions: OddlyCasedProperties = { + 'dry#run': true, + 'include#file': 'bar.js', + foo: 123 +}; +``` + +@category Change case +@category Template literal +*/ +export type DelimiterCase = Value extends string + ? StringArrayToDelimiterCase< + SplitIncludingDelimiters, + true, + WordSeparators, + UpperCaseCharacters, + Delimiter + > + : Value; diff --git a/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts b/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts new file mode 100644 index 00000000..36b4725f --- /dev/null +++ b/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts @@ -0,0 +1,60 @@ +import type {DelimiterCase} from './delimiter-case'; + +/** +Convert object properties to delimiter case recursively. + +This can be useful when, for example, converting some API types from a different style. + +@see DelimiterCase +@see DelimiterCasedProperties + +@example +``` +import type {DelimiterCasedPropertiesDeep} from 'type-fest'; + +interface User { + userId: number; + userName: string; +} + +interface UserWithFriends { + userInfo: User; + userFriends: User[]; +} + +const result: DelimiterCasedPropertiesDeep = { + 'user-info': { + 'user-id': 1, + 'user-name': 'Tom', + }, + 'user-friends': [ + { + 'user-id': 2, + 'user-name': 'Jerry', + }, + { + 'user-id': 3, + 'user-name': 'Spike', + }, + ], +}; +``` + +@category Change case +@category Template literal +@category Object +*/ +export type DelimiterCasedPropertiesDeep< + Value, + Delimiter extends string, +> = Value extends Function | Date | RegExp + ? Value + : Value extends Array + ? Array> + : Value extends Set + ? Set> : { + [K in keyof Value as DelimiterCase< + K, + Delimiter + >]: DelimiterCasedPropertiesDeep; + }; diff --git a/node_modules/type-fest/source/delimiter-cased-properties.d.ts b/node_modules/type-fest/source/delimiter-cased-properties.d.ts new file mode 100644 index 00000000..03b76af5 --- /dev/null +++ b/node_modules/type-fest/source/delimiter-cased-properties.d.ts @@ -0,0 +1,37 @@ +import type {DelimiterCase} from './delimiter-case'; + +/** +Convert object properties to delimiter case but not recursively. + +This can be useful when, for example, converting some API types from a different style. + +@see DelimiterCase +@see DelimiterCasedPropertiesDeep + +@example +``` +import type {DelimiterCasedProperties} from 'type-fest'; + +interface User { + userId: number; + userName: string; +} + +const result: DelimiterCasedProperties = { + 'user-id': 1, + 'user-name': 'Tom', +}; +``` + +@category Change case +@category Template literal +@category Object +*/ +export type DelimiterCasedProperties< + Value, + Delimiter extends string, +> = Value extends Function + ? Value + : Value extends Array + ? Value + : {[K in keyof Value as DelimiterCase]: Value[K]}; diff --git a/node_modules/type-fest/source/entries.d.ts b/node_modules/type-fest/source/entries.d.ts new file mode 100644 index 00000000..9fe2fd32 --- /dev/null +++ b/node_modules/type-fest/source/entries.d.ts @@ -0,0 +1,62 @@ +import type {ArrayEntry, MapEntry, ObjectEntry, SetEntry} from './entry'; + +type ArrayEntries = Array>; +type MapEntries = Array>; +type ObjectEntries = Array>; +type SetEntries> = Array>; + +/** +Many collections have an `entries` method which returns an array of a given object's own enumerable string-keyed property [key, value] pairs. The `Entries` type will return the type of that collection's entries. + +For example the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries|`Object`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries|`Map`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries|`Array`}, and {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries|`Set`} collections all have this method. Note that `WeakMap` and `WeakSet` do not have this method since their entries are not enumerable. + +@see `Entry` if you want to just access the type of a single entry. + +@example +``` +import type {Entries} from 'type-fest'; + +interface Example { + someKey: number; +} + +const manipulatesEntries = (examples: Entries) => examples.map(example => [ + // Does some arbitrary processing on the key (with type information available) + example[0].toUpperCase(), + + // Does some arbitrary processing on the value (with type information available) + example[1].toFixed() +]); + +const example: Example = {someKey: 1}; +const entries = Object.entries(example) as Entries; +const output = manipulatesEntries(entries); + +// Objects +const objectExample = {a: 1}; +const objectEntries: Entries = [['a', 1]]; + +// Arrays +const arrayExample = ['a', 1]; +const arrayEntries: Entries = [[0, 'a'], [1, 1]]; + +// Maps +const mapExample = new Map([['a', 1]]); +const mapEntries: Entries = [['a', 1]]; + +// Sets +const setExample = new Set(['a', 1]); +const setEntries: Entries = [['a', 'a'], [1, 1]]; +``` + +@category Object +@category Map +@category Set +@category Array +*/ +export type Entries = + BaseType extends Map ? MapEntries + : BaseType extends Set ? SetEntries + : BaseType extends readonly unknown[] ? ArrayEntries + : BaseType extends object ? ObjectEntries + : never; diff --git a/node_modules/type-fest/source/entry.d.ts b/node_modules/type-fest/source/entry.d.ts new file mode 100644 index 00000000..678b67a1 --- /dev/null +++ b/node_modules/type-fest/source/entry.d.ts @@ -0,0 +1,65 @@ +type MapKey = BaseType extends Map ? KeyType : never; +type MapValue = BaseType extends Map ? ValueType : never; + +export type ArrayEntry = [number, BaseType[number]]; +export type MapEntry = [MapKey, MapValue]; +export type ObjectEntry = [keyof BaseType, BaseType[keyof BaseType]]; +export type SetEntry = BaseType extends Set ? [ItemType, ItemType] : never; + +/** +Many collections have an `entries` method which returns an array of a given object's own enumerable string-keyed property [key, value] pairs. The `Entry` type will return the type of that collection's entry. + +For example the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries|`Object`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries|`Map`}, {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries|`Array`}, and {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries|`Set`} collections all have this method. Note that `WeakMap` and `WeakSet` do not have this method since their entries are not enumerable. + +@see `Entries` if you want to just access the type of the array of entries (which is the return of the `.entries()` method). + +@example +``` +import type {Entry} from 'type-fest'; + +interface Example { + someKey: number; +} + +const manipulatesEntry = (example: Entry) => [ + // Does some arbitrary processing on the key (with type information available) + example[0].toUpperCase(), + + // Does some arbitrary processing on the value (with type information available) + example[1].toFixed(), +]; + +const example: Example = {someKey: 1}; +const entry = Object.entries(example)[0] as Entry; +const output = manipulatesEntry(entry); + +// Objects +const objectExample = {a: 1}; +const objectEntry: Entry = ['a', 1]; + +// Arrays +const arrayExample = ['a', 1]; +const arrayEntryString: Entry = [0, 'a']; +const arrayEntryNumber: Entry = [1, 1]; + +// Maps +const mapExample = new Map([['a', 1]]); +const mapEntry: Entry = ['a', 1]; + +// Sets +const setExample = new Set(['a', 1]); +const setEntryString: Entry = ['a', 'a']; +const setEntryNumber: Entry = [1, 1]; +``` + +@category Object +@category Map +@category Array +@category Set +*/ +export type Entry = + BaseType extends Map ? MapEntry + : BaseType extends Set ? SetEntry + : BaseType extends readonly unknown[] ? ArrayEntry + : BaseType extends object ? ObjectEntry + : never; diff --git a/node_modules/type-fest/source/exact.d.ts b/node_modules/type-fest/source/exact.d.ts new file mode 100644 index 00000000..0227f3d0 --- /dev/null +++ b/node_modules/type-fest/source/exact.d.ts @@ -0,0 +1,73 @@ +import type {KeysOfUnion} from './internal'; + +/** +Extract the element of an array that also works for array union. + +Returns `never` if T is not an array. + +It creates a type-safe way to access the element type of `unknown` type. +*/ +type ArrayElement = T extends readonly unknown[] ? T[0] : never; + +/** +Extract the object field type if T is an object and K is a key of T, return `never` otherwise. + +It creates a type-safe way to access the member type of `unknown` type. +*/ +type ObjectValue = K extends keyof T ? T[K] : never; + +/** +Create a type from `ParameterType` and `InputType` and change keys exclusive to `InputType` to `never`. +- Generate a list of keys that exists in `InputType` but not in `ParameterType`. +- Mark these excess keys as `never`. +*/ +type ExactObject = {[Key in keyof ParameterType]: Exact>} + & Record>, never>; + +/** +Create a type that does not allow extra properties, meaning it only allows properties that are explicitly declared. + +This is useful for function type-guarding to reject arguments with excess properties. Due to the nature of TypeScript, it does not complain if excess properties are provided unless the provided value is an object literal. + +*Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/12936) if you want to have this type as a built-in in TypeScript.* + +@example +``` +type OnlyAcceptName = {name: string}; + +function onlyAcceptName(args: OnlyAcceptName) {} + +// TypeScript complains about excess properties when an object literal is provided. +onlyAcceptName({name: 'name', id: 1}); +//=> `id` is excess + +// TypeScript does not complain about excess properties when the provided value is a variable (not an object literal). +const invalidInput = {name: 'name', id: 1}; +onlyAcceptName(invalidInput); // No errors +``` + +Having `Exact` allows TypeScript to reject excess properties. + +@example +``` +import {Exact} from 'type-fest'; + +type OnlyAcceptName = {name: string}; + +function onlyAcceptNameImproved>(args: T) {} + +const invalidInput = {name: 'name', id: 1}; +onlyAcceptNameImproved(invalidInput); // Compilation error +``` + +[Read more](https://stackoverflow.com/questions/49580725/is-it-possible-to-restrict-typescript-object-to-contain-only-properties-defined) + +@category Utilities +*/ +export type Exact = + // Convert union of array to array of union: A[] & B[] => (A & B)[] + ParameterType extends unknown[] ? Array, ArrayElement>> + // In TypeScript, Array is a subtype of ReadonlyArray, so always test Array before ReadonlyArray. + : ParameterType extends readonly unknown[] ? ReadonlyArray, ArrayElement>> + : ParameterType extends object ? ExactObject + : ParameterType; diff --git a/node_modules/type-fest/source/except.d.ts b/node_modules/type-fest/source/except.d.ts new file mode 100644 index 00000000..dab21d54 --- /dev/null +++ b/node_modules/type-fest/source/except.d.ts @@ -0,0 +1,57 @@ +import type {IsEqual} from './internal'; + +/** +Filter out keys from an object. + +Returns `never` if `Exclude` is strictly equal to `Key`. +Returns `never` if `Key` extends `Exclude`. +Returns `Key` otherwise. + +@example +``` +type Filtered = Filter<'foo', 'foo'>; +//=> never +``` + +@example +``` +type Filtered = Filter<'bar', string>; +//=> never +``` + +@example +``` +type Filtered = Filter<'bar', 'foo'>; +//=> 'bar' +``` + +@see {Except} +*/ +type Filter = IsEqual extends true ? never : (KeyType extends ExcludeType ? never : KeyType); + +/** +Create a type from an object type without certain keys. + +This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically. + +This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)). + +@example +``` +import type {Except} from 'type-fest'; + +type Foo = { + a: number; + b: string; + c: boolean; +}; + +type FooWithoutA = Except; +//=> {b: string}; +``` + +@category Object +*/ +export type Except = { + [KeyType in keyof ObjectType as Filter]: ObjectType[KeyType]; +}; diff --git a/node_modules/type-fest/source/fixed-length-array.d.ts b/node_modules/type-fest/source/fixed-length-array.d.ts new file mode 100644 index 00000000..9152e906 --- /dev/null +++ b/node_modules/type-fest/source/fixed-length-array.d.ts @@ -0,0 +1,43 @@ +/** +Methods to exclude. +*/ +type ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift'; + +/** +Create a type that represents an array of the given type and length. The array's length and the `Array` prototype methods that manipulate its length are excluded in the resulting type. + +Please participate in [this issue](https://github.com/microsoft/TypeScript/issues/26223) if you want to have a similiar type built into TypeScript. + +Use-cases: +- Declaring fixed-length tuples or arrays with a large number of items. +- Creating a range union (for example, `0 | 1 | 2 | 3 | 4` from the keys of such a type) without having to resort to recursive types. +- Creating an array of coordinates with a static length, for example, length of 3 for a 3D vector. + +Note: This type does not prevent out-of-bounds access. Prefer `ReadonlyTuple` unless you need mutability. + +@example +``` +import type {FixedLengthArray} from 'type-fest'; + +type FencingTeam = FixedLengthArray; + +const guestFencingTeam: FencingTeam = ['Josh', 'Michael', 'Robert']; + +const homeFencingTeam: FencingTeam = ['George', 'John']; +//=> error TS2322: Type string[] is not assignable to type 'FencingTeam' + +guestFencingTeam.push('Sam'); +//=> error TS2339: Property 'push' does not exist on type 'FencingTeam' +``` + +@category Array +@see ReadonlyTuple +*/ +export type FixedLengthArray = Pick< + ArrayPrototype, + Exclude +> & { + [index: number]: Element; + [Symbol.iterator]: () => IterableIterator; + readonly length: Length; +}; diff --git a/node_modules/type-fest/source/get.d.ts b/node_modules/type-fest/source/get.d.ts new file mode 100644 index 00000000..a95394c0 --- /dev/null +++ b/node_modules/type-fest/source/get.d.ts @@ -0,0 +1,184 @@ +import type {StringDigit} from '../source/internal'; +import type {Split} from './split'; +import type {StringKeyOf} from './string-key-of'; + +type GetOptions = { + strict?: boolean; +}; + +/** +Like the `Get` type but receives an array of strings as a path parameter. +*/ +type GetWithPath = + Keys extends [] + ? BaseType + : Keys extends readonly [infer Head, ...infer Tail] + ? GetWithPath< + PropertyOf, Options>, + Extract, + Options + > + : never; + +/** +Adds `undefined` to `Type` if `strict` is enabled. +*/ +type Strictify = + Options['strict'] extends true ? Type | undefined : Type; + +/** +If `Options['strict']` is `true`, includes `undefined` in the returned type when accessing properties on `Record`. + +Known limitations: +- Does not include `undefined` in the type on object types with an index signature (for example, `{a: string; [key: string]: string}`). +*/ +type StrictPropertyOf = + Record extends BaseType + ? string extends keyof BaseType + ? Strictify // Record + : BaseType[Key] // Record<'a' | 'b', any> (Records with a string union as keys have required properties) + : BaseType[Key]; + +/** +Splits a dot-prop style path into a tuple comprised of the properties in the path. Handles square-bracket notation. + +@example +``` +ToPath<'foo.bar.baz'> +//=> ['foo', 'bar', 'baz'] + +ToPath<'foo[0].bar.baz'> +//=> ['foo', '0', 'bar', 'baz'] +``` +*/ +type ToPath = Split, '.'>; + +/** +Replaces square-bracketed dot notation with dots, for example, `foo[0].bar` -> `foo.0.bar`. +*/ +type FixPathSquareBrackets = + Path extends `[${infer Head}]${infer Tail}` + ? Tail extends `[${string}` + ? `${Head}.${FixPathSquareBrackets}` + : `${Head}${FixPathSquareBrackets}` + : Path extends `${infer Head}[${infer Middle}]${infer Tail}` + ? `${Head}.${FixPathSquareBrackets<`[${Middle}]${Tail}`>}` + : Path; + +/** +Returns true if `LongString` is made up out of `Substring` repeated 0 or more times. + +@example +``` +ConsistsOnlyOf<'aaa', 'a'> //=> true +ConsistsOnlyOf<'ababab', 'ab'> //=> true +ConsistsOnlyOf<'aBa', 'a'> //=> false +ConsistsOnlyOf<'', 'a'> //=> true +``` +*/ +type ConsistsOnlyOf = + LongString extends '' + ? true + : LongString extends `${Substring}${infer Tail}` + ? ConsistsOnlyOf + : false; + +/** +Convert a type which may have number keys to one with string keys, making it possible to index using strings retrieved from template types. + +@example +``` +type WithNumbers = {foo: string; 0: boolean}; +type WithStrings = WithStringKeys; + +type WithNumbersKeys = keyof WithNumbers; +//=> 'foo' | 0 +type WithStringsKeys = keyof WithStrings; +//=> 'foo' | '0' +``` +*/ +type WithStringKeys = { + [Key in StringKeyOf]: UncheckedIndex +}; + +/** +Perform a `T[U]` operation if `T` supports indexing. +*/ +type UncheckedIndex = [T] extends [Record] ? T[U] : never; + +/** +Get a property of an object or array. Works when indexing arrays using number-literal-strings, for example, `PropertyOf = number`, and when indexing objects with number keys. + +Note: +- Returns `unknown` if `Key` is not a property of `BaseType`, since TypeScript uses structural typing, and it cannot be guaranteed that extra properties unknown to the type system will exist at runtime. +- Returns `undefined` from nullish values, to match the behaviour of most deep-key libraries like `lodash`, `dot-prop`, etc. +*/ +type PropertyOf = + BaseType extends null | undefined + ? undefined + : Key extends keyof BaseType + ? StrictPropertyOf + : BaseType extends [] | [unknown, ...unknown[]] + ? unknown // It's a tuple, but `Key` did not extend `keyof BaseType`. So the index is out of bounds. + : BaseType extends { + [n: number]: infer Item; + length: number; // Note: This is needed to avoid being too lax with records types using number keys like `{0: string; 1: boolean}`. + } + ? ( + ConsistsOnlyOf extends true + ? Strictify + : unknown + ) + : Key extends keyof WithStringKeys + ? StrictPropertyOf, Key, Options> + : unknown; + +// This works by first splitting the path based on `.` and `[...]` characters into a tuple of string keys. Then it recursively uses the head key to get the next property of the current object, until there are no keys left. Number keys extract the item type from arrays, or are converted to strings to extract types from tuples and dictionaries with number keys. +/** +Get a deeply-nested property from an object using a key path, like Lodash's `.get()` function. + +Use-case: Retrieve a property from deep inside an API response or some other complex object. + +@example +``` +import type {Get} from 'type-fest'; +import * as lodash from 'lodash'; + +const get = (object: BaseType, path: Path): Get => + lodash.get(object, path); + +interface ApiResponse { + hits: { + hits: Array<{ + _id: string + _source: { + name: Array<{ + given: string[] + family: string + }> + birthDate: string + } + }> + } +} + +const getName = (apiResponse: ApiResponse) => + get(apiResponse, 'hits.hits[0]._source.name'); + //=> Array<{given: string[]; family: string}> + +// Path also supports a readonly array of strings +const getNameWithPathArray = (apiResponse: ApiResponse) => + get(apiResponse, ['hits','hits', '0', '_source', 'name'] as const); + //=> Array<{given: string[]; family: string}> + +// Strict mode: +Get //=> string | undefined +Get, 'foo', {strict: true}> // => string | undefined +``` + +@category Object +@category Array +@category Template literal +*/ +export type Get = + GetWithPath : Path, Options>; diff --git a/node_modules/type-fest/source/has-optional-keys.d.ts b/node_modules/type-fest/source/has-optional-keys.d.ts new file mode 100644 index 00000000..597e8aaa --- /dev/null +++ b/node_modules/type-fest/source/has-optional-keys.d.ts @@ -0,0 +1,21 @@ +import {OptionalKeysOf} from './optional-keys-of'; + +/** +Creates a type that represents `true` or `false` depending on whether the given type has any optional fields. + +This is useful when you want to create an API whose behavior depends on the presence or absence of optional fields. + +@example +``` +import type {HasOptionalKeys, OptionalKeysOf} from 'type-fest'; + +type UpdateService = { + removeField: HasOptionalKeys extends true + ? (field: OptionalKeysOf) => Promise + : never +} +``` + +@category Utilities +*/ +export type HasOptionalKeys = OptionalKeysOf extends never ? false : true; diff --git a/node_modules/type-fest/source/has-required-keys.d.ts b/node_modules/type-fest/source/has-required-keys.d.ts new file mode 100644 index 00000000..ec9daf36 --- /dev/null +++ b/node_modules/type-fest/source/has-required-keys.d.ts @@ -0,0 +1,59 @@ +import {RequiredKeysOf} from './required-keys-of'; + +/** +Creates a type that represents `true` or `false` depending on whether the given type has any required fields. + +This is useful when you want to create an API whose behavior depends on the presence or absence of required fields. + +@example +``` +import type {HasRequiredKeys} from 'type-fest'; + +type GeneratorOptions