test: convert mock-adb to .NET (#5720)
#### Details This PR migrates `mock-adb` from being a Node.js script packaged into an exe using `pkg` to being a .NET 6.0 console application built as a standalone exe. ##### Motivation The main motivation is to improve the reliability of the unified tests by improving mock-adb performance. The .NET version is more than an order of magnitude faster than the Node.js version due to the high startup time involved to initialize the Node.js runtime, before our code starts running, and mock-adb is invoked tens of times per test for all unified tests of scenarios beyond the "device setup" flow. ##### Context For internal folks, see the recording of our 7/7/22 engineering discussion for more context and team discussion. We considered and rejected a few other approaches, including: * Rewrite in Rust/Go instead of .NET * Move to a different repo as part of the rewrite * Instead of rewriting, rearchitect some of the unified tests to avoid having to shell out to a separate `adb.exe` process so much #### Pull request checklist <!-- If a checklist item is not applicable to this change, write "n/a" in the checkbox --> - [n/a] Addresses an existing issue: #0000 - [x] Ran `yarn fastpass` - [no] Added/updated relevant unit test(s) (and ran `yarn test`) - [x] Verified code coverage for the changes made. Check coverage report at: `<rootDir>/test-results/unit/coverage` - [x] PR title *AND* final merge commit title both start with a semantic tag (`fix:`, `chore:`, `feat(feature-name):`, `refactor:`). See `CONTRIBUTING.md`. - [n/a] (UI changes only) Added screenshots/GIFs to description above - [n/a] (UI changes only) Verified usability with NVDA/JAWS
This commit is contained in:
Родитель
1aadc8a861
Коммит
d18b2ffdbf
|
@ -10,8 +10,9 @@ on:
|
|||
- cron: '0 19 * * 0'
|
||||
|
||||
env:
|
||||
# Keep this in sync with /pipeline/install-node-prerequisites.yaml
|
||||
# Keep these in sync with /pipeline/install-node-prerequisites.yaml
|
||||
NODE_VERSION: 16.14.2
|
||||
DOTNET_SDK_VERSION: 6.0.301
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
@ -21,6 +22,10 @@ jobs:
|
|||
- uses: actions/checkout@v2
|
||||
timeout-minutes: 2
|
||||
|
||||
- uses: actions/setup-dotnet@v2
|
||||
with: { dotnet-version: "${{ env.DOTNET_SDK_VERSION }}" }
|
||||
timeout-minutes: 2
|
||||
|
||||
- uses: actions/setup-node@v2
|
||||
with: { node-version: "${{ env.NODE_VERSION }}" }
|
||||
timeout-minutes: 2
|
||||
|
@ -264,6 +269,10 @@ jobs:
|
|||
- uses: actions/checkout@v2
|
||||
timeout-minutes: 2
|
||||
|
||||
- uses: actions/setup-dotnet@v2
|
||||
with: { dotnet-version: "${{ env.DOTNET_SDK_VERSION }}" }
|
||||
timeout-minutes: 2
|
||||
|
||||
- uses: actions/setup-node@v2
|
||||
with: { node-version: "${{ env.NODE_VERSION }}" }
|
||||
timeout-minutes: 2
|
||||
|
|
|
@ -11,9 +11,11 @@
|
|||
/extension/
|
||||
/package/
|
||||
|
||||
bin/
|
||||
bundle/
|
||||
dist/
|
||||
drop/
|
||||
obj/
|
||||
test-results/
|
||||
analysis/
|
||||
*.scss.d.ts
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
# Licensed under the MIT License.
|
||||
|
||||
**/*.a11ywebassessment
|
||||
**/*.cs
|
||||
**/*.csproj
|
||||
**/*.dockerignore
|
||||
**/*.gitattributes
|
||||
**/*.gitignore
|
||||
|
@ -27,14 +29,15 @@
|
|||
.vs/
|
||||
AppXManifest.xml
|
||||
copyright-header.txt
|
||||
bin/
|
||||
bundle/
|
||||
dist/
|
||||
docs/art/ada-cat.ansi256.txt
|
||||
docs/LICENSE.txt
|
||||
obj/
|
||||
src/electron/resources/mit_license_en.txt
|
||||
src/electron/resources/mit_license.txt
|
||||
src/NOTICE.html
|
||||
src/tests/miscellaneous/mock-adb/bin/
|
||||
drop/
|
||||
extension/
|
||||
package/
|
||||
|
|
12
Dockerfile
12
Dockerfile
|
@ -14,11 +14,17 @@ USER root
|
|||
#
|
||||
# We pin nodejs 16.x instead of accepting Playwright's default for consistency with
|
||||
# our other build environments.
|
||||
RUN apt-get update ; apt-get install ca-certificates \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y curl && \
|
||||
#
|
||||
# dotnet-sdk-6.0 is required to build mock-adb
|
||||
RUN apt-get update && \
|
||||
apt-get install -y curl apt-transport-https && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
|
||||
curl -fsSL https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -o packages-microsoft-prod.deb && \
|
||||
dpkg -i packages-microsoft-prod.deb && \
|
||||
rm packages-microsoft-prod.deb && \
|
||||
apt-get update && \
|
||||
apt-get install -y --allow-downgrades nodejs=16.* && \
|
||||
apt-get install -y dotnet-sdk-6.0 && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN npm install -g yarn@1.22.10
|
||||
|
|
22
Gruntfile.js
22
Gruntfile.js
|
@ -8,7 +8,6 @@ const sass = require('sass');
|
|||
const targets = require('./targets.config');
|
||||
|
||||
module.exports = function (grunt) {
|
||||
const pkgPath = path.resolve('./node_modules/.bin/pkg');
|
||||
const typedScssModulesPath = path.resolve('./node_modules/.bin/typed-scss-modules');
|
||||
const webpackPath = path.resolve('./node_modules/.bin/webpack');
|
||||
|
||||
|
@ -22,11 +21,9 @@ module.exports = function (grunt) {
|
|||
const packageUIBundlePath = path.join(packageUIPath, 'bundle');
|
||||
const packageUIDropPath = path.join(packageUIPath, 'drop');
|
||||
|
||||
const mockAdbAppPath = path.resolve('./src/tests/miscellaneous/mock-adb/app');
|
||||
const mockAdbBinSrcPath = path.join(mockAdbAppPath, 'bin.js');
|
||||
const mockAdbBinFilename = process.platform === 'win32' ? 'adb.exe' : 'adb';
|
||||
const mockAdbObjPath = path.join('packages', 'mock-adb', 'obj');
|
||||
const mockAdbBinPath = path.join('packages', 'mock-adb', 'bin');
|
||||
const mockAdbDropPath = path.join('drop', 'mock-adb');
|
||||
const mockAdbBinOutPath = path.join(mockAdbDropPath, mockAdbBinFilename);
|
||||
|
||||
function mustExist(file, reason) {
|
||||
const normalizedFile = path.normalize(file);
|
||||
|
@ -45,7 +42,7 @@ module.exports = function (grunt) {
|
|||
},
|
||||
clean: {
|
||||
intermediates: ['dist', extensionPath],
|
||||
'mock-adb': mockAdbDropPath,
|
||||
'mock-adb': [mockAdbObjPath, mockAdbBinPath, mockAdbDropPath],
|
||||
'package-report': packageReportDropPath,
|
||||
'package-ui': packageUIDropPath,
|
||||
scss: path.join('src', '**/*.scss.d.ts'),
|
||||
|
@ -174,7 +171,10 @@ module.exports = function (grunt) {
|
|||
'webpack-unified': `"${webpackPath}" --config-name unified`,
|
||||
'webpack-package-ui': `"${webpackPath}" --config-name package-ui`,
|
||||
'generate-scss-typings': `"${typedScssModulesPath}" src --exportType default`,
|
||||
'pkg-mock-adb': `"${pkgPath}" "${mockAdbBinSrcPath}" -d --target host --output "${mockAdbBinOutPath}"`,
|
||||
'dotnet-publish-mock-adb': {
|
||||
command: `dotnet publish -c Release -o "${path.resolve(mockAdbDropPath)}"`,
|
||||
cwd: 'packages/mock-adb',
|
||||
},
|
||||
},
|
||||
sass: {
|
||||
options: {
|
||||
|
@ -754,6 +754,10 @@ module.exports = function (grunt) {
|
|||
console.log(`package is in ${packageUIDropPath}`);
|
||||
});
|
||||
|
||||
grunt.registerTask('build-mock-adb', function () {
|
||||
grunt.task.run('exec:dotnet-publish-mock-adb');
|
||||
});
|
||||
|
||||
grunt.registerTask('extension-release-drops', function () {
|
||||
extensionReleaseTargets.forEach(targetName => {
|
||||
grunt.task.run('drop:' + targetName);
|
||||
|
@ -810,7 +814,7 @@ module.exports = function (grunt) {
|
|||
grunt.registerTask('build-unified', [
|
||||
'clean:intermediates',
|
||||
'exec:generate-scss-typings',
|
||||
'exec:pkg-mock-adb',
|
||||
'build-mock-adb',
|
||||
'exec:webpack-unified',
|
||||
'build-assets',
|
||||
'drop:unified-dev',
|
||||
|
@ -839,7 +843,7 @@ module.exports = function (grunt) {
|
|||
grunt.registerTask('build-all', [
|
||||
'clean:intermediates',
|
||||
'exec:generate-scss-typings',
|
||||
'exec:pkg-mock-adb',
|
||||
'build-mock-adb',
|
||||
'concurrent:compile-all',
|
||||
'build-assets',
|
||||
'drop:dev',
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
"./packages/*/bundle",
|
||||
"./packages/*/drop",
|
||||
"./src/assessments/color/test-steps/flashing-text-example.html",
|
||||
"./src/tests/miscellaneous/mock-adb/bin",
|
||||
"./analysis",
|
||||
".gitattribute",
|
||||
".gitattributes",
|
||||
".ignoredRevs",
|
||||
"**/*.a11ywebassessment",
|
||||
"**/*.csproj",
|
||||
"**/.DS_Store",
|
||||
"**/*.icns",
|
||||
"**/*.scss.d.ts",
|
||||
|
@ -32,8 +32,11 @@
|
|||
"**/*.snap.html",
|
||||
"**/*.svg",
|
||||
"**/*.mp3",
|
||||
"**/.vs",
|
||||
"**/bin",
|
||||
"**/bundle",
|
||||
"**/drop",
|
||||
"**/obj",
|
||||
"**/test-results",
|
||||
"**/yarn.lock",
|
||||
"Dockerfile",
|
||||
|
@ -50,7 +53,7 @@
|
|||
"prepend": "<!--",
|
||||
"append": "-->"
|
||||
},
|
||||
"ts|tsx|d.ts|js|scss|css": {
|
||||
"ts|tsx|d.ts|js|scss|css|cs": {
|
||||
"eachLine": {
|
||||
"prepend": "// "
|
||||
}
|
||||
|
|
|
@ -14,6 +14,9 @@ Throughout most of the code and build commands, Accessibility Insights for Andro
|
|||
### Prerequisites
|
||||
|
||||
All the [prerequisites](./building-web.md#Prerequisites) for building Web are also required for Unified.
|
||||
|
||||
**Additionally**, you must [install the .NET 6.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0). Use the current LTS version. You can test whether you already have this installed by running `dotnet --list-sdks`.
|
||||
|
||||
Note that if you have Hadoop YARN installed, you will need to replace `yarn` with `yarnpkg` in the commands below.
|
||||
|
||||
### Building
|
||||
|
@ -35,7 +38,7 @@ Most of the functionality of Unified relies on connecting to a device running th
|
|||
|
||||
#### Using a mock device
|
||||
|
||||
See guidance [here](../src/tests/miscellaneous/mock-adb/README.md).
|
||||
We use a test tool called `mock-adb` to enable testing against mock devices. See the [`mock-adb` README](../packages/mock-adb/README.md) for details.
|
||||
|
||||
#### Connecting to a real device/emulator
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
"build:all": "grunt build-all",
|
||||
"build:dev": "grunt build-dev",
|
||||
"build:dev:mv3": "grunt build-dev-mv3",
|
||||
"build:mock-adb": "grunt exec:pkg-mock-adb",
|
||||
"build:mock-adb": "grunt build-mock-adb",
|
||||
"build:unified": "grunt build-unified",
|
||||
"build:unified:all": "grunt build-unified-all",
|
||||
"build:unified:canary": "grunt build-unified-canary",
|
||||
|
@ -51,7 +51,7 @@
|
|||
"lint:fix": "eslint **/*.{js,ts,tsx} --quiet --fix",
|
||||
"lint:scss": "stylelint **/*.scss",
|
||||
"lint:scss:fix": "stylelint **/*.scss --fix",
|
||||
"mock-adb": "node ./src/tests/miscellaneous/mock-adb/setup-mock-adb-command.js",
|
||||
"mock-adb": "node ./src/tests/miscellaneous/setup-mock-adb/setup-mock-adb-command.js",
|
||||
"null:autoadd": "node ./tools/strict-null-checks/auto-add.js",
|
||||
"null:check": "tsc -p ./tsconfig.strictNullChecks.json",
|
||||
"null:find": "node ./tools/strict-null-checks/find.js",
|
||||
|
@ -157,7 +157,6 @@
|
|||
"license-check-and-add": "^4.0.5",
|
||||
"mini-css-extract-plugin": "2.6.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"pkg": "^5.7.0",
|
||||
"playwright": "^1.23.2",
|
||||
"postcss": "^8.4.14",
|
||||
"postcss-modules": "^4.3.1",
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RootNamespace>Microsoft.AccessibilityInsights.MockAdb</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<!--
|
||||
These are required to produce a self-contained executable named "adb.exe", which is mandatory
|
||||
because that's specifically what appium-adb looks for.
|
||||
-->
|
||||
<AssemblyName>adb</AssemblyName>
|
||||
<OutputType>Exe</OutputType>
|
||||
<UseCurrentRuntimeIdentifier>true</UseCurrentRuntimeIdentifier>
|
||||
<SelfContained>true</SelfContained>
|
||||
|
||||
<!-- These are minor performance/size optimizations -->
|
||||
<PublishReadyToRun>true</PublishReadyToRun>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
|
@ -38,4 +38,8 @@ In the remote build, these logs are uploaded as artifacts if any end-to-end test
|
|||
|
||||
### Implementation
|
||||
|
||||
The `mock-adb` implementation is in [bin.js](./app/bin.js). Commands such as `yarn mock-adb` and end-to-end tests call [setupMockAdb](https://github.com/microsoft/accessibility-insights-web/blob/main/src/tests/miscellaneous/mock-adb/setup-mock-adb.js#L28) to write the appropriate config/logging context to disk. `bin.js` gets packaged into an executable that reads the context from disk and runs with the configured behavior.
|
||||
Our team wrote `mock-adb` in .NET to improve performance and ultimately the reliability of Unified tests. Since the tests invoke `mock-adb` hundreds of times, we migrated from Node.js due to the high startup time involved to initialize the Node.js runtime. On dev machines with fewer resources, this resulted in ~2s of overhead per call and caused the tests to timeout.
|
||||
|
||||
Commands such as `yarn mock-adb` and end-to-end tests call [setupMockAdb](https://github.com/microsoft/accessibility-insights-web/blob/main/src/tests/miscellaneous/setup-mock-adb/setup-mock-adb.js) to write the appropriate config/logging context to disk. `mock-adb` gets packaged into an executable that reads the context from disk and runs with the configured behavior.
|
||||
|
||||
`mock-adb` is normally built automatically as a step of `yarn build:unified`, but you can rebuild it individually with `yarn build:mock-adb`.
|
|
@ -0,0 +1,37 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
internal class CommandResult {
|
||||
public string? stdout { get; set; }
|
||||
public string? stderr { get; set; }
|
||||
public int? exitCode { get; set; }
|
||||
public int? delayMs { get; set; }
|
||||
|
||||
public string[]? input { get; set; }
|
||||
public string? inputCommand { get; set; }
|
||||
public string? regexTarget { get; set; }
|
||||
|
||||
public static CommandResult FromCommand(Dictionary<string, CommandResult> config, string inputCommand) {
|
||||
// First option: exact match
|
||||
if (config.ContainsKey(inputCommand)) {
|
||||
return config[inputCommand];
|
||||
}
|
||||
|
||||
// Second option: regex match
|
||||
foreach (CommandResult result in config.Values) {
|
||||
if (result.regexTarget != null) {
|
||||
var resultRegex = new Regex(result.regexTarget);
|
||||
if (resultRegex.IsMatch(inputCommand)) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// default result (error)
|
||||
return new CommandResult {
|
||||
exitCode = 1,
|
||||
stderr = $"unrecognized command: {inputCommand}",
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
|
||||
using CommandConfig = System.Collections.Generic.Dictionary<string, CommandResult>;
|
||||
|
||||
string currentExe = Assembly.GetExecutingAssembly().Location;
|
||||
string currentExeDir = Path.GetDirectoryName(currentExe) ?? throw new Exception("currentExe should not be a root directory");
|
||||
|
||||
string defaultConfigPath = Path.Join(currentExeDir, "mock_adb_config.json");
|
||||
string configPath = Environment.GetEnvironmentVariable("MOCK_ADB_CONFIG") ?? defaultConfigPath;
|
||||
|
||||
if (!File.Exists(configPath))
|
||||
{
|
||||
Console.Error.WriteLine($"Could not find mock-adb config file at \"{configPath}\"");
|
||||
Console.Error.WriteLine("You can create one with \"yarn mock-adb\"");
|
||||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
string configRaw = File.ReadAllText(configPath);
|
||||
CommandConfig config = JsonSerializer.Deserialize<CommandConfig>(configRaw) ?? throw new Exception($"failed to parse config file {configPath} as JSON object");
|
||||
|
||||
// latestAdbContext.txt is a file which contains a relative file path
|
||||
string currentAdbContextPath = Path.Join(currentExeDir, "latestAdbContext.txt");
|
||||
string currentAdbContext = File.ReadAllText(currentAdbContextPath);
|
||||
|
||||
string outputLogsDir = Path.Join(currentExeDir, "logs", currentAdbContext);
|
||||
Directory.CreateDirectory(outputLogsDir);
|
||||
|
||||
string adbLogPath = Path.Join(outputLogsDir, "adb.log");
|
||||
string outputPath = Path.Join(outputLogsDir, "mock_adb_output.json");
|
||||
|
||||
int numIgnoredPrefixArgs = 0;
|
||||
if (args.Length > 0 && args[0].Equals("-P")) {
|
||||
numIgnoredPrefixArgs = 2; // "mock-adb.exe -P <port> <command>" ignores the "-P <port>"
|
||||
}
|
||||
|
||||
string inputCommand = String.Join(" ", args.Skip(numIgnoredPrefixArgs));
|
||||
CommandResult result = CommandResult.FromCommand(config, inputCommand);
|
||||
|
||||
if (result.delayMs != null) {
|
||||
Thread.Sleep((int)result.delayMs);
|
||||
}
|
||||
|
||||
if (result.stderr != null) {
|
||||
Console.Error.WriteLine(result.stderr);
|
||||
}
|
||||
|
||||
if (result.stdout != null) {
|
||||
Console.WriteLine(result.stdout);
|
||||
}
|
||||
|
||||
result.input = args;
|
||||
result.inputCommand = inputCommand;
|
||||
|
||||
string resultRaw = JsonSerializer.Serialize(result);
|
||||
|
||||
using (StreamWriter adbLogFile = File.AppendText(adbLogPath)) {
|
||||
adbLogFile.WriteLine($"ADB {inputCommand}");
|
||||
}
|
||||
|
||||
using (StreamWriter outputFile = File.CreateText(outputPath)) {
|
||||
outputFile.WriteLine(resultRaw);
|
||||
}
|
||||
|
||||
string outputConfigPath = Path.Join(outputLogsDir, "mock_adb_config.json");
|
||||
File.Copy(configPath, outputConfigPath, true);
|
||||
|
||||
Environment.Exit(result.exitCode ?? 0);
|
|
@ -1,6 +1,11 @@
|
|||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License.
|
||||
steps:
|
||||
- task: UseDotNet@2 # For building mock-adb
|
||||
inputs:
|
||||
# Keep this in sync with /.github/workflows/ci.yml
|
||||
version: '6.0.301'
|
||||
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
# Keep this in sync with /.github/workflows/ci.yml
|
||||
|
|
|
@ -5,7 +5,7 @@ import * as path from 'path';
|
|||
|
||||
const mockAdbStandardResultPath = path.join(
|
||||
__dirname,
|
||||
'../miscellaneous/mock-adb/assets/result.json',
|
||||
'../miscellaneous/setup-mock-adb/assets/result.json',
|
||||
);
|
||||
export const androidScanResultExample = JSON.parse(
|
||||
fs.readFileSync(mockAdbStandardResultPath, { encoding: 'utf-8' }),
|
||||
|
|
|
@ -6,7 +6,7 @@ import { flushSettledPromises } from 'tests/common/flush-settled-promises';
|
|||
import {
|
||||
generateAdbLogPath,
|
||||
generateOutputLogsDir,
|
||||
} from 'tests/miscellaneous/mock-adb/generate-log-paths';
|
||||
} from 'tests/miscellaneous/setup-mock-adb/generate-log-paths';
|
||||
|
||||
const readFile = util.promisify(fs.readFile);
|
||||
export class LogController {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
import { commonAdbConfigs, setupMockAdb } from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
// tslint:disable-next-line:no-default-export
|
||||
export default async function (): Promise<void> {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
import { commonAdbConfigs, setupMockAdb } from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
// tslint:disable-next-line:no-default-export
|
||||
export default async function (): Promise<void> {
|
||||
|
|
|
@ -9,7 +9,7 @@ import {
|
|||
delayAllCommands,
|
||||
setupMockAdb,
|
||||
simulateServiceNotInstalled,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
describe('Android setup - detect-service', () => {
|
||||
const defaultDeviceConfig = commonAdbConfigs['single-device'];
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
physicalDeviceName1,
|
||||
setupMockAdb,
|
||||
simulateReadContentError,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [cancelId, nextId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ import {
|
|||
commonAdbConfigs,
|
||||
setupMockAdb,
|
||||
simulateNoDevicesConnected,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [closeId, nextId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import {
|
|||
physicalDeviceName1,
|
||||
setupMockAdb,
|
||||
simulateServiceNotInstalled,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [closeId, nextId, rescanId] = [
|
||||
leftFooterButtonAutomationId,
|
||||
|
|
|
@ -16,7 +16,7 @@ import {
|
|||
delayAllCommands,
|
||||
setupMockAdb,
|
||||
simulateNoDevicesConnected,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [closeId, nextId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ import {
|
|||
delayAllCommands,
|
||||
physicalDeviceName1,
|
||||
setupMockAdb,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [cancelId, startTestingId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
const expectedRunningApp = 'com.google.android.apps.messaging';
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
physicalDeviceName1,
|
||||
setupMockAdb,
|
||||
simulateServiceLacksPermissions,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [cancelId, nextId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import {
|
|||
setupMockAdb,
|
||||
simulateServiceInstallationError,
|
||||
simulateServiceNotInstalled,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [cancelId, nextId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
setupMockAdb,
|
||||
simulateServiceInstallationError,
|
||||
simulateServiceNotInstalled,
|
||||
} from '../../miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from '../../miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
const [cancelId, nextId] = [leftFooterButtonAutomationId, rightFooterButtonAutomationId];
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import { createApplication } from 'tests/electron/common/create-application';
|
|||
import { scanForAccessibilityIssuesInAllModes } from 'tests/electron/common/scan-for-accessibility-issues';
|
||||
import { AppController } from 'tests/electron/common/view-controllers/app-controller';
|
||||
import { CardsViewController } from 'tests/electron/common/view-controllers/cards-view-controller';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
describe('AutomatedChecksView', () => {
|
||||
let app: AppController;
|
||||
|
|
|
@ -4,7 +4,7 @@ import * as path from 'path';
|
|||
import { createApplication } from 'tests/electron/common/create-application';
|
||||
import { scanForAccessibilityIssuesInAllModes } from 'tests/electron/common/scan-for-accessibility-issues';
|
||||
import { AppController } from 'tests/electron/common/view-controllers/app-controller';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
describe('first time dialog', () => {
|
||||
let app: AppController;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import { ResultsViewSelectors } from 'tests/electron/common/element-identifiers/
|
|||
import { scanForAccessibilityIssuesInAllModes } from 'tests/electron/common/scan-for-accessibility-issues';
|
||||
import { AppController } from 'tests/electron/common/view-controllers/app-controller';
|
||||
import { ResultsViewController } from 'tests/electron/common/view-controllers/results-view-controller';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
describe('NeedsReviewView', () => {
|
||||
let app: AppController;
|
||||
|
|
|
@ -10,7 +10,7 @@ import { ScreenshotViewSelectors } from 'tests/electron/common/element-identifie
|
|||
import { scanForAccessibilityIssuesInAllModes } from 'tests/electron/common/scan-for-accessibility-issues';
|
||||
import { AppController } from 'tests/electron/common/view-controllers/app-controller';
|
||||
import { ResultsViewController } from 'tests/electron/common/view-controllers/results-view-controller';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
describe('ResultsView', () => {
|
||||
let app: AppController;
|
||||
|
|
|
@ -16,7 +16,7 @@ import {
|
|||
commonAdbConfigs,
|
||||
mockAdbFolder,
|
||||
setupMockAdb,
|
||||
} from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
describe('TabStopsView', () => {
|
||||
let app: AppController;
|
||||
|
|
|
@ -7,7 +7,7 @@ import { AppController } from 'tests/electron/common/view-controllers/app-contro
|
|||
import { ResultsViewController } from 'tests/electron/common/view-controllers/results-view-controller';
|
||||
import { CommonSelectors } from 'tests/end-to-end/common/element-identifiers/common-selectors';
|
||||
import { settingsPanelSelectors } from 'tests/end-to-end/common/element-identifiers/details-view-selectors';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
import { commonAdbConfigs, setupMockAdb } from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
describe('AutomatedChecksView -> Settings Panel', () => {
|
||||
let app: AppController;
|
||||
let resultsView: ResultsViewController;
|
||||
|
|
|
@ -1,97 +0,0 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
const fs = require('fs');
|
||||
const { EOL } = require('os');
|
||||
const path = require('path');
|
||||
const process = require('process');
|
||||
const { fileWithExpectedLoggingPath, fileWithMockAdbConfig } = require('../common-file-names.js');
|
||||
const { generateAdbLogPath, generateOutputLogsDir } = require('../generate-log-paths.js');
|
||||
|
||||
function resultFromCommand(config, inputCommand) {
|
||||
// First option: exact match
|
||||
if (config[inputCommand]) {
|
||||
return config[inputCommand];
|
||||
}
|
||||
|
||||
// Second option: regex match
|
||||
Object.values(config).forEach(value => {
|
||||
const regexTarget = value.regexTarget;
|
||||
if (regexTarget) {
|
||||
const regex = new RegExp(regexTarget);
|
||||
if (regex.test(inputCommand)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// default result (error)
|
||||
return {
|
||||
exitCode: 1,
|
||||
stderr: `unrecognized command: ${inputCommand}`,
|
||||
};
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// Note: if you base a path on __dirname, pkg will bundle it into adb.exe
|
||||
// Use path.dirname(process.execPath) instead for it to look for the file at runtime
|
||||
const runtimeDirname = path.dirname(process.execPath);
|
||||
|
||||
const defaultConfigPath = path.join(runtimeDirname, fileWithMockAdbConfig);
|
||||
const configPath = process.env['MOCK_ADB_CONFIG'] || defaultConfigPath;
|
||||
|
||||
const configContent = fs.readFileSync(configPath);
|
||||
const config = JSON.parse(configContent);
|
||||
|
||||
const currentContext = fs.readFileSync(
|
||||
path.join(runtimeDirname, fileWithExpectedLoggingPath),
|
||||
'utf-8',
|
||||
);
|
||||
|
||||
const outputLogsDir = generateOutputLogsDir(path.dirname(process.execPath), currentContext);
|
||||
fs.mkdirSync(outputLogsDir, { recursive: true });
|
||||
|
||||
const adbLogsPath = generateAdbLogPath(outputLogsDir);
|
||||
|
||||
const outputFile = path.join(outputLogsDir, 'mock_adb_output.json');
|
||||
|
||||
let ignoredPrefixArgs = 2; // node.exe bin.js
|
||||
if (process.argv[2] === '-P') {
|
||||
ignoredPrefixArgs += 2; // -P 5037
|
||||
}
|
||||
|
||||
const inputCommand = process.argv.slice(ignoredPrefixArgs).join(' ');
|
||||
|
||||
const result = resultFromCommand(config, inputCommand);
|
||||
|
||||
if (result.delayMs != null) {
|
||||
await new Promise(resolve => {
|
||||
setTimeout(resolve, result.delayMs);
|
||||
});
|
||||
}
|
||||
if (result.stderr != null) {
|
||||
console.error(result.stderr);
|
||||
}
|
||||
if (result.stdout != null) {
|
||||
console.log(result.stdout);
|
||||
}
|
||||
|
||||
result.input = process.argv;
|
||||
result.inputCommand = inputCommand;
|
||||
|
||||
fs.writeFileSync(adbLogsPath, `ADB ${inputCommand}\n`, {
|
||||
flag: 'a',
|
||||
});
|
||||
fs.writeFileSync(outputFile, JSON.stringify(result, null, ' ') + EOL, { flag: 'a' });
|
||||
|
||||
const outputConfigFile = path.join(outputLogsDir, fileWithMockAdbConfig);
|
||||
fs.copyFileSync(configPath, outputConfigFile);
|
||||
|
||||
if (result.exitCode != null) {
|
||||
process.exit(result.exitCode);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(e => {
|
||||
console.error(`mock-adb error: ${e.stack}`);
|
||||
process.exit(1);
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
<!--
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
Licensed under the MIT License.
|
||||
-->
|
||||
|
||||
# mock-adb test integration
|
||||
|
||||
This directory contains helpers to setup mock-adb for use with unified test cases. It can also be invoked manually via `yarn mock-adb` for use with manual testing (this is why it's written in .js instead of .ts).
|
||||
|
||||
For the mock-adb implementation, see /packages/mock-adb
|
|
@ -13,7 +13,7 @@ import {
|
|||
simulateServiceLacksPermissions,
|
||||
simulateServiceNotInstalled,
|
||||
simulateInputKeyeventError,
|
||||
} from 'tests/miscellaneous/mock-adb/setup-mock-adb';
|
||||
} from 'tests/miscellaneous/setup-mock-adb/setup-mock-adb';
|
||||
|
||||
describe('mock-adb tests match snapshots after normalizing path', () => {
|
||||
const definedConfigs = Object.getOwnPropertyNames(commonAdbConfigs);
|
||||
|
|
306
yarn.lock
306
yarn.lock
|
@ -325,7 +325,7 @@
|
|||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@babel/parser@7.17.10", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.9":
|
||||
"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.9":
|
||||
version "7.17.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78"
|
||||
integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==
|
||||
|
@ -492,7 +492,7 @@
|
|||
debug "^4.1.0"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@7.17.10", "@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.14.2", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.14.2", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
|
||||
version "7.17.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.10.tgz#d35d7b4467e439fcf06d195f8100e0fea7fc82c4"
|
||||
integrity sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==
|
||||
|
@ -3459,7 +3459,7 @@ ansi-escapes@^4.2.1:
|
|||
dependencies:
|
||||
type-fest "^0.11.0"
|
||||
|
||||
ansi-regex@^2.0.0, ansi-regex@^3.0.0, ansi-regex@^5.0.0, ansi-regex@^5.0.1:
|
||||
ansi-regex@^2.0.0, ansi-regex@^5.0.0, ansi-regex@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
@ -3597,11 +3597,6 @@ appium-adb@^9.9.0:
|
|||
teen_process "^1.11.0"
|
||||
utf7 "^1.0.2"
|
||||
|
||||
aproba@^1.0.3:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||
|
||||
"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
|
||||
|
@ -3644,14 +3639,6 @@ are-we-there-yet@^3.0.0:
|
|||
delegates "^1.0.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
||||
integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^2.0.6"
|
||||
|
||||
argparse@^1.0.7:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
|
||||
|
@ -4412,11 +4399,6 @@ cheerio@^1.0.0-rc.3:
|
|||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
chownr@^1.1.1:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||
|
||||
chownr@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||
|
@ -4554,11 +4536,6 @@ co@^4.6.0:
|
|||
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
||||
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
|
||||
|
||||
code-point-at@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
|
||||
|
||||
codecov@^3.8.3:
|
||||
version "3.8.3"
|
||||
resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.8.3.tgz#9c3e364b8a700c597346ae98418d09880a3fdbe7"
|
||||
|
@ -4755,7 +4732,7 @@ configstore@^5.0.1:
|
|||
write-file-atomic "^3.0.0"
|
||||
xdg-basedir "^4.0.0"
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0:
|
||||
console-control-strings@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
|
@ -5122,13 +5099,6 @@ decimal.js@^10.3.1:
|
|||
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
|
||||
integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
|
||||
|
||||
decompress-response@^4.2.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
|
||||
integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
|
||||
dependencies:
|
||||
mimic-response "^2.0.0"
|
||||
|
||||
decompress-response@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
|
||||
|
@ -5233,11 +5203,6 @@ detect-indent@^6.0.0:
|
|||
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
|
||||
integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
|
||||
|
||||
detect-libc@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
|
||||
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
|
||||
|
||||
detect-newline@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
|
||||
|
@ -6188,11 +6153,6 @@ exit@^0.1.2, exit@~0.1.2:
|
|||
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
|
||||
integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
|
||||
|
||||
expand-template@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
|
||||
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
|
||||
|
||||
expand-tilde@^2.0.0, expand-tilde@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
|
||||
|
@ -6553,14 +6513,6 @@ fresh@0.5.2:
|
|||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
|
||||
|
||||
from2@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
|
||||
integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.0"
|
||||
|
||||
fs-constants@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||
|
@ -6677,20 +6629,6 @@ gauge@^4.0.0, gauge@^4.0.3:
|
|||
strip-ansi "^6.0.1"
|
||||
wide-align "^1.1.5"
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
|
||||
dependencies:
|
||||
aproba "^1.0.3"
|
||||
console-control-strings "^1.0.0"
|
||||
has-unicode "^2.0.0"
|
||||
object-assign "^4.1.0"
|
||||
signal-exit "^3.0.0"
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gaze@^1.1.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
|
||||
|
@ -6840,11 +6778,6 @@ gitconfiglocal@^1.0.0:
|
|||
dependencies:
|
||||
ini "^1.3.2"
|
||||
|
||||
github-from-package@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
|
||||
integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
|
||||
|
||||
gitignore-to-glob@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz#59f32ab3d9b66ce50299c3ed24cb0ef42a094ceb"
|
||||
|
@ -7277,7 +7210,7 @@ has-tostringtag@^1.0.0:
|
|||
dependencies:
|
||||
has-symbols "^1.0.2"
|
||||
|
||||
has-unicode@^2.0.0, has-unicode@^2.0.1:
|
||||
has-unicode@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
|
||||
|
@ -7638,14 +7571,6 @@ interpret@~1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
|
||||
integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=
|
||||
|
||||
into-stream@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702"
|
||||
integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==
|
||||
dependencies:
|
||||
from2 "^2.3.0"
|
||||
p-is-promise "^3.0.0"
|
||||
|
||||
ip@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
|
||||
|
@ -7712,7 +7637,7 @@ is-ci@^3.0.0:
|
|||
dependencies:
|
||||
ci-info "^3.2.0"
|
||||
|
||||
is-core-module@2.9.0, is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1:
|
||||
is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
|
||||
integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
|
||||
|
@ -7729,18 +7654,6 @@ is-extglob@^2.1.1:
|
|||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
|
||||
|
||||
is-fullwidth-code-point@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
|
||||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
is-fullwidth-code-point@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
|
||||
|
||||
is-fullwidth-code-point@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
|
@ -9238,11 +9151,6 @@ mimic-response@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
|
||||
|
||||
mimic-response@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
|
||||
integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
|
||||
|
||||
mimic-response@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
||||
|
@ -9389,11 +9297,6 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2:
|
|||
minipass "^3.0.0"
|
||||
yallist "^4.0.0"
|
||||
|
||||
mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
|
||||
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
|
||||
|
||||
mkdirp-infer-owner@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316"
|
||||
|
@ -9456,14 +9359,6 @@ multimatch@^5.0.0:
|
|||
arrify "^2.0.1"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
multistream@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8"
|
||||
integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
readable-stream "^3.6.0"
|
||||
|
||||
mute-stream@0.0.8, mute-stream@~0.0.4:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
|
@ -9483,11 +9378,6 @@ nanoid@^3.3.4:
|
|||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
|
||||
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||
|
||||
napi-build-utils@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
|
||||
integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
|
||||
|
||||
natural-compare@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
|
@ -9537,19 +9427,12 @@ no-case@^3.0.4:
|
|||
lower-case "^2.0.2"
|
||||
tslib "^2.0.3"
|
||||
|
||||
node-abi@^2.21.0:
|
||||
version "2.30.1"
|
||||
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf"
|
||||
integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==
|
||||
dependencies:
|
||||
semver "^5.4.1"
|
||||
|
||||
node-addon-api@^1.6.3:
|
||||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
|
||||
integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
|
||||
|
||||
node-fetch@^2.6.1, node-fetch@^2.6.6:
|
||||
node-fetch@^2.6.1:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
|
@ -9790,16 +9673,6 @@ npmlog@6.0.1:
|
|||
gauge "^4.0.0"
|
||||
set-blocking "^2.0.0"
|
||||
|
||||
npmlog@^4.0.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
gauge "~2.7.3"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
npmlog@^6.0.0, npmlog@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
|
||||
|
@ -9817,11 +9690,6 @@ nth-check@>=2.0.1, nth-check@~1.0.1:
|
|||
dependencies:
|
||||
boolbase "^1.0.0"
|
||||
|
||||
number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
|
||||
|
||||
nwsapi@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
|
||||
|
@ -10018,11 +9886,6 @@ p-finally@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
|
||||
|
||||
p-is-promise@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971"
|
||||
integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==
|
||||
|
||||
p-limit@^1.1.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
|
||||
|
@ -10454,40 +10317,6 @@ pkg-dir@^4.2.0:
|
|||
dependencies:
|
||||
find-up "^4.0.0"
|
||||
|
||||
pkg-fetch@3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-3.4.1.tgz#be68bb9f7fdb0f6ed995abc518ab2e35aa64d2fd"
|
||||
integrity sha512-fS4cdayCa1r4jHkOKGPJKnS9PEs6OWZst+s+m0+CmhmPZObMnxoRnf9T9yUWl+lzM2b5aJF7cnQIySCT7Hq8Dg==
|
||||
dependencies:
|
||||
chalk "^4.1.2"
|
||||
fs-extra "^9.1.0"
|
||||
https-proxy-agent "^5.0.0"
|
||||
node-fetch "^2.6.6"
|
||||
progress "^2.0.3"
|
||||
semver "^7.3.5"
|
||||
tar-fs "^2.1.1"
|
||||
yargs "^16.2.0"
|
||||
|
||||
pkg@^5.7.0:
|
||||
version "5.7.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg/-/pkg-5.7.0.tgz#6422df05e8aa147764be6ef912921d0fa719ea95"
|
||||
integrity sha512-PTiAjNq/CGAtK5qUBR6pjheqnipTFjeecgSgIKEcAOJA4GpmZeOZC8pMOoT0rfes5vHsmcFo7wbSRTAmXQurrg==
|
||||
dependencies:
|
||||
"@babel/parser" "7.17.10"
|
||||
"@babel/types" "7.17.10"
|
||||
chalk "^4.1.2"
|
||||
escodegen "^2.0.0"
|
||||
fs-extra "^9.1.0"
|
||||
globby "^11.1.0"
|
||||
into-stream "^6.0.0"
|
||||
is-core-module "2.9.0"
|
||||
minimist "^1.2.6"
|
||||
multistream "^4.1.0"
|
||||
pkg-fetch "3.4.1"
|
||||
prebuild-install "6.1.4"
|
||||
resolve "^1.22.0"
|
||||
stream-meter "^1.0.4"
|
||||
|
||||
playwright-core@1.23.2:
|
||||
version "1.23.2"
|
||||
resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.23.2.tgz#ddc15b3251e42ee0eed82a96ece3f7b2641d75a4"
|
||||
|
@ -10661,25 +10490,6 @@ postinstall-build@^5.0.1:
|
|||
resolved "https://registry.yarnpkg.com/postinstall-build/-/postinstall-build-5.0.3.tgz#238692f712a481d8f5bc8960e94786036241efc7"
|
||||
integrity sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==
|
||||
|
||||
prebuild-install@6.1.4:
|
||||
version "6.1.4"
|
||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f"
|
||||
integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==
|
||||
dependencies:
|
||||
detect-libc "^1.0.3"
|
||||
expand-template "^2.0.3"
|
||||
github-from-package "0.0.0"
|
||||
minimist "^1.2.3"
|
||||
mkdirp-classic "^0.5.3"
|
||||
napi-build-utils "^1.0.1"
|
||||
node-abi "^2.21.0"
|
||||
npmlog "^4.0.1"
|
||||
pump "^3.0.0"
|
||||
rc "^1.2.7"
|
||||
simple-get "^3.0.3"
|
||||
tar-fs "^2.0.0"
|
||||
tunnel-agent "^0.6.0"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
|
@ -10940,7 +10750,7 @@ raw-loader@~0.5.1:
|
|||
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
|
||||
integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
|
||||
|
||||
rc@^1.2.7, rc@^1.2.8:
|
||||
rc@^1.2.8:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
|
||||
|
@ -11165,7 +10975,7 @@ readable-stream@^1.0.31:
|
|||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@~2.3.6:
|
||||
readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@~2.3.6:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
|
@ -11467,7 +11277,7 @@ safari-14-idb-fix@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440"
|
||||
integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==
|
||||
|
||||
safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
|
||||
safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
@ -11665,7 +11475,7 @@ serve-static@1.15.0, serve-static@^1.15.0:
|
|||
parseurl "~1.3.3"
|
||||
send "0.18.0"
|
||||
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
set-blocking@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||
|
@ -11720,7 +11530,7 @@ side-channel@^1.0.4:
|
|||
get-intrinsic "^1.0.2"
|
||||
object-inspect "^1.9.0"
|
||||
|
||||
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
|
||||
signal-exit@^3.0.2, signal-exit@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
||||
|
@ -11730,20 +11540,6 @@ signal-exit@^3.0.7:
|
|||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
|
||||
simple-concat@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
|
||||
integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
|
||||
|
||||
simple-get@^3.0.3:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55"
|
||||
integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==
|
||||
dependencies:
|
||||
decompress-response "^4.2.0"
|
||||
once "^1.3.1"
|
||||
simple-concat "^1.0.0"
|
||||
|
||||
simple-git@^3.10.0:
|
||||
version "3.10.0"
|
||||
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.10.0.tgz#f20031dd121d3c49e215ef0186a102bece3f89b2"
|
||||
|
@ -12004,13 +11800,6 @@ stream-events@^1.0.5:
|
|||
dependencies:
|
||||
stubs "^3.0.0"
|
||||
|
||||
stream-meter@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/stream-meter/-/stream-meter-1.0.4.tgz#52af95aa5ea760a2491716704dbff90f73afdd1d"
|
||||
integrity sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=
|
||||
dependencies:
|
||||
readable-stream "^2.1.4"
|
||||
|
||||
stream-shift@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
|
||||
|
@ -12034,23 +11823,6 @@ string-template@~0.2.1:
|
|||
resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
|
||||
integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=
|
||||
|
||||
string-width@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
|
||||
dependencies:
|
||||
code-point-at "^1.0.0"
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
|
@ -12145,20 +11917,13 @@ string_decoder@~1.1.1:
|
|||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
strip-ansi@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
|
@ -12406,37 +12171,6 @@ tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
|
|||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
||||
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
||||
|
||||
tar-fs@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5"
|
||||
integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==
|
||||
dependencies:
|
||||
chownr "^1.1.1"
|
||||
mkdirp-classic "^0.5.2"
|
||||
pump "^3.0.0"
|
||||
tar-stream "^2.0.0"
|
||||
|
||||
tar-fs@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
|
||||
integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
|
||||
dependencies:
|
||||
chownr "^1.1.1"
|
||||
mkdirp-classic "^0.5.2"
|
||||
pump "^3.0.0"
|
||||
tar-stream "^2.1.4"
|
||||
|
||||
tar-stream@^2.0.0, tar-stream@^2.1.4:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa"
|
||||
integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==
|
||||
dependencies:
|
||||
bl "^4.0.3"
|
||||
end-of-stream "^1.4.1"
|
||||
fs-constants "^1.0.0"
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^3.1.1"
|
||||
|
||||
tar-stream@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
|
||||
|
@ -12734,13 +12468,6 @@ tsutils@^3.21.0:
|
|||
dependencies:
|
||||
tslib "^1.8.1"
|
||||
|
||||
tunnel-agent@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
||||
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
tunnel@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
|
||||
|
@ -13340,13 +13067,6 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
|||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
|
||||
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
|
||||
wide-align@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
|
|
Загрузка…
Ссылка в новой задаче