diff --git a/.circleci/config.yml b/.circleci/config.yml index bc9ea1ecd0..1c5f4683de 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,84 +1,52 @@ -# Javascript Node CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-javascript/ for more details -# version: 2.1 +# Variables +var_1: &working_directory ~/repo + executors: - default: - working_directory: ~/repo - environment: - # install Cypress in Linux-like cache folder - CYPRESS_CACHE_FOLDER: '~/.cache/Cypress' + linux: + working_directory: *working_directory docker: - - image: circleci/node:12-browsers + - image: cimg/node:12.20-browsers + + windows: + working_directory: *working_directory + resource_class: windows.medium + machine: + image: windows-server-2019-vs2019:stable + shell: cmd.exe commands: - install_rsync: - description: 'Install Rsync' + setup: + parameters: + os: + type: string steps: - - run: sudo apt install rsync - yarn_install: - description: 'Install Dependencies' - steps: - - run: yarn install --frozen-lockfile --non-interactive - - run: ./node_modules/.bin/cypress verify + - checkout + - restore_cache: + name: Restore Yarn Package Cache + keys: + - nrwl-nx-yarn-packages-<< parameters.os >>-{{ checksum "yarn.lock" }} + - run: + name: Install dependencies + command: yarn install --frozen-lockfile --non-interactive --cache-folder ~/.cache/yarn - save_cache: - key: nrwl-nx-node12-yarn-key-{{ checksum "yarn.lock" }} + name: Save Yarn Package Cache + # Windows needs its own cache key because binaries in node_modules are different. + key: nrwl-nx-yarn-packages-<< parameters.os >>-{{ checksum "yarn.lock" }} paths: - ~/.cache/yarn - - save_cache: - key: nrwl-nx-node12-cypress-{{ checksum "yarn.lock" }} - paths: - - ~/.cache/Cypress - restore_cypress_cache: - description: 'Restore Cypress Cache' - steps: - - restore_cache: - keys: - - nrwl-nx-node12-cypress-{{ checksum "yarn.lock" }} - # fallback to using the latest cache if no exact match is found - - nrwl-nx-node12-cypress- - restore_yarn_cache: - description: 'Restore Cached Dependencies' - steps: - - restore_cache: - keys: - - nrwl-nx-node12-yarn-key-{{ checksum "yarn.lock" }} - # fallback to using the latest cache if no exact match is found - - nrwl-nx-node12-yarn-key- - setup: - description: 'Setup Executor' - steps: - - checkout - - install_rsync - - attach_workspace: - # Must be absolute path or relative path from working_directory - at: .. jobs: - install: - executor: default - steps: - - checkout - - restore_yarn_cache - - restore_cypress_cache - - yarn_install - - persist_to_workspace: - # Must be an absolute path, or relative path from working_directory. This is a directory on the container which is - # taken to be the root directory of the workspace. - root: .. - # Must be relative path from root - paths: - - repo/node_modules - - .cache/Cypress checks-and-unit-tests: - executor: default + parameters: + os: + type: string + default: 'linux' + executor: << parameters.os >> steps: - - setup - - run: - name: Run Unit Tests - command: yarn test + - setup: + os: << parameters.os >> - run: name: Check Documentation command: yarn documentation @@ -97,99 +65,47 @@ jobs: - run: name: Check Package dependencies command: yarn depcheck - e2e-1: - executor: default + e2e: + parameters: + os: + type: string + packages: + type: string + cli: + type: string + default: '' + executor: << parameters.os >> steps: - - setup + - setup: + os: << parameters.os >> - run: - name: Tests Part 1 - command: yarn e2e-ci 1 - no_output_timeout: 30m - e2e-2: - executor: default - steps: - - setup - - run: - name: Tests Part 2 - command: yarn e2e-ci 2 - no_output_timeout: 30m - e2e-3: - executor: default - steps: - - setup - - run: - name: Tests Part 3 - command: yarn e2e-ci 3 - no_output_timeout: 30m - e2e-4: - executor: default - steps: - - setup - - run: - name: Tests Part 4 - command: yarn e2e-ci 4 - no_output_timeout: 30m - e2e-5: - executor: default - steps: - - setup - - run: - name: Tests Part 5 - command: yarn e2e-ci 5 - no_output_timeout: 30m - e2e-6: - executor: default - steps: - - setup - - run: - name: Tests Part 6 - command: yarn e2e-ci 6 - no_output_timeout: 30m - e2e-7: - executor: default - steps: - - setup - - run: - name: Tests Part 7 - command: yarn e2e-ci 7 - no_output_timeout: 30m - e2e-8: - executor: default - steps: - - setup - - run: - name: Tests Part 8 - command: yarn e2e-ci 8 + name: Run E2E tests - << parameters.packages >> + command: yarn e2e << parameters.packages >> affected no_output_timeout: 30m + environment: + SELECTED_CLI: << parameters.cli >> + workflows: - version: 2.1 - default_workflow: + build: jobs: - - install - - checks-and-unit-tests: - requires: - - install - - e2e-1: - requires: - - install - - e2e-2: - requires: - - install - - e2e-3: - requires: - - install - - e2e-4: - requires: - - install - - e2e-5: - requires: - - install - - e2e-6: - requires: - - install - - e2e-7: - requires: - - install - - e2e-8: - requires: - - install + - checks-and-unit-tests + - e2e: + matrix: + parameters: + os: ['linux', 'windows'] + packages: + [ + 'e2e-workspace', + 'e2e-cli,e2e-nx-plugin,dep-graph-client-e2e', + 'e2e-cypress,e2e-jest', + 'e2e-react', + 'e2e-next', + 'e2e-node', + 'e2e-web,e2e-linter,e2e-storybook', + ] + - e2e: + matrix: + parameters: + os: ['linux', 'windows'] + packages: ['e2e-angular'] + cli: 'angular' diff --git a/e2e/angular/src/angular-core.test.ts b/e2e/angular/src/angular-core.test.ts index fbf2d3afa1..66b076b8b1 100644 --- a/e2e/angular/src/angular-core.test.ts +++ b/e2e/angular/src/angular-core.test.ts @@ -1,3 +1,4 @@ +import * as path from 'path'; import { checkFilesExist, expectTestsPass, @@ -157,12 +158,14 @@ describe('Angular Package', () => { const appLintStdOut = runCLI(`lint ${myapp}`, { silenceError: true }); - expect(appLintStdOut).toContain(`apps/${myapp}/src/app/app.component.html`); + expect(appLintStdOut).toContain( + path.normalize(`apps/${myapp}/src/app/app.component.html`) + ); expect(appLintStdOut).toContain( `1:6 error Invalid binding syntax. Use [(expr)] instead @angular-eslint/template/banana-in-box` ); expect(appLintStdOut).toContain( - `apps/${myapp}/src/app/inline-template.component.ts` + path.normalize(`apps/${myapp}/src/app/inline-template.component.ts`) ); expect(appLintStdOut).toContain( `5:21 error The selector should be prefixed by one of the prefixes: 'proj' (https://angular.io/guide/styleguide#style-02-07) @angular-eslint/component-selector` @@ -189,13 +192,13 @@ describe('Angular Package', () => { const libLintStdOut = runCLI(`lint ${mylib}`, { silenceError: true }); expect(libLintStdOut).toContain( - `libs/${mylib}/src/lib/some.component.html` + path.normalize(`libs/${mylib}/src/lib/some.component.html`) ); expect(libLintStdOut).toContain( `1:6 error Invalid binding syntax. Use [(expr)] instead @angular-eslint/template/banana-in-box` ); expect(libLintStdOut).toContain( - `libs/${mylib}/src/lib/inline-template.component.ts` + path.normalize(`libs/${mylib}/src/lib/inline-template.component.ts`) ); expect(libLintStdOut).toContain( `5:21 error The selector should be prefixed by one of the prefixes: 'proj' (https://angular.io/guide/styleguide#style-02-07) @angular-eslint/component-selector` diff --git a/e2e/linter/src/linter.test.ts b/e2e/linter/src/linter.test.ts index c1d427bcdd..672818d7cb 100644 --- a/e2e/linter/src/linter.test.ts +++ b/e2e/linter/src/linter.test.ts @@ -1,3 +1,4 @@ +import * as path from 'path'; import { checkFilesExist, newProject, @@ -108,33 +109,46 @@ describe('Linter', () => { ); }, 1000000); - it('linting should generate a default cache file', () => { - newProject(); - const myapp = uniq('myapp'); + describe('linting with --cache', () => { + function readCacheFile(cacheFile = '.eslintcache') { + const cacheInfo = readFile(cacheFile); + return process.platform === 'win32' + ? cacheInfo.replace(/\\\\/g, '\\') + : cacheInfo; + } - runCLI(`generate @nrwl/react:app ${myapp}`); + it('should generate a default cache file', () => { + newProject(); + const myapp = uniq('myapp'); - expect(() => checkFilesExist(`.eslintcache`)).toThrow(); - runCLI(`lint ${myapp} --cache`, { silenceError: true }); - expect(() => checkFilesExist(`.eslintcache`)).not.toThrow(); - const cacheInfo = readFile('.eslintcache'); - expect(cacheInfo).toContain(`${myapp}/src/app/app.spec.tsx`); - }, 1000000); + runCLI(`generate @nrwl/react:app ${myapp}`); - it('linting should let you specify a cache file location', () => { - newProject(); - const myapp = uniq('myapp'); + expect(() => checkFilesExist(`.eslintcache`)).toThrow(); + runCLI(`lint ${myapp} --cache`, { silenceError: true }); + expect(() => checkFilesExist(`.eslintcache`)).not.toThrow(); + const cacheInfo = readCacheFile(); + expect(cacheInfo).toContain( + path.normalize(`${myapp}/src/app/app.spec.tsx`) + ); + }, 1000000); - runCLI(`generate @nrwl/react:app ${myapp}`); + it('should let you specify a cache file location', () => { + newProject(); + const myapp = uniq('myapp'); - expect(() => checkFilesExist(`my-cache`)).toThrow(); - runCLI(`lint ${myapp} --cache --cache-location="my-cache"`, { - silenceError: true, - }); - expect(() => checkFilesExist(`my-cache`)).not.toThrow(); - const cacheInfo = readFile('my-cache'); - expect(cacheInfo).toContain(`${myapp}/src/app/app.spec.tsx`); - }, 1000000); + runCLI(`generate @nrwl/react:app ${myapp}`); + + expect(() => checkFilesExist(`my-cache`)).toThrow(); + runCLI(`lint ${myapp} --cache --cache-location="my-cache"`, { + silenceError: true, + }); + expect(() => checkFilesExist(`my-cache`)).not.toThrow(); + const cacheInfo = readCacheFile('my-cache'); + expect(cacheInfo).toContain( + path.normalize(`${myapp}/src/app/app.spec.tsx`) + ); + }, 1000000); + }); it('linting should generate an output file with a specific format', () => { newProject(); @@ -167,7 +181,7 @@ describe('Linter', () => { const outputForApp: any = Object.values( outputContents ).filter((result: any) => - result.filePath.includes(`${myapp}/src/main.ts`) + result.filePath.includes(path.normalize(`${myapp}/src/main.ts`)) )[0]; expect(outputForApp.errorCount).toBe(1); expect(outputForApp.messages[0].ruleId).toBe('no-console'); diff --git a/e2e/next/src/next.test.ts b/e2e/next/src/next.test.ts index a6d2366f96..6626ef5975 100644 --- a/e2e/next/src/next.test.ts +++ b/e2e/next/src/next.test.ts @@ -11,8 +11,9 @@ import { } from '@nrwl/e2e/utils'; describe('Next.js Applications', () => { + beforeEach(() => newProject()); + it('should be able to serve with a proxy configuration', async () => { - newProject(); const appName = uniq('app'); runCLI(`generate @nrwl/next:app ${appName}`); @@ -71,7 +72,6 @@ describe('Next.js Applications', () => { }, 120000); it('should be able to consume a react lib', async () => { - newProject(); const appName = uniq('app'); const libName = uniq('lib'); @@ -108,7 +108,6 @@ describe('Next.js Applications', () => { }, 120000); it('should be able to dynamically load a lib', async () => { - newProject(); const appName = uniq('app'); const libName = uniq('lib'); @@ -136,7 +135,6 @@ describe('Next.js Applications', () => { }, 120000); it('should compile when using a workspace and react lib written in TypeScript', async () => { - newProject(); const appName = uniq('app'); const tsLibName = uniq('tslib'); const tsxLibName = uniq('tsxlib'); @@ -282,7 +280,6 @@ describe('Next.js Applications', () => { }, 120000); it('should support --js flag', async () => { - newProject(); const appName = uniq('app'); runCLI(`generate @nrwl/next:app ${appName} --no-interactive --js`); @@ -294,7 +291,7 @@ describe('Next.js Applications', () => { checkLint: true, checkE2E: true, }); - }, 120000); + }, 180000); }); async function checkApp( diff --git a/e2e/node/src/node.test.ts b/e2e/node/src/node.test.ts index 449389e00c..d61ca93a41 100644 --- a/e2e/node/src/node.test.ts +++ b/e2e/node/src/node.test.ts @@ -1,8 +1,7 @@ import { stripIndents } from '@angular-devkit/core/src/utils/literals'; -import { execSync, fork, spawn } from 'child_process'; +import { exec, execSync } from 'child_process'; import * as http from 'http'; import * as treeKill from 'tree-kill'; -import * as ts from 'typescript'; import { checkFilesDoNotExist, checkFilesExist, @@ -84,34 +83,29 @@ describe('Node Applications', () => { `dist/apps/${nodeapp}/main.js.map` ); - const server = fork(`./dist/apps/${nodeapp}/main.js`, [], { + const server = exec(`node ./dist/apps/${nodeapp}/main.js`, { cwd: tmpProjPath(), - silent: true, }); - expect(server).toBeTruthy(); await new Promise((resolve) => { - server.stdout.once('data', async (data) => { + server.stdout.on('data', async (data) => { expect(data.toString()).toContain('Listening at http://localhost:3333'); const result = await getData(); expect(result.message).toEqual(`Welcome to ${nodeapp}!`); treeKill(server.pid, 'SIGTERM', (err) => { expect(err).toBeFalsy(); - resolve(); + resolve(true); }); }); }); - const process = spawn( - 'node', - ['./node_modules/.bin/nx', 'serve', nodeapp], - { - cwd: tmpProjPath(), - } - ); + + const process = exec(`npm run nx serve ${nodeapp}`, { + cwd: tmpProjPath(), + }); let collectedOutput = ''; process.stdout.on('data', async (data: Buffer) => { collectedOutput += data.toString(); - if (!data.toString().includes('Listening at http://localhost:3333')) { + if (!collectedOutput.includes('Listening at http://localhost:3333')) { return; } @@ -146,9 +140,8 @@ describe('Node Applications', () => { `dist/apps/${nestapp}/main.js.map` ); - const server = fork(`./dist/apps/${nestapp}/main.js`, [], { + const server = exec(`node ./dist/apps/${nestapp}/main.js`, { cwd: tmpProjPath(), - silent: true, }); expect(server).toBeTruthy(); @@ -161,19 +154,15 @@ describe('Node Applications', () => { expect(result.message).toEqual(`Welcome to ${nestapp}!`); treeKill(server.pid, 'SIGTERM', (err) => { expect(err).toBeFalsy(); - resolve(); + resolve(true); }); } }); }); - const process = spawn( - 'node', - ['./node_modules/@nrwl/cli/bin/nx', 'serve', nestapp], - { - cwd: tmpProjPath(), - } - ); + const process = exec(`npm run nx serve ${nestapp}`, { + cwd: tmpProjPath(), + }); process.stdout.on('data', async (data: Buffer) => { if (!data.toString().includes('Listening at http://localhost:3333')) { diff --git a/e2e/utils/index.ts b/e2e/utils/index.ts index de0d28bb09..f67c544a4e 100644 --- a/e2e/utils/index.ts +++ b/e2e/utils/index.ts @@ -5,8 +5,12 @@ import { renameSync, statSync, writeFileSync, -} from 'fs'; -import { ensureDirSync, createFileSync } from 'fs-extra'; + ensureDirSync, + createFileSync, + moveSync, + copySync, + removeSync, +} from 'fs-extra'; import * as path from 'path'; interface RunCmdOpts { @@ -90,9 +94,9 @@ export function runCreateWorkspace( return create ? create.toString() : ''; } -export function yarnAdd(pkg: string, projName?: string) { +export function packageInstall(pkg: string, projName?: string) { const cwd = projName ? `./tmp/${currentCli()}/${projName}` : tmpProjPath(); - const install = execSync(`yarn add ${pkg}`, { + const install = execSync(`npm i ${pkg}`, { cwd, // ...{ stdio: ['pipe', 'pipe', 'pipe'] }, ...{ stdio: [0, 1, 2] }, @@ -126,11 +130,11 @@ export function newProject(): void { `@nrwl/nx-plugin`, `@nrwl/eslint-plugin-nx`, ]; - yarnAdd(packages.join(` `), 'proj'); - execSync(`mv ./tmp/${currentCli()}/proj ${tmpBackupProjPath()}`); + packageInstall(packages.join(` `), 'proj'); + moveSync(`./tmp/${currentCli()}/proj`, `${tmpBackupProjPath()}`); } projName = uniq('proj'); - execSync(`cp -a ${tmpBackupProjPath()} ${tmpProjPath()}`); + copySync(`${tmpBackupProjPath()}`, `${tmpProjPath()}`); } catch (e) { console.log(`Failed to set up project for e2e tests.`); console.log(e.message); @@ -171,7 +175,7 @@ export function runCommandUntil( command: string, criteria: (output: string) => boolean ) { - const p = exec(`./node_modules/.bin/nx ${command}`, { + const p = exec(`npm run nx --scripts-prepend-node-path -- ${command}`, { cwd: tmpProjPath(), env: { ...process.env, FORCE_COLOR: 'false' }, }); @@ -211,7 +215,10 @@ export function runCLIAsync( env: process.env, } ): Promise<{ stdout: string; stderr: string; combinedOutput: string }> { - return runCommandAsync(`./node_modules/.bin/nx ${command}`, opts); + return runCommandAsync( + `npm run nx --scripts-prepend-node-path -- ${command}`, + opts + ); } export function runNgAdd( @@ -223,7 +230,7 @@ export function runNgAdd( } ): string { try { - yarnAdd('@nrwl/workspace'); + packageInstall('@nrwl/workspace'); return execSync( `./node_modules/.bin/ng g @nrwl/workspace:ng-add ${command}`, { @@ -254,7 +261,7 @@ export function runCLI( } ): string { try { - let r = execSync(`./node_modules/.bin/nx ${command}`, { + let r = execSync(`npm run nx --scripts-prepend-node-path -- ${command}`, { cwd: opts.cwd || tmpProjPath(), env: opts.env as any, }).toString(); @@ -399,7 +406,7 @@ export function readFile(f: string) { } export function rmDist() { - execSync(`rm -rf ${tmpProjPath()}/dist`); + removeSync(`${tmpProjPath()}/dist`); } export function directoryExists(filePath: string): boolean { diff --git a/e2e/workspace/src/custom-layout.test.ts b/e2e/workspace/src/custom-layout.test.ts index ebe6bec59e..fea73f6ffa 100644 --- a/e2e/workspace/src/custom-layout.test.ts +++ b/e2e/workspace/src/custom-layout.test.ts @@ -6,14 +6,14 @@ import { runCLIAsync, runCreateWorkspace, uniq, - yarnAdd, + packageInstall, } from '@nrwl/e2e/utils'; describe('custom workspace layout', () => { it('should work', async () => { const proj = uniq('custom-layout-proj'); runCreateWorkspace(proj, { preset: 'oss' }); - yarnAdd('@nrwl/react @nrwl/angular @nrwl/express'); + packageInstall('@nrwl/react @nrwl/angular @nrwl/express'); const nxJson = readJson('nx.json'); expect(nxJson.workspaceLayout).toEqual({ diff --git a/e2e/workspace/src/run-commands.test.ts b/e2e/workspace/src/run-commands.test.ts index f70bed9ef7..244c1343f3 100644 --- a/e2e/workspace/src/run-commands.test.ts +++ b/e2e/workspace/src/run-commands.test.ts @@ -21,10 +21,13 @@ describe('Run Commands', () => { 'SHARED_VAR=shared-nested-value\nNESTED_ONLY=nested-only-value' ); - const command = `echo "$SHARED_VAR $ROOT_ONLY $NESTED_ONLY"`; + const command = + process.platform === 'win32' + ? `"echo %SHARED_VAR% %ROOT_ONLY% %NESTED_ONLY%"` + : `'echo "\\$SHARED_VAR \\$ROOT_ONLY \\$NESTED_ONLY"'`; const envFile = `apps/${nodeapp}/.custom.env`; runCLI( - `generate @nrwl/workspace:run-commands echoEnvVariables --command='${command}' --envFile='${envFile}' --project=${nodeapp}` + `generate @nrwl/workspace:run-commands echoEnvVariables --command=${command} --envFile=${envFile} --project=${nodeapp}` ); const result = runCLI('echoEnvVariables'); diff --git a/e2e/workspace/src/workspace-aux-commands.test.ts b/e2e/workspace/src/workspace-aux-commands.test.ts index b8aab94074..ed4a3fbc50 100644 --- a/e2e/workspace/src/workspace-aux-commands.test.ts +++ b/e2e/workspace/src/workspace-aux-commands.test.ts @@ -1,9 +1,11 @@ +import * as path from 'path'; import { checkFilesExist, exists, newProject, readFile, readJson, + renameFile, runCLI, runCommand, tmpProjPath, @@ -87,9 +89,9 @@ describe('lint', () => { const appAfter = uniq('after'); runCLI(`generate @nrwl/angular:app ${appBefore}`); - runCommand(`mv apps/${appBefore} apps/${appAfter}`); + renameFile(`apps/${appBefore}`, `apps/${appAfter}`); - const stdout = runCommand('./node_modules/.bin/nx workspace-lint'); + const stdout = runCommand('npm run nx workspace-lint'); expect(stdout).toContain( `- Cannot find project '${appBefore}' in 'apps/${appBefore}'` ); @@ -157,32 +159,50 @@ describe('format', () => { let stdout = runCommand( `npm run -s format:check -- --files="libs/${mylib}/index.ts,package.json" --libs-and-apps` ); - expect(stdout).toContain(`libs/${mylib}/index.ts`); - expect(stdout).toContain(`libs/${mylib}/src/${mylib}.module.ts`); - expect(stdout).not.toContain(`README.md`); // It will be contained only in case of exception, that we fallback to all + expect(stdout).toContain(path.normalize(`libs/${mylib}/index.ts`)); + expect(stdout).toContain( + path.normalize(`libs/${mylib}/src/${mylib}.module.ts`) + ); + expect(stdout).not.toContain(path.normalize(`README.md`)); // It will be contained only in case of exception, that we fallback to all stdout = runCommand(`npm run -s format:check -- --all`); - expect(stdout).toContain(`apps/${myapp}/src/main.ts`); - expect(stdout).toContain(`apps/${myapp}/src/app/app.module.ts`); - expect(stdout).toContain(`apps/${myapp}/src/app/app.component.ts`); + expect(stdout).toContain(path.normalize(`apps/${myapp}/src/main.ts`)); + expect(stdout).toContain( + path.normalize(`apps/${myapp}/src/app/app.module.ts`) + ); + expect(stdout).toContain( + path.normalize(`apps/${myapp}/src/app/app.component.ts`) + ); stdout = runCommand(`npm run -s format:check -- --projects=${myapp}`); - expect(stdout).toContain(`apps/${myapp}/src/main.ts`); - expect(stdout).toContain(`apps/${myapp}/src/app/app.module.ts`); - expect(stdout).toContain(`apps/${myapp}/src/app/app.component.ts`); - expect(stdout).not.toContain(`libs/${mylib}/index.ts`); - expect(stdout).not.toContain(`libs/${mylib}/src/${mylib}.module.ts`); - expect(stdout).not.toContain(`README.md`); + expect(stdout).toContain(path.normalize(`apps/${myapp}/src/main.ts`)); + expect(stdout).toContain( + path.normalize(`apps/${myapp}/src/app/app.module.ts`) + ); + expect(stdout).toContain( + path.normalize(`apps/${myapp}/src/app/app.component.ts`) + ); + expect(stdout).not.toContain(path.normalize(`libs/${mylib}/index.ts`)); + expect(stdout).not.toContain( + path.normalize(`libs/${mylib}/src/${mylib}.module.ts`) + ); + expect(stdout).not.toContain(path.normalize(`README.md`)); stdout = runCommand( `npm run -s format:check -- --projects=${myapp},${mylib}` ); - expect(stdout).toContain(`apps/${myapp}/src/main.ts`); - expect(stdout).toContain(`apps/${myapp}/src/app/app.module.ts`); - expect(stdout).toContain(`apps/${myapp}/src/app/app.component.ts`); - expect(stdout).toContain(`libs/${mylib}/index.ts`); - expect(stdout).toContain(`libs/${mylib}/src/${mylib}.module.ts`); - expect(stdout).not.toContain(`README.md`); + expect(stdout).toContain(path.normalize(`apps/${myapp}/src/main.ts`)); + expect(stdout).toContain( + path.normalize(`apps/${myapp}/src/app/app.module.ts`) + ); + expect(stdout).toContain( + path.normalize(`apps/${myapp}/src/app/app.component.ts`) + ); + expect(stdout).toContain(path.normalize(`libs/${mylib}/index.ts`)); + expect(stdout).toContain( + path.normalize(`libs/${mylib}/src/${mylib}.module.ts`) + ); + expect(stdout).not.toContain(path.normalize(`README.md`)); stdout = runCommand( `npm run -s format:check -- --projects=${myapp},${mylib} --all` @@ -197,13 +217,17 @@ describe('format', () => { stdout = runCommand('npm run -s format:check -- --all'); - expect(stdout).toContain(`apps/${myapp}/src/main.ts`); - expect(stdout).not.toContain(`apps/${myapp}/src/app/app.module.ts`); - expect(stdout).not.toContain(`apps/${myapp}/src/app/app.component.ts`); + expect(stdout).toContain(path.normalize(`apps/${myapp}/src/main.ts`)); + expect(stdout).not.toContain( + path.normalize(`apps/${myapp}/src/app/app.module.ts`) + ); + expect(stdout).not.toContain( + path.normalize(`apps/${myapp}/src/app/app.component.ts`) + ); runCommand('npm run format:write -- --all'); expect(runCommand('npm run -s format:check -- --all')).not.toContain( - `apps/${myapp}/src/main.ts` + path.normalize(`apps/${myapp}/src/main.ts`) ); }); }); diff --git a/e2e/workspace/src/workspace.test.ts b/e2e/workspace/src/workspace.test.ts index 69ff44519e..5989c197f3 100644 --- a/e2e/workspace/src/workspace.test.ts +++ b/e2e/workspace/src/workspace.test.ts @@ -46,11 +46,9 @@ describe('run-one', () => { // configuration has to be valid for the initiating project expect(() => runCLI(`build ${myapp} -c=invalid`)).toThrow(); - expect( - runCommand( - `cd apps/${myapp}-e2e/src && ../../../node_modules/.bin/nx lint` - ) - ).toContain(`nx run ${myapp}-e2e:lint`); + expect(runCommand(`cd apps/${myapp}-e2e/src && npx nx lint`)).toContain( + `nx run ${myapp}-e2e:lint` + ); // configuration doesn't have to exists for deps (here only the app has production) const buildWithDeps = runCLI(`build ${myapp} --with-deps --prod`); diff --git a/package.json b/package.json index 9c062dfe5d..d94c502e5d 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,9 @@ "check-imports": "node ./scripts/check-imports.js", "check-versions": "ts-node -P ./scripts/tsconfig.scripts.json ./scripts/check-versions.ts", "check-documentation-map": "ts-node -P ./scripts/tsconfig.scripts.json ./scripts/documentation/map-link-checker.ts", - "e2e": "./scripts/e2e.sh", - "e2e-ci": "./scripts/e2e-ci.sh", + "e2e-registry": "yarn verdaccio --config ./scripts/local-registry/config.yml --listen 4872", + "e2e-tests": "ts-node -P ./scripts/tsconfig.e2e.json ./scripts/e2e.ts", + "e2e": "run-p -r e2e-registry \"e2e-tests {@}\" --", "format": "nx format", "nx-release": "./scripts/nx-release.js", "test": "nx run-many --target=test --all --parallel", @@ -247,7 +248,7 @@ "tslint": "6.1.3", "typescript": "4.0.5", "url-loader": "^3.0.0", - "verdaccio": "^4.4.2", + "verdaccio": "^4.10.0", "webpack": "4.42.0", "webpack-dev-middleware": "3.7.0", "webpack-dev-server": "3.11.0", diff --git a/packages/cli/lib/parse-run-one-options.ts b/packages/cli/lib/parse-run-one-options.ts index ebd55e76a2..6809540daf 100644 --- a/packages/cli/lib/parse-run-one-options.ts +++ b/packages/cli/lib/parse-run-one-options.ts @@ -1,7 +1,7 @@ import yargsParser = require('yargs-parser'); function calculateDefaultProjectName(cwd: string, root: string, wc: any) { - let relativeCwd = cwd.split(root)[1]; + let relativeCwd = cwd.replace(/\\/g, '/').split(root.replace(/\\/g, '/'))[1]; if (relativeCwd) { relativeCwd = relativeCwd.startsWith('/') ? relativeCwd.substring(1) diff --git a/packages/create-nx-workspace/bin/create-nx-workspace.ts b/packages/create-nx-workspace/bin/create-nx-workspace.ts index 6e26580ea9..2937611d83 100644 --- a/packages/create-nx-workspace/bin/create-nx-workspace.ts +++ b/packages/create-nx-workspace/bin/create-nx-workspace.ts @@ -418,9 +418,15 @@ function createApp(tmpDir: string, name: string, parsedArgs: WorkspaceArgs) { const command = `new ${name} ${args} --collection=@nrwl/workspace`; console.log(command); - const nxWorkspaceRoot = process.cwd().replace(/\\/g, '/'); + let nxWorkspaceRoot = process.cwd().replace(/\\/g, '/'); + if (process.platform === 'win32') { + nxWorkspaceRoot = `\\"${nxWorkspaceRoot}\\"`; + } else { + nxWorkspaceRoot = `"${nxWorkspaceRoot}"`; + } + execSync( - `${pmc.exec} tao ${command}/collection.json --cli=${cli} --nxWorkspaceRoot="${nxWorkspaceRoot}"`, + `${pmc.exec} tao ${command}/collection.json --cli=${cli} --nxWorkspaceRoot=${nxWorkspaceRoot}`, { stdio: [0, 1, 2], cwd: tmpDir, diff --git a/packages/storybook/src/builders/storybook/storybook.impl.ts b/packages/storybook/src/builders/storybook/storybook.impl.ts index 2256c8c8d9..3736d2e326 100644 --- a/packages/storybook/src/builders/storybook/storybook.impl.ts +++ b/packages/storybook/src/builders/storybook/storybook.impl.ts @@ -12,7 +12,6 @@ import { mkdtempSync, statSync, copyFileSync, constants } from 'fs'; import { buildDevStandalone } from '@storybook/core/dist/server/build-dev'; -import { NodeJsSyncHost } from '@angular-devkit/core/node'; import { getRoot } from '../../utils/root'; export interface StorybookConfig extends JsonObject { @@ -31,7 +30,7 @@ export interface StorybookBuilderOptions extends JsonObject { ssl?: boolean; sslCert?: string; sslKey?: string; - staticDir?: number[]; + staticDir?: string[]; watch?: boolean; docsMode?: boolean; } diff --git a/packages/tao/src/shared/workspace.ts b/packages/tao/src/shared/workspace.ts index c871489e1f..a5502b656f 100644 --- a/packages/tao/src/shared/workspace.ts +++ b/packages/tao/src/shared/workspace.ts @@ -128,7 +128,7 @@ export class Workspaces { constructor(private root: string) {} relativeCwd(cwd: string) { - let relativeCwd = cwd.split(this.root)[1]; + let relativeCwd = cwd.replace(/\\/g, '/').split(this.root)[1]; if (relativeCwd) { return relativeCwd.startsWith('/') ? relativeCwd.substring(1) diff --git a/packages/workspace/src/command-line/utils.ts b/packages/workspace/src/command-line/utils.ts index 5fc237b468..0e110b0702 100644 --- a/packages/workspace/src/command-line/utils.ts +++ b/packages/workspace/src/command-line/utils.ts @@ -85,7 +85,7 @@ export function splitArgsIntoNxArgsAndOverrides( mode === 'run-one' ? runOne : mode === 'run-many' ? runMany : runAffected; const nxArgs: RawNxArgs = {}; - const overrides = yargsParser(args._); + const overrides = yargsParser(args._ as string[]); delete overrides._; Object.entries(args).forEach(([key, value]) => { @@ -124,8 +124,8 @@ export function splitArgsIntoNxArgsAndOverrides( !nxArgs.all && args._.length >= 2 ) { - nxArgs.base = args._[0]; - nxArgs.head = args._[1]; + nxArgs.base = args._[0] as string; + nxArgs.head = args._[1] as string; } else if (!nxArgs.base) { const affectedConfig = getAffectedConfig(); diff --git a/packages/workspace/src/migrations/update-10-3-0/add-cli-dependency.spec.ts b/packages/workspace/src/migrations/update-10-3-0/add-cli-dependency.spec.ts index ba4b8d35ba..4dcfd6ba78 100644 --- a/packages/workspace/src/migrations/update-10-3-0/add-cli-dependency.spec.ts +++ b/packages/workspace/src/migrations/update-10-3-0/add-cli-dependency.spec.ts @@ -16,7 +16,7 @@ describe('CLI dependency migration', () => { ); }); - it.only('should add @nrwl/cli to package.json', async () => { + it('should add @nrwl/cli to package.json', async () => { const result = await runMigration('add-cli-dependency', {}, tree); const packageJson = readJsonInTree(result, 'package.json'); expect(packageJson.devDependencies['@nrwl/cli']).toEqual(nxVersion); diff --git a/scripts/build-angular.js b/scripts/build-angular.js new file mode 100644 index 0000000000..da90f5f8a5 --- /dev/null +++ b/scripts/build-angular.js @@ -0,0 +1,7 @@ +const childProcess = require('child_process'); +const fs = require('fs-extra'); + +childProcess.execSync(`npx ng-packagr -p packages/angular/ng-package.json`); +fs.removeSync('packages/angular/dist/src'); +fs.copySync('packages/angular/dist/', 'build/packages/angular/'); +fs.removeSync('packages/angular/dist/'); diff --git a/scripts/build-angular.sh b/scripts/build-angular.sh deleted file mode 100755 index b7fec9b19c..0000000000 --- a/scripts/build-angular.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -npx ng-packagr -p packages/angular/ng-package.json -rm -rf packages/angular/dist/src -cp -r packages/angular/dist/* build/packages/angular/ -rm -rf packages/angular/dist - -#TODO This is a temporary hack until we can publish named umds -sed -i.bak "s/define(\[/define('@nrwl\/angular',\[/" build/packages/angular/bundles/nrwl-angular.umd.js -sed -i.bak "s/define(\[/define('@nrwl\/angular',\[/" build/packages/angular/bundles/nrwl-angular.umd.min.js - -rm -rf build/packages/angular/bundles/nrwl-angular.umd.js.bak -rm -rf build/packages/angular/bundles/nrwl-angular.umd.min.js.bak - -sed -i.bak "s/define(\[/define('@nrwl\/angular\/testing',\[/" build/packages/angular/bundles/nrwl-angular-testing.umd.js -sed -i.bak "s/define(\[/define('@nrwl\/angular\/testing',\[/" build/packages/angular/bundles/nrwl-angular-testing.umd.min.js - -rm -rf build/packages/angular/bundles/nrwl-angular-testing.umd.js.bak -rm -rf build/packages/angular/bundles/nrwl-angular-testing.umd.min.js.bak diff --git a/scripts/chmod.js b/scripts/chmod.js new file mode 100644 index 0000000000..c5b4871836 --- /dev/null +++ b/scripts/chmod.js @@ -0,0 +1,3 @@ +const shell = require('shelljs'); + +shell.chmod('+x', process.argv[2]); diff --git a/scripts/e2e-ci.sh b/scripts/e2e-ci.sh deleted file mode 100755 index 9d85097c72..0000000000 --- a/scripts/e2e-ci.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -if [ "$1" == "1" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-workspace affected - -elif [ "$1" == "2" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-cli,e2e-nx-plugin,dep-graph-client-e2e affected - -elif [ "$1" == "3" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-cypress,e2e-jest affected - -elif [ "$1" == "4" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-react affected - -elif [ "$1" == "5" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-next affected - -elif [ "$1" == "6" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-node affected - -elif [ "$1" == "7" ]; then - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-web,e2e-linter,e2e-storybook affected - -elif [ "$1" == "8" ]; then - export SELECTED_CLI=angular - ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts e2e-angular affected -fi diff --git a/scripts/e2e.sh b/scripts/e2e.sh deleted file mode 100755 index 4aac7b2f98..0000000000 --- a/scripts/e2e.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -export SELECTED_CLI=$SELECTED_CLI -ts-node --project scripts/tsconfig.e2e.json ./scripts/e2e.ts "$@" diff --git a/scripts/e2e.ts b/scripts/e2e.ts index e1c96aa3fe..add6d722ad 100755 --- a/scripts/e2e.ts +++ b/scripts/e2e.ts @@ -1,11 +1,8 @@ -const { execSync } = require('child_process'); +import { execSync } from 'child_process'; import { readdirSync } from 'fs'; -const { promisify } = require('util'); -const { spawn, exec } = require('child_process'); +import { ensureDirSync, removeSync } from 'fs-extra'; const kill = require('tree-kill'); - -const asyncExec = promisify(exec); -let localRegistryProcess; +import { build } from './package'; process.env.PUBLISHED_VERSION = `9999.0.2`; process.env.npm_config_registry = `http://localhost:4872/`; @@ -16,50 +13,13 @@ export const getDirectories = (source) => .filter((dirent) => dirent.isDirectory()) .map((dirent) => dirent.name); -async function spawnLocalRegistry() { - localRegistryProcess = spawn('npx', [ - 'verdaccio', - '--config', - './scripts/local-registry/config.yml', - '--listen', - '4872', - ]); - - let collectedOutput = []; - let resolvedOrRejected = false; - - setTimeout(() => { - if (!resolvedOrRejected) { - console.error(`Failed to start the npm registry`); - console.error(collectedOutput.join('')); - cleanUp(1); - } - }, 10000); - - await new Promise((res, rej) => { - localRegistryProcess.stdout.on('data', (data) => { - collectedOutput.push(data.toString()); - // wait for local-registry to come online - if (data.includes('http address')) { - resolvedOrRejected = true; - res(); - } - }); - localRegistryProcess.on('error', (err) => { - console.error(collectedOutput.join('')); - resolvedOrRejected = true; - rej(err); - }); - }); -} - -async function updateVersion(packagePath) { - return exec(`npm version ${process.env.PUBLISHED_VERSION}`, { +function updateVersion(packagePath) { + return execSync(`npm version ${process.env.PUBLISHED_VERSION}`, { cwd: packagePath, }); } -async function publishPackage(packagePath) { +function publishPackage(packagePath) { if (process.env.npm_config_registry.indexOf('http://localhost') === -1) { throw Error(` ------------------ @@ -68,22 +28,18 @@ async function publishPackage(packagePath) { `); } try { - await asyncExec(`npm publish`, { + execSync(`npm publish`, { cwd: packagePath, env: process.env, }); } catch (e) {} } -export async function setup() { - // @ts-ignore - await spawnLocalRegistry(); - await Promise.all( - getDirectories('./build/packages').map(async (pkg) => { - await updateVersion(`./build/packages/${pkg}`); - return await publishPackage(`./build/packages/${pkg}`); - }) - ); +export function setup() { + getDirectories('./build/packages').map((pkg) => { + updateVersion(`./build/packages/${pkg}`); + publishPackage(`./build/packages/${pkg}`); + }); } async function runTest() { @@ -111,36 +67,31 @@ async function runTest() { .join(','); } - execSync(`./scripts/package.sh 9999.0.2 "~10.0.0" "3.9.3" "2.0.4"`, { - stdio: [0, 1, 2], - }); + build(process.env.PUBLISHED_VERSION, '~10.0.0', '3.9.3', '2.1.2'); if (process.argv[5] != '--rerun') { - execSync(`rm -rf tmp`); - execSync(`mkdir -p tmp/angular`); - execSync(`mkdir -p tmp/nx`); + removeSync(`tmp`); + ensureDirSync(`tmp/angular`); + ensureDirSync(`tmp/nx`); } try { - await setup(); + setup(); if (selectedProjects === '') { console.log('No tests to run'); } else if (selectedProjects) { execSync( - `node --max-old-space-size=4000 ./node_modules/.bin/nx run-many --target=e2e --projects=${selectedProjects} ${testNamePattern}`, + `yarn nx run-many --target=e2e --projects=${selectedProjects} ${testNamePattern}`, { stdio: [0, 1, 2], env: { ...process.env, NX_TERMINAL_CAPTURE_STDERR: 'true' }, } ); } else { - execSync( - `node --max-old-space-size=4000 ./node_modules/.bin/nx run-many --target=e2e --all`, - { - stdio: [0, 1, 2], - env: { ...process.env, NX_TERMINAL_CAPTURE_STDERR: 'true' }, - } - ); + execSync(`yarn nx run-many --target=e2e --all`, { + stdio: [0, 1, 2], + env: { ...process.env, NX_TERMINAL_CAPTURE_STDERR: 'true' }, + }); } cleanUp(0); } catch (e) { @@ -156,18 +107,12 @@ function cleanUp(code) { kill(0); } } catch (e) {} - try { - if (localRegistryProcess) localRegistryProcess.kill(0); - } catch (e) {} // try killing everything after in case something hasn't terminated try { if (!process.env.CI) { kill(0, 'SIGKILL'); } } catch (e) {} - try { - if (localRegistryProcess) localRegistryProcess.kill(0, 'SIGKILL'); - } catch (e) {} process.exit(code); } diff --git a/scripts/local-registry/config.yml b/scripts/local-registry/config.yml index 85e1f77e37..1c3160a3a6 100644 --- a/scripts/local-registry/config.yml +++ b/scripts/local-registry/config.yml @@ -35,4 +35,4 @@ packages: # log settings logs: - - { type: stdout, format: pretty, level: http } + - { type: stdout, format: pretty, level: error } diff --git a/scripts/package.ts b/scripts/package.ts new file mode 100644 index 0000000000..59dbca3ae2 --- /dev/null +++ b/scripts/package.ts @@ -0,0 +1,73 @@ +import { execSync } from 'child_process'; +import { readFileSync, writeFileSync } from 'fs-extra'; + +export function build( + nxVersion, + ngCliVersion, + typescriptVersion, + prettierVersion +) { + try { + execSync('npx nx run-many --target=build --all --parallel', { + stdio: [0, 1, 2], + }); + } catch { + console.log('Build failed'); + process.exit(1); + } + + const BUILD_DIR = 'build/packages'; + + const files = [ + ...[ + 'react', + 'next', + 'web', + 'jest', + 'node', + 'express', + 'nest', + 'cypress', + 'storybook', + 'angular', + 'workspace', + ].map((f) => `${f}/src/utils/versions.js`), + ...[ + 'react', + 'next', + 'web', + 'jest', + 'node', + 'express', + 'nest', + 'cypress', + 'storybook', + 'angular', + 'workspace', + 'cli', + 'linter', + 'tao', + 'devkit', + 'eslint-plugin-nx', + 'create-nx-workspace', + 'create-nx-plugin', + 'nx-plugin', + ].map((f) => `${f}/package.json`), + 'create-nx-workspace/bin/create-nx-workspace.js', + 'create-nx-plugin/bin/create-nx-plugin.js', + ].map((f) => `${BUILD_DIR}/${f}`); + + files.forEach((f) => { + let content = readFileSync(f).toString(); + content = content + .replace( + /exports.nxVersion = '\*'/g, + `exports.nxVersion = '${nxVersion}'` + ) + .replace(/NX_VERSION/g, nxVersion) + .replace(/TYPESCRIPT_VERSION/g, typescriptVersion) + .replace(/PRETTIER_VERSION/g, prettierVersion); + + writeFileSync(f, content); + }); +} diff --git a/workspace.json b/workspace.json index 94affba093..a60f4ddef1 100644 --- a/workspace.json +++ b/workspace.json @@ -137,7 +137,7 @@ "command": "nx build-base tao" }, { - "command": "chmod +x build/packages/tao/index.js" + "command": "node ./scripts/chmod build/packages/tao/index.js" }, { "command": "node ./scripts/copy-readme.js tao" @@ -1421,7 +1421,7 @@ "command": "nx build-base create-nx-workspace" }, { - "command": "chmod +x build/packages/create-nx-workspace/bin/create-nx-workspace.js" + "command": "node ./scripts/chmod build/packages/create-nx-workspace/bin/create-nx-workspace.js" }, { "command": "node ./scripts/copy-readme.js create-nx-workspace" @@ -1507,7 +1507,7 @@ "command": "nx build-base create-nx-plugin" }, { - "command": "chmod +x build/packages/create-nx-plugin/bin/create-nx-plugin.js" + "command": "node ./scripts/chmod build/packages/create-nx-plugin/bin/create-nx-plugin.js" }, { "command": "node ./scripts/copy-readme.js create-nx-workspace" @@ -1593,7 +1593,7 @@ "command": "nx build-base cli" }, { - "command": "chmod +x build/packages/cli/bin/nx.js" + "command": "node ./scripts/chmod build/packages/cli/bin/nx.js" }, { "command": "node ./scripts/copy-readme.js cli" @@ -1684,7 +1684,7 @@ "command": "nx build-base angular" }, { - "command": "./scripts/build-angular.sh" + "command": "node ./scripts/build-angular" }, { "command": "node ./scripts/copy-readme.js angular" diff --git a/yarn.lock b/yarn.lock index 219bcff1dd..648ca23402 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4823,57 +4823,52 @@ "@typescript-eslint/types" "4.3.0" eslint-visitor-keys "^2.0.0" -"@verdaccio/commons-api@9.6.1", "@verdaccio/commons-api@^9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@verdaccio/commons-api/-/commons-api-9.6.1.tgz#f62d1e0d7e55f19c483989f718ed2df2bf55ae3a" - integrity sha512-wGwDOxWkWjOcxCpwUvAqY+v24I9BRTB5L8xcbE+drpF4gL5q/wN+yzBgxCtkBh/nchOALxRC93JrE3IgVTu3iA== +"@verdaccio/commons-api@9.7.1", "@verdaccio/commons-api@^9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@verdaccio/commons-api/-/commons-api-9.7.1.tgz#816f08eb6cb0dbe345f2546428c837be6804796d" + integrity sha512-s2uD3s325C0UsQ9uQTmf15dXFsGVo23IM6pSUTukCRuurCok89e/k1Adz2CaoXpEu1qpxQ6Sv0dcNpGl7Q7hwQ== dependencies: - http-errors "1.7.3" + http-errors "1.8.0" http-status-codes "1.4.0" -"@verdaccio/file-locking@^9.6.1", "@verdaccio/file-locking@^9.7.0": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@verdaccio/file-locking/-/file-locking-9.7.0.tgz#87de85a46992662fda8ef700e0967f787db9d7cd" - integrity sha512-ytMAZtne0o8gBEmkKLHScA3NvvN9o+IGEhXQsa2G6ZsLKPKheE6bS4V8mD9h+C/qL1gHkaNdhIR4hd0SmabIxQ== +"@verdaccio/file-locking@^9.7.2": + version "9.7.2" + resolved "https://registry.yarnpkg.com/@verdaccio/file-locking/-/file-locking-9.7.2.tgz#953367a42554ef7019fb4206c6e3af5e2dc217db" + integrity sha512-y9yLk8+9wdQH1bDyeR7Cu80dKQMiiva9ddNbXllV6h0uxaqVOxDyyE0OWdyvUy0xdA4lUD/y0DxHOInDOhdKaw== dependencies: lockfile "1.0.4" -"@verdaccio/local-storage@9.7.0": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@verdaccio/local-storage/-/local-storage-9.7.0.tgz#e79503c5334af8403c1222aa1d7e1ea2c377c75c" - integrity sha512-3h8lCLIAjTWhEJm3o4258KP9XTxrlfNHMWGzHr3e/8HzSTB7pbEDvx+h9CXlj1ErHvb2fQb2k7mqnWYs4DHq/A== +"@verdaccio/local-storage@9.7.4": + version "9.7.4" + resolved "https://registry.yarnpkg.com/@verdaccio/local-storage/-/local-storage-9.7.4.tgz#3ffaa41fc850758296c9f243d765372a2e5e4ea2" + integrity sha512-Wj0mJ6FTLGma+nDxpAWJkg7yY0WLh0sUm94juqY9eyWSqOWdv1QvduE9lvl0vh890/QbrlqzxPqxTxeZwsndTA== dependencies: - "@verdaccio/commons-api" "^9.6.1" - "@verdaccio/file-locking" "^9.7.0" - "@verdaccio/streams" "^9.7.0" + "@verdaccio/commons-api" "^9.7.1" + "@verdaccio/file-locking" "^9.7.2" + "@verdaccio/streams" "^9.7.2" async "3.2.0" level "5.0.1" - lodash "4.17.15" + lodash "4.17.20" mkdirp "0.5.5" -"@verdaccio/readme@9.7.0": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@verdaccio/readme/-/readme-9.7.0.tgz#5e6df8a6a4ab730f8f515ee7feba08bd4e48b235" - integrity sha512-Q7dSqfIUR9EhLQ9dyYQMxY7SydgDYnlwMR6IXVek87Z38yxDi6v4r/hN+OEtndUCfcsvt/smBcw1DraXO2t0cQ== +"@verdaccio/readme@9.7.3": + version "9.7.3" + resolved "https://registry.yarnpkg.com/@verdaccio/readme/-/readme-9.7.3.tgz#0d6e407883600c42e51f262971e7da8d525886e6" + integrity sha512-86Zv46Qpcx0d0YRutFPhPH4OhGSljUJyhkxk3H/bCzzw8hGEvM1Du2y8kzfAS9qUsX8Qux97vfxxz6+RpBdU1w== dependencies: dompurify "2.0.8" jsdom "15.2.1" - marked "0.7.0" + marked "1.1.1" -"@verdaccio/streams@9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@verdaccio/streams/-/streams-9.6.1.tgz#2ab565743c093d7a2f8834c62f37dfc36f2a4d5b" - integrity sha512-P4DFWvB9BNCDAh/sYPr59JW8N9uxAtlIx0Xa0vobxy+4cvvmP9lrMbeK4liH5yKJmwKmiEIZ6SxfTKR/MqbOpw== +"@verdaccio/streams@9.7.2", "@verdaccio/streams@^9.7.2": + version "9.7.2" + resolved "https://registry.yarnpkg.com/@verdaccio/streams/-/streams-9.7.2.tgz#cd5448470d725e221629adb84c74af7dfd8c9678" + integrity sha512-SoCG1btVFPxOcrs8w9wLJCfe8nfE6EaEXCXyRwGbh+Sr3NLEG0R8JOugGJbuSE+zIRuUs5JaUKjzSec+JKLvZw== -"@verdaccio/streams@^9.7.0": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@verdaccio/streams/-/streams-9.7.0.tgz#21d35e1c60c5dee58e54878374d3d354f06ebcdb" - integrity sha512-h0GvmR1sjaH/H1MOBWJkmNSCuTI7cKYoyvWlP6S1gMEgfTnpwza9sW0F6RYttfYYzaDqyk6niVL6kDre2zVGEw== - -"@verdaccio/ui-theme@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@verdaccio/ui-theme/-/ui-theme-1.11.0.tgz#78316f7983760c1ad7b6bc84a7c54730af802c75" - integrity sha512-ggXPyCueh8CtHFrpZsq7kP+pLxKPsiTuoCGmYNIquZ/p99A6eIAVLElqHFJfgGATsdVlFQKWG/AawCfxD5ymUw== +"@verdaccio/ui-theme@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@verdaccio/ui-theme/-/ui-theme-1.14.0.tgz#22b397f399bf1dfcc8e471d1895c3f74bd340691" + integrity sha512-vTzZYnC+HpeeW6pGFBa51rwbqwjqYkgJE1DEF5fSK5V2QbHi+XPIPucm6hrnaZjMlSYbe+4DaMN1XOKLqOJlzg== "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -5505,16 +5500,6 @@ ajv@6.12.6, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: version "6.12.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" @@ -6045,7 +6030,7 @@ aws-sign2@~0.7.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.6.0, aws4@^1.8.0: +aws4@^1.8.0: version "1.10.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== @@ -7420,13 +7405,13 @@ bump-file@1.0.0: detect-indent "5.0.0" semver "5.4.1" -bunyan@1.8.13: - version "1.8.13" - resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.13.tgz#dde6bacd9ebccaedb110f1319f88db3f415ccfeb" - integrity sha512-4zO4iMxZeCpf+95ERsr83nwQr11o1KY2FLhX4wZ6kPXieIVYL3k9eX+N6vbHhFEK5h5O/qCQpfXt7N9VBAIvCA== +bunyan@1.8.14: + version "1.8.14" + resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.14.tgz#3d8c1afea7de158a5238c7cb8a66ab6b38dd45b4" + integrity sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg== optionalDependencies: dtrace-provider "~0.8" - moment "^2.10.6" + moment "^2.19.3" mv "~2" safe-json-stringify "~1" @@ -8248,7 +8233,7 @@ colors@^1.1.0, colors@^1.1.2, colors@^1.4.0: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.5, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -9588,10 +9573,10 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -dayjs@1.8.28: - version "1.8.28" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.28.tgz#37aa6201df483d089645cb6c8f6cef6f0c4dbc07" - integrity sha512-ccnYgKC0/hPSGXxj7Ju6AV/BP4HUkXC2u15mikXT5mX9YorEaoi1bEKOmAqdkJHN4EEkmAf97SpH66Try5Mbeg== +dayjs@1.9.6: + version "1.9.6" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.9.6.tgz#6f0c77d76ac1ff63720dd1197e5cb87b67943d70" + integrity sha512-HngNLtPEBWRo8EFVmHFmSXAjtCX8rGNqeXQI0Gh7wCTSqwaKgPIDqu9m07wABVopNwzvOeCb+2711vQhDlcIXw== de-indent@^1.0.2: version "1.0.2" @@ -10548,10 +10533,10 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236" - integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ== +envinfo@7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" + integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== err-code@^1.0.0: version "1.1.2" @@ -11202,7 +11187,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.1, extend@~3.0.2: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -11255,11 +11240,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -11684,7 +11664,7 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.1, form-data@~2.3.2: +form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== @@ -12372,14 +12352,6 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0= - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - har-validator@~5.1.0, har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" @@ -12762,14 +12734,14 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== dependencies: depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.1.1" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" toidentifier "1.0.0" @@ -12783,6 +12755,17 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" @@ -14556,15 +14539,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.9.0: +js-yaml@3.14.0, js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.9.0: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -14671,11 +14646,6 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz#371873c5ffa44304a6ba12419bcfa95f404ae081" integrity sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -14951,10 +14921,10 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -kleur@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.0.1.tgz#3d4948534b666e2578f93b6fafb62108e64f05ef" - integrity sha512-Qs6SqCLm63rd0kNVh+wO4XsWLU6kgfwwaPYsLiClWf0Tewkzsa6MvB21bespb8cz+ANS+2t3So1ge3gintzhlw== +kleur@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.3.tgz#8d262a56d79a137ee1b706e967c0b08a7fef4f4c" + integrity sha512-H1tr8QP2PxFTNwAFM74Mui2b6ovcY9FoxJefgrwxY+OCJcq01k5nvhf4M/KnizzrJvLRap5STUy7dgDV35iUBw== kleur@^3.0.3: version "3.0.3" @@ -15480,16 +15450,16 @@ lodash@4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@4.17.20, lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== -lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -15781,15 +15751,15 @@ markdown-to-jsx@^6.11.4: prop-types "^15.6.2" unquote "^1.1.0" -marked@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +marked@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.1.1.tgz#e5d61b69842210d5df57b05856e0c91572703e6a" + integrity sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw== -marked@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355" - integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw== +marked@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.5.tgz#a44b31f2a0b8b5bfd610f00d55d1952d1ac1dfdb" + integrity sha512-2AlqgYnVPOc9WDyWu7S5DJaEZsfk6dNh/neatQ3IHUW4QLutM/VPSH9lG7bif+XjFWc9K9XR3QvR+fXuECmfdA== material-colors@^1.2.1: version "1.2.6" @@ -16298,12 +16268,7 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moment@^2.10.6: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== - -moment@^2.27.0: +moment@^2.19.3, moment@^2.27.0: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== @@ -17002,11 +16967,6 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -18846,7 +18806,7 @@ qs@^6.4.0, qs@^6.6.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== -qs@~6.5.1, qs@~6.5.2: +qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== @@ -19775,32 +19735,6 @@ request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@2.87.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - request@2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -19827,7 +19761,7 @@ request@2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" -request@^2.83.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@2.88.2, request@^2.83.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -20678,6 +20612,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -22199,13 +22138,6 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== - dependencies: - punycode "^1.4.1" - tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -22949,63 +22881,63 @@ vendors@^1.0.0: resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== -verdaccio-audit@9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/verdaccio-audit/-/verdaccio-audit-9.6.1.tgz#aa18ffeb23923df56399ef3f0d7aa20ffb10e03e" - integrity sha512-dyYeGhg+HfLFgTMJEV7usJ46xQix9SU566XIi278IlYFmBkFe6SsmiZUHKaL3pbq8K9ESQYNCyYkZW29QMpcIg== +verdaccio-audit@9.7.3: + version "9.7.3" + resolved "https://registry.yarnpkg.com/verdaccio-audit/-/verdaccio-audit-9.7.3.tgz#a31d0c63e9c050a9575431a82fbbc56a25a249e5" + integrity sha512-FDWafgDjvnTbJapQpd0c41FjrecR+iRHrnDi2gkAn4IJpiLCgXC6R5NdkXjDIekKEsou9PyQTsEdoHK7iDx+tQ== dependencies: express "4.17.1" - request "2.88.0" + request "2.88.2" -verdaccio-htpasswd@9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/verdaccio-htpasswd/-/verdaccio-htpasswd-9.6.1.tgz#7c4d881c1c45d517f840d7333f1ef18a3bc8f066" - integrity sha512-UVUm3lt0JNJk02rKd2VBqpfVDwDlRfGyTQLwBuZfdnD/qmGrTzqKcnXAsG6zwlPo64Js5ZTvGi1/QeAgG4GjxA== +verdaccio-htpasswd@9.7.2: + version "9.7.2" + resolved "https://registry.yarnpkg.com/verdaccio-htpasswd/-/verdaccio-htpasswd-9.7.2.tgz#ba14a29b65658b3f4c7e2042c3fcf20e697401a6" + integrity sha512-c7ZEb7wuce0+4h92w4f1ySMhsIWFs/mlsFjjoqIlY5SBskmQI5RHC7HQglVgFjOMxrWoaaadJ5WGmFV+A/yxPQ== dependencies: - "@verdaccio/file-locking" "^9.6.1" + "@verdaccio/file-locking" "^9.7.2" apache-md5 "1.1.2" bcryptjs "2.4.3" - http-errors "1.7.3" + http-errors "1.8.0" unix-crypt-td-js "1.1.4" -verdaccio@^4.4.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/verdaccio/-/verdaccio-4.7.2.tgz#501212aa710560e1ff2bc538604a6b29b1bcbd04" - integrity sha512-qaxYkUTbtJMmBlK+UCRxeFKOunlt43CTfMddSph87qjWi7xJqeAosN5hC58j9YFKkUjbH5VfWiT/AkheDAvApg== +verdaccio@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/verdaccio/-/verdaccio-4.10.0.tgz#ca48c4b7a5bb967f0e2b5d38bab599a39cd0aaf1" + integrity sha512-9nCIHM9rvgwasBJvo82MiEDzS2HGWolopID8/THU0vZfa1d6MDAiuakjwQ9Z2xDonpoOoDji6xpg2i6il+gEWQ== dependencies: - "@verdaccio/commons-api" "9.6.1" - "@verdaccio/local-storage" "9.7.0" - "@verdaccio/readme" "9.7.0" - "@verdaccio/streams" "9.6.1" - "@verdaccio/ui-theme" "1.11.0" + "@verdaccio/commons-api" "9.7.1" + "@verdaccio/local-storage" "9.7.4" + "@verdaccio/readme" "9.7.3" + "@verdaccio/streams" "9.7.2" + "@verdaccio/ui-theme" "1.14.0" JSONStream "1.3.5" async "3.2.0" body-parser "1.19.0" - bunyan "1.8.13" + bunyan "1.8.14" commander "3.0.2" compression "1.7.4" cookies "0.8.0" cors "2.8.5" - dayjs "1.8.28" - envinfo "7.5.1" + dayjs "1.9.6" + envinfo "7.7.3" express "4.17.1" handlebars "4.7.6" - http-errors "1.7.3" - js-yaml "3.13.1" + http-errors "1.8.0" + js-yaml "3.14.0" jsonwebtoken "8.5.1" - kleur "4.0.1" - lodash "4.17.15" + kleur "4.1.3" + lodash "4.17.20" lunr-mutable-indexes "2.3.2" - marked "0.8.2" + marked "1.2.5" mime "2.4.6" minimatch "3.0.4" mkdirp "0.5.5" mv "2.1.1" pkginfo "0.4.1" - request "2.87.0" + request "2.88.0" semver "6.3.0" - verdaccio-audit "9.6.1" - verdaccio-htpasswd "9.6.1" + verdaccio-audit "9.7.3" + verdaccio-htpasswd "9.7.2" verror@1.10.0: version "1.10.0"