├── .gitignore ├── 2021-11-11-how-to-download-embedded-videos └── scrape_urls.py ├── 2021-11-26-introducing-gpt3 └── api_example.py ├── 2021-12-04-sending-mass-dms-on-reddit-through-api ├── extract_usernames.sh ├── mass_dm.py └── scrape_users.py ├── 2021-12-12-using-ephemeral-onion-services-for-quick-nat-traversal ├── Dockerfile └── run_onion_service.py ├── 2021-12-19-automating-google-dorking └── google.py ├── 2021-12-27-grayhat-twitch-chatbots └── t.py ├── 2022-01-19-using-python-and-mitmproxy-to-scrape-private-api-of-mobile-app └── mal.py ├── 2022-01-31-the-very-basics-of-xpath └── xpath_examples.py ├── 2022-01-31-using-proxies-for-web-scraping-and-automation ├── brightdata1.py └── brightdata2.py ├── 2022-02-04-harvesting-emails-from-google-search-results └── harvest.py ├── 2022-02-13-captcha-solver-services-for-scraping-and-automation └── anticaptcha_example.py ├── 2022-02-13-introduction-to-scrapy-framework └── books_to_scrape │ ├── books_to_scrape │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ │ ├── __init__.py │ │ └── books.py │ └── scrapy.cfg ├── 2022-02-19-email-harvesting-from-github-profiles ├── scrape_contrib_contacts.py └── search_repos.py ├── 2022-03-05-evaluating-ms-playwright-for-gray-hat-automation ├── codegen_login_to_ig.py ├── screenshots1.py └── use_cookies.py ├── 2022-03-09-sending-notifications-programmatically ├── phonecall.twiml.xml ├── smtplib_examply.py ├── tg.py └── twilio_sms.py ├── 2022-03-12-how-to-scrape-pages-behind-login-with-python └── apollo.py ├── 2022-03-20-decrypting-your-own-https-traffic-with-wireshark └── tlskeylogger.plist ├── 2022-03-25-reproducible-linux-environments-with-vagrant-and-terraform ├── Vagrantfile ├── main.tf └── provision.sh ├── 2022-03-26-running-gui-apps-within-docker-containers ├── 1 │ └── Dockerfile └── 2 │ ├── Dockerfile │ └── docker-compose.yml ├── 2022-04-02-smtp-enumeration-for-fun-and-profit.md ├── basic_wordlist.txt └── smtp_enum.py ├── 2022-04-03-creating-dc-proxies-on-cloud-providers ├── main.tf └── provision.sh ├── 2022-04-09-writing-web-scrapers-in-go-with-colly-framework ├── go.mod ├── go.sum └── main.go ├── 2022-04-19-compiling-python-programs-with-pyinstaller ├── bitcoin.py ├── bitcoin.spec └── images │ └── bitcoin.png ├── 2022-05-23-scraping-instagram-api-with-instauto └── ig_scrape_followers.py ├── 2022-06-04-importing-shopify-product-info-programmatically └── import_via_rest_api.py ├── 2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt └── books_to_scrape │ ├── Dockerfile │ ├── books_to_scrape │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ │ ├── __init__.py │ │ └── books.py │ └── scrapy.cfg ├── 2022-06-12-building-higher-order-automation-workflows-with-n8n └── My_workflow.json ├── 2022-06-15-understanding-abstract-syntax-trees ├── hello.c └── hello.py ├── 2022-06-16-how-to-scrape-youtube-view-intensity-time-series └── yt.py ├── 2022-07-02-how-to-scrape-zillow-with-python-and-scrapy ├── scrapy.cfg └── zillow │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ ├── __init__.py │ └── home.py ├── 2022-07-10-javascript-obfuscation-techniques-by-example ├── compress.js ├── controlflow.js ├── deadcode.js ├── hello.js ├── hello2.js ├── hexstring.js ├── identifiers.js ├── literals.js ├── mangling.js ├── scope.js └── stringarray.js ├── 2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps ├── brackets.js ├── clean1.js ├── clean2.js ├── clean3.js ├── hacktivity.js ├── hexcoded.js ├── minified.js ├── node_modules │ ├── .bin │ │ ├── babel │ │ ├── babel-external-helpers │ │ ├── browserslist │ │ ├── browserslist-lint │ │ ├── jsesc │ │ ├── json5 │ │ ├── parser │ │ └── semver │ ├── .package-lock.json │ ├── @ampproject │ │ └── remapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ ├── @babel │ │ ├── cli │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bin │ │ │ │ ├── babel-external-helpers.js │ │ │ │ └── babel.js │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── code-frame │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── compat-data │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── corejs2-built-ins.js │ │ │ ├── corejs3-shipped-proposals.js │ │ │ ├── data │ │ │ │ ├── corejs2-built-ins.json │ │ │ │ ├── corejs3-shipped-proposals.json │ │ │ │ ├── native-modules.json │ │ │ │ ├── overlapping-plugins.json │ │ │ │ ├── plugin-bugfixes.json │ │ │ │ └── plugins.json │ │ │ ├── native-modules.js │ │ │ ├── overlapping-plugins.js │ │ │ ├── package.json │ │ │ ├── plugin-bugfixes.js │ │ │ └── plugins.js │ │ ├── core │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── cjs-proxy.cjs │ │ │ ├── package.json │ │ │ └── src │ │ │ │ ├── config │ │ │ │ ├── files │ │ │ │ │ ├── index-browser.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── resolve-targets-browser.ts │ │ │ │ └── resolve-targets.ts │ │ │ │ ├── transform-file-browser.ts │ │ │ │ └── transform-file.ts │ │ ├── generator │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── node_modules │ │ │ │ └── @jridgewell │ │ │ │ │ └── gen-mapping │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── package.json │ │ │ │ │ └── src │ │ │ │ │ ├── gen-mapping.ts │ │ │ │ │ ├── sourcemap-segment.ts │ │ │ │ │ └── types.ts │ │ │ └── package.json │ │ ├── helper-compilation-targets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-environment-visitor │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-function-name │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-hoist-variables │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-module-imports │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-module-transforms │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-simple-access │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-split-export-declaration │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-validator-identifier │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ └── generate-identifier-regex.js │ │ ├── helper-validator-option │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helpers │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── generate-helpers.js │ │ │ │ ├── generate-regenerator-runtime.js │ │ │ │ └── package.json │ │ ├── highlight │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── parser │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bin │ │ │ │ └── babel-parser.js │ │ │ ├── index.cjs │ │ │ ├── package.json │ │ │ └── typings │ │ │ │ └── babel-parser.d.ts │ │ ├── template │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── traverse │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── generators │ │ │ │ ├── asserts.js │ │ │ │ ├── validators.js │ │ │ │ └── virtual-types.js │ │ │ │ └── package.json │ │ └── types │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ ├── generators │ │ │ ├── asserts.js │ │ │ ├── ast-types.js │ │ │ ├── builders.js │ │ │ ├── constants.js │ │ │ ├── docs.js │ │ │ ├── flow.js │ │ │ ├── typescript-legacy.js │ │ │ └── validators.js │ │ │ ├── package.json │ │ │ └── utils │ │ │ ├── formatBuilderName.js │ │ │ ├── lowerFirst.js │ │ │ ├── stringifyValidator.js │ │ │ └── toFunctionName.js │ ├── @jridgewell │ │ ├── gen-mapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── resolve-uri │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── set-array │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ │ └── set-array.ts │ │ ├── sourcemap-codec │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ │ └── sourcemap-codec.ts │ │ └── trace-mapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ ├── any-map.ts │ │ │ ├── binary-search.ts │ │ │ ├── by-source.ts │ │ │ ├── resolve.ts │ │ │ ├── sort.ts │ │ │ ├── sourcemap-segment.ts │ │ │ ├── strip-filename.ts │ │ │ ├── trace-mapping.ts │ │ │ └── types.ts │ ├── @nicolo-ribaudo │ │ └── chokidar-2 │ │ │ ├── README.md │ │ │ ├── build-chokidar.sh │ │ │ ├── package.json │ │ │ └── types.d.ts │ ├── ansi-styles │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── anymatch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── balanced-match │ │ ├── .github │ │ │ └── FUNDING.yml │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── binary-extensions │ │ ├── binary-extensions.json │ │ ├── binary-extensions.json.d.ts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── brace-expansion │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── braces │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── browserslist │ │ ├── LICENSE │ │ ├── README.md │ │ ├── browser.js │ │ ├── cli.js │ │ ├── error.d.ts │ │ ├── error.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── node.js │ │ ├── package.json │ │ └── parse.js │ ├── caniuse-lite │ │ ├── LICENSE │ │ ├── README.md │ │ ├── data │ │ │ ├── agents.js │ │ │ ├── browserVersions.js │ │ │ ├── browsers.js │ │ │ ├── features.js │ │ │ ├── features │ │ │ │ ├── aac.js │ │ │ │ ├── abortcontroller.js │ │ │ │ ├── ac3-ec3.js │ │ │ │ ├── accelerometer.js │ │ │ │ ├── addeventlistener.js │ │ │ │ ├── alternate-stylesheet.js │ │ │ │ ├── ambient-light.js │ │ │ │ ├── apng.js │ │ │ │ ├── array-find-index.js │ │ │ │ ├── array-find.js │ │ │ │ ├── array-flat.js │ │ │ │ ├── array-includes.js │ │ │ │ ├── arrow-functions.js │ │ │ │ ├── asmjs.js │ │ │ │ ├── async-clipboard.js │ │ │ │ ├── async-functions.js │ │ │ │ ├── atob-btoa.js │ │ │ │ ├── audio-api.js │ │ │ │ ├── audio.js │ │ │ │ ├── audiotracks.js │ │ │ │ ├── autofocus.js │ │ │ │ ├── auxclick.js │ │ │ │ ├── av1.js │ │ │ │ ├── avif.js │ │ │ │ ├── background-attachment.js │ │ │ │ ├── background-clip-text.js │ │ │ │ ├── background-img-opts.js │ │ │ │ ├── background-position-x-y.js │ │ │ │ ├── background-repeat-round-space.js │ │ │ │ ├── background-sync.js │ │ │ │ ├── battery-status.js │ │ │ │ ├── beacon.js │ │ │ │ ├── beforeafterprint.js │ │ │ │ ├── bigint.js │ │ │ │ ├── blobbuilder.js │ │ │ │ ├── bloburls.js │ │ │ │ ├── border-image.js │ │ │ │ ├── border-radius.js │ │ │ │ ├── broadcastchannel.js │ │ │ │ ├── brotli.js │ │ │ │ ├── calc.js │ │ │ │ ├── canvas-blending.js │ │ │ │ ├── canvas-text.js │ │ │ │ ├── canvas.js │ │ │ │ ├── ch-unit.js │ │ │ │ ├── chacha20-poly1305.js │ │ │ │ ├── channel-messaging.js │ │ │ │ ├── childnode-remove.js │ │ │ │ ├── classlist.js │ │ │ │ ├── client-hints-dpr-width-viewport.js │ │ │ │ ├── clipboard.js │ │ │ │ ├── colr-v1.js │ │ │ │ ├── colr.js │ │ │ │ ├── comparedocumentposition.js │ │ │ │ ├── console-basic.js │ │ │ │ ├── console-time.js │ │ │ │ ├── const.js │ │ │ │ ├── constraint-validation.js │ │ │ │ ├── contenteditable.js │ │ │ │ ├── contentsecuritypolicy.js │ │ │ │ ├── contentsecuritypolicy2.js │ │ │ │ ├── cookie-store-api.js │ │ │ │ ├── cors.js │ │ │ │ ├── createimagebitmap.js │ │ │ │ ├── credential-management.js │ │ │ │ ├── cryptography.js │ │ │ │ ├── css-all.js │ │ │ │ ├── css-animation.js │ │ │ │ ├── css-any-link.js │ │ │ │ ├── css-appearance.js │ │ │ │ ├── css-at-counter-style.js │ │ │ │ ├── css-autofill.js │ │ │ │ ├── css-backdrop-filter.js │ │ │ │ ├── css-background-offsets.js │ │ │ │ ├── css-backgroundblendmode.js │ │ │ │ ├── css-boxdecorationbreak.js │ │ │ │ ├── css-boxshadow.js │ │ │ │ ├── css-canvas.js │ │ │ │ ├── css-caret-color.js │ │ │ │ ├── css-cascade-layers.js │ │ │ │ ├── css-case-insensitive.js │ │ │ │ ├── css-clip-path.js │ │ │ │ ├── css-color-adjust.js │ │ │ │ ├── css-color-function.js │ │ │ │ ├── css-conic-gradients.js │ │ │ │ ├── css-container-queries.js │ │ │ │ ├── css-container-query-units.js │ │ │ │ ├── css-containment.js │ │ │ │ ├── css-content-visibility.js │ │ │ │ ├── css-counters.js │ │ │ │ ├── css-crisp-edges.js │ │ │ │ ├── css-cross-fade.js │ │ │ │ ├── css-default-pseudo.js │ │ │ │ ├── css-descendant-gtgt.js │ │ │ │ ├── css-deviceadaptation.js │ │ │ │ ├── css-dir-pseudo.js │ │ │ │ ├── css-display-contents.js │ │ │ │ ├── css-element-function.js │ │ │ │ ├── css-env-function.js │ │ │ │ ├── css-exclusions.js │ │ │ │ ├── css-featurequeries.js │ │ │ │ ├── css-file-selector-button.js │ │ │ │ ├── css-filter-function.js │ │ │ │ ├── css-filters.js │ │ │ │ ├── css-first-letter.js │ │ │ │ ├── css-first-line.js │ │ │ │ ├── css-fixed.js │ │ │ │ ├── css-focus-visible.js │ │ │ │ ├── css-focus-within.js │ │ │ │ ├── css-font-palette.js │ │ │ │ ├── css-font-rendering-controls.js │ │ │ │ ├── css-font-stretch.js │ │ │ │ ├── css-gencontent.js │ │ │ │ ├── css-gradients.js │ │ │ │ ├── css-grid-animation.js │ │ │ │ ├── css-grid.js │ │ │ │ ├── css-hanging-punctuation.js │ │ │ │ ├── css-has.js │ │ │ │ ├── css-hyphenate.js │ │ │ │ ├── css-hyphens.js │ │ │ │ ├── css-image-orientation.js │ │ │ │ ├── css-image-set.js │ │ │ │ ├── css-in-out-of-range.js │ │ │ │ ├── css-indeterminate-pseudo.js │ │ │ │ ├── css-initial-letter.js │ │ │ │ ├── css-initial-value.js │ │ │ │ ├── css-lch-lab.js │ │ │ │ ├── css-letter-spacing.js │ │ │ │ ├── css-line-clamp.js │ │ │ │ ├── css-logical-props.js │ │ │ │ ├── css-marker-pseudo.js │ │ │ │ ├── css-masks.js │ │ │ │ ├── css-matches-pseudo.js │ │ │ │ ├── css-math-functions.js │ │ │ │ ├── css-media-interaction.js │ │ │ │ ├── css-media-resolution.js │ │ │ │ ├── css-media-scripting.js │ │ │ │ ├── css-mediaqueries.js │ │ │ │ ├── css-mixblendmode.js │ │ │ │ ├── css-motion-paths.js │ │ │ │ ├── css-namespaces.js │ │ │ │ ├── css-nesting.js │ │ │ │ ├── css-not-sel-list.js │ │ │ │ ├── css-nth-child-of.js │ │ │ │ ├── css-opacity.js │ │ │ │ ├── css-optional-pseudo.js │ │ │ │ ├── css-overflow-anchor.js │ │ │ │ ├── css-overflow-overlay.js │ │ │ │ ├── css-overflow.js │ │ │ │ ├── css-overscroll-behavior.js │ │ │ │ ├── css-page-break.js │ │ │ │ ├── css-paged-media.js │ │ │ │ ├── css-paint-api.js │ │ │ │ ├── css-placeholder-shown.js │ │ │ │ ├── css-placeholder.js │ │ │ │ ├── css-print-color-adjust.js │ │ │ │ ├── css-read-only-write.js │ │ │ │ ├── css-rebeccapurple.js │ │ │ │ ├── css-reflections.js │ │ │ │ ├── css-regions.js │ │ │ │ ├── css-repeating-gradients.js │ │ │ │ ├── css-resize.js │ │ │ │ ├── css-revert-value.js │ │ │ │ ├── css-rrggbbaa.js │ │ │ │ ├── css-scroll-behavior.js │ │ │ │ ├── css-scroll-timeline.js │ │ │ │ ├── css-scrollbar.js │ │ │ │ ├── css-sel2.js │ │ │ │ ├── css-sel3.js │ │ │ │ ├── css-selection.js │ │ │ │ ├── css-shapes.js │ │ │ │ ├── css-snappoints.js │ │ │ │ ├── css-sticky.js │ │ │ │ ├── css-subgrid.js │ │ │ │ ├── css-supports-api.js │ │ │ │ ├── css-table.js │ │ │ │ ├── css-text-align-last.js │ │ │ │ ├── css-text-indent.js │ │ │ │ ├── css-text-justify.js │ │ │ │ ├── css-text-orientation.js │ │ │ │ ├── css-text-spacing.js │ │ │ │ ├── css-textshadow.js │ │ │ │ ├── css-touch-action-2.js │ │ │ │ ├── css-touch-action.js │ │ │ │ ├── css-transitions.js │ │ │ │ ├── css-unicode-bidi.js │ │ │ │ ├── css-unset-value.js │ │ │ │ ├── css-variables.js │ │ │ │ ├── css-when-else.js │ │ │ │ ├── css-widows-orphans.js │ │ │ │ ├── css-width-stretch.js │ │ │ │ ├── css-writing-mode.js │ │ │ │ ├── css-zoom.js │ │ │ │ ├── css3-attr.js │ │ │ │ ├── css3-boxsizing.js │ │ │ │ ├── css3-colors.js │ │ │ │ ├── css3-cursors-grab.js │ │ │ │ ├── css3-cursors-newer.js │ │ │ │ ├── css3-cursors.js │ │ │ │ ├── css3-tabsize.js │ │ │ │ ├── currentcolor.js │ │ │ │ ├── custom-elements.js │ │ │ │ ├── custom-elementsv1.js │ │ │ │ ├── customevent.js │ │ │ │ ├── datalist.js │ │ │ │ ├── dataset.js │ │ │ │ ├── datauri.js │ │ │ │ ├── date-tolocaledatestring.js │ │ │ │ ├── declarative-shadow-dom.js │ │ │ │ ├── decorators.js │ │ │ │ ├── details.js │ │ │ │ ├── deviceorientation.js │ │ │ │ ├── devicepixelratio.js │ │ │ │ ├── dialog.js │ │ │ │ ├── dispatchevent.js │ │ │ │ ├── dnssec.js │ │ │ │ ├── do-not-track.js │ │ │ │ ├── document-currentscript.js │ │ │ │ ├── document-evaluate-xpath.js │ │ │ │ ├── document-execcommand.js │ │ │ │ ├── document-policy.js │ │ │ │ ├── document-scrollingelement.js │ │ │ │ ├── documenthead.js │ │ │ │ ├── dom-manip-convenience.js │ │ │ │ ├── dom-range.js │ │ │ │ ├── domcontentloaded.js │ │ │ │ ├── domfocusin-domfocusout-events.js │ │ │ │ ├── dommatrix.js │ │ │ │ ├── download.js │ │ │ │ ├── dragndrop.js │ │ │ │ ├── element-closest.js │ │ │ │ ├── element-from-point.js │ │ │ │ ├── element-scroll-methods.js │ │ │ │ ├── eme.js │ │ │ │ ├── eot.js │ │ │ │ ├── es5.js │ │ │ │ ├── es6-class.js │ │ │ │ ├── es6-generators.js │ │ │ │ ├── es6-module-dynamic-import.js │ │ │ │ ├── es6-module.js │ │ │ │ ├── es6-number.js │ │ │ │ ├── es6-string-includes.js │ │ │ │ ├── es6.js │ │ │ │ ├── eventsource.js │ │ │ │ ├── extended-system-fonts.js │ │ │ │ ├── feature-policy.js │ │ │ │ ├── fetch.js │ │ │ │ ├── fieldset-disabled.js │ │ │ │ ├── fileapi.js │ │ │ │ ├── filereader.js │ │ │ │ ├── filereadersync.js │ │ │ │ ├── filesystem.js │ │ │ │ ├── flac.js │ │ │ │ ├── flexbox-gap.js │ │ │ │ ├── flexbox.js │ │ │ │ ├── flow-root.js │ │ │ │ ├── focusin-focusout-events.js │ │ │ │ ├── focusoptions-preventscroll.js │ │ │ │ ├── font-family-system-ui.js │ │ │ │ ├── font-feature.js │ │ │ │ ├── font-kerning.js │ │ │ │ ├── font-loading.js │ │ │ │ ├── font-metrics-overrides.js │ │ │ │ ├── font-size-adjust.js │ │ │ │ ├── font-smooth.js │ │ │ │ ├── font-unicode-range.js │ │ │ │ ├── font-variant-alternates.js │ │ │ │ ├── font-variant-numeric.js │ │ │ │ ├── fontface.js │ │ │ │ ├── form-attribute.js │ │ │ │ ├── form-submit-attributes.js │ │ │ │ ├── form-validation.js │ │ │ │ ├── forms.js │ │ │ │ ├── fullscreen.js │ │ │ │ ├── gamepad.js │ │ │ │ ├── geolocation.js │ │ │ │ ├── getboundingclientrect.js │ │ │ │ ├── getcomputedstyle.js │ │ │ │ ├── getelementsbyclassname.js │ │ │ │ ├── getrandomvalues.js │ │ │ │ ├── gyroscope.js │ │ │ │ ├── hardwareconcurrency.js │ │ │ │ ├── hashchange.js │ │ │ │ ├── heif.js │ │ │ │ ├── hevc.js │ │ │ │ ├── hidden.js │ │ │ │ ├── high-resolution-time.js │ │ │ │ ├── history.js │ │ │ │ ├── html-media-capture.js │ │ │ │ ├── html5semantic.js │ │ │ │ ├── http-live-streaming.js │ │ │ │ ├── http2.js │ │ │ │ ├── http3.js │ │ │ │ ├── iframe-sandbox.js │ │ │ │ ├── iframe-seamless.js │ │ │ │ ├── iframe-srcdoc.js │ │ │ │ ├── imagecapture.js │ │ │ │ ├── ime.js │ │ │ │ ├── img-naturalwidth-naturalheight.js │ │ │ │ ├── import-maps.js │ │ │ │ ├── imports.js │ │ │ │ ├── indeterminate-checkbox.js │ │ │ │ ├── indexeddb.js │ │ │ │ ├── indexeddb2.js │ │ │ │ ├── inline-block.js │ │ │ │ ├── innertext.js │ │ │ │ ├── input-autocomplete-onoff.js │ │ │ │ ├── input-color.js │ │ │ │ ├── input-datetime.js │ │ │ │ ├── input-email-tel-url.js │ │ │ │ ├── input-event.js │ │ │ │ ├── input-file-accept.js │ │ │ │ ├── input-file-directory.js │ │ │ │ ├── input-file-multiple.js │ │ │ │ ├── input-inputmode.js │ │ │ │ ├── input-minlength.js │ │ │ │ ├── input-number.js │ │ │ │ ├── input-pattern.js │ │ │ │ ├── input-placeholder.js │ │ │ │ ├── input-range.js │ │ │ │ ├── input-search.js │ │ │ │ ├── input-selection.js │ │ │ │ ├── insert-adjacent.js │ │ │ │ ├── insertadjacenthtml.js │ │ │ │ ├── internationalization.js │ │ │ │ ├── intersectionobserver-v2.js │ │ │ │ ├── intersectionobserver.js │ │ │ │ ├── intl-pluralrules.js │ │ │ │ ├── intrinsic-width.js │ │ │ │ ├── jpeg2000.js │ │ │ │ ├── jpegxl.js │ │ │ │ ├── jpegxr.js │ │ │ │ ├── js-regexp-lookbehind.js │ │ │ │ ├── json.js │ │ │ │ ├── justify-content-space-evenly.js │ │ │ │ ├── kerning-pairs-ligatures.js │ │ │ │ ├── keyboardevent-charcode.js │ │ │ │ ├── keyboardevent-code.js │ │ │ │ ├── keyboardevent-getmodifierstate.js │ │ │ │ ├── keyboardevent-key.js │ │ │ │ ├── keyboardevent-location.js │ │ │ │ ├── keyboardevent-which.js │ │ │ │ ├── lazyload.js │ │ │ │ ├── let.js │ │ │ │ ├── link-icon-png.js │ │ │ │ ├── link-icon-svg.js │ │ │ │ ├── link-rel-dns-prefetch.js │ │ │ │ ├── link-rel-modulepreload.js │ │ │ │ ├── link-rel-preconnect.js │ │ │ │ ├── link-rel-prefetch.js │ │ │ │ ├── link-rel-preload.js │ │ │ │ ├── link-rel-prerender.js │ │ │ │ ├── loading-lazy-attr.js │ │ │ │ ├── localecompare.js │ │ │ │ ├── magnetometer.js │ │ │ │ ├── matchesselector.js │ │ │ │ ├── matchmedia.js │ │ │ │ ├── mathml.js │ │ │ │ ├── maxlength.js │ │ │ │ ├── media-attribute.js │ │ │ │ ├── media-fragments.js │ │ │ │ ├── media-session-api.js │ │ │ │ ├── mediacapture-fromelement.js │ │ │ │ ├── mediarecorder.js │ │ │ │ ├── mediasource.js │ │ │ │ ├── menu.js │ │ │ │ ├── meta-theme-color.js │ │ │ │ ├── meter.js │ │ │ │ ├── midi.js │ │ │ │ ├── minmaxwh.js │ │ │ │ ├── mp3.js │ │ │ │ ├── mpeg-dash.js │ │ │ │ ├── mpeg4.js │ │ │ │ ├── multibackgrounds.js │ │ │ │ ├── multicolumn.js │ │ │ │ ├── mutation-events.js │ │ │ │ ├── mutationobserver.js │ │ │ │ ├── namevalue-storage.js │ │ │ │ ├── native-filesystem-api.js │ │ │ │ ├── nav-timing.js │ │ │ │ ├── navigator-language.js │ │ │ │ ├── netinfo.js │ │ │ │ ├── notifications.js │ │ │ │ ├── object-entries.js │ │ │ │ ├── object-fit.js │ │ │ │ ├── object-observe.js │ │ │ │ ├── object-values.js │ │ │ │ ├── objectrtc.js │ │ │ │ ├── offline-apps.js │ │ │ │ ├── offscreencanvas.js │ │ │ │ ├── ogg-vorbis.js │ │ │ │ ├── ogv.js │ │ │ │ ├── ol-reversed.js │ │ │ │ ├── once-event-listener.js │ │ │ │ ├── online-status.js │ │ │ │ ├── opus.js │ │ │ │ ├── orientation-sensor.js │ │ │ │ ├── outline.js │ │ │ │ ├── pad-start-end.js │ │ │ │ ├── page-transition-events.js │ │ │ │ ├── pagevisibility.js │ │ │ │ ├── passive-event-listener.js │ │ │ │ ├── passwordrules.js │ │ │ │ ├── path2d.js │ │ │ │ ├── payment-request.js │ │ │ │ ├── pdf-viewer.js │ │ │ │ ├── permissions-api.js │ │ │ │ ├── permissions-policy.js │ │ │ │ ├── picture-in-picture.js │ │ │ │ ├── picture.js │ │ │ │ ├── ping.js │ │ │ │ ├── png-alpha.js │ │ │ │ ├── pointer-events.js │ │ │ │ ├── pointer.js │ │ │ │ ├── pointerlock.js │ │ │ │ ├── portals.js │ │ │ │ ├── prefers-color-scheme.js │ │ │ │ ├── prefers-reduced-motion.js │ │ │ │ ├── private-class-fields.js │ │ │ │ ├── private-methods-and-accessors.js │ │ │ │ ├── progress.js │ │ │ │ ├── promise-finally.js │ │ │ │ ├── promises.js │ │ │ │ ├── proximity.js │ │ │ │ ├── proxy.js │ │ │ │ ├── public-class-fields.js │ │ │ │ ├── publickeypinning.js │ │ │ │ ├── push-api.js │ │ │ │ ├── queryselector.js │ │ │ │ ├── readonly-attr.js │ │ │ │ ├── referrer-policy.js │ │ │ │ ├── registerprotocolhandler.js │ │ │ │ ├── rel-noopener.js │ │ │ │ ├── rel-noreferrer.js │ │ │ │ ├── rellist.js │ │ │ │ ├── rem.js │ │ │ │ ├── requestanimationframe.js │ │ │ │ ├── requestidlecallback.js │ │ │ │ ├── resizeobserver.js │ │ │ │ ├── resource-timing.js │ │ │ │ ├── rest-parameters.js │ │ │ │ ├── rtcpeerconnection.js │ │ │ │ ├── ruby.js │ │ │ │ ├── run-in.js │ │ │ │ ├── same-site-cookie-attribute.js │ │ │ │ ├── screen-orientation.js │ │ │ │ ├── script-async.js │ │ │ │ ├── script-defer.js │ │ │ │ ├── scrollintoview.js │ │ │ │ ├── scrollintoviewifneeded.js │ │ │ │ ├── sdch.js │ │ │ │ ├── selection-api.js │ │ │ │ ├── server-timing.js │ │ │ │ ├── serviceworkers.js │ │ │ │ ├── setimmediate.js │ │ │ │ ├── sha-2.js │ │ │ │ ├── shadowdom.js │ │ │ │ ├── shadowdomv1.js │ │ │ │ ├── sharedarraybuffer.js │ │ │ │ ├── sharedworkers.js │ │ │ │ ├── sni.js │ │ │ │ ├── spdy.js │ │ │ │ ├── speech-recognition.js │ │ │ │ ├── speech-synthesis.js │ │ │ │ ├── spellcheck-attribute.js │ │ │ │ ├── sql-storage.js │ │ │ │ ├── srcset.js │ │ │ │ ├── stream.js │ │ │ │ ├── streams.js │ │ │ │ ├── stricttransportsecurity.js │ │ │ │ ├── style-scoped.js │ │ │ │ ├── subresource-integrity.js │ │ │ │ ├── svg-css.js │ │ │ │ ├── svg-filters.js │ │ │ │ ├── svg-fonts.js │ │ │ │ ├── svg-fragment.js │ │ │ │ ├── svg-html.js │ │ │ │ ├── svg-html5.js │ │ │ │ ├── svg-img.js │ │ │ │ ├── svg-smil.js │ │ │ │ ├── svg.js │ │ │ │ ├── sxg.js │ │ │ │ ├── tabindex-attr.js │ │ │ │ ├── template-literals.js │ │ │ │ ├── template.js │ │ │ │ ├── temporal.js │ │ │ │ ├── testfeat.js │ │ │ │ ├── text-decoration.js │ │ │ │ ├── text-emphasis.js │ │ │ │ ├── text-overflow.js │ │ │ │ ├── text-size-adjust.js │ │ │ │ ├── text-stroke.js │ │ │ │ ├── text-underline-offset.js │ │ │ │ ├── textcontent.js │ │ │ │ ├── textencoder.js │ │ │ │ ├── tls1-1.js │ │ │ │ ├── tls1-2.js │ │ │ │ ├── tls1-3.js │ │ │ │ ├── token-binding.js │ │ │ │ ├── touch.js │ │ │ │ ├── transforms2d.js │ │ │ │ ├── transforms3d.js │ │ │ │ ├── trusted-types.js │ │ │ │ ├── ttf.js │ │ │ │ ├── typedarrays.js │ │ │ │ ├── u2f.js │ │ │ │ ├── unhandledrejection.js │ │ │ │ ├── upgradeinsecurerequests.js │ │ │ │ ├── url-scroll-to-text-fragment.js │ │ │ │ ├── url.js │ │ │ │ ├── urlsearchparams.js │ │ │ │ ├── use-strict.js │ │ │ │ ├── user-select-none.js │ │ │ │ ├── user-timing.js │ │ │ │ ├── variable-fonts.js │ │ │ │ ├── vector-effect.js │ │ │ │ ├── vibration.js │ │ │ │ ├── video.js │ │ │ │ ├── videotracks.js │ │ │ │ ├── viewport-unit-variants.js │ │ │ │ ├── viewport-units.js │ │ │ │ ├── wai-aria.js │ │ │ │ ├── wake-lock.js │ │ │ │ ├── wasm.js │ │ │ │ ├── wav.js │ │ │ │ ├── wbr-element.js │ │ │ │ ├── web-animation.js │ │ │ │ ├── web-app-manifest.js │ │ │ │ ├── web-bluetooth.js │ │ │ │ ├── web-serial.js │ │ │ │ ├── web-share.js │ │ │ │ ├── webauthn.js │ │ │ │ ├── webgl.js │ │ │ │ ├── webgl2.js │ │ │ │ ├── webgpu.js │ │ │ │ ├── webhid.js │ │ │ │ ├── webkit-user-drag.js │ │ │ │ ├── webm.js │ │ │ │ ├── webnfc.js │ │ │ │ ├── webp.js │ │ │ │ ├── websockets.js │ │ │ │ ├── webusb.js │ │ │ │ ├── webvr.js │ │ │ │ ├── webvtt.js │ │ │ │ ├── webworkers.js │ │ │ │ ├── webxr.js │ │ │ │ ├── will-change.js │ │ │ │ ├── woff.js │ │ │ │ ├── woff2.js │ │ │ │ ├── word-break.js │ │ │ │ ├── wordwrap.js │ │ │ │ ├── x-doc-messaging.js │ │ │ │ ├── x-frame-options.js │ │ │ │ ├── xhr2.js │ │ │ │ ├── xhtml.js │ │ │ │ ├── xhtmlsmil.js │ │ │ │ └── xml-serializer.js │ │ │ └── regions │ │ │ │ ├── AD.js │ │ │ │ ├── AE.js │ │ │ │ ├── AF.js │ │ │ │ ├── AG.js │ │ │ │ ├── AI.js │ │ │ │ ├── AL.js │ │ │ │ ├── AM.js │ │ │ │ ├── AO.js │ │ │ │ ├── AR.js │ │ │ │ ├── AS.js │ │ │ │ ├── AT.js │ │ │ │ ├── AU.js │ │ │ │ ├── AW.js │ │ │ │ ├── AX.js │ │ │ │ ├── AZ.js │ │ │ │ ├── BA.js │ │ │ │ ├── BB.js │ │ │ │ ├── BD.js │ │ │ │ ├── BE.js │ │ │ │ ├── BF.js │ │ │ │ ├── BG.js │ │ │ │ ├── BH.js │ │ │ │ ├── BI.js │ │ │ │ ├── BJ.js │ │ │ │ ├── BM.js │ │ │ │ ├── BN.js │ │ │ │ ├── BO.js │ │ │ │ ├── BR.js │ │ │ │ ├── BS.js │ │ │ │ ├── BT.js │ │ │ │ ├── BW.js │ │ │ │ ├── BY.js │ │ │ │ ├── BZ.js │ │ │ │ ├── CA.js │ │ │ │ ├── CD.js │ │ │ │ ├── CF.js │ │ │ │ ├── CG.js │ │ │ │ ├── CH.js │ │ │ │ ├── CI.js │ │ │ │ ├── CK.js │ │ │ │ ├── CL.js │ │ │ │ ├── CM.js │ │ │ │ ├── CN.js │ │ │ │ ├── CO.js │ │ │ │ ├── CR.js │ │ │ │ ├── CU.js │ │ │ │ ├── CV.js │ │ │ │ ├── CX.js │ │ │ │ ├── CY.js │ │ │ │ ├── CZ.js │ │ │ │ ├── DE.js │ │ │ │ ├── DJ.js │ │ │ │ ├── DK.js │ │ │ │ ├── DM.js │ │ │ │ ├── DO.js │ │ │ │ ├── DZ.js │ │ │ │ ├── EC.js │ │ │ │ ├── EE.js │ │ │ │ ├── EG.js │ │ │ │ ├── ER.js │ │ │ │ ├── ES.js │ │ │ │ ├── ET.js │ │ │ │ ├── FI.js │ │ │ │ ├── FJ.js │ │ │ │ ├── FK.js │ │ │ │ ├── FM.js │ │ │ │ ├── FO.js │ │ │ │ ├── FR.js │ │ │ │ ├── GA.js │ │ │ │ ├── GB.js │ │ │ │ ├── GD.js │ │ │ │ ├── GE.js │ │ │ │ ├── GF.js │ │ │ │ ├── GG.js │ │ │ │ ├── GH.js │ │ │ │ ├── GI.js │ │ │ │ ├── GL.js │ │ │ │ ├── GM.js │ │ │ │ ├── GN.js │ │ │ │ ├── GP.js │ │ │ │ ├── GQ.js │ │ │ │ ├── GR.js │ │ │ │ ├── GT.js │ │ │ │ ├── GU.js │ │ │ │ ├── GW.js │ │ │ │ ├── GY.js │ │ │ │ ├── HK.js │ │ │ │ ├── HN.js │ │ │ │ ├── HR.js │ │ │ │ ├── HT.js │ │ │ │ ├── HU.js │ │ │ │ ├── ID.js │ │ │ │ ├── IE.js │ │ │ │ ├── IL.js │ │ │ │ ├── IM.js │ │ │ │ ├── IN.js │ │ │ │ ├── IQ.js │ │ │ │ ├── IR.js │ │ │ │ ├── IS.js │ │ │ │ ├── IT.js │ │ │ │ ├── JE.js │ │ │ │ ├── JM.js │ │ │ │ ├── JO.js │ │ │ │ ├── JP.js │ │ │ │ ├── KE.js │ │ │ │ ├── KG.js │ │ │ │ ├── KH.js │ │ │ │ ├── KI.js │ │ │ │ ├── KM.js │ │ │ │ ├── KN.js │ │ │ │ ├── KP.js │ │ │ │ ├── KR.js │ │ │ │ ├── KW.js │ │ │ │ ├── KY.js │ │ │ │ ├── KZ.js │ │ │ │ ├── LA.js │ │ │ │ ├── LB.js │ │ │ │ ├── LC.js │ │ │ │ ├── LI.js │ │ │ │ ├── LK.js │ │ │ │ ├── LR.js │ │ │ │ ├── LS.js │ │ │ │ ├── LT.js │ │ │ │ ├── LU.js │ │ │ │ ├── LV.js │ │ │ │ ├── LY.js │ │ │ │ ├── MA.js │ │ │ │ ├── MC.js │ │ │ │ ├── MD.js │ │ │ │ ├── ME.js │ │ │ │ ├── MG.js │ │ │ │ ├── MH.js │ │ │ │ ├── MK.js │ │ │ │ ├── ML.js │ │ │ │ ├── MM.js │ │ │ │ ├── MN.js │ │ │ │ ├── MO.js │ │ │ │ ├── MP.js │ │ │ │ ├── MQ.js │ │ │ │ ├── MR.js │ │ │ │ ├── MS.js │ │ │ │ ├── MT.js │ │ │ │ ├── MU.js │ │ │ │ ├── MV.js │ │ │ │ ├── MW.js │ │ │ │ ├── MX.js │ │ │ │ ├── MY.js │ │ │ │ ├── MZ.js │ │ │ │ ├── NA.js │ │ │ │ ├── NC.js │ │ │ │ ├── NE.js │ │ │ │ ├── NF.js │ │ │ │ ├── NG.js │ │ │ │ ├── NI.js │ │ │ │ ├── NL.js │ │ │ │ ├── NO.js │ │ │ │ ├── NP.js │ │ │ │ ├── NR.js │ │ │ │ ├── NU.js │ │ │ │ ├── NZ.js │ │ │ │ ├── OM.js │ │ │ │ ├── PA.js │ │ │ │ ├── PE.js │ │ │ │ ├── PF.js │ │ │ │ ├── PG.js │ │ │ │ ├── PH.js │ │ │ │ ├── PK.js │ │ │ │ ├── PL.js │ │ │ │ ├── PM.js │ │ │ │ ├── PN.js │ │ │ │ ├── PR.js │ │ │ │ ├── PS.js │ │ │ │ ├── PT.js │ │ │ │ ├── PW.js │ │ │ │ ├── PY.js │ │ │ │ ├── QA.js │ │ │ │ ├── RE.js │ │ │ │ ├── RO.js │ │ │ │ ├── RS.js │ │ │ │ ├── RU.js │ │ │ │ ├── RW.js │ │ │ │ ├── SA.js │ │ │ │ ├── SB.js │ │ │ │ ├── SC.js │ │ │ │ ├── SD.js │ │ │ │ ├── SE.js │ │ │ │ ├── SG.js │ │ │ │ ├── SH.js │ │ │ │ ├── SI.js │ │ │ │ ├── SK.js │ │ │ │ ├── SL.js │ │ │ │ ├── SM.js │ │ │ │ ├── SN.js │ │ │ │ ├── SO.js │ │ │ │ ├── SR.js │ │ │ │ ├── ST.js │ │ │ │ ├── SV.js │ │ │ │ ├── SY.js │ │ │ │ ├── SZ.js │ │ │ │ ├── TC.js │ │ │ │ ├── TD.js │ │ │ │ ├── TG.js │ │ │ │ ├── TH.js │ │ │ │ ├── TJ.js │ │ │ │ ├── TK.js │ │ │ │ ├── TL.js │ │ │ │ ├── TM.js │ │ │ │ ├── TN.js │ │ │ │ ├── TO.js │ │ │ │ ├── TR.js │ │ │ │ ├── TT.js │ │ │ │ ├── TV.js │ │ │ │ ├── TW.js │ │ │ │ ├── TZ.js │ │ │ │ ├── UA.js │ │ │ │ ├── UG.js │ │ │ │ ├── US.js │ │ │ │ ├── UY.js │ │ │ │ ├── UZ.js │ │ │ │ ├── VA.js │ │ │ │ ├── VC.js │ │ │ │ ├── VE.js │ │ │ │ ├── VG.js │ │ │ │ ├── VI.js │ │ │ │ ├── VN.js │ │ │ │ ├── VU.js │ │ │ │ ├── WF.js │ │ │ │ ├── WS.js │ │ │ │ ├── YE.js │ │ │ │ ├── YT.js │ │ │ │ ├── ZA.js │ │ │ │ ├── ZM.js │ │ │ │ ├── ZW.js │ │ │ │ ├── alt-af.js │ │ │ │ ├── alt-an.js │ │ │ │ ├── alt-as.js │ │ │ │ ├── alt-eu.js │ │ │ │ ├── alt-na.js │ │ │ │ ├── alt-oc.js │ │ │ │ ├── alt-sa.js │ │ │ │ └── alt-ww.js │ │ └── package.json │ ├── chalk │ │ ├── index.js │ │ ├── index.js.flow │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ ├── templates.js │ │ └── types │ │ │ └── index.d.ts │ ├── chokidar │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── types │ │ │ └── index.d.ts │ ├── color-convert │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── conversions.js │ │ ├── index.js │ │ ├── package.json │ │ └── route.js │ ├── color-name │ │ ├── .eslintrc.json │ │ ├── .npmignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── test.js │ ├── commander │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── index.js │ │ ├── package.json │ │ └── typings │ │ │ └── index.d.ts │ ├── concat-map │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.markdown │ │ ├── example │ │ │ └── map.js │ │ ├── index.js │ │ ├── package.json │ │ └── test │ │ │ └── map.js │ ├── convert-source-map │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── debug │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── src │ │ │ ├── browser.js │ │ │ ├── common.js │ │ │ ├── index.js │ │ │ └── node.js │ ├── electron-to-chromium │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── chromium-versions.js │ │ ├── chromium-versions.json │ │ ├── full-chromium-versions.js │ │ ├── full-chromium-versions.json │ │ ├── full-versions.js │ │ ├── full-versions.json │ │ ├── index.js │ │ ├── package.json │ │ ├── versions.js │ │ └── versions.json │ ├── escalade │ │ ├── index.d.ts │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ └── sync │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.mjs │ ├── escape-string-regexp │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── fill-range │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── fs-readdir-recursive │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── fs.realpath │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── old.js │ │ └── package.json │ ├── fsevents │ │ ├── LICENSE │ │ ├── README.md │ │ ├── fsevents.d.ts │ │ ├── fsevents.js │ │ ├── fsevents.node │ │ └── package.json │ ├── gensync │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── index.js.flow │ │ ├── package.json │ │ └── test │ │ │ ├── .babelrc │ │ │ └── index.test.js │ ├── glob-parent │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── glob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── common.js │ │ ├── glob.js │ │ ├── package.json │ │ └── sync.js │ ├── globals │ │ ├── globals.json │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── has-flag │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── inflight │ │ ├── LICENSE │ │ ├── README.md │ │ ├── inflight.js │ │ └── package.json │ ├── inherits │ │ ├── LICENSE │ │ ├── README.md │ │ ├── inherits.js │ │ ├── inherits_browser.js │ │ └── package.json │ ├── is-binary-path │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── is-extglob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── is-glob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── is-number │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── js-tokens │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── jsesc │ │ ├── LICENSE-MIT.txt │ │ ├── README.md │ │ ├── bin │ │ │ └── jsesc │ │ ├── jsesc.js │ │ ├── man │ │ │ └── jsesc.1 │ │ └── package.json │ ├── json5 │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── package.json │ ├── make-dir │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── node_modules │ │ │ ├── .bin │ │ │ │ └── semver │ │ │ └── semver │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── bin │ │ │ │ └── semver │ │ │ │ ├── package.json │ │ │ │ ├── range.bnf │ │ │ │ └── semver.js │ │ ├── package.json │ │ └── readme.md │ ├── minimatch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── minimatch.js │ │ └── package.json │ ├── ms │ │ ├── index.js │ │ ├── license.md │ │ ├── package.json │ │ └── readme.md │ ├── node-releases │ │ ├── LICENSE │ │ ├── README.md │ │ ├── data │ │ │ ├── processed │ │ │ │ └── envs.json │ │ │ └── release-schedule │ │ │ │ └── release-schedule.json │ │ └── package.json │ ├── normalize-path │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── once │ │ ├── LICENSE │ │ ├── README.md │ │ ├── once.js │ │ └── package.json │ ├── path-is-absolute │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── picocolors │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── picocolors.browser.js │ │ ├── picocolors.d.ts │ │ ├── picocolors.js │ │ └── types.ts │ ├── picomatch │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── pify │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── readdirp │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── safe-buffer │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── semver │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin │ │ │ └── semver.js │ │ ├── package.json │ │ ├── range.bnf │ │ └── semver.js │ ├── slash │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── supports-color │ │ ├── browser.js │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── to-fast-properties │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── to-regex-range │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── update-browserslist-db │ │ ├── LICENSE │ │ ├── README.md │ │ ├── check-npm-version.js │ │ ├── cli.js │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ └── wrappy │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── wrappy.js ├── package-lock.json ├── package.json ├── rm_extra_semicolons.js ├── too_many_semicolons.js ├── undo_brackets.js └── undo_hexcoding.js ├── 2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data ├── extract1.js ├── fb_example.js ├── get_quotes.js ├── node_modules │ ├── .bin │ │ ├── babel │ │ ├── babel-external-helpers │ │ ├── babel-node │ │ ├── browserslist │ │ ├── browserslist-lint │ │ ├── jsesc │ │ ├── json5 │ │ ├── parser │ │ └── semver │ ├── .package-lock.json │ ├── @ampproject │ │ └── remapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ ├── @babel │ │ ├── cli │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bin │ │ │ │ ├── babel-external-helpers.js │ │ │ │ └── babel.js │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── code-frame │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── compat-data │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── corejs2-built-ins.js │ │ │ ├── corejs3-shipped-proposals.js │ │ │ ├── data │ │ │ │ ├── corejs2-built-ins.json │ │ │ │ ├── corejs3-shipped-proposals.json │ │ │ │ ├── native-modules.json │ │ │ │ ├── overlapping-plugins.json │ │ │ │ ├── plugin-bugfixes.json │ │ │ │ └── plugins.json │ │ │ ├── native-modules.js │ │ │ ├── overlapping-plugins.js │ │ │ ├── package.json │ │ │ ├── plugin-bugfixes.js │ │ │ └── plugins.js │ │ ├── core │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── cjs-proxy.cjs │ │ │ ├── package.json │ │ │ └── src │ │ │ │ ├── config │ │ │ │ ├── files │ │ │ │ │ ├── index-browser.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── resolve-targets-browser.ts │ │ │ │ └── resolve-targets.ts │ │ │ │ ├── transform-file-browser.ts │ │ │ │ └── transform-file.ts │ │ ├── generator │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── node_modules │ │ │ │ └── @jridgewell │ │ │ │ │ └── gen-mapping │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── package.json │ │ │ │ │ └── src │ │ │ │ │ ├── gen-mapping.ts │ │ │ │ │ ├── sourcemap-segment.ts │ │ │ │ │ └── types.ts │ │ │ └── package.json │ │ ├── helper-compilation-targets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-environment-visitor │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-function-name │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-hoist-variables │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-module-imports │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-module-transforms │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-simple-access │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-split-export-declaration │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-string-parser │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-validator-identifier │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ └── generate-identifier-regex.js │ │ ├── helper-validator-option │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helpers │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── generate-helpers.js │ │ │ │ ├── generate-regenerator-runtime.js │ │ │ │ └── package.json │ │ ├── highlight │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── parser │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bin │ │ │ │ └── babel-parser.js │ │ │ ├── index.cjs │ │ │ ├── package.json │ │ │ └── typings │ │ │ │ └── babel-parser.d.ts │ │ ├── template │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── traverse │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── generators │ │ │ │ ├── asserts.js │ │ │ │ └── validators.js │ │ │ │ └── package.json │ │ └── types │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ ├── generators │ │ │ ├── asserts.js │ │ │ ├── ast-types.js │ │ │ ├── builders.js │ │ │ ├── constants.js │ │ │ ├── docs.js │ │ │ ├── flow.js │ │ │ ├── typescript-legacy.js │ │ │ └── validators.js │ │ │ ├── package.json │ │ │ └── utils │ │ │ ├── formatBuilderName.js │ │ │ ├── lowerFirst.js │ │ │ ├── stringifyValidator.js │ │ │ └── toFunctionName.js │ ├── @jridgewell │ │ ├── gen-mapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── resolve-uri │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── set-array │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ │ └── set-array.ts │ │ ├── sourcemap-codec │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ │ └── sourcemap-codec.ts │ │ └── trace-mapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ ├── any-map.ts │ │ │ ├── binary-search.ts │ │ │ ├── by-source.ts │ │ │ ├── resolve.ts │ │ │ ├── sort.ts │ │ │ ├── sourcemap-segment.ts │ │ │ ├── strip-filename.ts │ │ │ ├── trace-mapping.ts │ │ │ └── types.ts │ ├── @nicolo-ribaudo │ │ └── chokidar-2 │ │ │ ├── README.md │ │ │ ├── build-chokidar.sh │ │ │ ├── package.json │ │ │ └── types.d.ts │ ├── ansi-styles │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── anymatch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── babel │ │ ├── .npmignore │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── balanced-match │ │ ├── .github │ │ │ └── FUNDING.yml │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── binary-extensions │ │ ├── binary-extensions.json │ │ ├── binary-extensions.json.d.ts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── brace-expansion │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── braces │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── browserslist │ │ ├── LICENSE │ │ ├── README.md │ │ ├── browser.js │ │ ├── cli.js │ │ ├── error.d.ts │ │ ├── error.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── node.js │ │ ├── package.json │ │ └── parse.js │ ├── caniuse-lite │ │ ├── LICENSE │ │ ├── README.md │ │ ├── data │ │ │ ├── agents.js │ │ │ ├── browserVersions.js │ │ │ ├── browsers.js │ │ │ ├── features.js │ │ │ ├── features │ │ │ │ ├── aac.js │ │ │ │ ├── abortcontroller.js │ │ │ │ ├── ac3-ec3.js │ │ │ │ ├── accelerometer.js │ │ │ │ ├── addeventlistener.js │ │ │ │ ├── alternate-stylesheet.js │ │ │ │ ├── ambient-light.js │ │ │ │ ├── apng.js │ │ │ │ ├── array-find-index.js │ │ │ │ ├── array-find.js │ │ │ │ ├── array-flat.js │ │ │ │ ├── array-includes.js │ │ │ │ ├── arrow-functions.js │ │ │ │ ├── asmjs.js │ │ │ │ ├── async-clipboard.js │ │ │ │ ├── async-functions.js │ │ │ │ ├── atob-btoa.js │ │ │ │ ├── audio-api.js │ │ │ │ ├── audio.js │ │ │ │ ├── audiotracks.js │ │ │ │ ├── autofocus.js │ │ │ │ ├── auxclick.js │ │ │ │ ├── av1.js │ │ │ │ ├── avif.js │ │ │ │ ├── background-attachment.js │ │ │ │ ├── background-clip-text.js │ │ │ │ ├── background-img-opts.js │ │ │ │ ├── background-position-x-y.js │ │ │ │ ├── background-repeat-round-space.js │ │ │ │ ├── background-sync.js │ │ │ │ ├── battery-status.js │ │ │ │ ├── beacon.js │ │ │ │ ├── beforeafterprint.js │ │ │ │ ├── bigint.js │ │ │ │ ├── blobbuilder.js │ │ │ │ ├── bloburls.js │ │ │ │ ├── border-image.js │ │ │ │ ├── border-radius.js │ │ │ │ ├── broadcastchannel.js │ │ │ │ ├── brotli.js │ │ │ │ ├── calc.js │ │ │ │ ├── canvas-blending.js │ │ │ │ ├── canvas-text.js │ │ │ │ ├── canvas.js │ │ │ │ ├── ch-unit.js │ │ │ │ ├── chacha20-poly1305.js │ │ │ │ ├── channel-messaging.js │ │ │ │ ├── childnode-remove.js │ │ │ │ ├── classlist.js │ │ │ │ ├── client-hints-dpr-width-viewport.js │ │ │ │ ├── clipboard.js │ │ │ │ ├── colr-v1.js │ │ │ │ ├── colr.js │ │ │ │ ├── comparedocumentposition.js │ │ │ │ ├── console-basic.js │ │ │ │ ├── console-time.js │ │ │ │ ├── const.js │ │ │ │ ├── constraint-validation.js │ │ │ │ ├── contenteditable.js │ │ │ │ ├── contentsecuritypolicy.js │ │ │ │ ├── contentsecuritypolicy2.js │ │ │ │ ├── cookie-store-api.js │ │ │ │ ├── cors.js │ │ │ │ ├── createimagebitmap.js │ │ │ │ ├── credential-management.js │ │ │ │ ├── cryptography.js │ │ │ │ ├── css-all.js │ │ │ │ ├── css-animation.js │ │ │ │ ├── css-any-link.js │ │ │ │ ├── css-appearance.js │ │ │ │ ├── css-at-counter-style.js │ │ │ │ ├── css-autofill.js │ │ │ │ ├── css-backdrop-filter.js │ │ │ │ ├── css-background-offsets.js │ │ │ │ ├── css-backgroundblendmode.js │ │ │ │ ├── css-boxdecorationbreak.js │ │ │ │ ├── css-boxshadow.js │ │ │ │ ├── css-canvas.js │ │ │ │ ├── css-caret-color.js │ │ │ │ ├── css-cascade-layers.js │ │ │ │ ├── css-case-insensitive.js │ │ │ │ ├── css-clip-path.js │ │ │ │ ├── css-color-adjust.js │ │ │ │ ├── css-color-function.js │ │ │ │ ├── css-conic-gradients.js │ │ │ │ ├── css-container-queries.js │ │ │ │ ├── css-container-query-units.js │ │ │ │ ├── css-containment.js │ │ │ │ ├── css-content-visibility.js │ │ │ │ ├── css-counters.js │ │ │ │ ├── css-crisp-edges.js │ │ │ │ ├── css-cross-fade.js │ │ │ │ ├── css-default-pseudo.js │ │ │ │ ├── css-descendant-gtgt.js │ │ │ │ ├── css-deviceadaptation.js │ │ │ │ ├── css-dir-pseudo.js │ │ │ │ ├── css-display-contents.js │ │ │ │ ├── css-element-function.js │ │ │ │ ├── css-env-function.js │ │ │ │ ├── css-exclusions.js │ │ │ │ ├── css-featurequeries.js │ │ │ │ ├── css-file-selector-button.js │ │ │ │ ├── css-filter-function.js │ │ │ │ ├── css-filters.js │ │ │ │ ├── css-first-letter.js │ │ │ │ ├── css-first-line.js │ │ │ │ ├── css-fixed.js │ │ │ │ ├── css-focus-visible.js │ │ │ │ ├── css-focus-within.js │ │ │ │ ├── css-font-palette.js │ │ │ │ ├── css-font-rendering-controls.js │ │ │ │ ├── css-font-stretch.js │ │ │ │ ├── css-gencontent.js │ │ │ │ ├── css-gradients.js │ │ │ │ ├── css-grid-animation.js │ │ │ │ ├── css-grid.js │ │ │ │ ├── css-hanging-punctuation.js │ │ │ │ ├── css-has.js │ │ │ │ ├── css-hyphenate.js │ │ │ │ ├── css-hyphens.js │ │ │ │ ├── css-image-orientation.js │ │ │ │ ├── css-image-set.js │ │ │ │ ├── css-in-out-of-range.js │ │ │ │ ├── css-indeterminate-pseudo.js │ │ │ │ ├── css-initial-letter.js │ │ │ │ ├── css-initial-value.js │ │ │ │ ├── css-lch-lab.js │ │ │ │ ├── css-letter-spacing.js │ │ │ │ ├── css-line-clamp.js │ │ │ │ ├── css-logical-props.js │ │ │ │ ├── css-marker-pseudo.js │ │ │ │ ├── css-masks.js │ │ │ │ ├── css-matches-pseudo.js │ │ │ │ ├── css-math-functions.js │ │ │ │ ├── css-media-interaction.js │ │ │ │ ├── css-media-resolution.js │ │ │ │ ├── css-media-scripting.js │ │ │ │ ├── css-mediaqueries.js │ │ │ │ ├── css-mixblendmode.js │ │ │ │ ├── css-motion-paths.js │ │ │ │ ├── css-namespaces.js │ │ │ │ ├── css-nesting.js │ │ │ │ ├── css-not-sel-list.js │ │ │ │ ├── css-nth-child-of.js │ │ │ │ ├── css-opacity.js │ │ │ │ ├── css-optional-pseudo.js │ │ │ │ ├── css-overflow-anchor.js │ │ │ │ ├── css-overflow-overlay.js │ │ │ │ ├── css-overflow.js │ │ │ │ ├── css-overscroll-behavior.js │ │ │ │ ├── css-page-break.js │ │ │ │ ├── css-paged-media.js │ │ │ │ ├── css-paint-api.js │ │ │ │ ├── css-placeholder-shown.js │ │ │ │ ├── css-placeholder.js │ │ │ │ ├── css-print-color-adjust.js │ │ │ │ ├── css-read-only-write.js │ │ │ │ ├── css-rebeccapurple.js │ │ │ │ ├── css-reflections.js │ │ │ │ ├── css-regions.js │ │ │ │ ├── css-repeating-gradients.js │ │ │ │ ├── css-resize.js │ │ │ │ ├── css-revert-value.js │ │ │ │ ├── css-rrggbbaa.js │ │ │ │ ├── css-scroll-behavior.js │ │ │ │ ├── css-scroll-timeline.js │ │ │ │ ├── css-scrollbar.js │ │ │ │ ├── css-sel2.js │ │ │ │ ├── css-sel3.js │ │ │ │ ├── css-selection.js │ │ │ │ ├── css-shapes.js │ │ │ │ ├── css-snappoints.js │ │ │ │ ├── css-sticky.js │ │ │ │ ├── css-subgrid.js │ │ │ │ ├── css-supports-api.js │ │ │ │ ├── css-table.js │ │ │ │ ├── css-text-align-last.js │ │ │ │ ├── css-text-indent.js │ │ │ │ ├── css-text-justify.js │ │ │ │ ├── css-text-orientation.js │ │ │ │ ├── css-text-spacing.js │ │ │ │ ├── css-textshadow.js │ │ │ │ ├── css-touch-action-2.js │ │ │ │ ├── css-touch-action.js │ │ │ │ ├── css-transitions.js │ │ │ │ ├── css-unicode-bidi.js │ │ │ │ ├── css-unset-value.js │ │ │ │ ├── css-variables.js │ │ │ │ ├── css-when-else.js │ │ │ │ ├── css-widows-orphans.js │ │ │ │ ├── css-width-stretch.js │ │ │ │ ├── css-writing-mode.js │ │ │ │ ├── css-zoom.js │ │ │ │ ├── css3-attr.js │ │ │ │ ├── css3-boxsizing.js │ │ │ │ ├── css3-colors.js │ │ │ │ ├── css3-cursors-grab.js │ │ │ │ ├── css3-cursors-newer.js │ │ │ │ ├── css3-cursors.js │ │ │ │ ├── css3-tabsize.js │ │ │ │ ├── currentcolor.js │ │ │ │ ├── custom-elements.js │ │ │ │ ├── custom-elementsv1.js │ │ │ │ ├── customevent.js │ │ │ │ ├── datalist.js │ │ │ │ ├── dataset.js │ │ │ │ ├── datauri.js │ │ │ │ ├── date-tolocaledatestring.js │ │ │ │ ├── declarative-shadow-dom.js │ │ │ │ ├── decorators.js │ │ │ │ ├── details.js │ │ │ │ ├── deviceorientation.js │ │ │ │ ├── devicepixelratio.js │ │ │ │ ├── dialog.js │ │ │ │ ├── dispatchevent.js │ │ │ │ ├── dnssec.js │ │ │ │ ├── do-not-track.js │ │ │ │ ├── document-currentscript.js │ │ │ │ ├── document-evaluate-xpath.js │ │ │ │ ├── document-execcommand.js │ │ │ │ ├── document-policy.js │ │ │ │ ├── document-scrollingelement.js │ │ │ │ ├── documenthead.js │ │ │ │ ├── dom-manip-convenience.js │ │ │ │ ├── dom-range.js │ │ │ │ ├── domcontentloaded.js │ │ │ │ ├── domfocusin-domfocusout-events.js │ │ │ │ ├── dommatrix.js │ │ │ │ ├── download.js │ │ │ │ ├── dragndrop.js │ │ │ │ ├── element-closest.js │ │ │ │ ├── element-from-point.js │ │ │ │ ├── element-scroll-methods.js │ │ │ │ ├── eme.js │ │ │ │ ├── eot.js │ │ │ │ ├── es5.js │ │ │ │ ├── es6-class.js │ │ │ │ ├── es6-generators.js │ │ │ │ ├── es6-module-dynamic-import.js │ │ │ │ ├── es6-module.js │ │ │ │ ├── es6-number.js │ │ │ │ ├── es6-string-includes.js │ │ │ │ ├── es6.js │ │ │ │ ├── eventsource.js │ │ │ │ ├── extended-system-fonts.js │ │ │ │ ├── feature-policy.js │ │ │ │ ├── fetch.js │ │ │ │ ├── fieldset-disabled.js │ │ │ │ ├── fileapi.js │ │ │ │ ├── filereader.js │ │ │ │ ├── filereadersync.js │ │ │ │ ├── filesystem.js │ │ │ │ ├── flac.js │ │ │ │ ├── flexbox-gap.js │ │ │ │ ├── flexbox.js │ │ │ │ ├── flow-root.js │ │ │ │ ├── focusin-focusout-events.js │ │ │ │ ├── focusoptions-preventscroll.js │ │ │ │ ├── font-family-system-ui.js │ │ │ │ ├── font-feature.js │ │ │ │ ├── font-kerning.js │ │ │ │ ├── font-loading.js │ │ │ │ ├── font-metrics-overrides.js │ │ │ │ ├── font-size-adjust.js │ │ │ │ ├── font-smooth.js │ │ │ │ ├── font-unicode-range.js │ │ │ │ ├── font-variant-alternates.js │ │ │ │ ├── font-variant-numeric.js │ │ │ │ ├── fontface.js │ │ │ │ ├── form-attribute.js │ │ │ │ ├── form-submit-attributes.js │ │ │ │ ├── form-validation.js │ │ │ │ ├── forms.js │ │ │ │ ├── fullscreen.js │ │ │ │ ├── gamepad.js │ │ │ │ ├── geolocation.js │ │ │ │ ├── getboundingclientrect.js │ │ │ │ ├── getcomputedstyle.js │ │ │ │ ├── getelementsbyclassname.js │ │ │ │ ├── getrandomvalues.js │ │ │ │ ├── gyroscope.js │ │ │ │ ├── hardwareconcurrency.js │ │ │ │ ├── hashchange.js │ │ │ │ ├── heif.js │ │ │ │ ├── hevc.js │ │ │ │ ├── hidden.js │ │ │ │ ├── high-resolution-time.js │ │ │ │ ├── history.js │ │ │ │ ├── html-media-capture.js │ │ │ │ ├── html5semantic.js │ │ │ │ ├── http-live-streaming.js │ │ │ │ ├── http2.js │ │ │ │ ├── http3.js │ │ │ │ ├── iframe-sandbox.js │ │ │ │ ├── iframe-seamless.js │ │ │ │ ├── iframe-srcdoc.js │ │ │ │ ├── imagecapture.js │ │ │ │ ├── ime.js │ │ │ │ ├── img-naturalwidth-naturalheight.js │ │ │ │ ├── import-maps.js │ │ │ │ ├── imports.js │ │ │ │ ├── indeterminate-checkbox.js │ │ │ │ ├── indexeddb.js │ │ │ │ ├── indexeddb2.js │ │ │ │ ├── inline-block.js │ │ │ │ ├── innertext.js │ │ │ │ ├── input-autocomplete-onoff.js │ │ │ │ ├── input-color.js │ │ │ │ ├── input-datetime.js │ │ │ │ ├── input-email-tel-url.js │ │ │ │ ├── input-event.js │ │ │ │ ├── input-file-accept.js │ │ │ │ ├── input-file-directory.js │ │ │ │ ├── input-file-multiple.js │ │ │ │ ├── input-inputmode.js │ │ │ │ ├── input-minlength.js │ │ │ │ ├── input-number.js │ │ │ │ ├── input-pattern.js │ │ │ │ ├── input-placeholder.js │ │ │ │ ├── input-range.js │ │ │ │ ├── input-search.js │ │ │ │ ├── input-selection.js │ │ │ │ ├── insert-adjacent.js │ │ │ │ ├── insertadjacenthtml.js │ │ │ │ ├── internationalization.js │ │ │ │ ├── intersectionobserver-v2.js │ │ │ │ ├── intersectionobserver.js │ │ │ │ ├── intl-pluralrules.js │ │ │ │ ├── intrinsic-width.js │ │ │ │ ├── jpeg2000.js │ │ │ │ ├── jpegxl.js │ │ │ │ ├── jpegxr.js │ │ │ │ ├── js-regexp-lookbehind.js │ │ │ │ ├── json.js │ │ │ │ ├── justify-content-space-evenly.js │ │ │ │ ├── kerning-pairs-ligatures.js │ │ │ │ ├── keyboardevent-charcode.js │ │ │ │ ├── keyboardevent-code.js │ │ │ │ ├── keyboardevent-getmodifierstate.js │ │ │ │ ├── keyboardevent-key.js │ │ │ │ ├── keyboardevent-location.js │ │ │ │ ├── keyboardevent-which.js │ │ │ │ ├── lazyload.js │ │ │ │ ├── let.js │ │ │ │ ├── link-icon-png.js │ │ │ │ ├── link-icon-svg.js │ │ │ │ ├── link-rel-dns-prefetch.js │ │ │ │ ├── link-rel-modulepreload.js │ │ │ │ ├── link-rel-preconnect.js │ │ │ │ ├── link-rel-prefetch.js │ │ │ │ ├── link-rel-preload.js │ │ │ │ ├── link-rel-prerender.js │ │ │ │ ├── loading-lazy-attr.js │ │ │ │ ├── localecompare.js │ │ │ │ ├── magnetometer.js │ │ │ │ ├── matchesselector.js │ │ │ │ ├── matchmedia.js │ │ │ │ ├── mathml.js │ │ │ │ ├── maxlength.js │ │ │ │ ├── media-attribute.js │ │ │ │ ├── media-fragments.js │ │ │ │ ├── media-session-api.js │ │ │ │ ├── mediacapture-fromelement.js │ │ │ │ ├── mediarecorder.js │ │ │ │ ├── mediasource.js │ │ │ │ ├── menu.js │ │ │ │ ├── meta-theme-color.js │ │ │ │ ├── meter.js │ │ │ │ ├── midi.js │ │ │ │ ├── minmaxwh.js │ │ │ │ ├── mp3.js │ │ │ │ ├── mpeg-dash.js │ │ │ │ ├── mpeg4.js │ │ │ │ ├── multibackgrounds.js │ │ │ │ ├── multicolumn.js │ │ │ │ ├── mutation-events.js │ │ │ │ ├── mutationobserver.js │ │ │ │ ├── namevalue-storage.js │ │ │ │ ├── native-filesystem-api.js │ │ │ │ ├── nav-timing.js │ │ │ │ ├── navigator-language.js │ │ │ │ ├── netinfo.js │ │ │ │ ├── notifications.js │ │ │ │ ├── object-entries.js │ │ │ │ ├── object-fit.js │ │ │ │ ├── object-observe.js │ │ │ │ ├── object-values.js │ │ │ │ ├── objectrtc.js │ │ │ │ ├── offline-apps.js │ │ │ │ ├── offscreencanvas.js │ │ │ │ ├── ogg-vorbis.js │ │ │ │ ├── ogv.js │ │ │ │ ├── ol-reversed.js │ │ │ │ ├── once-event-listener.js │ │ │ │ ├── online-status.js │ │ │ │ ├── opus.js │ │ │ │ ├── orientation-sensor.js │ │ │ │ ├── outline.js │ │ │ │ ├── pad-start-end.js │ │ │ │ ├── page-transition-events.js │ │ │ │ ├── pagevisibility.js │ │ │ │ ├── passive-event-listener.js │ │ │ │ ├── passwordrules.js │ │ │ │ ├── path2d.js │ │ │ │ ├── payment-request.js │ │ │ │ ├── pdf-viewer.js │ │ │ │ ├── permissions-api.js │ │ │ │ ├── permissions-policy.js │ │ │ │ ├── picture-in-picture.js │ │ │ │ ├── picture.js │ │ │ │ ├── ping.js │ │ │ │ ├── png-alpha.js │ │ │ │ ├── pointer-events.js │ │ │ │ ├── pointer.js │ │ │ │ ├── pointerlock.js │ │ │ │ ├── portals.js │ │ │ │ ├── prefers-color-scheme.js │ │ │ │ ├── prefers-reduced-motion.js │ │ │ │ ├── private-class-fields.js │ │ │ │ ├── private-methods-and-accessors.js │ │ │ │ ├── progress.js │ │ │ │ ├── promise-finally.js │ │ │ │ ├── promises.js │ │ │ │ ├── proximity.js │ │ │ │ ├── proxy.js │ │ │ │ ├── public-class-fields.js │ │ │ │ ├── publickeypinning.js │ │ │ │ ├── push-api.js │ │ │ │ ├── queryselector.js │ │ │ │ ├── readonly-attr.js │ │ │ │ ├── referrer-policy.js │ │ │ │ ├── registerprotocolhandler.js │ │ │ │ ├── rel-noopener.js │ │ │ │ ├── rel-noreferrer.js │ │ │ │ ├── rellist.js │ │ │ │ ├── rem.js │ │ │ │ ├── requestanimationframe.js │ │ │ │ ├── requestidlecallback.js │ │ │ │ ├── resizeobserver.js │ │ │ │ ├── resource-timing.js │ │ │ │ ├── rest-parameters.js │ │ │ │ ├── rtcpeerconnection.js │ │ │ │ ├── ruby.js │ │ │ │ ├── run-in.js │ │ │ │ ├── same-site-cookie-attribute.js │ │ │ │ ├── screen-orientation.js │ │ │ │ ├── script-async.js │ │ │ │ ├── script-defer.js │ │ │ │ ├── scrollintoview.js │ │ │ │ ├── scrollintoviewifneeded.js │ │ │ │ ├── sdch.js │ │ │ │ ├── selection-api.js │ │ │ │ ├── server-timing.js │ │ │ │ ├── serviceworkers.js │ │ │ │ ├── setimmediate.js │ │ │ │ ├── sha-2.js │ │ │ │ ├── shadowdom.js │ │ │ │ ├── shadowdomv1.js │ │ │ │ ├── sharedarraybuffer.js │ │ │ │ ├── sharedworkers.js │ │ │ │ ├── sni.js │ │ │ │ ├── spdy.js │ │ │ │ ├── speech-recognition.js │ │ │ │ ├── speech-synthesis.js │ │ │ │ ├── spellcheck-attribute.js │ │ │ │ ├── sql-storage.js │ │ │ │ ├── srcset.js │ │ │ │ ├── stream.js │ │ │ │ ├── streams.js │ │ │ │ ├── stricttransportsecurity.js │ │ │ │ ├── style-scoped.js │ │ │ │ ├── subresource-integrity.js │ │ │ │ ├── svg-css.js │ │ │ │ ├── svg-filters.js │ │ │ │ ├── svg-fonts.js │ │ │ │ ├── svg-fragment.js │ │ │ │ ├── svg-html.js │ │ │ │ ├── svg-html5.js │ │ │ │ ├── svg-img.js │ │ │ │ ├── svg-smil.js │ │ │ │ ├── svg.js │ │ │ │ ├── sxg.js │ │ │ │ ├── tabindex-attr.js │ │ │ │ ├── template-literals.js │ │ │ │ ├── template.js │ │ │ │ ├── temporal.js │ │ │ │ ├── testfeat.js │ │ │ │ ├── text-decoration.js │ │ │ │ ├── text-emphasis.js │ │ │ │ ├── text-overflow.js │ │ │ │ ├── text-size-adjust.js │ │ │ │ ├── text-stroke.js │ │ │ │ ├── text-underline-offset.js │ │ │ │ ├── textcontent.js │ │ │ │ ├── textencoder.js │ │ │ │ ├── tls1-1.js │ │ │ │ ├── tls1-2.js │ │ │ │ ├── tls1-3.js │ │ │ │ ├── token-binding.js │ │ │ │ ├── touch.js │ │ │ │ ├── transforms2d.js │ │ │ │ ├── transforms3d.js │ │ │ │ ├── trusted-types.js │ │ │ │ ├── ttf.js │ │ │ │ ├── typedarrays.js │ │ │ │ ├── u2f.js │ │ │ │ ├── unhandledrejection.js │ │ │ │ ├── upgradeinsecurerequests.js │ │ │ │ ├── url-scroll-to-text-fragment.js │ │ │ │ ├── url.js │ │ │ │ ├── urlsearchparams.js │ │ │ │ ├── use-strict.js │ │ │ │ ├── user-select-none.js │ │ │ │ ├── user-timing.js │ │ │ │ ├── variable-fonts.js │ │ │ │ ├── vector-effect.js │ │ │ │ ├── vibration.js │ │ │ │ ├── video.js │ │ │ │ ├── videotracks.js │ │ │ │ ├── viewport-unit-variants.js │ │ │ │ ├── viewport-units.js │ │ │ │ ├── wai-aria.js │ │ │ │ ├── wake-lock.js │ │ │ │ ├── wasm.js │ │ │ │ ├── wav.js │ │ │ │ ├── wbr-element.js │ │ │ │ ├── web-animation.js │ │ │ │ ├── web-app-manifest.js │ │ │ │ ├── web-bluetooth.js │ │ │ │ ├── web-serial.js │ │ │ │ ├── web-share.js │ │ │ │ ├── webauthn.js │ │ │ │ ├── webgl.js │ │ │ │ ├── webgl2.js │ │ │ │ ├── webgpu.js │ │ │ │ ├── webhid.js │ │ │ │ ├── webkit-user-drag.js │ │ │ │ ├── webm.js │ │ │ │ ├── webnfc.js │ │ │ │ ├── webp.js │ │ │ │ ├── websockets.js │ │ │ │ ├── webusb.js │ │ │ │ ├── webvr.js │ │ │ │ ├── webvtt.js │ │ │ │ ├── webworkers.js │ │ │ │ ├── webxr.js │ │ │ │ ├── will-change.js │ │ │ │ ├── woff.js │ │ │ │ ├── woff2.js │ │ │ │ ├── word-break.js │ │ │ │ ├── wordwrap.js │ │ │ │ ├── x-doc-messaging.js │ │ │ │ ├── x-frame-options.js │ │ │ │ ├── xhr2.js │ │ │ │ ├── xhtml.js │ │ │ │ ├── xhtmlsmil.js │ │ │ │ └── xml-serializer.js │ │ │ └── regions │ │ │ │ ├── AD.js │ │ │ │ ├── AE.js │ │ │ │ ├── AF.js │ │ │ │ ├── AG.js │ │ │ │ ├── AI.js │ │ │ │ ├── AL.js │ │ │ │ ├── AM.js │ │ │ │ ├── AO.js │ │ │ │ ├── AR.js │ │ │ │ ├── AS.js │ │ │ │ ├── AT.js │ │ │ │ ├── AU.js │ │ │ │ ├── AW.js │ │ │ │ ├── AX.js │ │ │ │ ├── AZ.js │ │ │ │ ├── BA.js │ │ │ │ ├── BB.js │ │ │ │ ├── BD.js │ │ │ │ ├── BE.js │ │ │ │ ├── BF.js │ │ │ │ ├── BG.js │ │ │ │ ├── BH.js │ │ │ │ ├── BI.js │ │ │ │ ├── BJ.js │ │ │ │ ├── BM.js │ │ │ │ ├── BN.js │ │ │ │ ├── BO.js │ │ │ │ ├── BR.js │ │ │ │ ├── BS.js │ │ │ │ ├── BT.js │ │ │ │ ├── BW.js │ │ │ │ ├── BY.js │ │ │ │ ├── BZ.js │ │ │ │ ├── CA.js │ │ │ │ ├── CD.js │ │ │ │ ├── CF.js │ │ │ │ ├── CG.js │ │ │ │ ├── CH.js │ │ │ │ ├── CI.js │ │ │ │ ├── CK.js │ │ │ │ ├── CL.js │ │ │ │ ├── CM.js │ │ │ │ ├── CN.js │ │ │ │ ├── CO.js │ │ │ │ ├── CR.js │ │ │ │ ├── CU.js │ │ │ │ ├── CV.js │ │ │ │ ├── CX.js │ │ │ │ ├── CY.js │ │ │ │ ├── CZ.js │ │ │ │ ├── DE.js │ │ │ │ ├── DJ.js │ │ │ │ ├── DK.js │ │ │ │ ├── DM.js │ │ │ │ ├── DO.js │ │ │ │ ├── DZ.js │ │ │ │ ├── EC.js │ │ │ │ ├── EE.js │ │ │ │ ├── EG.js │ │ │ │ ├── ER.js │ │ │ │ ├── ES.js │ │ │ │ ├── ET.js │ │ │ │ ├── FI.js │ │ │ │ ├── FJ.js │ │ │ │ ├── FK.js │ │ │ │ ├── FM.js │ │ │ │ ├── FO.js │ │ │ │ ├── FR.js │ │ │ │ ├── GA.js │ │ │ │ ├── GB.js │ │ │ │ ├── GD.js │ │ │ │ ├── GE.js │ │ │ │ ├── GF.js │ │ │ │ ├── GG.js │ │ │ │ ├── GH.js │ │ │ │ ├── GI.js │ │ │ │ ├── GL.js │ │ │ │ ├── GM.js │ │ │ │ ├── GN.js │ │ │ │ ├── GP.js │ │ │ │ ├── GQ.js │ │ │ │ ├── GR.js │ │ │ │ ├── GT.js │ │ │ │ ├── GU.js │ │ │ │ ├── GW.js │ │ │ │ ├── GY.js │ │ │ │ ├── HK.js │ │ │ │ ├── HN.js │ │ │ │ ├── HR.js │ │ │ │ ├── HT.js │ │ │ │ ├── HU.js │ │ │ │ ├── ID.js │ │ │ │ ├── IE.js │ │ │ │ ├── IL.js │ │ │ │ ├── IM.js │ │ │ │ ├── IN.js │ │ │ │ ├── IQ.js │ │ │ │ ├── IR.js │ │ │ │ ├── IS.js │ │ │ │ ├── IT.js │ │ │ │ ├── JE.js │ │ │ │ ├── JM.js │ │ │ │ ├── JO.js │ │ │ │ ├── JP.js │ │ │ │ ├── KE.js │ │ │ │ ├── KG.js │ │ │ │ ├── KH.js │ │ │ │ ├── KI.js │ │ │ │ ├── KM.js │ │ │ │ ├── KN.js │ │ │ │ ├── KP.js │ │ │ │ ├── KR.js │ │ │ │ ├── KW.js │ │ │ │ ├── KY.js │ │ │ │ ├── KZ.js │ │ │ │ ├── LA.js │ │ │ │ ├── LB.js │ │ │ │ ├── LC.js │ │ │ │ ├── LI.js │ │ │ │ ├── LK.js │ │ │ │ ├── LR.js │ │ │ │ ├── LS.js │ │ │ │ ├── LT.js │ │ │ │ ├── LU.js │ │ │ │ ├── LV.js │ │ │ │ ├── LY.js │ │ │ │ ├── MA.js │ │ │ │ ├── MC.js │ │ │ │ ├── MD.js │ │ │ │ ├── ME.js │ │ │ │ ├── MG.js │ │ │ │ ├── MH.js │ │ │ │ ├── MK.js │ │ │ │ ├── ML.js │ │ │ │ ├── MM.js │ │ │ │ ├── MN.js │ │ │ │ ├── MO.js │ │ │ │ ├── MP.js │ │ │ │ ├── MQ.js │ │ │ │ ├── MR.js │ │ │ │ ├── MS.js │ │ │ │ ├── MT.js │ │ │ │ ├── MU.js │ │ │ │ ├── MV.js │ │ │ │ ├── MW.js │ │ │ │ ├── MX.js │ │ │ │ ├── MY.js │ │ │ │ ├── MZ.js │ │ │ │ ├── NA.js │ │ │ │ ├── NC.js │ │ │ │ ├── NE.js │ │ │ │ ├── NF.js │ │ │ │ ├── NG.js │ │ │ │ ├── NI.js │ │ │ │ ├── NL.js │ │ │ │ ├── NO.js │ │ │ │ ├── NP.js │ │ │ │ ├── NR.js │ │ │ │ ├── NU.js │ │ │ │ ├── NZ.js │ │ │ │ ├── OM.js │ │ │ │ ├── PA.js │ │ │ │ ├── PE.js │ │ │ │ ├── PF.js │ │ │ │ ├── PG.js │ │ │ │ ├── PH.js │ │ │ │ ├── PK.js │ │ │ │ ├── PL.js │ │ │ │ ├── PM.js │ │ │ │ ├── PN.js │ │ │ │ ├── PR.js │ │ │ │ ├── PS.js │ │ │ │ ├── PT.js │ │ │ │ ├── PW.js │ │ │ │ ├── PY.js │ │ │ │ ├── QA.js │ │ │ │ ├── RE.js │ │ │ │ ├── RO.js │ │ │ │ ├── RS.js │ │ │ │ ├── RU.js │ │ │ │ ├── RW.js │ │ │ │ ├── SA.js │ │ │ │ ├── SB.js │ │ │ │ ├── SC.js │ │ │ │ ├── SD.js │ │ │ │ ├── SE.js │ │ │ │ ├── SG.js │ │ │ │ ├── SH.js │ │ │ │ ├── SI.js │ │ │ │ ├── SK.js │ │ │ │ ├── SL.js │ │ │ │ ├── SM.js │ │ │ │ ├── SN.js │ │ │ │ ├── SO.js │ │ │ │ ├── SR.js │ │ │ │ ├── ST.js │ │ │ │ ├── SV.js │ │ │ │ ├── SY.js │ │ │ │ ├── SZ.js │ │ │ │ ├── TC.js │ │ │ │ ├── TD.js │ │ │ │ ├── TG.js │ │ │ │ ├── TH.js │ │ │ │ ├── TJ.js │ │ │ │ ├── TK.js │ │ │ │ ├── TL.js │ │ │ │ ├── TM.js │ │ │ │ ├── TN.js │ │ │ │ ├── TO.js │ │ │ │ ├── TR.js │ │ │ │ ├── TT.js │ │ │ │ ├── TV.js │ │ │ │ ├── TW.js │ │ │ │ ├── TZ.js │ │ │ │ ├── UA.js │ │ │ │ ├── UG.js │ │ │ │ ├── US.js │ │ │ │ ├── UY.js │ │ │ │ ├── UZ.js │ │ │ │ ├── VA.js │ │ │ │ ├── VC.js │ │ │ │ ├── VE.js │ │ │ │ ├── VG.js │ │ │ │ ├── VI.js │ │ │ │ ├── VN.js │ │ │ │ ├── VU.js │ │ │ │ ├── WF.js │ │ │ │ ├── WS.js │ │ │ │ ├── YE.js │ │ │ │ ├── YT.js │ │ │ │ ├── ZA.js │ │ │ │ ├── ZM.js │ │ │ │ ├── ZW.js │ │ │ │ ├── alt-af.js │ │ │ │ ├── alt-an.js │ │ │ │ ├── alt-as.js │ │ │ │ ├── alt-eu.js │ │ │ │ ├── alt-na.js │ │ │ │ ├── alt-oc.js │ │ │ │ ├── alt-sa.js │ │ │ │ └── alt-ww.js │ │ └── package.json │ ├── chalk │ │ ├── index.js │ │ ├── index.js.flow │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ ├── templates.js │ │ └── types │ │ │ └── index.d.ts │ ├── chokidar │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── types │ │ │ └── index.d.ts │ ├── color-convert │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── conversions.js │ │ ├── index.js │ │ ├── package.json │ │ └── route.js │ ├── color-name │ │ ├── .eslintrc.json │ │ ├── .npmignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── test.js │ ├── commander │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── index.js │ │ ├── package.json │ │ └── typings │ │ │ └── index.d.ts │ ├── concat-map │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.markdown │ │ ├── example │ │ │ └── map.js │ │ ├── index.js │ │ ├── package.json │ │ └── test │ │ │ └── map.js │ ├── convert-source-map │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── debug │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── src │ │ │ ├── browser.js │ │ │ ├── common.js │ │ │ ├── index.js │ │ │ └── node.js │ ├── electron-to-chromium │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── chromium-versions.js │ │ ├── chromium-versions.json │ │ ├── full-chromium-versions.js │ │ ├── full-chromium-versions.json │ │ ├── full-versions.js │ │ ├── full-versions.json │ │ ├── index.js │ │ ├── package.json │ │ ├── versions.js │ │ └── versions.json │ ├── escalade │ │ ├── index.d.ts │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ └── sync │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.mjs │ ├── escape-string-regexp │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── fill-range │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── fs-readdir-recursive │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── fs.realpath │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── old.js │ │ └── package.json │ ├── fsevents │ │ ├── LICENSE │ │ ├── README.md │ │ ├── fsevents.d.ts │ │ ├── fsevents.js │ │ ├── fsevents.node │ │ └── package.json │ ├── gensync │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── index.js.flow │ │ ├── package.json │ │ └── test │ │ │ ├── .babelrc │ │ │ └── index.test.js │ ├── glob-parent │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── glob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── common.js │ │ ├── glob.js │ │ ├── package.json │ │ └── sync.js │ ├── globals │ │ ├── globals.json │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── has-flag │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── inflight │ │ ├── LICENSE │ │ ├── README.md │ │ ├── inflight.js │ │ └── package.json │ ├── inherits │ │ ├── LICENSE │ │ ├── README.md │ │ ├── inherits.js │ │ ├── inherits_browser.js │ │ └── package.json │ ├── is-binary-path │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── is-extglob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── is-glob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── is-number │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── js-tokens │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── jsesc │ │ ├── LICENSE-MIT.txt │ │ ├── README.md │ │ ├── bin │ │ │ └── jsesc │ │ ├── jsesc.js │ │ ├── man │ │ │ └── jsesc.1 │ │ └── package.json │ ├── json5 │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── package.json │ ├── make-dir │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── node_modules │ │ │ ├── .bin │ │ │ │ └── semver │ │ │ └── semver │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── bin │ │ │ │ └── semver │ │ │ │ ├── package.json │ │ │ │ ├── range.bnf │ │ │ │ └── semver.js │ │ ├── package.json │ │ └── readme.md │ ├── minimatch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── minimatch.js │ │ └── package.json │ ├── ms │ │ ├── index.js │ │ ├── license.md │ │ ├── package.json │ │ └── readme.md │ ├── node-releases │ │ ├── LICENSE │ │ ├── README.md │ │ ├── data │ │ │ ├── processed │ │ │ │ └── envs.json │ │ │ └── release-schedule │ │ │ │ └── release-schedule.json │ │ └── package.json │ ├── normalize-path │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── once │ │ ├── LICENSE │ │ ├── README.md │ │ ├── once.js │ │ └── package.json │ ├── path-is-absolute │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── picocolors │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── picocolors.browser.js │ │ ├── picocolors.d.ts │ │ ├── picocolors.js │ │ └── types.ts │ ├── picomatch │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── pify │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── readdirp │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── safe-buffer │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── semver │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin │ │ │ └── semver.js │ │ ├── package.json │ │ ├── range.bnf │ │ └── semver.js │ ├── slash │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── supports-color │ │ ├── browser.js │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── to-fast-properties │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── to-regex-range │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── update-browserslist-db │ │ ├── LICENSE │ │ ├── README.md │ │ ├── check-npm-version.js │ │ ├── cli.js │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ └── wrappy │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── wrappy.js ├── package-lock.json ├── package.json └── quotes.js ├── 2022-08-14-writing-custom-scrapy-middleware-for-proxy-pool-integration ├── middleware.py └── setting_snippet.py ├── 2022-08-27-building-python-script-clis-with-argparse-and-click ├── argv_demo.py ├── requirements.txt ├── url_scan_argparse.py └── url_scan_click.py ├── 2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code ├── dead_branches.js ├── dead_functions.js ├── fix_dead_branches.js ├── no_dead_branches.js ├── no_dead_functions.js ├── node_modules │ ├── .bin │ │ ├── babel │ │ ├── babel-external-helpers │ │ ├── browserslist │ │ ├── browserslist-lint │ │ ├── jsesc │ │ ├── json5 │ │ ├── parser │ │ └── semver │ ├── .package-lock.json │ ├── @ampproject │ │ └── remapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ ├── @babel │ │ ├── cli │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bin │ │ │ │ ├── babel-external-helpers.js │ │ │ │ └── babel.js │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── code-frame │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── compat-data │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── corejs2-built-ins.js │ │ │ ├── corejs3-shipped-proposals.js │ │ │ ├── data │ │ │ │ ├── corejs2-built-ins.json │ │ │ │ ├── corejs3-shipped-proposals.json │ │ │ │ ├── native-modules.json │ │ │ │ ├── overlapping-plugins.json │ │ │ │ ├── plugin-bugfixes.json │ │ │ │ └── plugins.json │ │ │ ├── native-modules.js │ │ │ ├── overlapping-plugins.js │ │ │ ├── package.json │ │ │ ├── plugin-bugfixes.js │ │ │ └── plugins.js │ │ ├── core │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── cjs-proxy.cjs │ │ │ ├── package.json │ │ │ └── src │ │ │ │ ├── config │ │ │ │ ├── files │ │ │ │ │ ├── index-browser.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── resolve-targets-browser.ts │ │ │ │ └── resolve-targets.ts │ │ │ │ ├── transform-file-browser.ts │ │ │ │ └── transform-file.ts │ │ ├── generator │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── node_modules │ │ │ │ └── @jridgewell │ │ │ │ │ └── gen-mapping │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── package.json │ │ │ │ │ └── src │ │ │ │ │ ├── gen-mapping.ts │ │ │ │ │ ├── sourcemap-segment.ts │ │ │ │ │ └── types.ts │ │ │ └── package.json │ │ ├── helper-compilation-targets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-environment-visitor │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-function-name │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-hoist-variables │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-module-imports │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-module-transforms │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-simple-access │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-split-export-declaration │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-string-parser │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helper-validator-identifier │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ └── generate-identifier-regex.js │ │ ├── helper-validator-option │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── helpers │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── generate-helpers.js │ │ │ │ ├── generate-regenerator-runtime.js │ │ │ │ └── package.json │ │ ├── highlight │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── parser │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bin │ │ │ │ └── babel-parser.js │ │ │ ├── index.cjs │ │ │ ├── package.json │ │ │ └── typings │ │ │ │ └── babel-parser.d.ts │ │ ├── template │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── traverse │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ │ ├── generators │ │ │ │ ├── asserts.js │ │ │ │ └── validators.js │ │ │ │ └── package.json │ │ └── types │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── scripts │ │ │ ├── generators │ │ │ ├── asserts.js │ │ │ ├── ast-types.js │ │ │ ├── builders.js │ │ │ ├── constants.js │ │ │ ├── docs.js │ │ │ ├── flow.js │ │ │ ├── typescript-legacy.js │ │ │ └── validators.js │ │ │ ├── package.json │ │ │ └── utils │ │ │ ├── formatBuilderName.js │ │ │ ├── lowerFirst.js │ │ │ ├── stringifyValidator.js │ │ │ └── toFunctionName.js │ ├── @jridgewell │ │ ├── gen-mapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── resolve-uri │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ │ ├── set-array │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ │ └── set-array.ts │ │ ├── sourcemap-codec │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src │ │ │ │ └── sourcemap-codec.ts │ │ └── trace-mapping │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ └── package.json │ ├── @nicolo-ribaudo │ │ └── chokidar-2 │ │ │ ├── README.md │ │ │ ├── build-chokidar.sh │ │ │ ├── package.json │ │ │ └── types.d.ts │ ├── ansi-styles │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── anymatch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── balanced-match │ │ ├── .github │ │ │ └── FUNDING.yml │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── binary-extensions │ │ ├── binary-extensions.json │ │ ├── binary-extensions.json.d.ts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── brace-expansion │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── braces │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── browserslist │ │ ├── LICENSE │ │ ├── README.md │ │ ├── browser.js │ │ ├── cli.js │ │ ├── error.d.ts │ │ ├── error.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── node.js │ │ ├── package.json │ │ └── parse.js │ ├── caniuse-lite │ │ ├── LICENSE │ │ ├── README.md │ │ ├── data │ │ │ ├── agents.js │ │ │ ├── browserVersions.js │ │ │ ├── browsers.js │ │ │ ├── features.js │ │ │ ├── features │ │ │ │ ├── aac.js │ │ │ │ ├── abortcontroller.js │ │ │ │ ├── ac3-ec3.js │ │ │ │ ├── accelerometer.js │ │ │ │ ├── addeventlistener.js │ │ │ │ ├── alternate-stylesheet.js │ │ │ │ ├── ambient-light.js │ │ │ │ ├── apng.js │ │ │ │ ├── array-find-index.js │ │ │ │ ├── array-find.js │ │ │ │ ├── array-flat.js │ │ │ │ ├── array-includes.js │ │ │ │ ├── arrow-functions.js │ │ │ │ ├── asmjs.js │ │ │ │ ├── async-clipboard.js │ │ │ │ ├── async-functions.js │ │ │ │ ├── atob-btoa.js │ │ │ │ ├── audio-api.js │ │ │ │ ├── audio.js │ │ │ │ ├── audiotracks.js │ │ │ │ ├── autofocus.js │ │ │ │ ├── auxclick.js │ │ │ │ ├── av1.js │ │ │ │ ├── avif.js │ │ │ │ ├── background-attachment.js │ │ │ │ ├── background-clip-text.js │ │ │ │ ├── background-img-opts.js │ │ │ │ ├── background-position-x-y.js │ │ │ │ ├── background-repeat-round-space.js │ │ │ │ ├── background-sync.js │ │ │ │ ├── battery-status.js │ │ │ │ ├── beacon.js │ │ │ │ ├── beforeafterprint.js │ │ │ │ ├── bigint.js │ │ │ │ ├── blobbuilder.js │ │ │ │ ├── bloburls.js │ │ │ │ ├── border-image.js │ │ │ │ ├── border-radius.js │ │ │ │ ├── broadcastchannel.js │ │ │ │ ├── brotli.js │ │ │ │ ├── calc.js │ │ │ │ ├── canvas-blending.js │ │ │ │ ├── canvas-text.js │ │ │ │ ├── canvas.js │ │ │ │ ├── ch-unit.js │ │ │ │ ├── chacha20-poly1305.js │ │ │ │ ├── channel-messaging.js │ │ │ │ ├── childnode-remove.js │ │ │ │ ├── classlist.js │ │ │ │ ├── client-hints-dpr-width-viewport.js │ │ │ │ ├── clipboard.js │ │ │ │ ├── colr-v1.js │ │ │ │ ├── colr.js │ │ │ │ ├── comparedocumentposition.js │ │ │ │ ├── console-basic.js │ │ │ │ ├── console-time.js │ │ │ │ ├── const.js │ │ │ │ ├── constraint-validation.js │ │ │ │ ├── contenteditable.js │ │ │ │ ├── contentsecuritypolicy.js │ │ │ │ ├── contentsecuritypolicy2.js │ │ │ │ ├── cookie-store-api.js │ │ │ │ ├── cors.js │ │ │ │ ├── createimagebitmap.js │ │ │ │ ├── credential-management.js │ │ │ │ ├── cryptography.js │ │ │ │ ├── css-all.js │ │ │ │ ├── css-animation.js │ │ │ │ ├── css-any-link.js │ │ │ │ ├── css-appearance.js │ │ │ │ ├── css-at-counter-style.js │ │ │ │ ├── css-autofill.js │ │ │ │ ├── css-backdrop-filter.js │ │ │ │ ├── css-background-offsets.js │ │ │ │ ├── css-backgroundblendmode.js │ │ │ │ ├── css-boxdecorationbreak.js │ │ │ │ ├── css-boxshadow.js │ │ │ │ ├── css-canvas.js │ │ │ │ ├── css-caret-color.js │ │ │ │ ├── css-cascade-layers.js │ │ │ │ ├── css-case-insensitive.js │ │ │ │ ├── css-clip-path.js │ │ │ │ ├── css-color-adjust.js │ │ │ │ ├── css-color-function.js │ │ │ │ ├── css-conic-gradients.js │ │ │ │ ├── css-container-queries.js │ │ │ │ ├── css-container-query-units.js │ │ │ │ ├── css-containment.js │ │ │ │ ├── css-content-visibility.js │ │ │ │ ├── css-counters.js │ │ │ │ ├── css-crisp-edges.js │ │ │ │ ├── css-cross-fade.js │ │ │ │ ├── css-default-pseudo.js │ │ │ │ ├── css-descendant-gtgt.js │ │ │ │ ├── css-deviceadaptation.js │ │ │ │ ├── css-dir-pseudo.js │ │ │ │ ├── css-display-contents.js │ │ │ │ ├── css-element-function.js │ │ │ │ ├── css-env-function.js │ │ │ │ ├── css-exclusions.js │ │ │ │ ├── css-featurequeries.js │ │ │ │ ├── css-file-selector-button.js │ │ │ │ ├── css-filter-function.js │ │ │ │ ├── css-filters.js │ │ │ │ ├── css-first-letter.js │ │ │ │ ├── css-first-line.js │ │ │ │ ├── css-fixed.js │ │ │ │ ├── css-focus-visible.js │ │ │ │ ├── css-focus-within.js │ │ │ │ ├── css-font-palette.js │ │ │ │ ├── css-font-rendering-controls.js │ │ │ │ ├── css-font-stretch.js │ │ │ │ ├── css-gencontent.js │ │ │ │ ├── css-gradients.js │ │ │ │ ├── css-grid-animation.js │ │ │ │ ├── css-grid.js │ │ │ │ ├── css-hanging-punctuation.js │ │ │ │ ├── css-has.js │ │ │ │ ├── css-hyphenate.js │ │ │ │ ├── css-hyphens.js │ │ │ │ ├── css-image-orientation.js │ │ │ │ ├── css-image-set.js │ │ │ │ ├── css-in-out-of-range.js │ │ │ │ ├── css-indeterminate-pseudo.js │ │ │ │ ├── css-initial-letter.js │ │ │ │ ├── css-initial-value.js │ │ │ │ ├── css-lch-lab.js │ │ │ │ ├── css-letter-spacing.js │ │ │ │ ├── css-line-clamp.js │ │ │ │ ├── css-logical-props.js │ │ │ │ ├── css-marker-pseudo.js │ │ │ │ ├── css-masks.js │ │ │ │ ├── css-matches-pseudo.js │ │ │ │ ├── css-math-functions.js │ │ │ │ ├── css-media-interaction.js │ │ │ │ ├── css-media-range-syntax.js │ │ │ │ ├── css-media-resolution.js │ │ │ │ ├── css-media-scripting.js │ │ │ │ ├── css-mediaqueries.js │ │ │ │ ├── css-mixblendmode.js │ │ │ │ ├── css-motion-paths.js │ │ │ │ ├── css-namespaces.js │ │ │ │ ├── css-nesting.js │ │ │ │ ├── css-not-sel-list.js │ │ │ │ ├── css-nth-child-of.js │ │ │ │ ├── css-opacity.js │ │ │ │ ├── css-optional-pseudo.js │ │ │ │ ├── css-overflow-anchor.js │ │ │ │ ├── css-overflow-overlay.js │ │ │ │ ├── css-overflow.js │ │ │ │ ├── css-overscroll-behavior.js │ │ │ │ ├── css-page-break.js │ │ │ │ ├── css-paged-media.js │ │ │ │ ├── css-paint-api.js │ │ │ │ ├── css-placeholder-shown.js │ │ │ │ ├── css-placeholder.js │ │ │ │ ├── css-print-color-adjust.js │ │ │ │ ├── css-read-only-write.js │ │ │ │ ├── css-rebeccapurple.js │ │ │ │ ├── css-reflections.js │ │ │ │ ├── css-regions.js │ │ │ │ ├── css-repeating-gradients.js │ │ │ │ ├── css-resize.js │ │ │ │ ├── css-revert-value.js │ │ │ │ ├── css-rrggbbaa.js │ │ │ │ ├── css-scroll-behavior.js │ │ │ │ ├── css-scroll-timeline.js │ │ │ │ ├── css-scrollbar.js │ │ │ │ ├── css-sel2.js │ │ │ │ ├── css-sel3.js │ │ │ │ ├── css-selection.js │ │ │ │ ├── css-shapes.js │ │ │ │ ├── css-snappoints.js │ │ │ │ ├── css-sticky.js │ │ │ │ ├── css-subgrid.js │ │ │ │ ├── css-supports-api.js │ │ │ │ ├── css-table.js │ │ │ │ ├── css-text-align-last.js │ │ │ │ ├── css-text-indent.js │ │ │ │ ├── css-text-justify.js │ │ │ │ ├── css-text-orientation.js │ │ │ │ ├── css-text-spacing.js │ │ │ │ ├── css-textshadow.js │ │ │ │ ├── css-touch-action-2.js │ │ │ │ ├── css-touch-action.js │ │ │ │ ├── css-transitions.js │ │ │ │ ├── css-unicode-bidi.js │ │ │ │ ├── css-unset-value.js │ │ │ │ ├── css-variables.js │ │ │ │ ├── css-when-else.js │ │ │ │ ├── css-widows-orphans.js │ │ │ │ ├── css-width-stretch.js │ │ │ │ ├── css-writing-mode.js │ │ │ │ ├── css-zoom.js │ │ │ │ ├── css3-attr.js │ │ │ │ ├── css3-boxsizing.js │ │ │ │ ├── css3-colors.js │ │ │ │ ├── css3-cursors-grab.js │ │ │ │ ├── css3-cursors-newer.js │ │ │ │ ├── css3-cursors.js │ │ │ │ ├── css3-tabsize.js │ │ │ │ ├── currentcolor.js │ │ │ │ ├── custom-elements.js │ │ │ │ ├── custom-elementsv1.js │ │ │ │ ├── customevent.js │ │ │ │ ├── datalist.js │ │ │ │ ├── dataset.js │ │ │ │ ├── datauri.js │ │ │ │ ├── date-tolocaledatestring.js │ │ │ │ ├── declarative-shadow-dom.js │ │ │ │ ├── decorators.js │ │ │ │ ├── details.js │ │ │ │ ├── deviceorientation.js │ │ │ │ ├── devicepixelratio.js │ │ │ │ ├── dialog.js │ │ │ │ ├── dispatchevent.js │ │ │ │ ├── dnssec.js │ │ │ │ ├── do-not-track.js │ │ │ │ ├── document-currentscript.js │ │ │ │ ├── document-evaluate-xpath.js │ │ │ │ ├── document-execcommand.js │ │ │ │ ├── document-policy.js │ │ │ │ ├── document-scrollingelement.js │ │ │ │ ├── documenthead.js │ │ │ │ ├── dom-manip-convenience.js │ │ │ │ ├── dom-range.js │ │ │ │ ├── domcontentloaded.js │ │ │ │ ├── domfocusin-domfocusout-events.js │ │ │ │ ├── dommatrix.js │ │ │ │ ├── download.js │ │ │ │ ├── dragndrop.js │ │ │ │ ├── element-closest.js │ │ │ │ ├── element-from-point.js │ │ │ │ ├── element-scroll-methods.js │ │ │ │ ├── eme.js │ │ │ │ ├── eot.js │ │ │ │ ├── es5.js │ │ │ │ ├── es6-class.js │ │ │ │ ├── es6-generators.js │ │ │ │ ├── es6-module-dynamic-import.js │ │ │ │ ├── es6-module.js │ │ │ │ ├── es6-number.js │ │ │ │ ├── es6-string-includes.js │ │ │ │ ├── es6.js │ │ │ │ ├── eventsource.js │ │ │ │ ├── extended-system-fonts.js │ │ │ │ ├── feature-policy.js │ │ │ │ ├── fetch.js │ │ │ │ ├── fieldset-disabled.js │ │ │ │ ├── fileapi.js │ │ │ │ ├── filereader.js │ │ │ │ ├── filereadersync.js │ │ │ │ ├── filesystem.js │ │ │ │ ├── flac.js │ │ │ │ ├── flexbox-gap.js │ │ │ │ ├── flexbox.js │ │ │ │ ├── flow-root.js │ │ │ │ ├── focusin-focusout-events.js │ │ │ │ ├── focusoptions-preventscroll.js │ │ │ │ ├── font-family-system-ui.js │ │ │ │ ├── font-feature.js │ │ │ │ ├── font-kerning.js │ │ │ │ ├── font-loading.js │ │ │ │ ├── font-metrics-overrides.js │ │ │ │ ├── font-size-adjust.js │ │ │ │ ├── font-smooth.js │ │ │ │ ├── font-unicode-range.js │ │ │ │ ├── font-variant-alternates.js │ │ │ │ ├── font-variant-numeric.js │ │ │ │ ├── fontface.js │ │ │ │ ├── form-attribute.js │ │ │ │ ├── form-submit-attributes.js │ │ │ │ ├── form-validation.js │ │ │ │ ├── forms.js │ │ │ │ ├── fullscreen.js │ │ │ │ ├── gamepad.js │ │ │ │ ├── geolocation.js │ │ │ │ ├── getboundingclientrect.js │ │ │ │ ├── getcomputedstyle.js │ │ │ │ ├── getelementsbyclassname.js │ │ │ │ ├── getrandomvalues.js │ │ │ │ ├── gyroscope.js │ │ │ │ ├── hardwareconcurrency.js │ │ │ │ ├── hashchange.js │ │ │ │ ├── heif.js │ │ │ │ ├── hevc.js │ │ │ │ ├── hidden.js │ │ │ │ ├── high-resolution-time.js │ │ │ │ ├── history.js │ │ │ │ ├── html-media-capture.js │ │ │ │ ├── html5semantic.js │ │ │ │ ├── http-live-streaming.js │ │ │ │ ├── http2.js │ │ │ │ ├── http3.js │ │ │ │ ├── iframe-sandbox.js │ │ │ │ ├── iframe-seamless.js │ │ │ │ ├── iframe-srcdoc.js │ │ │ │ ├── imagecapture.js │ │ │ │ ├── ime.js │ │ │ │ ├── img-naturalwidth-naturalheight.js │ │ │ │ ├── import-maps.js │ │ │ │ ├── imports.js │ │ │ │ ├── indeterminate-checkbox.js │ │ │ │ ├── indexeddb.js │ │ │ │ ├── indexeddb2.js │ │ │ │ ├── inline-block.js │ │ │ │ ├── innertext.js │ │ │ │ ├── input-autocomplete-onoff.js │ │ │ │ ├── input-color.js │ │ │ │ ├── input-datetime.js │ │ │ │ ├── input-email-tel-url.js │ │ │ │ ├── input-event.js │ │ │ │ ├── input-file-accept.js │ │ │ │ ├── input-file-directory.js │ │ │ │ ├── input-file-multiple.js │ │ │ │ ├── input-inputmode.js │ │ │ │ ├── input-minlength.js │ │ │ │ ├── input-number.js │ │ │ │ ├── input-pattern.js │ │ │ │ ├── input-placeholder.js │ │ │ │ ├── input-range.js │ │ │ │ ├── input-search.js │ │ │ │ ├── input-selection.js │ │ │ │ ├── insert-adjacent.js │ │ │ │ ├── insertadjacenthtml.js │ │ │ │ ├── internationalization.js │ │ │ │ ├── intersectionobserver-v2.js │ │ │ │ ├── intersectionobserver.js │ │ │ │ ├── intl-pluralrules.js │ │ │ │ ├── intrinsic-width.js │ │ │ │ ├── jpeg2000.js │ │ │ │ ├── jpegxl.js │ │ │ │ ├── jpegxr.js │ │ │ │ ├── js-regexp-lookbehind.js │ │ │ │ ├── json.js │ │ │ │ ├── justify-content-space-evenly.js │ │ │ │ ├── kerning-pairs-ligatures.js │ │ │ │ ├── keyboardevent-charcode.js │ │ │ │ ├── keyboardevent-code.js │ │ │ │ ├── keyboardevent-getmodifierstate.js │ │ │ │ ├── keyboardevent-key.js │ │ │ │ ├── keyboardevent-location.js │ │ │ │ ├── keyboardevent-which.js │ │ │ │ ├── lazyload.js │ │ │ │ ├── let.js │ │ │ │ ├── link-icon-png.js │ │ │ │ ├── link-icon-svg.js │ │ │ │ ├── link-rel-dns-prefetch.js │ │ │ │ ├── link-rel-modulepreload.js │ │ │ │ ├── link-rel-preconnect.js │ │ │ │ ├── link-rel-prefetch.js │ │ │ │ ├── link-rel-preload.js │ │ │ │ ├── link-rel-prerender.js │ │ │ │ ├── loading-lazy-attr.js │ │ │ │ ├── localecompare.js │ │ │ │ ├── magnetometer.js │ │ │ │ ├── matchesselector.js │ │ │ │ ├── matchmedia.js │ │ │ │ ├── mathml.js │ │ │ │ ├── maxlength.js │ │ │ │ ├── media-attribute.js │ │ │ │ ├── media-fragments.js │ │ │ │ ├── media-session-api.js │ │ │ │ ├── mediacapture-fromelement.js │ │ │ │ ├── mediarecorder.js │ │ │ │ ├── mediasource.js │ │ │ │ ├── menu.js │ │ │ │ ├── meta-theme-color.js │ │ │ │ ├── meter.js │ │ │ │ ├── midi.js │ │ │ │ ├── minmaxwh.js │ │ │ │ ├── mp3.js │ │ │ │ ├── mpeg-dash.js │ │ │ │ ├── mpeg4.js │ │ │ │ ├── multibackgrounds.js │ │ │ │ ├── multicolumn.js │ │ │ │ ├── mutation-events.js │ │ │ │ ├── mutationobserver.js │ │ │ │ ├── namevalue-storage.js │ │ │ │ ├── native-filesystem-api.js │ │ │ │ ├── nav-timing.js │ │ │ │ ├── navigator-language.js │ │ │ │ ├── netinfo.js │ │ │ │ ├── notifications.js │ │ │ │ ├── object-entries.js │ │ │ │ ├── object-fit.js │ │ │ │ ├── object-observe.js │ │ │ │ ├── object-values.js │ │ │ │ ├── objectrtc.js │ │ │ │ ├── offline-apps.js │ │ │ │ ├── offscreencanvas.js │ │ │ │ ├── ogg-vorbis.js │ │ │ │ ├── ogv.js │ │ │ │ ├── ol-reversed.js │ │ │ │ ├── once-event-listener.js │ │ │ │ ├── online-status.js │ │ │ │ ├── opus.js │ │ │ │ ├── orientation-sensor.js │ │ │ │ ├── outline.js │ │ │ │ ├── pad-start-end.js │ │ │ │ ├── page-transition-events.js │ │ │ │ ├── pagevisibility.js │ │ │ │ ├── passive-event-listener.js │ │ │ │ ├── passwordrules.js │ │ │ │ ├── path2d.js │ │ │ │ ├── payment-request.js │ │ │ │ ├── pdf-viewer.js │ │ │ │ ├── permissions-api.js │ │ │ │ ├── permissions-policy.js │ │ │ │ ├── picture-in-picture.js │ │ │ │ ├── picture.js │ │ │ │ ├── ping.js │ │ │ │ ├── png-alpha.js │ │ │ │ ├── pointer-events.js │ │ │ │ ├── pointer.js │ │ │ │ ├── pointerlock.js │ │ │ │ ├── portals.js │ │ │ │ ├── prefers-color-scheme.js │ │ │ │ ├── prefers-reduced-motion.js │ │ │ │ ├── private-class-fields.js │ │ │ │ ├── private-methods-and-accessors.js │ │ │ │ ├── progress.js │ │ │ │ ├── promise-finally.js │ │ │ │ ├── promises.js │ │ │ │ ├── proximity.js │ │ │ │ ├── proxy.js │ │ │ │ ├── public-class-fields.js │ │ │ │ ├── publickeypinning.js │ │ │ │ ├── push-api.js │ │ │ │ ├── queryselector.js │ │ │ │ ├── readonly-attr.js │ │ │ │ ├── referrer-policy.js │ │ │ │ ├── registerprotocolhandler.js │ │ │ │ ├── rel-noopener.js │ │ │ │ ├── rel-noreferrer.js │ │ │ │ ├── rellist.js │ │ │ │ ├── rem.js │ │ │ │ ├── requestanimationframe.js │ │ │ │ ├── requestidlecallback.js │ │ │ │ ├── resizeobserver.js │ │ │ │ ├── resource-timing.js │ │ │ │ ├── rest-parameters.js │ │ │ │ ├── rtcpeerconnection.js │ │ │ │ ├── ruby.js │ │ │ │ ├── run-in.js │ │ │ │ ├── same-site-cookie-attribute.js │ │ │ │ ├── screen-orientation.js │ │ │ │ ├── script-async.js │ │ │ │ ├── script-defer.js │ │ │ │ ├── scrollintoview.js │ │ │ │ ├── scrollintoviewifneeded.js │ │ │ │ ├── sdch.js │ │ │ │ ├── selection-api.js │ │ │ │ ├── server-timing.js │ │ │ │ ├── serviceworkers.js │ │ │ │ ├── setimmediate.js │ │ │ │ ├── sha-2.js │ │ │ │ ├── shadowdom.js │ │ │ │ ├── shadowdomv1.js │ │ │ │ ├── sharedarraybuffer.js │ │ │ │ ├── sharedworkers.js │ │ │ │ ├── sni.js │ │ │ │ ├── spdy.js │ │ │ │ ├── speech-recognition.js │ │ │ │ ├── speech-synthesis.js │ │ │ │ ├── spellcheck-attribute.js │ │ │ │ ├── sql-storage.js │ │ │ │ ├── srcset.js │ │ │ │ ├── stream.js │ │ │ │ ├── streams.js │ │ │ │ ├── stricttransportsecurity.js │ │ │ │ ├── style-scoped.js │ │ │ │ ├── subresource-integrity.js │ │ │ │ ├── svg-css.js │ │ │ │ ├── svg-filters.js │ │ │ │ ├── svg-fonts.js │ │ │ │ ├── svg-fragment.js │ │ │ │ ├── svg-html.js │ │ │ │ ├── svg-html5.js │ │ │ │ ├── svg-img.js │ │ │ │ ├── svg-smil.js │ │ │ │ ├── svg.js │ │ │ │ ├── sxg.js │ │ │ │ ├── tabindex-attr.js │ │ │ │ ├── template-literals.js │ │ │ │ ├── template.js │ │ │ │ ├── temporal.js │ │ │ │ ├── testfeat.js │ │ │ │ ├── text-decoration.js │ │ │ │ ├── text-emphasis.js │ │ │ │ ├── text-overflow.js │ │ │ │ ├── text-size-adjust.js │ │ │ │ ├── text-stroke.js │ │ │ │ ├── text-underline-offset.js │ │ │ │ ├── textcontent.js │ │ │ │ ├── textencoder.js │ │ │ │ ├── tls1-1.js │ │ │ │ ├── tls1-2.js │ │ │ │ ├── tls1-3.js │ │ │ │ ├── token-binding.js │ │ │ │ ├── touch.js │ │ │ │ ├── transforms2d.js │ │ │ │ ├── transforms3d.js │ │ │ │ ├── trusted-types.js │ │ │ │ ├── ttf.js │ │ │ │ ├── typedarrays.js │ │ │ │ ├── u2f.js │ │ │ │ ├── unhandledrejection.js │ │ │ │ ├── upgradeinsecurerequests.js │ │ │ │ ├── url-scroll-to-text-fragment.js │ │ │ │ ├── url.js │ │ │ │ ├── urlsearchparams.js │ │ │ │ ├── use-strict.js │ │ │ │ ├── user-select-none.js │ │ │ │ ├── user-timing.js │ │ │ │ ├── variable-fonts.js │ │ │ │ ├── vector-effect.js │ │ │ │ ├── vibration.js │ │ │ │ ├── video.js │ │ │ │ ├── videotracks.js │ │ │ │ ├── viewport-unit-variants.js │ │ │ │ ├── viewport-units.js │ │ │ │ ├── wai-aria.js │ │ │ │ ├── wake-lock.js │ │ │ │ ├── wasm.js │ │ │ │ ├── wav.js │ │ │ │ ├── wbr-element.js │ │ │ │ ├── web-animation.js │ │ │ │ ├── web-app-manifest.js │ │ │ │ ├── web-bluetooth.js │ │ │ │ ├── web-serial.js │ │ │ │ ├── web-share.js │ │ │ │ ├── webauthn.js │ │ │ │ ├── webgl.js │ │ │ │ ├── webgl2.js │ │ │ │ ├── webgpu.js │ │ │ │ ├── webhid.js │ │ │ │ ├── webkit-user-drag.js │ │ │ │ ├── webm.js │ │ │ │ ├── webnfc.js │ │ │ │ ├── webp.js │ │ │ │ ├── websockets.js │ │ │ │ ├── webtransport.js │ │ │ │ ├── webusb.js │ │ │ │ ├── webvr.js │ │ │ │ ├── webvtt.js │ │ │ │ ├── webworkers.js │ │ │ │ ├── webxr.js │ │ │ │ ├── will-change.js │ │ │ │ ├── woff.js │ │ │ │ ├── woff2.js │ │ │ │ ├── word-break.js │ │ │ │ ├── wordwrap.js │ │ │ │ ├── x-doc-messaging.js │ │ │ │ ├── x-frame-options.js │ │ │ │ ├── xhr2.js │ │ │ │ ├── xhtml.js │ │ │ │ ├── xhtmlsmil.js │ │ │ │ └── xml-serializer.js │ │ │ └── regions │ │ │ │ ├── AD.js │ │ │ │ ├── AE.js │ │ │ │ ├── AF.js │ │ │ │ ├── AG.js │ │ │ │ ├── AI.js │ │ │ │ ├── AL.js │ │ │ │ ├── AM.js │ │ │ │ ├── AO.js │ │ │ │ ├── AR.js │ │ │ │ ├── AS.js │ │ │ │ ├── AT.js │ │ │ │ ├── AU.js │ │ │ │ ├── AW.js │ │ │ │ ├── AX.js │ │ │ │ ├── AZ.js │ │ │ │ ├── BA.js │ │ │ │ ├── BB.js │ │ │ │ ├── BD.js │ │ │ │ ├── BE.js │ │ │ │ ├── BF.js │ │ │ │ ├── BG.js │ │ │ │ ├── BH.js │ │ │ │ ├── BI.js │ │ │ │ ├── BJ.js │ │ │ │ ├── BM.js │ │ │ │ ├── BN.js │ │ │ │ ├── BO.js │ │ │ │ ├── BR.js │ │ │ │ ├── BS.js │ │ │ │ ├── BT.js │ │ │ │ ├── BW.js │ │ │ │ ├── BY.js │ │ │ │ ├── BZ.js │ │ │ │ ├── CA.js │ │ │ │ ├── CD.js │ │ │ │ ├── CF.js │ │ │ │ ├── CG.js │ │ │ │ ├── CH.js │ │ │ │ ├── CI.js │ │ │ │ ├── CK.js │ │ │ │ ├── CL.js │ │ │ │ ├── CM.js │ │ │ │ ├── CN.js │ │ │ │ ├── CO.js │ │ │ │ ├── CR.js │ │ │ │ ├── CU.js │ │ │ │ ├── CV.js │ │ │ │ ├── CX.js │ │ │ │ ├── CY.js │ │ │ │ ├── CZ.js │ │ │ │ ├── DE.js │ │ │ │ ├── DJ.js │ │ │ │ ├── DK.js │ │ │ │ ├── DM.js │ │ │ │ ├── DO.js │ │ │ │ ├── DZ.js │ │ │ │ ├── EC.js │ │ │ │ ├── EE.js │ │ │ │ ├── EG.js │ │ │ │ ├── ER.js │ │ │ │ ├── ES.js │ │ │ │ ├── ET.js │ │ │ │ ├── FI.js │ │ │ │ ├── FJ.js │ │ │ │ ├── FK.js │ │ │ │ ├── FM.js │ │ │ │ ├── FO.js │ │ │ │ ├── FR.js │ │ │ │ ├── GA.js │ │ │ │ ├── GB.js │ │ │ │ ├── GD.js │ │ │ │ ├── GE.js │ │ │ │ ├── GF.js │ │ │ │ ├── GG.js │ │ │ │ ├── GH.js │ │ │ │ ├── GI.js │ │ │ │ ├── GL.js │ │ │ │ ├── GM.js │ │ │ │ ├── GN.js │ │ │ │ ├── GP.js │ │ │ │ ├── GQ.js │ │ │ │ ├── GR.js │ │ │ │ ├── GT.js │ │ │ │ ├── GU.js │ │ │ │ ├── GW.js │ │ │ │ ├── GY.js │ │ │ │ ├── HK.js │ │ │ │ ├── HN.js │ │ │ │ ├── HR.js │ │ │ │ ├── HT.js │ │ │ │ ├── HU.js │ │ │ │ ├── ID.js │ │ │ │ ├── IE.js │ │ │ │ ├── IL.js │ │ │ │ ├── IM.js │ │ │ │ ├── IN.js │ │ │ │ ├── IQ.js │ │ │ │ ├── IR.js │ │ │ │ ├── IS.js │ │ │ │ ├── IT.js │ │ │ │ ├── JE.js │ │ │ │ ├── JM.js │ │ │ │ ├── JO.js │ │ │ │ ├── JP.js │ │ │ │ ├── KE.js │ │ │ │ ├── KG.js │ │ │ │ ├── KH.js │ │ │ │ ├── KI.js │ │ │ │ ├── KM.js │ │ │ │ ├── KN.js │ │ │ │ ├── KP.js │ │ │ │ ├── KR.js │ │ │ │ ├── KW.js │ │ │ │ ├── KY.js │ │ │ │ ├── KZ.js │ │ │ │ ├── LA.js │ │ │ │ ├── LB.js │ │ │ │ ├── LC.js │ │ │ │ ├── LI.js │ │ │ │ ├── LK.js │ │ │ │ ├── LR.js │ │ │ │ ├── LS.js │ │ │ │ ├── LT.js │ │ │ │ ├── LU.js │ │ │ │ ├── LV.js │ │ │ │ ├── LY.js │ │ │ │ ├── MA.js │ │ │ │ ├── MC.js │ │ │ │ ├── MD.js │ │ │ │ ├── ME.js │ │ │ │ ├── MG.js │ │ │ │ ├── MH.js │ │ │ │ ├── MK.js │ │ │ │ ├── ML.js │ │ │ │ ├── MM.js │ │ │ │ ├── MN.js │ │ │ │ ├── MO.js │ │ │ │ ├── MP.js │ │ │ │ ├── MQ.js │ │ │ │ ├── MR.js │ │ │ │ ├── MS.js │ │ │ │ ├── MT.js │ │ │ │ ├── MU.js │ │ │ │ ├── MV.js │ │ │ │ ├── MW.js │ │ │ │ ├── MX.js │ │ │ │ ├── MY.js │ │ │ │ ├── MZ.js │ │ │ │ ├── NA.js │ │ │ │ ├── NC.js │ │ │ │ ├── NE.js │ │ │ │ ├── NF.js │ │ │ │ ├── NG.js │ │ │ │ ├── NI.js │ │ │ │ ├── NL.js │ │ │ │ ├── NO.js │ │ │ │ ├── NP.js │ │ │ │ ├── NR.js │ │ │ │ ├── NU.js │ │ │ │ ├── NZ.js │ │ │ │ ├── OM.js │ │ │ │ ├── PA.js │ │ │ │ ├── PE.js │ │ │ │ ├── PF.js │ │ │ │ ├── PG.js │ │ │ │ ├── PH.js │ │ │ │ ├── PK.js │ │ │ │ ├── PL.js │ │ │ │ ├── PM.js │ │ │ │ ├── PN.js │ │ │ │ ├── PR.js │ │ │ │ ├── PS.js │ │ │ │ ├── PT.js │ │ │ │ ├── PW.js │ │ │ │ ├── PY.js │ │ │ │ ├── QA.js │ │ │ │ ├── RE.js │ │ │ │ ├── RO.js │ │ │ │ ├── RS.js │ │ │ │ ├── RU.js │ │ │ │ ├── RW.js │ │ │ │ ├── SA.js │ │ │ │ ├── SB.js │ │ │ │ ├── SC.js │ │ │ │ ├── SD.js │ │ │ │ ├── SE.js │ │ │ │ ├── SG.js │ │ │ │ ├── SH.js │ │ │ │ ├── SI.js │ │ │ │ ├── SK.js │ │ │ │ ├── SL.js │ │ │ │ ├── SM.js │ │ │ │ ├── SN.js │ │ │ │ ├── SO.js │ │ │ │ ├── SR.js │ │ │ │ ├── ST.js │ │ │ │ ├── SV.js │ │ │ │ ├── SY.js │ │ │ │ ├── SZ.js │ │ │ │ ├── TC.js │ │ │ │ ├── TD.js │ │ │ │ ├── TG.js │ │ │ │ ├── TH.js │ │ │ │ ├── TJ.js │ │ │ │ ├── TK.js │ │ │ │ ├── TL.js │ │ │ │ ├── TM.js │ │ │ │ ├── TN.js │ │ │ │ ├── TO.js │ │ │ │ ├── TR.js │ │ │ │ ├── TT.js │ │ │ │ ├── TV.js │ │ │ │ ├── TW.js │ │ │ │ ├── TZ.js │ │ │ │ ├── UA.js │ │ │ │ ├── UG.js │ │ │ │ ├── US.js │ │ │ │ ├── UY.js │ │ │ │ ├── UZ.js │ │ │ │ ├── VA.js │ │ │ │ ├── VC.js │ │ │ │ ├── VE.js │ │ │ │ ├── VG.js │ │ │ │ ├── VI.js │ │ │ │ ├── VN.js │ │ │ │ ├── VU.js │ │ │ │ ├── WF.js │ │ │ │ ├── WS.js │ │ │ │ ├── YE.js │ │ │ │ ├── YT.js │ │ │ │ ├── ZA.js │ │ │ │ ├── ZM.js │ │ │ │ ├── ZW.js │ │ │ │ ├── alt-af.js │ │ │ │ ├── alt-an.js │ │ │ │ ├── alt-as.js │ │ │ │ ├── alt-eu.js │ │ │ │ ├── alt-na.js │ │ │ │ ├── alt-oc.js │ │ │ │ ├── alt-sa.js │ │ │ │ └── alt-ww.js │ │ └── package.json │ ├── chalk │ │ ├── index.js │ │ ├── index.js.flow │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ ├── templates.js │ │ └── types │ │ │ └── index.d.ts │ ├── chokidar │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── types │ │ │ └── index.d.ts │ ├── color-convert │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── conversions.js │ │ ├── index.js │ │ ├── package.json │ │ └── route.js │ ├── color-name │ │ ├── .eslintrc.json │ │ ├── .npmignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── test.js │ ├── commander │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ ├── index.js │ │ ├── package.json │ │ └── typings │ │ │ └── index.d.ts │ ├── concat-map │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.markdown │ │ ├── example │ │ │ └── map.js │ │ ├── index.js │ │ ├── package.json │ │ └── test │ │ │ └── map.js │ ├── convert-source-map │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── debug │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── src │ │ │ ├── browser.js │ │ │ ├── common.js │ │ │ ├── index.js │ │ │ └── node.js │ ├── electron-to-chromium │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── chromium-versions.js │ │ ├── chromium-versions.json │ │ ├── full-chromium-versions.js │ │ ├── full-chromium-versions.json │ │ ├── full-versions.js │ │ ├── full-versions.json │ │ ├── index.js │ │ ├── package.json │ │ ├── versions.js │ │ └── versions.json │ ├── escalade │ │ ├── index.d.ts │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ └── sync │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.mjs │ ├── escape-string-regexp │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── fill-range │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── fs-readdir-recursive │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── fs.realpath │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── old.js │ │ └── package.json │ ├── fsevents │ │ ├── LICENSE │ │ ├── README.md │ │ ├── fsevents.d.ts │ │ ├── fsevents.js │ │ ├── fsevents.node │ │ └── package.json │ ├── gensync │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ ├── index.js.flow │ │ ├── package.json │ │ └── test │ │ │ ├── .babelrc │ │ │ └── index.test.js │ ├── glob-parent │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── glob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── common.js │ │ ├── glob.js │ │ ├── package.json │ │ └── sync.js │ ├── globals │ │ ├── globals.json │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── has-flag │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── inflight │ │ ├── LICENSE │ │ ├── README.md │ │ ├── inflight.js │ │ └── package.json │ ├── inherits │ │ ├── LICENSE │ │ ├── README.md │ │ ├── inherits.js │ │ ├── inherits_browser.js │ │ └── package.json │ ├── is-binary-path │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── is-extglob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── is-glob │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── is-number │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── js-tokens │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── jsesc │ │ ├── LICENSE-MIT.txt │ │ ├── README.md │ │ ├── bin │ │ │ └── jsesc │ │ ├── jsesc.js │ │ ├── man │ │ │ └── jsesc.1 │ │ └── package.json │ ├── json5 │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── package.json │ ├── make-dir │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── node_modules │ │ │ ├── .bin │ │ │ │ └── semver │ │ │ └── semver │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── bin │ │ │ │ └── semver │ │ │ │ ├── package.json │ │ │ │ ├── range.bnf │ │ │ │ └── semver.js │ │ ├── package.json │ │ └── readme.md │ ├── minimatch │ │ ├── LICENSE │ │ ├── README.md │ │ ├── minimatch.js │ │ └── package.json │ ├── ms │ │ ├── index.js │ │ ├── license.md │ │ ├── package.json │ │ └── readme.md │ ├── node-releases │ │ ├── LICENSE │ │ ├── README.md │ │ ├── data │ │ │ ├── processed │ │ │ │ └── envs.json │ │ │ └── release-schedule │ │ │ │ └── release-schedule.json │ │ └── package.json │ ├── normalize-path │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── once │ │ ├── LICENSE │ │ ├── README.md │ │ ├── once.js │ │ └── package.json │ ├── path-is-absolute │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── picocolors │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── picocolors.browser.js │ │ ├── picocolors.d.ts │ │ ├── picocolors.js │ │ └── types.ts │ ├── picomatch │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── pify │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── readdirp │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── safe-buffer │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ ├── semver │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin │ │ │ └── semver.js │ │ ├── package.json │ │ ├── range.bnf │ │ └── semver.js │ ├── slash │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── supports-color │ │ ├── browser.js │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── to-fast-properties │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── to-regex-range │ │ ├── LICENSE │ │ ├── README.md │ │ ├── index.js │ │ └── package.json │ ├── update-browserslist-db │ │ ├── LICENSE │ │ ├── README.md │ │ ├── check-npm-version.js │ │ ├── cli.js │ │ ├── index.d.ts │ │ ├── index.js │ │ └── package.json │ └── wrappy │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── wrappy.js ├── package-lock.json ├── package.json └── rm_dead_functions.js ├── 2022-08-31-running-stable-diffusion-on-vultr └── sd_gen.py ├── 2022-09-04-curl-beyond-the-basics └── example.c ├── 2022-10-08-javascript-ast-manipulation-with-babel-defeating-string-array-mapping ├── deobfuscate.js ├── obfuscated.js └── orig.js ├── 2022-10-09-making-heuristics-smarter-with-gpt3 └── example.py ├── 2022-10-12-scraping-legacy-asp-net-site-with-scrapy-a-real-example ├── claytonspider.py ├── items.py └── parallelise.py ├── 2022-12-26-scrapy-simplified-developing-a-single-file-web-scraper └── f500.py ├── 2023-01-14-scraping-yahoo-finance-with-python ├── summary.py └── timeseries.py ├── 2023-01-15-understanding-python-generators-for-scraping-and-automation └── hn_posts.py ├── 2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development ├── deobfuscate.js ├── deobfuscate2.js ├── input.js ├── output.js ├── plugin_rm_empty.js ├── plugin_unbracket.js └── plugin_unhex.js ├── 2023-01-23-javascript-ast-manipulation-with-babel-3-ways-to-create-nodes-with-subtrees ├── instantiate.js └── templ.js ├── 2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion ├── 1.js ├── 2.js ├── 3.js ├── 4.js ├── 5.js ├── 6.js ├── 7.js └── 8.js ├── 2023-01-30-javascript-ast-manipulation-with-babel-ast-modification-apis ├── say_abc.js ├── transform.js └── transformed.js ├── 2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation ├── ast_explorer_constfold.js ├── ast_explorer_constprop.js ├── ast_explorer_unhex.js ├── constfolded.js ├── constpropagated.js ├── input.js ├── input2.js ├── obfuscated.js └── unhexed.js ├── 2023-02-13-javascript-ast-manipulation-with-babel-reducing-indirection-undoing-string-concealing ├── in.js ├── obfuscated0.js ├── obfuscated1.js ├── obfuscated2.js ├── obfuscated3.js ├── obfuscated4.js ├── out.js ├── transform1.js ├── transform2.js ├── transform3.js ├── transform4.js └── transform5.js ├── 2023-02-18-javascript-ast-manipulation-with-babel-reducing-nestedness-unflattening-the-cfg ├── in.js ├── obfuscated0.js ├── obfuscated1.js ├── obfuscated2.js ├── obfuscated3.js ├── obfuscated4.js ├── obfuscated5.js ├── out.js ├── transform1.js ├── transform2.js ├── transform3.js ├── transform4.js ├── transform5.js └── transform6.js ├── 2023-02-24-dont-jsfuck-with-me-part-1 └── ast_transform.js ├── 2023-03-14-dont-jsfuck-with-me-part-2 ├── ast_explorer_simplify_string_name.js ├── ast_explorer_undo_boolean_trick.js ├── ast_explorer_undo_concat_trick.js ├── ast_explorer_undo_entries_trick.js ├── ast_explorer_undo_flat_trick.js ├── ast_explorer_undo_fontcolor_trick.js ├── ast_explorer_undo_function_date_trick.js ├── ast_explorer_undo_function_escape_trick.js ├── ast_explorer_undo_italics_trick.js ├── ast_explorer_undo_number_to_string_trick.js ├── ast_explorer_undo_object_tostring_call_trick.js ├── ast_explorer_undo_regexp_trick.js ├── ast_explorer_undo_slice_trick.js ├── ast_explorer_undo_string_contructor_trick.js ├── ast_explorer_undo_string_trick.js └── ast_explorer_undo_tostring_hack.js ├── 2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy ├── sample │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ │ ├── __init__.py │ │ └── books.py └── scrapy.cfg ├── 2023-05-15-scraping-product-data-from-nike ├── nike │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ │ ├── __init__.py │ │ └── nikecom.py └── scrapy.cfg ├── 2023-05-30-understanding-javascript-packers ├── eval_unescape.js ├── helloworld.js ├── packed.js └── packed_pretty.js ├── 2023-06-25-dont-jsfuck-with-me-part-3 ├── ast_constructor_str.js ├── ast_eval_return_fncall.js ├── ast_eval_return_str.js ├── ast_explorer_fix_eval.js ├── ast_explorer_undo_entries_trick_v2.js ├── ast_refactor_regex_constr.js ├── ast_regex_str.js ├── ast_simplify_false_regex.js ├── ast_string_array_join.js ├── ast_string_constructor_name.js ├── ast_string_split.js ├── ast_undo_escape_call.js └── jsfuck_deobfuscator │ ├── app.js │ ├── debug.js │ ├── examples │ ├── in1.js │ ├── in2.js │ ├── in3.js │ ├── in4.js │ ├── in5.js │ ├── out1.js │ ├── out2.js │ ├── out3.js │ └── out4.js │ ├── package-lock.json │ ├── package.json │ ├── plugin_constructor_str.js │ ├── plugin_eval_expr.js │ ├── plugin_eval_program.js │ ├── plugin_eval_return_fncall.js │ ├── plugin_eval_return_str.js │ ├── plugin_fix_eval.js │ ├── plugin_refactor_regex_constr.js │ ├── plugin_regex_str.js │ ├── plugin_simplify_false_regex.js │ ├── plugin_simplify_string_name.js │ ├── plugin_string_array_join.js │ ├── plugin_string_constructor_name.js │ ├── plugin_string_split.js │ ├── plugin_undo_boolean_trick.js │ ├── plugin_undo_concat_trick.js │ ├── plugin_undo_entries_trick.js │ ├── plugin_undo_escape_call.js │ ├── plugin_undo_flat_trick.js │ ├── plugin_undo_fontcolor_trick.js │ ├── plugin_undo_function_date_trick.js │ ├── plugin_undo_function_escape_trick.js │ ├── plugin_undo_italics_trick.js │ ├── plugin_undo_number_tostring_trick.js │ ├── plugin_undo_object_tostring_trick.js │ ├── plugin_undo_regexp_trick.js │ ├── plugin_undo_slice_trick.js │ └── plugin_undo_string_trick.js ├── 2023-06-27-abusing-ahrefs-backlink-checker └── ahrefs_hax.py ├── 2023-07-02-self-defending-js-code-and-debugger-traps ├── antidebug.js ├── self_defending.js ├── self_defending_edited.js └── unprotected.js ├── 2023-07-22-using-scrapy-playwright-for-integrating-browser-automation-with-scrapy ├── kw_checker.py └── requirements.txt ├── 2023-08-12-scrapy-by-example-scraping-company-data-from-yelp ├── recon │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── settings.py │ └── spiders │ │ ├── __init__.py │ │ └── yelp.py └── scrapy.cfg ├── 2023-08-14-abusing-goat-mobile-api-for-data-scraping └── scrape.py ├── 2023-09-15-solving-a-simple-js-challenge-with-sandboxing ├── in.js ├── output.js ├── sandbox.js ├── transform.js └── trick.sh ├── 2023-09-22-parsing-html-documents-with-beautifulsoup └── test.html ├── 2023-10-16-extracting-data-from-elasticsearch └── api_scrape.py ├── 2023-11-05-scraping-data-from-google-places-api ├── gplaces.ini ├── gplaces.py └── requirements.txt ├── 2023-12-27-retrospective-scraping-of-historical-data-from-internet-archive-snapshots ├── iowa_doc_history.py └── recover_timestamp.ipynb ├── 2024-02-04-ssh-tips-and-tricks └── paramiko_example.py ├── 2024-04-12-scraping-clutch-for-b2b-company-data ├── 1_clutch_lists.py ├── 2_clutch_pages.py ├── 3_merge.py ├── get_cookies.py ├── get_cookies_sync.py └── tls_session.py ├── 2024-10-01-katana-web-crawler-for-offensive-security-and-web-exploration ├── field-config.yaml ├── go.mod └── main.go └── README.md /2021-11-26-introducing-gpt3/api_example.py: -------------------------------------------------------------------------------- 1 | import os 2 | import openai 3 | 4 | openai.api_key = os.getenv("OPENAI_API_KEY") 5 | 6 | response = openai.Completion.create( 7 | engine="davinci-instruct-beta-v3", 8 | prompt="Write a Python script that takes a list of integers via standard input and prints a sum of them", 9 | temperature=0.7, 10 | max_tokens=64, 11 | top_p=1, 12 | frequency_penalty=0, 13 | presence_penalty=0 14 | ) 15 | -------------------------------------------------------------------------------- /2021-12-04-sending-mass-dms-on-reddit-through-api/extract_usernames.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cat posts.csv | tail -n +2 | awk -F "," '{ print $2 }' | sort | uniq > users.txt 4 | -------------------------------------------------------------------------------- /2021-12-12-using-ephemeral-onion-services-for-quick-nat-traversal/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:11 2 | 3 | RUN apt-get update && apt-get install -y python3 python3-pip hugo tor 4 | RUN pip3 install stem 5 | 6 | ADD . /trickster.dev 7 | WORKDIR /trickster.dev 8 | 9 | ENTRYPOINT bash -c "tor --RunAsDaemon 1 --ControlPort 9051 && python3 run_onion_service.py" 10 | 11 | -------------------------------------------------------------------------------- /2022-02-13-introduction-to-scrapy-framework/books_to_scrape/books_to_scrape/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-02-13-introduction-to-scrapy-framework/books_to_scrape/books_to_scrape/__init__.py -------------------------------------------------------------------------------- /2022-02-13-introduction-to-scrapy-framework/books_to_scrape/books_to_scrape/items.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your scraped items 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/items.html 5 | 6 | import scrapy 7 | 8 | class Book(scrapy.Item): 9 | title = scrapy.Field() 10 | upc = scrapy.Field() 11 | description = scrapy.Field() 12 | price_excl_tax = scrapy.Field() 13 | price_incl_tax = scrapy.Field() 14 | availability = scrapy.Field() 15 | n_reviews = scrapy.Field() 16 | -------------------------------------------------------------------------------- /2022-02-13-introduction-to-scrapy-framework/books_to_scrape/books_to_scrape/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /2022-02-13-introduction-to-scrapy-framework/books_to_scrape/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = books_to_scrape.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = books_to_scrape 12 | -------------------------------------------------------------------------------- /2022-03-09-sending-notifications-programmatically/phonecall.twiml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Data center is on fire! 4 | 5 | -------------------------------------------------------------------------------- /2022-03-09-sending-notifications-programmatically/smtplib_examply.py: -------------------------------------------------------------------------------- 1 | import smtplib 2 | 3 | def prompt(prompt): 4 | return input(prompt).strip() 5 | 6 | fromaddr = prompt("From: ") 7 | toaddrs = prompt("To: ").split() 8 | print("Enter message, end with ^D (Unix) or ^Z (Windows):") 9 | 10 | # Add the From: and To: headers at the start! 11 | msg = ("From: %s\r\nTo: %s\r\n\r\n" 12 | % (fromaddr, ", ".join(toaddrs))) 13 | while True: 14 | try: 15 | line = input() 16 | except EOFError: 17 | break 18 | if not line: 19 | break 20 | msg = msg + line 21 | 22 | print("Message length is", len(msg)) 23 | 24 | server = smtplib.SMTP('localhost') 25 | server.set_debuglevel(1) 26 | server.sendmail(fromaddr, toaddrs, msg) 27 | server.quit() 28 | -------------------------------------------------------------------------------- /2022-03-09-sending-notifications-programmatically/twilio_sms.py: -------------------------------------------------------------------------------- 1 | from twilio.rest import Client 2 | 3 | account_sid = "[REDACTED]" 4 | auth_token = "[REDACTED]" 5 | client = Client(account_sid, auth_token) 6 | 7 | message = client.messages.create(body="Hello there!", from_='[REDACTED]', to='[REDACTED]') 8 | -------------------------------------------------------------------------------- /2022-03-20-decrypting-your-own-https-traffic-with-wireshark/tlskeylogger.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Label 6 | sslkeylogger 7 | ProgramArguments 8 | 9 | sh 10 | -c 11 | 12 | launchctl setenv SSLKEYLOGFILE ~/.sslkeyfile 13 | 14 | 15 | RunAtLoad 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /2022-03-25-reproducible-linux-environments-with-vagrant-and-terraform/Vagrantfile: -------------------------------------------------------------------------------- 1 | Vagrant.configure("2") do |config| 2 | config.vm.box = "generic/debian11" 3 | config.vm.network "forwarded_port", guest: 5678, host: 5678 4 | config.vm.synced_folder ".", "/vagrant" 5 | config.vm.provision "shell", path: "provision.sh" 6 | end 7 | -------------------------------------------------------------------------------- /2022-03-25-reproducible-linux-environments-with-vagrant-and-terraform/main.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | digitalocean = { 4 | source = "digitalocean/digitalocean" 5 | version = "~> 2.0" 6 | } 7 | } 8 | } 9 | 10 | provider "digitalocean" { 11 | token = file("do_token.txt") 12 | } 13 | 14 | resource "digitalocean_droplet" "n8n" { 15 | image = "debian-11-x64" 16 | name = "n8n" 17 | region = "sfo3" 18 | size = "s-1vcpu-1gb" 19 | user_data = file("provision.sh") 20 | ssh_keys = ["[REDACTED]"] 21 | } 22 | 23 | output "server_ip" { 24 | value = resource.digitalocean_droplet.n8n.ipv4_address 25 | } 26 | 27 | -------------------------------------------------------------------------------- /2022-03-25-reproducible-linux-environments-with-vagrant-and-terraform/provision.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | 5 | apt-get update 6 | 7 | curl -fsSL https://deb.nodesource.com/setup_17.x -o /tmp/install_node.sh 8 | bash /tmp/install_node.sh 9 | apt-get install -y gcc g++ make nodejs 10 | 11 | curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null 12 | echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list 13 | apt-get update 14 | apt-get install -y yarn 15 | 16 | npm install n8n -g 17 | npm install pm2 -g 18 | 19 | pm2 start n8n 20 | pm2 startup 21 | pm2 save 22 | -------------------------------------------------------------------------------- /2022-03-26-running-gui-apps-within-docker-containers/1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | RUN apt-get update && apt-get install -y firefox x11vnc xvfb 3 | RUN echo "exec firefox" > ~/.xinitrc && chmod +x ~/.xinitrc 4 | CMD ["x11vnc", "-create", "-noxrecord", "-noxfixes", "-noxdamage", "-forever", "-passwd", "trustno1"] 5 | -------------------------------------------------------------------------------- /2022-03-26-running-gui-apps-within-docker-containers/2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | RUN apt-get update && apt-get install -y libxext-dev libxrender-dev libxtst-dev firefox 3 | CMD firefox 4 | -------------------------------------------------------------------------------- /2022-03-26-running-gui-apps-within-docker-containers/2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | firefox: 4 | image: firefox 5 | environment: 6 | - DISPLAY=novnc:0 7 | depends_on: 8 | - novnc 9 | networks: 10 | - x11 11 | novnc: 12 | image: theasp/novnc:latest 13 | environment: 14 | # Adjust to your screen size 15 | - DISPLAY_WIDTH=1600 16 | - DISPLAY_HEIGHT=968 17 | - RUN_XTERM=no 18 | ports: 19 | - "8080:8080" 20 | networks: 21 | - x11 22 | networks: 23 | x11: 24 | -------------------------------------------------------------------------------- /2022-04-02-smtp-enumeration-for-fun-and-profit.md/basic_wordlist.txt: -------------------------------------------------------------------------------- 1 | abuse 2 | noc 3 | security 4 | postmaster 5 | hostmaster 6 | usenet 7 | news 8 | webmaster 9 | www 10 | uucp 11 | ftp 12 | support 13 | info 14 | sales 15 | -------------------------------------------------------------------------------- /2022-04-19-compiling-python-programs-with-pyinstaller/images/bitcoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-04-19-compiling-python-programs-with-pyinstaller/images/bitcoin.png -------------------------------------------------------------------------------- /2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt/books_to_scrape/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3-slim 2 | 3 | RUN pip3 install scrapy scrapyrt 4 | 5 | RUN mkdir /books_to_scrape 6 | ADD . /books_to_scrape 7 | WORKDIR /books_to_scrape 8 | 9 | EXPOSE 9080 10 | 11 | ENTRYPOINT ["scrapyrt", "-i", "0.0.0.0"] 12 | -------------------------------------------------------------------------------- /2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt/books_to_scrape/books_to_scrape/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt/books_to_scrape/books_to_scrape/__init__.py -------------------------------------------------------------------------------- /2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt/books_to_scrape/books_to_scrape/items.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your scraped items 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/items.html 5 | 6 | import scrapy 7 | 8 | class Book(scrapy.Item): 9 | title = scrapy.Field() 10 | upc = scrapy.Field() 11 | description = scrapy.Field() 12 | price_excl_tax = scrapy.Field() 13 | price_incl_tax = scrapy.Field() 14 | availability = scrapy.Field() 15 | n_reviews = scrapy.Field() 16 | -------------------------------------------------------------------------------- /2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt/books_to_scrape/books_to_scrape/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /2022-06-04-turning-scrapy-spider-into-api-with-scrapyrt/books_to_scrape/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = books_to_scrape.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = books_to_scrape 12 | -------------------------------------------------------------------------------- /2022-06-15-understanding-abstract-syntax-trees/hello.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int argc, char **argv) { 4 | (void)argc; 5 | (void)argv; 6 | 7 | printf("Hello, world!\n"); 8 | 9 | return 0; 10 | } 11 | -------------------------------------------------------------------------------- /2022-06-15-understanding-abstract-syntax-trees/hello.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | def main(): 4 | print("Hello world") 5 | 6 | if __name__ == "__main__": 7 | main() 8 | -------------------------------------------------------------------------------- /2022-07-02-how-to-scrape-zillow-with-python-and-scrapy/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = zillow.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = zillow 12 | -------------------------------------------------------------------------------- /2022-07-02-how-to-scrape-zillow-with-python-and-scrapy/zillow/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-07-02-how-to-scrape-zillow-with-python-and-scrapy/zillow/__init__.py -------------------------------------------------------------------------------- /2022-07-02-how-to-scrape-zillow-with-python-and-scrapy/zillow/pipelines.py: -------------------------------------------------------------------------------- 1 | # Define your item pipelines here 2 | # 3 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 4 | # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html 5 | 6 | 7 | # useful for handling different item types with a single interface 8 | from itemadapter import ItemAdapter 9 | 10 | 11 | class ZillowPipeline: 12 | def process_item(self, item, spider): 13 | return item 14 | -------------------------------------------------------------------------------- /2022-07-02-how-to-scrape-zillow-with-python-and-scrapy/zillow/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/compress.js: -------------------------------------------------------------------------------- 1 | (function(){fetch('https://news.ycombinator.com/',{'headers':{'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','accept-language':'en-GB,en-US;q=0.9,en;q=0.8','sec-ch-ua':'".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"','sec-ch-ua-mobile':'?0','sec-ch-ua-platform':'"macOS"','sec-fetch-dest':'document','sec-fetch-mode':'navigate','sec-fetch-site':'none','sec-fetch-user':'?1','upgrade-insecure-requests':'1'},'referrerPolicy':'strict-origin-when-cross-origin','body':null,'method':'GET'});}()) -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/hello.js: -------------------------------------------------------------------------------- 1 | console.log("Hello, world! " + 123); -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/hello2.js: -------------------------------------------------------------------------------- 1 | let oneTwoThree = 123; 2 | let hello = "Hello, world! "; 3 | console.log(hello + oneTwoThree); 4 | -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/hexstring.js: -------------------------------------------------------------------------------- 1 | console["\x6C\x6F\x67"]("\x48\x65\x6C\x6C\x6F\x2C\x20\x77\x6F\x72\x6C\x64\x21\x20"+ 123) 2 | -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/identifiers.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | var a = [ 3 | 'log', 4 | 'Hello, world! ', 5 | 123 6 | ]; 7 | console[a[0]](a[1] + a[2]); 8 | }()) -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/mangling.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | var a = 123; 3 | var b = 'Hello, world! '; 4 | console.log(b + a); 5 | }()) -------------------------------------------------------------------------------- /2022-07-10-javascript-obfuscation-techniques-by-example/stringarray.js: -------------------------------------------------------------------------------- 1 | var _0x8b75=["Hello, world! ","log"];console[_0x8b75[1]](_0x8b75[0]+ 123) 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/brackets.js: -------------------------------------------------------------------------------- 1 | console.log("AAA"); 2 | console["log"]("AAA"); 3 | 4 | let o = {}; 5 | o["a"] = 42; 6 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/clean2.js: -------------------------------------------------------------------------------- 1 | console.log("AAA"); 2 | console.log("AAA"); 3 | let o = {}; 4 | o["a"] = 42; -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/clean3.js: -------------------------------------------------------------------------------- 1 | console.log("123"); -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/babel: -------------------------------------------------------------------------------- 1 | ../@babel/cli/bin/babel.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/babel-external-helpers: -------------------------------------------------------------------------------- 1 | ../@babel/cli/bin/babel-external-helpers.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/browserslist: -------------------------------------------------------------------------------- 1 | ../browserslist/cli.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/browserslist-lint: -------------------------------------------------------------------------------- 1 | ../update-browserslist-db/cli.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/jsesc: -------------------------------------------------------------------------------- 1 | ../jsesc/bin/jsesc -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/json5: -------------------------------------------------------------------------------- 1 | ../json5/lib/cli.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/parser: -------------------------------------------------------------------------------- 1 | ../@babel/parser/bin/babel-parser.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/.bin/semver: -------------------------------------------------------------------------------- 1 | ../semver/bin/semver.js -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/cli/README.md: -------------------------------------------------------------------------------- 1 | # @babel/cli 2 | 3 | > Babel command line. 4 | 5 | See our website [@babel/cli](https://babeljs.io/docs/en/babel-cli) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20cli%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/cli 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/cli --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/cli/bin/babel-external-helpers.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("../lib/babel-external-helpers"); 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/cli/bin/babel.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("../lib/babel"); 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/cli/index.js: -------------------------------------------------------------------------------- 1 | throw new Error("Use the `@babel/core` package instead of `@babel/cli`."); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/code-frame/README.md: -------------------------------------------------------------------------------- 1 | # @babel/code-frame 2 | 3 | > Generate errors that contain a code frame that point to source locations. 4 | 5 | See our website [@babel/code-frame](https://babeljs.io/docs/en/babel-code-frame) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/code-frame 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/code-frame --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/README.md: -------------------------------------------------------------------------------- 1 | # @babel/compat-data 2 | 3 | > 4 | 5 | See our website [@babel/compat-data](https://babeljs.io/docs/en/babel-compat-data) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/compat-data 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/compat-data 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/corejs2-built-ins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/corejs2-built-ins.json"); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/corejs3-shipped-proposals.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/corejs3-shipped-proposals.json"); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json: -------------------------------------------------------------------------------- 1 | [ 2 | "esnext.global-this", 3 | "esnext.promise.all-settled", 4 | "esnext.string.match-all" 5 | ] 6 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/data/native-modules.json: -------------------------------------------------------------------------------- 1 | { 2 | "es6.module": { 3 | "chrome": "61", 4 | "and_chr": "61", 5 | "edge": "16", 6 | "firefox": "60", 7 | "and_ff": "60", 8 | "node": "13.2.0", 9 | "opera": "48", 10 | "op_mob": "48", 11 | "safari": "10.1", 12 | "ios": "10.3", 13 | "samsung": "8.2", 14 | "android": "61", 15 | "electron": "2.0", 16 | "ios_saf": "10.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/native-modules.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/native-modules.json"); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/overlapping-plugins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/overlapping-plugins.json"); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/plugin-bugfixes.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/plugin-bugfixes.json"); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/compat-data/plugins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/plugins.json"); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/core/README.md: -------------------------------------------------------------------------------- 1 | # @babel/core 2 | 3 | > Babel compiler core. 4 | 5 | See our website [@babel/core](https://babeljs.io/docs/en/babel-core) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/core 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/core --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/generator/README.md: -------------------------------------------------------------------------------- 1 | # @babel/generator 2 | 3 | > Turns an AST into code. 4 | 5 | See our website [@babel/generator](https://babeljs.io/docs/en/babel-generator) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20generator%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/generator 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/generator --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts: -------------------------------------------------------------------------------- 1 | type GeneratedColumn = number; 2 | type SourcesIndex = number; 3 | type SourceLine = number; 4 | type SourceColumn = number; 5 | type NamesIndex = number; 6 | 7 | export type SourceMapSegment = 8 | | [GeneratedColumn] 9 | | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] 10 | | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; 11 | 12 | export const COLUMN = 0; 13 | export const SOURCES_INDEX = 1; 14 | export const SOURCE_LINE = 2; 15 | export const SOURCE_COLUMN = 3; 16 | export const NAMES_INDEX = 4; 17 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-compilation-targets/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-compilation-targets 2 | 3 | > Helper functions on Babel compilation targets 4 | 5 | See our website [@babel/helper-compilation-targets](https://babeljs.io/docs/en/babel-helper-compilation-targets) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-compilation-targets 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-compilation-targets 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-environment-visitor/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-environment-visitor 2 | 3 | > Helper visitor to only visit nodes in the current 'this' context 4 | 5 | See our website [@babel/helper-environment-visitor](https://babeljs.io/docs/en/babel-helper-environment-visitor) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/helper-environment-visitor 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-environment-visitor --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-function-name/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-function-name 2 | 3 | > Helper function to change the property 'name' of every function 4 | 5 | See our website [@babel/helper-function-name](https://babeljs.io/docs/en/babel-helper-function-name) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-function-name 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-function-name 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-hoist-variables/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-hoist-variables 2 | 3 | > Helper function to hoist variables 4 | 5 | See our website [@babel/helper-hoist-variables](https://babeljs.io/docs/en/babel-helper-hoist-variables) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-hoist-variables 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-hoist-variables 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-module-imports/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-module-imports 2 | 3 | > Babel helper functions for inserting module loads 4 | 5 | See our website [@babel/helper-module-imports](https://babeljs.io/docs/en/babel-helper-module-imports) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-module-imports 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-module-imports 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-module-transforms/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-module-transforms 2 | 3 | > Babel helper functions for implementing ES6 module transformations 4 | 5 | See our website [@babel/helper-module-transforms](https://babeljs.io/docs/en/babel-helper-module-transforms) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-module-transforms 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-module-transforms 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-simple-access/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-simple-access 2 | 3 | > Babel helper for ensuring that access to a given value is performed through simple accesses 4 | 5 | See our website [@babel/helper-simple-access](https://babeljs.io/docs/en/babel-helper-simple-access) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-simple-access 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-simple-access 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-split-export-declaration/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-split-export-declaration 2 | 3 | > 4 | 5 | See our website [@babel/helper-split-export-declaration](https://babeljs.io/docs/en/babel-helper-split-export-declaration) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-split-export-declaration 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-split-export-declaration 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-validator-identifier/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-validator-identifier 2 | 3 | > Validate identifier/keywords name 4 | 5 | See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/en/babel-helper-validator-identifier) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-validator-identifier 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-validator-identifier 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helper-validator-option/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-validator-option 2 | 3 | > Validate plugin/preset options 4 | 5 | See our website [@babel/helper-validator-option](https://babeljs.io/docs/en/babel-helper-validator-option) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-validator-option 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-validator-option 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helpers/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helpers 2 | 3 | > Collection of helper functions used by Babel transforms. 4 | 5 | See our website [@babel/helpers](https://babeljs.io/docs/en/babel-helpers) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/helpers 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helpers --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/helpers/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/highlight/README.md: -------------------------------------------------------------------------------- 1 | # @babel/highlight 2 | 3 | > Syntax highlight JavaScript strings for output in terminals. 4 | 5 | See our website [@babel/highlight](https://babeljs.io/docs/en/babel-highlight) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/highlight 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/highlight --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/parser/README.md: -------------------------------------------------------------------------------- 1 | # @babel/parser 2 | 3 | > A JavaScript parser 4 | 5 | See our website [@babel/parser](https://babeljs.io/docs/en/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%20(babylon)%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/parser 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/parser --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/parser/bin/babel-parser.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* eslint no-var: 0 */ 3 | 4 | var parser = require(".."); 5 | var fs = require("fs"); 6 | 7 | var filename = process.argv[2]; 8 | if (!filename) { 9 | console.error("no filename specified"); 10 | } else { 11 | var file = fs.readFileSync(filename, "utf8"); 12 | var ast = parser.parse(file); 13 | 14 | console.log(JSON.stringify(ast, null, " ")); 15 | } 16 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/parser/index.cjs: -------------------------------------------------------------------------------- 1 | try { 2 | module.exports = require("./lib/index.cjs"); 3 | } catch { 4 | module.exports = require("./lib/index.js"); 5 | } 6 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/template/README.md: -------------------------------------------------------------------------------- 1 | # @babel/template 2 | 3 | > Generate an AST from a string template. 4 | 5 | See our website [@babel/template](https://babeljs.io/docs/en/babel-template) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20template%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/template 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/template --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/traverse/README.md: -------------------------------------------------------------------------------- 1 | # @babel/traverse 2 | 3 | > The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes 4 | 5 | See our website [@babel/traverse](https://babeljs.io/docs/en/babel-traverse) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20traverse%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/traverse 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/traverse --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/traverse/scripts/generators/asserts.js: -------------------------------------------------------------------------------- 1 | import * as t from "@babel/types"; 2 | 3 | export default function generateAsserts() { 4 | let output = `/* 5 | * This file is auto-generated! Do not modify it directly. 6 | * To re-generate run 'make build' 7 | */ 8 | import * as t from "@babel/types"; 9 | import NodePath from "../index"; 10 | 11 | 12 | export interface NodePathAssetions {`; 13 | 14 | for (const type of [...t.TYPES].sort()) { 15 | output += ` 16 | assert${type}( 17 | opts?: object, 18 | ): asserts this is NodePath;`; 19 | } 20 | 21 | output += ` 22 | }`; 23 | 24 | return output; 25 | } 26 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/traverse/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/types/README.md: -------------------------------------------------------------------------------- 1 | # @babel/types 2 | 3 | > Babel Types is a Lodash-esque utility library for AST nodes 4 | 5 | See our website [@babel/types](https://babeljs.io/docs/en/babel-types) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20types%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/types 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/types --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/types/scripts/generators/constants.js: -------------------------------------------------------------------------------- 1 | import * as definitions from "../../lib/definitions/index.js"; 2 | 3 | export default function generateConstants() { 4 | let output = `/* 5 | * This file is auto-generated! Do not modify it directly. 6 | * To re-generate run 'make build' 7 | */ 8 | import { FLIPPED_ALIAS_KEYS } from "../../definitions";\n\n`; 9 | 10 | Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => { 11 | output += `export const ${type.toUpperCase()}_TYPES = FLIPPED_ALIAS_KEYS["${type}"];\n`; 12 | }); 13 | 14 | return output; 15 | } 16 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/types/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/types/scripts/utils/formatBuilderName.js: -------------------------------------------------------------------------------- 1 | const toLowerCase = Function.call.bind("".toLowerCase); 2 | 3 | export default function formatBuilderName(type) { 4 | // FunctionExpression -> functionExpression 5 | // JSXIdentifier -> jsxIdentifier 6 | // V8IntrinsicIdentifier -> v8IntrinsicIdentifier 7 | return type.replace(/^([A-Z](?=[a-z0-9])|[A-Z]+(?=[A-Z]))/, toLowerCase); 8 | } 9 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/types/scripts/utils/lowerFirst.js: -------------------------------------------------------------------------------- 1 | export default function lowerFirst(string) { 2 | return string[0].toLowerCase() + string.slice(1); 3 | } 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@babel/types/scripts/utils/toFunctionName.js: -------------------------------------------------------------------------------- 1 | export default function toFunctionName(typeName) { 2 | const _ = typeName.replace(/^TS/, "ts").replace(/^JSX/, "jsx"); 3 | return _.slice(0, 1).toLowerCase() + _.slice(1); 4 | } 5 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@jridgewell/trace-mapping/src/resolve.ts: -------------------------------------------------------------------------------- 1 | import resolveUri from '@jridgewell/resolve-uri'; 2 | 3 | export default function resolve(input: string, base: string | undefined): string { 4 | // The base is always treated as a directory, if it's not empty. 5 | // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327 6 | // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401 7 | if (base && !base.endsWith('/')) base += '/'; 8 | 9 | return resolveUri(input, base); 10 | } 11 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Removes everything after the last "/", but leaves the slash. 3 | */ 4 | export default function stripFilename(path: string | undefined | null): string { 5 | if (!path) return ''; 6 | const index = path.lastIndexOf('/'); 7 | return path.slice(0, index + 1); 8 | } 9 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/@nicolo-ribaudo/chokidar-2/README.md: -------------------------------------------------------------------------------- 1 | # `@nicolo-ribaudo/chokidar-2` 2 | 3 | A wrapper around `chokidar@2.1.8` that doesn't depend on `fsevents@1`. 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/balanced-match/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | tidelift: "npm/balanced-match" 2 | patreon: juliangruber 3 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/binary-extensions/binary-extensions.json.d.ts: -------------------------------------------------------------------------------- 1 | declare const binaryExtensionsJson: readonly string[]; 2 | 3 | export = binaryExtensionsJson; 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/binary-extensions/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | List of binary file extensions. 3 | 4 | @example 5 | ``` 6 | import binaryExtensions = require('binary-extensions'); 7 | 8 | console.log(binaryExtensions); 9 | //=> ['3ds', '3g2', …] 10 | ``` 11 | */ 12 | declare const binaryExtensions: readonly string[]; 13 | 14 | export = binaryExtensions; 15 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/binary-extensions/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./binary-extensions.json'); 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/browserslist/error.d.ts: -------------------------------------------------------------------------------- 1 | declare class BrowserslistError extends Error { 2 | constructor(message: any) 3 | name: 'BrowserslistError' 4 | browserslist: true 5 | } 6 | 7 | export = BrowserslistError 8 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/browserslist/error.js: -------------------------------------------------------------------------------- 1 | function BrowserslistError(message) { 2 | this.name = 'BrowserslistError' 3 | this.message = message 4 | this.browserslist = true 5 | if (Error.captureStackTrace) { 6 | Error.captureStackTrace(this, BrowserslistError) 7 | } 8 | } 9 | 10 | BrowserslistError.prototype = Error.prototype 11 | 12 | module.exports = BrowserslistError 13 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/caniuse-lite/data/browsers.js: -------------------------------------------------------------------------------- 1 | module.exports={A:"ie",B:"edge",C:"firefox",D:"chrome",E:"safari",F:"opera",G:"ios_saf",H:"op_mini",I:"android",J:"bb",K:"op_mob",L:"and_chr",M:"and_ff",N:"ie_mob",O:"and_uc",P:"samsung",Q:"and_qq",R:"baidu",S:"kaios"}; 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/color-name/README.md: -------------------------------------------------------------------------------- 1 | A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. 2 | 3 | [![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) 4 | 5 | 6 | ```js 7 | var colors = require('color-name'); 8 | colors.red //[255,0,0] 9 | ``` 10 | 11 | 12 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/color-name/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "color-name", 3 | "version": "1.1.3", 4 | "description": "A list of color names and its values", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git@github.com:dfcreative/color-name.git" 12 | }, 13 | "keywords": [ 14 | "color-name", 15 | "color", 16 | "color-keyword", 17 | "keyword" 18 | ], 19 | "author": "DY ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/dfcreative/color-name/issues" 23 | }, 24 | "homepage": "https://github.com/dfcreative/color-name" 25 | } 26 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/color-name/test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | var names = require('./'); 4 | var assert = require('assert'); 5 | 6 | assert.deepEqual(names.red, [255,0,0]); 7 | assert.deepEqual(names.aliceblue, [240,248,255]); 8 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/concat-map/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/concat-map/example/map.js: -------------------------------------------------------------------------------- 1 | var concatMap = require('../'); 2 | var xs = [ 1, 2, 3, 4, 5, 6 ]; 3 | var ys = concatMap(xs, function (x) { 4 | return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; 5 | }); 6 | console.dir(ys); 7 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/concat-map/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (xs, fn) { 2 | var res = []; 3 | for (var i = 0; i < xs.length; i++) { 4 | var x = fn(xs[i], i); 5 | if (isArray(x)) res.push.apply(res, x); 6 | else res.push(x); 7 | } 8 | return res; 9 | }; 10 | 11 | var isArray = Array.isArray || function (xs) { 12 | return Object.prototype.toString.call(xs) === '[object Array]'; 13 | }; 14 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/debug/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Detect Electron renderer / nwjs process, which is node, but we should 3 | * treat as a browser. 4 | */ 5 | 6 | if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { 7 | module.exports = require('./browser.js'); 8 | } else { 9 | module.exports = require('./node.js'); 10 | } 11 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/electron-to-chromium/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | v1.3.0 2 | * Additionally include chromium to electron mappings 3 | 4 | v1.2.0 5 | * versions and full-versions are now separately importable. 6 | 7 | v1.1.0 8 | * Both electronToChromium and electronToBrowserList now can accept strings as well as numbers. 9 | 10 | v1.0.1 11 | Update documentation 12 | 13 | v1.0.0 14 | Inititial release 15 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/electron-to-chromium/chromium-versions.json: -------------------------------------------------------------------------------- 1 | {"39":"0.20","40":"0.21","41":"0.21","42":"0.25","43":"0.27","44":"0.30","45":"0.31","47":"0.36","49":"0.37","50":"1.1","51":"1.2","52":"1.3","53":"1.4","54":"1.4","56":"1.6","58":"1.7","59":"1.8","61":"2.0","66":"3.0","69":"4.0","72":"5.0","73":"5.0","76":"6.0","78":"7.0","79":"8.0","80":"8.0","82":"9.0","83":"9.0","84":"10.0","85":"10.0","86":"11.0","87":"11.0","89":"12.0","90":"13.0","91":"13.0","92":"14.0","93":"14.0","94":"15.0","95":"16.0","96":"16.0","98":"17.0","99":"18.0","100":"18.0","102":"19.0","103":"20.0","104":"20.0"} -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/escalade/index.d.ts: -------------------------------------------------------------------------------- 1 | type Promisable = T | Promise; 2 | export type Callback = (directory: string, files: string[]) => Promisable; 3 | export default function (directory: string, callback: Callback): Promise; 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/escalade/sync/index.d.ts: -------------------------------------------------------------------------------- 1 | export type Callback = (directory: string, files: string[]) => string | false | void; 2 | export default function (directory: string, callback: Callback): string | void; 3 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/escalade/sync/index.js: -------------------------------------------------------------------------------- 1 | const { dirname, resolve } = require('path'); 2 | const { readdirSync, statSync } = require('fs'); 3 | 4 | module.exports = function (start, callback) { 5 | let dir = resolve('.', start); 6 | let tmp, stats = statSync(dir); 7 | 8 | if (!stats.isDirectory()) { 9 | dir = dirname(dir); 10 | } 11 | 12 | while (true) { 13 | tmp = callback(dir, readdirSync(dir)); 14 | if (tmp) return resolve(dir, tmp); 15 | dir = dirname(tmp = dir); 16 | if (tmp === dir) break; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/escalade/sync/index.mjs: -------------------------------------------------------------------------------- 1 | import { dirname, resolve } from 'path'; 2 | import { readdirSync, statSync } from 'fs'; 3 | 4 | export default function (start, callback) { 5 | let dir = resolve('.', start); 6 | let tmp, stats = statSync(dir); 7 | 8 | if (!stats.isDirectory()) { 9 | dir = dirname(dir); 10 | } 11 | 12 | while (true) { 13 | tmp = callback(dir, readdirSync(dir)); 14 | if (tmp) return resolve(dir, tmp); 15 | dir = dirname(tmp = dir); 16 | if (tmp === dir) break; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/escape-string-regexp/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; 4 | 5 | module.exports = function (str) { 6 | if (typeof str !== 'string') { 7 | throw new TypeError('Expected a string'); 8 | } 9 | 10 | return str.replace(matchOperatorsRe, '\\$&'); 11 | }; 12 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/escape-string-regexp/readme.md: -------------------------------------------------------------------------------- 1 | # escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp) 2 | 3 | > Escape RegExp special characters 4 | 5 | 6 | ## Install 7 | 8 | ``` 9 | $ npm install --save escape-string-regexp 10 | ``` 11 | 12 | 13 | ## Usage 14 | 15 | ```js 16 | const escapeStringRegexp = require('escape-string-regexp'); 17 | 18 | const escapedString = escapeStringRegexp('how much $ for a unicorn?'); 19 | //=> 'how much \$ for a unicorn\?' 20 | 21 | new RegExp(escapedString); 22 | ``` 23 | 24 | 25 | ## License 26 | 27 | MIT © [Sindre Sorhus](http://sindresorhus.com) 28 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/fsevents/fsevents.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/fsevents/fsevents.node -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/gensync/test/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | presets: [ 3 | ["env", { targets: { node: "current" }}], 4 | ], 5 | } 6 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/globals/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = require('./globals.json'); 3 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/has-flag/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (flag, argv) => { 3 | argv = argv || process.argv; 4 | const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); 5 | const pos = argv.indexOf(prefix + flag); 6 | const terminatorPos = argv.indexOf('--'); 7 | return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); 8 | }; 9 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/inherits/inherits.js: -------------------------------------------------------------------------------- 1 | try { 2 | var util = require('util'); 3 | /* istanbul ignore next */ 4 | if (typeof util.inherits !== 'function') throw ''; 5 | module.exports = util.inherits; 6 | } catch (e) { 7 | /* istanbul ignore next */ 8 | module.exports = require('./inherits_browser.js'); 9 | } 10 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/is-binary-path/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | Check if a file path is a binary file. 3 | 4 | @example 5 | ``` 6 | import isBinaryPath = require('is-binary-path'); 7 | 8 | isBinaryPath('source/unicorn.png'); 9 | //=> true 10 | 11 | isBinaryPath('source/unicorn.txt'); 12 | //=> false 13 | ``` 14 | */ 15 | declare function isBinaryPath(filePath: string): boolean; 16 | 17 | export = isBinaryPath; 18 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/is-binary-path/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const path = require('path'); 3 | const binaryExtensions = require('binary-extensions'); 4 | 5 | const extensions = new Set(binaryExtensions); 6 | 7 | module.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase()); 8 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/is-extglob/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * is-extglob 3 | * 4 | * Copyright (c) 2014-2016, Jon Schlinkert. 5 | * Licensed under the MIT License. 6 | */ 7 | 8 | module.exports = function isExtglob(str) { 9 | if (typeof str !== 'string' || str === '') { 10 | return false; 11 | } 12 | 13 | var match; 14 | while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { 15 | if (match[2]) return true; 16 | str = str.slice(match.index + match[0].length); 17 | } 18 | 19 | return false; 20 | }; 21 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/is-number/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * is-number 3 | * 4 | * Copyright (c) 2014-present, Jon Schlinkert. 5 | * Released under the MIT License. 6 | */ 7 | 8 | 'use strict'; 9 | 10 | module.exports = function(num) { 11 | if (typeof num === 'number') { 12 | return num - num === 0; 13 | } 14 | if (typeof num === 'string' && num.trim() !== '') { 15 | return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); 16 | } 17 | return false; 18 | }; 19 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/make-dir/node_modules/.bin/semver: -------------------------------------------------------------------------------- 1 | ../semver/bin/semver -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/node-releases/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-releases", 3 | "version": "2.0.6", 4 | "description": "Node.js releases data", 5 | "scripts": { 6 | "build": "node scripts/build.js" 7 | }, 8 | "repository": "chicoxyzzy/node-releases", 9 | "keywords": [ 10 | "nodejs", 11 | "releases" 12 | ], 13 | "author": "Sergey Rubanov ", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "semver": "^7.3.5" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/picocolors/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "picocolors", 3 | "version": "1.0.0", 4 | "main": "./picocolors.js", 5 | "types": "./picocolors.d.ts", 6 | "browser": { 7 | "./picocolors.js": "./picocolors.browser.js" 8 | }, 9 | "sideEffects": false, 10 | "description": "The tiniest and the fastest library for terminal output formatting with ANSI colors", 11 | "files": [ 12 | "picocolors.*", 13 | "types.ts" 14 | ], 15 | "keywords": [ 16 | "terminal", 17 | "colors", 18 | "formatting", 19 | "cli", 20 | "console" 21 | ], 22 | "author": "Alexey Raspopov", 23 | "repository": "alexeyraspopov/picocolors", 24 | "license": "ISC" 25 | } 26 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/picocolors/picocolors.browser.js: -------------------------------------------------------------------------------- 1 | var x=String; 2 | var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}}; 3 | module.exports=create(); 4 | module.exports.createColors = create; 5 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/picocolors/picocolors.d.ts: -------------------------------------------------------------------------------- 1 | import { Colors } from "./types" 2 | 3 | declare const picocolors: Colors & { createColors: (enabled?: boolean) => Colors } 4 | 5 | export = picocolors 6 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/picomatch/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = require('./lib/picomatch'); 4 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/semver/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "semver", 3 | "version": "6.3.0", 4 | "description": "The semantic version parser used by npm.", 5 | "main": "semver.js", 6 | "scripts": { 7 | "test": "tap", 8 | "preversion": "npm test", 9 | "postversion": "npm publish", 10 | "postpublish": "git push origin --follow-tags" 11 | }, 12 | "devDependencies": { 13 | "tap": "^14.3.1" 14 | }, 15 | "license": "ISC", 16 | "repository": "https://github.com/npm/node-semver", 17 | "bin": { 18 | "semver": "./bin/semver.js" 19 | }, 20 | "files": [ 21 | "bin", 22 | "range.bnf", 23 | "semver.js" 24 | ], 25 | "tap": { 26 | "check-coverage": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/semver/range.bnf: -------------------------------------------------------------------------------- 1 | range-set ::= range ( logical-or range ) * 2 | logical-or ::= ( ' ' ) * '||' ( ' ' ) * 3 | range ::= hyphen | simple ( ' ' simple ) * | '' 4 | hyphen ::= partial ' - ' partial 5 | simple ::= primitive | partial | tilde | caret 6 | primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial 7 | partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? 8 | xr ::= 'x' | 'X' | '*' | nr 9 | nr ::= '0' | [1-9] ( [0-9] ) * 10 | tilde ::= '~' partial 11 | caret ::= '^' partial 12 | qualifier ::= ( '-' pre )? ( '+' build )? 13 | pre ::= parts 14 | build ::= parts 15 | parts ::= part ( '.' part ) * 16 | part ::= nr | [-0-9A-Za-z]+ 17 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/slash/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = input => { 3 | const isExtendedLengthPath = /^\\\\\?\\/.test(input); 4 | const hasNonAscii = /[^\u0000-\u0080]+/.test(input); // eslint-disable-line no-control-regex 5 | 6 | if (isExtendedLengthPath || hasNonAscii) { 7 | return input; 8 | } 9 | 10 | return input.replace(/\\/g, '/'); 11 | }; 12 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/slash/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slash", 3 | "version": "2.0.0", 4 | "description": "Convert Windows backslash paths to slash paths", 5 | "license": "MIT", 6 | "repository": "sindresorhus/slash", 7 | "author": { 8 | "name": "Sindre Sorhus", 9 | "email": "sindresorhus@gmail.com", 10 | "url": "sindresorhus.com" 11 | }, 12 | "engines": { 13 | "node": ">=6" 14 | }, 15 | "scripts": { 16 | "test": "xo && ava" 17 | }, 18 | "files": [ 19 | "index.js" 20 | ], 21 | "keywords": [ 22 | "path", 23 | "seperator", 24 | "sep", 25 | "slash", 26 | "backslash", 27 | "windows", 28 | "win" 29 | ], 30 | "devDependencies": { 31 | "ava": "*", 32 | "xo": "*" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/supports-color/browser.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = { 3 | stdout: false, 4 | stderr: false 5 | }; 6 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/update-browserslist-db/check-npm-version.js: -------------------------------------------------------------------------------- 1 | let { execSync } = require('child_process') 2 | let pico = require('picocolors') 3 | 4 | try { 5 | let version = parseInt(execSync('npm -v')) 6 | if (version <= 6) { 7 | process.stderr.write( 8 | pico.red( 9 | 'Update npm or call ' + 10 | pico.yellow('npx browserslist@latest --update-db') + 11 | '\n' 12 | ) 13 | ) 14 | process.exit(1) 15 | } 16 | } catch (e) {} 17 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/node_modules/update-browserslist-db/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Run update and print output to terminal. 3 | */ 4 | declare function updateDb(print?: (str: string) => void): Promise 5 | 6 | export = updateDb 7 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "@babel/cli": "^7.18.9", 4 | "@babel/core": "^7.18.9" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/rm_extra_semicolons.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const parser = require("@babel/parser"); 4 | const generate = require("@babel/generator").default; 5 | const traverse = require("@babel/traverse").default; 6 | 7 | let js = fs.readFileSync("too_many_semicolons.js", "utf-8"); 8 | 9 | const ast = parser.parse(js); 10 | 11 | traverse(ast, { 12 | EmptyStatement: function(path) { 13 | path.remove(); 14 | } 15 | }); 16 | 17 | let clean = generate(ast).code; 18 | 19 | fs.writeFileSync("clean3.js", clean); 20 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/too_many_semicolons.js: -------------------------------------------------------------------------------- 1 | ;;;;;console.log("123");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2 | -------------------------------------------------------------------------------- /2022-07-20-javascript-ast-manipulation-with-babel-the-first-steps/undo_hexcoding.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const parser = require("@babel/parser"); 4 | const generate = require("@babel/generator").default; 5 | const traverse = require("@babel/traverse").default; 6 | 7 | let hjs = fs.readFileSync("hexcoded.js", "utf-8"); 8 | 9 | const ast = parser.parse(hjs); 10 | 11 | traverse(ast, { 12 | StringLiteral: function(path) { 13 | path.node.extra.raw = "\"" + path.node.extra.rawValue + "\""; 14 | } 15 | }); 16 | 17 | let clean = generate(ast).code; 18 | 19 | fs.writeFileSync("clean1.js", clean); 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/extract1.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const parser = require("@babel/parser"); 4 | const traverse = require("@babel/traverse").default; 5 | 6 | let js = fs.readFileSync("fb_example.js", "utf-8"); 7 | 8 | const ast = parser.parse(js); 9 | 10 | var url = null; 11 | 12 | traverse(ast, { 13 | ObjectProperty: function(path) { 14 | if (!path.node.method && path.node.key.name == "href") { 15 | url = path.node.value.value; 16 | } 17 | } 18 | }); 19 | 20 | console.log(url); 21 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/fb_example.js: -------------------------------------------------------------------------------- 1 | FB.ui({ 2 | method: 'share', 3 | href: 'https://developers.facebook.com/docs/' 4 | }, function(response){}); 5 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/babel: -------------------------------------------------------------------------------- 1 | ../@babel/cli/bin/babel.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/babel-external-helpers: -------------------------------------------------------------------------------- 1 | ../@babel/cli/bin/babel-external-helpers.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/babel-node: -------------------------------------------------------------------------------- 1 | ../babel/lib/cli.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/browserslist: -------------------------------------------------------------------------------- 1 | ../browserslist/cli.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/browserslist-lint: -------------------------------------------------------------------------------- 1 | ../update-browserslist-db/cli.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/jsesc: -------------------------------------------------------------------------------- 1 | ../jsesc/bin/jsesc -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/json5: -------------------------------------------------------------------------------- 1 | ../json5/lib/cli.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/parser: -------------------------------------------------------------------------------- 1 | ../@babel/parser/bin/babel-parser.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/.bin/semver: -------------------------------------------------------------------------------- 1 | ../semver/bin/semver.js -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/cli/README.md: -------------------------------------------------------------------------------- 1 | # @babel/cli 2 | 3 | > Babel command line. 4 | 5 | See our website [@babel/cli](https://babeljs.io/docs/en/babel-cli) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20cli%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/cli 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/cli --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/cli/bin/babel-external-helpers.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("../lib/babel-external-helpers"); 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/cli/bin/babel.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("../lib/babel"); 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/cli/index.js: -------------------------------------------------------------------------------- 1 | throw new Error("Use the `@babel/core` package instead of `@babel/cli`."); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/code-frame/README.md: -------------------------------------------------------------------------------- 1 | # @babel/code-frame 2 | 3 | > Generate errors that contain a code frame that point to source locations. 4 | 5 | See our website [@babel/code-frame](https://babeljs.io/docs/en/babel-code-frame) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/code-frame 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/code-frame --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/README.md: -------------------------------------------------------------------------------- 1 | # @babel/compat-data 2 | 3 | > 4 | 5 | See our website [@babel/compat-data](https://babeljs.io/docs/en/babel-compat-data) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/compat-data 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/compat-data 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/corejs2-built-ins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/corejs2-built-ins.json"); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/corejs3-shipped-proposals.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/corejs3-shipped-proposals.json"); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json: -------------------------------------------------------------------------------- 1 | [ 2 | "esnext.global-this", 3 | "esnext.promise.all-settled", 4 | "esnext.string.match-all" 5 | ] 6 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/data/native-modules.json: -------------------------------------------------------------------------------- 1 | { 2 | "es6.module": { 3 | "chrome": "61", 4 | "and_chr": "61", 5 | "edge": "16", 6 | "firefox": "60", 7 | "and_ff": "60", 8 | "node": "13.2.0", 9 | "opera": "48", 10 | "op_mob": "48", 11 | "safari": "10.1", 12 | "ios": "10.3", 13 | "samsung": "8.2", 14 | "android": "61", 15 | "electron": "2.0", 16 | "ios_saf": "10.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/native-modules.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/native-modules.json"); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/overlapping-plugins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/overlapping-plugins.json"); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/plugin-bugfixes.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/plugin-bugfixes.json"); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/compat-data/plugins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/plugins.json"); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/core/README.md: -------------------------------------------------------------------------------- 1 | # @babel/core 2 | 3 | > Babel compiler core. 4 | 5 | See our website [@babel/core](https://babeljs.io/docs/en/babel-core) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/core 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/core --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/generator/README.md: -------------------------------------------------------------------------------- 1 | # @babel/generator 2 | 3 | > Turns an AST into code. 4 | 5 | See our website [@babel/generator](https://babeljs.io/docs/en/babel-generator) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20generator%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/generator 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/generator --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts: -------------------------------------------------------------------------------- 1 | type GeneratedColumn = number; 2 | type SourcesIndex = number; 3 | type SourceLine = number; 4 | type SourceColumn = number; 5 | type NamesIndex = number; 6 | 7 | export type SourceMapSegment = 8 | | [GeneratedColumn] 9 | | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] 10 | | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; 11 | 12 | export const COLUMN = 0; 13 | export const SOURCES_INDEX = 1; 14 | export const SOURCE_LINE = 2; 15 | export const SOURCE_COLUMN = 3; 16 | export const NAMES_INDEX = 4; 17 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-compilation-targets/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-compilation-targets 2 | 3 | > Helper functions on Babel compilation targets 4 | 5 | See our website [@babel/helper-compilation-targets](https://babeljs.io/docs/en/babel-helper-compilation-targets) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-compilation-targets 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-compilation-targets 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-environment-visitor/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-environment-visitor 2 | 3 | > Helper visitor to only visit nodes in the current 'this' context 4 | 5 | See our website [@babel/helper-environment-visitor](https://babeljs.io/docs/en/babel-helper-environment-visitor) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/helper-environment-visitor 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-environment-visitor --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-function-name/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-function-name 2 | 3 | > Helper function to change the property 'name' of every function 4 | 5 | See our website [@babel/helper-function-name](https://babeljs.io/docs/en/babel-helper-function-name) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-function-name 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-function-name 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-hoist-variables/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-hoist-variables 2 | 3 | > Helper function to hoist variables 4 | 5 | See our website [@babel/helper-hoist-variables](https://babeljs.io/docs/en/babel-helper-hoist-variables) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-hoist-variables 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-hoist-variables 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-module-imports/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-module-imports 2 | 3 | > Babel helper functions for inserting module loads 4 | 5 | See our website [@babel/helper-module-imports](https://babeljs.io/docs/en/babel-helper-module-imports) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-module-imports 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-module-imports 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-module-transforms/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-module-transforms 2 | 3 | > Babel helper functions for implementing ES6 module transformations 4 | 5 | See our website [@babel/helper-module-transforms](https://babeljs.io/docs/en/babel-helper-module-transforms) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-module-transforms 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-module-transforms 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-simple-access/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-simple-access 2 | 3 | > Babel helper for ensuring that access to a given value is performed through simple accesses 4 | 5 | See our website [@babel/helper-simple-access](https://babeljs.io/docs/en/babel-helper-simple-access) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-simple-access 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-simple-access 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-split-export-declaration/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-split-export-declaration 2 | 3 | > 4 | 5 | See our website [@babel/helper-split-export-declaration](https://babeljs.io/docs/en/babel-helper-split-export-declaration) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-split-export-declaration 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-split-export-declaration 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-string-parser/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-string-parser 2 | 3 | > A utility package to parse strings 4 | 5 | See our website [@babel/helper-string-parser](https://babeljs.io/docs/en/babel-helper-string-parser) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-string-parser 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-string-parser 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-validator-identifier/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-validator-identifier 2 | 3 | > Validate identifier/keywords name 4 | 5 | See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/en/babel-helper-validator-identifier) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-validator-identifier 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-validator-identifier 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helper-validator-option/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-validator-option 2 | 3 | > Validate plugin/preset options 4 | 5 | See our website [@babel/helper-validator-option](https://babeljs.io/docs/en/babel-helper-validator-option) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-validator-option 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-validator-option 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helpers/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helpers 2 | 3 | > Collection of helper functions used by Babel transforms. 4 | 5 | See our website [@babel/helpers](https://babeljs.io/docs/en/babel-helpers) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/helpers 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helpers --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/helpers/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/highlight/README.md: -------------------------------------------------------------------------------- 1 | # @babel/highlight 2 | 3 | > Syntax highlight JavaScript strings for output in terminals. 4 | 5 | See our website [@babel/highlight](https://babeljs.io/docs/en/babel-highlight) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/highlight 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/highlight --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/parser/README.md: -------------------------------------------------------------------------------- 1 | # @babel/parser 2 | 3 | > A JavaScript parser 4 | 5 | See our website [@babel/parser](https://babeljs.io/docs/en/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%20(babylon)%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/parser 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/parser --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/parser/bin/babel-parser.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* eslint no-var: 0 */ 3 | 4 | var parser = require(".."); 5 | var fs = require("fs"); 6 | 7 | var filename = process.argv[2]; 8 | if (!filename) { 9 | console.error("no filename specified"); 10 | } else { 11 | var file = fs.readFileSync(filename, "utf8"); 12 | var ast = parser.parse(file); 13 | 14 | console.log(JSON.stringify(ast, null, " ")); 15 | } 16 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/parser/index.cjs: -------------------------------------------------------------------------------- 1 | try { 2 | module.exports = require("./lib/index.cjs"); 3 | } catch { 4 | module.exports = require("./lib/index.js"); 5 | } 6 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/template/README.md: -------------------------------------------------------------------------------- 1 | # @babel/template 2 | 3 | > Generate an AST from a string template. 4 | 5 | See our website [@babel/template](https://babeljs.io/docs/en/babel-template) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20template%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/template 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/template --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/traverse/README.md: -------------------------------------------------------------------------------- 1 | # @babel/traverse 2 | 3 | > The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes 4 | 5 | See our website [@babel/traverse](https://babeljs.io/docs/en/babel-traverse) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20traverse%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/traverse 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/traverse --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/traverse/scripts/generators/asserts.js: -------------------------------------------------------------------------------- 1 | import * as t from "@babel/types"; 2 | 3 | export default function generateAsserts() { 4 | let output = `/* 5 | * This file is auto-generated! Do not modify it directly. 6 | * To re-generate run 'make build' 7 | */ 8 | import * as t from "@babel/types"; 9 | import NodePath from "../index"; 10 | 11 | 12 | export interface NodePathAssetions {`; 13 | 14 | for (const type of [...t.TYPES].sort()) { 15 | output += ` 16 | assert${type}( 17 | opts?: object, 18 | ): asserts this is NodePath;`; 19 | } 20 | 21 | output += ` 22 | }`; 23 | 24 | return output; 25 | } 26 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/traverse/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/types/README.md: -------------------------------------------------------------------------------- 1 | # @babel/types 2 | 3 | > Babel Types is a Lodash-esque utility library for AST nodes 4 | 5 | See our website [@babel/types](https://babeljs.io/docs/en/babel-types) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20types%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/types 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/types --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/types/scripts/generators/constants.js: -------------------------------------------------------------------------------- 1 | import * as definitions from "../../lib/definitions/index.js"; 2 | 3 | export default function generateConstants() { 4 | let output = `/* 5 | * This file is auto-generated! Do not modify it directly. 6 | * To re-generate run 'make build' 7 | */ 8 | import { FLIPPED_ALIAS_KEYS } from "../../definitions";\n\n`; 9 | 10 | Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => { 11 | output += `export const ${type.toUpperCase()}_TYPES = FLIPPED_ALIAS_KEYS["${type}"];\n`; 12 | }); 13 | 14 | return output; 15 | } 16 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/types/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/types/scripts/utils/formatBuilderName.js: -------------------------------------------------------------------------------- 1 | const toLowerCase = Function.call.bind("".toLowerCase); 2 | 3 | export default function formatBuilderName(type) { 4 | // FunctionExpression -> functionExpression 5 | // JSXIdentifier -> jsxIdentifier 6 | // V8IntrinsicIdentifier -> v8IntrinsicIdentifier 7 | return type.replace(/^([A-Z](?=[a-z0-9])|[A-Z]+(?=[A-Z]))/, toLowerCase); 8 | } 9 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/types/scripts/utils/lowerFirst.js: -------------------------------------------------------------------------------- 1 | export default function lowerFirst(string) { 2 | return string[0].toLowerCase() + string.slice(1); 3 | } 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@babel/types/scripts/utils/toFunctionName.js: -------------------------------------------------------------------------------- 1 | export default function toFunctionName(typeName) { 2 | const _ = typeName.replace(/^TS/, "ts").replace(/^JSX/, "jsx"); 3 | return _.slice(0, 1).toLowerCase() + _.slice(1); 4 | } 5 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@jridgewell/trace-mapping/src/resolve.ts: -------------------------------------------------------------------------------- 1 | import resolveUri from '@jridgewell/resolve-uri'; 2 | 3 | export default function resolve(input: string, base: string | undefined): string { 4 | // The base is always treated as a directory, if it's not empty. 5 | // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327 6 | // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401 7 | if (base && !base.endsWith('/')) base += '/'; 8 | 9 | return resolveUri(input, base); 10 | } 11 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Removes everything after the last "/", but leaves the slash. 3 | */ 4 | export default function stripFilename(path: string | undefined | null): string { 5 | if (!path) return ''; 6 | const index = path.lastIndexOf('/'); 7 | return path.slice(0, index + 1); 8 | } 9 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/@nicolo-ribaudo/chokidar-2/README.md: -------------------------------------------------------------------------------- 1 | # `@nicolo-ribaudo/chokidar-2` 2 | 3 | A wrapper around `chokidar@2.1.8` that doesn't depend on `fsevents@1`. 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/babel/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | test 3 | node_modules 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/babel/README.md: -------------------------------------------------------------------------------- 1 | # babel 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/babel/index.js: -------------------------------------------------------------------------------- 1 | throw new Error("The node API for `babel` has been moved to `babel-core`."); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/babel/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "babel", 3 | "version": "6.23.0", 4 | "description": "Turn ES6 code into readable vanilla ES5 with source maps", 5 | "author": "Sebastian McKenzie ", 6 | "homepage": "https://babeljs.io/", 7 | "license": "MIT", 8 | "repository": "https://github.com/babel/babel/tree/master/packages/babel", 9 | "bin": { 10 | "babel": "./lib/cli.js", 11 | "babel-node": "./lib/cli.js", 12 | "babel-external-helpers": "./lib/cli.js" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/balanced-match/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | tidelift: "npm/balanced-match" 2 | patreon: juliangruber 3 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/binary-extensions/binary-extensions.json.d.ts: -------------------------------------------------------------------------------- 1 | declare const binaryExtensionsJson: readonly string[]; 2 | 3 | export = binaryExtensionsJson; 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/binary-extensions/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | List of binary file extensions. 3 | 4 | @example 5 | ``` 6 | import binaryExtensions = require('binary-extensions'); 7 | 8 | console.log(binaryExtensions); 9 | //=> ['3ds', '3g2', …] 10 | ``` 11 | */ 12 | declare const binaryExtensions: readonly string[]; 13 | 14 | export = binaryExtensions; 15 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/binary-extensions/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./binary-extensions.json'); 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/browserslist/error.d.ts: -------------------------------------------------------------------------------- 1 | declare class BrowserslistError extends Error { 2 | constructor(message: any) 3 | name: 'BrowserslistError' 4 | browserslist: true 5 | } 6 | 7 | export = BrowserslistError 8 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/browserslist/error.js: -------------------------------------------------------------------------------- 1 | function BrowserslistError(message) { 2 | this.name = 'BrowserslistError' 3 | this.message = message 4 | this.browserslist = true 5 | if (Error.captureStackTrace) { 6 | Error.captureStackTrace(this, BrowserslistError) 7 | } 8 | } 9 | 10 | BrowserslistError.prototype = Error.prototype 11 | 12 | module.exports = BrowserslistError 13 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/caniuse-lite/data/browsers.js: -------------------------------------------------------------------------------- 1 | module.exports={A:"ie",B:"edge",C:"firefox",D:"chrome",E:"safari",F:"opera",G:"ios_saf",H:"op_mini",I:"android",J:"bb",K:"op_mob",L:"and_chr",M:"and_ff",N:"ie_mob",O:"and_uc",P:"samsung",Q:"and_qq",R:"baidu",S:"kaios"}; 2 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/color-name/README.md: -------------------------------------------------------------------------------- 1 | A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. 2 | 3 | [![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) 4 | 5 | 6 | ```js 7 | var colors = require('color-name'); 8 | colors.red //[255,0,0] 9 | ``` 10 | 11 | 12 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/color-name/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "color-name", 3 | "version": "1.1.3", 4 | "description": "A list of color names and its values", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git@github.com:dfcreative/color-name.git" 12 | }, 13 | "keywords": [ 14 | "color-name", 15 | "color", 16 | "color-keyword", 17 | "keyword" 18 | ], 19 | "author": "DY ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/dfcreative/color-name/issues" 23 | }, 24 | "homepage": "https://github.com/dfcreative/color-name" 25 | } 26 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/color-name/test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | var names = require('./'); 4 | var assert = require('assert'); 5 | 6 | assert.deepEqual(names.red, [255,0,0]); 7 | assert.deepEqual(names.aliceblue, [240,248,255]); 8 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/concat-map/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/concat-map/example/map.js: -------------------------------------------------------------------------------- 1 | var concatMap = require('../'); 2 | var xs = [ 1, 2, 3, 4, 5, 6 ]; 3 | var ys = concatMap(xs, function (x) { 4 | return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; 5 | }); 6 | console.dir(ys); 7 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/concat-map/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (xs, fn) { 2 | var res = []; 3 | for (var i = 0; i < xs.length; i++) { 4 | var x = fn(xs[i], i); 5 | if (isArray(x)) res.push.apply(res, x); 6 | else res.push(x); 7 | } 8 | return res; 9 | }; 10 | 11 | var isArray = Array.isArray || function (xs) { 12 | return Object.prototype.toString.call(xs) === '[object Array]'; 13 | }; 14 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/debug/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Detect Electron renderer / nwjs process, which is node, but we should 3 | * treat as a browser. 4 | */ 5 | 6 | if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { 7 | module.exports = require('./browser.js'); 8 | } else { 9 | module.exports = require('./node.js'); 10 | } 11 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/electron-to-chromium/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | v1.3.0 2 | * Additionally include chromium to electron mappings 3 | 4 | v1.2.0 5 | * versions and full-versions are now separately importable. 6 | 7 | v1.1.0 8 | * Both electronToChromium and electronToBrowserList now can accept strings as well as numbers. 9 | 10 | v1.0.1 11 | Update documentation 12 | 13 | v1.0.0 14 | Inititial release 15 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/electron-to-chromium/chromium-versions.json: -------------------------------------------------------------------------------- 1 | {"39":"0.20","40":"0.21","41":"0.21","42":"0.25","43":"0.27","44":"0.30","45":"0.31","47":"0.36","49":"0.37","50":"1.1","51":"1.2","52":"1.3","53":"1.4","54":"1.4","56":"1.6","58":"1.7","59":"1.8","61":"2.0","66":"3.0","69":"4.0","72":"5.0","73":"5.0","76":"6.0","78":"7.0","79":"8.0","80":"8.0","82":"9.0","83":"9.0","84":"10.0","85":"10.0","86":"11.0","87":"11.0","89":"12.0","90":"13.0","91":"13.0","92":"14.0","93":"14.0","94":"15.0","95":"16.0","96":"16.0","98":"17.0","99":"18.0","100":"18.0","102":"19.0","103":"20.0","104":"20.0"} -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/escalade/index.d.ts: -------------------------------------------------------------------------------- 1 | type Promisable = T | Promise; 2 | export type Callback = (directory: string, files: string[]) => Promisable; 3 | export default function (directory: string, callback: Callback): Promise; 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/escalade/sync/index.d.ts: -------------------------------------------------------------------------------- 1 | export type Callback = (directory: string, files: string[]) => string | false | void; 2 | export default function (directory: string, callback: Callback): string | void; 3 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/escalade/sync/index.js: -------------------------------------------------------------------------------- 1 | const { dirname, resolve } = require('path'); 2 | const { readdirSync, statSync } = require('fs'); 3 | 4 | module.exports = function (start, callback) { 5 | let dir = resolve('.', start); 6 | let tmp, stats = statSync(dir); 7 | 8 | if (!stats.isDirectory()) { 9 | dir = dirname(dir); 10 | } 11 | 12 | while (true) { 13 | tmp = callback(dir, readdirSync(dir)); 14 | if (tmp) return resolve(dir, tmp); 15 | dir = dirname(tmp = dir); 16 | if (tmp === dir) break; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/escalade/sync/index.mjs: -------------------------------------------------------------------------------- 1 | import { dirname, resolve } from 'path'; 2 | import { readdirSync, statSync } from 'fs'; 3 | 4 | export default function (start, callback) { 5 | let dir = resolve('.', start); 6 | let tmp, stats = statSync(dir); 7 | 8 | if (!stats.isDirectory()) { 9 | dir = dirname(dir); 10 | } 11 | 12 | while (true) { 13 | tmp = callback(dir, readdirSync(dir)); 14 | if (tmp) return resolve(dir, tmp); 15 | dir = dirname(tmp = dir); 16 | if (tmp === dir) break; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/escape-string-regexp/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; 4 | 5 | module.exports = function (str) { 6 | if (typeof str !== 'string') { 7 | throw new TypeError('Expected a string'); 8 | } 9 | 10 | return str.replace(matchOperatorsRe, '\\$&'); 11 | }; 12 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/escape-string-regexp/readme.md: -------------------------------------------------------------------------------- 1 | # escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp) 2 | 3 | > Escape RegExp special characters 4 | 5 | 6 | ## Install 7 | 8 | ``` 9 | $ npm install --save escape-string-regexp 10 | ``` 11 | 12 | 13 | ## Usage 14 | 15 | ```js 16 | const escapeStringRegexp = require('escape-string-regexp'); 17 | 18 | const escapedString = escapeStringRegexp('how much $ for a unicorn?'); 19 | //=> 'how much \$ for a unicorn\?' 20 | 21 | new RegExp(escapedString); 22 | ``` 23 | 24 | 25 | ## License 26 | 27 | MIT © [Sindre Sorhus](http://sindresorhus.com) 28 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/fsevents/fsevents.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/fsevents/fsevents.node -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/gensync/test/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | presets: [ 3 | ["env", { targets: { node: "current" }}], 4 | ], 5 | } 6 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/globals/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = require('./globals.json'); 3 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/has-flag/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (flag, argv) => { 3 | argv = argv || process.argv; 4 | const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); 5 | const pos = argv.indexOf(prefix + flag); 6 | const terminatorPos = argv.indexOf('--'); 7 | return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); 8 | }; 9 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/inherits/inherits.js: -------------------------------------------------------------------------------- 1 | try { 2 | var util = require('util'); 3 | /* istanbul ignore next */ 4 | if (typeof util.inherits !== 'function') throw ''; 5 | module.exports = util.inherits; 6 | } catch (e) { 7 | /* istanbul ignore next */ 8 | module.exports = require('./inherits_browser.js'); 9 | } 10 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/is-binary-path/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | Check if a file path is a binary file. 3 | 4 | @example 5 | ``` 6 | import isBinaryPath = require('is-binary-path'); 7 | 8 | isBinaryPath('source/unicorn.png'); 9 | //=> true 10 | 11 | isBinaryPath('source/unicorn.txt'); 12 | //=> false 13 | ``` 14 | */ 15 | declare function isBinaryPath(filePath: string): boolean; 16 | 17 | export = isBinaryPath; 18 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/is-binary-path/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const path = require('path'); 3 | const binaryExtensions = require('binary-extensions'); 4 | 5 | const extensions = new Set(binaryExtensions); 6 | 7 | module.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase()); 8 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/is-extglob/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * is-extglob 3 | * 4 | * Copyright (c) 2014-2016, Jon Schlinkert. 5 | * Licensed under the MIT License. 6 | */ 7 | 8 | module.exports = function isExtglob(str) { 9 | if (typeof str !== 'string' || str === '') { 10 | return false; 11 | } 12 | 13 | var match; 14 | while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { 15 | if (match[2]) return true; 16 | str = str.slice(match.index + match[0].length); 17 | } 18 | 19 | return false; 20 | }; 21 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/is-number/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * is-number 3 | * 4 | * Copyright (c) 2014-present, Jon Schlinkert. 5 | * Released under the MIT License. 6 | */ 7 | 8 | 'use strict'; 9 | 10 | module.exports = function(num) { 11 | if (typeof num === 'number') { 12 | return num - num === 0; 13 | } 14 | if (typeof num === 'string' && num.trim() !== '') { 15 | return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); 16 | } 17 | return false; 18 | }; 19 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/make-dir/node_modules/.bin/semver: -------------------------------------------------------------------------------- 1 | ../semver/bin/semver -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/node-releases/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-releases", 3 | "version": "2.0.6", 4 | "description": "Node.js releases data", 5 | "scripts": { 6 | "build": "node scripts/build.js" 7 | }, 8 | "repository": "chicoxyzzy/node-releases", 9 | "keywords": [ 10 | "nodejs", 11 | "releases" 12 | ], 13 | "author": "Sergey Rubanov ", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "semver": "^7.3.5" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/picocolors/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "picocolors", 3 | "version": "1.0.0", 4 | "main": "./picocolors.js", 5 | "types": "./picocolors.d.ts", 6 | "browser": { 7 | "./picocolors.js": "./picocolors.browser.js" 8 | }, 9 | "sideEffects": false, 10 | "description": "The tiniest and the fastest library for terminal output formatting with ANSI colors", 11 | "files": [ 12 | "picocolors.*", 13 | "types.ts" 14 | ], 15 | "keywords": [ 16 | "terminal", 17 | "colors", 18 | "formatting", 19 | "cli", 20 | "console" 21 | ], 22 | "author": "Alexey Raspopov", 23 | "repository": "alexeyraspopov/picocolors", 24 | "license": "ISC" 25 | } 26 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/picocolors/picocolors.browser.js: -------------------------------------------------------------------------------- 1 | var x=String; 2 | var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}}; 3 | module.exports=create(); 4 | module.exports.createColors = create; 5 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/picocolors/picocolors.d.ts: -------------------------------------------------------------------------------- 1 | import { Colors } from "./types" 2 | 3 | declare const picocolors: Colors & { createColors: (enabled?: boolean) => Colors } 4 | 5 | export = picocolors 6 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/picomatch/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = require('./lib/picomatch'); 4 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/semver/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "semver", 3 | "version": "6.3.0", 4 | "description": "The semantic version parser used by npm.", 5 | "main": "semver.js", 6 | "scripts": { 7 | "test": "tap", 8 | "preversion": "npm test", 9 | "postversion": "npm publish", 10 | "postpublish": "git push origin --follow-tags" 11 | }, 12 | "devDependencies": { 13 | "tap": "^14.3.1" 14 | }, 15 | "license": "ISC", 16 | "repository": "https://github.com/npm/node-semver", 17 | "bin": { 18 | "semver": "./bin/semver.js" 19 | }, 20 | "files": [ 21 | "bin", 22 | "range.bnf", 23 | "semver.js" 24 | ], 25 | "tap": { 26 | "check-coverage": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/semver/range.bnf: -------------------------------------------------------------------------------- 1 | range-set ::= range ( logical-or range ) * 2 | logical-or ::= ( ' ' ) * '||' ( ' ' ) * 3 | range ::= hyphen | simple ( ' ' simple ) * | '' 4 | hyphen ::= partial ' - ' partial 5 | simple ::= primitive | partial | tilde | caret 6 | primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial 7 | partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? 8 | xr ::= 'x' | 'X' | '*' | nr 9 | nr ::= '0' | [1-9] ( [0-9] ) * 10 | tilde ::= '~' partial 11 | caret ::= '^' partial 12 | qualifier ::= ( '-' pre )? ( '+' build )? 13 | pre ::= parts 14 | build ::= parts 15 | parts ::= part ( '.' part ) * 16 | part ::= nr | [-0-9A-Za-z]+ 17 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/slash/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = input => { 3 | const isExtendedLengthPath = /^\\\\\?\\/.test(input); 4 | const hasNonAscii = /[^\u0000-\u0080]+/.test(input); // eslint-disable-line no-control-regex 5 | 6 | if (isExtendedLengthPath || hasNonAscii) { 7 | return input; 8 | } 9 | 10 | return input.replace(/\\/g, '/'); 11 | }; 12 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/slash/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slash", 3 | "version": "2.0.0", 4 | "description": "Convert Windows backslash paths to slash paths", 5 | "license": "MIT", 6 | "repository": "sindresorhus/slash", 7 | "author": { 8 | "name": "Sindre Sorhus", 9 | "email": "sindresorhus@gmail.com", 10 | "url": "sindresorhus.com" 11 | }, 12 | "engines": { 13 | "node": ">=6" 14 | }, 15 | "scripts": { 16 | "test": "xo && ava" 17 | }, 18 | "files": [ 19 | "index.js" 20 | ], 21 | "keywords": [ 22 | "path", 23 | "seperator", 24 | "sep", 25 | "slash", 26 | "backslash", 27 | "windows", 28 | "win" 29 | ], 30 | "devDependencies": { 31 | "ava": "*", 32 | "xo": "*" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/supports-color/browser.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = { 3 | stdout: false, 4 | stderr: false 5 | }; 6 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/update-browserslist-db/check-npm-version.js: -------------------------------------------------------------------------------- 1 | let { execSync } = require('child_process') 2 | let pico = require('picocolors') 3 | 4 | try { 5 | let version = parseInt(execSync('npm -v')) 6 | if (version <= 6) { 7 | process.stderr.write( 8 | pico.red( 9 | 'Update npm or call ' + 10 | pico.yellow('npx browserslist@latest --update-db') + 11 | '\n' 12 | ) 13 | ) 14 | process.exit(1) 15 | } 16 | } catch (e) {} 17 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/node_modules/update-browserslist-db/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Run update and print output to terminal. 3 | */ 4 | declare function updateDb(print?: (str: string) => void): Promise 5 | 6 | export = updateDb 7 | -------------------------------------------------------------------------------- /2022-08-02-javascript-ast-manipulation-with-babel-extracting-hardcoded-data/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "babel": "^6.23.0" 4 | }, 5 | "devDependencies": { 6 | "@babel/cli": "^7.18.10", 7 | "@babel/core": "^7.18.10" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /2022-08-14-writing-custom-scrapy-middleware-for-proxy-pool-integration/setting_snippet.py: -------------------------------------------------------------------------------- 1 | # Enable or disable downloader middlewares 2 | # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 3 | DOWNLOADER_MIDDLEWARES = { 4 | 'museums.middlewares.BrightDataDownloaderMiddleware': 500, 5 | } -------------------------------------------------------------------------------- /2022-08-27-building-python-script-clis-with-argparse-and-click/argv_demo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import sys 4 | 5 | 6 | def main(): 7 | if len(sys.argv) == 1: 8 | print("Usage:") 9 | print("{} ...".format(sys.argv[0])) 10 | return 11 | 12 | for arg in sys.argv[1:]: 13 | print(arg) 14 | 15 | 16 | if __name__ == "__main__": 17 | main() 18 | -------------------------------------------------------------------------------- /2022-08-27-building-python-script-clis-with-argparse-and-click/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | click 3 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/dead_branches.js: -------------------------------------------------------------------------------- 1 | if (1 == 2) 2 | console.log("1 == 2"); 3 | 4 | if (1 == 1) { 5 | console.log("1 == 1"); 6 | } else if (1 == 2) { 7 | console.log("1 == 2"); 8 | } else { 9 | console.log("Unreachable as well"); 10 | } 11 | 12 | 1 == 1 ? console.log("yes") : console.log("no"); 13 | 14 | console.log("Hello"); 15 | 16 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/dead_functions.js: -------------------------------------------------------------------------------- 1 | function dead1(a, b) { 2 | return a + b + 1; 3 | } 4 | 5 | function dead2() { 6 | console.log("!!"); 7 | } 8 | 9 | function dead3() { 10 | dead1(1, 2); 11 | dead2(); 12 | } 13 | 14 | console.log("Hello"); 15 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/no_dead_branches.js: -------------------------------------------------------------------------------- 1 | console.log("1 == 1"); 2 | console.log("yes"); 3 | console.log("Hello"); -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/no_dead_functions.js: -------------------------------------------------------------------------------- 1 | console.log("Hello"); -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/babel: -------------------------------------------------------------------------------- 1 | ../@babel/cli/bin/babel.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/babel-external-helpers: -------------------------------------------------------------------------------- 1 | ../@babel/cli/bin/babel-external-helpers.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/browserslist: -------------------------------------------------------------------------------- 1 | ../browserslist/cli.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/browserslist-lint: -------------------------------------------------------------------------------- 1 | ../update-browserslist-db/cli.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/jsesc: -------------------------------------------------------------------------------- 1 | ../jsesc/bin/jsesc -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/json5: -------------------------------------------------------------------------------- 1 | ../json5/lib/cli.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/parser: -------------------------------------------------------------------------------- 1 | ../@babel/parser/bin/babel-parser.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/.bin/semver: -------------------------------------------------------------------------------- 1 | ../semver/bin/semver.js -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/cli/README.md: -------------------------------------------------------------------------------- 1 | # @babel/cli 2 | 3 | > Babel command line. 4 | 5 | See our website [@babel/cli](https://babeljs.io/docs/en/babel-cli) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20cli%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/cli 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/cli --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/cli/bin/babel-external-helpers.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("../lib/babel-external-helpers"); 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/cli/bin/babel.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("../lib/babel"); 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/cli/index.js: -------------------------------------------------------------------------------- 1 | throw new Error("Use the `@babel/core` package instead of `@babel/cli`."); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/code-frame/README.md: -------------------------------------------------------------------------------- 1 | # @babel/code-frame 2 | 3 | > Generate errors that contain a code frame that point to source locations. 4 | 5 | See our website [@babel/code-frame](https://babeljs.io/docs/en/babel-code-frame) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/code-frame 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/code-frame --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/README.md: -------------------------------------------------------------------------------- 1 | # @babel/compat-data 2 | 3 | > 4 | 5 | See our website [@babel/compat-data](https://babeljs.io/docs/en/babel-compat-data) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/compat-data 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/compat-data 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/corejs2-built-ins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/corejs2-built-ins.json"); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/corejs3-shipped-proposals.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/corejs3-shipped-proposals.json"); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/data/corejs3-shipped-proposals.json: -------------------------------------------------------------------------------- 1 | [ 2 | "esnext.global-this", 3 | "esnext.promise.all-settled", 4 | "esnext.string.match-all" 5 | ] 6 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/data/native-modules.json: -------------------------------------------------------------------------------- 1 | { 2 | "es6.module": { 3 | "chrome": "61", 4 | "and_chr": "61", 5 | "edge": "16", 6 | "firefox": "60", 7 | "and_ff": "60", 8 | "node": "13.2.0", 9 | "opera": "48", 10 | "op_mob": "48", 11 | "safari": "10.1", 12 | "ios": "10.3", 13 | "samsung": "8.2", 14 | "android": "61", 15 | "electron": "2.0", 16 | "ios_saf": "10.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/native-modules.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/native-modules.json"); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/overlapping-plugins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/overlapping-plugins.json"); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/plugin-bugfixes.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/plugin-bugfixes.json"); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/compat-data/plugins.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./data/plugins.json"); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/core/README.md: -------------------------------------------------------------------------------- 1 | # @babel/core 2 | 3 | > Babel compiler core. 4 | 5 | See our website [@babel/core](https://babeljs.io/docs/en/babel-core) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/core 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/core --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/generator/README.md: -------------------------------------------------------------------------------- 1 | # @babel/generator 2 | 3 | > Turns an AST into code. 4 | 5 | See our website [@babel/generator](https://babeljs.io/docs/en/babel-generator) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20generator%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/generator 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/generator --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts: -------------------------------------------------------------------------------- 1 | type GeneratedColumn = number; 2 | type SourcesIndex = number; 3 | type SourceLine = number; 4 | type SourceColumn = number; 5 | type NamesIndex = number; 6 | 7 | export type SourceMapSegment = 8 | | [GeneratedColumn] 9 | | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] 10 | | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; 11 | 12 | export const COLUMN = 0; 13 | export const SOURCES_INDEX = 1; 14 | export const SOURCE_LINE = 2; 15 | export const SOURCE_COLUMN = 3; 16 | export const NAMES_INDEX = 4; 17 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-compilation-targets/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-compilation-targets 2 | 3 | > Helper functions on Babel compilation targets 4 | 5 | See our website [@babel/helper-compilation-targets](https://babeljs.io/docs/en/babel-helper-compilation-targets) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-compilation-targets 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-compilation-targets 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-environment-visitor/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-environment-visitor 2 | 3 | > Helper visitor to only visit nodes in the current 'this' context 4 | 5 | See our website [@babel/helper-environment-visitor](https://babeljs.io/docs/en/babel-helper-environment-visitor) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/helper-environment-visitor 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-environment-visitor --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-function-name/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-function-name 2 | 3 | > Helper function to change the property 'name' of every function 4 | 5 | See our website [@babel/helper-function-name](https://babeljs.io/docs/en/babel-helper-function-name) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-function-name 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-function-name 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-hoist-variables/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-hoist-variables 2 | 3 | > Helper function to hoist variables 4 | 5 | See our website [@babel/helper-hoist-variables](https://babeljs.io/docs/en/babel-helper-hoist-variables) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-hoist-variables 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-hoist-variables 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-module-imports/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-module-imports 2 | 3 | > Babel helper functions for inserting module loads 4 | 5 | See our website [@babel/helper-module-imports](https://babeljs.io/docs/en/babel-helper-module-imports) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-module-imports 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-module-imports 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-module-transforms/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-module-transforms 2 | 3 | > Babel helper functions for implementing ES6 module transformations 4 | 5 | See our website [@babel/helper-module-transforms](https://babeljs.io/docs/en/babel-helper-module-transforms) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-module-transforms 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-module-transforms 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-simple-access/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-simple-access 2 | 3 | > Babel helper for ensuring that access to a given value is performed through simple accesses 4 | 5 | See our website [@babel/helper-simple-access](https://babeljs.io/docs/en/babel-helper-simple-access) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-simple-access 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-simple-access 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-split-export-declaration/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-split-export-declaration 2 | 3 | > 4 | 5 | See our website [@babel/helper-split-export-declaration](https://babeljs.io/docs/en/babel-helper-split-export-declaration) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-split-export-declaration 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-split-export-declaration 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-string-parser/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-string-parser 2 | 3 | > A utility package to parse strings 4 | 5 | See our website [@babel/helper-string-parser](https://babeljs.io/docs/en/babel-helper-string-parser) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-string-parser 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-string-parser 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-validator-identifier/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-validator-identifier 2 | 3 | > Validate identifier/keywords name 4 | 5 | See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/en/babel-helper-validator-identifier) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-validator-identifier 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-validator-identifier 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helper-validator-option/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helper-validator-option 2 | 3 | > Validate plugin/preset options 4 | 5 | See our website [@babel/helper-validator-option](https://babeljs.io/docs/en/babel-helper-validator-option) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save @babel/helper-validator-option 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helper-validator-option 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helpers/README.md: -------------------------------------------------------------------------------- 1 | # @babel/helpers 2 | 3 | > Collection of helper functions used by Babel transforms. 4 | 5 | See our website [@babel/helpers](https://babeljs.io/docs/en/babel-helpers) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/helpers 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/helpers --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/helpers/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/highlight/README.md: -------------------------------------------------------------------------------- 1 | # @babel/highlight 2 | 3 | > Syntax highlight JavaScript strings for output in terminals. 4 | 5 | See our website [@babel/highlight](https://babeljs.io/docs/en/babel-highlight) for more information. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/highlight 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/highlight --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/parser/README.md: -------------------------------------------------------------------------------- 1 | # @babel/parser 2 | 3 | > A JavaScript parser 4 | 5 | See our website [@babel/parser](https://babeljs.io/docs/en/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%20(babylon)%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/parser 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/parser --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/parser/bin/babel-parser.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* eslint no-var: 0 */ 3 | 4 | var parser = require(".."); 5 | var fs = require("fs"); 6 | 7 | var filename = process.argv[2]; 8 | if (!filename) { 9 | console.error("no filename specified"); 10 | } else { 11 | var file = fs.readFileSync(filename, "utf8"); 12 | var ast = parser.parse(file); 13 | 14 | console.log(JSON.stringify(ast, null, " ")); 15 | } 16 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/parser/index.cjs: -------------------------------------------------------------------------------- 1 | try { 2 | module.exports = require("./lib/index.cjs"); 3 | } catch { 4 | module.exports = require("./lib/index.js"); 5 | } 6 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/template/README.md: -------------------------------------------------------------------------------- 1 | # @babel/template 2 | 3 | > Generate an AST from a string template. 4 | 5 | See our website [@babel/template](https://babeljs.io/docs/en/babel-template) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20template%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/template 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/template --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/traverse/README.md: -------------------------------------------------------------------------------- 1 | # @babel/traverse 2 | 3 | > The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes 4 | 5 | See our website [@babel/traverse](https://babeljs.io/docs/en/babel-traverse) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20traverse%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/traverse 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/traverse --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/traverse/scripts/generators/asserts.js: -------------------------------------------------------------------------------- 1 | import * as t from "@babel/types"; 2 | 3 | export default function generateAsserts() { 4 | let output = `/* 5 | * This file is auto-generated! Do not modify it directly. 6 | * To re-generate run 'make build' 7 | */ 8 | import * as t from "@babel/types"; 9 | import NodePath from "../index"; 10 | 11 | 12 | export interface NodePathAssetions {`; 13 | 14 | for (const type of [...t.TYPES].sort()) { 15 | output += ` 16 | assert${type}( 17 | opts?: object, 18 | ): asserts this is NodePath;`; 19 | } 20 | 21 | output += ` 22 | }`; 23 | 24 | return output; 25 | } 26 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/traverse/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/types/README.md: -------------------------------------------------------------------------------- 1 | # @babel/types 2 | 3 | > Babel Types is a Lodash-esque utility library for AST nodes 4 | 5 | See our website [@babel/types](https://babeljs.io/docs/en/babel-types) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20types%22+is%3Aopen) associated with this package. 6 | 7 | ## Install 8 | 9 | Using npm: 10 | 11 | ```sh 12 | npm install --save-dev @babel/types 13 | ``` 14 | 15 | or using yarn: 16 | 17 | ```sh 18 | yarn add @babel/types --dev 19 | ``` 20 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/types/scripts/generators/constants.js: -------------------------------------------------------------------------------- 1 | import * as definitions from "../../lib/definitions/index.js"; 2 | 3 | export default function generateConstants() { 4 | let output = `/* 5 | * This file is auto-generated! Do not modify it directly. 6 | * To re-generate run 'make build' 7 | */ 8 | import { FLIPPED_ALIAS_KEYS } from "../../definitions";\n\n`; 9 | 10 | Object.keys(definitions.FLIPPED_ALIAS_KEYS).forEach(type => { 11 | output += `export const ${type.toUpperCase()}_TYPES = FLIPPED_ALIAS_KEYS["${type}"];\n`; 12 | }); 13 | 14 | return output; 15 | } 16 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/types/scripts/package.json: -------------------------------------------------------------------------------- 1 | { "type": "module" } 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/types/scripts/utils/formatBuilderName.js: -------------------------------------------------------------------------------- 1 | const toLowerCase = Function.call.bind("".toLowerCase); 2 | 3 | export default function formatBuilderName(type) { 4 | // FunctionExpression -> functionExpression 5 | // JSXIdentifier -> jsxIdentifier 6 | // V8IntrinsicIdentifier -> v8IntrinsicIdentifier 7 | return type.replace(/^([A-Z](?=[a-z0-9])|[A-Z]+(?=[A-Z]))/, toLowerCase); 8 | } 9 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/types/scripts/utils/lowerFirst.js: -------------------------------------------------------------------------------- 1 | export default function lowerFirst(string) { 2 | return string[0].toLowerCase() + string.slice(1); 3 | } 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@babel/types/scripts/utils/toFunctionName.js: -------------------------------------------------------------------------------- 1 | export default function toFunctionName(typeName) { 2 | const _ = typeName.replace(/^TS/, "ts").replace(/^JSX/, "jsx"); 3 | return _.slice(0, 1).toLowerCase() + _.slice(1); 4 | } 5 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/@nicolo-ribaudo/chokidar-2/README.md: -------------------------------------------------------------------------------- 1 | # `@nicolo-ribaudo/chokidar-2` 2 | 3 | A wrapper around `chokidar@2.1.8` that doesn't depend on `fsevents@1`. 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/balanced-match/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | tidelift: "npm/balanced-match" 2 | patreon: juliangruber 3 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/binary-extensions/binary-extensions.json.d.ts: -------------------------------------------------------------------------------- 1 | declare const binaryExtensionsJson: readonly string[]; 2 | 3 | export = binaryExtensionsJson; 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/binary-extensions/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | List of binary file extensions. 3 | 4 | @example 5 | ``` 6 | import binaryExtensions = require('binary-extensions'); 7 | 8 | console.log(binaryExtensions); 9 | //=> ['3ds', '3g2', …] 10 | ``` 11 | */ 12 | declare const binaryExtensions: readonly string[]; 13 | 14 | export = binaryExtensions; 15 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/binary-extensions/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./binary-extensions.json'); 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/browserslist/error.d.ts: -------------------------------------------------------------------------------- 1 | declare class BrowserslistError extends Error { 2 | constructor(message: any) 3 | name: 'BrowserslistError' 4 | browserslist: true 5 | } 6 | 7 | export = BrowserslistError 8 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/browserslist/error.js: -------------------------------------------------------------------------------- 1 | function BrowserslistError(message) { 2 | this.name = 'BrowserslistError' 3 | this.message = message 4 | this.browserslist = true 5 | if (Error.captureStackTrace) { 6 | Error.captureStackTrace(this, BrowserslistError) 7 | } 8 | } 9 | 10 | BrowserslistError.prototype = Error.prototype 11 | 12 | module.exports = BrowserslistError 13 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/caniuse-lite/data/browsers.js: -------------------------------------------------------------------------------- 1 | module.exports={A:"ie",B:"edge",C:"firefox",D:"chrome",E:"safari",F:"opera",G:"ios_saf",H:"op_mini",I:"android",J:"bb",K:"op_mob",L:"and_chr",M:"and_ff",N:"ie_mob",O:"and_uc",P:"samsung",Q:"and_qq",R:"baidu",S:"kaios"}; 2 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/color-name/README.md: -------------------------------------------------------------------------------- 1 | A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. 2 | 3 | [![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) 4 | 5 | 6 | ```js 7 | var colors = require('color-name'); 8 | colors.red //[255,0,0] 9 | ``` 10 | 11 | 12 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/color-name/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "color-name", 3 | "version": "1.1.3", 4 | "description": "A list of color names and its values", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git@github.com:dfcreative/color-name.git" 12 | }, 13 | "keywords": [ 14 | "color-name", 15 | "color", 16 | "color-keyword", 17 | "keyword" 18 | ], 19 | "author": "DY ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/dfcreative/color-name/issues" 23 | }, 24 | "homepage": "https://github.com/dfcreative/color-name" 25 | } 26 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/color-name/test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | var names = require('./'); 4 | var assert = require('assert'); 5 | 6 | assert.deepEqual(names.red, [255,0,0]); 7 | assert.deepEqual(names.aliceblue, [240,248,255]); 8 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/concat-map/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/concat-map/example/map.js: -------------------------------------------------------------------------------- 1 | var concatMap = require('../'); 2 | var xs = [ 1, 2, 3, 4, 5, 6 ]; 3 | var ys = concatMap(xs, function (x) { 4 | return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; 5 | }); 6 | console.dir(ys); 7 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/concat-map/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (xs, fn) { 2 | var res = []; 3 | for (var i = 0; i < xs.length; i++) { 4 | var x = fn(xs[i], i); 5 | if (isArray(x)) res.push.apply(res, x); 6 | else res.push(x); 7 | } 8 | return res; 9 | }; 10 | 11 | var isArray = Array.isArray || function (xs) { 12 | return Object.prototype.toString.call(xs) === '[object Array]'; 13 | }; 14 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/debug/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Detect Electron renderer / nwjs process, which is node, but we should 3 | * treat as a browser. 4 | */ 5 | 6 | if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { 7 | module.exports = require('./browser.js'); 8 | } else { 9 | module.exports = require('./node.js'); 10 | } 11 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/electron-to-chromium/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | v1.3.0 2 | * Additionally include chromium to electron mappings 3 | 4 | v1.2.0 5 | * versions and full-versions are now separately importable. 6 | 7 | v1.1.0 8 | * Both electronToChromium and electronToBrowserList now can accept strings as well as numbers. 9 | 10 | v1.0.1 11 | Update documentation 12 | 13 | v1.0.0 14 | Inititial release 15 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/electron-to-chromium/chromium-versions.json: -------------------------------------------------------------------------------- 1 | {"39":"0.20","40":"0.21","41":"0.21","42":"0.25","43":"0.27","44":"0.30","45":"0.31","47":"0.36","49":"0.37","50":"1.1","51":"1.2","52":"1.3","53":"1.4","54":"1.4","56":"1.6","58":"1.7","59":"1.8","61":"2.0","66":"3.0","69":"4.0","72":"5.0","73":"5.0","76":"6.0","78":"7.0","79":"8.0","80":"8.0","82":"9.0","83":"9.0","84":"10.0","85":"10.0","86":"11.0","87":"11.0","89":"12.0","90":"13.0","91":"13.0","92":"14.0","93":"14.0","94":"15.0","95":"16.0","96":"16.0","98":"17.0","99":"18.0","100":"18.0","102":"19.0","103":"20.0","104":"20.0","105":"21.0"} -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/escalade/index.d.ts: -------------------------------------------------------------------------------- 1 | type Promisable = T | Promise; 2 | export type Callback = (directory: string, files: string[]) => Promisable; 3 | export default function (directory: string, callback: Callback): Promise; 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/escalade/sync/index.d.ts: -------------------------------------------------------------------------------- 1 | export type Callback = (directory: string, files: string[]) => string | false | void; 2 | export default function (directory: string, callback: Callback): string | void; 3 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/escalade/sync/index.js: -------------------------------------------------------------------------------- 1 | const { dirname, resolve } = require('path'); 2 | const { readdirSync, statSync } = require('fs'); 3 | 4 | module.exports = function (start, callback) { 5 | let dir = resolve('.', start); 6 | let tmp, stats = statSync(dir); 7 | 8 | if (!stats.isDirectory()) { 9 | dir = dirname(dir); 10 | } 11 | 12 | while (true) { 13 | tmp = callback(dir, readdirSync(dir)); 14 | if (tmp) return resolve(dir, tmp); 15 | dir = dirname(tmp = dir); 16 | if (tmp === dir) break; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/escalade/sync/index.mjs: -------------------------------------------------------------------------------- 1 | import { dirname, resolve } from 'path'; 2 | import { readdirSync, statSync } from 'fs'; 3 | 4 | export default function (start, callback) { 5 | let dir = resolve('.', start); 6 | let tmp, stats = statSync(dir); 7 | 8 | if (!stats.isDirectory()) { 9 | dir = dirname(dir); 10 | } 11 | 12 | while (true) { 13 | tmp = callback(dir, readdirSync(dir)); 14 | if (tmp) return resolve(dir, tmp); 15 | dir = dirname(tmp = dir); 16 | if (tmp === dir) break; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/escape-string-regexp/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; 4 | 5 | module.exports = function (str) { 6 | if (typeof str !== 'string') { 7 | throw new TypeError('Expected a string'); 8 | } 9 | 10 | return str.replace(matchOperatorsRe, '\\$&'); 11 | }; 12 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/escape-string-regexp/readme.md: -------------------------------------------------------------------------------- 1 | # escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp) 2 | 3 | > Escape RegExp special characters 4 | 5 | 6 | ## Install 7 | 8 | ``` 9 | $ npm install --save escape-string-regexp 10 | ``` 11 | 12 | 13 | ## Usage 14 | 15 | ```js 16 | const escapeStringRegexp = require('escape-string-regexp'); 17 | 18 | const escapedString = escapeStringRegexp('how much $ for a unicorn?'); 19 | //=> 'how much \$ for a unicorn\?' 20 | 21 | new RegExp(escapedString); 22 | ``` 23 | 24 | 25 | ## License 26 | 27 | MIT © [Sindre Sorhus](http://sindresorhus.com) 28 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/fsevents/fsevents.node: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/fsevents/fsevents.node -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/gensync/test/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | presets: [ 3 | ["env", { targets: { node: "current" }}], 4 | ], 5 | } 6 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/globals/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = require('./globals.json'); 3 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/has-flag/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (flag, argv) => { 3 | argv = argv || process.argv; 4 | const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); 5 | const pos = argv.indexOf(prefix + flag); 6 | const terminatorPos = argv.indexOf('--'); 7 | return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); 8 | }; 9 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/inherits/inherits.js: -------------------------------------------------------------------------------- 1 | try { 2 | var util = require('util'); 3 | /* istanbul ignore next */ 4 | if (typeof util.inherits !== 'function') throw ''; 5 | module.exports = util.inherits; 6 | } catch (e) { 7 | /* istanbul ignore next */ 8 | module.exports = require('./inherits_browser.js'); 9 | } 10 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/is-binary-path/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | Check if a file path is a binary file. 3 | 4 | @example 5 | ``` 6 | import isBinaryPath = require('is-binary-path'); 7 | 8 | isBinaryPath('source/unicorn.png'); 9 | //=> true 10 | 11 | isBinaryPath('source/unicorn.txt'); 12 | //=> false 13 | ``` 14 | */ 15 | declare function isBinaryPath(filePath: string): boolean; 16 | 17 | export = isBinaryPath; 18 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/is-binary-path/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const path = require('path'); 3 | const binaryExtensions = require('binary-extensions'); 4 | 5 | const extensions = new Set(binaryExtensions); 6 | 7 | module.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase()); 8 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/is-extglob/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * is-extglob 3 | * 4 | * Copyright (c) 2014-2016, Jon Schlinkert. 5 | * Licensed under the MIT License. 6 | */ 7 | 8 | module.exports = function isExtglob(str) { 9 | if (typeof str !== 'string' || str === '') { 10 | return false; 11 | } 12 | 13 | var match; 14 | while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { 15 | if (match[2]) return true; 16 | str = str.slice(match.index + match[0].length); 17 | } 18 | 19 | return false; 20 | }; 21 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/is-number/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * is-number 3 | * 4 | * Copyright (c) 2014-present, Jon Schlinkert. 5 | * Released under the MIT License. 6 | */ 7 | 8 | 'use strict'; 9 | 10 | module.exports = function(num) { 11 | if (typeof num === 'number') { 12 | return num - num === 0; 13 | } 14 | if (typeof num === 'string' && num.trim() !== '') { 15 | return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); 16 | } 17 | return false; 18 | }; 19 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/make-dir/node_modules/.bin/semver: -------------------------------------------------------------------------------- 1 | ../semver/bin/semver -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/node-releases/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-releases", 3 | "version": "2.0.6", 4 | "description": "Node.js releases data", 5 | "scripts": { 6 | "build": "node scripts/build.js" 7 | }, 8 | "repository": "chicoxyzzy/node-releases", 9 | "keywords": [ 10 | "nodejs", 11 | "releases" 12 | ], 13 | "author": "Sergey Rubanov ", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "semver": "^7.3.5" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/picocolors/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "picocolors", 3 | "version": "1.0.0", 4 | "main": "./picocolors.js", 5 | "types": "./picocolors.d.ts", 6 | "browser": { 7 | "./picocolors.js": "./picocolors.browser.js" 8 | }, 9 | "sideEffects": false, 10 | "description": "The tiniest and the fastest library for terminal output formatting with ANSI colors", 11 | "files": [ 12 | "picocolors.*", 13 | "types.ts" 14 | ], 15 | "keywords": [ 16 | "terminal", 17 | "colors", 18 | "formatting", 19 | "cli", 20 | "console" 21 | ], 22 | "author": "Alexey Raspopov", 23 | "repository": "alexeyraspopov/picocolors", 24 | "license": "ISC" 25 | } 26 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/picocolors/picocolors.browser.js: -------------------------------------------------------------------------------- 1 | var x=String; 2 | var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}}; 3 | module.exports=create(); 4 | module.exports.createColors = create; 5 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/picocolors/picocolors.d.ts: -------------------------------------------------------------------------------- 1 | import { Colors } from "./types" 2 | 3 | declare const picocolors: Colors & { createColors: (enabled?: boolean) => Colors } 4 | 5 | export = picocolors 6 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/picomatch/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = require('./lib/picomatch'); 4 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/semver/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "semver", 3 | "version": "6.3.0", 4 | "description": "The semantic version parser used by npm.", 5 | "main": "semver.js", 6 | "scripts": { 7 | "test": "tap", 8 | "preversion": "npm test", 9 | "postversion": "npm publish", 10 | "postpublish": "git push origin --follow-tags" 11 | }, 12 | "devDependencies": { 13 | "tap": "^14.3.1" 14 | }, 15 | "license": "ISC", 16 | "repository": "https://github.com/npm/node-semver", 17 | "bin": { 18 | "semver": "./bin/semver.js" 19 | }, 20 | "files": [ 21 | "bin", 22 | "range.bnf", 23 | "semver.js" 24 | ], 25 | "tap": { 26 | "check-coverage": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/slash/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = input => { 3 | const isExtendedLengthPath = /^\\\\\?\\/.test(input); 4 | const hasNonAscii = /[^\u0000-\u0080]+/.test(input); // eslint-disable-line no-control-regex 5 | 6 | if (isExtendedLengthPath || hasNonAscii) { 7 | return input; 8 | } 9 | 10 | return input.replace(/\\/g, '/'); 11 | }; 12 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/supports-color/browser.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = { 3 | stdout: false, 4 | stderr: false 5 | }; 6 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/update-browserslist-db/check-npm-version.js: -------------------------------------------------------------------------------- 1 | let { execSync } = require('child_process') 2 | let pico = require('picocolors') 3 | 4 | try { 5 | let version = parseInt(execSync('npm -v')) 6 | if (version <= 6) { 7 | process.stderr.write( 8 | pico.red( 9 | 'Update npm or call ' + 10 | pico.yellow('npx browserslist@latest --update-db') + 11 | '\n' 12 | ) 13 | ) 14 | process.exit(1) 15 | } 16 | } catch (e) {} 17 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/node_modules/update-browserslist-db/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Run update and print output to terminal. 3 | */ 4 | declare function updateDb(print?: (str: string) => void): Promise 5 | 6 | export = updateDb 7 | -------------------------------------------------------------------------------- /2022-08-27-javascript-ast-manipulation-with-babel-removing-unreachable-code/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "@babel/cli": "^7.18.10", 4 | "@babel/core": "^7.18.13" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /2022-10-08-javascript-ast-manipulation-with-babel-defeating-string-array-mapping/obfuscated.js: -------------------------------------------------------------------------------- 1 | var _0x3baf=["Hello Venus","log","Hello Earth","Hello Mars"];console[_0x3baf[1]](_0x3baf[0]);console[_0x3baf[1]](_0x3baf[2]);console[_0x3baf[1]](_0x3baf[3]) 2 | -------------------------------------------------------------------------------- /2022-10-08-javascript-ast-manipulation-with-babel-defeating-string-array-mapping/orig.js: -------------------------------------------------------------------------------- 1 | console.log("Hello Venus"); 2 | console.log("Hello Earth"); 3 | console.log("Hello Mars"); 4 | -------------------------------------------------------------------------------- /2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development/deobfuscate2.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | 4 | const babel = require("@babel/core"); 5 | const t = require("@babel/types"); 6 | 7 | const result = babel.transformFileSync(path.join(__dirname, 'input.js') , { 8 | plugins: [ 9 | path.join(__dirname, 'plugin_unhex.js'), 10 | path.join(__dirname, 'plugin_unbracket.js'), 11 | path.join(__dirname, 'plugin_rm_empty.js') 12 | ] 13 | }); 14 | 15 | console.log(result.code); 16 | 17 | fs.writeFileSync(path.join(__dirname, 'output.js'), result.code, 'utf-8'); 18 | 19 | -------------------------------------------------------------------------------- /2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development/input.js: -------------------------------------------------------------------------------- 1 | console["log"]("\x41\x42\x43"); // ABC 2 | ;;;;;console.log("123");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -------------------------------------------------------------------------------- /2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development/output.js: -------------------------------------------------------------------------------- 1 | console.log("ABC"); // ABC 2 | console.log("123"); -------------------------------------------------------------------------------- /2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development/plugin_rm_empty.js: -------------------------------------------------------------------------------- 1 | const babel = require("@babel/core"); 2 | const t = require("@babel/types"); 3 | 4 | module.exports = function (babel) { 5 | return { 6 | name: "rm_needless_semicolons", 7 | visitor: { 8 | EmptyStatement: function (path) { 9 | path.remove(); 10 | } 11 | } 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development/plugin_unbracket.js: -------------------------------------------------------------------------------- 1 | const babel = require("@babel/core"); 2 | const t = require("@babel/types"); 3 | 4 | module.exports = function (babel) { 5 | return { 6 | name: "bracket_to_dot", 7 | visitor: { 8 | CallExpression: function (path) { 9 | let prop = path.node.callee.property; 10 | 11 | if (t.isStringLiteral(prop)) { 12 | path.node.callee.property = t.Identifier(prop.value); 13 | path.node.callee.computed = false; 14 | } 15 | } 16 | } 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /2023-01-18-javascript-ast-manipulation-with-babel-transform-prototyping-and-plugin-development/plugin_unhex.js: -------------------------------------------------------------------------------- 1 | const babel = require("@babel/core"); 2 | const t = require("@babel/types"); 3 | 4 | module.exports = function (babel) { 5 | return { 6 | name: "undo_hexadecimal_strings", 7 | visitor: { 8 | StringLiteral: function (path) { 9 | path.node.extra.raw = '"' + path.node.extra.rawValue + '"'; 10 | } 11 | } 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /2023-01-23-javascript-ast-manipulation-with-babel-3-ways-to-create-nodes-with-subtrees/templ.js: -------------------------------------------------------------------------------- 1 | const parser = require("@babel/parser"); 2 | const generate = require("@babel/generator").default; 3 | const t = require("@babel/types"); 4 | const template = require("@babel/template").default; 5 | 6 | const exampleTempl = template(` 7 | debugger; 8 | console.log(%%msg%%); 9 | debugger; 10 | `); 11 | 12 | const body = exampleTempl({ 13 | msg: t.stringLiteral("!") 14 | }); 15 | 16 | const ast = parser.parse(""); 17 | 18 | ast.program.body = body; 19 | 20 | console.log(ast); 21 | console.log("=================="); 22 | console.log(generate(ast).code); 23 | 24 | -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/1.js: -------------------------------------------------------------------------------- 1 | let x = 10; 2 | let y = 20; 3 | 4 | { 5 | let y = 30; 6 | console.log(x + y); 7 | } 8 | 9 | console.log(x + y); 10 | -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/2.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | Program(path) { 8 | console.log(path.scope); 9 | } 10 | } 11 | }; 12 | } 13 | 14 | -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/3.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | VariableDeclarator(path) { 8 | if (path.node.id.name == "y") { 9 | console.log(path.scope); 10 | console.log("PARENT", path.scope.parent); 11 | } 12 | } 13 | } 14 | }; 15 | } 16 | 17 | -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/4.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | VariableDeclarator(path) { 8 | let idName = path.node.id.name; 9 | let parentScope = path.scope.parent; 10 | if (!parentScope) return; 11 | if (parentScope.getBinding(idName)) { 12 | let newName = path.scope.generateUidIdentifier(idName); 13 | path.scope.rename(idName, newName.name); 14 | } 15 | } 16 | } 17 | }; 18 | } -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/5.js: -------------------------------------------------------------------------------- 1 | let x = 10; 2 | let y = 20; 3 | { 4 | let _y = 30; 5 | console.log(x + _y); 6 | } 7 | console.log(x + y); -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/7.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | FunctionDeclaration(path) { 8 | let fnName = path.node.id.name; 9 | let binding = path.scope.getBinding(fnName); 10 | if (!binding.referenced) path.remove(); 11 | } 12 | } 13 | }; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /2023-01-25-javascript-ast-manipulation-with-babel-untangling-scope-confusion/8.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | { 3 | { 4 | function b(a, b) { 5 | return Array.prototype.slice.call(a).concat(Array.prototype.slice.call(b)); 6 | } 7 | 8 | function c() { 9 | var a = arguments[0], 10 | c = Array.prototype.slice.call(arguments, 1); 11 | 12 | var b = function () { 13 | return a.apply(this, c.concat(Array.prototype.slice.call(arguments))); 14 | }; 15 | 16 | b.prototype = a.prototype; 17 | return b; 18 | } 19 | } 20 | var a = []; 21 | a[0] = 10; 22 | a[1] = 20; 23 | a[2] = 30; 24 | console.log(a[0] + a[2]); 25 | console.log(a[0] + a[1]); 26 | } 27 | })(); -------------------------------------------------------------------------------- /2023-01-30-javascript-ast-manipulation-with-babel-ast-modification-apis/say_abc.js: -------------------------------------------------------------------------------- 1 | function say_abc() { 2 | console.log("a"); 3 | console.log("b"); 4 | console.log("c"); 5 | } 6 | 7 | say_abc(); 8 | -------------------------------------------------------------------------------- /2023-01-30-javascript-ast-manipulation-with-babel-ast-modification-apis/transform.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | FunctionDeclaration(path) { 8 | let body = path.get('body'); 9 | body.unshiftContainer('body', t.debuggerStatement()); 10 | body.pushContainer('body', t.debuggerStatement()); 11 | } 12 | } 13 | }; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /2023-01-30-javascript-ast-manipulation-with-babel-ast-modification-apis/transformed.js: -------------------------------------------------------------------------------- 1 | function say_abc() { 2 | debugger; 3 | console.log("a"); 4 | console.log("b"); 5 | console.log("c"); 6 | debugger; 7 | } 8 | 9 | say_abc(); 10 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/ast_explorer_constfold.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | BinaryExpression(path) { 8 | let evaluated = path.evaluate(); 9 | if (!evaluated) return; 10 | if (!evaluated.confident) return; 11 | 12 | let value = evaluated.value; 13 | let valueNode = t.valueToNode(value); 14 | if (!t.isLiteral(valueNode)) return; 15 | 16 | path.replaceWith(valueNode); 17 | } 18 | } 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/ast_explorer_constprop.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | VariableDeclarator(path) { 8 | if (path.node.init == null) return; 9 | if (!t.isLiteral(path.node.init)) return; 10 | const binding = path.scope.getBinding(path.node.id.name); 11 | if (!binding.constant) return; 12 | for (let i = 0; i < binding.referencePaths.length; i++) { 13 | let refPath = binding.referencePaths[i]; 14 | refPath.replaceWith(path.node.init); 15 | } 16 | path.remove(); 17 | } 18 | } 19 | }; 20 | } 21 | 22 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/ast_explorer_unhex.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | NumericLiteral(path) { 8 | if (path.node.extra.raw.startsWith("0x")) delete path.node.extra.raw; 9 | }, 10 | } 11 | }; 12 | } 13 | 14 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/constfolded.js: -------------------------------------------------------------------------------- 1 | const fourtyTwo = 42; 2 | const msg = "The answer is:"; 3 | console['log'](msg, fourtyTwo); 4 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/constpropagated.js: -------------------------------------------------------------------------------- 1 | console.log("The answer is:", 42); 2 | let t; 3 | t = Math.floor(Date.now() / 1000); 4 | console.log(t); 5 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/input.js: -------------------------------------------------------------------------------- 1 | const fourtyTwo = 42; 2 | const msg = "The answer is:"; 3 | console.log(msg, fourtyTwo); -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/input2.js: -------------------------------------------------------------------------------- 1 | const fourtyTwo = 42; 2 | const msg = "The answer is:"; 3 | console.log(msg, fourtyTwo); 4 | 5 | let t; 6 | t = Math.floor(Date.now() / 1000); 7 | console.log(t); 8 | -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/obfuscated.js: -------------------------------------------------------------------------------- 1 | const fourtyTwo = 0x25fb + 0x3eb * -0x9 + -0x28e; 2 | const msg = 'The\x20answer' + '\x20is:'; 3 | console['log'](msg, fourtyTwo); -------------------------------------------------------------------------------- /2023-02-07-javascript-ast-manipulation-with-babel-constant-folding-and-propagation/unhexed.js: -------------------------------------------------------------------------------- 1 | const fourtyTwo = 9723 + 1003 * -9 + -654; 2 | const msg = 'The\x20answer' + '\x20is:'; 3 | console['log'](msg, fourtyTwo); 4 | -------------------------------------------------------------------------------- /2023-02-13-javascript-ast-manipulation-with-babel-reducing-indirection-undoing-string-concealing/transform2.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | VariableDeclarator(path) { 8 | let node = path.node; 9 | if (!node.init) return; 10 | if (!t.isIdentifier(node.init)) return; 11 | let scope = path.scope; 12 | let binding = scope.getBinding(node.id.name); 13 | 14 | for (let refPath of binding.referencePaths) { 15 | refPath.replaceWith(node.init); 16 | } 17 | path.remove(); 18 | } 19 | } 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /2023-02-18-javascript-ast-manipulation-with-babel-reducing-nestedness-unflattening-the-cfg/in.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | function foo () { 3 | return function () { 4 | var sum = 1 + 2; 5 | console.log(1); 6 | console.log(2); 7 | console.log(3); 8 | console.log(4); 9 | console.log(5); 10 | console.log(6); 11 | } 12 | } 13 | 14 | foo()(); 15 | })(); -------------------------------------------------------------------------------- /2023-02-18-javascript-ast-manipulation-with-babel-reducing-nestedness-unflattening-the-cfg/out.js: -------------------------------------------------------------------------------- 1 | function pWydz(_0x237610) { 2 | return _0x237610(); 3 | } 4 | 5 | function Ssbzl(_0x113c5a, _0x2b9ca8) { 6 | return _0x113c5a + _0x2b9ca8; 7 | } 8 | 9 | function _0x11c3ac() { 10 | function YnoJz(_0x5ad206, _0x2b2bb5) { 11 | return Ssbzl(_0x5ad206, _0x2b2bb5); 12 | } 13 | 14 | return function () { 15 | var _0x143f46 = 0x0; 16 | 17 | var _0x3c58ad = YnoJz(0x1, 0x2); 18 | 19 | console.log(0x1); 20 | console.log(0x2); 21 | console.log(0x3); 22 | console.log(0x4); 23 | console.log(0x5); 24 | console.log(0x6); 25 | }; 26 | } 27 | 28 | pWydz(_0x11c3ac)(); -------------------------------------------------------------------------------- /2023-02-18-javascript-ast-manipulation-with-babel-reducing-nestedness-unflattening-the-cfg/transform1.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | ExpressionStatement(path) { 8 | if (!t.isProgram(path.parent)) return; 9 | let node = path.node; 10 | let expr = node.expression; 11 | if (!t.isCallExpression(expr)) return; 12 | let callee = expr.callee; 13 | if (!t.isFunctionExpression(callee)) return; 14 | let innerStatements = callee.body.body; 15 | path.replaceWithMultiple(innerStatements); 16 | } 17 | } 18 | }; 19 | } -------------------------------------------------------------------------------- /2023-02-18-javascript-ast-manipulation-with-babel-reducing-nestedness-unflattening-the-cfg/transform2.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | UnaryExpression(path) { 8 | let result = path.evaluate(); 9 | if (result.confident) { 10 | path.replaceWith(t.valueToNode(result.value)); 11 | } 12 | } 13 | } 14 | }; 15 | } -------------------------------------------------------------------------------- /2023-02-18-javascript-ast-manipulation-with-babel-reducing-nestedness-unflattening-the-cfg/transform3.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | CallExpression(path) { 8 | let prop = path.node.callee.property; 9 | 10 | if (t.isStringLiteral(prop)) { 11 | path.node.callee.property = t.identifier(prop.value); 12 | path.node.callee.computed = false; 13 | } 14 | } 15 | } 16 | }; 17 | } -------------------------------------------------------------------------------- /2023-03-14-dont-jsfuck-with-me-part-2/ast_explorer_simplify_string_name.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "simplify-string-name", // not required 6 | visitor: { 7 | MemberExpression(path) { 8 | let node = path.node; 9 | if (!t.isIdentifier(node.object)) return; 10 | if (!t.isStringLiteral(node.property)) return; 11 | if (node.object.name === "String" && node.property.value === "name") { 12 | path.replaceWith(t.valueToNode("String")); 13 | } 14 | } 15 | } 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /2023-03-14-dont-jsfuck-with-me-part-2/ast_explorer_undo_boolean_trick.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "undo-boolean-trick", // not required 6 | visitor: { 7 | Identifier(path) { 8 | let node = path.node; 9 | if (!t.isBinaryExpression(path.parent)) return; 10 | if (path.parent.operator != "+") return; 11 | if (node.name === "Boolean") path.replaceWith(t.valueToNode(String(Boolean))); 12 | } 13 | } 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /2023-03-14-dont-jsfuck-with-me-part-2/ast_explorer_undo_flat_trick.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "undo-flat-trick", // not required 6 | visitor: { 7 | MemberExpression(path) { 8 | let node = path.node; 9 | if (!t.isArrayExpression(node.object)) return; 10 | if (node.object.elements.length != 0) return; 11 | if (!t.isStringLiteral(node.property)) return; 12 | if (node.property.value === "flat" && t.isBinaryExpression(path.parent)) { 13 | path.replaceWith(t.stringLiteral(String(Array.prototype.flat))); 14 | } 15 | } 16 | } 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /2023-03-14-dont-jsfuck-with-me-part-2/ast_explorer_undo_string_contructor_trick.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "undo-string-constructor-trick", // not required 6 | visitor: { 7 | MemberExpression(path) { 8 | let node = path.node; 9 | if (!t.isBinaryExpression(path.parent)) return; 10 | if (path.parent.operator != "+") return; 11 | if (!t.isStringLiteral(node.object)) return; 12 | if (node.object.value != "") return; 13 | if (!t.isStringLiteral(node.property)) return; 14 | if (node.property.value === "constructor") { 15 | path.replaceWith(t.valueToNode(String(String))); 16 | } 17 | } 18 | } 19 | }; 20 | } -------------------------------------------------------------------------------- /2023-03-14-dont-jsfuck-with-me-part-2/ast_explorer_undo_string_trick.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "undo-string-trick", // not required 6 | visitor: { 7 | Identifier(path) { 8 | let node = path.node; 9 | if (!t.isBinaryExpression(path.parent)) return; 10 | if (path.parent.operator != "+") return; 11 | if (node.name === "String") path.replaceWith(t.valueToNode(String(String))); 12 | } 13 | } 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy/sample/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy/sample/__init__.py -------------------------------------------------------------------------------- /2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy/sample/items.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your scraped items 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/items.html 5 | 6 | import scrapy 7 | 8 | 9 | class SampleItem(scrapy.Item): 10 | # define the fields for your item here like: 11 | # name = scrapy.Field() 12 | pass 13 | -------------------------------------------------------------------------------- /2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy/sample/pipelines.py: -------------------------------------------------------------------------------- 1 | # Define your item pipelines here 2 | # 3 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 4 | # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html 5 | 6 | 7 | # useful for handling different item types with a single interface 8 | from itemadapter import ItemAdapter 9 | 10 | 11 | class SamplePipeline: 12 | def process_item(self, item, spider): 13 | return item 14 | -------------------------------------------------------------------------------- /2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy/sample/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /2023-05-02-crawlspider-and-link-extractors-for-rule-based-crawling-in-scrapy/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = sample.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = sample 12 | -------------------------------------------------------------------------------- /2023-05-15-scraping-product-data-from-nike/nike/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2023-05-15-scraping-product-data-from-nike/nike/__init__.py -------------------------------------------------------------------------------- /2023-05-15-scraping-product-data-from-nike/nike/items.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your scraped items 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/items.html 5 | 6 | import scrapy 7 | 8 | 9 | class NikeProductItem(scrapy.Item): 10 | title = scrapy.Field() 11 | subtitle = scrapy.Field() 12 | pid = scrapy.Field() 13 | current_price = scrapy.Field() 14 | empl_price = scrapy.Field() 15 | full_price = scrapy.Field() 16 | in_stock = scrapy.Field() 17 | product_url = scrapy.Field() 18 | image_urls = scrapy.Field() 19 | description = scrapy.Field() 20 | 21 | 22 | -------------------------------------------------------------------------------- /2023-05-15-scraping-product-data-from-nike/nike/pipelines.py: -------------------------------------------------------------------------------- 1 | # Define your item pipelines here 2 | # 3 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 4 | # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html 5 | 6 | 7 | # useful for handling different item types with a single interface 8 | from itemadapter import ItemAdapter 9 | 10 | 11 | class NikePipeline: 12 | def process_item(self, item, spider): 13 | return item 14 | -------------------------------------------------------------------------------- /2023-05-15-scraping-product-data-from-nike/nike/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /2023-05-15-scraping-product-data-from-nike/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = nike.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = nike 12 | -------------------------------------------------------------------------------- /2023-05-30-understanding-javascript-packers/eval_unescape.js: -------------------------------------------------------------------------------- 1 | var myText = 'Пишите нам'; eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%76%69%74%40%61%75%64%69%74%2d%69%74%2e%72%75%3f%73%75%62%6a%65%63%74%3d%25%44%30%25%41%31%25%44%30%25%42%31%25%44%30%25%42%35%25%44%31%25%38%30%25%44%30%25%42%45%25%44%30%25%42%43%25%44%30%25%42%35%25%44%31%25%38%32%25%44%31%25%38%30%22%3e%27%2b%28%6d%79%54%65%78%74%20%3f%20%6d%79%54%65%78%74%20%3a%20%27%76%69%74%40%61%75%64%69%74%2d%69%74%2e%72%75%27%29%2b%27%3c%2f%61%3e%27%29%3b')) 2 | 3 | -------------------------------------------------------------------------------- /2023-05-30-understanding-javascript-packers/helloworld.js: -------------------------------------------------------------------------------- 1 | let hello = "hello world"; 2 | console.log(hello); 3 | -------------------------------------------------------------------------------- /2023-05-30-understanding-javascript-packers/packed.js: -------------------------------------------------------------------------------- 1 | eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1 0="0 2";3.4(0);',5,5,'hello|let|world|console|log'.split('|'),0,{})) 2 | -------------------------------------------------------------------------------- /2023-05-30-understanding-javascript-packers/packed_pretty.js: -------------------------------------------------------------------------------- 1 | eval(function(p, a, c, k, e, r) { 2 | e = String; 3 | if(!''.replace(/^/, String)) { 4 | while(c--) r[c] = k[c] || c; 5 | k = [function(e) { 6 | return r[e] 7 | }]; 8 | e = function() { 9 | return '\\w+' 10 | }; 11 | c = 1 12 | }; 13 | while(c--) 14 | if(k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); 15 | return p 16 | }('1 0="0 2";3.4(0);', 5, 5, 'hello|let|world|console|log'.split('|'), 0, {})) 17 | -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/ast_regex_str.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "regex-str", // not required 6 | visitor: { 7 | BinaryExpression(path) { 8 | const binExpr = path.node; 9 | const left = binExpr.left; 10 | if (!t.isRegExpLiteral(left)) return; 11 | const right = binExpr.right; 12 | if (!t.isArrayExpression(right)) return; 13 | if (right.elements.length != 0) return; 14 | 15 | const regexStr = String(RegExp(left.pattern)); 16 | 17 | path.replaceWith(t.stringLiteral(regexStr)); 18 | } 19 | } 20 | }; 21 | } -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/ast_undo_escape_call.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "undo-escape-call", // not required 6 | visitor: { 7 | CallExpression(path) { 8 | let callExpr = path.node; 9 | if (!t.isIdentifier(callExpr.callee)) return; 10 | if (callExpr.callee.name != "escape") return; 11 | if (callExpr.arguments.length != 1) return; 12 | if (!t.isStringLiteral(callExpr.arguments[0])) return; 13 | 14 | let newNode = t.stringLiteral(escape(callExpr.arguments[0].value)); 15 | path.replaceWith(newNode); 16 | } 17 | } 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/debug.js: -------------------------------------------------------------------------------- 1 | const generate = require("@babel/generator").default; 2 | 3 | function logASTChange(pluginName, ast1, ast2) { 4 | const js1 = generate(ast1).code; 5 | const js2 = generate(ast2).code; 6 | 7 | console.log("PLUGIN NAME:", pluginName); 8 | console.log("FROM CODE:", js1); 9 | console.log("TO CODE:", js2); 10 | } 11 | 12 | module.exports = { logASTChange }; 13 | -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/examples/out1.js: -------------------------------------------------------------------------------- 1 | alert("HJKLPQVWXYZ!\'!#$*@^_`|~"); -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/examples/out2.js: -------------------------------------------------------------------------------- 1 | console.log("a"); -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/examples/out3.js: -------------------------------------------------------------------------------- 1 | FB.getLoginStatus(function (response) { 2 | statusChangeCallback(response); 3 | }); -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/examples/out4.js: -------------------------------------------------------------------------------- 1 | for (var i = 1; i <= 20; i++) { 2 | if (i % 15 == 0) console.log("FizzBuzz");else if (i % 3 == 0) console.log("Fizz");else if (i % 5 == 0) console.log("Buzz");else console.log(i); 3 | } -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsfuck_deobfuscator", 3 | "version": "1.0.0", 4 | "description": "AST-level deobfuscator to clean up and simplify output of JSFuck", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "rl1987", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@babel/cli": "7.19.3", 13 | "@babel/core": "7.19.0", 14 | "@babel/generator": "7.19.0", 15 | "@babel/parser": "7.19.0", 16 | "@babel/traverse": "7.19.0", 17 | "@babel/types": "7.19.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /2023-06-25-dont-jsfuck-with-me-part-3/jsfuck_deobfuscator/plugin_simplify_string_name.js: -------------------------------------------------------------------------------- 1 | const babel = require("@babel/core"); 2 | const t = require("@babel/types"); 3 | 4 | module.exports = function (babel) { 5 | return { 6 | name: "simplify-string-name", // not required 7 | visitor: { 8 | MemberExpression(path) { 9 | let node = path.node; 10 | if (!t.isIdentifier(node.object)) return; 11 | if (!t.isStringLiteral(node.property)) return; 12 | if (node.object.name === "String" && node.property.value === "name") { 13 | path.replaceWith(t.valueToNode("String")); 14 | } 15 | } 16 | } 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /2023-07-02-self-defending-js-code-and-debugger-traps/self_defending.js: -------------------------------------------------------------------------------- 1 | function hi(){var _0x3298fd=(function(){var _0x3c6e04=!![];return function(_0x471481,_0x2bd7a3){var _0x14b95c=_0x3c6e04?function(){if(_0x2bd7a3){var _0xc92697=_0x2bd7a3['apply'](_0x471481,arguments);_0x2bd7a3=null;return _0xc92697;}}:function(){};_0x3c6e04=![];return _0x14b95c;};}());var _0x3a8b12=_0x3298fd(this,function(){return _0x3a8b12['toString']()['search']('(((.+)+)+)+$')['toString']()['constructor'](_0x3a8b12)['search']('(((.+)+)+)+$');});_0x3a8b12();console['log']('Hello\x20World!');console['log']('Hello\x20World!');console['log']('Hello\x20World!');console['log']('Hello\x20World!');console['log']('Hello\x20World!');console['log']('Hello\x20World!');console['log']('Hello\x20World!');}hi(); -------------------------------------------------------------------------------- /2023-07-02-self-defending-js-code-and-debugger-traps/unprotected.js: -------------------------------------------------------------------------------- 1 | // Paste your JavaScript code here 2 | function hi() { 3 | console.log("Hello World!"); 4 | console.log("Hello World!"); 5 | console.log("Hello World!"); 6 | console.log("Hello World!"); 7 | console.log("Hello World!"); 8 | console.log("Hello World!"); 9 | console.log("Hello World!"); 10 | } 11 | hi(); 12 | -------------------------------------------------------------------------------- /2023-07-22-using-scrapy-playwright-for-integrating-browser-automation-with-scrapy/requirements.txt: -------------------------------------------------------------------------------- 1 | scrapy 2 | playwright 3 | scrapy-playwright 4 | -------------------------------------------------------------------------------- /2023-08-12-scrapy-by-example-scraping-company-data-from-yelp/recon/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rl1987/trickster.dev-code/bedff26564ced58e899e8efca9ebc9f91f8adb64/2023-08-12-scrapy-by-example-scraping-company-data-from-yelp/recon/__init__.py -------------------------------------------------------------------------------- /2023-08-12-scrapy-by-example-scraping-company-data-from-yelp/recon/items.py: -------------------------------------------------------------------------------- 1 | # Define here the models for your scraped items 2 | # 3 | # See documentation in: 4 | # https://docs.scrapy.org/en/latest/topics/items.html 5 | 6 | import scrapy 7 | 8 | 9 | class YelpItem(scrapy.Item): 10 | # define the fields for your item here like: 11 | yelp_biz_id = scrapy.Field() 12 | category = scrapy.Field() 13 | name = scrapy.Field() 14 | description = scrapy.Field() 15 | phone_number = scrapy.Field() 16 | website = scrapy.Field() 17 | address = scrapy.Field() 18 | latitude = scrapy.Field() 19 | longitude = scrapy.Field() 20 | gmaps_img_url = scrapy.Field() 21 | yelp_url = scrapy.Field() 22 | 23 | -------------------------------------------------------------------------------- /2023-08-12-scrapy-by-example-scraping-company-data-from-yelp/recon/pipelines.py: -------------------------------------------------------------------------------- 1 | # Define your item pipelines here 2 | # 3 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting 4 | # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html 5 | 6 | 7 | # useful for handling different item types with a single interface 8 | from itemadapter import ItemAdapter 9 | 10 | 11 | class ReconPipeline: 12 | def process_item(self, item, spider): 13 | return item 14 | -------------------------------------------------------------------------------- /2023-08-12-scrapy-by-example-scraping-company-data-from-yelp/recon/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # This package will contain the spiders of your Scrapy project 2 | # 3 | # Please refer to the documentation for information on how to create and manage 4 | # your spiders. 5 | -------------------------------------------------------------------------------- /2023-08-12-scrapy-by-example-scraping-company-data-from-yelp/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = recon.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = recon 12 | -------------------------------------------------------------------------------- /2023-09-15-solving-a-simple-js-challenge-with-sandboxing/sandbox.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const vm = require("vm"); 3 | 4 | let js = fs.readFileSync("in.js", "utf-8"); 5 | 6 | const script = new vm.Script(js); 7 | const mapperContext = { window: {}, document: { 8 | location: { 9 | reload: function(){} 10 | } 11 | }}; 12 | 13 | const sandbox = vm.createContext(mapperContext); 14 | script.runInContext(sandbox); 15 | vm.runInContext('go();', sandbox); 16 | 17 | console.log(sandbox.document.cookie); 18 | -------------------------------------------------------------------------------- /2023-09-15-solving-a-simple-js-challenge-with-sandboxing/transform.js: -------------------------------------------------------------------------------- 1 | export default function (babel) { 2 | const { types: t } = babel; 3 | 4 | return { 5 | name: "ast-transform", // not required 6 | visitor: { 7 | "Program|IfStatement|Expression|ExpressionStatement"(path) { 8 | t.removeComments(path.node); 9 | } 10 | } 11 | }; 12 | } 13 | 14 | -------------------------------------------------------------------------------- /2023-09-15-solving-a-simple-js-challenge-with-sandboxing/trick.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | 5 | curl "https://opencorporates.com" | \ 6 | xmllint --html --xpath '//script/text()' - | \ 7 | tail +2 > in.js # Deleting "