Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-03-15 03:10:33 +00:00
parent cd6194eb43
commit 0555b45841
27 changed files with 545 additions and 98 deletions

View File

@ -8,16 +8,18 @@ import {
SORT_OPTIONS,
isValidSortKey,
} from '~/admin/abuse_reports/constants';
import { buildFilteredSearchCategoryToken } from '~/admin/abuse_reports/utils';
export default {
name: 'AbuseReportsFilteredSearchBar',
components: { FilteredSearchBar },
tokens: FILTERED_SEARCH_TOKENS,
sortOptions: SORT_OPTIONS,
inject: ['categories'],
data() {
return {
initialFilterValue: [],
initialSortBy: DEFAULT_SORT,
tokens: [...FILTERED_SEARCH_TOKENS, buildFilteredSearchCategoryToken(this.categories)],
};
},
created() {
@ -36,7 +38,7 @@ export default {
this.initialSortBy = query.sort;
}
const tokens = this.$options.tokens
const tokens = this.tokens
.filter((token) => query[token.type])
.map((token) => ({
type: token.type,
@ -90,7 +92,7 @@ export default {
<template>
<filtered-search-bar
:namespace="$options.filteredSearchNamespace"
:tokens="$options.tokens"
:tokens="tokens"
:recent-searches-storage-key="$options.recentSearchesStorageKey"
:search-input-placeholder="__('Filter reports')"
:initial-filter-value="initialFilterValue"

View File

@ -59,4 +59,13 @@ export const isValidSortKey = (key) =>
(sort) => sort.sortDirection.ascending === key || sort.sortDirection.descending === key,
);
export const FILTERED_SEARCH_TOKEN_CATEGORY = {
type: 'category',
icon: 'label',
title: __('Category'),
token: BaseToken,
unique: true,
operators: OPERATORS_IS,
};
export const FILTERED_SEARCH_TOKENS = [FILTERED_SEARCH_TOKEN_USER, FILTERED_SEARCH_TOKEN_STATUS];

View File

@ -10,12 +10,16 @@ export const initAbuseReportsApp = () => {
}
const { abuseReportsData } = el.dataset;
const { reports, pagination } = convertObjectPropsToCamelCase(JSON.parse(abuseReportsData), {
deep: true,
});
const { categories, reports, pagination } = convertObjectPropsToCamelCase(
JSON.parse(abuseReportsData),
{
deep: true,
},
);
return new Vue({
el,
provide: { categories },
render: (createElement) =>
createElement(AbuseReportsApp, {
props: {

View File

@ -0,0 +1,6 @@
import { FILTERED_SEARCH_TOKEN_CATEGORY } from './constants';
export const buildFilteredSearchCategoryToken = (categories) => {
const options = categories.map((c) => ({ value: c, title: c }));
return { ...FILTERED_SEARCH_TOKEN_CATEGORY, options };
};

View File

@ -5,6 +5,7 @@ module Admin
def abuse_reports_list_data(reports)
{
abuse_reports_data: {
categories: AbuseReport.categories.keys,
reports: Admin::AbuseReportSerializer.new.represent(reports),
pagination: {
current_page: reports.current_page,

View File

@ -5,4 +5,5 @@ rollout_issue_url:
milestone: '15.10'
type: ops
group: group::integrations
default_enabled: true
default_enabled: false # Keep this value as false, as feature should be disabled by default for self-managed
# https://gitlab.com/gitlab-org/gitlab/-/issues/390157.

View File

@ -1,6 +1,19 @@
// eslint-disable-next-line import/order
const crypto = require('./helpers/patched_crypto');
const { VUE_VERSION: EXPLICIT_VUE_VERSION } = process.env;
if (![undefined, '2', '3'].includes(EXPLICIT_VUE_VERSION)) {
throw new Error(
`Invalid VUE_VERSION value: ${EXPLICIT_VUE_VERSION}. Only '2' and '3' are supported`,
);
}
const USE_VUE3 = EXPLICIT_VUE_VERSION === '3';
if (USE_VUE3) {
console.log('[V] Using Vue.js 3');
}
const VUE_LOADER_MODULE = USE_VUE3 ? 'vue-loader-vue3' : 'vue-loader';
const fs = require('fs');
const path = require('path');
@ -12,8 +25,10 @@ const BABEL_LOADER_VERSION = require('babel-loader/package.json').version;
const CompressionPlugin = require('compression-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const glob = require('glob');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const VUE_LOADER_VERSION = require('vue-loader/package.json').version;
// eslint-disable-next-line import/no-dynamic-require
const { VueLoaderPlugin } = require(VUE_LOADER_MODULE);
// eslint-disable-next-line import/no-dynamic-require
const VUE_LOADER_VERSION = require(`${VUE_LOADER_MODULE}/package.json`).version;
const VUE_VERSION = require('vue/package.json').version;
const { EsbuildPlugin } = require('esbuild-loader');
@ -285,6 +300,42 @@ if (WEBPACK_USE_ESBUILD_LOADER) {
console.log('esbuild-loader is active');
}
const vueLoaderOptions = {
cacheDirectory: path.join(CACHE_PATH, 'vue-loader'),
cacheIdentifier: [
process.env.NODE_ENV || 'development',
webpack.version,
VUE_VERSION,
VUE_LOADER_VERSION,
].join('|'),
};
let shouldExcludeFromCompliling = (modulePath) =>
/node_modules|vendor[\\/]assets/.test(modulePath) && !/\.vue\.js/.test(modulePath);
// We explicitly set VUE_VERSION
// Use @gitlab-ui from source to allow us to dig differences
// between Vue.js 2 and Vue.js 3 while using built gitlab-ui by default
if (EXPLICIT_VUE_VERSION) {
Object.assign(alias, {
'@gitlab/ui/scss_to_js': path.join(ROOT_PATH, 'node_modules/@gitlab/ui/scss_to_js'),
'@gitlab/ui/dist': '@gitlab/ui/src',
'@gitlab/ui': '@gitlab/ui/src',
});
const originalShouldExcludeFromCompliling = shouldExcludeFromCompliling;
shouldExcludeFromCompliling = (modulePath) =>
originalShouldExcludeFromCompliling(modulePath) &&
!/node_modules[\\/]@gitlab[\\/]ui/.test(modulePath) &&
!/node_modules[\\/]bootstrap-vue[\\/]src[\\/]vue\.js/.test(modulePath);
}
if (USE_VUE3) {
Object.assign(alias, {
vue: '@vue/compat',
});
}
module.exports = {
mode: IS_PRODUCTION ? 'production' : 'development',
@ -322,15 +373,13 @@ module.exports = {
},
WEBPACK_USE_ESBUILD_LOADER && {
test: /\.(js|cjs)$/,
exclude: (modulePath) =>
/node_modules|vendor[\\/]assets/.test(modulePath) && !/\.vue\.js/.test(modulePath),
exclude: shouldExcludeFromCompliling,
loader: 'esbuild-loader',
options: esbuildConfiguration,
},
!WEBPACK_USE_ESBUILD_LOADER && {
test: /\.(js|cjs)$/,
exclude: (modulePath) =>
/node_modules|vendor[\\/]assets/.test(modulePath) && !/\.vue\.js/.test(modulePath),
exclude: shouldExcludeFromCompliling,
use: [
{
loader: 'thread-loader',
@ -370,16 +419,8 @@ module.exports = {
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
cacheDirectory: path.join(CACHE_PATH, 'vue-loader'),
cacheIdentifier: [
process.env.NODE_ENV || 'development',
webpack.version,
VUE_VERSION,
VUE_LOADER_VERSION,
].join('|'),
},
loader: VUE_LOADER_MODULE,
options: vueLoaderOptions,
},
{
test: /\.(graphql|gql)$/,
@ -440,7 +481,7 @@ module.exports = {
{
test: /.css$/,
use: [
'vue-style-loader',
'style-loader',
{
loader: 'css-loader',
options: {

View File

@ -0,0 +1,15 @@
- title: "Deprecated Consul http metrics" # (required) Clearly explain the change, or planned change. For example, "The `confidential` field for a `Note` is deprecated" or "CI/CD job names will be limited to 250 characters."
announcement_milestone: "15.10" # (required) The milestone when this feature was first announced as deprecated.
removal_milestone: "16.0" # (required) The milestone when this feature is planned to be removed
breaking_change: true # (required) Change to false if this is not a breaking change.
reporter: twk3 # (required) GitLab username of the person reporting the change
stage: enablement # (required) String value of the stage that the feature was created in. e.g., Growth
issue_url: https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/7278 # (required) Link to the deprecation issue in GitLab
body: | # (required) Do not modify this line, instead modify the lines below.
The Consul provided in the GitLab Omnibus package will no longer provide older deprecated Consul metrics starting in GitLab 16.0.
In GitLab 14.0, [Consul was updated to 1.9.6](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/5344),
which deprecated some telemetry metrics from being at the `consul.http` path. In GitLab 16.0, the `consul.http` path will be removed.
If you have monitoring that consumes Consul metrics, update them to use `consul.api.http` instead of `consul.http`.
For more information, see [the deprecation notes for Consul 1.9.0](https://github.com/hashicorp/consul/releases/tag/v1.9.0).

View File

@ -45,6 +45,26 @@ and [GraphQL](https://docs.gitlab.com/ee/api/graphql/removed_items.html) depreca
## Announced in 15.10
<div class="deprecation removal-160 breaking-change">
### Deprecated Consul http metrics
Planned removal: GitLab <span class="removal-milestone">16.0</span> <span class="removal-date"></span>
WARNING:
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
Review the details carefully before upgrading.
The Consul provided in the GitLab Omnibus package will no longer provide older deprecated Consul metrics starting in GitLab 16.0.
In GitLab 14.0, [Consul was updated to 1.9.6](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/5344),
which deprecated some telemetry metrics from being at the `consul.http` path. In GitLab 16.0, the `consul.http` path will be removed.
If you have monitoring that consumes Consul metrics, update them to use `consul.api.http` instead of `consul.http`.
For more information, see [the deprecation notes for Consul 1.9.0](https://github.com/hashicorp/consul/releases/tag/v1.9.0).
</div>
<div class="deprecation removal-170 breaking-change">
### DingTalk OmniAuth provider

View File

@ -118,11 +118,16 @@ Endpoints should follow these best practices:
- Never return `500` server error status responses if the event has been handled as this can cause the webhook to be [temporarily disabled](#failing-webhooks).
- Invalid HTTP responses are treated as failed requests.
### Failing webhooks
## Failing webhooks
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60837) in GitLab 13.12 [with a flag](../../../administration/feature_flags.md) named `web_hooks_disable_failed`. Disabled by default.
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/329849) in GitLab 15.7.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/329849) in GitLab 15.7. Feature flag `web_hooks_disable_failed` removed.
> - [Disabled on self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/390157) in GitLab 15.10 [with a flag](../../../administration/feature_flags.md) named `auto_disabling_web_hooks`.
FLAG:
On self-managed GitLab, by default this feature is not available. To make it available, ask an administrator to [enable the feature flag](../../../administration/feature_flags.md) named `auto_disabling_web_hooks`.
On GitLab.com, this feature is available.
If a webhook fails repeatedly, it may be disabled automatically.

View File

@ -1,6 +1,15 @@
const IS_EE = require('./config/helpers/is_ee_env');
const isESLint = require('./config/helpers/is_eslint');
const IS_JH = require('./config/helpers/is_jh_env');
const { VUE_VERSION: EXPLICIT_VUE_VERSION } = process.env;
if (![undefined, '2', '3'].includes(EXPLICIT_VUE_VERSION)) {
throw new Error(
`Invalid VUE_VERSION value: ${EXPLICIT_VUE_VERSION}. Only '2' and '3' are supported`,
);
}
const USE_VUE_3 = EXPLICIT_VUE_VERSION === '3';
const { TEST_HOST } = require('./spec/frontend/__helpers__/test_constants');
module.exports = (path, options = {}) => {
@ -11,6 +20,38 @@ module.exports = (path, options = {}) => {
} = options;
const reporters = ['default'];
const VUE_JEST_TRANSFORMER = USE_VUE_3 ? '@vue/vue3-jest' : '@vue/vue2-jest';
const setupFilesAfterEnv = [`<rootDir>/${path}/test_setup.js`, 'jest-canvas-mock'];
const vueModuleNameMappers = {};
const globals = {};
if (EXPLICIT_VUE_VERSION) {
Object.assign(vueModuleNameMappers, {
'^@gitlab/ui/dist/([^.]*)$': [
'<rootDir>/node_modules/@gitlab/ui/src/$1.vue',
'<rootDir>/node_modules/@gitlab/ui/src/$1.js',
],
'^@gitlab/ui$': '<rootDir>/node_modules/@gitlab/ui/src/index.js',
});
}
if (USE_VUE_3) {
setupFilesAfterEnv.unshift(`<rootDir>/${path}/vue_compat_test_setup.js`);
Object.assign(vueModuleNameMappers, {
'^vue$': '@vue/compat',
'^@vue/test-utils$': '@vue/test-utils-vue3',
});
Object.assign(globals, {
'vue-jest': {
experimentalCSSCompile: false,
compilerOptions: {
compatConfig: {
MODE: 2,
},
},
},
});
}
// To have consistent date time parsing both in local and CI environments we set
// the timezone of the Node process. https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/27738
@ -72,6 +113,7 @@ module.exports = (path, options = {}) => {
'^jquery$': '<rootDir>/node_modules/jquery/dist/jquery.slim.js',
'^@sentry/browser$': '<rootDir>/app/assets/javascripts/sentry/sentry_browser_wrapper.js',
...extModuleNameMapper,
...vueModuleNameMappers,
};
const collectCoverageFrom = ['<rootDir>/app/assets/javascripts/**/*.{js,vue}'];
@ -146,6 +188,7 @@ module.exports = (path, options = {}) => {
];
const transformIgnoreNodeModules = [
'vue-test-utils-compat',
'@gitlab/ui',
'@gitlab/favicon-overlay',
'bootstrap-vue',
@ -166,6 +209,7 @@ module.exports = (path, options = {}) => {
];
return {
globals,
clearMocks: true,
testMatch,
moduleFileExtensions: ['js', 'json', 'vue', 'gql', 'graphql', 'yaml', 'yml'],
@ -179,14 +223,14 @@ module.exports = (path, options = {}) => {
modulePathIgnorePatterns: ['<rootDir>/.yarn-cache/'],
reporters,
resolver: './jest_resolver.js',
setupFilesAfterEnv: [`<rootDir>/${path}/test_setup.js`, 'jest-canvas-mock'],
setupFilesAfterEnv,
restoreMocks: true,
slowTestThreshold: process.env.CI ? 6000 : 500,
transform: {
'^.+\\.(gql|graphql)$': './spec/frontend/__helpers__/graphql_transformer.js',
'^.+_worker\\.js$': './spec/frontend/__helpers__/web_worker_transformer.js',
'^.+\\.js$': 'babel-jest',
'^.+\\.vue$': '@vue/vue2-jest',
'^.+\\.vue$': VUE_JEST_TRANSFORMER,
'spec/frontend/editor/schema/ci/yaml_tests/.+\\.(yml|yaml)$':
'./spec/frontend/__helpers__/yaml_transformer.js',
'^.+\\.(md|zip|png|yml|yaml|sh|ps1)$': './spec/frontend/__helpers__/raw_transformer.js',
@ -204,10 +248,5 @@ module.exports = (path, options = {}) => {
url: TEST_HOST,
},
testRunner: 'jest-jasmine2',
globals: {
'@vue/vue2-jest': {
experimentalCSSCompile: false,
},
},
};
};

View File

@ -30,7 +30,7 @@ module Gitlab
end
def to_result
Yaml::Result.new(load!, error: nil)
Yaml::Result.new(config: load!, error: nil)
rescue ::Gitlab::Config::Loader::FormatError => e
Yaml::Result.new(error: e)
end

View File

@ -7,7 +7,7 @@ module Gitlab
class Result
attr_reader :error
def initialize(config = nil, error: nil)
def initialize(config: nil, error: nil)
@config = Array.wrap(config)
@error = error
end

View File

@ -23,6 +23,7 @@
variables:
CS_ANALYZER_IMAGE: "$CI_TEMPLATE_REGISTRY_HOST/security-products/container-scanning:5"
CS_SCHEMA_MODEL: 15
container_scanning:
image: "$CS_ANALYZER_IMAGE$CS_IMAGE_SUFFIX"

View File

@ -23,6 +23,7 @@
variables:
CS_ANALYZER_IMAGE: "$CI_TEMPLATE_REGISTRY_HOST/security-products/container-scanning:5"
CS_SCHEMA_MODEL: 15
container_scanning:
image: "$CS_ANALYZER_IMAGE$CS_IMAGE_SUFFIX"

View File

@ -8346,6 +8346,9 @@ msgstr ""
msgid "CascadingSettings|cannot be nil when locking the attribute"
msgstr ""
msgid "Category"
msgstr ""
msgid "Cause identified"
msgstr ""

View File

@ -215,8 +215,12 @@
"@graphql-eslint/eslint-plugin": "3.16.1",
"@testing-library/dom": "^7.16.2",
"@types/jest": "^28.1.3",
"@vue/compat": "^3.2.47",
"@vue/compiler-sfc": "^3.2.47",
"@vue/test-utils": "1.3.0",
"@vue/test-utils-vue3": "npm:@vue/test-utils@2",
"@vue/vue2-jest": "^28.1.0",
"@vue/vue3-jest": "^29.2.3",
"ajv": "^8.10.0",
"ajv-formats": "^2.1.1",
"axios-mock-adapter": "^1.15.0",
@ -256,6 +260,8 @@
"stylelint": "^14.9.1",
"swagger-cli": "^4.0.4",
"timezone-mock": "^1.0.8",
"vue-loader-vue3": "npm:vue-loader@17",
"vue-test-utils-compat": "^0.0.11",
"webpack-dev-server": "4.11.1",
"xhr-mock": "^2.5.1",
"yarn-check-webpack-plugin": "^1.2.0",

View File

@ -0,0 +1,78 @@
diff --git a/node_modules/vue-loader-vue3/dist/descriptorCache.js b/node_modules/vue-loader-vue3/dist/descriptorCache.js
index 65a7318..ee425cd 100644
--- a/node_modules/vue-loader-vue3/dist/descriptorCache.js
+++ b/node_modules/vue-loader-vue3/dist/descriptorCache.js
@@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDescriptor = exports.setDescriptor = void 0;
const fs = require("fs");
-const compiler_sfc_1 = require("vue/compiler-sfc");
+const compiler_sfc_1 = require("@vue/compiler-sfc");
const cache = new Map();
function setDescriptor(filename, entry) {
cache.set(cleanQuery(filename), entry);
diff --git a/node_modules/vue-loader-vue3/dist/formatError.js b/node_modules/vue-loader-vue3/dist/formatError.js
index b342426..ec51886 100644
--- a/node_modules/vue-loader-vue3/dist/formatError.js
+++ b/node_modules/vue-loader-vue3/dist/formatError.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatError = void 0;
-const compiler_sfc_1 = require("vue/compiler-sfc");
+const compiler_sfc_1 = require("@vue/compiler-sfc");
const chalk = require("chalk");
function formatError(err, source, file) {
const loc = err.loc;
diff --git a/node_modules/vue-loader-vue3/dist/index.js b/node_modules/vue-loader-vue3/dist/index.js
index 825b3af..263e908 100644
--- a/node_modules/vue-loader-vue3/dist/index.js
+++ b/node_modules/vue-loader-vue3/dist/index.js
@@ -5,7 +5,7 @@ const path = require("path");
const qs = require("querystring");
const loaderUtils = require("loader-utils");
const hash = require("hash-sum");
-const compiler_sfc_1 = require("vue/compiler-sfc");
+const compiler_sfc_1 = require("@vue/compiler-sfc");
const select_1 = require("./select");
const hotReload_1 = require("./hotReload");
const cssModules_1 = require("./cssModules");
diff --git a/node_modules/vue-loader-vue3/dist/resolveScript.js b/node_modules/vue-loader-vue3/dist/resolveScript.js
index 31205c6..b15b390 100644
--- a/node_modules/vue-loader-vue3/dist/resolveScript.js
+++ b/node_modules/vue-loader-vue3/dist/resolveScript.js
@@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveScript = exports.canInlineTemplate = void 0;
const util_1 = require("./util");
-const compiler_sfc_1 = require("vue/compiler-sfc");
+const compiler_sfc_1 = require("@vue/compiler-sfc");
const clientCache = new WeakMap();
const serverCache = new WeakMap();
/**
diff --git a/node_modules/vue-loader-vue3/dist/stylePostLoader.js b/node_modules/vue-loader-vue3/dist/stylePostLoader.js
index f694d25..1d15be2 100644
--- a/node_modules/vue-loader-vue3/dist/stylePostLoader.js
+++ b/node_modules/vue-loader-vue3/dist/stylePostLoader.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const qs = require("querystring");
-const compiler_sfc_1 = require("vue/compiler-sfc");
+const compiler_sfc_1 = require("@vue/compiler-sfc");
// This is a post loader that handles scoped CSS transforms.
// Injected right before css-loader by the global pitcher (../pitch.js)
// for any <style scoped> selection requests initiated from within vue files.
diff --git a/node_modules/vue-loader-vue3/dist/templateLoader.js b/node_modules/vue-loader-vue3/dist/templateLoader.js
index 78b603c..538f3ca 100644
--- a/node_modules/vue-loader-vue3/dist/templateLoader.js
+++ b/node_modules/vue-loader-vue3/dist/templateLoader.js
@@ -6,7 +6,7 @@ const formatError_1 = require("./formatError");
const descriptorCache_1 = require("./descriptorCache");
const resolveScript_1 = require("./resolveScript");
const util_1 = require("./util");
-const compiler_sfc_1 = require("vue/compiler-sfc");
+const compiler_sfc_1 = require("@vue/compiler-sfc");
// Loader that compiles raw template into JavaScript functions.
// This is injected by the global pitcher (../pitch) for template
// selection requests initiated from vue files.

View File

@ -13,13 +13,18 @@ export * from '@gitlab/ui';
* are imported internally in `@gitlab/ui`.
*/
jest.mock('@gitlab/ui/dist/directives/tooltip.js', () => ({
/* eslint-disable global-require */
jest.mock('@gitlab/ui/src/directives/tooltip.js', () => ({
GlTooltipDirective: {
bind() {},
},
}));
jest.mock('@gitlab/ui/dist/directives/tooltip.js', () =>
require('@gitlab/ui/src/directives/tooltip'),
);
jest.mock('@gitlab/ui/dist/components/base/tooltip/tooltip.js', () => ({
jest.mock('@gitlab/ui/src/components/base/tooltip/tooltip.vue', () => ({
props: ['target', 'id', 'triggers', 'placement', 'container', 'boundary', 'disabled', 'show'],
render(h) {
return h(
@ -33,7 +38,11 @@ jest.mock('@gitlab/ui/dist/components/base/tooltip/tooltip.js', () => ({
},
}));
jest.mock('@gitlab/ui/dist/components/base/popover/popover.js', () => ({
jest.mock('@gitlab/ui/dist/components/base/tooltip/tooltip.js', () =>
require('@gitlab/ui/src/components/base/tooltip/tooltip.vue'),
);
jest.mock('@gitlab/ui/src/components/base/popover/popover.vue', () => ({
props: {
cssClasses: {
type: Array,
@ -65,3 +74,6 @@ jest.mock('@gitlab/ui/dist/components/base/popover/popover.js', () => ({
);
},
}));
jest.mock('@gitlab/ui/dist/components/base/popover/popover.js', () =>
require('@gitlab/ui/src/components/base/popover/popover.vue'),
);

View File

@ -6,11 +6,13 @@ import {
FILTERED_SEARCH_TOKENS,
FILTERED_SEARCH_TOKEN_USER,
FILTERED_SEARCH_TOKEN_STATUS,
FILTERED_SEARCH_TOKEN_CATEGORY,
DEFAULT_SORT,
SORT_OPTIONS,
} from '~/admin/abuse_reports/constants';
import FilteredSearchBar from '~/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue';
import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants';
import { buildFilteredSearchCategoryToken } from '~/admin/abuse_reports/utils';
jest.mock('~/lib/utils/url_utility', () => {
const urlUtility = jest.requireActual('~/lib/utils/url_utility');
@ -26,8 +28,12 @@ jest.mock('~/lib/utils/url_utility', () => {
describe('AbuseReportsFilteredSearchBar', () => {
let wrapper;
const CATEGORIES = ['spam', 'phishing'];
const createComponent = () => {
wrapper = shallowMount(AbuseReportsFilteredSearchBar);
wrapper = shallowMount(AbuseReportsFilteredSearchBar, {
provide: { categories: CATEGORIES },
});
};
const findFilteredSearchBar = () => wrapper.findComponent(FilteredSearchBar);
@ -39,11 +45,13 @@ describe('AbuseReportsFilteredSearchBar', () => {
it('passes correct props to `FilteredSearchBar` component', () => {
createComponent();
const categoryToken = buildFilteredSearchCategoryToken(CATEGORIES);
expect(findFilteredSearchBar().props()).toMatchObject({
namespace: 'abuse_reports',
recentSearchesStorageKey: 'abuse_reports',
searchInputPlaceholder: 'Filter reports',
tokens: FILTERED_SEARCH_TOKENS,
tokens: [...FILTERED_SEARCH_TOKENS, categoryToken],
initialSortBy: DEFAULT_SORT,
sortOptions: SORT_OPTIONS,
});
@ -113,6 +121,14 @@ describe('AbuseReportsFilteredSearchBar', () => {
type: FILTERED_SEARCH_TOKEN_USER.type,
value: { data: 'mr_abuser', operator: '=' },
};
const STATUS_FILTER_TOKEN = {
type: FILTERED_SEARCH_TOKEN_STATUS.type,
value: { data: 'open', operator: '=' },
};
const CATEGORY_FILTER_TOKEN = {
type: FILTERED_SEARCH_TOKEN_CATEGORY.type,
value: { data: 'spam', operator: '=' },
};
const createComponentAndFilter = (filterTokens, initialLocation) => {
if (initialLocation) {
@ -124,19 +140,14 @@ describe('AbuseReportsFilteredSearchBar', () => {
findFilteredSearchBar().vm.$emit('onFilter', filterTokens);
};
it('redirects with user query param', () => {
createComponentAndFilter([USER_FILTER_TOKEN]);
expect(redirectTo).toHaveBeenCalledWith('https://localhost/?user=mr_abuser');
});
it('redirects with status query param', () => {
const statusFilterToken = {
type: FILTERED_SEARCH_TOKEN_STATUS.type,
value: { data: 'open', operator: '=' },
};
createComponentAndFilter([statusFilterToken]);
expect(redirectTo).toHaveBeenCalledWith('https://localhost/?status=open');
});
it.each([USER_FILTER_TOKEN, STATUS_FILTER_TOKEN, CATEGORY_FILTER_TOKEN])(
'redirects with $type query param',
(filterToken) => {
createComponentAndFilter([filterToken]);
const { type, value } = filterToken;
expect(redirectTo).toHaveBeenCalledWith(`https://localhost/?${type}=${value.data}`);
},
);
it('ignores search query param', () => {
const searchFilterToken = { type: FILTERED_SEARCH_TERM, value: { data: 'ignored' } };

View File

@ -0,0 +1,13 @@
import { FILTERED_SEARCH_TOKEN_CATEGORY } from '~/admin/abuse_reports/constants';
import { buildFilteredSearchCategoryToken } from '~/admin/abuse_reports/utils';
describe('buildFilteredSearchCategoryToken', () => {
it('adds correctly formatted options to FILTERED_SEARCH_TOKEN_CATEGORY', () => {
const categories = ['tuxedo', 'tabby'];
expect(buildFilteredSearchCategoryToken(categories)).toMatchObject({
...FILTERED_SEARCH_TOKEN_CATEGORY,
options: categories.map((c) => ({ value: c, title: c })),
});
});
});

View File

@ -0,0 +1,60 @@
/* eslint-disable import/no-commonjs */
const Vue = require('vue');
const VTU = require('@vue/test-utils');
const { installCompat: installVTUCompat, fullCompatConfig } = require('vue-test-utils-compat');
if (global.document) {
const compatConfig = {
MODE: 2,
GLOBAL_MOUNT: 'suppress-warning',
GLOBAL_EXTEND: 'suppress-warning',
GLOBAL_PROTOTYPE: 'suppress-warning',
RENDER_FUNCTION: 'suppress-warning',
INSTANCE_DESTROY: 'suppress-warning',
INSTANCE_DELETE: 'suppress-warning',
INSTANCE_ATTRS_CLASS_STYLE: 'suppress-warning',
INSTANCE_CHILDREN: 'suppress-warning',
INSTANCE_SCOPED_SLOTS: 'suppress-warning',
INSTANCE_LISTENERS: 'suppress-warning',
INSTANCE_EVENT_EMITTER: 'suppress-warning',
INSTANCE_EVENT_HOOKS: 'suppress-warning',
INSTANCE_SET: 'suppress-warning',
GLOBAL_OBSERVABLE: 'suppress-warning',
GLOBAL_SET: 'suppress-warning',
COMPONENT_FUNCTIONAL: 'suppress-warning',
COMPONENT_V_MODEL: 'suppress-warning',
CUSTOM_DIR: 'suppress-warning',
OPTIONS_BEFORE_DESTROY: 'suppress-warning',
OPTIONS_DATA_MERGE: 'suppress-warning',
OPTIONS_DATA_FN: 'suppress-warning',
OPTIONS_DESTROYED: 'suppress-warning',
ATTR_FALSE_VALUE: 'suppress-warning',
COMPILER_V_ON_NATIVE: 'suppress-warning',
COMPILER_V_BIND_OBJECT_ORDER: 'suppress-warning',
CONFIG_WHITESPACE: 'suppress-warning',
CONFIG_OPTION_MERGE_STRATS: 'suppress-warning',
PRIVATE_APIS: 'suppress-warning',
WATCH_ARRAY: 'suppress-warning',
};
let compatH;
Vue.config.compilerOptions.whitespace = 'condense';
Vue.createApp({
compatConfig: {
MODE: 3,
RENDER_FUNCTION: 'suppress-warning',
},
render(h) {
compatH = h;
},
}).mount(document.createElement('div'));
Vue.configureCompat(compatConfig);
installVTUCompat(VTU, fullCompatConfig, compatH);
VTU.config.global.renderStubDefaultSlot = true;
}

View File

@ -18,6 +18,7 @@ RSpec.describe Admin::AbuseReportsHelper, feature_category: :insider_threat do
"total_items" => 1
)
expect(data['reports'].first).to include("category", "updated_at", "reported_user", "reporter")
expect(data['categories']).to match_array(AbuseReport.categories.keys)
end
end
end

View File

@ -4,20 +4,20 @@ require 'spec_helper'
RSpec.describe Gitlab::Ci::Config::Yaml::Result, feature_category: :pipeline_composition do
it 'does not have a header when config is a single hash' do
result = described_class.new({ a: 1, b: 2 })
result = described_class.new(config: { a: 1, b: 2 })
expect(result).not_to have_header
end
it 'has a header when config is an array of hashes' do
result = described_class.new([{ a: 1 }, { b: 2 }])
result = described_class.new(config: [{ a: 1 }, { b: 2 }])
expect(result).to have_header
expect(result.header).to eq({ a: 1 })
end
it 'raises an error when reading a header when there is none' do
result = described_class.new({ b: 2 })
result = described_class.new(config: { b: 2 })
expect { result.header }.to raise_error(ArgumentError)
end

View File

@ -7,7 +7,7 @@ require (
github.com/BurntSushi/toml v1.2.1
github.com/FZambia/sentinel v1.1.1
github.com/alecthomas/chroma/v2 v2.5.0
github.com/aws/aws-sdk-go v1.44.215
github.com/aws/aws-sdk-go v1.44.216
github.com/disintegration/imaging v1.6.2
github.com/getsentry/raven-go v0.2.0
github.com/golang-jwt/jwt/v4 v4.5.0

View File

@ -569,8 +569,8 @@ github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4
github.com/aws/aws-sdk-go v1.44.156/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go v1.44.187/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go v1.44.200/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go v1.44.215 h1:K3KERfO6MaV349idub2w1u1H0R0KSkED0LshPnaAn3Q=
github.com/aws/aws-sdk-go v1.44.215/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go v1.44.216 h1:nDL5hEGBlUNHXMWbpP4dIyP8IB5tvRgksWE7biVu8JY=
github.com/aws/aws-sdk-go v1.44.216/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
github.com/aws/aws-sdk-go-v2 v1.17.4 h1:wyC6p9Yfq6V2y98wfDsj6OnNQa4w2BLGCLIxzNhwOGY=
github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=

198
yarn.lock
View File

@ -338,10 +338,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.8", "@babel/parser@^7.18.10", "@babel/parser@^7.19.0":
version "7.19.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.0.tgz#497fcafb1d5b61376959c1c338745ef0577aa02c"
integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.4", "@babel/parser@^7.16.8", "@babel/parser@^7.18.10", "@babel/parser@^7.19.0":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3"
integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12":
version "7.17.12"
@ -2544,6 +2544,57 @@
"@typescript-eslint/types" "5.38.0"
eslint-visitor-keys "^3.3.0"
"@vue/compat@^3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compat/-/compat-3.2.47.tgz#315c9708a46ce13a1d81e7ff0bec33060a210741"
integrity sha512-spULbnhceN3fIGYRRgq75RPRqsakfUV0tyZ4zTweOB48bWtwHUn677exg8/58uLOBc1F5B5lXTD5qf7epqpTuw==
dependencies:
"@babel/parser" "^7.16.4"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-core@3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz#3e07c684d74897ac9aa5922c520741f3029267f8"
integrity sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.47"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-dom@3.2.47", "@vue/compiler-dom@^3.0.1":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz#a0b06caf7ef7056939e563dcaa9cbde30794f305"
integrity sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==
dependencies:
"@vue/compiler-core" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/compiler-sfc@^3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d"
integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.47"
"@vue/compiler-dom" "3.2.47"
"@vue/compiler-ssr" "3.2.47"
"@vue/reactivity-transform" "3.2.47"
"@vue/shared" "3.2.47"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-ssr@3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz#35872c01a273aac4d6070ab9d8da918ab13057ee"
integrity sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==
dependencies:
"@vue/compiler-dom" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/component-compiler-utils@^3.1.0":
version "3.3.0"
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9"
@ -2560,6 +2611,40 @@
optionalDependencies:
prettier "^1.18.2 || ^2.0.0"
"@vue/reactivity-transform@3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e"
integrity sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.47"
"@vue/shared" "3.2.47"
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/server-renderer@^3.0.1":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz#8aa1d1871fc4eb5a7851aa7f741f8f700e6de3c0"
integrity sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==
dependencies:
"@vue/compiler-ssr" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/shared@3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c"
integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==
"@vue/test-utils-vue3@npm:@vue/test-utils@2":
version "2.3.1"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.3.1.tgz#411883ea52091fa3e59d9b0b83f2934111c10776"
integrity sha512-tRtHRPEETQSUrqXgAewNZHm5iypxDFxwenfdcvMRm1kbGo4bcqHb1XHHlsaIjoDbLkuE2NYiF8vBQDNYrzlrSA==
dependencies:
js-beautify "1.14.6"
optionalDependencies:
"@vue/compiler-dom" "^3.0.1"
"@vue/server-renderer" "^3.0.1"
"@vue/test-utils@1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.0.tgz#d563decdcd9c68a7bca151d4179a2bfd6d5c3e15"
@ -2581,6 +2666,18 @@
source-map "0.5.6"
tsconfig "^7.0.0"
"@vue/vue3-jest@^29.2.3":
version "29.2.3"
resolved "https://registry.yarnpkg.com/@vue/vue3-jest/-/vue3-jest-29.2.3.tgz#79caa80e6faff1f26be90c9da92447e7e03de9a0"
integrity sha512-wbit0rGgy9ARUBtc5dZ6PGCrxazCPs5pZ6ycB0qYMoEPmkRj8lIVUfJmTz03ryIAeVQOcTKnEWdcqgrTErl3vg==
dependencies:
"@babel/plugin-transform-modules-commonjs" "^7.2.0"
chalk "^2.1.0"
convert-source-map "^1.6.0"
css-tree "^2.0.1"
source-map "0.5.6"
tsconfig "^7.0.0"
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
@ -2784,7 +2881,7 @@ abab@^2.0.5, abab@^2.0.6:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
abbrev@1:
abbrev@1, abbrev@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
@ -3973,10 +4070,10 @@ condense-newlines@^0.2.1:
is-whitespace "^0.3.0"
kind-of "^3.0.2"
config-chain@^1.1.12:
version "1.1.12"
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
config-chain@^1.1.13:
version "1.1.13"
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
dependencies:
ini "^1.3.4"
proto-list "~1.2.1"
@ -5766,6 +5863,11 @@ estraverse@^5.1.0, estraverse@^5.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@ -6376,7 +6478,7 @@ glob-parent@^6.0.2:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@~8.0.3:
glob@^8.0.3, glob@~8.0.3:
version "8.0.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e"
integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==
@ -6648,6 +6750,11 @@ hash-sum@^1.0.2:
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==
hash-sum@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
hash.js@^1.0.0, hash.js@^1.0.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
@ -7881,16 +7988,15 @@ jquery.caret@^0.3.1:
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==
js-beautify@^1.6.12:
version "1.11.0"
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.11.0.tgz#afb873dc47d58986360093dcb69951e8bcd5ded2"
integrity sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==
js-beautify@1.14.6, js-beautify@^1.6.12:
version "1.14.6"
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.6.tgz#b23ca5d74a462c282c7711bb51150bcc97f2b507"
integrity sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==
dependencies:
config-chain "^1.1.12"
config-chain "^1.1.13"
editorconfig "^0.15.3"
glob "^7.1.3"
mkdirp "~1.0.3"
nopt "^4.0.3"
glob "^8.0.3"
nopt "^6.0.0"
js-cookie@^3.0.0:
version "3.0.1"
@ -8360,6 +8466,13 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
magic-string@^0.25.7:
version "0.25.9"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
dependencies:
sourcemap-codec "^1.4.8"
make-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@ -9220,7 +9333,7 @@ mkdirp@^0.5.1, mkdirp@^0.5.3:
dependencies:
minimist "^1.2.5"
mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.3:
mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@ -9439,13 +9552,12 @@ nodemon@^2.0.19:
touch "^3.1.0"
undefsafe "^2.0.5"
nopt@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
nopt@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
dependencies:
abbrev "1"
osenv "^0.1.4"
abbrev "^1.0.0"
nopt@~1.0.10:
version "1.0.10"
@ -9673,24 +9785,11 @@ os-browserify@^0.3.0:
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-limit@3.1.0, p-limit@^3.0.2, p-limit@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
@ -10042,7 +10141,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@8.4.14, postcss@^8.2.1, postcss@^8.4.14:
postcss@8.4.14, postcss@^8.1.10, postcss@^8.2.1, postcss@^8.4.14:
version "8.4.14"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
@ -11298,6 +11397,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
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==
space-separated-tokens@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b"
@ -12468,6 +12572,15 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
"vue-loader-vue3@npm:vue-loader@17":
version "17.0.1"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-17.0.1.tgz#c0ee8875e0610a0c2d13ba9b4d50a9c8442e7a3a"
integrity sha512-/OOyugJnImKCkAKrAvdsWMuwoCqGxWT5USLsjohzWbMgOwpA5wQmzQiLMzZd7DjhIfunzAGIApTOgIylz/kwcg==
dependencies:
chalk "^4.1.0"
hash-sum "^2.0.0"
loader-utils "^2.0.0"
vue-loader@15.9.6:
version "15.9.6"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.6.tgz#f4bb9ae20c3a8370af3ecf09b8126d38ffdb6b8b"
@ -12522,6 +12635,11 @@ vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
vue-test-utils-compat@^0.0.11:
version "0.0.11"
resolved "https://registry.yarnpkg.com/vue-test-utils-compat/-/vue-test-utils-compat-0.0.11.tgz#d3e92bcee6893e7506b5d6463f774678f144fe7a"
integrity sha512-vAc19M4GS0qxGZGB0UZg7mG6j90hyNoDQXWYCEG4Sjahyi+v+CHq9xHa6js70S8HExNkm2f4LF3x2+gbCMFVUQ==
vue-virtual-scroll-list@^1.4.7:
version "1.4.7"
resolved "https://registry.yarnpkg.com/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.4.7.tgz#12ee26833885f5bb4d37dc058085ccf3ce5b5a74"