diff --git a/.circleci/config.yml b/.circleci/config.yml index 91bc5b92..98c711e4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,6 +38,19 @@ jobs: - run: name: Build & Test packages size command: yarn test:build + - run: + name: Test module format Vue 2 + command: | + node test/modules/vue2/package-is-es-module.mjs + node test/modules/vue2/package-is-cjs-module.cjs + - run: + name: Install Vue 3 + command: ./scripts/test-vue3.sh + - run: + name: Test module format Vue 3 + command: | + node test/modules/vue3/package-is-es-module.mjs + node test/modules/vue3/package-is-cjs-module.cjs test_unit_vue2: <<: *defaults @@ -59,12 +72,9 @@ jobs: steps: - checkout - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - run: - name: Install Vue3 + name: Install Vue 3 command: ./scripts/test-vue3.sh - - save_cache: *save_yarn_cache - run: name: Lint & Code styles command: yarn lint @@ -115,4 +125,3 @@ workflows: branches: only: - master - - feat/vue3-compat diff --git a/.gitignore b/.gitignore index 2a448c03..7d33b0a7 100644 --- a/.gitignore +++ b/.gitignore @@ -18,8 +18,8 @@ yarn-error.log coverage # published files -vue2/ -vue3/ +/vue2/ +/vue3/ # Test output /junit diff --git a/package.json b/package.json index c0917959..b179df21 100644 --- a/package.json +++ b/package.json @@ -28,9 +28,7 @@ "repository": "https://github.com/algolia/vue-instantsearch", "scripts": { "prebuild": "rm -rf vue2 vue3", - "build": "yarn build:vue2 && yarn build:vue3", - "build:vue2": "./scripts/build-vue2.sh", - "build:vue3": "./scripts/build-vue3.sh", + "build": "rollup -c", "storybook": "start-storybook -p 9001 -c .storybook", "storybook:build": "build-storybook -c .storybook -o website/stories", "examples:build": "yarn build && ./examples/build.sh", @@ -66,6 +64,7 @@ } }, "devDependencies": { + "@babel/core": "^7.17.0", "@storybook/addon-actions": "3.4.11", "@storybook/addon-knobs": "3.4.11", "@storybook/addon-options": "3.4.11", @@ -105,6 +104,7 @@ "lodash": "4.17.19", "prettier": "1.14.3", "rollup": "1.32.1", + "rollup-plugin-babel": "4.4.0", "rollup-plugin-buble": "0.19.6", "rollup-plugin-commonjs": "10.0.1", "rollup-plugin-filesize": "9.0.0", diff --git a/rollup.config.js b/rollup.config.js index 1d4353c0..ca64e016 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,3 +1,4 @@ +import path from 'path'; import vueV2 from 'rollup-plugin-vue2'; import vueV3 from 'rollup-plugin-vue3'; import buble from 'rollup-plugin-buble'; @@ -7,90 +8,156 @@ import commonjs from 'rollup-plugin-commonjs'; import { terser } from 'rollup-plugin-terser'; import replace from 'rollup-plugin-replace'; import json from 'rollup-plugin-json'; - -if (process.env.VUE_VERSION !== 'vue2' && process.env.VUE_VERSION !== 'vue3') { - throw new Error( - 'The environment variable VUE_VERSION (`vue2` | `vue3`) is required.' - ); -} +import babel from 'rollup-plugin-babel'; +import { extensionResolver } from './scripts/babel-plugin-extension-resolver'; const processEnv = conf => ({ // parenthesis to avoid syntax errors in places where {} is interpreted as a block 'process.env': `(${JSON.stringify(conf)})`, }); -const vuePlugin = process.env.VUE_VERSION === 'vue3' ? vueV3 : vueV2; -const outputDir = process.env.VUE_VERSION === 'vue3' ? 'vue3' : 'vue2'; +const createFile = (fileName, content) => ({ + name: 'inject-package-json', + buildEnd() { + this.emitFile({ + type: 'asset', + fileName, + source: content, + }); + }, +}); -const plugins = [ - vuePlugin({ compileTemplate: true, css: false }), - commonjs(), - json(), - buble({ - transforms: { - dangerousForOf: true, - }, - }), - replace(processEnv({ NODE_ENV: 'production' })), - terser({ - sourcemap: true, - }), - filesize(), -]; +const aliasVueCompat = vueVersion => ({ + name: 'alias-vue-compat', + resolveId(source, fileName) { + if (source.includes('vue-compat')) { + const matchingVueCompatFile = `./index-${vueVersion}.js`; -const external = id => - ['algoliasearch-helper', 'instantsearch.js', 'vue', 'mitt'].some( - dep => id === dep || id.startsWith(`${dep}/`) - ); + const compatFolder = path.resolve( + path.dirname(fileName), + // source is either './vue-compat' or './vue-compat/index.js' + source.replace(/\/index\.js$/, '/') + ); -export default [ - { - input: 'src/instantsearch.js', - external, - output: [ - { - sourcemap: true, - file: `${outputDir}/cjs/index.js`, - format: 'cjs', - exports: 'named', - }, - ], - plugins: [...plugins], + return path.resolve(compatFolder, matchingVueCompatFile); + } + return null; }, - { - input: 'src/instantsearch.js', - external, - output: [ - { - sourcemap: true, - dir: `${outputDir}/es`, - format: 'es', +}); + +function outputs(vueVersion) { + const vuePlugin = vueVersion === 'vue3' ? vueV3 : vueV2; + + const plugins = [ + vuePlugin({ compileTemplate: true, css: false }), + commonjs(), + json(), + buble({ + transforms: { + dangerousForOf: true, }, - ], - preserveModules: true, - plugins: [...plugins], - }, - { - input: 'src/instantsearch.umd.js', - external: ['vue'], - output: [ - { - sourcemap: true, - file: `${outputDir}/umd/index.js`, - format: 'umd', - name: 'VueInstantSearch', - exports: 'named', - globals: { - vue: 'Vue', + }), + replace(processEnv({ NODE_ENV: 'production' })), + aliasVueCompat(vueVersion), + terser({ + sourcemap: true, + }), + ]; + + const external = id => + ['algoliasearch-helper', 'instantsearch.js', 'vue', 'mitt'].some( + dep => id === dep || id.startsWith(`${dep}/`) + ); + + return [ + { + input: 'src/instantsearch.js', + external, + output: [ + { + sourcemap: true, + file: `${vueVersion}/cjs/index.js`, + format: 'cjs', + exports: 'named', }, - }, - ], - plugins: [ - ...plugins, - resolve({ - browser: true, - preferBuiltins: false, - }), - ], - }, -]; + ], + plugins: [ + ...plugins, + replace({ + 'instantsearch.js/es': 'instantsearch.js/cjs', + }), + createFile( + 'package.json', + JSON.stringify({ type: 'commonjs', sideEffects: true }) + ), + ], + }, + { + input: 'src/instantsearch.js', + external, + output: [ + { + sourcemap: true, + dir: `${vueVersion}/es`, + format: 'es', + }, + ], + preserveModules: true, + plugins: [ + ...plugins, + createFile( + 'index.js', + `import InstantSearch from './src/instantsearch.js'; +export default InstantSearch; +export * from './src/instantsearch.js';` + ), + createFile( + 'package.json', + JSON.stringify({ type: 'module', sideEffects: true }) + ), + babel({ + extensions: ['.js', '.jsx', '.es6', '.es', '.mjs', '.vue'], + babelrc: false, + plugins: [ + [ + extensionResolver, + { + // For verification, see test/module/packages-are-es-modules.mjs + modulesToResolve: [ + // InstantSearch.js/es is an ES Module, so needs complete paths, + 'instantsearch.js', + ], + }, + ], + ], + }), + ], + }, + { + input: 'src/instantsearch.umd.js', + external: ['vue'], + output: [ + { + sourcemap: true, + file: `${vueVersion}/umd/index.js`, + format: 'umd', + name: 'VueInstantSearch', + exports: 'named', + globals: { + vue: 'Vue', + }, + }, + ], + plugins: [ + ...plugins, + resolve({ + browser: true, + preferBuiltins: false, + }), + filesize(), + ], + }, + ]; +} + +export default [...outputs('vue2'), ...outputs('vue3')]; diff --git a/scripts/__mocks__/fs.js b/scripts/__mocks__/fs.js new file mode 100644 index 00000000..accf89be --- /dev/null +++ b/scripts/__mocks__/fs.js @@ -0,0 +1,30 @@ +/* eslint-disable import/no-commonjs */ +const fs = jest.requireActual('fs'); + +let mockFiles = new Set(); +function __setMockFiles(newMockFiles) { + mockFiles = new Set(newMockFiles); +} + +const realStatSync = fs.statSync; +function statSync(pathName, ...args) { + try { + return realStatSync(pathName, ...args); + } catch (e) { + if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) { + if (mockFiles.has(pathName)) { + return { + isFile() { + return true; + }, + }; + } + } + throw e; + } +} + +fs.__setMockFiles = __setMockFiles; +fs.statSync = statSync; + +module.exports = fs; diff --git a/scripts/__tests__/babel-plugin-extension-resolver.test.js b/scripts/__tests__/babel-plugin-extension-resolver.test.js new file mode 100644 index 00000000..701a5a40 --- /dev/null +++ b/scripts/__tests__/babel-plugin-extension-resolver.test.js @@ -0,0 +1,168 @@ +import { transformAsync } from '@babel/core'; + +import { extensionResolver } from '../babel-plugin-extension-resolver'; +import fs from 'fs'; +jest.mock('fs'); + +describe('babel-plugin-extension-resolver', () => { + const pluginOptions = { + modulesToResolve: ['instantsearch.js'], + }; + const options = { + filename: '/path/to/src/file.js', + configFile: false, + babelrc: false, + plugins: [[extensionResolver, pluginOptions]], + }; + + afterEach(() => { + jest.resetAllMocks(); + }); + + it('name=babel-plugin-extension-resolver', () => + expect(extensionResolver({ types: {} }, {}).name).toStrictEqual( + 'babel-plugin-extension-resolver' + )); + + it('ignores empty code', async () => { + expect(await transformAsync('', options)).toHaveProperty('code', ''); + }); + + it('ignores module imports', async () => { + expect( + await transformAsync('import path from "path";', options) + ).toHaveProperty('code', 'import path from "path";'); + }); + + it('finds .js files', async () => { + fs.__setMockFiles([ + '/path/to/src/other.js', + '/path/to/src/other.ts', + '/path/to/src/other.tsx', + ]); + + expect( + await transformAsync('import other from "./other";', options) + ).toHaveProperty('code', 'import other from "./other.js";'); + }); + + it('finds .ts files', async () => { + fs.__setMockFiles(['/path/to/src/other.ts', '/path/to/src/other.tsx']); + + expect( + await transformAsync('import other from "./other";', options) + ).toHaveProperty('code', 'import other from "./other.js";'); + }); + + it('finds .tsx files', async () => { + fs.__setMockFiles(['/path/to/src/other.tsx']); + + expect( + await transformAsync('import other from "./other";', options) + ).toHaveProperty('code', 'import other from "./other.js";'); + }); + + it('finds files in parent directory', async () => { + fs.__setMockFiles(['/path/to/other.js', '/path/to/src/other.js']); + + expect( + await transformAsync('import other from "../other";', options) + ).toHaveProperty('code', 'import other from "../other.js";'); + }); + + it('finds files in child directory', async () => { + fs.__setMockFiles(['/path/to/src/other.js', '/path/to/src/child/other.js']); + + expect( + await transformAsync('import other from "./child/other";', options) + ).toHaveProperty('code', 'import other from "./child/other.js";'); + }); + + it('uses index file', async () => { + fs.__setMockFiles(['/path/to/src/other/index.js']); + + expect( + await transformAsync('import other from "./other";', options) + ).toHaveProperty('code', 'import other from "./other/index.js";'); + }); + + it('uses modulesToResolve', async () => { + fs.__setMockFiles(['/path/to/src/other/index.js']); + + expect( + await transformAsync( + 'import index from "instantsearch.js/es/widgets/index/index";\n' + + 'import root from "instantsearch.js";\n' + + 'import other from "different-module/other";', + options + ) + ).toHaveProperty( + 'code', + 'import index from "instantsearch.js/es/widgets/index/index.js";\n' + + 'import root from "instantsearch.js";\n' + + 'import other from "different-module/other";' + ); + }); + + it('works with multiple imports', async () => { + fs.__setMockFiles(['/path/to/src/other.js', '/path/to/src/another.js']); + + expect( + await transformAsync( + 'import other from "./other";\nimport another from "./another";', + options + ) + ).toHaveProperty( + 'code', + 'import other from "./other.js";\nimport another from "./another.js";' + ); + }); + + it('works with export from', async () => { + fs.__setMockFiles(['/path/to/src/other.js']); + + expect( + await transformAsync('export * from "./other"', options) + ).toHaveProperty('code', 'export * from "./other.js";'); + }); + + it('ignores require()', async () => { + fs.__setMockFiles(['/path/to/src/other.js', '/path/to/src/another.js']); + + expect(await transformAsync('require("./other");', options)).toHaveProperty( + 'code', + 'require("./other");' + ); + }); + + it('ignores other function calls', async () => { + fs.__setMockFiles(['/path/to/src/other.js']); + + expect( + await transformAsync('requireOOPS("./other");', options) + ).toHaveProperty('code', 'requireOOPS("./other");'); + }); + + it('errors if file not found', async () => { + fs.__setMockFiles([]); + + await expect( + transformAsync('import other from "./other";', options) + ).rejects.toThrow( + '/path/to/src/file.js: import for "./other" could not be resolved' + ); + }); + + it('errors if module file not found', async () => { + fs.__setMockFiles([]); + + await expect( + transformAsync( + 'import other from "instantsearch.js/non-existing-folder-this-can-never-exist/qsdf/gh/jklm";', + options + ) + ).rejects.toThrow( + /\/path\/to\/src\/file.js: Cannot find module 'instantsearch.js\/non-existing-folder-this-can-never-exist\/qsdf\/gh\/jklm' from '/ + ); + }); +}); diff --git a/scripts/babel-plugin-extension-resolver.js b/scripts/babel-plugin-extension-resolver.js new file mode 100644 index 00000000..0fc617af --- /dev/null +++ b/scripts/babel-plugin-extension-resolver.js @@ -0,0 +1,211 @@ +// original source: https://github.com/shimataro/babel-plugin-module-extension-resolver +// To create proper ES Modules, the paths imported need to be fully-specified, +// and can't be resolved like is possible with CommonJS. To have large compatibility +// without much hassle, we don't use extensions *inside* the source code, but add +// them with this plugin. + +import fs from 'fs'; +import path from 'path'; + +const PLUGIN_NAME = 'babel-plugin-extension-resolver'; + +export function extensionResolver( + { types }, + { + modulesToResolve = [], + srcExtensions = ['.js', '.ts', '.tsx'], + dstExtension = '.js', + } +) { + return { + name: PLUGIN_NAME, + visitor: { + Program: { + enter: (programPath, state) => { + const fileName = state.filename; + + programPath.traverse( + { + ImportDeclaration(declaration) { + handleImportDeclaration({ + types, + declaration, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, + }); + }, + ExportDeclaration(declaration) { + handleExportDeclaration({ + types, + declaration, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, + }); + }, + }, + state + ); + }, + }, + }, + }; +} + +function handleImportDeclaration({ + types, + declaration, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, +}) { + const source = declaration.get('source'); + replaceSource({ + types, + source, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, + }); +} + +function handleExportDeclaration({ + types, + declaration, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, +}) { + const source = declaration.get('source'); + if (Array.isArray(source)) { + return; + } + replaceSource({ + types, + source, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, + }); +} + +function replaceSource({ + types, + source, + fileName, + modulesToResolve, + srcExtensions, + dstExtension, +}) { + if (!source.isStringLiteral()) { + return; + } + const sourcePath = source.node.value; + if ( + modulesToResolve.every(prefix => !sourcePath.startsWith(`${prefix}/`)) && + !isRelativeDependency(sourcePath) + ) { + return; + } + const baseDir = path.dirname(fileName); + + let normalizedPath; + if (isRelativeDependency(sourcePath)) { + const resolvedPath = resolveRelativePath( + baseDir, + sourcePath, + srcExtensions, + dstExtension + ); + normalizedPath = normalizeRelativePath(resolvedPath); + } else { + const resolvedPath = resolveAbsolutePath(sourcePath); + normalizedPath = normalizeAbsolutePath(resolvedPath); + } + + source.replaceWith(types.stringLiteral(normalizedPath)); +} + +function resolveRelativePath(baseDir, sourcePath, srcExtensions, dstExtension) { + let resolvedPath = resolveRelativeExtension( + baseDir, + sourcePath, + srcExtensions, + dstExtension + ); + + if (resolvedPath === null) { + resolvedPath = resolveRelativeExtension( + baseDir, + path.join(sourcePath, 'index'), + srcExtensions, + dstExtension + ); + } + + if (resolvedPath === null) { + throw new Error(`import for "${sourcePath}" could not be resolved`); + } + + return resolvedPath; +} + +function resolveAbsolutePath(sourcePath) { + return require.resolve(sourcePath).split(['node_modules/'])[1]; +} + +function resolveRelativeExtension( + baseDir, + sourcePath, + srcExtensions, + dstExtension +) { + const absolutePath = path.join(baseDir, sourcePath); + if (isFile(absolutePath)) { + return sourcePath; + } + for (const extension of srcExtensions) { + if (isFile(`${absolutePath}${extension}`)) { + return path.relative(baseDir, `${absolutePath}${dstExtension}`); + } + } + return null; +} + +function normalizeRelativePath(originalPath) { + let normalizedPath = originalPath; + if (path.sep === '\\') { + normalizedPath = normalizedPath.split(path.sep).join('/'); + } + if (normalizedPath[0] !== '.') { + normalizedPath = `./${normalizedPath}`; + } + return normalizedPath; +} + +function normalizeAbsolutePath(originalPath) { + let normalizedPath = originalPath; + if (path.sep === '\\') { + normalizedPath = normalizedPath.split(path.sep).join('/'); + } + return normalizedPath; +} + +function isFile(pathName) { + try { + return fs.statSync(pathName).isFile(); + } catch (err) { + return false; + } +} + +function isRelativeDependency(sourcePath) { + return sourcePath[0] === '.'; +} diff --git a/scripts/build-vue2.sh b/scripts/build-vue2.sh deleted file mode 100755 index 24992608..00000000 --- a/scripts/build-vue2.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -originalContent=`cat src/util/vue-compat/index.js` - -# use v2 for src/util/vue-compat -echo "export * from './index-2';" > src/util/vue-compat/index.js - -VUE_VERSION=vue2 rollup -c - -# revert src/util/vue-compat -echo "$originalContent" > src/util/vue-compat/index.js - -# put an index file for es output -cp ./scripts/es-index-template.js vue2/es/index.js diff --git a/scripts/build-vue3.sh b/scripts/build-vue3.sh deleted file mode 100755 index 7407c9ab..00000000 --- a/scripts/build-vue3.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -e - -originalContent=`cat src/util/vue-compat/index.js` - -# use v3 for src/util/vue-compat -echo "export * from './index-3';" > src/util/vue-compat/index.js - -VUE_VERSION=vue3 rollup -c - -# revert src/util/vue-compat -echo "$originalContent" > src/util/vue-compat/index.js - -# put an index file for es output -cp ./scripts/es-index-template.js vue3/es/index.js diff --git a/scripts/es-index-template.js b/scripts/es-index-template.js deleted file mode 100644 index c8278f1d..00000000 --- a/scripts/es-index-template.js +++ /dev/null @@ -1,3 +0,0 @@ -import InstantSearch from './src/instantsearch.js'; -export default InstantSearch; -export * from './src/instantsearch.js'; diff --git a/scripts/test-vue3.sh b/scripts/test-vue3.sh index 8a1aceae..f0cba379 100755 --- a/scripts/test-vue3.sh +++ b/scripts/test-vue3.sh @@ -3,7 +3,7 @@ set -e yarn remove vue vue-jest vue-template-compiler babel-preset-es2015 yarn add vue@3.1.2 @vue/server-renderer@3.1.2 vue-jest@5.0.0-alpha.10 vue-loader@16.1.2 jest@26.6.3 babel-jest@25.2.6 @babel/preset-env@7.14.5 @babel/plugin-transform-runtime@7.14.5 @babel/core@7.14.5 -D -E -echo "export * from './index-3';" > src/util/vue-compat/index.js +echo "export * from './index-vue3';" > src/util/vue-compat/index.js rm .babelrc cat < babel.config.js // eslint-disable-next-line import/no-commonjs diff --git a/src/util/createInstantSearchComponent.js b/src/util/createInstantSearchComponent.js index 30372381..b64703b3 100644 --- a/src/util/createInstantSearchComponent.js +++ b/src/util/createInstantSearchComponent.js @@ -1,7 +1,7 @@ import { createSuitMixin } from '../mixins/suit'; import { version } from '../../package.json'; // rollup does pick only what needed from json import { _objectSpread } from './polyfills'; -import { isVue3, version as vueVersion } from '../util/vue-compat'; +import { isVue3, version as vueVersion } from './vue-compat'; export const createInstantSearchComponent = component => _objectSpread( diff --git a/src/util/createServerRootMixin.js b/src/util/createServerRootMixin.js index fbb16c91..c0dcce36 100644 --- a/src/util/createServerRootMixin.js +++ b/src/util/createServerRootMixin.js @@ -1,5 +1,5 @@ import instantsearch from 'instantsearch.js/es'; -import { isVue3, isVue2, Vue2, createSSRApp } from '../util/vue-compat'; +import { isVue3, isVue2, Vue2, createSSRApp } from './vue-compat'; import { warn } from './warn'; function walkIndex(indexWidget, visit) { diff --git a/src/util/vue-compat/index-2.js b/src/util/vue-compat/index-vue2.js similarity index 100% rename from src/util/vue-compat/index-2.js rename to src/util/vue-compat/index-vue2.js diff --git a/src/util/vue-compat/index-3.js b/src/util/vue-compat/index-vue3.js similarity index 100% rename from src/util/vue-compat/index-3.js rename to src/util/vue-compat/index-vue3.js diff --git a/src/util/vue-compat/index.js b/src/util/vue-compat/index.js index f1aee577..0b61c62b 100644 --- a/src/util/vue-compat/index.js +++ b/src/util/vue-compat/index.js @@ -1,9 +1,9 @@ /* By default, we maintain this repository based on Vue 2. - That's why this file is exporting from `index-2`, + That's why this file is exporting from `index-vue2`, which includes all the variables and methods for Vue 2. When `scripts/build-vue3.sh` runs, it will replace with - > export * from './index-3'; + > export * from './index-vue3'; and revert it back after finished. */ -export * from './index-2'; +export * from './index-vue2'; diff --git a/test/modules/vue2/package-is-cjs-module.cjs b/test/modules/vue2/package-is-cjs-module.cjs new file mode 100644 index 00000000..2c123341 --- /dev/null +++ b/test/modules/vue2/package-is-cjs-module.cjs @@ -0,0 +1,6 @@ +/* eslint import/extensions: ['error', 'always'], import/no-commonjs: ['error', {allowRequire: true}] */ +const assert = require('assert'); + +const VueInstantSearch2 = require('../../../vue2/cjs/index.js'); + +assert.ok(VueInstantSearch2); diff --git a/test/modules/vue2/package-is-es-module.mjs b/test/modules/vue2/package-is-es-module.mjs new file mode 100644 index 00000000..890a787c --- /dev/null +++ b/test/modules/vue2/package-is-es-module.mjs @@ -0,0 +1,8 @@ +/* eslint import/extensions: ['error', 'always'] */ +import assert from 'assert'; + +import * as VueInstantSearch2 from '../../../vue2/es/index.js'; +import * as Vue2Widgets from '../../../vue2/es/src/widgets.js'; + +assert.ok(VueInstantSearch2); +assert.ok(Vue2Widgets); diff --git a/test/modules/vue3/package-is-cjs-module.cjs b/test/modules/vue3/package-is-cjs-module.cjs new file mode 100644 index 00000000..aa7c13d8 --- /dev/null +++ b/test/modules/vue3/package-is-cjs-module.cjs @@ -0,0 +1,6 @@ +/* eslint import/extensions: ['error', 'always'], import/no-commonjs: ['error', {allowRequire: true}] */ +const assert = require('assert'); + +const VueInstantSearch3 = require('../../../vue3/cjs/index.js'); + +assert.ok(VueInstantSearch3); diff --git a/test/modules/vue3/package-is-es-module.mjs b/test/modules/vue3/package-is-es-module.mjs new file mode 100644 index 00000000..65590bdb --- /dev/null +++ b/test/modules/vue3/package-is-es-module.mjs @@ -0,0 +1,8 @@ +/* eslint import/extensions: ['error', 'always'] */ +import assert from 'assert'; + +import * as VueInstantSearch3 from '../../../vue3/es/index.js'; +import * as Vue3Widgets from '../../../vue3/es/src/widgets.js'; + +assert.ok(VueInstantSearch3); +assert.ok(Vue3Widgets); diff --git a/yarn.lock b/yarn.lock index db82d114..170ae68a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -111,6 +111,13 @@ "@algolia/logger-common" "4.0.1" "@algolia/requester-common" "4.0.1" +"@ampproject/remapping@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.0.tgz#72becdf17ee44b2d1ac5651fb12f1952c336fe23" + integrity sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -118,6 +125,39 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.16.4": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" + integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== + +"@babel/core@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.0.tgz#16b8772b0a567f215839f689c5ded6bb20e864d5" + integrity sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA== + dependencies: + "@ampproject/remapping" "^2.0.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.17.0" + "@babel/parser" "^7.17.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@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.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" @@ -129,6 +169,32 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" + integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-function-name@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0.tgz#a68cc8d04420ccc663dd258f9cc41b8261efa2d4" @@ -138,6 +204,15 @@ "@babel/template" "^7.0.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -145,6 +220,48 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7": + 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== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-split-export-declaration@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" @@ -152,11 +269,37 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-validator-identifier@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helpers@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.0.tgz#79cdf6c66a579f3a7b5e739371bc63ca0306886b" + integrity sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -166,6 +309,15 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0.tgz#697655183394facffb063437ddf52c0277698775" @@ -176,6 +328,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829" integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg== +"@babel/parser@^7.16.7", "@babel/parser@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" + integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== + "@babel/runtime@^7.6.3", "@babel/runtime@^7.9.6": version "7.10.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" @@ -192,6 +349,15 @@ "@babel/parser" "^7.0.0" "@babel/types" "^7.0.0" +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/traverse@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0.tgz#b1fe9b6567fdf3ab542cfad6f3b31f854d799a61" @@ -207,6 +373,22 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.16.7", "@babel/traverse@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" + integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.0" + "@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.0" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" @@ -224,11 +406,37 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" +"@babel/types@^7.16.7", "@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@icons/material@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz#b876e3feefb9c8d3aa84014da28b5e52a0640d72" + integrity sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.10" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz#baf57b4e2a690d4f38560171f91783656b7f8186" + integrity sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz#e051581782a770c30ba219634f2019241c5d3cde" + integrity sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" @@ -3171,6 +3379,17 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.17.5: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -3518,6 +3737,11 @@ caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.300008 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000939.tgz#b9ab7ac9e861bf78840b80c5dfbc471a5cd7e679" integrity sha512-oXB23ImDJOgQpGjRv1tCtzAvJr4/OvrHi5SO2vUgB0g0xpdZZoA/BxfImiWfdwoYdUTtQrPsXsvYU/dmCSM8gg== +caniuse-lite@^1.0.30001286: + version "1.0.30001309" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001309.tgz#e0ee78b9bec0704f67304b00ff3c5c0c768a9f62" + integrity sha512-Pl8vfigmBXXq+/yUz1jUwULeq9xhMJznzdc/xwl4WclDAuebcTHVefpz8lE/bMI+UN7TOkSSe7B7RnZd6+dzjA== + capital-case@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.3.tgz#339bd77e8fab6cf75111d4fca509b3edf7c117c8" @@ -4531,6 +4755,13 @@ convert-source-map@^1.5.1: dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -5550,6 +5781,11 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== +electron-to-chromium@^1.4.17: + version "1.4.66" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.66.tgz#d7453d363dcd7b06ed1757adcde34d724e27b367" + integrity sha512-f1RXFMsvwufWLwYUxTiP7HmjprKXrqEWHiQkjAYa9DJeVIlZk5v8gBGcaV+FhtXLly6C1OTVzQY+2UQrACiLlg== + elliptic@^6.0.0: version "6.5.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" @@ -5776,6 +6012,11 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.1" es6-symbol "^3.1.1" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -6954,6 +7195,11 @@ generic-names@^2.0.1: dependencies: loader-utils "^1.1.0" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -9299,6 +9545,13 @@ json5@^0.5.0, json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -10757,6 +11010,11 @@ node-pre-gyp@^0.6.36: tar "^2.2.1" tar-pack "^3.4.0" +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + node-sass@^4.5.0: version "4.14.1" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" @@ -11603,6 +11861,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4: version "2.0.7" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" @@ -13658,6 +13921,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +rollup-plugin-babel@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + rollup-plugin-buble@0.19.6: version "0.19.6" resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz#55ee0995d8870d536f01f4277c3eef4276e8747e"