mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-24 20:24:05 -08:00
feat: Add Mirage.js server to enable editor-ui unit tests (#5671)
feat: add Mirage.js server to enable editor-ui unit tests
This commit is contained in:
parent
c6ba0bd8de
commit
d253aa3e95
|
@ -84,6 +84,7 @@
|
|||
"xss": "^1.0.10"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^7.6.0",
|
||||
"@pinia/testing": "^0.0.14",
|
||||
"@testing-library/jest-dom": "^5.16.5",
|
||||
"@testing-library/vue": "^5.8.3",
|
||||
|
@ -102,6 +103,7 @@
|
|||
"@vitejs/plugin-vue2": "^2.2.0",
|
||||
"c8": "^7.12.0",
|
||||
"jshint": "^2.9.7",
|
||||
"miragejs": "^0.1.47",
|
||||
"sass": "^1.55.0",
|
||||
"sass-loader": "^10.1.1",
|
||||
"string-template-parser": "^1.2.6",
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
import { Response, Server } from 'miragejs';
|
||||
import { AppSchema } from '../types';
|
||||
|
||||
export function routesForCredentials(server: Server) {
|
||||
server.get('/rest/credentials', (schema: AppSchema) => {
|
||||
const { models: data } = schema.all('credential');
|
||||
|
||||
return new Response(200, {}, { data });
|
||||
});
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import { Response, Server } from 'miragejs';
|
||||
import { AppSchema } from '../types';
|
||||
|
||||
export function routesForCredentialTypes(server: Server) {
|
||||
server.get('/types/credentials.json', (schema: AppSchema) => {
|
||||
const { models: data } = schema.all('credentialType');
|
||||
|
||||
return new Response(200, {}, data);
|
||||
});
|
||||
}
|
12
packages/editor-ui/src/__tests__/server/endpoints/index.ts
Normal file
12
packages/editor-ui/src/__tests__/server/endpoints/index.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { routesForUsers } from './user';
|
||||
import { routesForCredentials } from './credential';
|
||||
import { Server } from 'miragejs';
|
||||
import { routesForCredentialTypes } from '@/__tests__/server/endpoints/credentialType';
|
||||
|
||||
const endpoints: Array<(server: Server) => void> = [
|
||||
routesForCredentials,
|
||||
routesForCredentialTypes,
|
||||
routesForUsers,
|
||||
];
|
||||
|
||||
export { endpoints };
|
10
packages/editor-ui/src/__tests__/server/endpoints/user.ts
Normal file
10
packages/editor-ui/src/__tests__/server/endpoints/user.ts
Normal file
|
@ -0,0 +1,10 @@
|
|||
import { Response, Server } from 'miragejs';
|
||||
import { AppSchema } from '../types';
|
||||
|
||||
export function routesForUsers(server: Server) {
|
||||
server.get('/rest/users', (schema: AppSchema) => {
|
||||
const { models: data } = schema.all('user');
|
||||
|
||||
return new Response(200, {}, { data });
|
||||
});
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
import { Factory } from 'miragejs';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import type { ICredentialsResponse } from '@/Interface';
|
||||
|
||||
export const credentialFactory = Factory.extend<ICredentialsResponse>({
|
||||
id(i: number) {
|
||||
return `${i}`;
|
||||
},
|
||||
createdAt() {
|
||||
return faker.date.recent().toISOString();
|
||||
},
|
||||
name() {
|
||||
return faker.company.name();
|
||||
},
|
||||
nodesAccess() {
|
||||
return [];
|
||||
},
|
||||
type() {
|
||||
return 'notionApi';
|
||||
},
|
||||
updatedAt() {
|
||||
return '';
|
||||
},
|
||||
});
|
|
@ -0,0 +1,26 @@
|
|||
import { Factory } from 'miragejs';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import type { ICredentialType } from 'n8n-workflow';
|
||||
|
||||
const credentialTypes = [
|
||||
'airtableApi',
|
||||
'dropboxApi',
|
||||
'figmaApi',
|
||||
'googleApi',
|
||||
'gitlabApi',
|
||||
'jenkinsApi',
|
||||
'metabaseApi',
|
||||
'notionApi',
|
||||
];
|
||||
|
||||
export const credentialTypeFactory = Factory.extend<ICredentialType>({
|
||||
name(i) {
|
||||
return credentialTypes[i];
|
||||
},
|
||||
displayName(i) {
|
||||
return credentialTypes[i];
|
||||
},
|
||||
properties() {
|
||||
return [];
|
||||
},
|
||||
});
|
13
packages/editor-ui/src/__tests__/server/factories/index.ts
Normal file
13
packages/editor-ui/src/__tests__/server/factories/index.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { userFactory } from './user';
|
||||
import { credentialFactory } from './credential';
|
||||
import { credentialTypeFactory } from './credentialType';
|
||||
|
||||
export * from './user';
|
||||
export * from './credential';
|
||||
export * from './credentialType';
|
||||
|
||||
export const factories = {
|
||||
credential: credentialFactory,
|
||||
credentialType: credentialTypeFactory,
|
||||
user: userFactory,
|
||||
};
|
31
packages/editor-ui/src/__tests__/server/factories/user.ts
Normal file
31
packages/editor-ui/src/__tests__/server/factories/user.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { Factory } from 'miragejs';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import { SignInType } from '@/constants';
|
||||
import type { IUser } from '@/Interface';
|
||||
|
||||
export const userFactory = Factory.extend<IUser>({
|
||||
id(i: number) {
|
||||
return `${i}`;
|
||||
},
|
||||
firstName() {
|
||||
return faker.name.firstName();
|
||||
},
|
||||
lastName() {
|
||||
return faker.name.lastName();
|
||||
},
|
||||
isDefaultUser() {
|
||||
return false;
|
||||
},
|
||||
isOwner() {
|
||||
return false;
|
||||
},
|
||||
isPending() {
|
||||
return false;
|
||||
},
|
||||
isPendingUser() {
|
||||
return false;
|
||||
},
|
||||
signInType(): SignInType {
|
||||
return SignInType.EMAIL;
|
||||
},
|
||||
});
|
42
packages/editor-ui/src/__tests__/server/index.ts
Normal file
42
packages/editor-ui/src/__tests__/server/index.ts
Normal file
|
@ -0,0 +1,42 @@
|
|||
import { createServer } from 'miragejs';
|
||||
import { endpoints } from './endpoints';
|
||||
import { models } from './models';
|
||||
import { factories } from './factories';
|
||||
|
||||
export function setupServer() {
|
||||
const server = createServer({
|
||||
models,
|
||||
factories,
|
||||
seeds(server) {
|
||||
server.createList('credentialType', 8);
|
||||
server.create('user', {
|
||||
isDefaultUser: true,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
// Set server url prefix
|
||||
server.urlPrefix = process.env.API_URL || '';
|
||||
|
||||
// Enable logging
|
||||
server.logging = false;
|
||||
|
||||
// Handle undefined endpoints
|
||||
server.post('/rest/:any', () => new Promise(() => {}));
|
||||
|
||||
// Handle defined endpoints
|
||||
for (const endpointsFn of endpoints) {
|
||||
endpointsFn(server);
|
||||
}
|
||||
|
||||
// Reset for everything else
|
||||
server.namespace = '';
|
||||
server.passthrough();
|
||||
|
||||
if (server.logging) {
|
||||
console.log('Mirage database');
|
||||
console.log(server.db.dump());
|
||||
}
|
||||
|
||||
return server;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
import { ICredentialsResponse } from '@/Interface';
|
||||
import { Model } from 'miragejs';
|
||||
import type { ModelDefinition } from 'miragejs/-types';
|
||||
|
||||
export const CredentialModel: ModelDefinition<ICredentialsResponse> = Model.extend({});
|
|
@ -0,0 +1,5 @@
|
|||
import { Model } from 'miragejs';
|
||||
import type { ModelDefinition } from 'miragejs/-types';
|
||||
import type { ICredentialType } from 'n8n-workflow';
|
||||
|
||||
export const CredentialTypeModel: ModelDefinition<ICredentialType> = Model.extend({});
|
9
packages/editor-ui/src/__tests__/server/models/index.ts
Normal file
9
packages/editor-ui/src/__tests__/server/models/index.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
import { UserModel } from './user';
|
||||
import { CredentialModel } from './credential';
|
||||
import { CredentialTypeModel } from './credentialType';
|
||||
|
||||
export const models = {
|
||||
credential: CredentialModel,
|
||||
credentialType: CredentialTypeModel,
|
||||
user: UserModel,
|
||||
};
|
5
packages/editor-ui/src/__tests__/server/models/user.ts
Normal file
5
packages/editor-ui/src/__tests__/server/models/user.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
import { IUser } from '@/Interface';
|
||||
import { Model } from 'miragejs';
|
||||
import type { ModelDefinition } from 'miragejs/-types';
|
||||
|
||||
export const UserModel: ModelDefinition<IUser> = Model.extend({});
|
10
packages/editor-ui/src/__tests__/server/types.ts
Normal file
10
packages/editor-ui/src/__tests__/server/types.ts
Normal file
|
@ -0,0 +1,10 @@
|
|||
import { Registry } from 'miragejs';
|
||||
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import Schema from 'miragejs/orm/schema';
|
||||
|
||||
import { models } from './models';
|
||||
import { factories } from './factories';
|
||||
|
||||
type AppRegistry = Registry<typeof models, typeof factories>;
|
||||
export type AppSchema = Schema<AppRegistry>;
|
41
packages/editor-ui/src/stores/__tests__/credentials.spec.ts
Normal file
41
packages/editor-ui/src/stores/__tests__/credentials.spec.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { afterAll, beforeAll } from 'vitest';
|
||||
import { setActivePinia, createPinia } from 'pinia';
|
||||
import { setupServer } from '@/__tests__/server';
|
||||
import { useCredentialsStore } from '@/stores/credentials';
|
||||
|
||||
describe('store', () => {
|
||||
let server: ReturnType<typeof setupServer>;
|
||||
|
||||
beforeAll(() => {
|
||||
server = setupServer();
|
||||
server.createList('credential', 3);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
setActivePinia(createPinia());
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
server.shutdown();
|
||||
});
|
||||
|
||||
describe('credentials', () => {
|
||||
describe('fetchCredentialTypes()', () => {
|
||||
it('should fetch all credential types', async () => {
|
||||
const credentialsStore = useCredentialsStore();
|
||||
await credentialsStore.fetchCredentialTypes(false);
|
||||
|
||||
expect(credentialsStore.allCredentialTypes).toHaveLength(8);
|
||||
});
|
||||
});
|
||||
|
||||
describe('fetchAllCredentials()', () => {
|
||||
it('should fetch all credentials', async () => {
|
||||
const credentialsStore = useCredentialsStore();
|
||||
await credentialsStore.fetchAllCredentials();
|
||||
|
||||
expect(credentialsStore.allCredentials).toHaveLength(3);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
120
pnpm-lock.yaml
120
pnpm-lock.yaml
|
@ -558,6 +558,7 @@ importers:
|
|||
'@codemirror/lint': ^6.0.0
|
||||
'@codemirror/state': ^6.1.4
|
||||
'@codemirror/view': ^6.5.1
|
||||
'@faker-js/faker': ^7.6.0
|
||||
'@fontsource/open-sans': ^4.5.0
|
||||
'@fortawesome/fontawesome-svg-core': ^1.2.35
|
||||
'@fortawesome/free-regular-svg-icons': ^6.1.1
|
||||
|
@ -599,6 +600,7 @@ importers:
|
|||
jsonpath: ^1.1.1
|
||||
lodash-es: ^4.17.21
|
||||
luxon: ^3.1.0
|
||||
miragejs: ^0.1.47
|
||||
monaco-editor: ^0.33.0
|
||||
n8n-design-system: workspace:*
|
||||
n8n-workflow: workspace:*
|
||||
|
@ -688,6 +690,7 @@ importers:
|
|||
vue2-touch-events: 3.2.2
|
||||
xss: 1.0.14
|
||||
devDependencies:
|
||||
'@faker-js/faker': 7.6.0
|
||||
'@pinia/testing': 0.0.14_pinia@2.0.23+vue@2.7.14
|
||||
'@testing-library/jest-dom': 5.16.5
|
||||
'@testing-library/vue': 5.8.3_rhqkolmkwunxzlyyxxsuwaiuri
|
||||
|
@ -706,6 +709,7 @@ importers:
|
|||
'@vitejs/plugin-vue2': 2.2.0_vite@4.0.4+vue@2.7.14
|
||||
c8: 7.12.0
|
||||
jshint: 2.13.5
|
||||
miragejs: 0.1.47
|
||||
sass: 1.55.0
|
||||
sass-loader: 10.3.1_sass@1.55.0+webpack@5.75.0
|
||||
string-template-parser: 1.2.6
|
||||
|
@ -3077,6 +3081,11 @@ packages:
|
|||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@faker-js/faker/7.6.0:
|
||||
resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==}
|
||||
engines: {node: '>=14.0.0', npm: '>=6.0.0'}
|
||||
dev: true
|
||||
|
||||
/@fal-works/esbuild-plugin-global-externals/2.1.2:
|
||||
resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==}
|
||||
dev: true
|
||||
|
@ -3633,6 +3642,10 @@ packages:
|
|||
react: 17.0.2
|
||||
dev: true
|
||||
|
||||
/@miragejs/pretender-node-polyfill/0.1.2:
|
||||
resolution: {integrity: sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g==}
|
||||
dev: true
|
||||
|
||||
/@msgpackr-extract/msgpackr-extract-darwin-arm64/2.2.0:
|
||||
resolution: {integrity: sha512-Z9LFPzfoJi4mflGWV+rv7o7ZbMU5oAU9VmzCgL240KnqDW65Y2HFCT3MW06/ITJSnbVLacmcEJA8phywK7JinQ==}
|
||||
cpu: [arm64]
|
||||
|
@ -6545,7 +6558,7 @@ packages:
|
|||
vite: ^3.0.0 || ^4.0.0
|
||||
vue: ^2.7.0-0
|
||||
dependencies:
|
||||
vite: 4.0.4_sass@1.58.0
|
||||
vite: 4.0.4_sass@1.55.0+terser@5.16.1
|
||||
vue: 2.7.14
|
||||
dev: true
|
||||
|
||||
|
@ -11118,6 +11131,10 @@ packages:
|
|||
resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
|
||||
engines: {'0': node >=0.6.0}
|
||||
|
||||
/fake-xml-http-request/2.1.2:
|
||||
resolution: {integrity: sha512-HaFMBi7r+oEC9iJNpc3bvcW7Z7iLmM26hPDmlb0mFwyANSsOQAtJxbdWsXITKOzZUyMYK0zYCv3h5yDj9TsiXg==}
|
||||
dev: true
|
||||
|
||||
/fancy-log/1.3.3:
|
||||
resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==}
|
||||
engines: {node: '>= 0.10'}
|
||||
|
@ -12529,6 +12546,10 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/inflected/2.1.0:
|
||||
resolution: {integrity: sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==}
|
||||
dev: true
|
||||
|
||||
/inflight/1.0.6:
|
||||
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
||||
dependencies:
|
||||
|
@ -14456,23 +14477,24 @@ packages:
|
|||
|
||||
/lodash.assign/4.2.0:
|
||||
resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==}
|
||||
dev: false
|
||||
|
||||
/lodash.assignwith/4.2.0:
|
||||
resolution: {integrity: sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==}
|
||||
dev: false
|
||||
|
||||
/lodash.camelcase/4.3.0:
|
||||
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
|
||||
dev: true
|
||||
|
||||
/lodash.clone/4.5.0:
|
||||
resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==}
|
||||
dev: false
|
||||
|
||||
/lodash.clonedeep/4.5.0:
|
||||
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
|
||||
dev: false
|
||||
|
||||
/lodash.compact/3.0.1:
|
||||
resolution: {integrity: sha512-2ozeiPi+5eBXW1CLtzjk8XQFhQOEMwwfxblqeq6EGyTxZJ1bPATqilY0e6g2SLQpP4KuMeuioBhEnWz5Pr7ICQ==}
|
||||
dev: false
|
||||
|
||||
/lodash.concat/4.5.0:
|
||||
resolution: {integrity: sha512-US6b1Nqek3shg2qmv1IjTN5P7tPL1RKu77VpdGtVprxmnTI/HlsHGqI2Oa5Irznk0ZB5IXHwocMeMZK8vf4+CA==}
|
||||
|
@ -14500,7 +14522,6 @@ packages:
|
|||
|
||||
/lodash.find/4.6.0:
|
||||
resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==}
|
||||
dev: false
|
||||
|
||||
/lodash.first/3.0.0:
|
||||
resolution: {integrity: sha512-FnBs6c5eWZY1P88K2+NHiLZjp+pBRbLbt9kDGBCtiY+tfRGhR7LmIxTphpspmRXxyQeJXM5LHoq62yVjcBjcCw==}
|
||||
|
@ -14508,19 +14529,30 @@ packages:
|
|||
|
||||
/lodash.flatten/4.4.0:
|
||||
resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
|
||||
dev: false
|
||||
|
||||
/lodash.flow/3.5.0:
|
||||
resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==}
|
||||
dev: false
|
||||
|
||||
/lodash.forin/4.4.0:
|
||||
resolution: {integrity: sha512-APldePP4yvGhMcplVxv9L+exdLHMRHRhH1Q9O70zRJMm9HbTm6zxaihXtNl+ICOBApeFWoH7jNmFr/L4XfWeiQ==}
|
||||
dev: true
|
||||
|
||||
/lodash.get/4.4.2:
|
||||
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
|
||||
|
||||
/lodash.has/4.5.2:
|
||||
resolution: {integrity: sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==}
|
||||
dev: true
|
||||
|
||||
/lodash.intersection/4.4.0:
|
||||
resolution: {integrity: sha512-N+L0cCfnqMv6mxXtSPeKt+IavbOBBSiAEkKyLasZ8BVcP9YXQgxLO12oPR8OyURwKV8l5vJKiE1M8aS70heuMg==}
|
||||
dev: false
|
||||
|
||||
/lodash.invokemap/4.6.0:
|
||||
resolution: {integrity: sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==}
|
||||
dev: true
|
||||
|
||||
/lodash.isarguments/3.1.0:
|
||||
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
|
||||
dev: false
|
||||
|
@ -14532,15 +14564,26 @@ packages:
|
|||
|
||||
/lodash.isempty/4.4.0:
|
||||
resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==}
|
||||
dev: false
|
||||
|
||||
/lodash.isequal/4.5.0:
|
||||
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
|
||||
|
||||
/lodash.isfunction/3.0.9:
|
||||
resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
|
||||
dev: true
|
||||
|
||||
/lodash.isinteger/4.0.4:
|
||||
resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
|
||||
dev: true
|
||||
|
||||
/lodash.isobject/3.0.2:
|
||||
resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==}
|
||||
dev: false
|
||||
|
||||
/lodash.isplainobject/4.0.6:
|
||||
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
|
||||
dev: true
|
||||
|
||||
/lodash.isstring/4.0.1:
|
||||
resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
|
||||
dev: false
|
||||
|
@ -14553,13 +14596,20 @@ packages:
|
|||
resolution: {integrity: sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==}
|
||||
dev: false
|
||||
|
||||
/lodash.lowerfirst/4.3.1:
|
||||
resolution: {integrity: sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==}
|
||||
dev: true
|
||||
|
||||
/lodash.lt/3.9.2:
|
||||
resolution: {integrity: sha512-WMyxj1+48IlnUWMYALOD6+o61apx5xdiXDtHBOp6QlkeZ19QpX7LiqHMXCnZWGd35QMZoZV/iJIhIhM01WPz3A==}
|
||||
dev: false
|
||||
|
||||
/lodash.map/4.6.0:
|
||||
resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
|
||||
dev: false
|
||||
|
||||
/lodash.mapvalues/4.6.0:
|
||||
resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==}
|
||||
dev: true
|
||||
|
||||
/lodash.memoize/4.1.2:
|
||||
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
|
||||
|
@ -14590,7 +14640,6 @@ packages:
|
|||
|
||||
/lodash.pick/4.4.0:
|
||||
resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==}
|
||||
dev: false
|
||||
|
||||
/lodash.pickby/4.6.0:
|
||||
resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==}
|
||||
|
@ -14608,6 +14657,10 @@ packages:
|
|||
resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==}
|
||||
dev: false
|
||||
|
||||
/lodash.snakecase/4.1.1:
|
||||
resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
|
||||
dev: true
|
||||
|
||||
/lodash.some/4.6.0:
|
||||
resolution: {integrity: sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==}
|
||||
dev: false
|
||||
|
@ -14646,11 +14699,9 @@ packages:
|
|||
|
||||
/lodash.uniq/4.5.0:
|
||||
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
|
||||
dev: false
|
||||
|
||||
/lodash.uniqby/4.7.0:
|
||||
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
|
||||
dev: false
|
||||
|
||||
/lodash.unset/4.5.2:
|
||||
resolution: {integrity: sha512-bwKX88k2JhCV9D1vtE8+naDKlLiGrSmf8zi/Y9ivFHwbmRfA8RxS/aVJ+sIht2XOwqoNr4xUPUkGZpc1sHFEKg==}
|
||||
|
@ -14660,6 +14711,10 @@ packages:
|
|||
resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
|
||||
dev: false
|
||||
|
||||
/lodash.values/4.3.0:
|
||||
resolution: {integrity: sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==}
|
||||
dev: true
|
||||
|
||||
/lodash.zip/4.2.0:
|
||||
resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==}
|
||||
dev: false
|
||||
|
@ -15166,6 +15221,38 @@ packages:
|
|||
minipass: 3.3.6
|
||||
yallist: 4.0.0
|
||||
|
||||
/miragejs/0.1.47:
|
||||
resolution: {integrity: sha512-99tuCbIAlMhNhyF3s5d3+5/FdJ7O4jSq/5e3e+sDv7L8dZdwJuwutXe0pobJ7hm6yRChTDjK+Nn8dZZd175wbg==}
|
||||
engines: {node: 6.* || 8.* || >= 10.*}
|
||||
dependencies:
|
||||
'@miragejs/pretender-node-polyfill': 0.1.2
|
||||
inflected: 2.1.0
|
||||
lodash.assign: 4.2.0
|
||||
lodash.camelcase: 4.3.0
|
||||
lodash.clonedeep: 4.5.0
|
||||
lodash.compact: 3.0.1
|
||||
lodash.find: 4.6.0
|
||||
lodash.flatten: 4.4.0
|
||||
lodash.forin: 4.4.0
|
||||
lodash.get: 4.4.2
|
||||
lodash.has: 4.5.2
|
||||
lodash.invokemap: 4.6.0
|
||||
lodash.isempty: 4.4.0
|
||||
lodash.isequal: 4.5.0
|
||||
lodash.isfunction: 3.0.9
|
||||
lodash.isinteger: 4.0.4
|
||||
lodash.isplainobject: 4.0.6
|
||||
lodash.lowerfirst: 4.3.1
|
||||
lodash.map: 4.6.0
|
||||
lodash.mapvalues: 4.6.0
|
||||
lodash.pick: 4.4.0
|
||||
lodash.snakecase: 4.1.1
|
||||
lodash.uniq: 4.5.0
|
||||
lodash.uniqby: 4.7.0
|
||||
lodash.values: 4.3.0
|
||||
pretender: 3.4.7
|
||||
dev: true
|
||||
|
||||
/mixin-deep/1.3.2:
|
||||
resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -16818,6 +16905,13 @@ packages:
|
|||
engines: {node: '>= 0.8.0'}
|
||||
dev: true
|
||||
|
||||
/pretender/3.4.7:
|
||||
resolution: {integrity: sha512-jkPAvt1BfRi0RKamweJdEcnjkeu7Es8yix3bJ+KgBC5VpG/Ln4JE3hYN6vJym4qprm8Xo5adhWpm3HCoft1dOw==}
|
||||
dependencies:
|
||||
fake-xml-http-request: 2.1.2
|
||||
route-recognizer: 0.3.4
|
||||
dev: true
|
||||
|
||||
/prettier-linter-helpers/1.0.0:
|
||||
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
@ -17897,6 +17991,10 @@ packages:
|
|||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
/route-recognizer/0.3.4:
|
||||
resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==}
|
||||
dev: true
|
||||
|
||||
/rss-parser/3.12.0:
|
||||
resolution: {integrity: sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==}
|
||||
dependencies:
|
||||
|
|
Loading…
Reference in a new issue