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'); + } + + } + 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 { + + } + 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