diff --git a/app/assets/javascripts/discourse/app/app.js b/app/assets/javascripts/discourse/app/app.js
index fa7b901c0ea5a..9b9d169368487 100644
--- a/app/assets/javascripts/discourse/app/app.js
+++ b/app/assets/javascripts/discourse/app/app.js
@@ -19,6 +19,12 @@ import { buildResolver } from "discourse/resolver";
const _pluginCallbacks = [];
let _unhandledThemeErrors = [];
+window.moduleBroker = {
+ lookup: function (moduleName) {
+ return require(moduleName);
+ },
+};
+
class Discourse extends Application {
modulePrefix = "discourse";
rootElement = "#main";
diff --git a/app/assets/javascripts/discourse/public/assets/scripts/start-app.js b/app/assets/javascripts/discourse/public/assets/scripts/start-app.js
index 602f945ab3a3a..db806acfe32a8 100644
--- a/app/assets/javascripts/discourse/public/assets/scripts/start-app.js
+++ b/app/assets/javascripts/discourse/public/assets/scripts/start-app.js
@@ -1,6 +1,16 @@
-document.addEventListener("discourse-init", (e) => {
+document.addEventListener("discourse-init", async (e) => {
performance.mark("discourse-init");
const config = e.detail;
- const app = require(`${config.modulePrefix}/app`)["default"].create(config);
+ const klass = require(`${config.modulePrefix}/app`).default;
+
+ for (const link of document.querySelectorAll("link[rel=modulepreload]")) {
+ const themeId = link.dataset.themeId;
+ const compatModules = (await import(link.href)).default;
+ for (const [key, mod] of Object.entries(compatModules)) {
+ define(`discourse/theme-${themeId}/${key}`, () => mod);
+ }
+ }
+
+ const app = klass.create(config);
app.start();
});
diff --git a/app/assets/javascripts/theme-transpiler/add-theme-globals.js b/app/assets/javascripts/theme-transpiler/add-theme-globals.js
new file mode 100644
index 0000000000000..688a5e95a83b6
--- /dev/null
+++ b/app/assets/javascripts/theme-transpiler/add-theme-globals.js
@@ -0,0 +1,52 @@
+export default function (babel) {
+ const { types: t } = babel;
+
+ const visitor = {
+ Program(path) {
+ const importDeclarations = [];
+
+ if (path.scope.bindings.themePrefix) {
+ if (path.scope.bindings.themePrefix.kind !== "module") {
+ throw new Error("duplicate themePrefix");
+ } else {
+ // TODO: maybe check the import path
+ }
+ } else {
+ importDeclarations.push(
+ t.importSpecifier(
+ t.identifier("themePrefix"),
+ t.identifier("themePrefix")
+ )
+ );
+ }
+
+ if (path.scope.bindings.settings) {
+ if (path.scope.bindings.settings.kind !== "module") {
+ throw new Error("duplicate settings");
+ } else {
+ // TODO: maybe check the import path
+ }
+ } else {
+ importDeclarations.push(
+ t.importSpecifier(t.identifier("settings"), t.identifier("settings"))
+ );
+ }
+
+ if (importDeclarations.length > 0) {
+ path.node.body.push(
+ t.importDeclaration(
+ importDeclarations,
+ t.stringLiteral("virtual:theme")
+ )
+ );
+ }
+ },
+ };
+
+ return {
+ pre(file) {
+ babel.traverse(file.ast, visitor, file.scope);
+ file.scope.crawl();
+ },
+ };
+}
diff --git a/app/assets/javascripts/theme-transpiler/babel-replace-imports.js b/app/assets/javascripts/theme-transpiler/babel-replace-imports.js
new file mode 100644
index 0000000000000..91715f86c2892
--- /dev/null
+++ b/app/assets/javascripts/theme-transpiler/babel-replace-imports.js
@@ -0,0 +1,50 @@
+import rollupVirtualImports from "./rollup-virtual-imports";
+
+export default function (babel) {
+ const { types: t } = babel;
+
+ return {
+ visitor: {
+ ImportDeclaration(path) {
+ const moduleName = path.node.source.value;
+ if (moduleName.startsWith(".") || rollupVirtualImports[moduleName]) {
+ return;
+ }
+
+ const properties = path.node.specifiers.map((specifier) => {
+ if (specifier.type === "ImportDefaultSpecifier") {
+ return t.objectProperty(
+ t.identifier("default"),
+ t.identifier(specifier.local.name)
+ );
+ } else {
+ return t.objectProperty(
+ t.identifier(specifier.imported.name),
+ t.identifier(specifier.local.name)
+ );
+ }
+ });
+
+ const replacement = t.variableDeclaration("const", [
+ t.variableDeclarator(
+ t.objectPattern(properties),
+ t.awaitExpression(
+ t.callExpression(
+ t.memberExpression(
+ t.memberExpression(
+ t.identifier("window"),
+ t.identifier("moduleBroker")
+ ),
+ t.identifier("lookup")
+ ),
+ [t.stringLiteral(moduleName)]
+ )
+ )
+ ),
+ ]);
+
+ path.replaceWith(replacement);
+ },
+ },
+ };
+}
diff --git a/app/assets/javascripts/theme-transpiler/build.js b/app/assets/javascripts/theme-transpiler/build.js
index 4cb4a36fbc8ce..8e728357c018f 100644
--- a/app/assets/javascripts/theme-transpiler/build.js
+++ b/app/assets/javascripts/theme-transpiler/build.js
@@ -52,10 +52,15 @@ esbuild
path: "path-browserify",
url: "./url-polyfill",
"source-map-js": "source-map-js",
+ assert: "./noop",
+ fs: "./noop",
},
banner: {
js: `var process = { "env": { "EMBER_ENV": "production" }, "cwd": () => "/" };`,
},
+ define: {
+ "import.meta.url": "'http://example.com'",
+ },
external: [],
entryPoints: ["./transpiler.js"],
plugins: [wasmPlugin],
diff --git a/app/assets/javascripts/theme-transpiler/noop.js b/app/assets/javascripts/theme-transpiler/noop.js
new file mode 100644
index 0000000000000..ff8b4c56321a3
--- /dev/null
+++ b/app/assets/javascripts/theme-transpiler/noop.js
@@ -0,0 +1 @@
+export default {};
diff --git a/app/assets/javascripts/theme-transpiler/package.json b/app/assets/javascripts/theme-transpiler/package.json
index a7ada33cb1c51..e066a628ff7ee 100644
--- a/app/assets/javascripts/theme-transpiler/package.json
+++ b/app/assets/javascripts/theme-transpiler/package.json
@@ -7,8 +7,14 @@
"license": "GPL-2.0-only",
"keywords": [],
"dependencies": {
+ "@babel/preset-env": "^7.27.2",
"@babel/standalone": "^7.27.6",
"@csstools/postcss-light-dark-function": "^2.0.9",
+ "@rollup/browser": "^4.40.2",
+ "@rollup/plugin-babel": "^6.0.4",
+ "@rollup/wasm-node": "^4.29.1",
+ "@swc/wasm-web": "^1.10.4",
+ "@zxing/text-encoding": "^0.9.0",
"autoprefixer": "^10.4.21",
"babel-plugin-ember-template-compilation": "^2.4.1",
"content-tag": "^4.0.0",
@@ -20,13 +26,17 @@
"ember-source": "~5.12.0",
"ember-this-fallback": "^0.4.0",
"fastestsmallesttextencoderdecoder": "^1.0.22",
+ "jsdom": "^25.0.1",
+ "magic-string": "^0.30.17",
"path-browserify": "^1.0.1",
"polyfill-crypto.getrandomvalues": "^1.0.0",
- "postcss": "^8.5.4",
"postcss-js": "^4.0.1",
"postcss-media-minmax": "^5.0.0",
+ "postcss": "^8.5.4",
"source-map-js": "^1.2.1",
- "terser": "^5.42.0"
+ "terser": "^5.42.0",
+ "url-polyfill": "^1.1.12",
+ "url-shim": "^1.0.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/theme-transpiler/rollup-virtual-imports.js b/app/assets/javascripts/theme-transpiler/rollup-virtual-imports.js
new file mode 100644
index 0000000000000..507fe6039abb1
--- /dev/null
+++ b/app/assets/javascripts/theme-transpiler/rollup-virtual-imports.js
@@ -0,0 +1,59 @@
+export default {
+ "virtual:main": (tree) => {
+ let output = `
+ import "virtual:init-settings";
+ `;
+
+ output += "const themeCompatModules = {};\n";
+
+ let i = 1;
+ for (const moduleFilename of Object.keys(tree)) {
+ if (moduleFilename.match(/(^|\/)connectors\//)) {
+ let moduleName = moduleFilename.replace(/\.es6?$/, "");
+
+ const isTemplate = moduleName.endsWith(".hbs");
+ const isInTemplatesDirectory = moduleName.match(/(^|\/)templates\//);
+
+ moduleName = moduleName.replace(/\.[^\.]+$/, "");
+
+ if (isTemplate && !isInTemplatesDirectory) {
+ moduleName = moduleName.replace(
+ /(^|\/)connectors\//,
+ "$1templates/connectors/"
+ );
+ } else if (!isTemplate && isInTemplatesDirectory) {
+ moduleName = moduleName.replace(/^templates\//, "");
+ }
+ output += `import * as Mod${i} from "${moduleFilename}";\n`;
+ output += `themeCompatModules["${moduleName}"] = Mod${i};\n`;
+ } else {
+ const moduleName = moduleFilename.replace(/\.[^\.]+(\.es6)?$/, "");
+ output += `import * as Mod${i} from "${moduleName}";\n`;
+ output += `themeCompatModules["${moduleName}"] = Mod${i};\n`;
+ }
+
+ i += 1;
+ }
+
+ output += "export default themeCompatModules;\n";
+
+ return output;
+ },
+ "virtual:init-settings": (_, { themeId, settings }) => {
+ return `
+ import { registerSettings } from "discourse/lib/theme-settings-store";
+ registerSettings(${themeId}, ${JSON.stringify(settings)});
+ `;
+ },
+ "virtual:theme": (_, { themeId }) => {
+ return `
+ import { getObjectForTheme } from "discourse/lib/theme-settings-store";
+
+ export const settings = getObjectForTheme(${themeId});
+
+ export function themePrefix(key) {
+ return \`theme_translations.${themeId}.\${key}\`;
+ }
+ `;
+ },
+};
diff --git a/app/assets/javascripts/theme-transpiler/theme-hbs-ast-transforms.js b/app/assets/javascripts/theme-transpiler/theme-hbs-ast-transforms.js
new file mode 100644
index 0000000000000..27094c0d2cfb8
--- /dev/null
+++ b/app/assets/javascripts/theme-transpiler/theme-hbs-ast-transforms.js
@@ -0,0 +1,28 @@
+function manipulateAstNodeForTheme(node, themeId) {
+ // Magically add theme id as the first param for each of these helpers)
+ if (
+ node.path.parts &&
+ ["theme-i18n", "theme-prefix", "theme-setting"].includes(node.path.parts[0])
+ ) {
+ if (node.params.length === 1) {
+ node.params.unshift({
+ type: "NumberLiteral",
+ value: themeId,
+ original: themeId,
+ loc: { start: {}, end: {} },
+ });
+ }
+ }
+}
+
+export default function buildEmberTemplateManipulatorPlugin(themeId) {
+ return function () {
+ return {
+ name: "theme-template-manipulator",
+ visitor: {
+ SubExpression: (node) => manipulateAstNodeForTheme(node, themeId),
+ MustacheStatement: (node) => manipulateAstNodeForTheme(node, themeId),
+ },
+ };
+ };
+}
diff --git a/app/assets/javascripts/theme-transpiler/theme-rollup.js b/app/assets/javascripts/theme-transpiler/theme-rollup.js
new file mode 100644
index 0000000000000..eb014793849f3
--- /dev/null
+++ b/app/assets/javascripts/theme-transpiler/theme-rollup.js
@@ -0,0 +1,349 @@
+import BabelPresetEnv from "@babel/preset-env";
+// import templateColocationPlugin from "@embroider/addon-dev/template-colocation-plugin";
+import { rollup } from "@rollup/browser";
+import { babel, getBabelOutputPlugin } from "@rollup/plugin-babel";
+import HTMLBarsInlinePrecompile from "babel-plugin-ember-template-compilation";
+import DecoratorTransforms from "decorator-transforms";
+import colocatedBabelPlugin from "ember-cli-htmlbars/lib/colocated-babel-plugin";
+import { precompile } from "ember-source/dist/ember-template-compiler";
+import EmberThisFallback from "ember-this-fallback";
+import MagicString from "magic-string";
+import { dirname, join } from "path";
+// import { minify as terserMinify } from "terser";
+import { WidgetHbsCompiler } from "discourse-widget-hbs/lib/widget-hbs-compiler";
+import { browsers } from "../discourse/config/targets";
+import AddThemeGlobals from "./add-theme-globals";
+import BabelReplaceImports from "./babel-replace-imports";
+import { Preprocessor } from "./content-tag";
+import rollupVirtualImports from "./rollup-virtual-imports";
+
+const thisFallbackPlugin = EmberThisFallback._buildPlugin({
+ enableLogging: false,
+ isTheme: true,
+}).plugin;
+
+const preprocessor = new Preprocessor();
+
+import BindingsWasm from "./node_modules/@rollup/browser/dist/bindings_wasm_bg.wasm";
+import buildEmberTemplateManipulatorPlugin from "./theme-hbs-ast-transforms";
+
+const oldInstantiate = WebAssembly.instantiate;
+WebAssembly.instantiate = async function (bytes, bindings) {
+ if (bytes === BindingsWasm) {
+ const mod = new WebAssembly.Module(bytes);
+ const instance = new WebAssembly.Instance(mod, bindings);
+ return instance;
+ } else {
+ return oldInstantiate(...arguments);
+ }
+};
+
+globalThis.fetch = function (url) {
+ if (url.toString() === "http://example.com/bindings_wasm_bg.wasm") {
+ return new Promise((resolve) => resolve(BindingsWasm));
+ }
+ throw "fetch not implemented";
+};
+
+let lastRollupResult;
+let lastRollupError;
+globalThis.rollup = function (modules, opts) {
+ const resultPromise = rollup({
+ input: "virtual:main",
+ logLevel: "info",
+ onLog(level, message) {
+ // eslint-disable-next-line no-console
+ console.log(level, message);
+ },
+ plugins: [
+ {
+ name: "discourse-extensionsearch",
+ async resolveId(source, context) {
+ // console.log(`Running extensionsearch ${source}`);
+
+ if (source.match(/\.(js|gjs|hbs)$/)) {
+ return null;
+ }
+
+ for (const ext of ["", ".js", ".gjs", ".hbs"]) {
+ // console.log(ext);
+ let resolved;
+ try {
+ resolved = await this.resolve(
+ `${source}${ext}`,
+ context /*, {
+ skipSelf: true,
+ }*/
+ );
+ } catch (error) {
+ if (!error.message.includes("Cannot access the file system")) {
+ throw error;
+ }
+ // console.log("caught");
+ }
+ // console.log(`finished resolve, ${source}${ext}, `);
+ // console.log(JSON.stringify(resolved));
+ if (resolved) {
+ return resolved;
+ }
+ }
+
+ return false;
+ },
+ },
+ {
+ name: "discourse-loader",
+ resolveId(source, context) {
+ if (rollupVirtualImports[source]) {
+ return source;
+ }
+
+ // console.log(source);
+ // console.log(Object.keys(modules));
+
+ if (source.startsWith(".")) {
+ if (!context) {
+ throw new Error(
+ `Unable to resolve relative import '${source}' without a context`
+ );
+ }
+ source = join(dirname(context), source);
+ }
+
+ if (modules.hasOwnProperty(source)) {
+ return source;
+ }
+
+ // for (const ext of ["", ".js", ".gjs", ".hbs"]) {
+ // const candidate = source + ext;
+ // if (modules.hasOwnProperty(candidate)) {
+ // return candidate;
+ // }
+ // }
+ // return false;
+ },
+ load(id) {
+ if (rollupVirtualImports[id]) {
+ return rollupVirtualImports[id](modules, opts);
+ }
+ if (modules.hasOwnProperty(id)) {
+ return modules[id];
+ }
+ },
+ },
+
+ {
+ name: "discourse-colocation",
+ async resolveId(source, context) {
+ if (
+ source.startsWith("discourse/components/") ||
+ source.startsWith("admin/components/")
+ ) {
+ return;
+ }
+
+ if (source.endsWith(".js")) {
+ let hbs;
+ try {
+ hbs = await this.resolve(source.replace(/.js$/, ".hbs"), context);
+ } catch (error) {
+ if (!error.message.includes("Cannot access the file system")) {
+ throw error;
+ }
+ }
+
+ let js;
+ try {
+ js = await this.resolve(source, context);
+ } catch (error) {
+ if (!error.message.includes("Cannot access the file system")) {
+ throw error;
+ }
+ }
+
+ if (!js && hbs) {
+ return {
+ id: source,
+ meta: {
+ "rollup-hbs-plugin": {
+ type: "template-only-component-js",
+ },
+ },
+ };
+ }
+ }
+ },
+
+ load(id) {
+ if (
+ this.getModuleInfo(id)?.meta?.["rollup-hbs-plugin"]?.type ===
+ "template-only-component-js"
+ ) {
+ return {
+ code: `import templateOnly from '@ember/component/template-only';\nexport default templateOnly();\n`,
+ };
+ }
+ },
+
+ transform: {
+ // order: "pre",
+ async handler(input, id) {
+ if (
+ !id.startsWith("discourse/components/") &&
+ !id.startsWith("admin/components/")
+ ) {
+ return;
+ }
+
+ if (id.endsWith(".js")) {
+ let hbs;
+ try {
+ hbs = await this.resolve(id.replace(/.js$/, ".hbs"), id);
+ } catch (error) {
+ if (!error.message.includes("Cannot access the file system")) {
+ throw error;
+ }
+ }
+
+ if (hbs) {
+ const s = new MagicString(input);
+ s.prepend(
+ `import template from '${hbs.id}';
+const __COLOCATED_TEMPLATE__ = template;
+`
+ );
+
+ return {
+ code: s.toString(),
+ map: s.generateMap({ hires: true }),
+ };
+ }
+ }
+ },
+ },
+ },
+
+ getBabelOutputPlugin({
+ plugins: [BabelReplaceImports],
+ }),
+ babel({
+ extensions: [".js", ".gjs", ".hbs"],
+ babelHelpers: "bundled",
+ plugins: [
+ [DecoratorTransforms, { runEarly: true }],
+ AddThemeGlobals,
+ colocatedBabelPlugin,
+ WidgetHbsCompiler,
+ [
+ HTMLBarsInlinePrecompile,
+ {
+ compiler: { precompile },
+ enableLegacyModules: [
+ "ember-cli-htmlbars",
+ "ember-cli-htmlbars-inline-precompile",
+ "htmlbars-inline-precompile",
+ ],
+ transforms: [
+ thisFallbackPlugin,
+ buildEmberTemplateManipulatorPlugin(opts.themeId),
+ ],
+ },
+ ],
+ ],
+ presets: [
+ [
+ BabelPresetEnv,
+ {
+ modules: false,
+ targets: { browsers },
+ },
+ ],
+ ],
+ }),
+ {
+ name: "discourse-hbs",
+ transform: {
+ order: "pre",
+ handler(input, id) {
+ if (id.endsWith(".hbs")) {
+ return {
+ code: `
+ import { hbs } from 'ember-cli-htmlbars';
+ export default hbs(${JSON.stringify(input)}, { moduleName: ${JSON.stringify(id)} });
+ `,
+ map: { mappings: "" },
+ };
+ }
+ },
+ },
+ },
+ {
+ name: "discourse-gjs-transform",
+
+ transform: {
+ // Enforce running the gjs transform before any others like babel that expect valid JS
+ order: "pre",
+ handler(input, id) {
+ if (!id.endsWith(".gjs")) {
+ return null;
+ }
+ let { code, map } = preprocessor.process(input, {
+ filename: id,
+ });
+ return {
+ code,
+ map,
+ };
+ },
+ },
+ },
+ // {
+ // name: "discourse-terser",
+ // async renderChunk(code, chunk, outputOptions) {
+ // const defaultOptions = {
+ // sourceMap:
+ // outputOptions.sourcemap === true ||
+ // typeof outputOptions.sourcemap === "string",
+ // };
+
+ // defaultOptions.module = true;
+
+ // return await terserMinify(code, defaultOptions);
+ // },
+ // },
+ ],
+ });
+
+ resultPromise
+ .then((bundle) => {
+ return bundle.generate({
+ format: "es",
+ sourcemap: "hidden",
+ sourcemapPathTransform: (relativeSourcePath) =>
+ `theme-${opts.themeId}/${relativeSourcePath}`,
+ });
+ })
+ .then(({ output }) => {
+ lastRollupResult = {
+ code: output[0].code,
+ map: JSON.stringify(output[0].map),
+ };
+ })
+ .catch((error) => {
+ // eslint-disable-next-line no-console
+ console.error(error);
+ lastRollupError = error;
+ });
+};
+
+globalThis.getRollupResult = function () {
+ const error = lastRollupError;
+ const result = lastRollupResult;
+
+ lastRollupError = lastRollupResult = null;
+
+ if (error) {
+ throw error;
+ }
+ return result;
+};
diff --git a/app/assets/javascripts/theme-transpiler/transpiler.js b/app/assets/javascripts/theme-transpiler/transpiler.js
index 962b39c34daf9..3858025b75815 100644
--- a/app/assets/javascripts/theme-transpiler/transpiler.js
+++ b/app/assets/javascripts/theme-transpiler/transpiler.js
@@ -1,7 +1,6 @@
-// This is executed in mini_racer to provide the JS logic for lib/discourse_js_processor.rb
-
import "./shims";
import "./postcss";
+import "./theme-rollup";
import { transform as babelTransform } from "@babel/standalone";
import HTMLBarsInlinePrecompile from "babel-plugin-ember-template-compilation";
import DecoratorTransforms from "decorator-transforms";
diff --git a/app/models/javascript_cache.rb b/app/models/javascript_cache.rb
index e3dd443dd1620..e1409f6a85705 100644
--- a/app/models/javascript_cache.rb
+++ b/app/models/javascript_cache.rb
@@ -23,7 +23,9 @@ def path
def update_digest
self.digest =
- Digest::SHA1.hexdigest("#{content}|#{GlobalSetting.asset_url_salt}") if content_changed?
+ Digest::SHA1.hexdigest(
+ "#{content}|#{source_map}|#{GlobalSetting.asset_url_salt}",
+ ) if content_changed? || source_map_changed?
end
def content_cannot_be_nil
diff --git a/app/models/theme.rb b/app/models/theme.rb
index 6681a1f78cde1..fe3e398735587 100644
--- a/app/models/theme.rb
+++ b/app/models/theme.rb
@@ -6,7 +6,7 @@
class Theme < ActiveRecord::Base
include GlobalPath
- BASE_COMPILER_VERSION = 91
+ BASE_COMPILER_VERSION = 118
class SettingsMigrationError < StandardError
end
@@ -189,11 +189,8 @@ def update_javascript_cache!
.to_h
if all_extra_js.present?
- js_compiler = ThemeJavascriptCompiler.new(id, name)
+ js_compiler = ThemeJavascriptCompiler.new(id, name, build_settings_hash)
js_compiler.append_tree(all_extra_js)
- settings_hash = build_settings_hash
-
- js_compiler.prepend_settings(settings_hash) if settings_hash.present?
javascript_cache || build_javascript_cache
javascript_cache.update!(content: js_compiler.content, source_map: js_compiler.source_map)
@@ -514,7 +511,8 @@ def self.resolve_baked_field(theme_ids, target, name)
.compact
caches.map { |c| <<~HTML.html_safe }.join("\n")
-
+
+
HTML
end
when :translations
diff --git a/app/models/theme_field.rb b/app/models/theme_field.rb
index faaeb551ebd5b..e1a52308af864 100644
--- a/app/models/theme_field.rb
+++ b/app/models/theme_field.rb
@@ -122,134 +122,9 @@ def process_html(html)
errors << I18n.t("themes.errors.optimized_link") if contains_optimized_link?(html)
- js_compiler = ThemeJavascriptCompiler.new(theme_id, self.theme.name)
- deprecated_template_names = []
+ # todo: restore script tag support
- doc = Nokogiri::HTML5.fragment(html)
-
- doc
- .css('script[type="text/x-handlebars"]')
- .each do |node|
- name = node["name"] || node["data-template-name"] || "broken"
- is_raw = name =~ /\.(raw|hbr)\z/
- hbs_template = node.inner_html
-
- begin
- if is_raw
- js_compiler.append_js_error(
- "discourse/templates/#{name}",
- "Raw templates are no longer supported",
- )
- else
- js_compiler.append_ember_template(
- "discourse/templates/#{name.delete_prefix("/")}",
- hbs_template,
- )
- deprecated_template_names << name
- end
- rescue ThemeJavascriptCompiler::CompileError => ex
- js_compiler.append_js_error("discourse/templates/#{name}", ex.message)
- errors << ex.message
- end
-
- node.remove
- end
-
- if deprecated_template_names.present?
- js = <<~JS
- import deprecated from "discourse/lib/deprecated";
-
- export default {
- initialize(){
- const names = #{deprecated_template_names.to_json};
- names.forEach((name) => {
- deprecated(
- `[${name}] adding templates to a theme using
- HTML
- [doc.to_s, errors&.join("\n")]
+ [html, errors&.join("\n")]
end
def validate_svg_sprite_xml
diff --git a/lib/discourse_js_processor.rb b/lib/discourse_js_processor.rb
index fdfa68626fbe4..676ba0bed895e 100644
--- a/lib/discourse_js_processor.rb
+++ b/lib/discourse_js_processor.rb
@@ -2,6 +2,8 @@
require "execjs"
require "mini_racer"
+# MiniRacer::Platform.set_flags!(:trace_wasm_memory)
+
class DiscourseJsProcessor
class TranspileError < StandardError
end
@@ -28,12 +30,15 @@ def self.mutex
def self.build_theme_transpiler
FileUtils.rm_rf("tmp/theme-transpiler") # cleanup old files - remove after Jan 2025
- Discourse::Utils.execute_command(
- "pnpm",
- "-C=app/assets/javascripts/theme-transpiler",
- "node",
- "build.js",
- )
+ result =
+ Discourse::Utils.execute_command(
+ "pnpm",
+ "-C=app/assets/javascripts/theme-transpiler",
+ "node",
+ "build.js",
+ )
+ File.write("app/assets/javascripts/theme-transpiler/theme-transpiler.js", result)
+ result
end
def self.build_production_theme_transpiler
@@ -46,8 +51,8 @@ def self.create_new_context
ctx = MiniRacer::Context.new(timeout: 15_000, ensure_gc_after_idle: 2000)
# General shims
- ctx.attach("rails.logger.info", proc { |err| Rails.logger.info(err.to_s) })
- ctx.attach("rails.logger.warn", proc { |err| Rails.logger.warn(err.to_s) })
+ ctx.attach("rails.logger.info", proc { |err| Rails.logger.info(puts(err)) })
+ ctx.attach("rails.logger.warn", proc { |err| Rails.logger.warn(puts(err)) })
ctx.attach("rails.logger.error", proc { |err| Rails.logger.error(err.to_s) })
source =
@@ -57,6 +62,8 @@ def self.create_new_context
@processor_mutex.synchronize { build_theme_transpiler }
end
+ source = File.read("app/assets/javascripts/theme-transpiler/theme-transpiler.js")
+
ctx.eval(source, filename: "theme-transpiler.js")
ctx
@@ -148,6 +155,10 @@ def terser(tree, opts)
self.class.v8_call("minify", tree, opts, fetch_result_call: "getMinifyResult")
end
+ def rollup(tree, opts)
+ self.class.v8_call("rollup", tree, opts, fetch_result_call: "getRollupResult")
+ end
+
def post_css(css:, map:, source_map_file:)
self.class.v8_call(
"postCss",
diff --git a/lib/theme_javascript_compiler.rb b/lib/theme_javascript_compiler.rb
index 7b6b2eb396585..0c204b2634c37 100644
--- a/lib/theme_javascript_compiler.rb
+++ b/lib/theme_javascript_compiler.rb
@@ -1,9 +1,6 @@
# frozen_string_literal: true
class ThemeJavascriptCompiler
- COLOCATED_CONNECTOR_REGEX =
- %r{\A(?.*/?)connectors/(?[^/]+)/(?[^/\.]+)\.(?.+)\z}
-
class CompileError < StandardError
end
@@ -18,11 +15,12 @@ def self.enable_terser!
@@terser_disabled = false
end
- def initialize(theme_id, theme_name, minify: true)
+ def initialize(theme_id, theme_name, settings = {}, minify: true)
@theme_id = theme_id
@output_tree = []
@theme_name = theme_name
@minify = minify
+ @settings = settings
end
def compile!
@@ -33,10 +31,11 @@ def compile!
output =
if !has_content?
{ "code" => "" }
- elsif @@terser_disabled || !@minify
- { "code" => raw_content }
else
- DiscourseJsProcessor::Transpiler.new.terser(@output_tree.to_h, terser_config)
+ DiscourseJsProcessor::Transpiler.new.rollup(
+ @output_tree.to_h,
+ { themeId: @theme_id, settings: @settings },
+ )
end
@content = output["code"]
@@ -77,24 +76,14 @@ def source_map
@source_map
end
- def raw_content
- @output_tree.map { |filename, source| source }.join("")
- end
+ # def raw_content
+ # @output_tree.map { |filename, source| source }.join("")
+ # end
def has_content?
@output_tree.present?
end
- def prepend_settings(settings_hash)
- @output_tree.prepend ["settings.js", <<~JS]
- (function() {
- if ('require' in window) {
- require("discourse/lib/theme-settings-store").registerSettings(#{@theme_id}, #{settings_hash.to_json});
- }
- })();
- JS
- end
-
def append_tree(tree, include_variables: true)
# Replace legacy extensions
tree.transform_keys! do |filename|
@@ -105,117 +94,8 @@ def append_tree(tree, include_variables: true)
end
end
- # Some themes are colocating connector JS under `/connectors`. Move template to /templates to avoid module name clash
- tree.transform_keys! do |filename|
- match = COLOCATED_CONNECTOR_REGEX.match(filename)
- next filename if !match
-
- is_template = match[:extension] == "hbs"
- is_in_templates_directory = match[:prefix].split("/").last == "templates"
-
- if is_template && !is_in_templates_directory
- "#{match[:prefix]}templates/connectors/#{match[:outlet]}/#{match[:name]}.#{match[:extension]}"
- elsif !is_template && is_in_templates_directory
- "#{match[:prefix].chomp("templates/")}connectors/#{match[:outlet]}/#{match[:name]}.#{match[:extension]}"
- else
- filename
- end
- end
-
- # Handle colocated components
- tree.dup.each_pair do |filename, content|
- is_component_template =
- filename.end_with?(".hbs") &&
- filename.start_with?("discourse/components/", "admin/components/")
- next if !is_component_template
- template_contents = content
-
- hbs_invocation_options = { moduleName: filename, parseOptions: { srcName: filename } }
- hbs_invocation = "hbs(#{template_contents.to_json}, #{hbs_invocation_options.to_json})"
-
- prefix = <<~JS
- import { hbs } from 'ember-cli-htmlbars';
- const __COLOCATED_TEMPLATE__ = #{hbs_invocation};
- JS
-
- js_filename = filename.sub(/\.hbs\z/, ".js")
- js_contents = tree[js_filename] # May be nil for template-only component
- if js_contents && !js_contents.include?("export default")
- message =
- "#{filename} does not contain a `default export`. Did you forget to export the component class?"
- js_contents += "throw new Error(#{message.to_json});"
- end
-
- if js_contents.nil?
- # No backing class, use template-only
- js_contents = <<~JS
- import templateOnly from '@ember/component/template-only';
- export default templateOnly();
- JS
- end
-
- js_contents = prefix + js_contents
-
- tree[js_filename] = js_contents
- tree.delete(filename)
- end
-
# Transpile and write to output
- tree.each_pair do |filename, content|
- module_name, extension = filename.split(".", 2)
-
- if extension == "js" || extension == "gjs"
- append_module(content, module_name, extension, include_variables:)
- elsif extension == "hbs"
- append_ember_template(module_name, content)
- else
- append_js_error(filename, "unknown file extension '#{extension}' (#{filename})")
- end
- rescue CompileError => e
- append_js_error filename, "#{e.message} (#{filename})"
- end
- end
-
- def append_ember_template(name, hbs_template)
- module_name = name
- module_name = "/#{module_name}" if !module_name.start_with?("/")
- module_name = "discourse/theme-#{@theme_id}#{module_name}"
-
- # Mimics the ember-cli implementation
- # https://github.com/ember-cli/ember-cli-htmlbars/blob/d5aa14b3/lib/template-compiler-plugin.js#L18-L26
- script = <<~JS
- import { hbs } from 'ember-cli-htmlbars';
- export default hbs(#{hbs_template.to_json}, { moduleName: #{module_name.to_json} });
- JS
-
- template_module = DiscourseJsProcessor.transpile(script, "", module_name, theme_id: @theme_id)
- @output_tree << ["#{name}.js", <<~JS]
- if ('define' in window) {
- #{template_module}
- }
- JS
- rescue MiniRacer::RuntimeError, DiscourseJsProcessor::TranspileError => ex
- raise CompileError.new ex.message
- end
-
- def append_raw_script(filename, script)
- @output_tree << [filename, script + "\n"]
- end
-
- def append_module(script, name, extension, include_variables: true)
- original_filename = name
- name = "discourse/theme-#{@theme_id}/#{name}"
-
- script = "#{theme_settings}#{script}" if include_variables
- transpiler = DiscourseJsProcessor::Transpiler.new
-
- @output_tree << ["#{original_filename}.#{extension}", <<~JS]
- if ('define' in window) {
- #{transpiler.perform(script, "", name, theme_id: @theme_id, extension: extension).strip}
- }
- JS
- rescue MiniRacer::RuntimeError, DiscourseJsProcessor::TranspileError => ex
- raise CompileError.new ex.message
+ tree.each_pair { |filename, content| @output_tree << [filename, content] }
end
def append_js_error(filename, message)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0f54585901666..eaa4519013019 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1018,12 +1018,30 @@ importers:
app/assets/javascripts/theme-transpiler:
dependencies:
+ '@babel/preset-env':
+ specifier: ^7.27.2
+ version: 7.27.2(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/standalone':
specifier: ^7.27.6
version: 7.27.6
'@csstools/postcss-light-dark-function':
specifier: ^2.0.9
version: 2.0.9(postcss@8.5.4)
+ '@rollup/browser':
+ specifier: ^4.40.2
+ version: 4.41.2
+ '@rollup/plugin-babel':
+ specifier: ^6.0.4
+ version: 6.0.4(@babel/core@7.27.4)
+ '@rollup/wasm-node':
+ specifier: ^4.29.1
+ version: 4.41.2
+ '@swc/wasm-web':
+ specifier: ^1.10.4
+ version: 1.11.31
+ '@zxing/text-encoding':
+ specifier: ^0.9.0
+ version: 0.9.0
autoprefixer:
specifier: ^10.4.21
version: 10.4.21(postcss@8.5.4)
@@ -1057,6 +1075,12 @@ importers:
fastestsmallesttextencoderdecoder:
specifier: ^1.0.22
version: 1.0.22
+ jsdom:
+ specifier: ^25.0.1
+ version: 25.0.1(supports-color@8.1.1)
+ magic-string:
+ specifier: ^0.30.17
+ version: 0.30.17
path-browserify:
specifier: ^1.0.1
version: 1.0.1
@@ -1078,6 +1102,12 @@ importers:
terser:
specifier: ^5.42.0
version: 5.42.0
+ url-polyfill:
+ specifier: ^1.1.12
+ version: 1.1.13
+ url-shim:
+ specifier: ^1.0.1
+ version: 1.0.1
app/assets/javascripts/truth-helpers:
dependencies:
@@ -1140,6 +1170,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-create-regexp-features-plugin@7.27.1':
+ resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/helper-define-polyfill-provider@0.6.3':
resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==}
peerDependencies:
@@ -1173,6 +1209,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/helper-remap-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/helper-replace-supers@7.27.1':
resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
engines: {node: '>=6.9.0'}
@@ -1199,6 +1241,10 @@ packages:
resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-wrap-function@7.27.1':
+ resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helpers@7.27.4':
resolution: {integrity: sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==}
engines: {node: '>=6.9.0'}
@@ -1214,30 +1260,60 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1':
+ resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9':
resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
+ resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9':
resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
+ resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9':
resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.13.0
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
+ resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
'@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9':
resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1':
+ resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-proposal-class-properties@7.18.6':
resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
engines: {node: '>=6.9.0'}
@@ -1288,12 +1364,24 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-import-assertions@7.27.1':
+ resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-import-attributes@7.26.0':
resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-import-attributes@7.27.1':
+ resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-private-property-in-object@7.14.5':
resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
engines: {node: '>=6.9.0'}
@@ -1318,246 +1406,492 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-arrow-functions@7.27.1':
+ resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-async-generator-functions@7.26.8':
resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-async-generator-functions@7.27.1':
+ resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-async-to-generator@7.25.9':
resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-block-scoped-functions@7.26.5':
resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-block-scoped-functions@7.27.1':
+ resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-block-scoping@7.25.9':
resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-block-scoping@7.27.5':
+ resolution: {integrity: sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-class-properties@7.25.9':
resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-class-properties@7.27.1':
+ resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-class-static-block@7.26.0':
resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.12.0
+ '@babel/plugin-transform-class-static-block@7.27.1':
+ resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+
'@babel/plugin-transform-classes@7.25.9':
resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-classes@7.27.1':
+ resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-computed-properties@7.25.9':
resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-computed-properties@7.27.1':
+ resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-destructuring@7.25.9':
resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-destructuring@7.27.3':
+ resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-dotall-regex@7.25.9':
resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-dotall-regex@7.27.1':
+ resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-duplicate-keys@7.25.9':
resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-duplicate-keys@7.27.1':
+ resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9':
resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-transform-dynamic-import@7.25.9':
resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-dynamic-import@7.27.1':
+ resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-exponentiation-operator@7.26.3':
resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-exponentiation-operator@7.27.1':
+ resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-export-namespace-from@7.25.9':
resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-export-namespace-from@7.27.1':
+ resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-for-of@7.26.9':
resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-for-of@7.27.1':
+ resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-function-name@7.25.9':
resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-function-name@7.27.1':
+ resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-json-strings@7.25.9':
resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-json-strings@7.27.1':
+ resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-literals@7.25.9':
resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-literals@7.27.1':
+ resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-logical-assignment-operators@7.25.9':
resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-logical-assignment-operators@7.27.1':
+ resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-member-expression-literals@7.25.9':
resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-member-expression-literals@7.27.1':
+ resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-modules-amd@7.25.9':
resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-modules-amd@7.27.1':
+ resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-modules-commonjs@7.26.3':
resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-modules-commonjs@7.27.1':
+ resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-modules-systemjs@7.25.9':
resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-modules-systemjs@7.27.1':
+ resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-modules-umd@7.25.9':
resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-modules-umd@7.27.1':
+ resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-named-capturing-groups-regex@7.25.9':
resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-transform-new-target@7.25.9':
resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-new-target@7.27.1':
+ resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-nullish-coalescing-operator@7.26.6':
resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1':
+ resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-numeric-separator@7.25.9':
resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-numeric-separator@7.27.1':
+ resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-object-rest-spread@7.25.9':
resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-object-rest-spread@7.27.3':
+ resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-object-super@7.25.9':
resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-object-super@7.27.1':
+ resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-optional-catch-binding@7.25.9':
resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-optional-catch-binding@7.27.1':
+ resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-optional-chaining@7.25.9':
resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-optional-chaining@7.27.1':
+ resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-parameters@7.25.9':
resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-parameters@7.27.1':
+ resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-private-methods@7.25.9':
resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-private-methods@7.27.1':
+ resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-private-property-in-object@7.25.9':
resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-private-property-in-object@7.27.1':
+ resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-property-literals@7.25.9':
resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-property-literals@7.27.1':
+ resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-regenerator@7.25.9':
resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-regenerator@7.27.5':
+ resolution: {integrity: sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-regexp-modifiers@7.26.0':
resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-transform-regexp-modifiers@7.27.1':
+ resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/plugin-transform-reserved-words@7.25.9':
resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-reserved-words@7.27.1':
+ resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-runtime@7.26.10':
resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==}
engines: {node: '>=6.9.0'}
@@ -1570,30 +1904,60 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-shorthand-properties@7.27.1':
+ resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-spread@7.25.9':
resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-spread@7.27.1':
+ resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-sticky-regex@7.25.9':
resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-sticky-regex@7.27.1':
+ resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-template-literals@7.26.8':
resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-template-literals@7.27.1':
+ resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-typeof-symbol@7.26.7':
resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-typeof-symbol@7.27.1':
+ resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-typescript@7.27.1':
resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==}
engines: {node: '>=6.9.0'}
@@ -1611,24 +1975,48 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-unicode-escapes@7.27.1':
+ resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-unicode-property-regex@7.25.9':
resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-unicode-property-regex@7.27.1':
+ resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-unicode-regex@7.25.9':
resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-unicode-regex@7.27.1':
+ resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-unicode-sets-regex@7.25.9':
resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1':
+ resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/polyfill@7.12.1':
resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==}
deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.
@@ -1639,6 +2027,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/preset-env@7.27.2':
+ resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/preset-modules@0.1.6-no-external-plugins':
resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
peerDependencies:
@@ -2468,6 +2862,36 @@ packages:
peerDependencies:
prettier: 3.x
+ '@rollup/browser@4.41.2':
+ resolution: {integrity: sha512-iTVgChhxc1h6Kd6H7gQ/VP+e5uTnO1eSDtXxBNu7qbV3z0SMHYy/jiHPxuOntXRCQ0rJSz9emy0feSkKDzq7lg==}
+
+ '@rollup/plugin-babel@6.0.4':
+ resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ '@types/babel__core': ^7.1.9
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ '@types/babel__core':
+ optional: true
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.1.4':
+ resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/wasm-node@4.41.2':
+ resolution: {integrity: sha512-KexApuUlvP4NK2VOTokeQwB88aFgYcFetNex6IB+cRjuACv2Bid+JQPGC5ULT30MIWI6HhJT07/nuejLBAuZxA==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -2592,6 +3016,9 @@ packages:
'@swc/types@0.1.22':
resolution: {integrity: sha512-D13mY/ZA4PPEFSy6acki9eBT/3WgjMoRqNcdpIvjaYLQ44Xk5BdaL7UkDxAh6Z9UOe7tCCp67BVmZCojYp9owg==}
+ '@swc/wasm-web@1.11.31':
+ resolution: {integrity: sha512-5rugTUwzDBHQZUHWoTh7A3RJQhogKxsSs1JmXpRL/P02ioHNfmjk+oNd0duxLyCLB2ldLgCuYUJpGw9Cz38wtQ==}
+
'@tootallnate/quickjs-emscripten@0.23.0':
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
@@ -2839,6 +3266,9 @@ packages:
'@xtuc/long@4.2.2':
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+ '@zxing/text-encoding@0.9.0':
+ resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
+
a11y-dialog@8.1.3:
resolution: {integrity: sha512-fA1RKuGEeDnfqSUeigf0Yec8SHsn7Qng/V0Tw4lcwbwLl+4bigxqxm8b7UdBhl6cqGmKO/4USRXU1lkCdpW0/g==}
@@ -4758,6 +5188,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -6231,6 +6664,9 @@ packages:
magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
magnific-popup@1.1.0:
resolution: {integrity: sha512-ghSa/1TKsOUL6ZlHfcfFCoB9Wms2nqaDdBEPh6QX9jFYQyMkUu7ciU1mrxedWWq4NM2m1C/llhHKLt6GKRYOzg==}
engines: {node: '>= 0.8.0'}
@@ -8483,6 +8919,13 @@ packages:
resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
deprecated: Please see https://github.com/lydell/urix#deprecated
+ url-polyfill@1.1.13:
+ resolution: {integrity: sha512-tXzkojrv2SujumYthZ/WjF7jaSfNhSXlYMpE5AYdL2I3D7DCeo+mch8KtW2rUuKjDg+3VXODXHVgipt8yGY/eQ==}
+
+ url-shim@1.0.1:
+ resolution: {integrity: sha512-8nwZkCP7pbI8ifcifTZSLRO3W+CWuh/mafPvc7utPRqgxAORnsZIzQ5K8LUsHiQ4mTtJrKRAJmW2ZHxQk0rKUA==}
+ engines: {node: '>= 6'}
+
use@3.1.1:
resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
engines: {node: '>=0.10.0'}
@@ -8934,6 +9377,13 @@ snapshots:
regexpu-core: 6.2.0
semver: 6.3.1
+ '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-annotate-as-pure': 7.27.1
+ regexpu-core: 6.2.0
+ semver: 6.3.1
+
'@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
@@ -8974,11 +9424,20 @@ snapshots:
'@babel/helper-plugin-utils@7.27.1': {}
- '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-wrap-function': 7.25.9
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-annotate-as-pure': 7.27.1
- '@babel/helper-wrap-function': 7.25.9(supports-color@8.1.1)
+ '@babel/helper-wrap-function': 7.27.1(supports-color@8.1.1)
'@babel/traverse': 7.27.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -9005,7 +9464,15 @@ snapshots:
'@babel/helper-validator-option@7.27.1': {}
- '@babel/helper-wrap-function@7.25.9(supports-color@8.1.1)':
+ '@babel/helper-wrap-function@7.25.9':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ '@babel/types': 7.27.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-wrap-function@7.27.1(supports-color@8.1.1)':
dependencies:
'@babel/template': 7.27.2
'@babel/traverse': 7.27.4(supports-color@8.1.1)
@@ -9022,7 +9489,15 @@ snapshots:
dependencies:
'@babel/types': 7.27.3
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
@@ -9035,21 +9510,48 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
+ '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.27.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
- '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
@@ -9068,238 +9570,423 @@ snapshots:
'@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.27.4)
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-module-imports': 7.27.1(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.27.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-module-imports': 7.27.1(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-block-scoping@7.27.5(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-annotate-as-pure': 7.27.1
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.4)
- transitivePeerDependencies:
- - supports-color
+ '@babel/template': 7.27.2
- '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.27.4)':
+ '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
+ '@babel/template': 7.27.2
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)':
+ '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.27.4)':
+ '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-annotate-as-pure': 7.27.1
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.4)
- transitivePeerDependencies:
- - supports-color
- '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.4)':
+ '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.4)':
+ '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.27.4)':
+ '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.27.4)':
+ '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.4)':
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)':
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)':
+ '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/traverse': 7.27.4(supports-color@8.1.1)
- transitivePeerDependencies:
- - supports-color
- '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-module-imports': 7.27.1(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- transitivePeerDependencies:
- - supports-color
- '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.27.4)':
+ '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-classes@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-annotate-as-pure': 7.27.1
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/traverse': 7.27.4(supports-color@8.1.1)
- globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-literals@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.27.4)':
+ '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
- transitivePeerDependencies:
- - supports-color
- '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.27.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.27.4)':
- dependencies:
- '@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-literals@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
- '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
- '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.27.4)':
+ '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
- '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.27.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)(supports-color@8.1.1)
@@ -9313,21 +10000,42 @@ snapshots:
'@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-new-target@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
@@ -9335,7 +10043,23 @@ snapshots:
'@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4)
+ '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4)
+
+ '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
@@ -9348,7 +10072,20 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
@@ -9361,15 +10098,37 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-annotate-as-pure': 7.27.1
'@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-annotate-as-pure': 7.27.1
@@ -9383,23 +10142,44 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
regenerator-transform: 0.15.2
+ '@babel/plugin-transform-regenerator@7.27.5(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-runtime@7.26.10(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
@@ -9417,7 +10197,20 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-spread@7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-spread@7.25.9(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
@@ -9430,16 +10223,31 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
@@ -9465,53 +10273,76 @@ snapshots:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.27.4)
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/polyfill@7.12.1':
dependencies:
core-js: 2.6.12
regenerator-runtime: 0.13.11
- '@babel/preset-env@7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)':
+ '@babel/preset-env@7.26.9(@babel/core@7.27.4)':
dependencies:
'@babel/compat-data': 7.27.3
'@babel/core': 7.27.4(supports-color@8.1.1)
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-option': 7.27.1
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.27.4)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)
'@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.27.4)
'@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.27.4)
'@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4)
'@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.27.4)
+ '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.27.4)
'@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.27.4)
+ '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.27.4)
+ '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.27.4)
@@ -9520,33 +10351,33 @@ snapshots:
'@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.27.4)
'@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.27.4)
+ '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-literals': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.27.4)
+ '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.27.4)
+ '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.27.4)
+ '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.27.4)
'@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.27.4)
+ '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.27.4)
'@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.27.4)
- '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.27.4)
'@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.27.4)
@@ -9563,6 +10394,81 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/preset-env@7.27.2(@babel/core@7.27.4)(supports-color@8.1.1)':
+ dependencies:
+ '@babel/compat-data': 7.27.3
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)
+ '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.27.4)
+ '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4)
+ '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.4)
+ '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-regenerator': 7.27.5(@babel/core@7.27.4)
+ '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.4)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.4)
+ babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.27.4)(supports-color@8.1.1)
+ babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4)(supports-color@8.1.1)
+ babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.27.4)(supports-color@8.1.1)
+ core-js-compat: 3.40.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
@@ -9822,7 +10728,7 @@ snapshots:
'@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.4)
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4)
'@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.27.4)
- '@babel/preset-env': 7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/preset-env': 7.27.2(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/runtime': 7.27.1
'@babel/traverse': 7.27.4(supports-color@8.1.1)
'@embroider/core': 3.5.5(@glint/template@1.4.1-unstable.34c4510)
@@ -9977,7 +10883,7 @@ snapshots:
'@embroider/webpack@4.1.0(@embroider/core@3.5.5(@glint/template@1.4.1-unstable.34c4510))(webpack@5.99.9(@swc/core@1.11.31)(esbuild@0.25.5))':
dependencies:
'@babel/core': 7.27.4(supports-color@8.1.1)
- '@babel/preset-env': 7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/preset-env': 7.27.2(@babel/core@7.27.4)(supports-color@8.1.1)
'@embroider/babel-loader-9': 3.1.1(@embroider/core@3.5.5(@glint/template@1.4.1-unstable.34c4510))(supports-color@8.1.1)(webpack@5.99.9(@swc/core@1.11.31)(esbuild@0.25.5))
'@embroider/core': 3.5.5(@glint/template@1.4.1-unstable.34c4510)
'@embroider/hbs-loader': 3.0.3(@embroider/core@3.5.5(@glint/template@1.4.1-unstable.34c4510))(webpack@5.99.9(@swc/core@1.11.31)(esbuild@0.25.5))
@@ -10709,6 +11615,30 @@ snapshots:
prettier: 3.5.3
rxjs: 6.6.7
+ '@rollup/browser@4.41.2':
+ dependencies:
+ '@types/estree': 1.0.7
+
+ '@rollup/plugin-babel@6.0.4(@babel/core@7.27.4)':
+ dependencies:
+ '@babel/core': 7.27.4(supports-color@8.1.1)
+ '@babel/helper-module-imports': 7.27.1(supports-color@8.1.1)
+ '@rollup/pluginutils': 5.1.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@rollup/pluginutils@5.1.4':
+ dependencies:
+ '@types/estree': 1.0.7
+ estree-walker: 2.0.2
+ picomatch: 4.0.2
+
+ '@rollup/wasm-node@4.41.2':
+ dependencies:
+ '@types/estree': 1.0.7
+ optionalDependencies:
+ fsevents: 2.3.2
+
'@rtsao/scc@1.1.0': {}
'@sigstore/bundle@2.3.2':
@@ -10819,6 +11749,8 @@ snapshots:
dependencies:
'@swc/counter': 0.1.3
+ '@swc/wasm-web@1.11.31': {}
+
'@tootallnate/quickjs-emscripten@0.23.0': {}
'@transloadit/prettier-bytes@0.3.4': {}
@@ -11146,6 +12078,8 @@ snapshots:
'@xtuc/long@4.2.2': {}
+ '@zxing/text-encoding@0.9.0': {}
+
a11y-dialog@8.1.3:
dependencies:
focusable-selectors: 0.8.4
@@ -12700,8 +13634,8 @@ snapshots:
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.4)
'@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.4)
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.4)
- '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/preset-env': 7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.27.4)
+ '@babel/preset-env': 7.26.9(@babel/core@7.27.4)
'@embroider/macros': 1.16.12(@glint/template@1.4.1-unstable.34c4510)
'@embroider/shared-internals': 2.9.0(supports-color@8.1.1)
babel-loader: 8.4.1(@babel/core@7.27.4)(webpack@5.99.9(@swc/core@1.11.31)(esbuild@0.25.5))
@@ -12787,11 +13721,11 @@ snapshots:
'@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.4)
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.4)
'@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.4)
- '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.27.4)
'@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4)
'@babel/polyfill': 7.12.1
- '@babel/preset-env': 7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/preset-env': 7.27.2(@babel/core@7.27.4)(supports-color@8.1.1)
'@babel/runtime': 7.12.18
amd-name-resolver: 1.3.1
babel-plugin-debug-macros: 0.3.4(patch_hash=wki6cycbrrm5sscamn5w4cujby)(@babel/core@7.27.4)
@@ -12822,11 +13756,11 @@ snapshots:
'@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.4)
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.4)
'@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.4)
- '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.27.4)(supports-color@8.1.1)
- '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.27.4)
+ '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.27.4)
'@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.27.4)
'@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4)
- '@babel/preset-env': 7.26.9(@babel/core@7.27.4)(supports-color@8.1.1)
+ '@babel/preset-env': 7.26.9(@babel/core@7.27.4)
'@babel/runtime': 7.12.18
amd-name-resolver: 1.3.1
babel-plugin-debug-macros: 0.3.4(patch_hash=wki6cycbrrm5sscamn5w4cujby)(@babel/core@7.27.4)
@@ -13796,6 +14730,8 @@ snapshots:
estraverse@5.3.0: {}
+ estree-walker@2.0.2: {}
+
esutils@2.0.3: {}
etag@1.8.1: {}
@@ -15550,6 +16486,10 @@ snapshots:
dependencies:
sourcemap-codec: 1.4.8
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
magnific-popup@1.1.0: {}
make-dir@3.1.0:
@@ -18143,6 +19083,10 @@ snapshots:
urix@0.1.0: {}
+ url-polyfill@1.1.13: {}
+
+ url-shim@1.0.1: {}
+
use@3.1.1: {}
username-sync@1.0.3: {}
diff --git a/spec/lib/discourse_js_processor_spec.rb b/spec/lib/discourse_js_processor_spec.rb
index 2d85f6dc7a29c..29a2b708c5b0c 100644
--- a/spec/lib/discourse_js_processor_spec.rb
+++ b/spec/lib/discourse_js_processor_spec.rb
@@ -191,4 +191,130 @@ def standard_compile(template)
expect(map["sourcesContent"]).to contain_exactly(*sources.values)
end
end
+
+ describe "Transpiler#rollup" do
+ it "can rollup code" do
+ sources = { "discourse/initializers/hello.gjs" => <<~JS }
+ someDecorator = () => {}
+ export default class MyClass {
+ @someDecorator
+ myMethod() {
+ console.log('hello world');
+ }
+
+ template content
+
+ }
+ JS
+
+ result = DiscourseJsProcessor::Transpiler.new.rollup(sources, {})
+
+ code = result["code"]
+ expect(code).to include('"hello world"')
+ expect(code).to include("dt7948") # Decorator transform
+
+ expect(result["map"]).not_to be_nil
+ end
+
+ it "supports decorators and class properties without error" do
+ script = <<~JS.chomp
+ export default class MyClass {
+ classProperty = 1;
+ #privateProperty = 1;
+ #privateMethod() {
+ console.log("hello world");
+ }
+ @decorated
+ myMethod(){
+ }
+ }
+ JS
+
+ result =
+ DiscourseJsProcessor::Transpiler.new.rollup(
+ { "discourse/initializers/foo.js" => script },
+ {},
+ )
+ expect(result["code"]).to include("(()=>dt7948.n")
+ end
+
+ it "can use themePrefix in a template" do
+ script = <<~JS.chomp
+ themePrefix();
+ export default class Foo {
+ {{themePrefix "bar"}}
+ }
+ JS
+
+ result =
+ DiscourseJsProcessor::Transpiler.new.rollup(
+ { "discourse/initializers/foo.gjs" => script },
+ { themeId: 22 },
+ )
+ expect(result["code"]).to include(
+ 'window.moduleBroker.lookup("discourse/lib/theme-settings-store")',
+ )
+ end
+
+ it "can use themePrefix not in a template" do
+ script = <<~JS.chomp
+ export default function foo() {
+ return themePrefix("bar");
+ }
+ JS
+
+ result =
+ DiscourseJsProcessor::Transpiler.new.rollup(
+ { "discourse/initializers/foo.js" => script },
+ { themeId: 22 },
+ )
+ expect(result["code"]).to include(
+ 'window.moduleBroker.lookup("discourse/lib/theme-settings-store")',
+ )
+ end
+ end
+
+ it "can compile hbs" do
+ template = <<~HBS.chomp
+ {{log "hello world"}}
+ HBS
+
+ result =
+ DiscourseJsProcessor::Transpiler.new.rollup(
+ { "discourse/connectors/outlet-name/foo.hbs" => template },
+ { themeId: 22 },
+ )
+ expect(result["code"]).to include("createTemplateFactory")
+ end
+
+ it "handles colocation" do
+ js = <<~JS.chomp
+ import Component from "@glimmer/component";
+ export default class MyComponent extends Component {}
+ JS
+
+ template = <<~HBS.chomp
+ {{log "hello world"}}
+ HBS
+
+ onlyTemplate = <<~HBS.chomp
+ {{log "hello galaxy"}}
+ HBS
+
+ result =
+ DiscourseJsProcessor::Transpiler.new.rollup(
+ {
+ "discourse/components/foo.js" => js,
+ "discourse/components/foo.hbs" => template,
+ "discourse/components/bar.hbs" => onlyTemplate,
+ },
+ { themeId: 22 },
+ )
+
+ expect(result["code"]).to include("setComponentTemplate")
+ expect(result["code"]).to include(
+ "bar = setComponentTemplate(__COLOCATED_TEMPLATE__, templateOnly());",
+ )
+ puts result["code"]
+ end
end
diff --git a/spec/lib/theme_javascript_compiler_spec.rb b/spec/lib/theme_javascript_compiler_spec.rb
index 0a6721791892d..bf94e09af1ae4 100644
--- a/spec/lib/theme_javascript_compiler_spec.rb
+++ b/spec/lib/theme_javascript_compiler_spec.rb
@@ -1,23 +1,18 @@
# frozen_string_literal: true
RSpec.describe ThemeJavascriptCompiler do
- let(:compiler) { ThemeJavascriptCompiler.new(1, "marks") }
+ let(:compiler) { ThemeJavascriptCompiler.new(1, "marks", {}) }
describe "#append_ember_template" do
it "maintains module names so that discourse-boot.js can correct them" do
- compiler.append_ember_template("/connectors/blah-1", "{{var}}")
- expect(compiler.raw_content.to_s).to include(
- "define(\"discourse/theme-1/connectors/blah-1\", [\"exports\", ",
- )
-
- compiler.append_ember_template("connectors/blah-2", "{{var}}")
- expect(compiler.raw_content.to_s).to include(
- "define(\"discourse/theme-1/connectors/blah-2\", [\"exports\", ",
- )
+ compiler.append_tree({ "/connectors/blah-1.hbs" => "{{var}}" })
+ compiler.append_tree({ "connectors/blah-2.hbs" => "{{var}}" })
+ compiler.append_tree({ "javascripts/connectors/blah-3.hbs" => "{{var}}" })
- compiler.append_ember_template("javascripts/connectors/blah-3", "{{var}}")
- expect(compiler.raw_content.to_s).to include(
- "define(\"discourse/theme-1/javascripts/connectors/blah-3\", [\"exports\", ",
+ expect(compiler.content.to_s).to include("themeCompatModules[\"/connectors/blah-1\"]")
+ expect(compiler.content.to_s).to include("themeCompatModules[\"connectors/blah-2\"]")
+ expect(compiler.content.to_s).to include(
+ "themeCompatModules[\"javascripts/connectors/blah-3\"]",
)
end
end
@@ -29,16 +24,17 @@
compiler.append_tree(
{
"connectors/outlet/blah-1.hbs" => "{{var}}",
- "connectors/outlet/blah-1.js" => "console.log('test')",
+ "connectors/outlet/blah-1.js" => "export default {};",
},
)
- expect(compiler.raw_content.to_s).to include("discourse/theme-1/connectors/outlet/blah-1")
- expect(compiler.raw_content.to_s).to include(
- "discourse/theme-1/templates/connectors/outlet/blah-1",
- )
- expect(JSON.parse(compiler.source_map)["sources"]).to contain_exactly(
- "connectors/outlet/blah-1.js",
- "templates/connectors/outlet/blah-1.js",
+ expect(compiler.content.to_s).to include(
+ 'themeCompatModules["connectors/outlet/blah-1"]',
+ ).once
+ expect(compiler.content.to_s).to include("templates/connectors/outlet/blah-1")
+ expect(compiler.content.to_s).not_to include("setComponentTemplate")
+ expect(JSON.parse(compiler.source_map)["sources"]).to include(
+ "theme-1/connectors/outlet/blah-1.js",
+ # "theme-1/templates/connectors/outlet/blah-1.js",
)
# Colocated under `/templates/connectors`
@@ -46,16 +42,17 @@
compiler.append_tree(
{
"templates/connectors/outlet/blah-1.hbs" => "{{var}}",
- "templates/connectors/outlet/blah-1.js" => "console.log('test')",
+ "templates/connectors/outlet/blah-1.js" => "export default {};",
},
)
- expect(compiler.raw_content.to_s).to include("discourse/theme-1/connectors/outlet/blah-1")
- expect(compiler.raw_content.to_s).to include(
- "discourse/theme-1/templates/connectors/outlet/blah-1",
- )
- expect(JSON.parse(compiler.source_map)["sources"]).to contain_exactly(
- "connectors/outlet/blah-1.js",
- "templates/connectors/outlet/blah-1.js",
+ expect(compiler.content.to_s).to include(
+ 'themeCompatModules["connectors/outlet/blah-1"]',
+ ).once
+ expect(compiler.content.to_s).to include("templates/connectors/outlet/blah-1")
+ expect(compiler.content.to_s).not_to include("setComponentTemplate")
+ expect(JSON.parse(compiler.source_map)["sources"]).to include(
+ # "connectors/outlet/blah-1.js",
+ "theme-1/templates/connectors/outlet/blah-1.js",
)
# Not colocated
@@ -63,25 +60,43 @@
compiler.append_tree(
{
"templates/connectors/outlet/blah-1.hbs" => "{{var}}",
- "connectors/outlet/blah-1.js" => "console.log('test')",
+ "connectors/outlet/blah-1.js" => "export default {};",
},
)
- expect(compiler.raw_content.to_s).to include("discourse/theme-1/connectors/outlet/blah-1")
- expect(compiler.raw_content.to_s).to include(
- "discourse/theme-1/templates/connectors/outlet/blah-1",
+ expect(compiler.content.to_s).to include(
+ 'themeCompatModules["connectors/outlet/blah-1"]',
+ ).once
+ expect(compiler.content.to_s).to include("templates/connectors/outlet/blah-1")
+ expect(compiler.content.to_s).not_to include("setComponentTemplate")
+ expect(JSON.parse(compiler.source_map)["sources"]).to include(
+ "theme-1/connectors/outlet/blah-1.js",
+ # "templates/connectors/outlet/blah-1.js",
+ )
+
+ # colocation in discourse directory
+ compiler = ThemeJavascriptCompiler.new(1, "marks")
+ compiler.append_tree(
+ {
+ "discourse/connectors/outlet/blah-1.hbs" => "{{var}}",
+ "discourse/connectors/outlet/blah-1.js" => "export default {};",
+ },
)
- expect(JSON.parse(compiler.source_map)["sources"]).to contain_exactly(
- "connectors/outlet/blah-1.js",
- "templates/connectors/outlet/blah-1.js",
+ expect(compiler.content.to_s).to include(
+ 'themeCompatModules["discourse/connectors/outlet/blah-1"]',
+ ).once
+ expect(compiler.content.to_s).to include("discourse/templates/connectors/outlet/blah-1")
+ expect(compiler.content.to_s).not_to include("setComponentTemplate")
+ expect(JSON.parse(compiler.source_map)["sources"]).to include(
+ "theme-1/discourse/connectors/outlet/blah-1.js",
+ # "theme-1/templates/connectors/outlet/blah-1.js",
)
end
end
describe "error handling" do
it "handles syntax errors in ember templates" do
- expect do
- compiler.append_ember_template("sometemplate", "{{invalidtemplate")
- end.to raise_error(ThemeJavascriptCompiler::CompileError, /Parse error on line 1/)
+ compiler.append_tree({ "sometemplate.hbs" => "{{invalidtemplate" })
+ expect(compiler.content).to include("Parse error on line 1")
end
end
@@ -89,6 +104,16 @@
it "can handle multiple modules" do
compiler.append_tree(
{
+ "discourse/initializers/my-initializer.js" => <<~JS,
+ import MyComponent from "../components/mycomponent";
+
+ export default {
+ name: "my-initializer",
+ initialize() {
+ console.log("my-initializer", MyComponent);
+ },
+ };
+ JS
"discourse/components/mycomponent.js" => <<~JS,
import Component from "@glimmer/component";
export default class MyComponent extends Component {}
@@ -96,11 +121,9 @@
"discourse/templates/components/mycomponent.hbs" => "{{my-component-template}}",
},
)
- expect(compiler.raw_content).to include(
- 'define("discourse/theme-1/discourse/components/mycomponent"',
- )
- expect(compiler.raw_content).to include(
- 'define("discourse/theme-1/discourse/templates/components/mycomponent"',
+ expect(compiler.content).to include('themeCompatModules["discourse/components/mycomponent"]')
+ expect(compiler.content).to include(
+ 'themeCompatModules["discourse/templates/components/mycomponent"]',
)
end
@@ -114,8 +137,8 @@
"discourse/components/mycomponent.hbs" => "{{my-component-template}}",
},
)
- expect(compiler.raw_content).to include("__COLOCATED_TEMPLATE__ =")
- expect(compiler.raw_content).to include("setComponentTemplate")
+ expect(compiler.content).to include("__COLOCATED_TEMPLATE__ =")
+ expect(compiler.content).to include("setComponentTemplate")
end
it "handles colocated admin components" do
@@ -128,8 +151,8 @@
"admin/components/mycomponent.hbs" => "{{my-component-template}}",
},
)
- expect(compiler.raw_content).to include("__COLOCATED_TEMPLATE__ =")
- expect(compiler.raw_content).to include("setComponentTemplate")
+ expect(compiler.content).to include("__COLOCATED_TEMPLATE__ =")
+ expect(compiler.content).to include("setComponentTemplate")
end
it "applies theme AST transforms to colocated components" do
@@ -137,39 +160,26 @@
compiler.append_tree(
{ "discourse/components/mycomponent.hbs" => '{{theme-i18n "my_translation_key"}}' },
)
- template_compiled_line = compiler.raw_content.lines.find { |l| l.include?('"block":') }
+ template_compiled_line = compiler.content.lines.find { |l| l.include?('"block":') }
expect(template_compiled_line).to include("12345678910")
end
- it "prints error when default export missing" do
- compiler.append_tree(
- {
- "discourse/components/mycomponent.js" => <<~JS,
- import Component from "@glimmer/component";
- class MyComponent extends Component {}
- JS
- "discourse/components/mycomponent.hbs" => "{{my-component-template}}",
- },
- )
- expect(compiler.raw_content).to include("__COLOCATED_TEMPLATE__ =")
- expect(compiler.raw_content).to include("throw new Error")
- end
-
it "handles template-only components" do
compiler.append_tree(
{ "discourse/components/mycomponent.hbs" => "{{my-component-template}}" },
)
- expect(compiler.raw_content).to include("__COLOCATED_TEMPLATE__ =")
- expect(compiler.raw_content).to include("setComponentTemplate")
- expect(compiler.raw_content).to include("@ember/component/template-only")
+ expect(compiler.content).to include("__COLOCATED_TEMPLATE__ =")
+ expect(compiler.content).to include("setComponentTemplate")
+ expect(compiler.content).to include("@ember/component/template-only")
end
end
describe "terser compilation" do
it "applies terser and provides sourcemaps" do
sources = {
- "multiply.js" => "let multiply = (firstValue, secondValue) => firstValue * secondValue;",
- "add.js" => "let add = (firstValue, secondValue) => firstValue + secondValue;",
+ "multiply.js" =>
+ "export const multiply = (firstValue, secondValue) => firstValue * secondValue;",
+ "add.js" => "export const add = (firstValue, secondValue) => firstValue + secondValue;",
}
compiler.append_tree(sources)
@@ -178,14 +188,13 @@ class MyComponent extends Component {}
expect(compiler.content).to include("add")
map = JSON.parse(compiler.source_map)
- expect(map["sources"]).to contain_exactly(*sources.keys)
- expect(map["sourcesContent"].to_s).to include("let multiply")
- expect(map["sourcesContent"].to_s).to include("let add")
- expect(map["sourceRoot"]).to eq("theme-1/")
+ expect(map["sources"]).to include("theme-1/multiply.js", "theme-1/add.js")
+ expect(map["sourcesContent"].to_s).to include("const multiply")
+ expect(map["sourcesContent"].to_s).to include("const add")
end
it "handles invalid JS" do
- compiler.append_raw_script("filename.js", "if(someCondition")
+ compiler.append_tree({ "filename.js" => "if(someCondition" })
expect(compiler.content).to include('console.error("[THEME 1')
expect(compiler.content).to include("Unexpected token")
end
@@ -204,8 +213,8 @@ class MyComponent extends Component {}
"discourse/components/my-component.hbs" => "{{value}}",
},
)
- expect(compiler.raw_content).to include("ember-this-fallback")
- expect(compiler.raw_content).to include(
+ expect(compiler.content).to include("ember-this-fallback")
+ expect(compiler.content).to include(
"The `value` property path was used in the `discourse/components/my-component.hbs` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{this.value}}",
)
end
@@ -225,12 +234,12 @@ class MyComponent extends Component {}
}
JS
- expect(compiler.raw_content).to include(
- "define(\"discourse/theme-1/discourse/components/my-component\", [\"exports\",",
+ expect(compiler.content).to include(
+ "themeCompatModules[\"discourse/components/my-component\"]",
)
- expect(compiler.raw_content).to include('value = "foo";')
- expect(compiler.raw_content).to include("setComponentTemplate")
- expect(compiler.raw_content).to include("createTemplateFactory")
+ expect(compiler.content).to include('value = "foo";')
+ expect(compiler.content).to include("setComponentTemplate")
+ expect(compiler.content).to include("createTemplateFactory")
end
end
@@ -243,8 +252,8 @@ class MyComponent extends Component {}
}
JS
- expect(compiler.raw_content).to include('value = "foo";')
- expect(compiler.raw_content).to include('complexValue = (() => this.value + "bar")();')
+ expect(compiler.content).to include('value = "foo";')
+ expect(compiler.content).to include('complexValue = (() => this.value + "bar")();')
end
end
end