0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-16 21:56:25 -05:00

feat: standalone server (#2046)

* feat: standalone version

* chore: add changeset
This commit is contained in:
Juan Picado 2021-01-16 19:09:42 +01:00
parent eab3007939
commit 061bfcc8d4
17 changed files with 375 additions and 23 deletions

View file

@ -0,0 +1,30 @@
---
'@verdaccio/auth': major
'verdaccio-htpasswd': major
'verdaccio-audit': major
'@verdaccio/server': major
'@verdaccio/cli-standalone': major
---
feat: standalone registry with no dependencies
## Usage
To install a server with no dependencies
```bash
npm install -g @verdaccio/standalone
```
with no internet required
```bash
npm install -g ./tarball.tar.gz
```
Bundles htpasswd and audit plugins.
### Breaking Change
It does not allow anymore the `auth` and `middleware` property at config file empty,
it will fallback to those plugins by default.

7
.gitignore vendored
View file

@ -18,8 +18,7 @@ package-lock.json
yarn-error.log yarn-error.log
yarn.lock yarn.lock
## ui
static/
# jest # jest
reports/ reports/
@ -32,6 +31,10 @@ coverage/
packages/partials packages/partials
tsconfig.tsbuildinfo tsconfig.tsbuildinfo
## bundle files
packages/standalone/dist/
## ui
static/
# website # website
website/public website/public

View file

@ -30,6 +30,7 @@
"@verdaccio/loaders": "workspace:5.0.0-alpha.3", "@verdaccio/loaders": "workspace:5.0.0-alpha.3",
"@verdaccio/logger": "workspace:5.0.0-alpha.3", "@verdaccio/logger": "workspace:5.0.0-alpha.3",
"@verdaccio/utils": "workspace:5.0.0-alpha.3", "@verdaccio/utils": "workspace:5.0.0-alpha.3",
"verdaccio-htpasswd": "workspace:10.0.0-alpha.4",
"debug": "^4.1.1", "debug": "^4.1.1",
"express": "4.17.1", "express": "4.17.1",
"jsonwebtoken": "8.5.1", "jsonwebtoken": "8.5.1",

View file

@ -13,6 +13,7 @@ import {
getForbidden, getForbidden,
} from '@verdaccio/commons-api'; } from '@verdaccio/commons-api';
import { loadPlugin } from '@verdaccio/loaders'; import { loadPlugin } from '@verdaccio/loaders';
import { HTPasswd, HTPasswdConfig } from 'verdaccio-htpasswd';
import { import {
Config, Config,
@ -25,6 +26,7 @@ import {
AuthPluginPackage, AuthPluginPackage,
AllowAccess, AllowAccess,
PackageAccess, PackageAccess,
PluginOptions,
} from '@verdaccio/types'; } from '@verdaccio/types';
import { isNil, isFunction, convertPayloadToBase64 } from '@verdaccio/utils'; import { isNil, isFunction, convertPayloadToBase64 } from '@verdaccio/utils';
@ -98,10 +100,29 @@ class Auth implements IAuth {
this.config = config; this.config = config;
this.logger = LoggerApi.logger.child({ sub: 'auth' }); this.logger = LoggerApi.logger.child({ sub: 'auth' });
this.secret = config.secret; this.secret = config.secret;
this.plugins = this._loadPlugin(config);
this.plugins =
_.isNil(config?.auth) === false ? this._loadPlugin(config) : this.loadDefaultPlugin(config);
this._applyDefaultPlugins(); this._applyDefaultPlugins();
} }
private loadDefaultPlugin(config: Config) {
const plugingConf: HTPasswdConfig = { ...config, file: './htpasswd' };
const pluginOptions: PluginOptions<{}> = {
config,
logger: this.logger,
};
let authPlugin;
try {
authPlugin = new HTPasswd(plugingConf, pluginOptions);
} catch (error) {
debug('error on loading auth htpasswd plugin stack: %o', error);
return [];
}
return [authPlugin];
}
private _loadPlugin(config: Config): IPluginAuth<Config>[] { private _loadPlugin(config: Config): IPluginAuth<Config>[] {
const pluginOptions = { const pluginOptions = {
config, config,
@ -122,6 +143,7 @@ class Auth implements IAuth {
} }
private _applyDefaultPlugins(): void { private _applyDefaultPlugins(): void {
// TODO: rename to applyFallbackPluginMethods
this.plugins.push(getDefaultPlugins(this.logger)); this.plugins.push(getDefaultPlugins(this.logger));
} }

View file

@ -27,6 +27,9 @@
}, },
{ {
"path": "../core/commons-api" "path": "../core/commons-api"
},
{
"path": "../core/htpasswd"
} }
] ]
} }

