Open Source the first set of MediaPipe Tasks tests for Web
PiperOrigin-RevId: 493673279
This commit is contained in:
parent
3c0ddf16b4
commit
2811e0c5c8
|
@ -228,6 +228,8 @@ def mediapipe_ts_library(
|
|||
srcs = srcs,
|
||||
visibility = visibility,
|
||||
deps = deps + [
|
||||
"@npm//@types/jasmine",
|
||||
"@npm//@types/node",
|
||||
"@npm//@types/offscreencanvas",
|
||||
"@npm//@types/google-protobuf",
|
||||
],
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# This package contains options shared by all MediaPipe Tasks for Web.
|
||||
|
||||
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
|
||||
load("//mediapipe/framework/port:build_config.bzl", "mediapipe_ts_library")
|
||||
|
||||
package(default_visibility = ["//mediapipe/tasks:internal"])
|
||||
|
@ -13,6 +14,22 @@ mediapipe_ts_library(
|
|||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "classifier_options_test_lib",
|
||||
testonly = True,
|
||||
srcs = ["classifier_options.test.ts"],
|
||||
deps = [
|
||||
":classifier_options",
|
||||
"//mediapipe/tasks/cc/components/processors/proto:classifier_options_jspb_proto",
|
||||
"//mediapipe/tasks/web/core:classifier_options",
|
||||
],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "classifier_options_test",
|
||||
deps = [":classifier_options_test_lib"],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "classifier_result",
|
||||
srcs = ["classifier_result.ts"],
|
||||
|
@ -22,6 +39,22 @@ mediapipe_ts_library(
|
|||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "classifier_result_test_lib",
|
||||
testonly = True,
|
||||
srcs = ["classifier_result.test.ts"],
|
||||
deps = [
|
||||
":classifier_result",
|
||||
"//mediapipe/framework/formats:classification_jspb_proto",
|
||||
"//mediapipe/tasks/cc/components/containers/proto:classifications_jspb_proto",
|
||||
],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "classifier_result_test",
|
||||
deps = [":classifier_result_test_lib"],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "embedder_result",
|
||||
srcs = ["embedder_result.ts"],
|
||||
|
@ -31,6 +64,21 @@ mediapipe_ts_library(
|
|||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "embedder_result_test_lib",
|
||||
testonly = True,
|
||||
srcs = ["embedder_result.test.ts"],
|
||||
deps = [
|
||||
":embedder_result",
|
||||
"//mediapipe/tasks/cc/components/containers/proto:embeddings_jspb_proto",
|
||||
],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "embedder_result_test",
|
||||
deps = [":embedder_result_test_lib"],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "embedder_options",
|
||||
srcs = ["embedder_options.ts"],
|
||||
|
@ -40,6 +88,22 @@ mediapipe_ts_library(
|
|||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "embedder_options_test_lib",
|
||||
testonly = True,
|
||||
srcs = ["embedder_options.test.ts"],
|
||||
deps = [
|
||||
":embedder_options",
|
||||
"//mediapipe/tasks/cc/components/processors/proto:embedder_options_jspb_proto",
|
||||
"//mediapipe/tasks/web/core:embedder_options",
|
||||
],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "embedder_options_test",
|
||||
deps = [":embedder_options_test_lib"],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "base_options",
|
||||
srcs = [
|
||||
|
@ -53,3 +117,15 @@ mediapipe_ts_library(
|
|||
"//mediapipe/tasks/web/core",
|
||||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "base_options_test_lib",
|
||||
testonly = True,
|
||||
srcs = ["base_options.test.ts"],
|
||||
deps = [":base_options"],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "base_options_test",
|
||||
deps = [":base_options_test_lib"],
|
||||
)
|
||||
|
|
127
mediapipe/tasks/web/components/processors/base_options.test.ts
Normal file
127
mediapipe/tasks/web/components/processors/base_options.test.ts
Normal file
|
@ -0,0 +1,127 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import 'jasmine';
|
||||
|
||||
// Placeholder for internal dependency on encodeByteArray
|
||||
// Placeholder for internal dependency on trusted resource URL builder
|
||||
|
||||
import {convertBaseOptionsToProto} from './base_options';
|
||||
|
||||
describe('convertBaseOptionsToProto()', () => {
|
||||
const mockBytes = new Uint8Array([0, 1, 2, 3]);
|
||||
const mockBytesResult = {
|
||||
modelAsset: {
|
||||
fileContent: Buffer.from(mockBytes).toString('base64'),
|
||||
fileName: undefined,
|
||||
fileDescriptorMeta: undefined,
|
||||
filePointerMeta: undefined,
|
||||
},
|
||||
useStreamMode: false,
|
||||
acceleration: {
|
||||
xnnpack: undefined,
|
||||
gpu: undefined,
|
||||
tflite: {},
|
||||
},
|
||||
};
|
||||
|
||||
let fetchSpy: jasmine.Spy;
|
||||
|
||||
beforeEach(() => {
|
||||
fetchSpy = jasmine.createSpy().and.callFake(async url => {
|
||||
expect(url).toEqual('foo');
|
||||
return {
|
||||
arrayBuffer: () => mockBytes.buffer,
|
||||
} as unknown as Response;
|
||||
});
|
||||
global.fetch = fetchSpy;
|
||||
});
|
||||
|
||||
it('verifies that at least one model asset option is provided', async () => {
|
||||
await expectAsync(convertBaseOptionsToProto({}))
|
||||
.toBeRejectedWithError(
|
||||
/Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set/);
|
||||
});
|
||||
|
||||
it('verifies that no more than one model asset option is provided', async () => {
|
||||
await expectAsync(convertBaseOptionsToProto({
|
||||
modelAssetPath: `foo`,
|
||||
modelAssetBuffer: new Uint8Array([])
|
||||
}))
|
||||
.toBeRejectedWithError(
|
||||
/Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer/);
|
||||
});
|
||||
|
||||
it('downloads model', async () => {
|
||||
const baseOptionsProto = await convertBaseOptionsToProto({
|
||||
modelAssetPath: `foo`,
|
||||
});
|
||||
|
||||
expect(fetchSpy).toHaveBeenCalled();
|
||||
expect(baseOptionsProto.toObject()).toEqual(mockBytesResult);
|
||||
});
|
||||
|
||||
it('does not download model when bytes are provided', async () => {
|
||||
const baseOptionsProto = await convertBaseOptionsToProto({
|
||||
modelAssetBuffer: new Uint8Array(mockBytes),
|
||||
});
|
||||
|
||||
expect(fetchSpy).not.toHaveBeenCalled();
|
||||
expect(baseOptionsProto.toObject()).toEqual(mockBytesResult);
|
||||
});
|
||||
|
||||
it('can enable CPU delegate', async () => {
|
||||
const baseOptionsProto = await convertBaseOptionsToProto({
|
||||
modelAssetBuffer: new Uint8Array(mockBytes),
|
||||
delegate: 'cpu',
|
||||
});
|
||||
expect(baseOptionsProto.toObject()).toEqual(mockBytesResult);
|
||||
});
|
||||
|
||||
it('can enable GPU delegate', async () => {
|
||||
const baseOptionsProto = await convertBaseOptionsToProto({
|
||||
modelAssetBuffer: new Uint8Array(mockBytes),
|
||||
delegate: 'gpu',
|
||||
});
|
||||
expect(baseOptionsProto.toObject()).toEqual({
|
||||
...mockBytesResult,
|
||||
acceleration: {
|
||||
xnnpack: undefined,
|
||||
gpu: {
|
||||
useAdvancedGpuApi: false,
|
||||
api: 0,
|
||||
allowPrecisionLoss: true,
|
||||
cachedKernelPath: undefined,
|
||||
serializedModelDir: undefined,
|
||||
modelToken: undefined,
|
||||
usage: 2,
|
||||
},
|
||||
tflite: undefined,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('can reset delegate', async () => {
|
||||
let baseOptionsProto = await convertBaseOptionsToProto({
|
||||
modelAssetBuffer: new Uint8Array(mockBytes),
|
||||
delegate: 'gpu',
|
||||
});
|
||||
// Clear backend
|
||||
baseOptionsProto =
|
||||
await convertBaseOptionsToProto({delegate: undefined}, baseOptionsProto);
|
||||
expect(baseOptionsProto.toObject()).toEqual(mockBytesResult);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,114 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import 'jasmine';
|
||||
|
||||
import {ClassifierOptions as ClassifierOptionsProto} from '../../../../tasks/cc/components/processors/proto/classifier_options_pb';
|
||||
import {ClassifierOptions} from '../../../../tasks/web/core/classifier_options';
|
||||
|
||||
import {convertClassifierOptionsToProto} from './classifier_options';
|
||||
|
||||
interface TestCase {
|
||||
optionName: keyof ClassifierOptions;
|
||||
protoName: string;
|
||||
customValue: unknown;
|
||||
defaultValue: unknown;
|
||||
}
|
||||
|
||||
describe('convertClassifierOptionsToProto()', () => {
|
||||
function verifyOption(
|
||||
actualClassifierOptions: ClassifierOptionsProto,
|
||||
expectedClassifierOptions: Record<string, unknown> = {}): void {
|
||||
expect(actualClassifierOptions.toObject())
|
||||
.toEqual(jasmine.objectContaining(expectedClassifierOptions));
|
||||
}
|
||||
|
||||
const testCases: TestCase[] = [
|
||||
{
|
||||
optionName: 'maxResults',
|
||||
protoName: 'maxResults',
|
||||
customValue: 5,
|
||||
defaultValue: -1
|
||||
},
|
||||
{
|
||||
optionName: 'displayNamesLocale',
|
||||
protoName: 'displayNamesLocale',
|
||||
customValue: 'en',
|
||||
defaultValue: 'en'
|
||||
},
|
||||
{
|
||||
optionName: 'scoreThreshold',
|
||||
protoName: 'scoreThreshold',
|
||||
customValue: 0.1,
|
||||
defaultValue: undefined
|
||||
},
|
||||
{
|
||||
optionName: 'categoryAllowlist',
|
||||
protoName: 'categoryAllowlistList',
|
||||
customValue: ['foo'],
|
||||
defaultValue: []
|
||||
},
|
||||
{
|
||||
optionName: 'categoryDenylist',
|
||||
protoName: 'categoryDenylistList',
|
||||
customValue: ['bar'],
|
||||
defaultValue: []
|
||||
},
|
||||
];
|
||||
|
||||
for (const testCase of testCases) {
|
||||
it(`can set ${testCase.optionName}`, () => {
|
||||
const classifierOptionsProto = convertClassifierOptionsToProto(
|
||||
{[testCase.optionName]: testCase.customValue});
|
||||
verifyOption(
|
||||
classifierOptionsProto, {[testCase.protoName]: testCase.customValue});
|
||||
});
|
||||
|
||||
it(`can clear ${testCase.optionName}`, () => {
|
||||
let classifierOptionsProto = convertClassifierOptionsToProto(
|
||||
{[testCase.optionName]: testCase.customValue});
|
||||
verifyOption(
|
||||
classifierOptionsProto, {[testCase.protoName]: testCase.customValue});
|
||||
|
||||
classifierOptionsProto =
|
||||
convertClassifierOptionsToProto({[testCase.optionName]: undefined});
|
||||
verifyOption(
|
||||
classifierOptionsProto,
|
||||
{[testCase.protoName]: testCase.defaultValue});
|
||||
});
|
||||
}
|
||||
|
||||
it('overwrites options', () => {
|
||||
let classifierOptionsProto =
|
||||
convertClassifierOptionsToProto({maxResults: 1});
|
||||
verifyOption(classifierOptionsProto, {'maxResults': 1});
|
||||
|
||||
classifierOptionsProto = convertClassifierOptionsToProto(
|
||||
{maxResults: 2}, classifierOptionsProto);
|
||||
verifyOption(classifierOptionsProto, {'maxResults': 2});
|
||||
});
|
||||
|
||||
it('merges options', () => {
|
||||
let classifierOptionsProto =
|
||||
convertClassifierOptionsToProto({maxResults: 1});
|
||||
verifyOption(classifierOptionsProto, {'maxResults': 1});
|
||||
|
||||
classifierOptionsProto = convertClassifierOptionsToProto(
|
||||
{displayNamesLocale: 'en'}, classifierOptionsProto);
|
||||
verifyOption(
|
||||
classifierOptionsProto, {'maxResults': 1, 'displayNamesLocale': 'en'});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import 'jasmine';
|
||||
|
||||
import {Classification, ClassificationList} from '../../../../framework/formats/classification_pb';
|
||||
import {ClassificationResult, Classifications} from '../../../../tasks/cc/components/containers/proto/classifications_pb';
|
||||
|
||||
import {convertFromClassificationResultProto} from './classifier_result';
|
||||
|
||||
// The OSS JS API does not support the builder pattern.
|
||||
// tslint:disable:jspb-use-builder-pattern
|
||||
|
||||
describe('convertFromClassificationResultProto()', () => {
|
||||
it('transforms custom values', () => {
|
||||
const classificationResult = new ClassificationResult();
|
||||
classificationResult.setTimestampMs(1);
|
||||
const classifcations = new Classifications();
|
||||
classifcations.setHeadIndex(1);
|
||||
classifcations.setHeadName('headName');
|
||||
const classificationList = new ClassificationList();
|
||||
const clasification = new Classification();
|
||||
clasification.setIndex(2);
|
||||
clasification.setScore(0.3);
|
||||
clasification.setDisplayName('displayName');
|
||||
clasification.setLabel('categoryName');
|
||||
classificationList.addClassification(clasification);
|
||||
classifcations.setClassificationList(classificationList);
|
||||
classificationResult.addClassifications(classifcations);
|
||||
|
||||
const result = convertFromClassificationResultProto(classificationResult);
|
||||
|
||||
expect(result).toEqual({
|
||||
classifications: [{
|
||||
categories: [{
|
||||
index: 2,
|
||||
score: 0.3,
|
||||
displayName: 'displayName',
|
||||
categoryName: 'categoryName'
|
||||
}],
|
||||
headIndex: 1,
|
||||
headName: 'headName'
|
||||
}],
|
||||
timestampMs: 1
|
||||
});
|
||||
});
|
||||
|
||||
it('transforms default values', () => {
|
||||
const classificationResult = new ClassificationResult();
|
||||
const classifcations = new Classifications();
|
||||
const classificationList = new ClassificationList();
|
||||
const clasification = new Classification();
|
||||
classificationList.addClassification(clasification);
|
||||
classifcations.setClassificationList(classificationList);
|
||||
classificationResult.addClassifications(classifcations);
|
||||
|
||||
const result = convertFromClassificationResultProto(classificationResult);
|
||||
|
||||
expect(result).toEqual({
|
||||
classifications: [{
|
||||
categories: [{index: 0, score: 0, displayName: '', categoryName: ''}],
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
}],
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,93 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import 'jasmine';
|
||||
|
||||
import {EmbedderOptions as EmbedderOptionsProto} from '../../../../tasks/cc/components/processors/proto/embedder_options_pb';
|
||||
import {EmbedderOptions} from '../../../../tasks/web/core/embedder_options';
|
||||
|
||||
import {convertEmbedderOptionsToProto} from './embedder_options';
|
||||
|
||||
interface TestCase {
|
||||
optionName: keyof EmbedderOptions;
|
||||
protoName: string;
|
||||
customValue: unknown;
|
||||
defaultValue: unknown;
|
||||
}
|
||||
|
||||
describe('convertEmbedderOptionsToProto()', () => {
|
||||
function verifyOption(
|
||||
actualEmbedderOptions: EmbedderOptionsProto,
|
||||
expectedEmbedderOptions: Record<string, unknown> = {}): void {
|
||||
expect(actualEmbedderOptions.toObject())
|
||||
.toEqual(jasmine.objectContaining(expectedEmbedderOptions));
|
||||
}
|
||||
|
||||
const testCases: TestCase[] = [
|
||||
{
|
||||
optionName: 'l2Normalize',
|
||||
protoName: 'l2Normalize',
|
||||
customValue: true,
|
||||
defaultValue: undefined
|
||||
},
|
||||
{
|
||||
optionName: 'quantize',
|
||||
protoName: 'quantize',
|
||||
customValue: true,
|
||||
defaultValue: undefined
|
||||
},
|
||||
];
|
||||
|
||||
for (const testCase of testCases) {
|
||||
it(`can set ${testCase.optionName}`, () => {
|
||||
const embedderOptionsProto = convertEmbedderOptionsToProto(
|
||||
{[testCase.optionName]: testCase.customValue});
|
||||
verifyOption(
|
||||
embedderOptionsProto, {[testCase.protoName]: testCase.customValue});
|
||||
});
|
||||
|
||||
it(`can clear ${testCase.optionName}`, () => {
|
||||
let embedderOptionsProto = convertEmbedderOptionsToProto(
|
||||
{[testCase.optionName]: testCase.customValue});
|
||||
verifyOption(
|
||||
embedderOptionsProto, {[testCase.protoName]: testCase.customValue});
|
||||
|
||||
embedderOptionsProto =
|
||||
convertEmbedderOptionsToProto({[testCase.optionName]: undefined});
|
||||
verifyOption(
|
||||
embedderOptionsProto, {[testCase.protoName]: testCase.defaultValue});
|
||||
});
|
||||
}
|
||||
|
||||
it('overwrites options', () => {
|
||||
let embedderOptionsProto =
|
||||
convertEmbedderOptionsToProto({l2Normalize: true});
|
||||
verifyOption(embedderOptionsProto, {'l2Normalize': true});
|
||||
|
||||
embedderOptionsProto = convertEmbedderOptionsToProto(
|
||||
{l2Normalize: false}, embedderOptionsProto);
|
||||
verifyOption(embedderOptionsProto, {'l2Normalize': false});
|
||||
});
|
||||
|
||||
it('replaces options', () => {
|
||||
let embedderOptionsProto = convertEmbedderOptionsToProto({quantize: true});
|
||||
verifyOption(embedderOptionsProto, {'quantize': true});
|
||||
|
||||
embedderOptionsProto = convertEmbedderOptionsToProto(
|
||||
{l2Normalize: true}, embedderOptionsProto);
|
||||
verifyOption(embedderOptionsProto, {'l2Normalize': true, 'quantize': true});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import 'jasmine';
|
||||
|
||||
import {Embedding, EmbeddingResult, FloatEmbedding, QuantizedEmbedding} from '../../../../tasks/cc/components/containers/proto/embeddings_pb';
|
||||
|
||||
import {convertFromEmbeddingResultProto} from './embedder_result';
|
||||
|
||||
// The OSS JS API does not support the builder pattern.
|
||||
// tslint:disable:jspb-use-builder-pattern
|
||||
|
||||
describe('convertFromEmbeddingResultProto()', () => {
|
||||
it('transforms custom values', () => {
|
||||
const embedding = new Embedding();
|
||||
embedding.setHeadIndex(1);
|
||||
embedding.setHeadName('headName');
|
||||
|
||||
const floatEmbedding = new FloatEmbedding();
|
||||
floatEmbedding.setValuesList([0.1, 0.9]);
|
||||
|
||||
embedding.setFloatEmbedding(floatEmbedding);
|
||||
const resultProto = new EmbeddingResult();
|
||||
resultProto.addEmbeddings(embedding);
|
||||
resultProto.setTimestampMs(1);
|
||||
|
||||
const embedderResult = convertFromEmbeddingResultProto(resultProto);
|
||||
const embeddings = embedderResult.embeddings;
|
||||
const timestampMs = embedderResult.timestampMs;
|
||||
expect(embeddings.length).toEqual(1);
|
||||
expect(embeddings[0])
|
||||
.toEqual(
|
||||
{floatEmbedding: [0.1, 0.9], headIndex: 1, headName: 'headName'});
|
||||
expect(timestampMs).toEqual(1);
|
||||
});
|
||||
|
||||
it('transforms custom quantized values', () => {
|
||||
const embedding = new Embedding();
|
||||
embedding.setHeadIndex(1);
|
||||
embedding.setHeadName('headName');
|
||||
|
||||
const quantizedEmbedding = new QuantizedEmbedding();
|
||||
const quantizedValues = new Uint8Array([1, 2, 3]);
|
||||
quantizedEmbedding.setValues(quantizedValues);
|
||||
|
||||
embedding.setQuantizedEmbedding(quantizedEmbedding);
|
||||
const resultProto = new EmbeddingResult();
|
||||
resultProto.addEmbeddings(embedding);
|
||||
resultProto.setTimestampMs(1);
|
||||
|
||||
const embedderResult = convertFromEmbeddingResultProto(resultProto);
|
||||
const embeddings = embedderResult.embeddings;
|
||||
const timestampMs = embedderResult.timestampMs;
|
||||
expect(embeddings.length).toEqual(1);
|
||||
expect(embeddings[0]).toEqual({
|
||||
quantizedEmbedding: new Uint8Array([1, 2, 3]),
|
||||
headIndex: 1,
|
||||
headName: 'headName'
|
||||
});
|
||||
expect(timestampMs).toEqual(1);
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
load("//mediapipe/framework/port:build_config.bzl", "mediapipe_ts_library")
|
||||
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
|
||||
|
||||
package(default_visibility = ["//mediapipe/tasks:internal"])
|
||||
|
||||
|
@ -9,3 +10,18 @@ mediapipe_ts_library(
|
|||
"//mediapipe/tasks/web/components/containers:embedding_result",
|
||||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "cosine_similarity_test_lib",
|
||||
testonly = True,
|
||||
srcs = ["cosine_similarity.test.ts"],
|
||||
deps = [
|
||||
":cosine_similarity",
|
||||
"//mediapipe/tasks/web/components/containers:embedding_result",
|
||||
],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "cosine_similarity_test",
|
||||
deps = [":cosine_similarity_test_lib"],
|
||||
)
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* <p>Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License. You may obtain a
|
||||
* copy of the License at
|
||||
*
|
||||
* <p>http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* <p>Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
import {Embedding} from '../../../../tasks/web/components/containers/embedding_result';
|
||||
|
||||
import {computeCosineSimilarity} from './cosine_similarity';
|
||||
|
||||
describe('computeCosineSimilarity', () => {
|
||||
it('fails with quantized and float embeddings', () => {
|
||||
const u: Embedding = {floatEmbedding: [1.0], headIndex: 0, headName: ''};
|
||||
const v: Embedding = {
|
||||
quantizedEmbedding: new Uint8Array([1.0]),
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
};
|
||||
|
||||
expect(() => computeCosineSimilarity(u, v))
|
||||
.toThrowError(
|
||||
/Cannot compute cosine similarity between quantized and float embeddings/);
|
||||
});
|
||||
|
||||
it('fails with zero norm', () => {
|
||||
const u = {floatEmbedding: [0.0], headIndex: 0, headName: ''};
|
||||
expect(() => computeCosineSimilarity(u, u))
|
||||
.toThrowError(
|
||||
/Cannot compute cosine similarity on embedding with 0 norm/);
|
||||
});
|
||||
|
||||
it('fails with different sizes', () => {
|
||||
const u:
|
||||
Embedding = {floatEmbedding: [1.0, 2.0], headIndex: 0, headName: ''};
|
||||
const v: Embedding = {
|
||||
floatEmbedding: [1.0, 2.0, 3.0],
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
};
|
||||
|
||||
expect(() => computeCosineSimilarity(u, v))
|
||||
.toThrowError(
|
||||
/Cannot compute cosine similarity between embeddings of different sizes/);
|
||||
});
|
||||
|
||||
it('succeeds with float embeddings', () => {
|
||||
const u: Embedding = {
|
||||
floatEmbedding: [1.0, 0.0, 0.0, 0.0],
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
};
|
||||
const v: Embedding = {
|
||||
floatEmbedding: [0.5, 0.5, 0.5, 0.5],
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
};
|
||||
|
||||
expect(computeCosineSimilarity(u, v)).toEqual(0.5);
|
||||
});
|
||||
|
||||
it('succeeds with quantized embeddings', () => {
|
||||
const u: Embedding = {
|
||||
quantizedEmbedding: new Uint8Array([255, 128, 128, 128]),
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
};
|
||||
const v: Embedding = {
|
||||
quantizedEmbedding: new Uint8Array([0, 128, 128, 128]),
|
||||
headIndex: 0,
|
||||
headName: ''
|
||||
};
|
||||
|
||||
expect(computeCosineSimilarity(u, v)).toEqual(-1.0);
|
||||
});
|
||||
});
|
|
@ -1,6 +1,7 @@
|
|||
# This package contains options shared by all MediaPipe Tasks for Web.
|
||||
|
||||
load("//mediapipe/framework/port:build_config.bzl", "mediapipe_ts_declaration", "mediapipe_ts_library")
|
||||
load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test")
|
||||
|
||||
package(default_visibility = ["//mediapipe/tasks:internal"])
|
||||
|
||||
|
@ -32,6 +33,38 @@ mediapipe_ts_library(
|
|||
deps = [":core"],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "task_runner_test_utils",
|
||||
testonly = True,
|
||||
srcs = [
|
||||
"task_runner_test_utils.ts",
|
||||
],
|
||||
deps = [
|
||||
"//mediapipe/framework:calculator_jspb_proto",
|
||||
"//mediapipe/web/graph_runner:graph_runner_ts",
|
||||
"//mediapipe/web/graph_runner:register_model_resources_graph_service_ts",
|
||||
],
|
||||
)
|
||||
|
||||
mediapipe_ts_library(
|
||||
name = "task_runner_test_lib",
|
||||
testonly = True,
|
||||
srcs = [
|
||||
"task_runner_test.ts",
|
||||
],
|
||||
deps = [
|
||||
":task_runner",
|
||||
":task_runner_test_utils",
|
||||
"//mediapipe/tasks/cc/core/proto:base_options_jspb_proto",
|
||||
"//mediapipe/web/graph_runner:graph_runner_ts",
|
||||
],
|
||||
)
|
||||
|
||||
jasmine_node_test(
|
||||
name = "task_runner_test",
|
||||
deps = [":task_runner_test_lib"],
|
||||
)
|
||||
|
||||
mediapipe_ts_declaration(
|
||||
name = "classifier_options",
|
||||
srcs = ["classifier_options.d.ts"],
|
||||
|
|
|
@ -77,9 +77,10 @@ export abstract class TaskRunner {
|
|||
}
|
||||
|
||||
constructor(
|
||||
wasmModule: WasmModule,
|
||||
glCanvas?: HTMLCanvasElement|OffscreenCanvas|null) {
|
||||
this.graphRunner = new GraphRunnerImageLib(wasmModule, glCanvas);
|
||||
wasmModule: WasmModule, glCanvas?: HTMLCanvasElement|OffscreenCanvas|null,
|
||||
graphRunner?: GraphRunnerImageLib) {
|
||||
this.graphRunner =
|
||||
graphRunner ?? new GraphRunnerImageLib(wasmModule, glCanvas);
|
||||
|
||||
// Disables the automatic render-to-screen code, which allows for pure
|
||||
// CPU processing.
|
||||
|
|
107
mediapipe/tasks/web/core/task_runner_test.ts
Normal file
107
mediapipe/tasks/web/core/task_runner_test.ts
Normal file
|
@ -0,0 +1,107 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import 'jasmine';
|
||||
|
||||
import {BaseOptions as BaseOptionsProto} from '../../../tasks/cc/core/proto/base_options_pb';
|
||||
import {TaskRunner} from '../../../tasks/web/core/task_runner';
|
||||
import {createSpyWasmModule, SpyWasmModule} from '../../../tasks/web/core/task_runner_test_utils';
|
||||
import {ErrorListener} from '../../../web/graph_runner/graph_runner';
|
||||
|
||||
import {GraphRunnerImageLib} from './task_runner';
|
||||
|
||||
class TaskRunnerFake extends TaskRunner {
|
||||
protected baseOptions = new BaseOptionsProto();
|
||||
private errorListener: ErrorListener|undefined;
|
||||
private errors: string[] = [];
|
||||
|
||||
static createFake(): TaskRunnerFake {
|
||||
const wasmModule = createSpyWasmModule();
|
||||
return new TaskRunnerFake(wasmModule);
|
||||
}
|
||||
|
||||
constructor(wasmModuleFake: SpyWasmModule) {
|
||||
super(
|
||||
wasmModuleFake, /* glCanvas= */ null,
|
||||
jasmine.createSpyObj<GraphRunnerImageLib>([
|
||||
'setAutoRenderToScreen', 'setGraph', 'finishProcessing',
|
||||
'registerModelResourcesGraphService', 'attachErrorListener'
|
||||
]));
|
||||
const graphRunner = this.graphRunner as jasmine.SpyObj<GraphRunnerImageLib>;
|
||||
expect(graphRunner.registerModelResourcesGraphService).toHaveBeenCalled();
|
||||
expect(graphRunner.setAutoRenderToScreen).toHaveBeenCalled();
|
||||
graphRunner.attachErrorListener.and.callFake(listener => {
|
||||
this.errorListener = listener;
|
||||
});
|
||||
graphRunner.setGraph.and.callFake(() => {
|
||||
this.throwErrors();
|
||||
});
|
||||
graphRunner.finishProcessing.and.callFake(() => {
|
||||
this.throwErrors();
|
||||
});
|
||||
}
|
||||
|
||||
enqueueError(message: string): void {
|
||||
this.errors.push(message);
|
||||
}
|
||||
|
||||
override finishProcessing(): void {
|
||||
super.finishProcessing();
|
||||
}
|
||||
|
||||
override setGraph(graphData: Uint8Array, isBinary: boolean): void {
|
||||
super.setGraph(graphData, isBinary);
|
||||
}
|
||||
|
||||
private throwErrors(): void {
|
||||
expect(this.errorListener).toBeDefined();
|
||||
for (const error of this.errors) {
|
||||
this.errorListener!(/* errorCode= */ -1, error);
|
||||
}
|
||||
this.errors = [];
|
||||
}
|
||||
}
|
||||
|
||||
describe('TaskRunner', () => {
|
||||
it('handles errors during graph update', () => {
|
||||
const taskRunner = TaskRunnerFake.createFake();
|
||||
taskRunner.enqueueError('Test error');
|
||||
|
||||
expect(() => {
|
||||
taskRunner.setGraph(new Uint8Array(0), /* isBinary= */ true);
|
||||
}).toThrowError('Test error');
|
||||
});
|
||||
|
||||
it('handles errors during graph execution', () => {
|
||||
const taskRunner = TaskRunnerFake.createFake();
|
||||
taskRunner.setGraph(new Uint8Array(0), /* isBinary= */ true);
|
||||
|
||||
taskRunner.enqueueError('Test error');
|
||||
|
||||
expect(() => {
|
||||
taskRunner.finishProcessing();
|
||||
}).toThrowError('Test error');
|
||||
});
|
||||
|
||||
it('can handle multiple errors', () => {
|
||||
const taskRunner = TaskRunnerFake.createFake();
|
||||
taskRunner.enqueueError('Test error 1');
|
||||
taskRunner.enqueueError('Test error 2');
|
||||
|
||||
expect(() => {
|
||||
taskRunner.setGraph(new Uint8Array(0), /* isBinary= */ true);
|
||||
}).toThrowError(/Test error 1, Test error 2/);
|
||||
});
|
||||
});
|
113
mediapipe/tasks/web/core/task_runner_test_utils.ts
Normal file
113
mediapipe/tasks/web/core/task_runner_test_utils.ts
Normal file
|
@ -0,0 +1,113 @@
|
|||
/**
|
||||
* Copyright 2022 The MediaPipe Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import 'jasmine';
|
||||
|
||||
import {CalculatorGraphConfig} from '../../../framework/calculator_pb';
|
||||
import {WasmModule} from '../../../web/graph_runner/graph_runner';
|
||||
import {WasmModuleRegisterModelResources} from '../../../web/graph_runner/register_model_resources_graph_service';
|
||||
|
||||
type SpyWasmModuleInternal = WasmModule&WasmModuleRegisterModelResources;
|
||||
|
||||
/**
|
||||
* Convenience type for our fake WasmModule for Jasmine testing.
|
||||
*/
|
||||
export declare type SpyWasmModule = jasmine.SpyObj<SpyWasmModuleInternal>;
|
||||
|
||||
/**
|
||||
* Factory function for creating a fake WasmModule for our Jasmine tests,
|
||||
* allowing our APIs to no longer rely on the Wasm layer so they can run tests
|
||||
* in pure JS/TS (and optionally spy on the calls).
|
||||
*/
|
||||
export function createSpyWasmModule(): SpyWasmModule {
|
||||
return jasmine.createSpyObj<SpyWasmModuleInternal>([
|
||||
'_setAutoRenderToScreen', 'stringToNewUTF8', '_attachProtoListener',
|
||||
'_attachProtoVectorListener', '_free', '_waitUntilIdle',
|
||||
'_addStringToInputStream', '_registerModelResourcesGraphService',
|
||||
'_configureAudio'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up our equality testing to use a custom float equality checking function
|
||||
* to avoid incorrect test results due to minor floating point inaccuracies.
|
||||
*/
|
||||
export function addJasmineCustomFloatEqualityTester() {
|
||||
jasmine.addCustomEqualityTester((a, b) => { // Custom float equality
|
||||
if (a === +a && b === +b && (a !== (a | 0) || b !== (b | 0))) {
|
||||
return Math.abs(a - b) < 5e-8;
|
||||
}
|
||||
return;
|
||||
});
|
||||
}
|
||||
|
||||
/** The minimum interface provided by a test fake. */
|
||||
export interface MediapipeTasksFake {
|
||||
graph: CalculatorGraphConfig|undefined;
|
||||
calculatorName: string;
|
||||
attachListenerSpies: jasmine.Spy[];
|
||||
}
|
||||
|
||||
/** An map of field paths to values */
|
||||
export type FieldPathToValue = [string[] | string, unknown];
|
||||
|
||||
/**
|
||||
* Verifies that the graph has been initialized and that it contains the
|
||||
* provided options.
|
||||
*/
|
||||
export function verifyGraph(
|
||||
tasksFake: MediapipeTasksFake,
|
||||
expectedCalculatorOptions?: FieldPathToValue,
|
||||
expectedBaseOptions?: FieldPathToValue,
|
||||
): void {
|
||||
expect(tasksFake.graph).toBeDefined();
|
||||
expect(tasksFake.graph!.getNodeList().length).toBe(1);
|
||||
const node = tasksFake.graph!.getNodeList()[0].toObject();
|
||||
expect(node).toEqual(
|
||||
jasmine.objectContaining({calculator: tasksFake.calculatorName}));
|
||||
|
||||
if (expectedBaseOptions) {
|
||||
const [fieldPath, value] = expectedBaseOptions;
|
||||
let proto = (node.options as {ext: {baseOptions: unknown}}).ext.baseOptions;
|
||||
for (const fieldName of (
|
||||
Array.isArray(fieldPath) ? fieldPath : [fieldPath])) {
|
||||
proto = ((proto ?? {}) as Record<string, unknown>)[fieldName];
|
||||
}
|
||||
expect(proto).toEqual(value);
|
||||
}
|
||||
|
||||
if (expectedCalculatorOptions) {
|
||||
const [fieldPath, value] = expectedCalculatorOptions;
|
||||
let proto = (node.options as {ext: unknown}).ext;
|
||||
for (const fieldName of (
|
||||
Array.isArray(fieldPath) ? fieldPath : [fieldPath])) {
|
||||
proto = ((proto ?? {}) as Record<string, unknown>)[fieldName];
|
||||
}
|
||||
expect(proto).toEqual(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies all listeners (as exposed by `.attachListenerSpies`) have been
|
||||
* attached at least once since the last call to `verifyListenersRegistered()`.
|
||||
* This helps us to ensure that listeners are re-registered with every graph
|
||||
* update.
|
||||
*/
|
||||
export function verifyListenersRegistered(tasksFake: MediapipeTasksFake): void {
|
||||
for (const spy of tasksFake.attachListenerSpies) {
|
||||
expect(spy.calls.count()).toBeGreaterThanOrEqual(1);
|
||||
spy.calls.reset();
|
||||
}
|
||||
}
|
|
@ -3,14 +3,19 @@
|
|||
"version": "0.0.0-alphga",
|
||||
"description": "MediaPipe GitHub repo",
|
||||
"devDependencies": {
|
||||
"@bazel/jasmine": "^5.7.2",
|
||||
"@bazel/rollup": "^5.7.1",
|
||||
"@bazel/typescript": "^5.7.1",
|
||||
"@rollup/plugin-commonjs": "^23.0.2",
|
||||
"@rollup/plugin-node-resolve": "^15.0.1",
|
||||
"@rollup/plugin-terser": "^0.1.0",
|
||||
"@types/google-protobuf": "^3.15.6",
|
||||
"@types/jasmine": "^4.3.1",
|
||||
"@types/node": "^18.11.11",
|
||||
"@types/offscreencanvas": "^2019.7.0",
|
||||
"google-protobuf": "^3.21.2",
|
||||
"jasmine": "^4.5.0",
|
||||
"jasmine-core": "^4.5.0",
|
||||
"protobufjs": "^7.1.2",
|
||||
"protobufjs-cli": "^1.0.2",
|
||||
"rollup": "^2.3.0",
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
"inlineSourceMap": true,
|
||||
"inlineSources": true,
|
||||
"strict": true,
|
||||
"types": ["@types/offscreencanvas"],
|
||||
"types": ["@types/offscreencanvas", "@types/jasmine", "node"],
|
||||
"rootDirs": [
|
||||
".",
|
||||
"./bazel-out/host/bin",
|
||||
|
|
419
yarn.lock
419
yarn.lock
|
@ -3,34 +3,52 @@
|
|||
|
||||
|
||||
"@babel/parser@^7.9.4":
|
||||
version "7.20.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2"
|
||||
integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==
|
||||
version "7.20.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8"
|
||||
integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==
|
||||
|
||||
"@bazel/jasmine@^5.7.2":
|
||||
version "5.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/jasmine/-/jasmine-5.7.2.tgz#438f272e66e939106cbdd58db709cd6aa008131b"
|
||||
integrity sha512-RJruOB6S9e0efTNIE2JVdaslguUXh5KcmLUCq/xLCt0zENP44ssp9OooDIrZ8H+Sp4mLDNBX7CMMA9WTsbsxTQ==
|
||||
dependencies:
|
||||
c8 "~7.5.0"
|
||||
jasmine-reporters "~2.5.0"
|
||||
|
||||
"@bazel/rollup@^5.7.1":
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-5.7.1.tgz#6f644c2d493a5bd9cd3724a6f239e609585c6e37"
|
||||
integrity sha512-LLNogoK2Qx9GIJVywQ+V/czjud8236mnaRX//g7qbOyXoWZDQvAEgsxRHq+lS/XX9USbh+zJJlfb+Dfp/PXx4A==
|
||||
version "5.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-5.7.2.tgz#9953b06e3de52794791cee4f89540c263b035fcf"
|
||||
integrity sha512-yGWLheSKdMnJ/Y3/qg+zCDx/qkD04FBFp+BjRS8xP4yvlz9G4rW3zc45VzHHz3oOywgQaY1vhfKuZMCcjTGEyA==
|
||||
dependencies:
|
||||
"@bazel/worker" "5.7.1"
|
||||
"@bazel/worker" "5.7.2"
|
||||
|
||||
"@bazel/typescript@^5.7.1":
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.7.1.tgz#e585bcdc54a4ccb23d99c3e1206abf4853cf0682"
|
||||
integrity sha512-MAnAtFxA2znadm81+rbYXcyWX1DEF/urzZ1F4LBq+w27EQ4PGyqIqCM5om7JcoSZJwjjMoBJc3SflRsMrZZ6+g==
|
||||
version "5.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.7.2.tgz#a341215dc93ce28794e8430b311756816140bd78"
|
||||
integrity sha512-tarBJBEIirnq/YaeYu18vXcDxjzlq4xhCXvXUxA0lhHX5oArjEcAEn4tmO0jF+t/7cbkAdMT7daG6vIHSz0QAA==
|
||||
dependencies:
|
||||
"@bazel/worker" "5.7.1"
|
||||
"@bazel/worker" "5.7.2"
|
||||
semver "5.6.0"
|
||||
source-map-support "0.5.9"
|
||||
tsutils "3.21.0"
|
||||
|
||||
"@bazel/worker@5.7.1":
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/worker/-/worker-5.7.1.tgz#2c4a9bd0e0ef75e496aec9599ff64a87307e7dad"
|
||||
integrity sha512-UndmQVRqK0t0NMNl8I1P5XmxzdPvMA0X6jufszpfwy5gyzjOxeiOIzmC0ALCOx78CuJqOB/8WOI1pwTRmhd0tg==
|
||||
"@bazel/worker@5.7.2":
|
||||
version "5.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/worker/-/worker-5.7.2.tgz#43d800dc1b5a3707340a4eb0102da81c53fc6f63"
|
||||
integrity sha512-H+auDA0QKF4mtZxKkZ2OKJvD7hGXVsVKtvcf4lbb93ur0ldpb5k810PcDxngmIGBcIX5kmyxniNTIiGFNobWTg==
|
||||
dependencies:
|
||||
google-protobuf "^3.6.1"
|
||||
|
||||
"@bcoe/v8-coverage@^0.2.3":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||
|
||||
"@istanbuljs/schema@^0.1.2":
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
|
||||
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.0":
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
|
||||
|
@ -125,9 +143,9 @@
|
|||
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
|
||||
|
||||
"@rollup/plugin-commonjs@^23.0.2":
|
||||
version "23.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-23.0.2.tgz#3a3a5b7b1b1cb29037eb4992edcaae997d7ebd92"
|
||||
integrity sha512-e9ThuiRf93YlVxc4qNIurvv+Hp9dnD+4PjOqQs5vAYfcZ3+AXSrcdzXnVjWxcGQOa6KGJFcRZyUI3ktWLavFjg==
|
||||
version "23.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-23.0.3.tgz#442cd8ccca1b7563a503da86fc84a1a7112b54bb"
|
||||
integrity sha512-31HxrT5emGfTyIfAs1lDQHj6EfYxTXcwtX5pIIhq+B/xZBNIqQ179d/CkYxlpYmFCxT78AeU4M8aL8Iv/IBxFA==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.0.1"
|
||||
commondir "^1.0.1"
|
||||
|
@ -174,6 +192,21 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.6.tgz#674a69493ef2c849b95eafe69167ea59079eb504"
|
||||
integrity sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==
|
||||
|
||||
"@types/is-windows@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/is-windows/-/is-windows-1.0.0.tgz#1011fa129d87091e2f6faf9042d6704cdf2e7be0"
|
||||
integrity sha512-tJ1rq04tGKuIJoWIH0Gyuwv4RQ3+tIu7wQrC0MV47raQ44kIzXSSFKfrxFUOWVRvesoF7mrTqigXmqoZJsXwTg==
|
||||
|
||||
"@types/istanbul-lib-coverage@^2.0.1":
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
|
||||
integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
|
||||
|
||||
"@types/jasmine@^4.3.1":
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-4.3.1.tgz#2d8ab5601c2fe7d9673dcb157e03f128ab5c5fff"
|
||||
integrity sha512-Vu8l+UGcshYmV1VWwULgnV/2RDbBaO6i2Ptx7nd//oJPIZGhoI1YLST4VKagD2Pq/Bc2/7zvtvhM7F3p4SN7kQ==
|
||||
|
||||
"@types/linkify-it@*":
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9"
|
||||
|
@ -192,10 +225,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
|
||||
integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==
|
||||
|
||||
"@types/node@>=13.7.0":
|
||||
version "18.11.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4"
|
||||
integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==
|
||||
"@types/node@>=13.7.0", "@types/node@^18.11.11":
|
||||
version "18.11.11"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc"
|
||||
integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==
|
||||
|
||||
"@types/offscreencanvas@^2019.7.0":
|
||||
version "2019.7.0"
|
||||
|
@ -207,6 +240,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
|
||||
integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
|
||||
|
||||
"@xmldom/xmldom@^0.8.5":
|
||||
version "0.8.6"
|
||||
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440"
|
||||
integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==
|
||||
|
||||
acorn-jsx@^5.3.2:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
||||
|
@ -217,7 +255,12 @@ acorn@^8.5.0, acorn@^8.8.0:
|
|||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
|
||||
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
|
||||
|
||||
ansi-styles@^4.1.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==
|
||||
|
||||
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
||||
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||
|
@ -264,6 +307,25 @@ builtin-modules@^3.3.0:
|
|||
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
|
||||
integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
|
||||
|
||||
c8@~7.5.0:
|
||||
version "7.5.0"
|
||||
resolved "https://registry.yarnpkg.com/c8/-/c8-7.5.0.tgz#a69439ab82848f344a74bb25dc5dd4e867764481"
|
||||
integrity sha512-GSkLsbvDr+FIwjNSJ8OwzWAyuznEYGTAd1pzb/Kr0FMLuV4vqYJTyjboDTwmlUNAG6jAU3PFWzqIdKrOt1D8tw==
|
||||
dependencies:
|
||||
"@bcoe/v8-coverage" "^0.2.3"
|
||||
"@istanbuljs/schema" "^0.1.2"
|
||||
find-up "^5.0.0"
|
||||
foreground-child "^2.0.0"
|
||||
furi "^2.0.0"
|
||||
istanbul-lib-coverage "^3.0.0"
|
||||
istanbul-lib-report "^3.0.0"
|
||||
istanbul-reports "^3.0.2"
|
||||
rimraf "^3.0.0"
|
||||
test-exclude "^6.0.0"
|
||||
v8-to-istanbul "^7.1.0"
|
||||
yargs "^16.0.0"
|
||||
yargs-parser "^20.0.0"
|
||||
|
||||
catharsis@^0.9.0:
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121"
|
||||
|
@ -279,6 +341,15 @@ chalk@^4.0.0:
|
|||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
cliui@^7.0.2:
|
||||
version "7.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
|
||||
integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
|
||||
dependencies:
|
||||
string-width "^4.2.0"
|
||||
strip-ansi "^6.0.0"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
color-convert@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||
|
@ -306,6 +377,20 @@ concat-map@0.0.1:
|
|||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||
|
||||
convert-source-map@^1.6.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
|
||||
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
|
||||
|
||||
cross-spawn@^7.0.0:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
dependencies:
|
||||
path-key "^3.1.0"
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
deep-is@~0.1.3:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
||||
|
@ -316,11 +401,21 @@ deepmerge@^4.2.2:
|
|||
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
|
||||
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
entities@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
|
||||
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
|
||||
|
||||
escalade@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escape-string-regexp@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
|
||||
|
@ -382,6 +477,22 @@ fast-levenshtein@~2.0.6:
|
|||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
|
||||
|
||||
find-up@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
|
||||
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
|
||||
dependencies:
|
||||
locate-path "^6.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
foreground-child@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53"
|
||||
integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==
|
||||
dependencies:
|
||||
cross-spawn "^7.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
|
@ -397,7 +508,20 @@ function-bind@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
glob@^7.1.3:
|
||||
furi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/furi/-/furi-2.0.0.tgz#13d85826a1af21acc691da6254b3888fc39f0b4a"
|
||||
integrity sha512-uKuNsaU0WVaK/vmvj23wW1bicOFfyqSsAIH71bRZx8kA4Xj+YCHin7CJKJJjkIsmxYaPFLk9ljmjEyB7xF7WvQ==
|
||||
dependencies:
|
||||
"@types/is-windows" "^1.0.0"
|
||||
is-windows "^1.0.2"
|
||||
|
||||
get-caller-file@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||
|
||||
glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
|
||||
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
|
||||
|
@ -442,6 +566,11 @@ has@^1.0.3:
|
|||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
html-escaper@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
|
||||
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
|
||||
|
||||
inflight@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||
|
@ -469,6 +598,11 @@ is-core-module@^2.9.0:
|
|||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
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"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
is-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
|
||||
|
@ -481,6 +615,59 @@ is-reference@1.2.1:
|
|||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
is-windows@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
|
||||
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
istanbul-lib-coverage@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
|
||||
integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
|
||||
|
||||
istanbul-lib-report@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
|
||||
integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
|
||||
dependencies:
|
||||
istanbul-lib-coverage "^3.0.0"
|
||||
make-dir "^3.0.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
istanbul-reports@^3.0.2:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae"
|
||||
integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==
|
||||
dependencies:
|
||||
html-escaper "^2.0.0"
|
||||
istanbul-lib-report "^3.0.0"
|
||||
|
||||
jasmine-core@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.5.0.tgz#1a6bd0bde3f60996164311c88a0995d67ceda7c3"
|
||||
integrity sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==
|
||||
|
||||
jasmine-reporters@~2.5.0:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-reporters/-/jasmine-reporters-2.5.2.tgz#b5dfa1d9c40b8020c5225e0e1e2b9953d66a4d69"
|
||||
integrity sha512-qdewRUuFOSiWhiyWZX8Yx3YNQ9JG51ntBEO4ekLQRpktxFTwUHy24a86zD/Oi2BRTKksEdfWQZcQFqzjqIkPig==
|
||||
dependencies:
|
||||
"@xmldom/xmldom" "^0.8.5"
|
||||
mkdirp "^1.0.4"
|
||||
|
||||
jasmine@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-4.5.0.tgz#8d3c0d0a33a61e4d05c9f9747ee5dfaf6f7b5d3d"
|
||||
integrity sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==
|
||||
dependencies:
|
||||
glob "^7.1.6"
|
||||
jasmine-core "^4.5.0"
|
||||
|
||||
js2xmlparser@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a"
|
||||
|
@ -531,7 +718,14 @@ linkify-it@^3.0.1:
|
|||
dependencies:
|
||||
uc.micro "^1.0.1"
|
||||
|
||||
lodash@^4.17.14, lodash@^4.17.15:
|
||||
locate-path@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
|
||||
integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
|
||||
dependencies:
|
||||
p-locate "^5.0.0"
|
||||
|
||||
lodash@^4.17.15, lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
@ -555,6 +749,13 @@ magic-string@^0.26.4:
|
|||
dependencies:
|
||||
sourcemap-codec "^1.4.8"
|
||||
|
||||
make-dir@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
|
||||
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
|
||||
dependencies:
|
||||
semver "^6.0.0"
|
||||
|
||||
markdown-it-anchor@^8.4.1:
|
||||
version "8.6.5"
|
||||
resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz#30c4bc5bbff327f15ce3c429010ec7ba75e7b5f8"
|
||||
|
@ -572,16 +773,16 @@ markdown-it@^12.3.2:
|
|||
uc.micro "^1.0.5"
|
||||
|
||||
marked@^4.0.10:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.2.tgz#1d2075ad6cdfe42e651ac221c32d949a26c0672a"
|
||||
integrity sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.3.tgz#bd76a5eb510ff1d8421bc6c3b2f0b93488c15bea"
|
||||
integrity sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==
|
||||
|
||||
mdurl@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
|
||||
integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
|
||||
|
||||
minimatch@^3.1.1:
|
||||
minimatch@^3.0.4, minimatch@^3.1.1:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
|
@ -589,9 +790,9 @@ minimatch@^3.1.1:
|
|||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@^5.0.1:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7"
|
||||
integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022"
|
||||
integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==
|
||||
dependencies:
|
||||
brace-expansion "^2.0.1"
|
||||
|
||||
|
@ -624,11 +825,35 @@ optionator@^0.8.1:
|
|||
type-check "~0.3.2"
|
||||
word-wrap "~1.2.3"
|
||||
|
||||
p-limit@^3.0.2:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
|
||||
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
|
||||
dependencies:
|
||||
yocto-queue "^0.1.0"
|
||||
|
||||
p-locate@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
|
||||
integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
|
||||
dependencies:
|
||||
p-limit "^3.0.2"
|
||||
|
||||
path-exists@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||
|
||||
path-is-absolute@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
|
||||
|
||||
path-key@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
|
@ -678,12 +903,17 @@ protobufjs@^7.1.2:
|
|||
"@types/node" ">=13.7.0"
|
||||
long "^5.0.0"
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
|
||||
|
||||
requizzle@^0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.3.tgz#4675c90aacafb2c036bd39ba2daa4a1cb777fded"
|
||||
integrity sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==
|
||||
version "0.2.4"
|
||||
resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c"
|
||||
integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==
|
||||
dependencies:
|
||||
lodash "^4.17.14"
|
||||
lodash "^4.17.21"
|
||||
|
||||
resolve@^1.22.1:
|
||||
version "1.22.1"
|
||||
|
@ -713,6 +943,11 @@ semver@5.6.0:
|
|||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||
|
||||
semver@^6.0.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@^7.1.2:
|
||||
version "7.3.8"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
|
||||
|
@ -720,6 +955,23 @@ semver@^7.1.2:
|
|||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
shebang-command@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
|
||||
dependencies:
|
||||
shebang-regex "^3.0.0"
|
||||
|
||||
shebang-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
|
||||
|
||||
signal-exit@^3.0.2:
|
||||
version "3.0.7"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||
|
||||
source-map-support@0.5.9:
|
||||
version "0.5.9"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
|
||||
|
@ -741,11 +993,32 @@ source-map@^0.6.0, source-map@~0.6.1:
|
|||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
source-map@^0.7.3:
|
||||
version "0.7.4"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
|
||||
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
|
||||
|
||||
sourcemap-codec@^1.4.8:
|
||||
version "1.4.8"
|
||||
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
|
||||
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
|
||||
|
||||
string-width@^4.1.0, string-width@^4.2.0:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
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"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-json-comments@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
||||
|
@ -769,15 +1042,24 @@ taffydb@2.6.2:
|
|||
integrity sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==
|
||||
|
||||
terser@^5.15.1:
|
||||
version "5.15.1"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.1.tgz#8561af6e0fd6d839669c73b92bdd5777d870ed6c"
|
||||
integrity sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==
|
||||
version "5.16.1"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880"
|
||||
integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==
|
||||
dependencies:
|
||||
"@jridgewell/source-map" "^0.3.2"
|
||||
acorn "^8.5.0"
|
||||
commander "^2.20.0"
|
||||
source-map-support "~0.5.20"
|
||||
|
||||
test-exclude@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
|
||||
integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
|
||||
dependencies:
|
||||
"@istanbuljs/schema" "^0.1.2"
|
||||
glob "^7.1.4"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
tmp@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
|
||||
|
@ -812,9 +1094,9 @@ type-check@~0.3.2:
|
|||
prelude-ls "~1.1.2"
|
||||
|
||||
typescript@^4.8.4:
|
||||
version "4.8.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6"
|
||||
integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
|
||||
version "4.9.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db"
|
||||
integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==
|
||||
|
||||
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
||||
version "1.0.6"
|
||||
|
@ -831,11 +1113,36 @@ underscore@~1.13.2:
|
|||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
|
||||
integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
|
||||
|
||||
v8-to-istanbul@^7.1.0:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1"
|
||||
integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==
|
||||
dependencies:
|
||||
"@types/istanbul-lib-coverage" "^2.0.1"
|
||||
convert-source-map "^1.6.0"
|
||||
source-map "^0.7.3"
|
||||
|
||||
which@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
word-wrap@~1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
||||
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
|
@ -846,7 +1153,35 @@ xmlcreate@^2.0.4:
|
|||
resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be"
|
||||
integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==
|
||||
|
||||
y18n@^5.0.5:
|
||||
version "5.0.8"
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
|
||||
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
|
||||
|
||||
yallist@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
||||
yargs-parser@^20.0.0, yargs-parser@^20.2.2:
|
||||
version "20.2.9"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
|
||||
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
|
||||
|
||||
yargs@^16.0.0:
|
||||
version "16.2.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
|
||||
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
|
||||
dependencies:
|
||||
cliui "^7.0.2"
|
||||
escalade "^3.1.1"
|
||||
get-caller-file "^2.0.5"
|
||||
require-directory "^2.1.1"
|
||||
string-width "^4.2.0"
|
||||
y18n "^5.0.5"
|
||||
yargs-parser "^20.2.2"
|
||||
|
||||
yocto-queue@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||
|
|
Loading…
Reference in New Issue
Block a user