diff --git a/packages/addon-dev/package.json b/packages/addon-dev/package.json
index 91ed5cfad..5dc4057db 100644
--- a/packages/addon-dev/package.json
+++ b/packages/addon-dev/package.json
@@ -25,6 +25,7 @@
"dependencies": {
"@embroider/shared-internals": "^1.6.0",
"@rollup/pluginutils": "^4.1.1",
+ "assert-never": "^1.2.1",
"fs-extra": "^10.0.0",
"minimatch": "^3.0.4",
"rollup-plugin-copy-assets": "^2.0.3",
diff --git a/packages/addon-dev/src/rollup-hbs-plugin.ts b/packages/addon-dev/src/rollup-hbs-plugin.ts
index 048a811db..d8f180215 100644
--- a/packages/addon-dev/src/rollup-hbs-plugin.ts
+++ b/packages/addon-dev/src/rollup-hbs-plugin.ts
@@ -1,47 +1,127 @@
import { createFilter } from '@rollup/pluginutils';
-import type { Plugin } from 'rollup';
+import type {
+ Plugin,
+ PluginContext,
+ CustomPluginOptions,
+ ResolvedId,
+} from 'rollup';
import { readFileSync } from 'fs';
import { hbsToJS } from '@embroider/shared-internals';
+import assertNever from 'assert-never';
+import { parse as pathParse } from 'path';
export default function rollupHbsPlugin(): Plugin {
- const filter = createFilter('**/*.hbs');
-
return {
name: 'rollup-hbs-plugin',
async resolveId(source: string, importer: string | undefined, options) {
- const resolution = await this.resolve(source, importer, {
+ let resolution = await this.resolve(source, importer, {
skipSelf: true,
...options,
});
- const id = resolution?.id;
-
- if (!filter(id)) return null;
-
- // This creates an `*.hbs.js` that we will populate in `load()` hook.
- return {
- ...resolution,
- id: id + '.js',
- meta: {
- 'rollup-hbs-plugin': {
- originalId: id,
- },
- },
- };
+ if (!resolution) {
+ return maybeSynthesizeComponentJS(this, source, importer, options);
+ } else {
+ return maybeRewriteHBS(resolution);
+ }
},
- load(id: string) {
- const meta = this.getModuleInfo(id)?.meta;
- const originalId = meta?.['rollup-hbs-plugin']?.originalId;
- if (!originalId) {
+ load(id: string) {
+ const meta = getMeta(this, id);
+ if (!meta) {
return;
}
- let input = readFileSync(originalId, 'utf8');
- let code = hbsToJS(input);
- return {
- code,
- };
+ switch (meta.type) {
+ case 'template':
+ let input = readFileSync(meta.originalId, 'utf8');
+ let code = hbsToJS(input);
+ return {
+ code,
+ };
+ case 'template-only-component-js':
+ return {
+ code: templateOnlyComponent,
+ };
+ default:
+ assertNever(meta);
+ }
+ },
+ };
+}
+
+const templateOnlyComponent =
+ `import templateOnly from '@ember/component/template-only';\n` +
+ `export default templateOnly();\n`;
+
+type Meta =
+ | {
+ type: 'template';
+ originalId: string;
+ }
+ | {
+ type: 'template-only-component-js';
+ };
+
+function getMeta(context: PluginContext, id: string): Meta | null {
+ const meta = context.getModuleInfo(id)?.meta?.['rollup-hbs-plugin'];
+ if (meta) {
+ return meta as Meta;
+ } else {
+ return null;
+ }
+}
+
+function correspondingTemplate(filename: string): string {
+ let { ext } = pathParse(filename);
+ return filename.slice(0, filename.length - ext.length) + '.hbs';
+}
+
+async function maybeSynthesizeComponentJS(
+ context: PluginContext,
+ source: string,
+ importer: string | undefined,
+ options: { custom?: CustomPluginOptions; isEntry: boolean }
+) {
+ let templateResolution = await context.resolve(
+ correspondingTemplate(source),
+ importer,
+ {
+ skipSelf: true,
+ ...options,
+ }
+ );
+ if (!templateResolution) {
+ return null;
+ }
+ // we're trying to resolve a JS module but only the corresponding HBS
+ // file exists. Synthesize the template-only component JS.
+ return {
+ id: templateResolution.id.replace(/\.hbs$/, '.js'),
+ meta: {
+ 'rollup-hbs-plugin': {
+ type: 'template-only-component-js',
+ },
+ },
+ };
+}
+
+const hbsFilter = createFilter('**/*.hbs');
+
+function maybeRewriteHBS(resolution: ResolvedId) {
+ if (!hbsFilter(resolution.id)) {
+ return null;
+ }
+
+ // This creates an `*.hbs.js` that we will populate in `load()` hook.
+ return {
+ ...resolution,
+ id: resolution.id + '.js',
+ meta: {
+ 'rollup-hbs-plugin': {
+ type: 'template',
+ originalId: resolution.id,
+ },
},
};
}
diff --git a/packages/addon-dev/src/rollup-public-entrypoints.ts b/packages/addon-dev/src/rollup-public-entrypoints.ts
index 2e788334c..c854222a7 100644
--- a/packages/addon-dev/src/rollup-public-entrypoints.ts
+++ b/packages/addon-dev/src/rollup-public-entrypoints.ts
@@ -1,26 +1,55 @@
import walkSync from 'walk-sync';
-import type { Plugin } from 'rollup';
import { join } from 'path';
+import minimatch from 'minimatch';
+
+import type { Plugin } from 'rollup';
+import { pathExistsSync } from 'fs-extra';
function normalizeFileExt(fileName: string) {
- return fileName.replace(/\.ts|\.gts|\.gjs$/, '.js');
+ return fileName.replace(/\.ts|\.hbs|\.gts|\.gjs$/, '.js');
}
+const hbsPattern = '**/*.hbs';
+
export default function publicEntrypoints(args: {
srcDir: string;
include: string[];
}): Plugin {
return {
name: 'addon-modules',
- buildStart() {
- for (let name of walkSync(args.srcDir, {
- globs: args.include,
- })) {
- this.emitFile({
- type: 'chunk',
- id: join(args.srcDir, name),
- fileName: normalizeFileExt(name),
- });
+ async buildStart() {
+ let matches = walkSync(args.srcDir, {
+ globs: [...args.include, hbsPattern],
+ });
+
+ for (let name of matches) {
+ if (args.include.some((pattern) => minimatch(name, pattern))) {
+ // anything that matches one of the user's patterns is definitely emitted
+ this.emitFile({
+ type: 'chunk',
+ id: join(args.srcDir, name),
+ fileName: normalizeFileExt(name),
+ });
+ } else {
+ // this file didn't match one of the user's patterns, so it must match
+ // our hbsPattern. Infer the possible existence of a synthesized
+ // template-only component JS file and test whether that file would
+ // match the user's patterns.
+ let normalizedName = normalizeFileExt(name);
+ let id = join(args.srcDir, normalizedName);
+ if (
+ args.include.some((pattern) =>
+ minimatch(normalizedName, pattern)
+ ) &&
+ !pathExistsSync(id)
+ ) {
+ this.emitFile({
+ type: 'chunk',
+ id,
+ fileName: normalizedName,
+ });
+ }
+ }
}
},
};
diff --git a/tests/scenarios/package.json b/tests/scenarios/package.json
index 5c9640f93..0d49059a0 100644
--- a/tests/scenarios/package.json
+++ b/tests/scenarios/package.json
@@ -21,37 +21,43 @@
},
"license": "MIT",
"devDependencies": {
+ "@babel/core": "^7.17.5",
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
+ "@babel/plugin-proposal-decorators": "^7.17.2",
+ "@babel/preset-env": "^7.16.11",
"@ember/string": "^1.0.0",
"@embroider/macros": "1.6.0",
"@embroider/addon-shim": "1.6.0",
"@embroider/router": "1.6.0",
"@embroider/util": "1.6.0",
+ "@rollup/plugin-babel": "^5.3.1",
"bootstrap": "^4.3.1",
"broccoli-funnel": "^3.0.5",
"broccoli-merge-trees": "^3.0.2",
"broccoli-persistent-filter": "^3.1.2",
"ember-bootstrap": "^5.0.0",
+ "ember-cli": "~3.28.0",
"ember-cli-3.16": "npm:ember-cli@~3.16.0",
"ember-cli-3.24": "npm:ember-cli@~3.24.0",
- "ember-cli": "~3.28.0",
"ember-cli-beta": "npm:ember-cli@beta",
- "ember-cli-htmlbars-inline-precompile": "^2.1.0",
+ "ember-cli-fastboot": "^3.2.0",
"ember-cli-htmlbars-3": "npm:ember-cli-htmlbars@3",
+ "ember-cli-htmlbars-inline-precompile": "^2.1.0",
"ember-cli-latest": "npm:ember-cli@latest",
- "ember-cli-fastboot": "^3.2.0",
"ember-composable-helpers": "^4.4.1",
+ "ember-data": "~3.28.0",
"ember-data-3.16": "npm:ember-data@~3.16.0",
"ember-data-3.24": "npm:ember-data@~3.24.0",
- "ember-data": "~3.28.0",
"ember-data-latest": "npm:ember-data@latest",
"ember-engines": "^0.8.17",
"ember-inline-svg": "^0.2.1",
- "ember-source-latest": "npm:ember-source@latest",
- "ember-source-beta": "npm:ember-source@beta",
+ "ember-source": "~3.28.0",
"ember-source-3.16": "npm:ember-source@~3.16.0",
"ember-source-3.24": "npm:ember-source@~3.24.0",
- "ember-source": "~3.28.0",
- "ember-truth-helpers": "^3.0.0"
+ "ember-source-beta": "npm:ember-source@beta",
+ "ember-source-latest": "npm:ember-source@latest",
+ "ember-truth-helpers": "^3.0.0",
+ "rollup": "^2.69.1"
},
"volta": {
"node": "14.16.1",
diff --git a/tests/scenarios/v2-addon-dev-test.ts b/tests/scenarios/v2-addon-dev-test.ts
new file mode 100644
index 000000000..85a05ff30
--- /dev/null
+++ b/tests/scenarios/v2-addon-dev-test.ts
@@ -0,0 +1,210 @@
+import path from 'path';
+import { appScenarios, baseV2Addon } from './scenarios';
+import { PreparedApp } from 'scenario-tester';
+import QUnit from 'qunit';
+import merge from 'lodash/merge';
+import { pathExistsSync, readJsonSync } from 'fs-extra';
+
+const { module: Qmodule, test } = QUnit;
+
+/**
+ * The type of addon this is testing with only works in
+ * ember-source@3.25+
+ */
+appScenarios
+ .skip('lts_3_16')
+ .skip('lts_3_24')
+ .map('v2-addon-dev', async project => {
+ let addon = baseV2Addon();
+ addon.pkg.name = 'v2-addon';
+ addon.pkg.files = ['dist'];
+ addon.pkg.exports = {
+ './*': './dist/*',
+ './addon-main.js': './addon-main.js',
+ './package.json': './package.json',
+ };
+ addon.pkg.scripts = {
+ build: 'node ./node_modules/rollup/dist/bin/rollup -c ./rollup.config.mjs',
+ };
+
+ merge(addon.files, {
+ 'babel.config.json': `
+ {
+ "presets": [
+ ["@babel/preset-env", {
+ "targets": ["last 1 firefox versions"]
+ }]
+ ],
+ "plugins": [
+ "@embroider/addon-dev/template-colocation-plugin",
+ ["@babel/plugin-proposal-decorators", { "legacy": true }],
+ [ "@babel/plugin-proposal-class-properties" ]
+ ]
+ }
+ `,
+ 'rollup.config.mjs': `
+ import { babel } from '@rollup/plugin-babel';
+ import { Addon } from '@embroider/addon-dev/rollup';
+
+ const addon = new Addon({
+ srcDir: 'src',
+ destDir: 'dist',
+ });
+
+ export default {
+ output: addon.output(),
+
+ plugins: [
+ addon.publicEntrypoints([
+ 'components/**/*.js',
+ ]),
+
+ addon.appReexports([
+ 'components/demo/index.js',
+ 'components/demo/out.js',
+ ]),
+
+ addon.hbs(),
+ addon.dependencies(),
+
+ babel({ babelHelpers: 'bundled' }),
+
+ addon.clean(),
+ ],
+ };
+ `,
+ src: {
+ components: {
+ demo: {
+ 'button.hbs': `
+
+ `,
+ 'out.hbs': `
+ {{yield}}
+ `,
+ 'index.js': `
+ import Component from '@glimmer/component';
+ import { tracked } from '@glimmer/tracking';
+
+ import FlipButton from './button';
+ import Out from './out';
+
+ export default class ExampleComponent extends Component {
+ Button = FlipButton;
+ Out = Out;
+
+ @tracked active = false;
+
+ flip = () => (this.active = !this.active);
+ }
+ `,
+ 'index.hbs': `
+ Hello there!
+
+ {{this.active}}
+
+
+ `,
+ },
+ },
+ },
+ });
+
+ addon.linkDependency('@embroider/addon-shim', { baseDir: __dirname });
+ addon.linkDependency('@embroider/addon-dev', { baseDir: __dirname });
+ addon.linkDevDependency('@babel/core', { baseDir: __dirname });
+ addon.linkDevDependency('@babel/plugin-proposal-class-properties', { baseDir: __dirname });
+ addon.linkDevDependency('@babel/plugin-proposal-decorators', { baseDir: __dirname });
+ addon.linkDevDependency('@babel/preset-env', { baseDir: __dirname });
+ addon.linkDevDependency('@rollup/plugin-babel', { baseDir: __dirname });
+ addon.linkDevDependency('rollup', { baseDir: __dirname });
+
+ project.addDevDependency(addon);
+
+ merge(project.files, {
+ tests: {
+ 'the-test.js': `
+ import { click, render } from '@ember/test-helpers';
+ import { hbs } from 'ember-cli-htmlbars';
+ import { module, test } from 'qunit';
+ import { setupRenderingTest } from 'ember-qunit';
+
+ module('v2 addon tests', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('', async function (assert) {
+ await render(hbs\`\`);
+
+ assert.dom('out').containsText('false');
+
+ await click('button');
+
+ assert.dom('out').containsText('true');
+ });
+
+ test('', async function (assert) {
+ await render(hbs\`hi\`);
+
+ assert.dom('out').containsText('hi');
+ });
+ });
+ `,
+ },
+ });
+ })
+ .forEachScenario(scenario => {
+ Qmodule(scenario.name, function (hooks) {
+ let app: PreparedApp;
+
+ hooks.before(async () => {
+ app = await scenario.prepare();
+ let result = await inDependency(app, 'v2-addon').execute('yarn build');
+ if (result.exitCode !== 0) {
+ throw new Error(result.output);
+ }
+ });
+
+ Qmodule('The addon', function () {
+ test('output directories exist', async function (assert) {
+ let { dir } = inDependency(app, 'v2-addon');
+ assert.strictEqual(pathExistsSync(path.join(dir, 'dist')), true, 'dist/');
+ assert.strictEqual(pathExistsSync(path.join(dir, 'dist', '_app_')), true, 'dist/_app_');
+ });
+
+ test('package.json is modified appropriately', async function (assert) {
+ let { dir } = inDependency(app, 'v2-addon');
+ let reExports = readJsonSync(path.join(dir, 'package.json'))['ember-addon']['app-js'];
+
+ assert.deepEqual(reExports, {
+ './components/demo/index.js': './dist/_app_/components/demo/index.js',
+ './components/demo/out.js': './dist/_app_/components/demo/out.js',
+ });
+ });
+
+ test('the addon was built successfully', async function (assert) {
+ let { dir } = inDependency(app, 'v2-addon');
+ let files: string[] = Object.values(readJsonSync(path.join(dir, 'package.json'))['ember-addon']['app-js']);
+
+ assert.expect(files.length);
+
+ for (let pathName of files) {
+ assert.deepEqual(pathExistsSync(path.join(dir, pathName)), true, `pathExists: ${pathName}`);
+ }
+ });
+ });
+
+ Qmodule('Consuming app', function () {
+ test(`yarn test`, async function (assert) {
+ let result = await app.execute('yarn test');
+ assert.equal(result.exitCode, 0, result.output);
+ });
+ });
+ });
+ });
+
+// https://github.com/ef4/scenario-tester/issues/5
+function inDependency(app: PreparedApp, dependencyName: string): PreparedApp {
+ return new PreparedApp(path.dirname(require.resolve(`${dependencyName}/package.json`, { paths: [app.dir] })));
+}
diff --git a/yarn.lock b/yarn.lock
index cdf4ff4ac..4daef3667 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,6 +9,13 @@
dependencies:
"@jridgewell/trace-mapping" "^0.3.0"
+"@ampproject/remapping@^2.1.0":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34"
+ integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.0"
+
"@babel/code-frame@7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
@@ -49,6 +56,27 @@
json5 "^2.1.2"
semver "^6.3.0"
+"@babel/core@^7.17.5":
+ version "7.17.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225"
+ integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==
+ dependencies:
+ "@ampproject/remapping" "^2.1.0"
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.17.3"
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.16.7"
+ "@babel/helpers" "^7.17.2"
+ "@babel/parser" "^7.17.3"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.17.3"
+ "@babel/types" "^7.17.0"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
+
"@babel/generator@^7.17.0", "@babel/generator@^7.4.0":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e"
@@ -58,6 +86,15 @@
jsesc "^2.5.1"
source-map "^0.5.0"
+"@babel/generator@^7.17.3":
+ version "7.17.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200"
+ integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==
+ dependencies:
+ "@babel/types" "^7.17.0"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
"@babel/helper-annotate-as-pure@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
@@ -96,6 +133,19 @@
"@babel/helper-replace-supers" "^7.16.7"
"@babel/helper-split-export-declaration" "^7.16.7"
+"@babel/helper-create-class-features-plugin@^7.17.1":
+ version "7.17.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9"
+ integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-member-expression-to-functions" "^7.16.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+
"@babel/helper-create-regexp-features-plugin@^7.16.7":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1"
@@ -162,7 +212,7 @@
dependencies:
"@babel/types" "^7.16.7"
-"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3":
+"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
@@ -265,6 +315,15 @@
"@babel/traverse" "^7.17.0"
"@babel/types" "^7.17.0"
+"@babel/helpers@^7.17.2":
+ version "7.17.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417"
+ integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==
+ dependencies:
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.17.0"
+ "@babel/types" "^7.17.0"
+
"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7":
version "7.16.10"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88"
@@ -279,6 +338,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c"
integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==
+"@babel/parser@^7.17.3":
+ version "7.17.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0"
+ integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050"
@@ -332,6 +396,17 @@
"@babel/plugin-syntax-decorators" "^7.17.0"
charcodes "^0.2.0"
+"@babel/plugin-proposal-decorators@^7.17.2":
+ version "7.17.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493"
+ integrity sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.17.1"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+ "@babel/plugin-syntax-decorators" "^7.17.0"
+ charcodes "^0.2.0"
+
"@babel/plugin-proposal-dynamic-import@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2"
@@ -858,7 +933,7 @@
core-js "^2.6.5"
regenerator-runtime "^0.13.4"
-"@babel/preset-env@^7.10.2", "@babel/preset-env@^7.14.5", "@babel/preset-env@^7.16.5", "@babel/preset-env@^7.16.7", "@babel/preset-env@^7.9.0":
+"@babel/preset-env@^7.10.2", "@babel/preset-env@^7.14.5", "@babel/preset-env@^7.16.11", "@babel/preset-env@^7.16.5", "@babel/preset-env@^7.16.7", "@babel/preset-env@^7.9.0":
version "7.16.11"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982"
integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==
@@ -988,6 +1063,22 @@
debug "^4.1.0"
globals "^11.1.0"
+"@babel/traverse@^7.17.3":
+ version "7.17.3"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57"
+ integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==
+ dependencies:
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.17.3"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-hoist-variables" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ "@babel/parser" "^7.17.3"
+ "@babel/types" "^7.17.0"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2":
version "7.17.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b"
@@ -2227,6 +2318,23 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
+"@rollup/plugin-babel@^5.3.1":
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
+ integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.4"
+ "@rollup/pluginutils" "^3.1.0"
+
+"@rollup/pluginutils@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
+ integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
+ dependencies:
+ "@types/estree" "0.0.39"
+ estree-walker "^1.0.1"
+ picomatch "^2.2.2"
+
"@rollup/pluginutils@^4.1.1":
version "4.1.2"
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.2.tgz#ed5821c15e5e05e32816f5fb9ec607cdf5a75751"
@@ -2514,6 +2622,11 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
+"@types/estree@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
+ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+
"@types/estree@^0.0.50":
version "0.0.50"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
@@ -9325,6 +9438,11 @@ estree-walker@^0.6.1:
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+estree-walker@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
+ integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
+
estree-walker@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
@@ -15600,6 +15718,13 @@ rollup@^2.50.0, rollup@^2.58.0:
optionalDependencies:
fsevents "~2.3.2"
+rollup@^2.69.1:
+ version "2.69.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.69.1.tgz#d37f8bf9c9d60018df58c5c9ec36705a7b90dc6e"
+ integrity sha512-xaQKTomUVZBopk38EIshM/kOoPFkKWisgBV7Emy80coP9MOSLUDrba1jKZhqH0iS5DoGcRbbcuyl/BzblV8w5w==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0:
version "3.6.2"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"