View file

@ -1,7 +1,7 @@
import fs from 'fs'; import fs from 'fs';
import Path from 'path'; import Path from 'path';
import { Callback, AuthConf, Config, IPluginAuth } from '@verdaccio/types'; import { Callback, Config, IPluginAuth, PluginOptions } from '@verdaccio/types';
import { unlockFile } from '@verdaccio/file-locking'; import { unlockFile } from '@verdaccio/file-locking';
import { import {
@ -13,14 +13,14 @@ import {
sanityCheck, sanityCheck,
} from './utils'; } from './utils';
export interface VerdaccioConfigApp extends Config { export type HTPasswdConfig = {
file: string; file: string;
} } & Config;
/** /**
* HTPasswd - Verdaccio auth class * HTPasswd - Verdaccio auth class
*/ */
export default class HTPasswd implements IPluginAuth<VerdaccioConfigApp> { export default class HTPasswd implements IPluginAuth<HTPasswdConfig> {
/** /**
* *
* @param {*} config htpasswd file * @param {*} config htpasswd file
@ -35,7 +35,7 @@ export default class HTPasswd implements IPluginAuth<VerdaccioConfigApp> {
private logger: {}; private logger: {};
private lastTime: any; private lastTime: any;
// constructor // constructor
public constructor(config: AuthConf, stuff: VerdaccioConfigApp) { public constructor(config: HTPasswdConfig, stuff: PluginOptions<{}>) {
this.users = {}; this.users = {};
// config for this module // config for this module

View file

@ -1,11 +1,7 @@
import HTPasswd from './htpasswd'; import HTPasswd, { HTPasswdConfig } from './htpasswd';
/** export default function (config: HTPasswdConfig, stuff): HTPasswd {
* A new instance of HTPasswd class.
* @param {object} config
* @param {object} stuff
* @returns {object}
*/
export default function (config, stuff): HTPasswd {
return new HTPasswd(config, stuff); return new HTPasswd(config, stuff);
} }
export { HTPasswd, HTPasswdConfig };

View file

@ -18,12 +18,12 @@ function getSSLAgent(rejectUnauthorized) {
return new https.Agent({ rejectUnauthorized }); return new https.Agent({ rejectUnauthorized });
} }
export default class ProxyAudit implements IPluginMiddleware<ConfigAudit> { export default class ProxyAudit implements IPluginMiddleware<{}> {
public enabled: boolean; public enabled: boolean;
public logger: Logger; public logger: Logger;
public strict_ssl: boolean; public strict_ssl: boolean;
public constructor(config: ConfigAudit, options: PluginOptions<ConfigAudit>) { public constructor(config: ConfigAudit, options: PluginOptions<{}>) {
this.enabled = config.enabled || false; this.enabled = config.enabled || false;
this.strict_ssl = config.strict_ssl !== undefined ? config.strict_ssl : true; this.strict_ssl = config.strict_ssl !== undefined ? config.strict_ssl : true;
this.logger = options.logger; this.logger = options.logger;

View file

@ -25,6 +25,7 @@
"@verdaccio/store": "workspace:5.0.0-alpha.4", "@verdaccio/store": "workspace:5.0.0-alpha.4",
"@verdaccio/utils": "workspace:5.0.0-alpha.3", "@verdaccio/utils": "workspace:5.0.0-alpha.3",
"@verdaccio/web": "workspace:5.0.0-alpha.4", "@verdaccio/web": "workspace:5.0.0-alpha.4",
"verdaccio-audit": "workspace:10.0.0-alpha.3",
"compression": "1.7.4", "compression": "1.7.4",
"cors": "2.8.5", "cors": "2.8.5",
"express": "4.17.1", "express": "4.17.1",

View file

@ -20,6 +20,8 @@ import { IAuth, IBasicAuth } from '@verdaccio/auth';
import { IStorageHandler } from '@verdaccio/store'; import { IStorageHandler } from '@verdaccio/store';
import { setup, logger } from '@verdaccio/logger'; import { setup, logger } from '@verdaccio/logger';
import { log, final, errorReportingMiddleware } from '@verdaccio/middleware'; import { log, final, errorReportingMiddleware } from '@verdaccio/middleware';
import AuditMiddleware from 'verdaccio-audit';
import { import {
Config as IConfig, Config as IConfig,
IPluginStorageFilter, IPluginStorageFilter,
@ -81,6 +83,16 @@ const defineAPI = function (config: IConfig, storage: IStorageHandler): any {
return plugin.register_middlewares; return plugin.register_middlewares;
} }
); );
if (_.isEmpty(plugins)) {
plugins.push(
new AuditMiddleware(
{ ...config, enabled: true, strict_ssl: true },
{ config, logger: logger }
)
);
}
plugins.forEach((plugin: IPluginMiddleware<IConfig>) => { plugins.forEach((plugin: IPluginMiddleware<IConfig>) => {
plugin.register_middlewares(app, auth, storage); plugin.register_middlewares(app, auth, storage);
}); });

View file

@ -45,6 +45,9 @@
}, },
{ {
"path": "../mock" "path": "../mock"
},
{
"path": "../plugins/audit"
} }
] ]
} }

