Merge pull request #22043 from backstage/rugvip/no-mock-fs

remove remaining usages of mock-fs
This commit is contained in:
Patrik Oldsberg
2023-12-28 20:53:58 +01:00
committed by GitHub
13 changed files with 107 additions and 157 deletions
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
'@backstage/config-loader': patch
'@backstage/create-app': patch
'@backstage/repo-tools': patch
'@backstage/cli-node': patch
---
Removed `mock-fs` dev dependency.
@@ -1,13 +0,0 @@
diff --git a/lib/binding.js b/lib/binding.js
index a4a3e6cdc197bd0f12fe2d060640e91ac58ab457..ab04ce3115fe93073a3e25008730272b6fa21bd7 100644
--- a/lib/binding.js
+++ b/lib/binding.js
@@ -165,6 +165,8 @@ function Binding(system) {
this.trackDescriptor(stderr);
}
+Binding.prototype.readFileSync = path => require('fs').readFileSync(path).toString('utf8');
+
/**
* Get the file system underlying this binding.
* @return {FileSystem} The underlying file system.
-1
View File
@@ -50,7 +50,6 @@
"@types/react": "^18",
"@types/react-dom": "^18",
"jest-haste-map@^29.7.0": "patch:jest-haste-map@npm%3A29.7.0#./.yarn/patches/jest-haste-map-npm-29.7.0-e3be419eff.patch",
"mock-fs@^5.2.0": "patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch",
"@material-ui/pickers@^3.3.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch",
"@material-ui/pickers@^3.2.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch"
},
+2 -2
View File
@@ -38,8 +38,8 @@
"zod": "^3.22.4"
},
"devDependencies": {
"@backstage/cli": "workspace:^",
"mock-fs": "^5.2.0"
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^"
},
"files": [
"dist"
@@ -15,15 +15,17 @@
*/
import { isMonoRepo } from './isMonoRepo';
import mockFs from 'mock-fs';
import { createMockDirectory } from '@backstage/backend-test-utils';
const mockDir = createMockDirectory();
jest.mock('../paths', () => ({
paths: { resolveTargetRoot: (...args: string[]) => mockDir.resolve(...args) },
}));
describe('isMonoRepo', () => {
afterEach(() => {
mockFs.restore();
});
it('should detect a monorepo', async () => {
mockFs({
mockDir.setContent({
'package.json': JSON.stringify({
name: 'foo',
workspaces: {
@@ -35,7 +37,7 @@ describe('isMonoRepo', () => {
});
it('should detect a non- monorepo', async () => {
mockFs({
mockDir.setContent({
'package.json': JSON.stringify({
name: 'foo',
}),
@@ -44,7 +46,7 @@ describe('isMonoRepo', () => {
});
it('should return false if package.json is missing', async () => {
mockFs({});
mockDir.setContent({});
await expect(isMonoRepo()).resolves.toBe(false);
});
});
-1
View File
@@ -54,7 +54,6 @@
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@types/json-schema-merge-allof": "^0.6.0",
"@types/mock-fs": "^4.10.0",
"msw": "^1.0.0",
"zen-observable": "^0.10.0"
},
-1
View File
@@ -49,7 +49,6 @@
"@types/inquirer": "^8.1.3",
"@types/node": "^18.17.8",
"@types/recursive-readdir": "^2.2.0",
"mock-fs": "^5.2.0",
"nodemon": "^3.0.1",
"ts-node": "^10.0.0"
},
+2 -3
View File
@@ -63,13 +63,12 @@
"yaml-diff-patch": "^2.0.0"
},
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"@backstage/types": "workspace:^",
"@types/is-glob": "^4.0.2",
"@types/mock-fs": "^4.13.0",
"@types/node": "^18.17.8",
"@types/prettier": "^2.0.0",
"mock-fs": "^5.2.0"
"@types/prettier": "^2.0.0"
},
"peerDependencies": {
"@microsoft/api-extractor-model": "*",
@@ -14,8 +14,8 @@
* limitations under the License.
*/
import mockFs from 'mock-fs';
import { normalize, resolve as resolvePath } from 'path';
import { createMockDirectory } from '@backstage/backend-test-utils';
import { normalize } from 'path';
import * as pathsLib from '../../lib/paths';
import {
@@ -47,38 +47,38 @@ jest.mock('./api-extractor', () => ({
const projectPaths = pathsLib.paths;
const mockDir = createMockDirectory();
jest.spyOn(projectPaths, 'targetRoot', 'get').mockReturnValue(mockDir.path);
jest
.spyOn(projectPaths, 'targetRoot', 'get')
.mockReturnValue(normalize('/root'));
jest.spyOn(projectPaths, 'resolveTargetRoot').mockImplementation((...path) => {
return resolvePath(normalize('/root'), ...path);
});
.spyOn(projectPaths, 'resolveTargetRoot')
.mockImplementation((...path) => mockDir.resolve(...path));
jest.spyOn(PackageGraph, 'listTargetPackages').mockResolvedValue([
{
dir: '/root/packages/package-a',
dir: normalize(mockDir.resolve('packages/package-a')),
packageJson: { name: 'package-a', version: '0.0.0' },
},
{
dir: '/root/packages/package-b',
dir: normalize(mockDir.resolve('packages/package-b')),
packageJson: { name: 'package-b', version: '0.0.0' },
},
{
dir: '/root/plugins/plugin-a',
dir: normalize(mockDir.resolve('plugins/plugin-a')),
packageJson: { name: 'plugin-a', version: '0.0.0' },
},
{
dir: '/root/plugins/plugin-b',
dir: normalize(mockDir.resolve('plugins/plugin-b')),
packageJson: { name: 'plugin-b', version: '0.0.0' },
},
{
dir: '/root/plugins/plugin-c',
dir: normalize(mockDir.resolve('plugins/plugin-c')),
packageJson: { name: 'plugin-c', version: '0.0.0' },
},
]);
describe('buildApiReports', () => {
beforeEach(() => {
mockFs({
mockDir.setContent({
[projectPaths.targetRoot]: {
'package.json': JSON.stringify({
workspaces: { packages: ['packages/*', 'plugins/*'] },
@@ -109,7 +109,6 @@ describe('buildApiReports', () => {
});
afterEach(() => {
mockFs.restore();
jest.clearAllMocks();
});
@@ -138,11 +137,11 @@ describe('buildApiReports', () => {
normalize('plugins/plugin-b'),
normalize('plugins/plugin-c'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [
@@ -171,11 +170,11 @@ describe('buildApiReports', () => {
expect(runApiExtraction).toHaveBeenCalledWith({
packageDirs: [normalize('packages/package-a')],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [normalize('packages/package-a')],
@@ -200,11 +199,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [
@@ -232,11 +231,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [
@@ -267,11 +266,11 @@ describe('buildApiReports', () => {
normalize('packages/package-b'),
normalize('plugins/plugin-a'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [
@@ -305,11 +304,11 @@ describe('buildApiReports', () => {
normalize('plugins/plugin-b'),
normalize('plugins/plugin-c'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [
@@ -338,11 +337,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: ['packages/package-a'],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
@@ -359,11 +358,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: ['packages/package-a', 'packages/package-b'],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
@@ -380,11 +379,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: ['packages/package-a', 'packages/package-b'],
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
});
@@ -402,11 +401,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: true,
omitMessages: [],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
});
@@ -424,11 +423,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: ['ae-missing-release-tag'],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
@@ -445,11 +444,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: ['ae-missing-release-tag', 'ae-missing-annotations'],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
@@ -466,11 +465,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: ['ae-missing-release-tag', 'ae-missing-annotations'],
isLocalBuild: true,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
});
});
@@ -488,11 +487,11 @@ describe('buildApiReports', () => {
normalize('packages/package-a'),
normalize('packages/package-b'),
],
tsconfigFilePath: resolvePath('/root/tsconfig.json'),
tsconfigFilePath: mockDir.resolve('tsconfig.json'),
allowWarnings: [],
omitMessages: [],
isLocalBuild: false,
outputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
});
expect(runCliExtraction).toHaveBeenCalledWith({
packageDirs: [
@@ -513,8 +512,8 @@ describe('buildApiReports', () => {
await buildApiReports(paths, opts);
expect(buildDocs).toHaveBeenCalledWith({
inputDir: resolvePath('/root/node_modules/.cache/api-extractor'),
outputDir: resolvePath('/root/docs/reference'),
inputDir: mockDir.resolve('node_modules/.cache/api-extractor'),
outputDir: mockDir.resolve('docs/reference'),
});
});
});
@@ -44,7 +44,6 @@
"devDependencies": {
"@backstage/backend-test-utils": "workspace:^",
"@backstage/cli": "workspace:^",
"mock-fs": "^5.2.0",
"msw": "^1.0.0"
},
"files": [
@@ -19,28 +19,16 @@ import { getVoidLogger } from '@backstage/backend-common';
import { UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import mockFs from 'mock-fs';
import os from 'os';
import { readFile, writeFile, createWriteStream } from 'fs-extra';
import {
createMockDirectory,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { examples } from './confluenceToMarkdown.examples';
import yaml from 'yaml';
import { ActionContext } from '@backstage/plugin-scaffolder-node';
jest.mock('fs-extra', () => ({
mkdirSync: jest.fn(),
readFile: jest.fn().mockResolvedValue('File contents'),
writeFile: jest.fn().mockImplementation(() => {
return Promise.resolve();
}),
outputFile: jest.fn(),
openSync: jest.fn(),
createWriteStream: jest.fn().mockReturnValue(new PassThrough()),
ensureDir: jest.fn(),
}));
describe('confluence:transform:markdown examples', () => {
const baseUrl = `https://confluence.example.com`;
const worker = setupServer();
@@ -72,7 +60,8 @@ describe('confluence:transform:markdown examples', () => {
const logger = getVoidLogger();
jest.spyOn(logger, 'info');
const mockTmpDir = os.tmpdir();
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
beforeEach(() => {
reader = {
@@ -84,17 +73,18 @@ describe('confluence:transform:markdown examples', () => {
};
mockContext = {
input: yaml.parse(examples[0].example).steps[0].input,
workspacePath: '/tmp',
workspacePath,
logger,
logStream: new PassThrough(),
output: jest.fn(),
createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir),
createTemporaryDirectory: jest.fn(),
};
mockFs({ [`${mockTmpDir}/src/docs`]: {} });
mockDir.setContent({ 'workspace/mkdocs.yml': 'File contents' });
});
afterEach(() => {
jest.clearAllMocks();
mockFs.restore();
});
it('should call confluence to markdown action successfully with results array', async () => {
@@ -155,8 +145,10 @@ describe('confluence:transform:markdown examples', () => {
`Fetching the mkdocs.yml catalog from https://github.com/organization-name/repo-name/blob/main/mkdocs.yml`,
);
expect(logger.info).toHaveBeenCalledTimes(5);
expect(createWriteStream).toHaveBeenCalledTimes(1);
expect(readFile).toHaveBeenCalledTimes(1);
expect(writeFile).toHaveBeenCalledTimes(1);
expect(mockDir.content({ path: 'workspace/docs' })).toEqual({
img: { 'testing.pdf': Buffer.from('hello') },
'Page-Title.md': 'hello world',
});
});
});
@@ -19,26 +19,14 @@ import { getVoidLogger } from '@backstage/backend-common';
import { UrlReader } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import { ScmIntegrations } from '@backstage/integration';
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import mockFs from 'mock-fs';
import os from 'os';
import {
createMockDirectory,
setupRequestMockHandlers,
} from '@backstage/backend-test-utils';
import type { ActionContext } from '@backstage/plugin-scaffolder-node';
import { readFile, writeFile, createWriteStream } from 'fs-extra';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
jest.mock('fs-extra', () => ({
mkdirSync: jest.fn(),
readFile: jest.fn().mockResolvedValue('File contents'),
writeFile: jest.fn().mockImplementation(() => {
return Promise.resolve();
}),
outputFile: jest.fn(),
openSync: jest.fn(),
createWriteStream: jest.fn().mockReturnValue(new PassThrough()),
ensureDir: jest.fn(),
}));
describe('confluence:transform:markdown', () => {
const baseUrl = `https://nodomain.confluence.com`;
const worker = setupServer();
@@ -70,7 +58,8 @@ describe('confluence:transform:markdown', () => {
const logger = getVoidLogger();
jest.spyOn(logger, 'info');
const mockTmpDir = os.tmpdir();
const mockDir = createMockDirectory();
const workspacePath = mockDir.resolve('workspace');
beforeEach(() => {
reader = {
@@ -85,19 +74,21 @@ describe('confluence:transform:markdown', () => {
confluenceUrls: [
'https://nodomain.confluence.com/display/testing/mkdocs',
],
repoUrl: 'https://notreal.github.com/space/backstage/mkdocs.yml',
repoUrl:
'https://notreal.github.com/space/backstage/blob/main/mkdocs.yml',
},
workspacePath: '/tmp',
workspacePath,
logger,
logStream: new PassThrough(),
output: jest.fn(),
createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir),
createTemporaryDirectory: jest.fn(),
};
mockFs({ [`${mockTmpDir}/src/docs`]: {} });
mockDir.setContent({ 'workspace/mkdocs.yml': 'File contents' });
});
afterEach(() => {
jest.clearAllMocks();
mockFs.restore();
});
it('should call confluence to markdown action successfully with results array', async () => {
@@ -155,12 +146,14 @@ describe('confluence:transform:markdown', () => {
await action.handler(mockContext);
expect(logger.info).toHaveBeenCalledWith(
`Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`,
`Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/blob/main/mkdocs.yml`,
);
expect(logger.info).toHaveBeenCalledTimes(5);
expect(createWriteStream).toHaveBeenCalledTimes(1);
expect(readFile).toHaveBeenCalledTimes(1);
expect(writeFile).toHaveBeenCalledTimes(1);
expect(mockDir.content({ path: 'workspace/docs' })).toEqual({
img: { 'testing.pdf': Buffer.from('hello') },
'mkdocs.md': 'hello world',
});
});
it('should call confluence to markdown action successfully with empty results array', async () => {
@@ -202,13 +195,13 @@ describe('confluence:transform:markdown', () => {
await action.handler(mockContext);
expect(logger.info).toHaveBeenCalledWith(
`Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`,
`Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/blob/main/mkdocs.yml`,
);
expect(logger.info).toHaveBeenCalledTimes(5);
expect(createWriteStream).not.toHaveBeenCalled();
expect(readFile).toHaveBeenCalledTimes(1);
expect(writeFile).toHaveBeenCalledTimes(1);
expect(mockDir.content({ path: 'workspace/docs' })).toEqual({
'mkdocs.md': 'hello world',
});
});
it('should fail on the first fetch call with response.ok set to false', async () => {
+2 -29
View File
@@ -3520,6 +3520,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@backstage/cli-node@workspace:packages/cli-node"
dependencies:
"@backstage/backend-test-utils": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/cli-common": "workspace:^"
"@backstage/errors": "workspace:^"
@@ -3527,7 +3528,6 @@ __metadata:
"@manypkg/get-packages": ^1.1.3
"@yarnpkg/parsers": ^3.0.0-rc.4
fs-extra: 10.1.0
mock-fs: ^5.2.0
semver: ^7.5.3
zod: ^3.22.4
languageName: unknown
@@ -3725,7 +3725,6 @@ __metadata:
"@backstage/types": "workspace:^"
"@types/json-schema": ^7.0.6
"@types/json-schema-merge-allof": ^0.6.0
"@types/mock-fs": ^4.10.0
ajv: ^8.10.0
chokidar: ^3.5.2
fs-extra: 10.1.0
@@ -4029,7 +4028,6 @@ __metadata:
fs-extra: 10.1.0
handlebars: ^4.7.3
inquirer: ^8.2.0
mock-fs: ^5.2.0
nodemon: ^3.0.1
ora: ^5.3.0
recursive-readdir: ^2.2.2
@@ -8168,7 +8166,6 @@ __metadata:
"@backstage/plugin-scaffolder-node": "workspace:^"
fs-extra: 10.1.0
git-url-parse: ^13.1.0
mock-fs: ^5.2.0
msw: ^1.0.0
node-fetch: ^2.6.7
node-html-markdown: ^1.3.0
@@ -9587,6 +9584,7 @@ __metadata:
"@apidevtools/swagger-parser": ^10.1.0
"@apisyouwonthate/style-guide": ^1.4.0
"@backstage/backend-common": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/catalog-model": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/cli-common": "workspace:^"
@@ -9605,7 +9603,6 @@ __metadata:
"@stoplight/spectral-runtime": ^1.1.2
"@stoplight/types": ^14.0.0
"@types/is-glob": ^4.0.2
"@types/mock-fs": ^4.13.0
"@types/node": ^18.17.8
"@types/prettier": ^2.0.0
chalk: ^4.0.0
@@ -9617,7 +9614,6 @@ __metadata:
js-yaml: ^4.1.0
lodash: ^4.17.21
minimatch: ^5.1.1
mock-fs: ^5.2.0
p-limit: ^3.0.2
portfinder: ^1.0.32
ts-node: ^10.0.0
@@ -18318,15 +18314,6 @@ __metadata:
languageName: node
linkType: hard
"@types/mock-fs@npm:^4.10.0, @types/mock-fs@npm:^4.13.0":
version: 4.13.4
resolution: "@types/mock-fs@npm:4.13.4"
dependencies:
"@types/node": "*"
checksum: 9f886d67186da2e5cdabc32835c49ede9749146768e22c7f0f2548587e5201235d3726adef917fa6efbb9b73ad51278858a5d34e7cdc0a4b413c8396b37c350d
languageName: node
linkType: hard
"@types/morgan@npm:^1.9.0":
version: 1.9.9
resolution: "@types/morgan@npm:1.9.9"
@@ -34353,20 +34340,6 @@ __metadata:
languageName: node
linkType: hard
"mock-fs@npm:5.2.0":
version: 5.2.0
resolution: "mock-fs@npm:5.2.0"
checksum: c25835247bd26fa4e0189addd61f98973f61a72741e4d2a5694b143a2069b84978443a7ac0fdb1a71aead99273ec22ff4e9c968de11bbd076db020264c5b8312
languageName: node
linkType: hard
"mock-fs@patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch::locator=root%40workspace%3A.":
version: 5.2.0
resolution: "mock-fs@patch:mock-fs@npm%3A5.2.0#./.yarn/patches/mock-fs-npm-5.2.0-5103a7b507.patch::version=5.2.0&hash=920f99&locator=root%40workspace%3A."
checksum: 84e306d7a798735ed8ee110b60ed8fc0b5db451df3a990e2a01432fac99decd15e5534c92d87f8067425329dbd9bf5c12e2673d3d770fb40f2936810e02bb07a
languageName: node
linkType: hard
"mock-socket@npm:^9.3.0":
version: 9.3.1
resolution: "mock-socket@npm:9.3.1"