@browserless.io/browserless 2.31.1 → 2.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -1
- package/build/routes/chrome/http/content.post.body.json +8 -8
- package/build/routes/chrome/http/pdf.post.body.json +8 -8
- package/build/routes/chrome/http/scrape.post.body.json +8 -8
- package/build/routes/chrome/http/screenshot.post.body.json +8 -8
- package/build/routes/chromium/http/content.post.body.json +8 -8
- package/build/routes/chromium/http/pdf.post.body.json +8 -8
- package/build/routes/chromium/http/scrape.post.body.json +8 -8
- package/build/routes/chromium/http/screenshot.post.body.json +8 -8
- package/build/routes/edge/http/content.post.body.json +8 -8
- package/build/routes/edge/http/pdf.post.body.json +8 -8
- package/build/routes/edge/http/scrape.post.body.json +8 -8
- package/build/routes/edge/http/screenshot.post.body.json +8 -8
- package/build/routes/management/tests/management.spec.js +14 -0
- package/build/server.js +4 -5
- package/build/shared/utils/enjoi-resolver.d.ts +77 -0
- package/build/shared/utils/enjoi-resolver.js +399 -0
- package/docker/base/Dockerfile +2 -2
- package/extensions/ublocklite/README.md +4 -2
- package/extensions/ublocklite/_locales/ar/messages.json +34 -10
- package/extensions/ublocklite/_locales/az/messages.json +26 -2
- package/extensions/ublocklite/_locales/be/messages.json +28 -4
- package/extensions/ublocklite/_locales/bg/messages.json +26 -2
- package/extensions/ublocklite/_locales/bn/messages.json +26 -2
- package/extensions/ublocklite/_locales/br_FR/messages.json +26 -2
- package/extensions/ublocklite/_locales/bs/messages.json +26 -2
- package/extensions/ublocklite/_locales/ca/messages.json +26 -2
- package/extensions/ublocklite/_locales/cs/messages.json +26 -2
- package/extensions/ublocklite/_locales/cv/messages.json +26 -2
- package/extensions/ublocklite/_locales/cy/messages.json +37 -13
- package/extensions/ublocklite/_locales/da/messages.json +26 -2
- package/extensions/ublocklite/_locales/de/messages.json +26 -2
- package/extensions/ublocklite/_locales/el/messages.json +29 -5
- package/extensions/ublocklite/_locales/en/messages.json +26 -2
- package/extensions/ublocklite/_locales/en_GB/messages.json +26 -2
- package/extensions/ublocklite/_locales/eo/messages.json +26 -2
- package/extensions/ublocklite/_locales/es/messages.json +26 -2
- package/extensions/ublocklite/_locales/et/messages.json +26 -2
- package/extensions/ublocklite/_locales/eu/messages.json +26 -2
- package/extensions/ublocklite/_locales/fa/messages.json +26 -2
- package/extensions/ublocklite/_locales/fi/messages.json +26 -2
- package/extensions/ublocklite/_locales/fil/messages.json +68 -44
- package/extensions/ublocklite/_locales/fr/messages.json +26 -2
- package/extensions/ublocklite/_locales/fy/messages.json +26 -2
- package/extensions/ublocklite/_locales/gl/messages.json +27 -3
- package/extensions/ublocklite/_locales/gu/messages.json +26 -2
- package/extensions/ublocklite/_locales/he/messages.json +26 -2
- package/extensions/ublocklite/_locales/hi/messages.json +27 -3
- package/extensions/ublocklite/_locales/hr/messages.json +26 -2
- package/extensions/ublocklite/_locales/hu/messages.json +26 -2
- package/extensions/ublocklite/_locales/hy/messages.json +26 -2
- package/extensions/ublocklite/_locales/id/messages.json +37 -13
- package/extensions/ublocklite/_locales/it/messages.json +26 -2
- package/extensions/ublocklite/_locales/ja/messages.json +26 -2
- package/extensions/ublocklite/_locales/ka/messages.json +26 -2
- package/extensions/ublocklite/_locales/kk/messages.json +26 -2
- package/extensions/ublocklite/_locales/kn/messages.json +26 -2
- package/extensions/ublocklite/_locales/ko/messages.json +26 -2
- package/extensions/ublocklite/_locales/lt/messages.json +26 -2
- package/extensions/ublocklite/_locales/lv/messages.json +26 -2
- package/extensions/ublocklite/_locales/mk/messages.json +26 -2
- package/extensions/ublocklite/_locales/ml/messages.json +26 -2
- package/extensions/ublocklite/_locales/mr/messages.json +26 -2
- package/extensions/ublocklite/_locales/ms/messages.json +26 -2
- package/extensions/ublocklite/_locales/nb/messages.json +26 -2
- package/extensions/ublocklite/_locales/nl/messages.json +26 -2
- package/extensions/ublocklite/_locales/oc/messages.json +26 -2
- package/extensions/ublocklite/_locales/pa/messages.json +26 -2
- package/extensions/ublocklite/_locales/pl/messages.json +26 -2
- package/extensions/ublocklite/_locales/pt_BR/messages.json +26 -2
- package/extensions/ublocklite/_locales/pt_PT/messages.json +29 -5
- package/extensions/ublocklite/_locales/ro/messages.json +26 -2
- package/extensions/ublocklite/_locales/ru/messages.json +26 -2
- package/extensions/ublocklite/_locales/si/messages.json +26 -2
- package/extensions/ublocklite/_locales/sk/messages.json +26 -2
- package/extensions/ublocklite/_locales/sl/messages.json +26 -2
- package/extensions/ublocklite/_locales/so/messages.json +26 -2
- package/extensions/ublocklite/_locales/sq/messages.json +26 -2
- package/extensions/ublocklite/_locales/sr/messages.json +26 -2
- package/extensions/ublocklite/_locales/sv/messages.json +26 -2
- package/extensions/ublocklite/_locales/sw/messages.json +26 -2
- package/extensions/ublocklite/_locales/ta/messages.json +26 -2
- package/extensions/ublocklite/_locales/te/messages.json +26 -2
- package/extensions/ublocklite/_locales/th/messages.json +26 -2
- package/extensions/ublocklite/_locales/tr/messages.json +26 -2
- package/extensions/ublocklite/_locales/uk/messages.json +26 -2
- package/extensions/ublocklite/_locales/ur/messages.json +26 -2
- package/extensions/ublocklite/_locales/vi/messages.json +34 -10
- package/extensions/ublocklite/_locales/zh_CN/messages.json +33 -9
- package/extensions/ublocklite/_locales/zh_TW/messages.json +26 -2
- package/extensions/ublocklite/css/develop.css +58 -25
- package/extensions/ublocklite/css/line-hor-dashed.png +0 -0
- package/extensions/ublocklite/dashboard.html +25 -16
- package/extensions/ublocklite/js/admin.js +7 -8
- package/extensions/ublocklite/js/arglist-parser.js +116 -0
- package/extensions/ublocklite/js/background.js +38 -19
- package/extensions/ublocklite/js/dashboard.js +3 -3
- package/extensions/ublocklite/js/develop.js +540 -798
- package/extensions/ublocklite/js/dnr-editor.js +180 -0
- package/extensions/ublocklite/js/dnr-parser.js +30 -10
- package/extensions/ublocklite/js/i18n.js +5 -0
- package/extensions/ublocklite/js/jsonpath.js +470 -0
- package/extensions/ublocklite/js/mode-editor.js +87 -0
- package/extensions/ublocklite/js/mode-manager.js +11 -48
- package/extensions/ublocklite/js/mode-parser.js +211 -0
- package/extensions/ublocklite/js/redirect-resources.js +192 -0
- package/extensions/ublocklite/js/ro-dnr-editor.js +95 -0
- package/extensions/ublocklite/js/ruleset-manager.js +42 -16
- package/extensions/ublocklite/js/rw-dnr-editor.js +405 -0
- package/extensions/ublocklite/js/settings.js +7 -71
- package/extensions/ublocklite/js/static-filtering-parser.js +4413 -0
- package/extensions/ublocklite/js/ubo-parser.js +461 -0
- package/extensions/ublocklite/lib/codemirror/cm6.bundle.ubol.min.js +1 -1
- package/extensions/ublocklite/lib/codemirror/codemirror.LICENSE +21 -0
- package/extensions/ublocklite/lib/csstree/LICENSE +19 -0
- package/extensions/ublocklite/lib/csstree/css-tree.js +17 -0
- package/extensions/ublocklite/manifest.json +1 -1
- package/extensions/ublocklite/rulesets/generic-details.json +6 -32
- package/extensions/ublocklite/rulesets/main/adguard-mobile.json +7 -18
- package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +17 -9
- package/extensions/ublocklite/rulesets/main/annoyances-others.json +5 -2
- package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +2 -1
- package/extensions/ublocklite/rulesets/main/annoyances-social.json +4 -2
- package/extensions/ublocklite/rulesets/main/block-lan.json +6 -0
- package/extensions/ublocklite/rulesets/main/chn-0.json +30 -64
- package/extensions/ublocklite/rulesets/main/cze-0.json +2 -1
- package/extensions/ublocklite/rulesets/main/deu-0.json +3 -4
- package/extensions/ublocklite/rulesets/main/dpollock-0.json +2 -0
- package/extensions/ublocklite/rulesets/main/easylist.json +31 -13
- package/extensions/ublocklite/rulesets/main/easyprivacy.json +53 -11
- package/extensions/ublocklite/rulesets/main/fin-0.json +11 -2
- package/extensions/ublocklite/rulesets/main/fra-0.json +22 -43
- package/extensions/ublocklite/rulesets/main/grc-0.json +1 -1
- package/extensions/ublocklite/rulesets/main/hun-0.json +9 -2
- package/extensions/ublocklite/rulesets/main/idn-0.json +8 -38
- package/extensions/ublocklite/rulesets/main/ind-0.json +48 -12
- package/extensions/ublocklite/rulesets/main/irn-0.json +1 -0
- package/extensions/ublocklite/rulesets/main/isr-0.json +11 -1
- package/extensions/ublocklite/rulesets/main/ita-0.json +1 -1
- package/extensions/ublocklite/rulesets/main/jpn-1.json +24 -18
- package/extensions/ublocklite/rulesets/main/kor-1.json +6 -4
- package/extensions/ublocklite/rulesets/main/nld-0.json +4 -2
- package/extensions/ublocklite/rulesets/main/nor-0.json +8 -2
- package/extensions/ublocklite/rulesets/main/pgl.json +12 -18
- package/extensions/ublocklite/rulesets/main/pol-0.json +5 -0
- package/extensions/ublocklite/rulesets/main/rus-0.json +35 -30
- package/extensions/ublocklite/rulesets/main/spa-1.json +18 -61
- package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +9228 -1275
- package/extensions/ublocklite/rulesets/main/swe-1.json +43 -30
- package/extensions/ublocklite/rulesets/main/tur-0.json +20 -38
- package/extensions/ublocklite/rulesets/main/ublock-badware.json +73 -109
- package/extensions/ublocklite/rulesets/main/ublock-filters.json +185 -36
- package/extensions/ublocklite/rulesets/main/ukr-0.json +8 -26
- package/extensions/ublocklite/rulesets/main/urlhaus-full.json +587 -976
- package/extensions/ublocklite/rulesets/main/vie-1.json +42 -36
- package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +5 -1
- package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +0 -3
- package/extensions/ublocklite/rulesets/modify-headers/rus-0.json +2 -1
- package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +1 -1
- package/extensions/ublocklite/rulesets/redirect/adguard-mobile.json +1 -1
- package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +1 -0
- package/extensions/ublocklite/rulesets/redirect/nld-0.json +19 -0
- package/extensions/ublocklite/rulesets/redirect/spa-1.json +3 -4
- package/extensions/ublocklite/rulesets/redirect/swe-1.json +3 -2
- package/extensions/ublocklite/rulesets/redirect/tur-0.json +1 -1
- package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +19 -10
- package/extensions/ublocklite/rulesets/redirect/vie-1.json +2 -2
- package/extensions/ublocklite/rulesets/regex/adguard-mobile.json +13 -0
- package/extensions/ublocklite/rulesets/regex/chn-0.json +2 -3
- package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
- package/extensions/ublocklite/rulesets/regex/kor-1.json +1 -0
- package/extensions/ublocklite/rulesets/regex/nor-0.json +10 -0
- package/extensions/ublocklite/rulesets/regex/spa-0.json +0 -1
- package/extensions/ublocklite/rulesets/regex/spa-1.json +0 -13
- package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -6
- package/extensions/ublocklite/rulesets/regex/ublock-filters.json +16 -7
- package/extensions/ublocklite/rulesets/regex/ukr-0.json +2 -2
- package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +10 -5
- package/extensions/ublocklite/rulesets/removeparam/rus-0.json +1 -1
- package/extensions/ublocklite/rulesets/removeparam/rus-1.json +6 -6
- package/extensions/ublocklite/rulesets/ruleset-details.json +244 -244
- package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-others.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/fin-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/fra-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/idn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/kor-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/rus-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/ukr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/hrv-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/ind-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/generic/ublock-badware.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-cookies.css +0 -1
- package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-social.css +0 -1
- package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +1 -4
- package/extensions/ublocklite/rulesets/scripting/generichigh/cze-0.css +0 -1
- package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +5 -9
- package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +12 -0
- package/extensions/ublocklite/rulesets/scripting/generichigh/kor-1.css +0 -2
- package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +0 -4
- package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/nor-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/procedural/spa-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +11 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +12 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie-reload.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +12 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.remove-cookie.js +19 -9
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-fetch.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-attr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +17 -7
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +12 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-social.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.evaldata-prune.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.json-prune-xhr-response.js +597 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.remove-cookie.js +17 -7
- package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.adjust-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-fetch.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.remove-cookie.js +17 -7
- package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-constant.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +17 -7
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.adjust-setTimeout.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-window-open.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-node-text.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-cookie-reload.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-stack-trace.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-xhr.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-cookie.js +19 -9
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-attr.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie-reload.js +11 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +12 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.addEventListener-defuser.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.remove-cookie.js +19 -9
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-stack-trace.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-xhr.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-class.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie-reload.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie.js +12 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.addEventListener-defuser.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-cookie.js +17 -7
- package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-node-text.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-cookie.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.alert-buster.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +30 -7
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +19 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-refresh.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +19 -9
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +12 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-session-storage-item.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie-reload.js +10 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie.js +13 -4
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +399 -0
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +19 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +19 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-current-script.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-read.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-write.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.remove-class.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
- package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +1 -1
- package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ltu-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ublock-badware.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
- package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
- package/extensions/ublocklite/rulesets/scriptlet-details.json +202 -186
- package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +1 -34
- package/extensions/ublocklite/rulesets/strictblock/chn-0.json +262 -248
- package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +2 -0
- package/extensions/ublocklite/rulesets/strictblock/easylist.json +3 -2
- package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +44 -2
- package/extensions/ublocklite/rulesets/strictblock/fra-0.json +304 -62
- package/extensions/ublocklite/rulesets/strictblock/grc-0.json +1 -7
- package/extensions/ublocklite/rulesets/strictblock/ita-0.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +159 -155
- package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
- package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
- package/extensions/ublocklite/rulesets/strictblock/pgl.json +12 -18
- package/extensions/ublocklite/rulesets/strictblock/spa-1.json +0 -11
- package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +9228 -1275
- package/extensions/ublocklite/rulesets/strictblock/tur-0.json +0 -13
- package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +635 -635
- package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
- package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +0 -75
- package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +587 -976
- package/extensions/ublocklite/rulesets/strictblock/vie-1.json +3 -2
- package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +19 -0
- package/extensions/ublocklite/ublock.zip +0 -0
- package/package.json +25 -20
- package/src/routes/management/tests/management.spec.ts +25 -0
- package/src/server.ts +4 -5
- package/src/shared/utils/enjoi-resolver.ts +565 -0
- package/static/docs/swagger.json +10 -10
- package/static/docs/swagger.min.json +9 -9
- package/static/function/client.js +86 -39
- package/static/function/index.html +86 -39
- /package/extensions/ublocklite/lib/codemirror/{LICENSE → codemirror-quickstart.LICENSE} +0 -0
|
@@ -566,14 +566,14 @@
|
|
|
566
566
|
"length": {
|
|
567
567
|
"type": "number"
|
|
568
568
|
},
|
|
569
|
-
"__@toStringTag@
|
|
569
|
+
"__@toStringTag@496068": {
|
|
570
570
|
"type": "string",
|
|
571
571
|
"const": "Uint8Array"
|
|
572
572
|
}
|
|
573
573
|
},
|
|
574
574
|
"required": [
|
|
575
575
|
"BYTES_PER_ELEMENT",
|
|
576
|
-
"__@toStringTag@
|
|
576
|
+
"__@toStringTag@496068",
|
|
577
577
|
"buffer",
|
|
578
578
|
"byteLength",
|
|
579
579
|
"byteOffset",
|
|
@@ -608,13 +608,13 @@
|
|
|
608
608
|
"byteLength": {
|
|
609
609
|
"type": "number"
|
|
610
610
|
},
|
|
611
|
-
"__@toStringTag@
|
|
611
|
+
"__@toStringTag@496068": {
|
|
612
612
|
"type": "string"
|
|
613
613
|
}
|
|
614
614
|
},
|
|
615
615
|
"additionalProperties": false,
|
|
616
616
|
"required": [
|
|
617
|
-
"__@toStringTag@
|
|
617
|
+
"__@toStringTag@496068",
|
|
618
618
|
"byteLength"
|
|
619
619
|
]
|
|
620
620
|
},
|
|
@@ -624,18 +624,18 @@
|
|
|
624
624
|
"byteLength": {
|
|
625
625
|
"type": "number"
|
|
626
626
|
},
|
|
627
|
-
"__@species@
|
|
627
|
+
"__@species@504967": {
|
|
628
628
|
"$ref": "#/definitions/SharedArrayBuffer"
|
|
629
629
|
},
|
|
630
|
-
"__@toStringTag@
|
|
630
|
+
"__@toStringTag@496068": {
|
|
631
631
|
"type": "string",
|
|
632
632
|
"const": "SharedArrayBuffer"
|
|
633
633
|
}
|
|
634
634
|
},
|
|
635
635
|
"additionalProperties": false,
|
|
636
636
|
"required": [
|
|
637
|
-
"__@species@
|
|
638
|
-
"__@toStringTag@
|
|
637
|
+
"__@species@504967",
|
|
638
|
+
"__@toStringTag@496068",
|
|
639
639
|
"byteLength"
|
|
640
640
|
]
|
|
641
641
|
},
|
|
@@ -67,6 +67,20 @@ describe('Management APIs', function () {
|
|
|
67
67
|
expect(r.status).to.equal(204);
|
|
68
68
|
expect(r.headers.get('access-control-allow-origin')).to.equal('https://abc.example.com');
|
|
69
69
|
});
|
|
70
|
+
it('allows glob-matched OPTIONS requests with OR patterns across two domains', async () => {
|
|
71
|
+
const config = new Config();
|
|
72
|
+
config.enableCORS(true);
|
|
73
|
+
config.setCORSOrigin('(https://(abc|xyz).example.com|https://deploy-preview-*.netlify.app)');
|
|
74
|
+
await start({ config });
|
|
75
|
+
const r = await fetch('http://localhost:3000/config?token=6R0W53R135510', {
|
|
76
|
+
method: 'OPTIONS',
|
|
77
|
+
headers: {
|
|
78
|
+
Origin: 'https://deploy-preview-123--funky-monkey-12345.netlify.app',
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
expect(r.status).to.equal(204);
|
|
82
|
+
expect(r.headers.get('access-control-allow-origin')).to.equal('https://deploy-preview-123--funky-monkey-12345.netlify.app');
|
|
83
|
+
});
|
|
70
84
|
it('should 404 when the origin does not match the CORS origin pattern', async () => {
|
|
71
85
|
const config = new Config();
|
|
72
86
|
config.enableCORS(true);
|
package/build/server.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as http from 'http';
|
|
2
2
|
import { BadRequest, Logger as BlessLogger, NotFound, Timeout, TooManyRequests, Unauthorized, contentTypes, convertPathToURL, isMatch, queryParamsToObject, readBody, shimLegacyRequests, writeResponse, } from '@browserless.io/browserless';
|
|
3
3
|
import { EventEmitter } from 'events';
|
|
4
|
-
|
|
5
|
-
import Enjoi from 'enjoi';
|
|
4
|
+
import EnjoiResolver from './shared/utils/enjoi-resolver.js';
|
|
6
5
|
export class HTTPServer extends EventEmitter {
|
|
7
6
|
config;
|
|
8
7
|
metrics;
|
|
@@ -136,7 +135,7 @@ export class HTTPServer extends EventEmitter {
|
|
|
136
135
|
if (route.querySchema) {
|
|
137
136
|
this.logger.trace(`Validating route query-params with QUERY schema`);
|
|
138
137
|
try {
|
|
139
|
-
const schema =
|
|
138
|
+
const schema = EnjoiResolver.schema(route.querySchema);
|
|
140
139
|
const valid = schema.validate(req.queryParams, {
|
|
141
140
|
abortEarly: false,
|
|
142
141
|
});
|
|
@@ -158,7 +157,7 @@ export class HTTPServer extends EventEmitter {
|
|
|
158
157
|
if (route.bodySchema) {
|
|
159
158
|
this.logger.trace(`Validating route payload with BODY schema`);
|
|
160
159
|
try {
|
|
161
|
-
const schema =
|
|
160
|
+
const schema = EnjoiResolver.schema(route.bodySchema);
|
|
162
161
|
const valid = schema.validate(body, { abortEarly: false });
|
|
163
162
|
if (valid.error) {
|
|
164
163
|
const errorDetails = valid.error.details
|
|
@@ -204,7 +203,7 @@ export class HTTPServer extends EventEmitter {
|
|
|
204
203
|
if (route.querySchema) {
|
|
205
204
|
this.logger.trace(`Validating route query-params with QUERY schema`);
|
|
206
205
|
try {
|
|
207
|
-
const schema =
|
|
206
|
+
const schema = EnjoiResolver.schema(route.querySchema);
|
|
208
207
|
const valid = schema.validate(req.queryParams, {
|
|
209
208
|
abortEarly: false,
|
|
210
209
|
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
interface SchemaResolverOptions {
|
|
2
|
+
subSchemas?: Record<string, any>;
|
|
3
|
+
refineType?: (type: string, format?: string) => string;
|
|
4
|
+
refineSchema?: (joiSchema: any, jsonSchema: any) => any;
|
|
5
|
+
strictMode?: boolean;
|
|
6
|
+
useDefaults?: boolean;
|
|
7
|
+
extensions?: any[];
|
|
8
|
+
}
|
|
9
|
+
interface JSONSchema {
|
|
10
|
+
type?: string | string[];
|
|
11
|
+
$ref?: string;
|
|
12
|
+
properties?: Record<string, any>;
|
|
13
|
+
format?: string;
|
|
14
|
+
enum?: any[];
|
|
15
|
+
anyOf?: any[];
|
|
16
|
+
allOf?: any[];
|
|
17
|
+
oneOf?: any[];
|
|
18
|
+
not?: any;
|
|
19
|
+
default?: any;
|
|
20
|
+
required?: string[];
|
|
21
|
+
additionalProperties?: boolean | any;
|
|
22
|
+
minProperties?: number;
|
|
23
|
+
maxProperties?: number;
|
|
24
|
+
items?: any;
|
|
25
|
+
ordered?: any;
|
|
26
|
+
additionalItems?: boolean;
|
|
27
|
+
minItems?: number;
|
|
28
|
+
maxItems?: number;
|
|
29
|
+
uniqueItems?: boolean;
|
|
30
|
+
minimum?: number;
|
|
31
|
+
maximum?: number;
|
|
32
|
+
exclusiveMinimum?: number;
|
|
33
|
+
exclusiveMaximum?: number;
|
|
34
|
+
multipleOf?: number;
|
|
35
|
+
pattern?: string;
|
|
36
|
+
minLength?: number;
|
|
37
|
+
maxLength?: number;
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
}
|
|
40
|
+
declare class SchemaResolver {
|
|
41
|
+
private root;
|
|
42
|
+
private subSchemas?;
|
|
43
|
+
private refineType?;
|
|
44
|
+
private refineSchema?;
|
|
45
|
+
private strictMode?;
|
|
46
|
+
private walkedSchemas;
|
|
47
|
+
private useDefaults?;
|
|
48
|
+
private joi;
|
|
49
|
+
constructor(root: any, { subSchemas, refineType, refineSchema, strictMode, useDefaults, extensions, }?: SchemaResolverOptions);
|
|
50
|
+
resolve(schema?: any, ancestors?: string[]): any;
|
|
51
|
+
resolveReference(value: string): any;
|
|
52
|
+
resolveType(schema: JSONSchema, ancestors: string[]): any;
|
|
53
|
+
resolveOneOf(schema: JSONSchema, ancestors: string[]): any;
|
|
54
|
+
resolveAnyOf(schema: JSONSchema, ancestors: string[]): any;
|
|
55
|
+
resolveAllOf(schema: JSONSchema, ancestors: string[]): any;
|
|
56
|
+
resolveNot(schema: JSONSchema, ancestors: string[]): any;
|
|
57
|
+
resolveLink(schema: any): any;
|
|
58
|
+
object(schema: JSONSchema, ancestors: string[]): any;
|
|
59
|
+
array(schema: JSONSchema, ancestors: string[]): any;
|
|
60
|
+
number(schema: JSONSchema): any;
|
|
61
|
+
string(schema: JSONSchema): any;
|
|
62
|
+
regularString(schema: JSONSchema, joischema: any): any;
|
|
63
|
+
binary(schema: JSONSchema): any;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Enjoi-compatible API
|
|
67
|
+
* Creates a Joi schema from a JSON Schema
|
|
68
|
+
* @param jsonSchema - The JSON schema to convert
|
|
69
|
+
* @param options - Optional configuration for schema resolution
|
|
70
|
+
* @returns Joi schema with validate method
|
|
71
|
+
*/
|
|
72
|
+
declare function schema(jsonSchema: any, options?: SchemaResolverOptions): any;
|
|
73
|
+
export { SchemaResolver, schema };
|
|
74
|
+
declare const _default: {
|
|
75
|
+
schema: typeof schema;
|
|
76
|
+
};
|
|
77
|
+
export default _default;
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/* global WeakMap */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
|
5
|
+
import * as Bourne from '@hapi/bourne';
|
|
6
|
+
import * as Hoek from '@hapi/hoek';
|
|
7
|
+
import Joi from 'joi';
|
|
8
|
+
// Modern replacements for deprecated Node.js util functions
|
|
9
|
+
const isArray = Array.isArray;
|
|
10
|
+
const isObject = (value) => value && typeof value === 'object' && value.constructor === Object;
|
|
11
|
+
const isNumber = (value) => typeof value === 'number';
|
|
12
|
+
const isUndefined = (value) => value === undefined;
|
|
13
|
+
function randomString(length) {
|
|
14
|
+
return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))
|
|
15
|
+
.toString(36)
|
|
16
|
+
.slice(1);
|
|
17
|
+
}
|
|
18
|
+
class SchemaResolver {
|
|
19
|
+
root;
|
|
20
|
+
subSchemas;
|
|
21
|
+
refineType;
|
|
22
|
+
refineSchema;
|
|
23
|
+
strictMode;
|
|
24
|
+
walkedSchemas;
|
|
25
|
+
useDefaults;
|
|
26
|
+
joi;
|
|
27
|
+
constructor(root, { subSchemas, refineType, refineSchema, strictMode, useDefaults, extensions = [], } = {}) {
|
|
28
|
+
this.root = root;
|
|
29
|
+
this.subSchemas = subSchemas;
|
|
30
|
+
this.refineType = refineType;
|
|
31
|
+
this.refineSchema = refineSchema;
|
|
32
|
+
this.strictMode = strictMode;
|
|
33
|
+
this.walkedSchemas = new WeakMap(); // map of schemas iterated thus far to the generated id they were given
|
|
34
|
+
this.useDefaults = useDefaults;
|
|
35
|
+
this.joi = Joi.extend({
|
|
36
|
+
type: 'object',
|
|
37
|
+
base: Joi.object(),
|
|
38
|
+
coerce: {
|
|
39
|
+
from: 'string',
|
|
40
|
+
// @ts-ignore - Type compatibility issue with Joi coerce method
|
|
41
|
+
method(value) {
|
|
42
|
+
if (typeof value !== 'string' ||
|
|
43
|
+
(value[0] !== '{' && !/^\s*\{/.test(value))) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
return { value: Bourne.parse(value) };
|
|
48
|
+
}
|
|
49
|
+
catch (_) {
|
|
50
|
+
return;
|
|
51
|
+
} // eslint-disable-line no-empty
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
}, {
|
|
55
|
+
type: 'array',
|
|
56
|
+
base: Joi.array(),
|
|
57
|
+
coerce: {
|
|
58
|
+
from: 'string',
|
|
59
|
+
method(value) {
|
|
60
|
+
if (typeof value !== 'string' ||
|
|
61
|
+
(value[0] !== '[' && !/^\s*\[/.test(value))) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
return { value: Bourne.parse(value) };
|
|
66
|
+
}
|
|
67
|
+
catch (_) {
|
|
68
|
+
return;
|
|
69
|
+
} // eslint-disable-line no-empty
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
}, ...extensions);
|
|
73
|
+
}
|
|
74
|
+
resolve(schema = this.root, ancestors = []) {
|
|
75
|
+
let resolvedSchema;
|
|
76
|
+
let generatedId = this.walkedSchemas.get(schema);
|
|
77
|
+
if (generatedId && ancestors.lastIndexOf(generatedId) > -1) {
|
|
78
|
+
// resolve cyclic schema by using joi reference via generated unique ids
|
|
79
|
+
return this.resolveLink(schema);
|
|
80
|
+
}
|
|
81
|
+
else if (typeof schema === 'object') {
|
|
82
|
+
generatedId = randomString(10);
|
|
83
|
+
this.walkedSchemas.set(schema, generatedId);
|
|
84
|
+
}
|
|
85
|
+
if (typeof schema === 'string') {
|
|
86
|
+
// If schema is itself a string, interpret it as a type
|
|
87
|
+
resolvedSchema = this.resolveType({ type: schema }, ancestors);
|
|
88
|
+
}
|
|
89
|
+
else if (schema.$ref) {
|
|
90
|
+
resolvedSchema = this.resolve(this.resolveReference(schema.$ref), ancestors.concat(generatedId || ''));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const partialSchemas = [];
|
|
94
|
+
if (schema.type) {
|
|
95
|
+
partialSchemas.push(this.resolveType(schema, ancestors.concat(generatedId || '')));
|
|
96
|
+
}
|
|
97
|
+
else if (schema.properties) {
|
|
98
|
+
// if no type is specified, just properties
|
|
99
|
+
partialSchemas.push(this.object(schema, ancestors.concat(generatedId || '')));
|
|
100
|
+
}
|
|
101
|
+
else if (schema.format) {
|
|
102
|
+
// if no type is specified, just format
|
|
103
|
+
partialSchemas.push(this.string(schema));
|
|
104
|
+
}
|
|
105
|
+
else if (schema.enum) {
|
|
106
|
+
// If no type is specified, just enum
|
|
107
|
+
partialSchemas.push(this.joi.any().valid(...schema.enum));
|
|
108
|
+
}
|
|
109
|
+
if (schema.anyOf) {
|
|
110
|
+
partialSchemas.push(this.resolveAnyOf(schema, ancestors.concat(generatedId || '')));
|
|
111
|
+
}
|
|
112
|
+
if (schema.allOf) {
|
|
113
|
+
partialSchemas.push(this.resolveAllOf(schema, ancestors.concat(generatedId || '')));
|
|
114
|
+
}
|
|
115
|
+
if (schema.oneOf) {
|
|
116
|
+
partialSchemas.push(this.resolveOneOf(schema, ancestors.concat(generatedId || '')));
|
|
117
|
+
}
|
|
118
|
+
if (schema.not) {
|
|
119
|
+
partialSchemas.push(this.resolveNot(schema, ancestors.concat(generatedId || '')));
|
|
120
|
+
}
|
|
121
|
+
if (partialSchemas.length === 0) {
|
|
122
|
+
//Fall through to whatever.
|
|
123
|
+
//eslint-disable-next-line no-console
|
|
124
|
+
console.warn("WARNING: schema missing a 'type' or '$ref' or 'enum': \n%s", JSON.stringify(schema, null, 2));
|
|
125
|
+
//TODO: Handle better
|
|
126
|
+
partialSchemas.push(this.joi.any());
|
|
127
|
+
}
|
|
128
|
+
resolvedSchema =
|
|
129
|
+
partialSchemas.length === 1
|
|
130
|
+
? partialSchemas[0]
|
|
131
|
+
: this.joi.alternatives(partialSchemas).match('all');
|
|
132
|
+
}
|
|
133
|
+
if (generatedId) {
|
|
134
|
+
// we have finished resolving the schema, now attach the id generated earlier
|
|
135
|
+
resolvedSchema = resolvedSchema.id(this.walkedSchemas.get(schema));
|
|
136
|
+
}
|
|
137
|
+
if (this.refineSchema) {
|
|
138
|
+
resolvedSchema = this.refineSchema(resolvedSchema, schema);
|
|
139
|
+
}
|
|
140
|
+
if (this.useDefaults && schema.default !== undefined) {
|
|
141
|
+
resolvedSchema = resolvedSchema.default(schema.default);
|
|
142
|
+
}
|
|
143
|
+
return resolvedSchema;
|
|
144
|
+
}
|
|
145
|
+
resolveReference(value) {
|
|
146
|
+
let refschema;
|
|
147
|
+
const id = value.substr(0, value.indexOf('#') + 1);
|
|
148
|
+
const path = value.substr(value.indexOf('#') + 1);
|
|
149
|
+
if (id && this.subSchemas) {
|
|
150
|
+
refschema =
|
|
151
|
+
this.subSchemas[id] || this.subSchemas[id.substr(0, id.length - 1)];
|
|
152
|
+
}
|
|
153
|
+
if (!refschema) {
|
|
154
|
+
refschema = this.root;
|
|
155
|
+
}
|
|
156
|
+
Hoek.assert(refschema, 'Can not find schema reference: ' + value + '.');
|
|
157
|
+
let fragment = refschema;
|
|
158
|
+
const paths = path.split('/');
|
|
159
|
+
for (let i = 1; i < paths.length && fragment; i++) {
|
|
160
|
+
fragment = typeof fragment === 'object' && fragment[paths[i]];
|
|
161
|
+
}
|
|
162
|
+
return fragment;
|
|
163
|
+
}
|
|
164
|
+
resolveType(schema, ancestors) {
|
|
165
|
+
let joischema;
|
|
166
|
+
const typeDefinitionMap = {
|
|
167
|
+
description: 'description',
|
|
168
|
+
title: 'label',
|
|
169
|
+
default: 'default',
|
|
170
|
+
};
|
|
171
|
+
const joitype = (type, format) => {
|
|
172
|
+
let joischema;
|
|
173
|
+
if (this.refineType) {
|
|
174
|
+
type = this.refineType(type, format);
|
|
175
|
+
}
|
|
176
|
+
switch (type) {
|
|
177
|
+
case 'array':
|
|
178
|
+
joischema = this.array(schema, ancestors);
|
|
179
|
+
break;
|
|
180
|
+
case 'boolean':
|
|
181
|
+
joischema = this.joi.boolean();
|
|
182
|
+
break;
|
|
183
|
+
case 'integer':
|
|
184
|
+
case 'number':
|
|
185
|
+
joischema = this.number(schema);
|
|
186
|
+
break;
|
|
187
|
+
case 'object':
|
|
188
|
+
joischema = this.object(schema, ancestors);
|
|
189
|
+
break;
|
|
190
|
+
case 'string':
|
|
191
|
+
joischema = this.string(schema);
|
|
192
|
+
break;
|
|
193
|
+
case 'null':
|
|
194
|
+
joischema = this.joi.any().valid(null);
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
joischema = this.joi.types()[type];
|
|
198
|
+
}
|
|
199
|
+
Hoek.assert(joischema, 'Could not resolve type: ' + schema.type + '.');
|
|
200
|
+
return this.strictMode === true ? joischema.strict(true) : joischema;
|
|
201
|
+
};
|
|
202
|
+
if (isArray(schema.type)) {
|
|
203
|
+
const schemas = [];
|
|
204
|
+
for (let i = 0; i < schema.type.length; i++) {
|
|
205
|
+
schemas.push(joitype(schema.type[i], schema.format));
|
|
206
|
+
}
|
|
207
|
+
joischema = this.joi.alternatives(schemas);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
joischema = joitype(schema.type, schema.format);
|
|
211
|
+
}
|
|
212
|
+
Object.keys(typeDefinitionMap).forEach((key) => {
|
|
213
|
+
if (schema[key] !== undefined) {
|
|
214
|
+
joischema = joischema[typeDefinitionMap[key]](schema[key]);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
return joischema;
|
|
218
|
+
}
|
|
219
|
+
resolveOneOf(schema, ancestors) {
|
|
220
|
+
Hoek.assert(isArray(schema.oneOf), 'Expected oneOf to be an array.');
|
|
221
|
+
return this.joi
|
|
222
|
+
.alternatives(schema.oneOf.map((subSchema) => this.resolve(subSchema, ancestors)))
|
|
223
|
+
.match('one');
|
|
224
|
+
}
|
|
225
|
+
resolveAnyOf(schema, ancestors) {
|
|
226
|
+
Hoek.assert(isArray(schema.anyOf), 'Expected anyOf to be an array.');
|
|
227
|
+
return this.joi
|
|
228
|
+
.alternatives(schema.anyOf.map((subSchema) => this.resolve(subSchema, ancestors)))
|
|
229
|
+
.match('any');
|
|
230
|
+
}
|
|
231
|
+
resolveAllOf(schema, ancestors) {
|
|
232
|
+
Hoek.assert(isArray(schema.allOf), 'Expected allOf to be an array.');
|
|
233
|
+
return this.joi
|
|
234
|
+
.alternatives(schema.allOf.map((subSchema) => this.resolve(subSchema, ancestors)))
|
|
235
|
+
.match('all');
|
|
236
|
+
}
|
|
237
|
+
resolveNot(schema, ancestors) {
|
|
238
|
+
Hoek.assert(isObject(schema.not), 'Expected Not to be an object.');
|
|
239
|
+
return this.joi.alternatives().conditional('.', {
|
|
240
|
+
not: this.resolve(schema.not, ancestors),
|
|
241
|
+
then: this.joi.any(),
|
|
242
|
+
otherwise: this.joi.any().forbidden(),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
resolveLink(schema) {
|
|
246
|
+
return this.joi.link().ref(`#${this.walkedSchemas.get(schema)}`);
|
|
247
|
+
}
|
|
248
|
+
object(schema, ancestors) {
|
|
249
|
+
const resolveproperties = () => {
|
|
250
|
+
const schemas = {};
|
|
251
|
+
if (!isObject(schema.properties)) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
Object.keys(schema.properties).forEach((key) => {
|
|
255
|
+
const property = schema.properties[key];
|
|
256
|
+
let joischema = this.resolve(property, ancestors);
|
|
257
|
+
if (schema.required && schema.required.indexOf(key) !== -1) {
|
|
258
|
+
joischema = joischema.required();
|
|
259
|
+
}
|
|
260
|
+
schemas[key] = joischema;
|
|
261
|
+
});
|
|
262
|
+
return schemas;
|
|
263
|
+
};
|
|
264
|
+
let joischema = this.joi.object(resolveproperties());
|
|
265
|
+
if (isObject(schema.additionalProperties)) {
|
|
266
|
+
joischema = joischema.pattern(/^/, this.resolve(schema.additionalProperties, ancestors));
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
joischema = joischema.unknown(schema.additionalProperties !== false);
|
|
270
|
+
}
|
|
271
|
+
isNumber(schema.minProperties) &&
|
|
272
|
+
(joischema = joischema.min(schema.minProperties));
|
|
273
|
+
isNumber(schema.maxProperties) &&
|
|
274
|
+
(joischema = joischema.max(schema.maxProperties));
|
|
275
|
+
return joischema;
|
|
276
|
+
}
|
|
277
|
+
array(schema, ancestors) {
|
|
278
|
+
let joischema = this.joi.array();
|
|
279
|
+
let items;
|
|
280
|
+
const resolveAsArray = (value) => {
|
|
281
|
+
if (isArray(value)) {
|
|
282
|
+
// found an array, thus its _per type_
|
|
283
|
+
return value.map((v) => this.resolve(v, ancestors));
|
|
284
|
+
}
|
|
285
|
+
// it's a single entity, so just resolve it normally
|
|
286
|
+
return [this.resolve(value, ancestors)];
|
|
287
|
+
};
|
|
288
|
+
if (schema.items) {
|
|
289
|
+
items = resolveAsArray(schema.items);
|
|
290
|
+
joischema = joischema.items(...items);
|
|
291
|
+
}
|
|
292
|
+
else if (schema.ordered) {
|
|
293
|
+
items = resolveAsArray(schema.ordered);
|
|
294
|
+
joischema = joischema.ordered(...items);
|
|
295
|
+
}
|
|
296
|
+
if (items && schema.additionalItems === false) {
|
|
297
|
+
joischema = joischema.max(items.length);
|
|
298
|
+
}
|
|
299
|
+
isNumber(schema.minItems) && (joischema = joischema.min(schema.minItems));
|
|
300
|
+
isNumber(schema.maxItems) && (joischema = joischema.max(schema.maxItems));
|
|
301
|
+
if (schema.uniqueItems) {
|
|
302
|
+
joischema = joischema.unique();
|
|
303
|
+
}
|
|
304
|
+
return joischema;
|
|
305
|
+
}
|
|
306
|
+
number(schema) {
|
|
307
|
+
let joischema = this.joi.number();
|
|
308
|
+
if (schema.type === 'integer') {
|
|
309
|
+
joischema = joischema.integer();
|
|
310
|
+
}
|
|
311
|
+
isNumber(schema.minimum) && (joischema = joischema.min(schema.minimum));
|
|
312
|
+
isNumber(schema.maximum) && (joischema = joischema.max(schema.maximum));
|
|
313
|
+
isNumber(schema.exclusiveMinimum) &&
|
|
314
|
+
(joischema = joischema.greater(schema.exclusiveMinimum));
|
|
315
|
+
isNumber(schema.exclusiveMaximum) &&
|
|
316
|
+
(joischema = joischema.less(schema.exclusiveMaximum));
|
|
317
|
+
isNumber(schema.multipleOf) &&
|
|
318
|
+
schema.multipleOf !== 0 &&
|
|
319
|
+
(joischema = joischema.multiple(schema.multipleOf));
|
|
320
|
+
return joischema;
|
|
321
|
+
}
|
|
322
|
+
string(schema) {
|
|
323
|
+
let joischema = this.joi.string();
|
|
324
|
+
const dateRegex = '(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])';
|
|
325
|
+
const timeRegex = '([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))';
|
|
326
|
+
const dateTimeRegex = dateRegex + 'T' + timeRegex;
|
|
327
|
+
if (schema.enum) {
|
|
328
|
+
return this.joi.string().valid(...schema.enum);
|
|
329
|
+
}
|
|
330
|
+
switch (schema.format) {
|
|
331
|
+
case 'date':
|
|
332
|
+
return joischema.regex(new RegExp('^' + dateRegex + '$', 'i'), 'JsonSchema date format');
|
|
333
|
+
case 'time':
|
|
334
|
+
return joischema.regex(new RegExp('^' + timeRegex + '$', 'i'), 'JsonSchema time format');
|
|
335
|
+
case 'date-time':
|
|
336
|
+
return joischema.regex(new RegExp('^' + dateTimeRegex + '$', 'i'), 'JsonSchema date-time format');
|
|
337
|
+
case 'binary':
|
|
338
|
+
joischema = this.binary(schema);
|
|
339
|
+
break;
|
|
340
|
+
case 'email':
|
|
341
|
+
return joischema.email();
|
|
342
|
+
case 'hostname':
|
|
343
|
+
return joischema.hostname();
|
|
344
|
+
case 'ipv4':
|
|
345
|
+
return joischema.ip({
|
|
346
|
+
version: ['ipv4'],
|
|
347
|
+
});
|
|
348
|
+
case 'ipv6':
|
|
349
|
+
return joischema.ip({
|
|
350
|
+
version: ['ipv6'],
|
|
351
|
+
});
|
|
352
|
+
case 'uri':
|
|
353
|
+
return joischema.uri();
|
|
354
|
+
case 'byte':
|
|
355
|
+
joischema = joischema.base64();
|
|
356
|
+
break;
|
|
357
|
+
case 'uuid':
|
|
358
|
+
return joischema.guid({ version: ['uuidv4'] });
|
|
359
|
+
case 'guid':
|
|
360
|
+
return joischema.guid();
|
|
361
|
+
}
|
|
362
|
+
return this.regularString(schema, joischema);
|
|
363
|
+
}
|
|
364
|
+
regularString(schema, joischema) {
|
|
365
|
+
schema.pattern && (joischema = joischema.regex(new RegExp(schema.pattern)));
|
|
366
|
+
if (isUndefined(schema.minLength)) {
|
|
367
|
+
schema.minLength = 0;
|
|
368
|
+
if (!schema.pattern && !schema.format) {
|
|
369
|
+
joischema = joischema.allow('');
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
else if (schema.minLength === 0) {
|
|
373
|
+
joischema = joischema.allow('');
|
|
374
|
+
}
|
|
375
|
+
isNumber(schema.minLength) && (joischema = joischema.min(schema.minLength));
|
|
376
|
+
isNumber(schema.maxLength) && (joischema = joischema.max(schema.maxLength));
|
|
377
|
+
return joischema;
|
|
378
|
+
}
|
|
379
|
+
binary(schema) {
|
|
380
|
+
let joischema = this.joi.binary();
|
|
381
|
+
isNumber(schema.minLength) && (joischema = joischema.min(schema.minLength));
|
|
382
|
+
isNumber(schema.maxLength) && (joischema = joischema.max(schema.maxLength));
|
|
383
|
+
return joischema;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Enjoi-compatible API
|
|
388
|
+
* Creates a Joi schema from a JSON Schema
|
|
389
|
+
* @param jsonSchema - The JSON schema to convert
|
|
390
|
+
* @param options - Optional configuration for schema resolution
|
|
391
|
+
* @returns Joi schema with validate method
|
|
392
|
+
*/
|
|
393
|
+
function schema(jsonSchema, options) {
|
|
394
|
+
const resolver = new SchemaResolver(jsonSchema, options);
|
|
395
|
+
return resolver.resolve();
|
|
396
|
+
}
|
|
397
|
+
// Export both the class and the compatible API
|
|
398
|
+
export { SchemaResolver, schema };
|
|
399
|
+
export default { schema };
|
package/docker/base/Dockerfile
CHANGED
|
@@ -6,7 +6,7 @@ ARG DEBIAN_FRONTEND=noninteractive
|
|
|
6
6
|
ARG TZ=America/Los_Angeles
|
|
7
7
|
ARG BLESS_USER_ID=999
|
|
8
8
|
ARG APP_DIR=/usr/src/app
|
|
9
|
-
ARG NODE_VERSION=
|
|
9
|
+
ARG NODE_VERSION=v24.2.0
|
|
10
10
|
|
|
11
11
|
ENV NODE_VERSION=$NODE_VERSION
|
|
12
12
|
ENV NVM_DIR /usr/src/.nvm
|
|
@@ -54,7 +54,7 @@ RUN apt-get update && apt-get install -y \
|
|
|
54
54
|
wget \
|
|
55
55
|
xvfb
|
|
56
56
|
|
|
57
|
-
RUN curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.
|
|
57
|
+
RUN curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash &&\
|
|
58
58
|
. $NVM_DIR/nvm.sh &&\
|
|
59
59
|
nvm install $NODE_VERSION
|
|
60
60
|
|
|
@@ -7,8 +7,10 @@ The following assumes a linux environment.
|
|
|
7
7
|
1. Open Bash console
|
|
8
8
|
2. `git clone https://github.com/gorhill/uBlock.git`
|
|
9
9
|
3. `cd uBlock`
|
|
10
|
-
4. `
|
|
11
|
-
5.
|
|
10
|
+
4. `git submodule init`
|
|
11
|
+
5. `git submodule update`
|
|
12
|
+
6. `make mv3-[platform]`, where `[platform]` is either `chromium`, `edge`, `firefox`, or `safari`
|
|
13
|
+
7. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers
|
|
12
14
|
|
|
13
15
|
Upon completion of the script, the resulting extension package will become present in:
|
|
14
16
|
|