View file

@ -0,0 +1,3 @@
#!/usr/bin/env node
require('@verdaccio/cli');

View file

@ -0,0 +1 @@
require('@verdaccio/cli');

View file

@ -0,0 +1,64 @@
{
"name": "@verdaccio/cli-standalone",
"version": "5.0.0-alpha.3",
"description": "standalone verdaccio registry with no dependencies",
"main": "dist/bundle.js",
"bin": {
"verdaccio": "./dist/bundle.js"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/verdaccio"
},
"files": [
"dist"
],
"scripts": {
"clean": "rimraf ./dist",
"lint": "eslint . --ext .js,.ts",
"build:web": "ts-node ./scripts/web.ts",
"build": "pnpm run clean && webpack --progress && pnpm run build:web",
"build:stats": "webpack --json > stats.json",
"build:size": "webpack --json | webpack-bundle-size-analyzer"
},
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
},
"repository": {
"type": "git",
"url": "git://github.com/verdaccio/verdaccio"
},
"homepage": "https://verdaccio.org",
"devDependencies": {
"@verdaccio/cli": "workspace:5.0.0-alpha.4",
"@verdaccio/ui-theme": "workspace:5.0.0-alpha.4",
"fs-extra": "9.0.1",
"webpack": "^5.11.1",
"webpack-cli": "^4.3.1",
"webpack-bundle-analyzer": "3.8.0",
"webpack-bundle-size-analyzer": "3.1.0"
},
"keywords": [
"standalone",
"private",
"package",
"repository",
"registry",
"enterprise",
"modules",
"proxy",
"server",
"verdaccio"
],
"engines": {
"node": ">=10",
"npm": ">=6"
},
"preferGlobal": true,
"collective": {
"type": "opencollective",
"url": "https://opencollective.com/verdaccio",
"logo": "https://opencollective.com/verdaccio/logo.txt"
}
}

View file

@ -0,0 +1,7 @@
const fs = require('fs');
const path = require('path');
const fse = require('fs-extra');
const uiTheme = require('@verdaccio/ui-theme');
fse.copySync(uiTheme(), path.join(__dirname, '../dist/static'));
// eslint-disable-next-line no-console
console.log('theme files copied');

View file

@ -0,0 +1,39 @@
/* eslint-disable max-len */
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: './build.js',
mode: 'development',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
devtool: 'nosources-source-map',
plugins: [
// esprima is only needed for parsing !!js/function, which isn't part of the FAILSAFE_SCHEMA.
// Unfortunately, js-yaml declares it as a hard dependency and requires the entire module,
// which causes webpack to add 0.13 MB of unused code to the bundle.
// Fortunately, js-yaml wraps the require call inside a try / catch block, so we can just ignore it.
// Reference: https://github.com/nodeca/js-yaml/blob/34e5072f43fd36b08aaaad433da73c10d47c41e5/lib/js-yaml/type/js/function.js#L15
new webpack.IgnorePlugin({
resourceRegExp: /^esprima$/,
contextRegExp: /js-yaml/,
}),
new webpack.BannerPlugin({
entryOnly: true,
banner: `#!/usr/bin/env node\n/* eslint-disable */`,
raw: true,
}),
],
target: 'node',
resolve: {
alias: {
['verdaccio-htpasswd']: path.resolve(__dirname, '../core//htpasswd/build/index.js'),
},
fallback: {
// jsdom -> canvas is not required for the purpose of backend
canvas: false,
},
},
};

