From 7c3ce9ffe5a6a2d7d8b7605d72fb857e94f0adf6 Mon Sep 17 00:00:00 2001 From: Kilian Panot Date: Fri, 29 Mar 2024 16:05:50 +0900 Subject: [PATCH] fix(ama-sdk): support of URL as spec-path input --- .yarnrc.yml | 12 +- packages/@ama-sdk/create/src/index.ts | 7 +- .../code-generator/code-generator.ts | 8 +- .../schematics/typescript/core/index.spec.ts | 22 ++ .../schematics/typescript/core/index.ts | 76 +++++-- .../templates/base/openapitools.json.template | 2 +- .../schematics/testing/MOCK_swagger.json | 209 ++++++++++++++++++ packages/@o3r/core/package.json | 4 +- yarn.lock | 166 -------------- 9 files changed, 301 insertions(+), 205 deletions(-) create mode 100644 packages/@ama-sdk/schematics/testing/MOCK_swagger.json diff --git a/.yarnrc.yml b/.yarnrc.yml index 2d3bd10eb3..bef24c8025 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -21,12 +21,12 @@ packageExtensions: "@types/node": ^20.0.0 esbuild: ~0.20.0 eslint: ^8.57.0 - nx: ~18.1.0 + nx: ~18.2.0 rxjs: ^7.8.1 typescript: ~5.4.2 "@nx/devkit@^18.0.0": dependencies: - nx: ~18.1.0 + nx: ~18.2.0 typescript: ~5.4.2 "@nx/eslint-plugin@^18.0.0": dependencies: @@ -34,20 +34,20 @@ packageExtensions: eslint: ^8.57.0 "@nx/eslint@^18.0.0": dependencies: - nx: ~18.1.0 + nx: ~18.2.0 "@nx/jest@^18.0.0": dependencies: - nx: ~18.1.0 + nx: ~18.2.0 typescript: ~5.4.2 "@nx/js@^18.0.0": dependencies: "@types/node": ^20.0.0 - nx: ~18.1.0 + nx: ~18.2.0 typescript: ~5.4.2 "@nx/webpack@^18.0.0": dependencies: "@types/node": ^20.0.0 - nx: ~18.1.0 + nx: ~18.2.0 typescript: ~5.4.2 "jsonc-eslint-parser@*": dependencies: diff --git a/packages/@ama-sdk/create/src/index.ts b/packages/@ama-sdk/create/src/index.ts index bfee9de3ae..dc7d63b741 100644 --- a/packages/@ama-sdk/create/src/index.ts +++ b/packages/@ama-sdk/create/src/index.ts @@ -2,8 +2,7 @@ /* eslint-disable no-console */ import { execSync, spawnSync } from 'node:child_process'; -import * as url from 'node:url'; -import { dirname, join, relative, resolve } from 'node:path'; +import { dirname, join, parse, relative, resolve } from 'node:path'; import * as minimist from 'minimist'; const packageManagerEnv = process.env.npm_config_user_agent?.split('/')[0]; @@ -73,7 +72,7 @@ const schematicArgs = [ const resolveTargetDirectory = resolve(process.cwd(), targetDirectory); const run = () => { - const isSpecPathUrl = url.URL.canParse(argv['spec-path']); + const isSpecRelativePath = !!argv['spec-path'] && !parse(argv['spec-path']).root; const runner = process.platform === 'win32' ? `${packageManager}.cmd` : packageManager; const steps: { args: string[]; cwd?: string; runner?: string }[] = [ @@ -88,7 +87,7 @@ const run = () => { binPath, `${schematicsPackage}:typescript-core`, ...schematicArgs, - '--spec-path', isSpecPathUrl ? argv['spec-path'] : relative(resolveTargetDirectory, resolve(process.cwd(), argv['spec-path'])) + '--spec-path', isSpecRelativePath ? relative(resolveTargetDirectory, resolve(process.cwd(), argv['spec-path'])) : argv['spec-path'] ], cwd: resolveTargetDirectory }] : []) diff --git a/packages/@ama-sdk/schematics/schematics/code-generator/code-generator.ts b/packages/@ama-sdk/schematics/schematics/code-generator/code-generator.ts index 334520be3e..9980ab01cd 100644 --- a/packages/@ama-sdk/schematics/schematics/code-generator/code-generator.ts +++ b/packages/@ama-sdk/schematics/schematics/code-generator/code-generator.ts @@ -27,11 +27,11 @@ export type CodegenTaskOptions = { * As is, the CodeGenerator does not implement any actual code generation and needs to be extended to be functional * @see {@link OpenApiCliGenerator} */ -export class CodeGenerator { +export abstract class CodeGenerator { /** * Refers to the name the {@link Task} will be identified in a {@link Rule} ${@link SchematicContext} */ - protected generatorName = ''; + protected abstract generatorName: string; /** * Configure the code generation task @@ -73,9 +73,7 @@ export class CodeGenerator { /** * Returns the generator specific default options */ - protected getDefaultOptions(): T { - throw new Error('No implementation, please target an implementation'); - } + protected abstract getDefaultOptions(): T; /** * Returns the schematic that will run the code generator diff --git a/packages/@ama-sdk/schematics/schematics/typescript/core/index.spec.ts b/packages/@ama-sdk/schematics/schematics/typescript/core/index.spec.ts index d0fdcef16c..7628e47ee9 100644 --- a/packages/@ama-sdk/schematics/schematics/typescript/core/index.spec.ts +++ b/packages/@ama-sdk/schematics/schematics/typescript/core/index.spec.ts @@ -27,6 +27,28 @@ describe('Typescript Core Generator', () => { expect(tree.readContent('/readme.md')).toContain('Based on OpenAPI spec 1.0.0'); }); + it('should update openapitools file with yaml', async () => { + const runner = new SchematicTestRunner('@ama-sdk/schematics', collectionPath); + const tree = await runner.runSchematic('typescript-core', { + specPath: path.join(__dirname, '..', '..', '..', 'testing', 'MOCK_swagger.yaml') + }, baseTree); + const content: any = tree.readJson('/openapitools.json'); + + expect(content['generator-cli'].generators['test-sdk-sdk'].inputSpec.endsWith('openapi.yaml')).toBe(true); + expect(tree.exists('/openapi.yaml')).toBe(true); + }); + + it('should update openapitools file with json', async () => { + const runner = new SchematicTestRunner('@ama-sdk/schematics', collectionPath); + const tree = await runner.runSchematic('typescript-core', { + specPath: path.join(__dirname, '..', '..', '..', 'testing', 'MOCK_swagger.json') + }, baseTree); + const content: any = tree.readJson('/openapitools.json'); + + expect(content['generator-cli'].generators['test-sdk-sdk'].inputSpec.endsWith('openapi.json')).toBe(true); + expect(tree.exists('/openapi.json')).toBe(true); + }); + it('should clean previous install', async () => { baseTree.create('/src/api/my-apy/test.ts', 'fake module'); const runner = new SchematicTestRunner('@ama-sdk/schematics', collectionPath); diff --git a/packages/@ama-sdk/schematics/schematics/typescript/core/index.ts b/packages/@ama-sdk/schematics/schematics/typescript/core/index.ts index 3f2498ca8e..2da900776a 100644 --- a/packages/@ama-sdk/schematics/schematics/typescript/core/index.ts +++ b/packages/@ama-sdk/schematics/schematics/typescript/core/index.ts @@ -12,8 +12,9 @@ import { url } from '@angular-devkit/schematics'; import type { Operation, PathObject } from '@ama-sdk/core'; -import { readFileSync } from 'node:fs'; +import { existsSync, readFileSync } from 'node:fs'; import * as path from 'node:path'; +import { URL } from 'node:url'; import * as semver from 'semver'; import * as sway from 'sway'; @@ -24,6 +25,7 @@ import { OpenApiCliGenerator } from '../../code-generator/open-api-cli-generator const JAVA_OPTIONS = ['specPath', 'specConfigPath', 'globalProperty', 'outputPath']; const OPEN_API_TOOLS_OPTIONS = ['generatorName', 'output', 'inputSpec', 'config', 'globalProperty']; +const LOCAL_SPEC_FILENAME = 'openapi'; interface OpenApiToolsGenerator { /** Location of the OpenAPI spec, as URL or file */ @@ -166,14 +168,41 @@ const getGeneratorOptions = (tree: Tree, context: SchematicContext, options: NgG */ function ngGenerateTypescriptSDKFn(options: NgGenerateTypescriptSDKCoreSchematicsSchema): Rule { - return (tree, context) => { + return async (tree, context) => { const targetPath = options.directory || ''; const generatorOptions = getGeneratorOptions(tree, context, options); + let isJson = false; + let specDefaultPath = path.posix.join(targetPath, `${LOCAL_SPEC_FILENAME}.json`); + specDefaultPath = existsSync(specDefaultPath) ? specDefaultPath : path.posix.join(targetPath, `${LOCAL_SPEC_FILENAME}.yaml`); + generatorOptions.specPath ||= specDefaultPath; + + let specContent!: string; + if (URL.canParse(generatorOptions.specPath) && (new URL(generatorOptions.specPath)).protocol.startsWith('http')) { + specContent = await (await fetch(generatorOptions.specPath)).text(); + } else { + specContent = readFileSync(generatorOptions.specPath, {encoding: 'utf-8'}).toString(); + } + + try { + JSON.parse(specContent); + isJson = true; + } catch (e) { + isJson = false; + } + const defaultFileName = `${LOCAL_SPEC_FILENAME}.${isJson ? 'json' : 'yaml'}`; + specDefaultPath = path.posix.join(targetPath, defaultFileName); + generatorOptions.specPath = specDefaultPath; + + if (tree.exists(specDefaultPath)) { + tree.overwrite(specDefaultPath, specContent); + } else { + tree.create(specDefaultPath, specContent); + } /** * rule to clear previous SDK generation */ - const clearGeneratedCode = () => { + const clearGeneratedCode: Rule = () => { treeGlob(tree, path.posix.join(targetPath, 'src', 'api', '**', '*.ts')).forEach((file) => tree.delete(file)); treeGlob(tree, path.posix.join(targetPath, 'src', 'models', 'base', '**', '!(index).ts')).forEach((file) => tree.delete(file)); treeGlob(tree, path.posix.join(targetPath, 'src', 'spec', '!(operation-adapter|index).ts')).forEach((file) => tree.delete(file)); @@ -181,9 +210,8 @@ function ngGenerateTypescriptSDKFn(options: NgGenerateTypescriptSDKCoreSchematic }; const generateOperationFinder = async (): Promise => { - const swayOptions = { - definition: path.resolve(generatorOptions.specPath!) - }; + const definition: any = isJson ? tree.readJson(specDefaultPath) : (await import('js-yaml')).load(tree.readText(specDefaultPath)); + const swayOptions = { definition }; const swayApi = await sway.create(swayOptions); const extraction = swayApi.getPaths().map((obj) => ({ path: obj.path, @@ -196,7 +224,7 @@ function ngGenerateTypescriptSDKFn(options: NgGenerateTypescriptSDKCoreSchematic /** * rule to update readme and generate mandatory code source */ - const generateSource = async () => { + const generateSource: Rule = async () => { const pathObjects = await generateOperationFinder(); const swayOperationAdapter = `[${pathObjects.map((pathObj) => getPathObjectTemplate(pathObj)).join(',')}]`; @@ -212,40 +240,46 @@ function ngGenerateTypescriptSDKFn(options: NgGenerateTypescriptSDKCoreSchematic }; /** - * Update local swagger spec file + * Update readme version */ - const updateSpec = () => { + const updateSpecVersion: Rule = () => { const readmeFile = path.posix.join(targetPath, 'readme.md'); - const specContent = readFileSync(generatorOptions.specPath!).toString(); if (tree.exists(readmeFile)) { const specVersion = /version: *([0-9]+\.[0-9]+\.[0-9]+(?:-[^ ]+)?)/.exec(specContent); if (specVersion) { const readmeContent = tree.read(readmeFile)!.toString('utf8'); - tree.overwrite(readmeFile, readmeContent.replace(/Based on (OpenAPI|Swagger) spec .*/i, `Based on $1 spec ${specVersion[1]}`)); + tree.overwrite(readmeFile, readmeContent.replace(/Based on (.+) spec .*/i, `Based on $1 spec ${specVersion[1]}`)); } } + return tree; + }; - if (tree.exists(path.posix.join(targetPath, 'swagger-spec.yaml'))) { - tree.overwrite(path.posix.join(targetPath, 'swagger-spec.yaml'), specContent); - } else { - tree.create(path.posix.join(targetPath, 'swagger-spec.yaml'), specContent); + const adaptDefaultFile: Rule = () => { + const openApiToolsPath = path.posix.join(targetPath, 'openapitools.json'); + if (tree.exists(openApiToolsPath)) { + const openApiTools: any = tree.readJson(openApiToolsPath); + Object.keys(openApiTools['generator-cli']?.generators) + .filter((key) => !openApiTools['generator-cli'].generators[key].inputSpec) + .forEach((key) => openApiTools['generator-cli'].generators[key].inputSpec = `./${defaultFileName}`); + tree.overwrite(openApiToolsPath, JSON.stringify(openApiTools, null, 2)); } - return () => tree; + return tree; }; - const runGeneratorRule = () => { - return () => (new OpenApiCliGenerator(options)).getGeneratorRunSchematic( + const runGeneratorRule: Rule = () => { + return (new OpenApiCliGenerator(options)).getGeneratorRunSchematic( (options.generatorKey && JAVA_OPTIONS.every((optionName) => options[optionName] === undefined)) ? - {generatorKey: options.generatorKey, ...(options.openapiNormalizer ? {openapiNormalizer: options.openapiNormalizer} : {})} : generatorOptions, - {rootDirectory: options.directory || undefined} + { generatorKey: options.generatorKey, ...(options.openapiNormalizer ? { openapiNormalizer: options.openapiNormalizer } : {}) } : generatorOptions, + { rootDirectory: options.directory || undefined } ); }; return chain([ clearGeneratedCode, generateSource, - updateSpec, + updateSpecVersion, + adaptDefaultFile, runGeneratorRule ]); }; diff --git a/packages/@ama-sdk/schematics/schematics/typescript/shell/templates/base/openapitools.json.template b/packages/@ama-sdk/schematics/schematics/typescript/shell/templates/base/openapitools.json.template index 4ea672f898..5ea87905b0 100644 --- a/packages/@ama-sdk/schematics/schematics/typescript/shell/templates/base/openapitools.json.template +++ b/packages/@ama-sdk/schematics/schematics/typescript/shell/templates/base/openapitools.json.template @@ -8,7 +8,7 @@ "<%=projectName%>-<%=projectPackageName%>": { "generatorName": "typescriptFetch", "output": ".", - "inputSpec": "./swagger-spec.yaml" + "inputSpec": "" } } } diff --git a/packages/@ama-sdk/schematics/testing/MOCK_swagger.json b/packages/@ama-sdk/schematics/testing/MOCK_swagger.json new file mode 100644 index 0000000000..17440f68ab --- /dev/null +++ b/packages/@ama-sdk/schematics/testing/MOCK_swagger.json @@ -0,0 +1,209 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Swagger Petstore", + "license": { + "name": "MIT" + } + }, + "host": "petstore.swagger.io", + "basePath": "/v1", + "schemes": [ + "http" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/pets": { + "get": { + "summary": "List all pets", + "operationId": "listPets", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "How many items to return at one time (max 100)", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "A paged array of pets", + "headers": { + "x-next": { + "type": "string", + "description": "A link to the next page of responses" + } + }, + "schema": { + "$ref": "#/definitions/Pets" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + }, + "post": { + "summary": "Create a pet", + "operationId": "createPets", + "tags": [ + "pets" + ], + "responses": { + "200": { + "description": "The created pet", + "schema": { + "$ref": "#/definitions/Pet" + } + }, + "204": { + "description": "Null response" + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + }, + "put": { + "summary": "Invalid verb", + "operationId": "createPetsIncorrectly", + "tags": [ + "pets" + ], + "responses": { + "404": { + "description": "error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/pets/{petId}": { + "get": { + "summary": "Info for a specific pet", + "operationId": "showPetById", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "required": true, + "description": "The id of the pet to retrieve", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Expected response to a valid request", + "schema": { + "$ref": "#/definitions/Pets" + } + }, + "201": { + "description": "Expected response to a valid request", + "schema": { + "$ref": "#/definitions/Pets" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + }, + "delete": { + "summary": "delete a specific pet", + "operationId": "deletePetById", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "required": true, + "description": "The id of the pet to retrieve", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Null response" + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + } + }, + "definitions": { + "Pet": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "Pets": { + "type": "array", + "items": { + "$ref": "#/definitions/Pet" + } + }, + "Error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + } + } + } +} diff --git a/packages/@o3r/core/package.json b/packages/@o3r/core/package.json index 72fcf70416..c976525062 100644 --- a/packages/@o3r/core/package.json +++ b/packages/@o3r/core/package.json @@ -152,12 +152,12 @@ "@ngrx/store-devtools": "~17.1.0", "@o3r/store-sync": "workspace:^", "@types/jest": "~29.5.2", - "nx": "~18.1.0", + "nx": "~18.2.0", "@typescript-eslint/parser": "^7.2.0", "@stylistic/eslint-plugin-ts": "^1.5.4", "cpy-cli": "^5.0.0", "eslint": "^8.57.0", - "@nx/eslint-plugin": "~18.1.0", + "@nx/eslint-plugin": "~18.2.0", "jsonc-eslint-parser": "~2.4.0", "eslint-import-resolver-node": "^0.3.9", "eslint-plugin-jest": "~27.9.0", diff --git a/yarn.lock b/yarn.lock index 88362fb76e..b157c902a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5826,18 +5826,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/tao@npm:18.1.2": - version: 18.1.2 - resolution: "@nrwl/tao@npm:18.1.2" - dependencies: - nx: "npm:18.1.2" - tslib: "npm:^2.3.0" - bin: - tao: index.js - checksum: 10/f0f8a565d7e521504b29352f97811b77362a5e0d8580657dd99dce49a1d2fc8fb2845d2c9bae3062c7fe1b678147c7225c379adc8d8e37e661a12e5beeb19b64 - languageName: node - linkType: hard - "@nrwl/tao@npm:18.2.1": version: 18.2.1 resolution: "@nrwl/tao@npm:18.2.1" @@ -6063,13 +6051,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-darwin-arm64@npm:18.1.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@nx/nx-darwin-arm64@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-darwin-arm64@npm:18.2.1" @@ -6077,13 +6058,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-darwin-x64@npm:18.1.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@nx/nx-darwin-x64@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-darwin-x64@npm:18.2.1" @@ -6091,13 +6065,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-freebsd-x64@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-freebsd-x64@npm:18.1.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@nx/nx-freebsd-x64@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-freebsd-x64@npm:18.2.1" @@ -6105,13 +6072,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:18.1.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@nx/nx-linux-arm-gnueabihf@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-linux-arm-gnueabihf@npm:18.2.1" @@ -6119,13 +6079,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-linux-arm64-gnu@npm:18.1.2" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@nx/nx-linux-arm64-gnu@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-linux-arm64-gnu@npm:18.2.1" @@ -6133,13 +6086,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-linux-arm64-musl@npm:18.1.2" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@nx/nx-linux-arm64-musl@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-linux-arm64-musl@npm:18.2.1" @@ -6147,13 +6093,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-linux-x64-gnu@npm:18.1.2" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@nx/nx-linux-x64-gnu@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-linux-x64-gnu@npm:18.2.1" @@ -6161,13 +6100,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-linux-x64-musl@npm:18.1.2" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@nx/nx-linux-x64-musl@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-linux-x64-musl@npm:18.2.1" @@ -6175,13 +6107,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-win32-arm64-msvc@npm:18.1.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@nx/nx-win32-arm64-msvc@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-win32-arm64-msvc@npm:18.2.1" @@ -6189,13 +6114,6 @@ __metadata: languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:18.1.2": - version: 18.1.2 - resolution: "@nx/nx-win32-x64-msvc@npm:18.1.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@nx/nx-win32-x64-msvc@npm:18.2.1": version: 18.2.1 resolution: "@nx/nx-win32-x64-msvc@npm:18.2.1" @@ -24169,90 +24087,6 @@ __metadata: languageName: node linkType: hard -"nx@npm:18.1.2, nx@npm:~18.1.0": - version: 18.1.2 - resolution: "nx@npm:18.1.2" - dependencies: - "@nrwl/tao": "npm:18.1.2" - "@nx/nx-darwin-arm64": "npm:18.1.2" - "@nx/nx-darwin-x64": "npm:18.1.2" - "@nx/nx-freebsd-x64": "npm:18.1.2" - "@nx/nx-linux-arm-gnueabihf": "npm:18.1.2" - "@nx/nx-linux-arm64-gnu": "npm:18.1.2" - "@nx/nx-linux-arm64-musl": "npm:18.1.2" - "@nx/nx-linux-x64-gnu": "npm:18.1.2" - "@nx/nx-linux-x64-musl": "npm:18.1.2" - "@nx/nx-win32-arm64-msvc": "npm:18.1.2" - "@nx/nx-win32-x64-msvc": "npm:18.1.2" - "@yarnpkg/lockfile": "npm:^1.1.0" - "@yarnpkg/parsers": "npm:3.0.0-rc.46" - "@zkochan/js-yaml": "npm:0.0.6" - axios: "npm:^1.6.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:3.1.0" - cli-spinners: "npm:2.6.1" - cliui: "npm:^8.0.1" - dotenv: "npm:~16.3.1" - dotenv-expand: "npm:~10.0.0" - enquirer: "npm:~2.3.6" - figures: "npm:3.2.0" - flat: "npm:^5.0.2" - fs-extra: "npm:^11.1.0" - ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" - js-yaml: "npm:4.1.0" - jsonc-parser: "npm:3.2.0" - lines-and-columns: "npm:~2.0.3" - minimatch: "npm:9.0.3" - node-machine-id: "npm:1.1.12" - npm-run-path: "npm:^4.0.1" - open: "npm:^8.4.0" - ora: "npm:5.3.0" - semver: "npm:^7.5.3" - string-width: "npm:^4.2.3" - strong-log-transformer: "npm:^2.1.0" - tar-stream: "npm:~2.2.0" - tmp: "npm:~0.2.1" - tsconfig-paths: "npm:^4.1.2" - tslib: "npm:^2.3.0" - yargs: "npm:^17.6.2" - yargs-parser: "npm:21.1.1" - peerDependencies: - "@swc-node/register": ^1.8.0 - "@swc/core": ^1.3.85 - dependenciesMeta: - "@nx/nx-darwin-arm64": - optional: true - "@nx/nx-darwin-x64": - optional: true - "@nx/nx-freebsd-x64": - optional: true - "@nx/nx-linux-arm-gnueabihf": - optional: true - "@nx/nx-linux-arm64-gnu": - optional: true - "@nx/nx-linux-arm64-musl": - optional: true - "@nx/nx-linux-x64-gnu": - optional: true - "@nx/nx-linux-x64-musl": - optional: true - "@nx/nx-win32-arm64-msvc": - optional: true - "@nx/nx-win32-x64-msvc": - optional: true - peerDependenciesMeta: - "@swc-node/register": - optional: true - "@swc/core": - optional: true - bin: - nx: bin/nx.js - nx-cloud: bin/nx-cloud.js - checksum: 10/9abb4d5a2cb105e25dc52a477be1f61ba94abd8795a8faad4099dde50c3c79ef158a722242ceaed21294a69ab8ee98bf77b98593891e0455bd29ad8da45305f4 - languageName: node - linkType: hard - "nx@npm:18.2.1, nx@npm:~18.2.0": version: 18.2.1 resolution: "nx@npm:18.2.1"