diff --git a/.bacon.yml b/.bacon.yml index 456dfafe3..898e77998 100644 --- a/.bacon.yml +++ b/.bacon.yml @@ -20,14 +20,13 @@ test_suites: script_name: integration criteria: MERGE queue_name: small - # Re-enable once ESM bundle issue is fixed - # - name: validate-esm-bundle - # script_path: ../okta-auth-js/scripts - # sort_order: '2' - # timeout: '10' - # script_name: validate-esm-bundle - # criteria: MERGE - # queue_name: small + - name: validate-bundles + script_path: ../okta-auth-js/scripts + sort_order: '2' + timeout: '10' + script_name: validate-bundles + criteria: MERGE + queue_name: small - name: e2e script_path: ../okta-auth-js/scripts sort_order: '3' diff --git a/CHANGELOG.md b/CHANGELOG.md index c9d7d518c..6e59bc521 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ - [#1113](https://github.com/okta/okta-auth-js/pull/1113) Updates types for `SigninWithCredentialsOptions` and `SignInOptions` to support `SP Initiated Auth` - [#1125](https://github.com/okta/okta-auth-js/pull/1125) IDX - Supports auto select methodType (when only one selection is available) for `authenticator-verification-data` remediation +- [#1114](https://github.com/okta/okta-auth-js/pull/1114) Exposes ESM node bundle + +### Fixes + +- [#1114](https://github.com/okta/okta-auth-js/pull/1114) Fixes ESM browser bundle issue by only using ESM `import` syntax ## 6.1.0 diff --git a/babel.cjs.js b/babel.cjs.js index 404c1ee0e..aa7068717 100644 --- a/babel.cjs.js +++ b/babel.cjs.js @@ -6,7 +6,7 @@ module.exports = { [ '@babel/preset-env', { 'targets': { - 'node': true + 'node': 11 }, 'modules': false } @@ -14,6 +14,7 @@ module.exports = { 'plugins': [ '@babel/plugin-transform-typescript', '@babel/plugin-proposal-class-properties', + // https://babeljs.io/docs/en/babel-plugin-transform-runtime#corejs ['@babel/plugin-transform-runtime', { corejs: 3 }], diff --git a/jest.cjs.js b/jest.cjs.js new file mode 100644 index 000000000..fdd9f41c8 --- /dev/null +++ b/jest.cjs.js @@ -0,0 +1,39 @@ +/*! + * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved. + * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") + * + * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and limitations under the License. + */ + +//Jest doc: https://jestjs.io/docs/ecmascript-modules + +var OktaAuth = '/build/cjs/index.js'; + +module.exports = { + 'roots': [ + 'test/validate-bundles' + ], + 'testMatch': [ + '**/test/validate-bundles/**/*.{js,ts}' + ], + 'transform': { + '^.+\\.(ts)$': 'babel-jest' + }, + 'transformIgnorePatterns': [ + OktaAuth + ], + 'restoreMocks': true, + 'moduleNameMapper': { + '^@okta/okta-auth-js$': OktaAuth + }, + 'testPathIgnorePatterns': [], + 'reporters': [ + 'default', + 'jest-junit' + ] +}; diff --git a/jest.esm.mjs b/jest.esm.mjs index 218a00a95..6fa8e3f9e 100644 --- a/jest.esm.mjs +++ b/jest.esm.mjs @@ -12,20 +12,28 @@ //Jest doc: https://jestjs.io/docs/ecmascript-modules -var OktaAuth = '/build/bundles-for-validation/esm/index.mjs'; +const OktaAuth = process.env.BUNDLE_ENV === 'browser' ? + `/build/bundles-for-validation/esm/esm.browser.mjs` : + `/build/esm/esm.node.mjs`; +const testEnvironment = process.env.BUNDLE_ENV === 'browser' ? 'jsdom' : 'node'; export default { - 'roots': [ + roots: [ 'test/validate-bundles' ], - 'testMatch': [ + testEnvironment, + testMatch: [ '**/test/validate-bundles/**/*.{js,ts}' ], - 'transform': {}, - 'restoreMocks': true, - 'moduleNameMapper': { + transform: {}, + restoreMocks: true, + moduleNameMapper: { '^@okta/okta-auth-js$': OktaAuth }, - 'extensionsToTreatAsEsm': ['.ts'], - 'testPathIgnorePatterns': [] + extensionsToTreatAsEsm: ['.ts'], + testPathIgnorePatterns: [], + reporters: [ + 'default', + 'jest-junit' + ] }; diff --git a/lib/AuthStateManager.ts b/lib/AuthStateManager.ts index f79bad1c5..9a2ab0661 100644 --- a/lib/AuthStateManager.ts +++ b/lib/AuthStateManager.ts @@ -9,15 +9,15 @@ * * See the License for the specific language governing permissions and limitations under the License. */ - - + +// @ts-ignore +// Do not use this type in code, so it won't be emitted in the declaration output +import PCancelable from 'p-cancelable'; import { AuthSdkError } from './errors'; import { AuthState, AuthStateLogOptions } from './types'; import { OktaAuth } from '.'; import { getConsole } from './util'; import { EVENT_ADDED, EVENT_REMOVED } from './TokenManager'; -// eslint-disable-next-line import/no-commonjs -const PCancelable = require('p-cancelable'); export const INITIAL_AUTH_STATE = null; const DEFAULT_PENDING = { @@ -43,7 +43,7 @@ const isSameAuthState = (prevState: AuthState | null, state: AuthState) => { export class AuthStateManager { _sdk: OktaAuth; _pending: { - updateAuthStatePromise: typeof PCancelable; + updateAuthStatePromise: any; canceledTimes: number; }; _authState: AuthState | null; diff --git a/lib/OktaAuth.ts b/lib/OktaAuth.ts index f32c949ca..067861084 100644 --- a/lib/OktaAuth.ts +++ b/lib/OktaAuth.ts @@ -133,9 +133,9 @@ import { clearTransactionMeta, isTransactionMetaValid } from './idx/transactionMeta'; - -// eslint-disable-next-line import/no-commonjs -const Emitter = require('tiny-emitter'); +// @ts-ignore +// Do not use this type in code, so it won't be emitted in the declaration output +import Emitter from 'tiny-emitter'; class OktaAuth implements OktaAuthInterface, SigninAPI, SignoutAPI { options: OktaAuthOptions; @@ -151,7 +151,7 @@ class OktaAuth implements OktaAuthInterface, SigninAPI, SignoutAPI { features!: FeaturesAPI; token: TokenAPI; _tokenQueue: PromiseQueue; - emitter: typeof Emitter; + emitter: any; tokenManager: TokenManager; authStateManager: AuthStateManager; http: HttpAPI; diff --git a/lib/browser/browserStorage.ts b/lib/browser/browserStorage.ts index 72a49040c..11c3dbf3d 100644 --- a/lib/browser/browserStorage.ts +++ b/lib/browser/browserStorage.ts @@ -12,6 +12,7 @@ * */ +import Cookies from 'js-cookie'; import AuthSdkError from '../errors/AuthSdkError'; import { StorageProvider, @@ -25,9 +26,6 @@ import { } from '../types'; import { warn } from '../util'; -// eslint-disable-next-line import/no-commonjs -const Cookies = require('js-cookie'); - // Building this as an object allows us to mock the functions in our tests var storageUtil: BrowserStorageUtil = { @@ -246,7 +244,11 @@ var storageUtil: BrowserStorageUtil = { return storageUtil.storage.get(name); }, - get: function(name: string): string { + get: function(name?: string): string { + // return all cookies when no args is provided + if (!arguments.length) { + return Cookies.get(); + } return Cookies.get(name); }, diff --git a/lib/crypto/node.ts b/lib/crypto/node.ts index 00a8601cc..59d05508a 100644 --- a/lib/crypto/node.ts +++ b/lib/crypto/node.ts @@ -16,11 +16,15 @@ // Ponyfill for NodeJS // Webpack config excludes this file +import atobModule from 'atob'; +import btoaModule from 'btoa'; +import { Crypto } from '@peculiar/webcrypto'; + let a; if (typeof atob !== 'undefined') { a = atob; } else { - a = require('atob'); + a = atobModule; } export { a as atob }; @@ -29,22 +33,23 @@ let b; if (typeof btoa !== 'undefined') { b = btoa; } else { - b = require('btoa'); + b = btoaModule; } export { b as btoa }; -let crypto; -try { - crypto = require('crypto'); -} catch (err) { - // this environment has no crypto module! -} +const crypto = (async () => { + try { + return await import('crypto'); + } catch (err) { + // this environment has no crypto module! + return undefined; + } +})(); let webcrypto; if (typeof crypto !== 'undefined' && crypto['webcrypto']) { webcrypto = crypto['webcrypto']; } else { - const { Crypto } = require('@peculiar/webcrypto'); webcrypto = new Crypto(); } diff --git a/lib/server/serverStorage.ts b/lib/server/serverStorage.ts index f8ece12f9..5ff300321 100644 --- a/lib/server/serverStorage.ts +++ b/lib/server/serverStorage.ts @@ -11,10 +11,12 @@ * */ +// @ts-ignore +// Do not use this type in code, so it won't be emitted in the declaration output +import NodeCache from 'node-cache'; import { SimpleStorage, StorageType, StorageUtil, Cookies } from '../types'; import { AuthSdkError } from '../errors'; // eslint-disable-next-line import/no-commonjs -const NodeCache = require('node-cache'); // commonJS module cannot be imported without esModuleInterop // this is a SHARED memory storage to support a stateless http server const sharedStorage = typeof NodeCache === 'function' ? new NodeCache() : null; diff --git a/package.json b/package.json index 14b0b429a..7ad589517 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,19 @@ "homepage": "https://github.com/okta/okta-auth-js", "license": "Apache-2.0", "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/esm.node.mjs", "browser": "build/dist/okta-auth-js.umd.js", "types": "build/lib/index.d.ts", + "exports": { + "node": { + "import": "./build/esm/esm.node.mjs", + "require": "./build/cjs/index.js" + }, + "browser": { + "import": "./build/esm/esm.browser.js" + }, + "default": "./build/dist/okta-auth-js.umd.js" + }, "repository": { "type": "git", "url": "https://github.com/okta/okta-auth-js.git" @@ -20,7 +30,7 @@ "banners": "node ./scripts/maintain-banners.js", "clean": "yarn clean:build", "clean:build": "rimraf build && rimraf build2", - "dev": "webpack --config webpack.dev.config.js", + "dev": "NODE_ENV=development yarn build:esm --watch", "lint": "eslint .", "tsd": "tsd", "lint:report": "eslint -f checkstyle -o ./build2/reports/lint/eslint-checkstyle-result.xml .", @@ -36,7 +46,9 @@ "test:report": "yarn test --ci --silent || true", "test:samples": "yarn workspace @okta/test.e2e.samples start", "test:integration": "jest --config ./jest.integration.js", - "test:bundle:esm": "NODE_OPTIONS=--experimental-vm-modules jest --config ./jest.esm.mjs", + "test:bundle:esm:browser": "cross-env BUNDLE_ENV=browser NODE_OPTIONS=--experimental-vm-modules jest --config ./jest.esm.mjs", + "test:bundle:esm:node": "cross-env BUNDLE_ENV=node NODE_OPTIONS=--experimental-vm-modules jest --config ./jest.esm.mjs", + "test:bundle:cjs": "cross-env BUNDLE_ENV=node jest --config ./jest.cjs.js", "build": "node scripts/build.js", "build:cdn": "cross-env NODE_ENV=production webpack --config webpack.cdn.config.js", "build:web": "cross-env NODE_ENV=production webpack --config webpack.config.js", @@ -78,7 +90,7 @@ "btoa": "^1.2.1", "core-js": "^3.6.5", "cross-fetch": "^3.1.5", - "js-cookie": "2.2.1", + "js-cookie": "^3.0.1", "jsonpath-plus": "^6.0.1", "node-cache": "^5.1.2", "p-cancelable": "^2.0.0", diff --git a/rollup.config.js b/rollup.config.js index 6972e6461..a3fc71bf2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -22,73 +22,91 @@ const makeExternalPredicate = () => { }; const extensions = ['js', 'ts']; - const external = makeExternalPredicate(); -const commonPlugins = [ - replace({ - 'SDK_VERSION': JSON.stringify(pkg.version), - 'global.': 'window.', - preventAssignment: true - }), - alias({ - entries: [ - { find: /.\/node$/, replacement: './browser' } - ] - }), - typescript({ - // eslint-disable-next-line node/no-unpublished-require - typescript: require('typescript'), - tsconfigOverride: { - compilerOptions: { - sourceMap: true, - target: 'ES2017', // skip async/await transpile - declaration: false + +const getPlugins = (env) => { + return [ + replace({ + 'SDK_VERSION': JSON.stringify(pkg.version), + 'global.': 'window.', + preventAssignment: true + }), + (env === 'browser' && alias({ + entries: [ + { find: /.\/node$/, replacement: './browser' } + ] + })), + typescript({ + // eslint-disable-next-line node/no-unpublished-require + typescript: require('typescript'), + tsconfigOverride: { + compilerOptions: { + sourceMap: true, + target: 'ES2017', // skip async/await transpile, + module: 'ES2020', // support dynamic import + declaration: false + } } - } - }), - cleanup({ - extensions, - comments: 'none' - }), - license({ - banner: { - content: { - file: path.join(__dirname, 'scripts', 'license-template'), + }), + // not add @babel/runtime import for development + (process.env.NODE_ENV !== 'development' && babel({ + babelHelpers: 'runtime', + presets: [ + '@babel/preset-env' + ], + plugins: [ + // https://babeljs.io/docs/en/babel-plugin-transform-runtime#corejs + ['@babel/plugin-transform-runtime', { + corejs: 3 + }], + ], + extensions + })), + cleanup({ + extensions, + comments: 'none' + }), + license({ + banner: { + content: { + file: path.join(__dirname, 'scripts', 'license-template'), + } } - } - }) -]; + }) + ]; +}; export default [ { input: 'lib/index.ts', external, - plugins: [ - ...commonPlugins, - babel({ - babelHelpers: 'runtime', - presets: [ - '@babel/preset-env' - - ], - plugins: [ - '@babel/plugin-transform-runtime' - ], - extensions - }), - ], + plugins: getPlugins('browser'), output: [ { format: 'esm', - file: 'build/esm/index.js', + file: 'build/esm/esm.browser.js', exports: 'named', sourcemap: true }, - { + // not emit test bundle for development + (process.env.NODE_ENV !== 'development' && { // generate ems bundle for jest test, ".mjs" extension should be used // this bundle is excluded from the release package format: 'esm', - file: 'build/bundles-for-validation/esm/index.mjs', + file: 'build/bundles-for-validation/esm/esm.browser.mjs', + exports: 'named', + sourcemap: true + }) + ] + }, + { + input: 'lib/index.ts', + external, + plugins: getPlugins('node'), + output: [ + { + format: 'esm', + file: 'build/esm/esm.node.mjs', exports: 'named', sourcemap: true } diff --git a/scripts/build.js b/scripts/build.js index 6dba320cb..e4cb2ebb7 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -74,18 +74,24 @@ let packageJSON = JSON.parse(fs.readFileSync(`${BUILD_DIR}/package.json`)); packageJSON.private = false; packageJSON.scripts.prepare = ''; -// Remove "build/" from the entrypoint paths. -['main', 'module', 'browser', 'types'].forEach(function(key) { - const value = packageJSON[key]; - if (typeof value === 'object' && value !== null) { - packageJSON[key] = Object.keys(value).reduce((acc, curr) => { - const newKey = curr.replace('build/', ''); - acc[newKey] = value[curr].replace('build/', ''); +function removeBuildDir(val) { + if (typeof val === 'string') { + return val.replace('build/', ''); + } + + if (typeof val === 'object') { + return Object.entries(val).reduce((acc, [key, value]) => { + acc[key] = removeBuildDir(value); return acc; }, {}); - } else { - packageJSON[key] = packageJSON[key].replace('build/', ''); } + + throw new Error('Value type not supported'); +} + +// Remove "build/" from the entrypoint paths. +['main', 'module', 'browser', 'types', 'exports'].forEach(function(key) { + packageJSON[key] = removeBuildDir(packageJSON[key]); }); fs.writeFileSync(`${BUILD_DIR}/package.json`, JSON.stringify(packageJSON, null, 4)); diff --git a/scripts/setup.sh b/scripts/setup.sh index 2eecb0cfb..1fd26ada2 100644 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -6,7 +6,6 @@ export PATH="${PATH}:$(yarn global bin)" # Install required node version export NVM_DIR="/root/.nvm" NODE_VERSION="${1:-v12.13.0}" -echo $NODE_VERSION setup_service node $NODE_VERSION cd ${OKTA_HOME}/${REPO} diff --git a/scripts/validate-esm-bundle.sh b/scripts/validate-bundles.sh similarity index 51% rename from scripts/validate-esm-bundle.sh rename to scripts/validate-bundles.sh index 8fc5bad8e..475422176 100644 --- a/scripts/validate-esm-bundle.sh +++ b/scripts/validate-bundles.sh @@ -5,8 +5,18 @@ source ${OKTA_HOME}/${REPO}/scripts/setup.sh "v14.18.0" export TEST_SUITE_TYPE="junit" export TEST_RESULT_FILE_DIR="${REPO}/build2/reports/unit" -if ! yarn test:bundle:esm; then - echo "validate esm bundle failed! Exiting..." +if ! yarn test:bundle:esm:browser; then + echo "validate ESM browser bundle failed! Exiting..." + exit ${TEST_FAILURE} +fi + +if ! yarn test:bundle:esm:node; then + echo "validate ESM node bundle failed! Exiting..." + exit ${TEST_FAILURE} +fi + +if ! yarn test:bundle:cjs; then + echo "validate cjs bundle failed! Exiting..." exit ${TEST_FAILURE} fi diff --git a/test/apps/app/package.json b/test/apps/app/package.json index 8b50a4e57..d5ff6ea17 100644 --- a/test/apps/app/package.json +++ b/test/apps/app/package.json @@ -1,4 +1,5 @@ { + "private": true, "name": "@okta/test.app", "version": "1.0.0", "description": "", @@ -37,5 +38,11 @@ }, "peerDependencies": { "@okta/okta-signin-widget": "^6.0.0" + }, + "workspaces": { + "nohoist": [ + "**/js-cookie", + "**/@types/js-cookie" + ] } } diff --git a/test/apps/node-esm/index.js b/test/apps/node-esm/index.js new file mode 100644 index 000000000..93bc98cfa --- /dev/null +++ b/test/apps/node-esm/index.js @@ -0,0 +1,7 @@ +/* eslint-disable */ +import { OktaAuth } from "@okta/okta-auth-js"; + +const oktaAuth = new OktaAuth({ + issuer: 'https://xxx.okta.com', + clientId: '0oal89rzfrHjIVqQw5d6' +}); diff --git a/test/apps/node-esm/package.json b/test/apps/node-esm/package.json new file mode 100644 index 000000000..57d07b3f4 --- /dev/null +++ b/test/apps/node-esm/package.json @@ -0,0 +1,12 @@ +{ + "private": true, + "name": "@okta/test.app.node-esm", + "version": "1.0.0", + "type": "module", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "@okta/okta-auth-js": "*" + } +} diff --git a/test/apps/react-oie/.eslintrc.js b/test/apps/react-oie/.eslintrc.js index 00b65ecde..516c15177 100644 --- a/test/apps/react-oie/.eslintrc.js +++ b/test/apps/react-oie/.eslintrc.js @@ -1,4 +1,17 @@ -// eslint is disabled due to the current yarn workspace cannot support CRA submodule very well module.exports = { - ignorePatterns: ['**/*.js'] + 'env': { + 'browser': true + }, + 'parserOptions': { + 'sourceType': 'module', + 'ecmaVersion': 2020 + }, + 'rules': { + 'node/no-extraneous-import': ['error', { + 'allowModules': [ + '@okta/okta-auth-js', + '@okta/env' + ] + }] + } }; diff --git a/test/apps/react-oie/.gitignore b/test/apps/react-oie/.gitignore index 4d29575de..a547bf36d 100644 --- a/test/apps/react-oie/.gitignore +++ b/test/apps/react-oie/.gitignore @@ -1,23 +1,24 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - +# Logs +logs +*.log npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/test/apps/react-oie/config-overrides.js b/test/apps/react-oie/config-overrides.js deleted file mode 100644 index f5b5ea14a..000000000 --- a/test/apps/react-oie/config-overrides.js +++ /dev/null @@ -1,39 +0,0 @@ -const webpack = require('webpack'); -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; - -const envModule = require('@okta/env'); -envModule.setEnvironmentVarsFromTestEnv(); - -const env = {}; -// List of environment variables made available to the app -['ISSUER', 'SPA_CLIENT_ID', 'CLIENT_ID'].forEach((key) => { - if (!process.env[key]) { - throw new Error(`Environment variable ${key} must be set. See README.md`); - } - env[key] = JSON.stringify(process.env[key]); -}); - -module.exports = { - webpack: (config) => { - // Remove the 'ModuleScopePlugin' which keeps us from requiring outside the src/ dir - config.resolve.plugins = []; - - // Define global vars from env vars (process.env has already been defined) - config.plugins = config.plugins.concat([ - new webpack.DefinePlugin({ - 'process.env': env, - }), - new BundleAnalyzerPlugin({ openAnalyzer: false }) - ]); - - config.mode = 'development'; - config.devtool = 'source-map'; - config.module.rules.push({ - test: /\.js$/, - use: ['source-map-loader'], - enforce: 'pre', - }); - - return config; - } -} diff --git a/test/apps/react-oie/index.html b/test/apps/react-oie/index.html new file mode 100644 index 000000000..645aaf591 --- /dev/null +++ b/test/apps/react-oie/index.html @@ -0,0 +1,13 @@ + + + + + + + OIE React Test App + + +
+ + + diff --git a/test/apps/react-oie/package.json b/test/apps/react-oie/package.json index 05fd4590e..c455b1b74 100644 --- a/test/apps/react-oie/package.json +++ b/test/apps/react-oie/package.json @@ -1,39 +1,26 @@ { "name": "@okta/test.app.react-oie", - "version": "0.1.0", "private": true, + "version": "0.0.0", + "scripts": { + "start": "vite", + "build": "vite build", + "preview": "vite preview" + }, "dependencies": { - "@okta/okta-auth-js": "*", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.1.0", - "@testing-library/user-event": "^12.1.10", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-router-dom": "^5.2.0", - "react-scripts": "4.0.3", - "web-vitals": "^1.0.1" + "@okta/okta-auth-js": "*" }, "devDependencies": { - "react-app-rewired": "^2.1.8", - "webpack": "^4.46.0", - "webpack-bundle-analyzer": "^4.5.0" - }, - "scripts": { - "start": "SKIP_PREFLIGHT_CHECK=true PORT=8080 react-app-rewired start", - "build": "react-app-rewired build", - "test": "react-app-rewired test", - "eject": "react-scripts eject" + "@vitejs/plugin-react": "^1.0.7", + "vite": "^2.8.0", + "rollup-plugin-visualizer": "^5.5.4" }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" + "workspaces": { + "nohoist": [ + "**/react/**", + "**/react-dom/**" ] } -} +} \ No newline at end of file diff --git a/test/apps/react-oie/public/index.html b/test/apps/react-oie/public/index.html deleted file mode 100644 index 127f78970..000000000 --- a/test/apps/react-oie/public/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - React App - - - -
- - - diff --git a/test/apps/react-oie/public/manifest.json b/test/apps/react-oie/public/manifest.json deleted file mode 100644 index 1f2f141fa..000000000 --- a/test/apps/react-oie/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/test/apps/react-oie/public/robots.txt b/test/apps/react-oie/public/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/test/apps/react-oie/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/test/apps/react-oie/src/App.js b/test/apps/react-oie/src/App.jsx similarity index 100% rename from test/apps/react-oie/src/App.js rename to test/apps/react-oie/src/App.jsx diff --git a/test/apps/react-oie/src/config.js b/test/apps/react-oie/src/config.js index 7d76d553e..718b529a1 100644 --- a/test/apps/react-oie/src/config.js +++ b/test/apps/react-oie/src/config.js @@ -2,7 +2,6 @@ const CLIENT_ID = process.env.SPA_CLIENT_ID || process.env.CLIENT_ID || '{client const ISSUER = process.env.ISSUER || 'https://{yourOktaDomain}.com/oauth2/default'; const REDIRECT_URI = `${window.location.origin}/login/callback`; -// eslint-disable-next-line import/no-anonymous-default-export export default { clientId: CLIENT_ID, issuer: ISSUER, diff --git a/test/apps/react-oie/src/formTransformer.js b/test/apps/react-oie/src/formTransformer.js index b7ae8c86e..1171e8c52 100644 --- a/test/apps/react-oie/src/formTransformer.js +++ b/test/apps/react-oie/src/formTransformer.js @@ -16,7 +16,7 @@ const inputTransformer = nextStep => form => { } else if (type === 'string') { type = 'text'; } else if (type === 'boolean') { - type = 'checkbox' + type = 'checkbox'; } return { label, name, type, required }; }) diff --git a/test/apps/react-oie/src/index.js b/test/apps/react-oie/src/main.jsx similarity index 100% rename from test/apps/react-oie/src/index.js rename to test/apps/react-oie/src/main.jsx diff --git a/test/apps/react-oie/vite.config.js b/test/apps/react-oie/vite.config.js new file mode 100644 index 000000000..65d8e50aa --- /dev/null +++ b/test/apps/react-oie/vite.config.js @@ -0,0 +1,34 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { visualizer } from 'rollup-plugin-visualizer'; +import envModule from '@okta/env'; + +envModule.setEnvironmentVarsFromTestEnv(); + +const env = {}; +// List of environment variables made available to the app +['ISSUER', 'CLIENT_ID', 'SPA_CLIENT_ID'].forEach((key) => { + if (!process.env[key]) { + throw new Error(`Environment variable ${key} must be set. See README.md`); + } + env[key] = process.env[key]; +}); + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + define: { + 'process.env': env + }, + server: { + port: 8080 + }, + build: { + rollupOptions: { + plugins: [visualizer({ + filename: 'dist/stats.html', + gzipSize: true + })] + } + } +}); diff --git a/test/validate-bundles/index.ts b/test/validate-bundles/index.ts index 45d6608df..f0e6b11d8 100644 --- a/test/validate-bundles/index.ts +++ b/test/validate-bundles/index.ts @@ -1,5 +1,10 @@ - +// eslint-disable-next-line node/no-extraneous-import +import { jest } from '@jest/globals'; +import Cookies from 'js-cookie'; +import Emitter from 'tiny-emitter'; +import PCancelable from 'p-cancelable'; import { OktaAuth } from '@okta/okta-auth-js'; +import NodeCache from 'node-cache'; describe('OktaAuth (api)', function() { let auth; @@ -12,5 +17,68 @@ describe('OktaAuth (api)', function() { it('is a valid constructor', function() { expect(auth instanceof OktaAuth).toBe(true); + expect(auth.emitter).toBeInstanceOf(Emitter); + }); + + it('can updateAuthState', () => { + auth.authStateManager.updateAuthState(); + expect(auth.authStateManager._pending.updateAuthStatePromise).toBeInstanceOf(PCancelable); }); + + describe('Storage', () => { + describe('browser bundle - uses js-cookie', () => { + if (process.env.BUNDLE_ENV !== 'browser') { + return; + } + + it('get', () => { + jest.spyOn(Cookies, 'get'); + auth.options.storageUtil.storage.get(); + expect(Cookies.get).toHaveBeenCalled(); + + }); + it('set', () => { + jest.spyOn(Cookies, 'set'); + auth.options.storageUtil.storage.set('fakekey', 'fakevalue', '1644877195617', { secure: true, sameSite: 'none' }); + expect(Cookies.set).toHaveBeenCalledWith('fakekey', 'fakevalue', { + path: '/', + sameSite: 'none', + secure: true + }); + }); + it('delete', () => { + jest.spyOn(Cookies, 'remove'); + auth.options.storageUtil.storage.delete('fakekey'); + expect(Cookies.remove).toHaveBeenCalledWith('fakekey', { path: '/' }); + }); + }); + + describe('node bundle - uses node-cache', () => { + if (process.env.BUNDLE_ENV !== 'node') { + return; + } + + it('use node-cache as storage', () => { + expect(auth.options.storageUtil.nodeCache).toBeInstanceOf(NodeCache); + }); + + it('get', () => { + jest.spyOn(auth.options.storageUtil.nodeCache, 'get'); + auth.options.storageUtil.storage.get('fakekey'); + expect(auth.options.storageUtil.nodeCache.get).toHaveBeenCalled(); + }); + it('set', () => { + jest.spyOn(auth.options.storageUtil.nodeCache, 'set'); + auth.options.storageUtil.storage.set('fakekey', 'fakevalue', '1644877195617'); + expect(auth.options.storageUtil.nodeCache.set).toHaveBeenCalled(); + }); + it('delete', () => { + jest.spyOn(auth.options.storageUtil.nodeCache, 'del'); + auth.options.storageUtil.storage.delete('fakekey'); + expect(auth.options.storageUtil.nodeCache.del).toHaveBeenCalled(); + }); + }); + + }); + }); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index a537e02be..d42643891 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "composite": false, - "module": "es6", + "module": "es2020", "target": "es6", "allowJs": true, "checkJs": true, diff --git a/webpack.dev.config.js b/webpack.dev.config.js deleted file mode 100644 index 45f498e68..000000000 --- a/webpack.dev.config.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * This config builds a minified version that can be imported - * anywhere without any dependencies. It also preserves license comments. - */ -var path = require('path'); -var _ = require('lodash'); -var commonConfig = require('./webpack.common.config'); - -module.exports = _.extend({}, _.cloneDeep(commonConfig), { - mode: 'development', - entry: './lib/', - output: { - path: path.join(__dirname, 'build', 'dist'), - filename: 'okta-auth-js.umd.js', - library: 'OktaAuth', - libraryTarget: 'umd' - }, - devtool: 'source-map', - watch: true -}); diff --git a/yarn.lock b/yarn.lock index c85b6726d..81969ba6e 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.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.1.tgz#7922fb0817bf3166d8d9e258c57477e3fd1c3610" + integrity sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + "@babel/cli@^7.8.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.5.tgz#9551b194f02360729de6060785bbdcce52c69f0a" @@ -132,6 +139,27 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.16.12": + version "7.17.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.4.tgz#a22f1ae8999122873b3d18865e98c7a3936b8c8b" + integrity sha512-R9x5r4t4+hBqZTmioSnkrW+I6NmbojwjGT8p4G2Gw1thWbXIHGDnmGdLdFw0/7ljucdIrNRp7Npgb4CyBYzzJg== + 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/core@^7.7.2": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.2.tgz#2c77fc430e95139d816d39b113b31bf40fb22337" @@ -180,6 +208,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.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" @@ -187,6 +224,13 @@ dependencies: "@babel/types" "^7.14.5" +"@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" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" @@ -596,6 +640,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-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" @@ -861,6 +910,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1188,6 +1244,13 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.14.5" +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-self@^7.12.1": version "7.14.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz#33041e665453391eb6ee54a2ecf3ba1d46bd30f4" @@ -1195,6 +1258,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-jsx-self@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" + integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-jsx-source@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz#79f728e60e6dbd31a2b860b0bf6c9765918acf1d" @@ -1202,6 +1272,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-jsx-source@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" + integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.14.5": version "7.14.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c" @@ -1213,6 +1290,17 @@ "@babel/plugin-syntax-jsx" "^7.14.5" "@babel/types" "^7.14.9" +"@babel/plugin-transform-react-jsx@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.17.0" + "@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" @@ -1730,6 +1818,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.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" @@ -2949,6 +3053,14 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.2.tgz#ed5821c15e5e05e32816f5fb9ec607cdf5a75751" + integrity sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -3411,9 +3523,9 @@ pretty-format "^27.0.0" "@types/js-cookie@^2.2.6": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" - integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" + integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": version "7.0.7" @@ -3868,6 +3980,20 @@ "@typescript-eslint/types" "4.29.0" eslint-visitor-keys "^2.0.0" +"@vitejs/plugin-react@^1.0.7": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-1.2.0.tgz#4cfb4c0475e93885e56d66ff15e12ef4c34b0af0" + integrity sha512-Rywwt0IXXg6yQ0hv3cMT3mtdDcGIw31mGaa+MMMAT651LhoXLF2yFy4LrakiTs7UKs7RPBo9eNgaS8pgl2A6Qw== + dependencies: + "@babel/core" "^7.16.12" + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-jsx-self" "^7.16.7" + "@babel/plugin-transform-react-jsx-source" "^7.16.7" + "@rollup/pluginutils" "^4.1.2" + react-refresh "^0.11.0" + resolve "^1.22.0" + "@wdio/cli@^6.6.0": version "6.12.1" resolved "https://registry.yarnpkg.com/@wdio/cli/-/cli-6.12.1.tgz#9d2f0986c9fab2d02a620522a4f8c94fb24c20e8" @@ -7993,6 +8119,11 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -8835,6 +8966,126 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.3" es6-symbol "^3.1.1" +esbuild-android-arm64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz#8842d0c3b7c81fbe2dc46ddb416ffd6eb822184b" + integrity sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ== + +esbuild-darwin-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz#ec7df02ad88ecf7f8fc23a3ed7917e07dea0c9c9" + integrity sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ== + +esbuild-darwin-arm64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz#0c2a977edec1ef54097ee56a911518c820d4e5e4" + integrity sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ== + +esbuild-freebsd-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz#f5b5fc1d031286c3a0949d1bda7db774b7d0404e" + integrity sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g== + +esbuild-freebsd-arm64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz#a05cab908013e4992b31a675850b8c44eb468c0c" + integrity sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA== + +esbuild-linux-32@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz#638d244cc58b951f447addb4bade628d126ef84b" + integrity sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg== + +esbuild-linux-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz#8eb634abee928be7e35b985fafbfef2f2e31397f" + integrity sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA== + +esbuild-linux-arm64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz#e05599ea6253b58394157da162d856f3ead62f9e" + integrity sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g== + +esbuild-linux-arm@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz#1ae1078231cf689d3ba894a32d3723c0be9b91fd" + integrity sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w== + +esbuild-linux-mips64le@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz#f05be62d126764e99b37edcac5bb49b78c7a8890" + integrity sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A== + +esbuild-linux-ppc64le@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz#592c98d82dad7982268ef8deed858c4566f07ab1" + integrity sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ== + +esbuild-linux-riscv64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz#0db7bd6f10d8f9afea973a7d6bf87b449b864b7b" + integrity sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q== + +esbuild-linux-s390x@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz#254a9354d34c9d1b41a3e21d2ec9269cbbb2c5df" + integrity sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA== + +esbuild-netbsd-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz#4cb783d060b02bf3b897a9a12cce2b3b547726f8" + integrity sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g== + +esbuild-openbsd-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz#f886b93feefddbe573528fa4b421c9c6e2bc969b" + integrity sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA== + +esbuild-sunos-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz#3829e4d57d4cb6950837fe90b0b67cdfb37cf13a" + integrity sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA== + +esbuild-windows-32@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz#b858a22d1a82e53cdc59310cd56294133f7a95e7" + integrity sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A== + +esbuild-windows-64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz#7bb5a027d5720cf9caf18a4bedd11327208f1f12" + integrity sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA== + +esbuild-windows-arm64@0.14.21: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz#25df54521ad602c826b262ea2e7cc1fe80f5c2f5" + integrity sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw== + +esbuild@^0.14.14: + version "0.14.21" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.21.tgz#b3e05f900f1c4394f596d60d63d9816468f0f671" + integrity sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A== + optionalDependencies: + esbuild-android-arm64 "0.14.21" + esbuild-darwin-64 "0.14.21" + esbuild-darwin-arm64 "0.14.21" + esbuild-freebsd-64 "0.14.21" + esbuild-freebsd-arm64 "0.14.21" + esbuild-linux-32 "0.14.21" + esbuild-linux-64 "0.14.21" + esbuild-linux-arm "0.14.21" + esbuild-linux-arm64 "0.14.21" + esbuild-linux-mips64le "0.14.21" + esbuild-linux-ppc64le "0.14.21" + esbuild-linux-riscv64 "0.14.21" + esbuild-linux-s390x "0.14.21" + esbuild-netbsd-64 "0.14.21" + esbuild-openbsd-64 "0.14.21" + esbuild-sunos-64 "0.14.21" + esbuild-windows-32 "0.14.21" + esbuild-windows-64 "0.14.21" + esbuild-windows-arm64 "0.14.21" + escalade@^3.0.2, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -11708,7 +11959,7 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-core-module@^2.8.0: +is-core-module@^2.8.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -11762,7 +12013,7 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -13653,6 +13904,11 @@ js-cookie@2.2.1: resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== +js-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" + integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -15198,6 +15454,11 @@ nanoid@^3.1.23: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== +nanoid@^3.1.32, nanoid@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.0.tgz#5906f776fd886c66c24f3653e0c46fcb1d4ad6b0" + integrity sha512-JzxqqT5u/x+/KOFSd7JP15DOo9nOoHpx6DYatqIHUW2+flybkm+mdcraotSQR5WcnZr+qhGVh8Ted0KdfSMxlg== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -15715,6 +15976,15 @@ open@^7.0.2: is-docker "^2.0.0" is-wsl "^2.1.1" +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -16178,7 +16448,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -17059,6 +17329,15 @@ postcss@^8.1.0: nanoid "^3.1.23" source-map-js "^0.6.2" +postcss@^8.4.6: + version "8.4.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1" + integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA== + dependencies: + nanoid "^3.2.0" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -17631,6 +17910,11 @@ react-markdown@^5.0.3: unist-util-visit "^2.0.0" xtend "^4.0.1" +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== + react-refresh@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" @@ -18308,6 +18592,15 @@ resolve@1.20.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1 is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -18490,6 +18783,16 @@ rollup-plugin-typescript2@^0.30.0: resolve "1.20.0" tslib "2.1.0" +rollup-plugin-visualizer@^5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.5.4.tgz#ce3461fdcbfdf784f52aa5205e1d166e2152bab0" + integrity sha512-CJQFUuZ75S1daGEkk62UH7lL6UFCoP86Sn/iz4gXBdamdwFeD5nPGCHHXfXCrly/wNgQOYTH7cdcxk4+OG3Xjw== + dependencies: + nanoid "^3.1.32" + open "^8.4.0" + source-map "^0.7.3" + yargs "^17.3.1" + rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" @@ -19144,6 +19447,11 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-loader@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.2.4.tgz#c18b0dc6e23bf66f6792437557c569a11e072271" @@ -19557,6 +19865,15 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.matchall@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" @@ -19643,6 +19960,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom-buf@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572" @@ -19794,6 +20118,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + sver-compat@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" @@ -21156,6 +21485,18 @@ vinyl@^2.0.0, vinyl@^2.0.1, vinyl@^2.1.0, vinyl@^2.2.0, vinyl@^2.2.1: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" +vite@^2.8.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.3.tgz#bb9b7f1f1446d2e538e81026f48d2fe9f1926963" + integrity sha512-967klrEiG7HEsN7fQYYVETs5495Iu6GpI7YyxoO5yVTJCRxjV8HhWgNWKgrbazjoOB9DQuztL53/nUoNqHNsWg== + dependencies: + esbuild "^0.14.14" + postcss "^8.4.6" + resolve "^1.22.0" + rollup "^2.59.0" + optionalDependencies: + fsevents "~2.3.2" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -22227,6 +22568,11 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" + integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== + yargs-parser@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.1.tgz#7ede329c1d8cdbbe209bd25cdb990e9b1ebbb394" @@ -22301,6 +22647,19 @@ yargs@^17.0.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.3.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yargs@^7.1.0: version "7.1.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.2.tgz#63a0a5d42143879fdbb30370741374e0641d55db"