View file

@ -264,6 +264,7 @@ importers:
express: 4.17.1 express: 4.17.1
jsonwebtoken: 8.5.1 jsonwebtoken: 8.5.1
lodash: 4.17.15 lodash: 4.17.15
verdaccio-htpasswd: link:../core/htpasswd
devDependencies: devDependencies:
'@verdaccio/mock': link:../mock '@verdaccio/mock': link:../mock
'@verdaccio/types': link:../core/types '@verdaccio/types': link:../core/types
@ -280,6 +281,7 @@ importers:
express: 4.17.1 express: 4.17.1
jsonwebtoken: 8.5.1 jsonwebtoken: 8.5.1
lodash: 4.17.15 lodash: 4.17.15
verdaccio-htpasswd: workspace:10.0.0-alpha.4
packages/cli: packages/cli:
dependencies: dependencies:
'@verdaccio/config': link:../config '@verdaccio/config': link:../config
@ -830,6 +832,7 @@ importers:
express: 4.17.1 express: 4.17.1
express-rate-limit: 5.2.3 express-rate-limit: 5.2.3
lodash: 4.17.15 lodash: 4.17.15
verdaccio-audit: link:../plugins/audit
devDependencies: devDependencies:
'@verdaccio/mock': link:../mock '@verdaccio/mock': link:../mock
'@verdaccio/proxy': link:../proxy '@verdaccio/proxy': link:../proxy
@ -855,6 +858,24 @@ importers:
http-errors: 1.7.3 http-errors: 1.7.3
lodash: 4.17.15 lodash: 4.17.15
request: 2.87.0 request: 2.87.0
verdaccio-audit: workspace:10.0.0-alpha.3
packages/standalone:
devDependencies:
'@verdaccio/cli': link:../cli
'@verdaccio/ui-theme': link:../plugins/ui-theme
fs-extra: 9.0.1
webpack: 5.11.1_webpack-cli@4.3.1
webpack-bundle-analyzer: 3.8.0
webpack-bundle-size-analyzer: 3.1.0
webpack-cli: 4.3.1_aff9e91a092f024e9b4b3234c48fc17b
specifiers:
'@verdaccio/cli': workspace:5.0.0-alpha.4
'@verdaccio/ui-theme': workspace:5.0.0-alpha.4
fs-extra: 9.0.1
webpack: ^5.11.1
webpack-bundle-analyzer: 3.8.0
webpack-bundle-size-analyzer: 3.1.0
webpack-cli: ^4.3.1
packages/store: packages/store:
dependencies: dependencies:
'@verdaccio/commons-api': link:../core/commons-api '@verdaccio/commons-api': link:../core/commons-api
@ -4621,6 +4642,12 @@ packages:
node: '>=4' node: '>=4'
resolution: resolution:
integrity: sha512-nOaeLBbAqSZNpKgEtO6NAxmui1G8ZvLG+0wb4rvv6mWhPDzK1GNZkCd8FUZPahCoJ1iHDoatw7F8BbJLg4nDjg== integrity: sha512-nOaeLBbAqSZNpKgEtO6NAxmui1G8ZvLG+0wb4rvv6mWhPDzK1GNZkCd8FUZPahCoJ1iHDoatw7F8BbJLg4nDjg==
/@discoveryjs/json-ext/0.5.2:
dev: true
engines:
node: '>=10.0.0'
resolution:
integrity: sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==
/@emotion/babel-plugin-jsx-pragmatic/0.1.5: /@emotion/babel-plugin-jsx-pragmatic/0.1.5:
dependencies: dependencies:
'@babel/plugin-syntax-jsx': 7.10.4 '@babel/plugin-syntax-jsx': 7.10.4
@ -7700,6 +7727,15 @@ packages:
webpack-cli: 4.x.x webpack-cli: 4.x.x
resolution: resolution:
integrity: sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ== integrity: sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==
/@webpack-cli/info/1.2.1_webpack-cli@4.3.1:
dependencies:
envinfo: 7.7.3
webpack-cli: 4.3.1_aff9e91a092f024e9b4b3234c48fc17b
dev: true
peerDependencies:
webpack-cli: 4.x.x
resolution:
integrity: sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ==
/@webpack-cli/serve/1.1.0_1efd886f95227e17a6880613935bfc0a: /@webpack-cli/serve/1.1.0_1efd886f95227e17a6880613935bfc0a:
dependencies: dependencies:
webpack-cli: 4.2.0_d5d0320a6c0de9bbc2cde368ca95d2bf webpack-cli: 4.2.0_d5d0320a6c0de9bbc2cde368ca95d2bf
@ -7713,6 +7749,18 @@ packages:
optional: true optional: true
resolution: resolution:
integrity: sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg== integrity: sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==
/@webpack-cli/serve/1.2.1_webpack-cli@4.3.1:
dependencies:
webpack-cli: 4.3.1_aff9e91a092f024e9b4b3234c48fc17b
dev: true
peerDependencies:
webpack-cli: 4.x.x
webpack-dev-server: '*'
peerDependenciesMeta:
webpack-dev-server:
optional: true
resolution:
integrity: sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==
/@xtuc/ieee754/1.2.0: /@xtuc/ieee754/1.2.0:
resolution: resolution:
integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
@ -8429,7 +8477,6 @@ packages:
resolution: resolution:
integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=
/at-least-node/1.0.0: /at-least-node/1.0.0:
dev: false
engines: engines:
node: '>= 4.0.0' node: '>= 4.0.0'
resolution: resolution:
@ -13069,6 +13116,22 @@ packages:
node: '>=10' node: '>=10'
resolution: resolution:
integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
/execa/5.0.0:
dependencies:
cross-spawn: 7.0.3
get-stream: 6.0.0
human-signals: 2.1.0
is-stream: 2.0.0
merge-stream: 2.0.0
npm-run-path: 4.0.1
onetime: 5.1.2
signal-exit: 3.0.3
strip-final-newline: 2.0.0
dev: true
engines:
node: '>=10'
resolution:
integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==
/execall/2.0.0: /execall/2.0.0:
dependencies: dependencies:
clone-regexp: 2.2.0 clone-regexp: 2.2.0
@ -13737,7 +13800,7 @@ packages:
dependencies: dependencies:
asynckit: 0.4.0 asynckit: 0.4.0
combined-stream: 1.0.8 combined-stream: 1.0.8
mime-types: 2.1.27 mime-types: 2.1.28
engines: engines:
node: '>= 0.12' node: '>= 0.12'
resolution: resolution:
@ -13846,7 +13909,6 @@ packages:
graceful-fs: 4.2.4 graceful-fs: 4.2.4
jsonfile: 6.0.1 jsonfile: 6.0.1
universalify: 1.0.0 universalify: 1.0.0
dev: false
engines: engines:
node: '>=10' node: '>=10'
resolution: resolution:
@ -14794,6 +14856,12 @@ packages:
node: '>=8' node: '>=8'
resolution: resolution:
integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
/get-stream/6.0.0:
dev: true
engines:
node: '>=10'
resolution:
integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==
/get-value/2.0.6: /get-value/2.0.6:
engines: engines:
node: '>=0.10.0' node: '>=0.10.0'
@ -16004,6 +16072,12 @@ packages:
node: '>=8.12.0' node: '>=8.12.0'
resolution: resolution:
integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
/human-signals/2.1.0:
dev: true
engines:
node: '>=10.17.0'
resolution:
integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
/humanize/0.0.9: /humanize/0.0.9:
dev: true dev: true
resolution: resolution:
@ -17836,7 +17910,6 @@ packages:
/jsonfile/6.0.1: /jsonfile/6.0.1:
dependencies: dependencies:
universalify: 1.0.0 universalify: 1.0.0
dev: false
optionalDependencies: optionalDependencies:
graceful-fs: 4.2.4 graceful-fs: 4.2.4
resolution: resolution:
@ -25396,6 +25469,22 @@ packages:
webpack: ^5.1.0 webpack: ^5.1.0
resolution: resolution:
integrity: sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ== integrity: sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==
/terser-webpack-plugin/5.0.3_webpack@5.11.1:
dependencies:
jest-worker: 26.6.2
p-limit: 3.0.2
schema-utils: 3.0.0
serialize-javascript: 5.0.1
source-map: 0.6.1
terser: 5.5.1
webpack: 5.11.1_webpack-cli@4.3.1
dev: true
engines:
node: '>= 10.13.0'
peerDependencies:
webpack: ^5.1.0
resolution:
integrity: sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==
/terser/4.8.0: /terser/4.8.0:
dependencies: dependencies:
commander: 2.20.3 commander: 2.20.3
@ -26207,7 +26296,6 @@ packages:
resolution: resolution:
integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
/universalify/1.0.0: /universalify/1.0.0:
dev: false
engines: engines:
node: '>= 10.0.0' node: '>= 10.0.0'
resolution: resolution:
@ -26836,6 +26924,47 @@ packages:
optional: true optional: true
resolution: resolution:
integrity: sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA== integrity: sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==
/webpack-cli/4.3.1_aff9e91a092f024e9b4b3234c48fc17b:
dependencies:
'@discoveryjs/json-ext': 0.5.2
'@webpack-cli/info': 1.2.1_webpack-cli@4.3.1
'@webpack-cli/serve': 1.2.1_webpack-cli@4.3.1
colorette: 1.2.1
commander: 6.2.0
enquirer: 2.3.6
execa: 5.0.0
fastest-levenshtein: 1.0.12
import-local: 3.0.2
interpret: 2.2.0
rechoir: 0.7.0
v8-compile-cache: 2.2.0
webpack: 5.11.1_webpack-cli@4.3.1
webpack-bundle-analyzer: 3.8.0
webpack-merge: 4.2.2
dev: true
engines:
node: '>=10.13.0'
hasBin: true
peerDependencies:
'@webpack-cli/generators': '*'
'@webpack-cli/init': '*'
'@webpack-cli/migrate': '*'
webpack: 4.x.x || 5.x.x
webpack-bundle-analyzer: '*'
webpack-dev-server: '*'
peerDependenciesMeta:
'@webpack-cli/generators':
optional: true
'@webpack-cli/init':
optional: true
'@webpack-cli/migrate':
optional: true
webpack-bundle-analyzer:
optional: true
webpack-dev-server:
optional: true
resolution:
integrity: sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA==
/webpack-dev-middleware/3.7.2_webpack@4.43.0: /webpack-dev-middleware/3.7.2_webpack@4.43.0:
dependencies: dependencies:
memory-fs: 0.4.1 memory-fs: 0.4.1
@ -27090,6 +27219,44 @@ packages:
optional: true optional: true
resolution: resolution:
integrity: sha512-mHu4iM2mW7d/8R91VPPNtUCNd1D8k51TTb4e0XjylapIR6WEmW8XUTBZq8TqmShj9XYxVXJn6AzKlWnrlty6DA== integrity: sha512-mHu4iM2mW7d/8R91VPPNtUCNd1D8k51TTb4e0XjylapIR6WEmW8XUTBZq8TqmShj9XYxVXJn6AzKlWnrlty6DA==
/webpack/5.11.1_webpack-cli@4.3.1:
dependencies:
'@types/eslint-scope': 3.7.0
'@types/estree': 0.0.45
'@webassemblyjs/ast': 1.9.1
'@webassemblyjs/helper-module-context': 1.9.1
'@webassemblyjs/wasm-edit': 1.9.1
'@webassemblyjs/wasm-parser': 1.9.1
acorn: 8.0.4
browserslist: 4.14.7
chrome-trace-event: 1.0.2
enhanced-resolve: 5.4.1
eslint-scope: 5.1.1
events: 3.2.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.4
json-parse-better-errors: 1.0.2
loader-runner: 4.1.0
mime-types: 2.1.27
neo-async: 2.6.2
pkg-dir: 5.0.0
schema-utils: 3.0.0
tapable: 2.2.0
terser-webpack-plugin: 5.0.3_webpack@5.11.1
watchpack: 2.1.0
webpack-cli: 4.3.1_aff9e91a092f024e9b4b3234c48fc17b
webpack-sources: 2.2.0
dev: true
engines:
node: '>=10.13.0'
hasBin: true
peerDependencies:
webpack-cli: '*'
peerDependenciesMeta:
webpack-cli:
optional: true
resolution:
integrity: sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==
/websocket-driver/0.6.5: /websocket-driver/0.6.5:
dependencies: dependencies:
websocket-extensions: 0.1.4 websocket-extensions: 0.1.4