From b240bbae3fb4d08e74f83be31278e08c023df0e1 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 18 Dec 2024 17:11:09 +0100 Subject: [PATCH 1/3] wip --- .../fixtures/basic-nx-workspace.ts | 3 +- e2e/nx-verdaccio-e2e/project.json | 11 +- e2e/nx-verdaccio-e2e/setup/setup.ts | 85 +- .../plugin-create-nodes.e2e.test.ts.snap | 78 + .../test/plugin-create-nodes.e2e.test.ts | 517 ++- nx.json | 6 +- package-lock.json | 2929 +++++++++++------ projects/nx-verdaccio/package.json | 58 +- projects/nx-verdaccio/project.json | 58 - .../src/plugin/nx-verdaccio.plugin.ts | 45 +- .../nx-verdaccio/src/plugin/project-config.ts | 39 +- 11 files changed, 2369 insertions(+), 1460 deletions(-) delete mode 100644 projects/nx-verdaccio/project.json diff --git a/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts b/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts index 5b5d71d7..7ea8c55b 100644 --- a/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts +++ b/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts @@ -1,7 +1,6 @@ import { join } from 'node:path'; -export const REPO_NAME = 'nx-ts-repo'; +export const REPO_NAME = '__nx-ts-repo__'; export const envRoot = `tmp/environments/${process.env['NX_TASK_TARGET_PROJECT']}`; -export const workspaceRoot = join(envRoot, '__test__', REPO_NAME); export const projectName = 'pkg'; export const e2eProjectName = 'pkg-e2e'; diff --git a/e2e/nx-verdaccio-e2e/project.json b/e2e/nx-verdaccio-e2e/project.json index fbcbc683..4fbe0a24 100644 --- a/e2e/nx-verdaccio-e2e/project.json +++ b/e2e/nx-verdaccio-e2e/project.json @@ -4,10 +4,17 @@ "sourceRoot": "projects/nx-verdaccio-e2e/test", "projectType": "application", "tags": ["type:e2e", "type:e2e-vi", "npm-env"], - "implicitDependencies": ["nx-verdaccio"], + "implicitDependencies": ["@push-based/nx-verdaccio"], "targets": { "lint": {}, - "e2e": { + "nxv-env-setup": { + "cache": false, + "options": { + "skipInstall": true, + "postScript": "npx tsx --tsconfig e2e/nx-verdaccio-e2e/tsconfig.spec.json e2e/nx-verdaccio-e2e/setup/exec-global-setup.ts" + } + }, + "_e2e": { "executor": "@nx/vite:test", "inputs": ["default", "^production"], "outputs": ["{options.reportsDirectory}"], diff --git a/e2e/nx-verdaccio-e2e/setup/setup.ts b/e2e/nx-verdaccio-e2e/setup/setup.ts index 0ce1d53c..381a00ac 100644 --- a/e2e/nx-verdaccio-e2e/setup/setup.ts +++ b/e2e/nx-verdaccio-e2e/setup/setup.ts @@ -5,26 +5,24 @@ import { objectToCliArgs, updateJson, } from '@push-based/test-utils'; -import { dirname, join } from 'node:path'; -import { copyFile, mkdir } from 'node:fs/promises'; -import { - logger, - NxJsonConfiguration, - PluginConfiguration, - TargetConfiguration, -} from '@nx/devkit'; -import { PackageJson } from 'nx/src/utils/package-json'; +import {copyFile, lstat, mkdir, readdir} from 'fs/promises'; +import {join} from 'path'; +import {dirname, join} from 'node:path'; +import {copyFile, mkdir, symlink, readlink} from 'node:fs/promises'; +import {logger, NxJsonConfiguration, PluginConfiguration, TargetConfiguration,} from '@nx/devkit'; +import {PackageJson} from 'nx/src/utils/package-json'; export async function setup({ - envRoot, - projectName, - repoName, -}: { + envRoot, + projectName, + repoName, + }: { envRoot: string; repoName: string; projectName: string; }) { - await mkdir(envRoot, { recursive: true }); + // dedupe packages because symlink copy problems + await mkdir(envRoot, {recursive: true}); // setup nx environment for e2e tests logger.info(`Created nx workspace under ${envRoot}`); await executeProcess({ @@ -100,30 +98,41 @@ export async function setup({ ); logger.info(`Install @push-based/nx-verdaccio`); + await executeProcess({ + command: 'npm', + args: objectToCliArgs({ + _: ['install', '@push-based/nx-verdaccio'], + save: true, + }), + cwd: envRoot, + verbose: true, + }); await mkdir( join( getTestEnvironmentRoot(projectName), DEFAULT_TEST_FIXTURE_DIST, repoName ), - { recursive: true } + {recursive: true} ); await copyFile( join(getTestEnvironmentRoot(projectName), '.npmrc'), join(envRoot, '.npmrc') ); + await executeProcess({ command: 'npm', args: objectToCliArgs({ - _: ['install', '@push-based/nx-verdaccio'], - save: true, + _: ['dedupe'] }), - cwd: envRoot, verbose: true, + cwd: dirname(envRoot), }); + + } -export async function registerNxVerdaccioPlugin(envRoot: string) { +export async function registerNxVerdaccioPlugin(envRoot: string, options?: PluginConfiguration) { logger.info(`register nx-verdaccio plugin`); await updateJson(join(envRoot, 'nx.json'), (json) => registerPluginInNxJson(json, { @@ -133,11 +142,12 @@ export async function registerNxVerdaccioPlugin(envRoot: string) { targetNames: ['e2e'], }, }, + ...options }) ); } -function registerPluginInNxJson( +export function registerPluginInNxJson( nxJson: NxJsonConfiguration, pluginConfig: PluginConfiguration ) { @@ -162,3 +172,38 @@ function updatePackageJsonNxTargets( }, }; } + + +/** + * This function avoids issues with symlinks and other edge cases. + * + */ +export async function copyDirectory(src: string, dest: string, exclude: string[] = []) { + // Ensure the destination directory exists + await mkdir(dest, {recursive: true}); + + // Read the contents of the source directory + const entries = await readdir(src, {withFileTypes: true}); + + for (const entry of entries) { + const srcPath = join(src, entry.name); + const destPath = join(dest, entry.name); + + // Skip excluded directories or files + if (exclude.includes(entry.name)) continue; + + const stats = await lstat(srcPath); + + if (stats.isSymbolicLink()) { + // Handle symbolic links if necessary (copy the link itself or resolve it) + const linkTarget = await readlink(srcPath); + await symlink(linkTarget, destPath); + } else if (stats.isDirectory()) { + // Recursively copy directories + await copyDirectory(srcPath, destPath, exclude); + } else if (stats.isFile()) { + // Copy files + await copyFile(srcPath, destPath); + } + } +} diff --git a/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap b/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap index bf330bf7..b7ebb99b 100644 --- a/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap +++ b/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap @@ -1,5 +1,83 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`in a fresh Nx workspace > nx-verdaccio plugin create-nodes-v2 > should add package targets to library project 1`] = ` +{ + "nxv-pkg-install": { + "configurations": {}, + "dependsOn": [ + { + "params": "forward", + "target": "nxv-pkg-publish", + }, + { + "params": "forward", + "projects": "dependencies", + "target": "nxv-pkg-install", + }, + ], + "executor": "@push-based/nx-verdaccio:pkg-install", + "options": {}, + "parallelism": true, + }, + "nxv-pkg-publish": { + "configurations": {}, + "dependsOn": [ + { + "params": "forward", + "target": "build", + }, + { + "params": "forward", + "projects": "dependencies", + "target": "nxv-pkg-publish", + }, + ], + "executor": "@push-based/nx-verdaccio:pkg-publish", + "options": {}, + "parallelism": true, + }, +} +`; + +exports[`in a fresh Nx workspace > with nx-verdaccio plugin installed > should add package targets to library project 1`] = ` +{ + "nxv-pkg-install": { + "configurations": {}, + "dependsOn": [ + { + "params": "forward", + "target": "nxv-pkg-publish", + }, + { + "params": "forward", + "projects": "dependencies", + "target": "nxv-pkg-install", + }, + ], + "executor": "@push-based/nx-verdaccio:pkg-install", + "options": {}, + "parallelism": true, + }, + "nxv-pkg-publish": { + "configurations": {}, + "dependsOn": [ + { + "params": "forward", + "target": "build", + }, + { + "params": "forward", + "projects": "dependencies", + "target": "nxv-pkg-publish", + }, + ], + "executor": "@push-based/nx-verdaccio:pkg-publish", + "options": {}, + "parallelism": true, + }, +} +`; + exports[`nx-verdaccio plugin create-nodes-v2 > should add package targets to library project 1`] = ` { "nxv-pkg-install": { diff --git a/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts b/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts index 2dc3ac38..98d457a3 100644 --- a/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts +++ b/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts @@ -1,303 +1,282 @@ -import type { Tree } from '@nx/devkit'; -import { join } from 'node:path'; -import { afterEach, expect } from 'vitest'; -import { - addJsLibToWorkspace, - materializeTree, - nxShowProjectJson, - registerPluginInWorkspace, -} from '@push-based/test-nx-utils'; -import { updateProjectConfiguration } from 'nx/src/generators/utils/project-configuration'; -import { - TARGET_ENVIRONMENT_BOOTSTRAP, - TARGET_ENVIRONMENT_SETUP, - TARGET_PACKAGE_INSTALL, - TARGET_PACKAGE_PUBLISH, - TARGET_ENVIRONMENT_VERDACCIO_START, - TARGET_ENVIRONMENT_INSTALL, - TARGET_ENVIRONMENT_VERDACCIO_STOP, -} from '@push-based/nx-verdaccio'; -import { teardownTestFolder } from '@push-based/test-utils'; +import type {Tree} from '@nx/devkit'; +import {join} from 'node:path'; +import {afterEach, beforeAll, expect} from 'vitest'; +import {nxShowProjectJson,} from '@push-based/test-nx-utils'; +import {copyDirectory, registerNxVerdaccioPlugin} from '../setup/setup'; +import {mkdir} from 'node:fs/promises'; +import {TARGET_PACKAGE_INSTALL, TARGET_PACKAGE_PUBLISH,} from '@push-based/nx-verdaccio'; +import {DEFAULT_TEST_FIXTURE_DIST, getTestEnvironmentRoot} from '@push-based/test-utils'; // eslint-disable-next-line @nx/enforce-module-boundaries -import { - TARGET_ENVIRONMENT_E2E, - TARGET_ENVIRONMENT_TEARDOWN, -} from '../../../projects/nx-verdaccio/src/plugin/targets/environment.targets'; +import {REPO_NAME} from "../fixtures/basic-nx-workspace"; -describe('nx-verdaccio plugin create-nodes-v2', () => { - let tree: Tree; - const projectA = 'lib-a'; - const projectB = 'lib-b'; - const projectAE2e = `${projectA}-e2e`; - const e2eProjectARoot = join('projects', projectAE2e); - const baseDir = `tmp/environments/${process.env['NX_TASK_TARGET_PROJECT']}/__test__/create-nodes-v2`; +describe('in a fresh Nx workspace', () => { - beforeEach(async () => { - tree = await addJsLibToWorkspace(projectA); - await addJsLibToWorkspace(projectB, tree); - await addJsLibToWorkspace(projectAE2e, tree); - updateProjectConfiguration(tree, projectAE2e, { - root: e2eProjectARoot, - projectType: 'application', - }); - }); - - afterEach(async () => { - // await teardownTestFolder(baseDir); - }); - it('should add package targets to library project', async () => { - const cwd = join(baseDir, 'add-pkg-targets'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], - }, - }, - }); - await materializeTree(tree, cwd); + const projectName = process.env['NX_TASK_TARGET_PROJECT']; + const envRoot = getTestEnvironmentRoot(projectName); + const basicNxReopPath = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, REPO_NAME); + const baseDir = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, 'create-nodes-v2'); - const { code, projectJson } = await nxShowProjectJson(cwd, projectA); - expect(code).toBe(0); + beforeAll(async () => { + await mkdir(baseDir, {recursive: true}); + await copyDirectory(basicNxReopPath, baseDir, []); + }) - expect(projectJson.targets).toStrictEqual({ - [TARGET_PACKAGE_INSTALL]: expect.objectContaining({ - dependsOn: [ - { - target: TARGET_PACKAGE_PUBLISH, - params: 'forward', - }, - { - target: TARGET_PACKAGE_INSTALL, - projects: 'dependencies', - params: 'forward', - }, - ], - executor: '@push-based/nx-verdaccio:pkg-install', - }), - [TARGET_PACKAGE_PUBLISH]: expect.objectContaining({ - dependsOn: [ - { - params: 'forward', - target: 'build', - }, - { - params: 'forward', - projects: 'dependencies', - target: 'nxv-pkg-publish', - }, - ], - executor: '@push-based/nx-verdaccio:pkg-publish', - }), - }); - - expect(projectJson.targets).toMatchSnapshot(); - }); - - it('should NOT add package targets to application project', async () => { - const cwd = join(baseDir, 'no-pkg-targets'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], - }, - }, - }); - await materializeTree(tree, cwd); - - const { projectJson } = await nxShowProjectJson(cwd, projectAE2e); - - expect(projectJson.targets).toStrictEqual( - expect.not.objectContaining({ - [TARGET_PACKAGE_INSTALL]: expect.any(Object), - [TARGET_PACKAGE_PUBLISH]: expect.any(Object), - }) - ); + afterEach(async () => { + // await teardownTestFolder(baseDir); }); + describe('with nx-verdaccio plugin installed', () => { - it('should add package targets to library project if some tag of options.packages.filterByTag match', async () => { - const cwd = join(baseDir, 'add-pkg-targets-filterByTag'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], - }, - packages: { - filterByTags: ['publish'], - }, - }, - }); - updateProjectConfiguration(tree, projectB, { - root: `projects/${projectB}`, - sourceRoot: 'projects/lib-b/src', - projectType: 'library', - tags: ['publish'], - }); - await materializeTree(tree, cwd); - - const { projectJson: projectJsonB } = await nxShowProjectJson( - cwd, - projectB - ); - expect(projectJsonB.name).toBe(projectB); - expect(projectJsonB.tags).toStrictEqual(['publish']); - expect(projectJsonB.targets).toStrictEqual( - expect.objectContaining({ - [TARGET_PACKAGE_INSTALL]: expect.any(Object), - [TARGET_PACKAGE_PUBLISH]: expect.any(Object), - }) - ); - - const { projectJson: projectJsonA } = await nxShowProjectJson( - cwd, - projectA - ); - expect(projectJsonA.name).toBe(projectA); - expect(projectJsonA.tags).toStrictEqual([]); - expect(projectJsonA.targets).toStrictEqual( - expect.not.objectContaining({ - [TARGET_PACKAGE_INSTALL]: expect.any(Object), - [TARGET_PACKAGE_PUBLISH]: expect.any(Object), - }) - ); - }); + beforeAll(async () => { + await registerNxVerdaccioPlugin(baseDir); + }) - it('should add environment targets to project with targetName e2e dynamically', async () => { - const cwd = join(baseDir, 'add-env-targets'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], - }, - }, - }); - updateProjectConfiguration(tree, projectAE2e, { - root: e2eProjectARoot, - projectType: 'application', - targets: { - e2e: {}, - }, - }); - await materializeTree(tree, cwd); + it('should add package targets to library project', async () => { - const { code, projectJson } = await nxShowProjectJson(cwd, projectAE2e); - expect(code).toBe(0); + const {code, projectJson} = await nxShowProjectJson(baseDir, 'pkg'); + expect(code).toBe(0); - expect(projectJson.targets).toStrictEqual( - expect.objectContaining({ - e2e: expect.objectContaining({ - configurations: {}, + expect(projectJson.targets).toStrictEqual({ + [TARGET_PACKAGE_INSTALL]: expect.objectContaining({ dependsOn: [ { + target: TARGET_PACKAGE_PUBLISH, params: 'forward', - target: TARGET_ENVIRONMENT_SETUP, }, - ], - }), - [TARGET_ENVIRONMENT_BOOTSTRAP]: expect.objectContaining({ - executor: '@push-based/nx-verdaccio:env-bootstrap', - }), - [TARGET_ENVIRONMENT_INSTALL]: expect.objectContaining({ - dependsOn: [ { - params: 'forward', - projects: 'dependencies', target: TARGET_PACKAGE_INSTALL, + projects: 'dependencies', + params: 'forward', }, ], - executor: 'nx:run-commands', - options: { - environmentRoot: expect.toMatchPath('tmp/environments/lib-a-e2e'), - command: expect.stringContaining( - 'echo "dependencies installed for' - ), - }, + executor: '@push-based/nx-verdaccio:pkg-install', }), - [TARGET_ENVIRONMENT_SETUP]: expect.objectContaining({ - cache: true, - executor: '@push-based/nx-verdaccio:env-setup', - options: {}, - inputs: [ - '{projectRoot}/project.json', - { - runtime: 'node --version', - }, - { - runtime: 'npm --version', - }, + [TARGET_PACKAGE_PUBLISH]: expect.objectContaining({ + dependsOn: [ { - externalDependencies: ['verdaccio'], + params: 'forward', + target: 'build', }, - '^production', - ], - outputs: [ - '{options.environmentRoot}/.npmrc', - '{options.environmentRoot}/package.json', - '{options.environmentRoot}/package-lock.json', - '{options.environmentRoot}/node_modules', - ], - }), - [TARGET_ENVIRONMENT_VERDACCIO_START]: expect.objectContaining({ - executor: '@nx/js:verdaccio', - options: expect.objectContaining({ - clear: true, - config: '.verdaccio/config.yml', - environmentDir: expect.toMatchPath('tmp/environments/lib-a-e2e'), - port: expect.any(Number), // random port number - projectName: 'lib-a-e2e', - storage: expect.toMatchPath('tmp/environments/lib-a-e2e/storage'), - }), - }), - [TARGET_ENVIRONMENT_VERDACCIO_STOP]: expect.objectContaining({ - executor: '@push-based/nx-verdaccio:kill-process', - options: { - filePath: expect.toMatchPath( - 'tmp/environments/verdaccio-registry.json' - ), - }, - }), - [TARGET_ENVIRONMENT_E2E]: expect.objectContaining({ - executor: '@push-based/nx-verdaccio:env-teardown', - dependsOn: [ { params: 'forward', - target: 'e2e', + projects: 'dependencies', + target: 'nxv-pkg-publish', }, ], + executor: '@push-based/nx-verdaccio:pkg-publish', }), - [TARGET_ENVIRONMENT_TEARDOWN]: expect.objectContaining({ - executor: '@push-based/nx-verdaccio:env-teardown', - }), - }) - ); - }); + }); + + expect(projectJson.targets).toMatchSnapshot(); + }); +/* + it('should NOT add package targets to application project', async () => { + const cwd = join(baseDir, 'no-pkg-targets'); + registerPluginInWorkspace(tree, { + plugin: '@push-based/nx-verdaccio', + options: { + environments: { + targetNames: ['e2e'], + }, + }, + }); + await materializeTree(tree, cwd); + + const {projectJson} = await nxShowProjectJson(cwd, 'pkg-e2e'); + + expect(projectJson.targets).toStrictEqual( + expect.not.objectContaining({ + [TARGET_PACKAGE_INSTALL]: expect.any(Object), + [TARGET_PACKAGE_PUBLISH]: expect.any(Object), + }) + ); + }); + + it('should add package targets to library project if some tag of options.packages.filterByTag match', async () => { + const cwd = join(baseDir, 'add-pkg-targets-filterByTag'); + registerPluginInWorkspace(tree, { + plugin: '@push-based/nx-verdaccio', + options: { + environments: { + targetNames: ['e2e'], + }, + packages: { + filterByTags: ['publish'], + }, + }, + }); + updateProjectConfiguration(tree, projectB, { + root: `projects/${projectB}`, + sourceRoot: 'projects/lib-b/src', + projectType: 'library', + tags: ['publish'], + }); + await materializeTree(tree, cwd); - it('should NOT add environment targets to project without targetName e2e', async () => { - const cwd = join(baseDir, 'no-env-targets'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], + const {projectJson: projectJsonB} = await nxShowProjectJson( + cwd, + projectB + ); + expect(projectJsonB.name).toBe(projectB); + expect(projectJsonB.tags).toStrictEqual(['publish']); + expect(projectJsonB.targets).toStrictEqual( + expect.objectContaining({ + [TARGET_PACKAGE_INSTALL]: expect.any(Object), + [TARGET_PACKAGE_PUBLISH]: expect.any(Object), + }) + ); + + const {projectJson: projectJsonA} = await nxShowProjectJson( + cwd, + 'pkg' + ); + expect(projectJsonA.name).toBe('pkg'); + expect(projectJsonA.tags).toStrictEqual([]); + expect(projectJsonA.targets).toStrictEqual( + expect.not.objectContaining({ + [TARGET_PACKAGE_INSTALL]: expect.any(Object), + [TARGET_PACKAGE_PUBLISH]: expect.any(Object), + }) + ); + }); + + it('should add environment targets to project with targetName e2e dynamically', async () => { + const cwd = join(baseDir, 'add-env-targets'); + registerPluginInWorkspace(tree, { + plugin: '@push-based/nx-verdaccio', + options: { + environments: { + targetNames: ['e2e'], + }, + }, + }); + updateProjectConfiguration(tree, 'pkg-e2e', { + root: e2eProjectARoot, + projectType: 'application', + targets: { + e2e: {}, }, - }, + }); + await materializeTree(tree, cwd); + + const {code, projectJson} = await nxShowProjectJson(cwd, 'pkg-e2e'); + expect(code).toBe(0); + + expect(projectJson.targets).toStrictEqual( + expect.objectContaining({ + e2e: expect.objectContaining({ + configurations: {}, + dependsOn: [ + { + params: 'forward', + target: TARGET_ENVIRONMENT_SETUP, + }, + ], + }), + [TARGET_ENVIRONMENT_BOOTSTRAP]: expect.objectContaining({ + executor: '@push-based/nx-verdaccio:env-bootstrap', + }), + [TARGET_ENVIRONMENT_INSTALL]: expect.objectContaining({ + dependsOn: [ + { + params: 'forward', + projects: 'dependencies', + target: TARGET_PACKAGE_INSTALL, + }, + ], + executor: 'nx:run-commands', + options: { + environmentRoot: expect.toMatchPath('tmp/environments/lib-a-e2e'), + command: expect.stringContaining( + 'echo "dependencies installed for' + ), + }, + }), + [TARGET_ENVIRONMENT_SETUP]: expect.objectContaining({ + cache: true, + executor: '@push-based/nx-verdaccio:env-setup', + options: {}, + inputs: [ + '{projectRoot}/project.json', + { + runtime: 'node --version', + }, + { + runtime: 'npm --version', + }, + { + externalDependencies: ['verdaccio'], + }, + '^production', + ], + outputs: [ + '{options.environmentRoot}/.npmrc', + '{options.environmentRoot}/package.json', + '{options.environmentRoot}/package-lock.json', + '{options.environmentRoot}/node_modules', + ], + }), + [TARGET_ENVIRONMENT_VERDACCIO_START]: expect.objectContaining({ + executor: '@nx/js:verdaccio', + options: expect.objectContaining({ + clear: true, + config: '.verdaccio/config.yml', + environmentDir: expect.toMatchPath('tmp/environments/lib-a-e2e'), + port: expect.any(Number), // random port number + projectName: 'lib-a-e2e', + storage: expect.toMatchPath('tmp/environments/lib-a-e2e/storage'), + }), + }), + [TARGET_ENVIRONMENT_VERDACCIO_STOP]: expect.objectContaining({ + executor: '@push-based/nx-verdaccio:kill-process', + options: { + filePath: expect.toMatchPath( + 'tmp/environments/verdaccio-registry.json' + ), + }, + }), + [TARGET_ENVIRONMENT_E2E]: expect.objectContaining({ + executor: '@push-based/nx-verdaccio:env-teardown', + dependsOn: [ + { + params: 'forward', + target: 'e2e', + }, + ], + }), + [TARGET_ENVIRONMENT_TEARDOWN]: expect.objectContaining({ + executor: '@push-based/nx-verdaccio:env-teardown', + }), + }) + ); }); - await materializeTree(tree, cwd); - const { projectJson } = await nxShowProjectJson(cwd, projectAE2e); + it('should NOT add environment targets to project without targetName e2e', async () => { + const cwd = join(baseDir, 'no-env-targets'); + registerPluginInWorkspace(tree, { + plugin: '@push-based/nx-verdaccio', + options: { + environments: { + targetNames: ['e2e'], + }, + }, + }); + await materializeTree(tree, cwd); + + const {projectJson} = await nxShowProjectJson(cwd, 'pkg-e2e'); + + expect(projectJson.targets).toStrictEqual( + expect.not.objectContaining({ + [TARGET_ENVIRONMENT_BOOTSTRAP]: expect.any(Object), + [TARGET_ENVIRONMENT_INSTALL]: expect.any(Object), + [TARGET_ENVIRONMENT_SETUP]: expect.any(Object), + [TARGET_ENVIRONMENT_VERDACCIO_START]: expect.any(Object), + [TARGET_ENVIRONMENT_VERDACCIO_STOP]: expect.any(Object), + }) + ); + }); + */ - expect(projectJson.targets).toStrictEqual( - expect.not.objectContaining({ - [TARGET_ENVIRONMENT_BOOTSTRAP]: expect.any(Object), - [TARGET_ENVIRONMENT_INSTALL]: expect.any(Object), - [TARGET_ENVIRONMENT_SETUP]: expect.any(Object), - [TARGET_ENVIRONMENT_VERDACCIO_START]: expect.any(Object), - [TARGET_ENVIRONMENT_VERDACCIO_STOP]: expect.any(Object), - }) - ); }); + }); diff --git a/nx.json b/nx.json index fb2eb13c..57ddef60 100644 --- a/nx.json +++ b/nx.json @@ -88,14 +88,14 @@ }, "plugins": [ { - "plugin": "@push-based/nx-verdaccio", - "exclude": ["examples/e2e/cli-e2e-original/**"], + "plugin": "./projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts", + "include": ["e2e/nx-verdaccio-e2e/**"], "options": { "packages": { "filterByTags": ["publishable"] }, "environments": { - "targetNames": ["e2e", "e2e-static"] + "targetNames": ["_e2e", "_e2e-static"] } } }, diff --git a/package-lock.json b/package-lock.json index df1852f2..66d3d4b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2058,1055 +2058,1477 @@ "tslib": "^2.4.0" } }, - "node_modules/@esbuild/darwin-arm64": { + "node_modules/@esbuild/aix-ppc64": { "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "aix" ], "engines": { "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "@eslint/object-schema": "^2.1.4", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "os": [ + "darwin" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.1.tgz", - "integrity": "sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "levn": "^0.4.1" - }, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@humanfs/core": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", - "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": ">=12" } }, - "node_modules/@humanfs/node": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", - "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "@humanfs/core": "^0.19.0", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, + "os": [ + "linux" + ], "engines": { - "node": ">=10.10.0" + "node": ">=12" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, - "peer": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=12" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { "node": ">=12" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@jest/console": { - "version": "29.7.0", + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jest/core": { - "version": "29.7.0", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "peer": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", "dev": true, "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "type-fest": "^0.20.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", + "node_modules/@eslint/js": { + "version": "8.57.1", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, + "license": "Apache-2.0", + "optional": true, + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "peer": true, "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "levn": "^0.4.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, + "license": "Apache-2.0", + "optional": true, + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.10.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6.0.0" + "node": "*" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=10.0" + "node": ">=12.22" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=10.0" + "node": ">=18.18" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">=12" } }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "debug": "^4.1.1" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@mole-inc/bin-wrapper": { - "version": "8.0.1", + "node_modules/@jest/console": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "bin-check": "^4.1.0", - "bin-version-check": "^5.0.0", - "content-disposition": "^0.5.4", - "ext-name": "^5.0.0", - "file-type": "^17.1.6", - "filenamify": "^5.0.2", - "got": "^11.8.5", - "os-filter-obj": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@napi-rs/nice": { - "version": "1.0.1", + "node_modules/@jest/core": { + "version": "29.7.0", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.1", - "@napi-rs/nice-android-arm64": "1.0.1", - "@napi-rs/nice-darwin-arm64": "1.0.1", - "@napi-rs/nice-darwin-x64": "1.0.1", - "@napi-rs/nice-freebsd-x64": "1.0.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/nice-linux-arm64-gnu": "1.0.1", - "@napi-rs/nice-linux-arm64-musl": "1.0.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", - "@napi-rs/nice-linux-s390x-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-musl": "1.0.1", - "@napi-rs/nice-win32-arm64-msvc": "1.0.1", - "@napi-rs/nice-win32-ia32-msvc": "1.0.1", - "@napi-rs/nice-win32-x64-msvc": "1.0.1" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.1", - "cpu": [ - "arm64" - ], + "node_modules/@jest/core/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@jest/environment": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@jest/expect": { + "version": "29.7.0", "dev": true, "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "jest-get-type": "^29.6.3" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nrwl/devkit": { - "version": "19.8.0", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "19.8.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nrwl/esbuild": { - "version": "19.8.0", + "node_modules/@jest/globals": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nx/esbuild": "19.8.0" - } - }, - "node_modules/@nrwl/eslint-plugin-nx": { - "version": "19.8.0", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nx/eslint-plugin": "19.8.0" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@nrwl/jest": { - "version": "19.8.0", + "node_modules/@jest/reporters/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@nx/jest": "19.8.0" + "engines": { + "node": ">=8" } }, - "node_modules/@nrwl/js": { - "version": "19.8.0", + "node_modules/@jest/reporters/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "@nx/js": "19.8.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@nrwl/nx-plugin": { - "version": "19.8.0", + "node_modules/@jest/schemas": { + "version": "29.6.3", "dev": true, "license": "MIT", "dependencies": { - "@nx/plugin": "19.8.0" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nrwl/tao": { - "version": "19.8.0", + "node_modules/@jest/source-map": { + "version": "29.6.3", "dev": true, "license": "MIT", "dependencies": { - "nx": "19.8.0", - "tslib": "^2.3.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, - "bin": { - "tao": "index.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nrwl/vite": { - "version": "19.8.0", + "node_modules/@jest/test-result": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nx/vite": "19.8.0" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nrwl/web": { - "version": "19.8.0", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nx/web": "19.8.0" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nrwl/workspace": { - "version": "19.8.0", + "node_modules/@jest/transform": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@nx/workspace": "19.8.0" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nx/devkit": { - "version": "19.8.0", + "node_modules/@jest/types": { + "version": "29.6.3", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "19.8.0", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "peerDependencies": { - "nx": ">= 17 <= 20" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nx/esbuild": { - "version": "19.8.0", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", "dev": true, "license": "MIT", "dependencies": { - "@nrwl/esbuild": "19.8.0", - "@nx/devkit": "19.8.0", - "@nx/js": "19.8.0", - "chalk": "^4.1.0", - "fast-glob": "3.2.7", - "fs-extra": "^11.1.0", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "esbuild": "~0.19.2" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, - "peerDependenciesMeta": { - "esbuild": { - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@nx/eslint": { - "version": "19.8.0", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "dev": true, "license": "MIT", - "dependencies": { - "@nx/devkit": "19.8.0", - "@nx/js": "19.8.0", - "@nx/linter": "19.8.0", - "semver": "^7.5.3", - "tslib": "^2.3.0", - "typescript": "~5.4.2" - }, - "peerDependencies": { - "@zkochan/js-yaml": "0.0.7", - "eslint": "^8.0.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "@zkochan/js-yaml": { - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@nx/eslint-plugin": { - "version": "19.8.0", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", "dev": true, "license": "MIT", "dependencies": { - "@eslint/compat": "^1.1.1", - "@nrwl/eslint-plugin-nx": "19.8.0", - "@nx/devkit": "19.8.0", - "@nx/js": "19.8.0", - "@typescript-eslint/type-utils": "^8.0.0", - "@typescript-eslint/utils": "^8.0.0", - "chalk": "^4.1.0", - "confusing-browser-globals": "^1.0.9", - "globals": "^15.9.0", - "jsonc-eslint-parser": "^2.1.0", - "semver": "^7.5.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.13.2 || ^7.0.0 || ^8.0.0", - "eslint-config-prettier": "^9.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nx/eslint-plugin/node_modules/@eslint/compat": { - "version": "1.2.0", + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10.0" }, - "peerDependencies": { - "eslint": "^9.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "peerDependenciesMeta": { + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@mole-inc/bin-wrapper": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bin-check": "^4.1.0", + "bin-version-check": "^5.0.0", + "content-disposition": "^0.5.4", + "ext-name": "^5.0.0", + "file-type": "^17.1.6", + "filenamify": "^5.0.2", + "got": "^11.8.5", + "os-filter-obj": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@napi-rs/nice": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.0.1", + "@napi-rs/nice-android-arm64": "1.0.1", + "@napi-rs/nice-darwin-arm64": "1.0.1", + "@napi-rs/nice-darwin-x64": "1.0.1", + "@napi-rs/nice-freebsd-x64": "1.0.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/nice-linux-arm64-gnu": "1.0.1", + "@napi-rs/nice-linux-arm64-musl": "1.0.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", + "@napi-rs/nice-linux-s390x-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-musl": "1.0.1", + "@napi-rs/nice-win32-arm64-msvc": "1.0.1", + "@napi-rs/nice-win32-ia32-msvc": "1.0.1", + "@napi-rs/nice-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.0.1", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nrwl/devkit": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "19.8.0" + } + }, + "node_modules/@nrwl/esbuild": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/esbuild": "19.8.0" + } + }, + "node_modules/@nrwl/eslint-plugin-nx": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/eslint-plugin": "19.8.0" + } + }, + "node_modules/@nrwl/jest": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/jest": "19.8.0" + } + }, + "node_modules/@nrwl/js": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/js": "19.8.0" + } + }, + "node_modules/@nrwl/nx-plugin": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/plugin": "19.8.0" + } + }, + "node_modules/@nrwl/tao": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "19.8.0", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nrwl/vite": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/vite": "19.8.0" + } + }, + "node_modules/@nrwl/web": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/web": "19.8.0" + } + }, + "node_modules/@nrwl/workspace": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/workspace": "19.8.0" + } + }, + "node_modules/@nx/devkit": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nrwl/devkit": "19.8.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 17 <= 20" + } + }, + "node_modules/@nx/esbuild": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nrwl/esbuild": "19.8.0", + "@nx/devkit": "19.8.0", + "@nx/js": "19.8.0", + "chalk": "^4.1.0", + "fast-glob": "3.2.7", + "fs-extra": "^11.1.0", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "esbuild": "~0.19.2" + }, + "peerDependenciesMeta": { + "esbuild": { + "optional": true + } + } + }, + "node_modules/@nx/eslint": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "19.8.0", + "@nx/js": "19.8.0", + "@nx/linter": "19.8.0", + "semver": "^7.5.3", + "tslib": "^2.3.0", + "typescript": "~5.4.2" + }, + "peerDependencies": { + "@zkochan/js-yaml": "0.0.7", + "eslint": "^8.0.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "@zkochan/js-yaml": { + "optional": true + } + } + }, + "node_modules/@nx/eslint-plugin": { + "version": "19.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.1.1", + "@nrwl/eslint-plugin-nx": "19.8.0", + "@nx/devkit": "19.8.0", + "@nx/js": "19.8.0", + "@typescript-eslint/type-utils": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0", + "chalk": "^4.1.0", + "confusing-browser-globals": "^1.0.9", + "globals": "^15.9.0", + "jsonc-eslint-parser": "^2.1.0", + "semver": "^7.5.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.13.2 || ^7.0.0 || ^8.0.0", + "eslint-config-prettier": "^9.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@eslint/compat": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0" + }, + "peerDependenciesMeta": { "eslint": { "optional": true } } }, "node_modules/@nx/eslint-plugin/node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -3132,6 +3554,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -3142,9 +3565,9 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/@eslint/js": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", "dev": true, "optional": true, "peer": true, @@ -3157,6 +3580,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, + "license": "Python-2.0", "optional": true, "peer": true }, @@ -3165,6 +3589,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -3173,33 +3598,33 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/eslint": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", - "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "optional": true, "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.13.0", - "@eslint/plugin-kit": "^0.2.0", - "@humanfs/node": "^0.16.5", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.1", + "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3213,8 +3638,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -3235,10 +3659,11 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/eslint-scope": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", - "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "peer": true, "dependencies": { @@ -3253,10 +3678,11 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", - "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, + "license": "Apache-2.0", "optional": true, "peer": true, "engines": { @@ -3267,16 +3693,17 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/espree": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", - "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "peer": true, "dependencies": { - "acorn": "^8.12.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.1.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3337,6 +3764,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -3368,6 +3796,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -3482,7 +3911,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "19.8.6", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.0.tgz", + "integrity": "sha512-JWtBb6ndCdGE+RBIwKN85BZnX41lFGsFxnsmot71GeAj/g7Cb0PM2qcmxawoy8yLPTBGZhb+eHER3z3nDIqRog==", "cpu": [ "arm64" ], @@ -3496,12 +3927,13 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "19.8.6", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.6.tgz", - "integrity": "sha512-1ZmOXwJva14jCcTHM8jmsEBp33CCLng/tXK8/554ACwL3Kk4kbtdLfUjM/VEMZ3v3c1D7cJWxyYfTav5meumxg==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.0.tgz", + "integrity": "sha512-NcNaqbbStBkyahLaoKFtW6nEdjCjYT5ZOmGjc6UpAx1Y3pkk/FcIOYJRCBxwuOsRRsEAyeVcHPdYrouZmV+6Yw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3575,12 +4007,13 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.8.6", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.6.tgz", - "integrity": "sha512-2/5WDr2wwWyvbqlB//ICWS5q3rRF4GyNX2NOp/tVkmh1RfDhH0ZAVZ/oJ7QvE1mKLQh0AM7bQBHsF5ikmMhUXw==", + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.0.tgz", + "integrity": "sha512-4uYuE+LvxOFXvi9z9ueJSVrME5D383SHNCjs6jYwc9KovCsmL5oPVXRieoE4/hYI4lrjly+CrAnPZU1P7ocBiw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -4491,12 +4924,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz", + "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.10.0", - "@typescript-eslint/utils": "8.10.0", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/utils": "8.18.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4507,16 +4941,16 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", + "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4526,12 +4960,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", + "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.10.0", - "@typescript-eslint/visitor-keys": "8.10.0", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4546,19 +4981,18 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", + "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.10.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.18.1", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4568,10 +5002,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4585,8 +5032,9 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4596,8 +5044,9 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4662,14 +5111,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz", + "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.10.0", - "@typescript-eslint/types": "8.10.0", - "@typescript-eslint/typescript-estree": "8.10.0" + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4679,16 +5129,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz", + "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.10.0", - "@typescript-eslint/visitor-keys": "8.10.0" + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4699,9 +5151,10 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", + "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4711,12 +5164,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", + "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.10.0", - "@typescript-eslint/visitor-keys": "8.10.0", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4731,19 +5185,18 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.10.0", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", + "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.10.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.18.1", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4753,10 +5206,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/utils/node_modules/fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4770,8 +5236,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4781,8 +5248,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5002,11 +5470,6 @@ "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@verdaccio/local-storage-legacy/node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, "node_modules/@verdaccio/local-storage-legacy/node_modules/debug": { "version": "4.3.4", "dev": true, @@ -5589,7 +6052,9 @@ } }, "node_modules/acorn": { - "version": "8.13.0", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -5807,7 +6272,9 @@ } }, "node_modules/async": { - "version": "3.2.6", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true, "license": "MIT" }, @@ -7123,7 +7590,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -8761,9 +9230,10 @@ } }, "node_modules/globals": { - "version": "15.11.0", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -10030,7 +10500,9 @@ } }, "node_modules/jest-resolve/node_modules/resolve.exports": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -10917,7 +11389,9 @@ } }, "node_modules/mime-db": { - "version": "1.53.0", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -10935,14 +11409,6 @@ "node": ">= 0.6" } }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "dev": true, @@ -11294,63 +11760,16 @@ "@nx/nx-win32-x64-msvc": "19.8.0" }, "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/@nx/nx-darwin-arm64": { - "version": "19.8.0", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/nx/node_modules/@nx/nx-darwin-x64": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.0.tgz", - "integrity": "sha512-NcNaqbbStBkyahLaoKFtW6nEdjCjYT5ZOmGjc6UpAx1Y3pkk/FcIOYJRCBxwuOsRRsEAyeVcHPdYrouZmV+6Yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/nx/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.0.tgz", - "integrity": "sha512-4uYuE+LvxOFXvi9z9ueJSVrME5D383SHNCjs6jYwc9KovCsmL5oPVXRieoE4/hYI4lrjly+CrAnPZU1P7ocBiw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, "node_modules/nx/node_modules/ansi-regex": { @@ -13230,7 +13649,9 @@ } }, "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.0", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", "dev": true, "license": "MIT" }, @@ -13382,368 +13803,742 @@ "engines": { "node": ">=10.18" }, - "peerDependencies": { - "tslib": "^2" + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thread-stream": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.8.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/trim-repeated": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, - "node_modules/thread-stream": { - "version": "2.7.0", + "node_modules/ts-node": { + "version": "10.9.1", "dev": true, "license": "MIT", "dependencies": { - "real-require": "^0.2.0" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", + "node_modules/tsconfig-paths": { + "version": "4.2.0", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=4" } }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/tslib": { + "version": "2.8.0", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/tsx": { + "version": "4.19.1", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "0.8.4", + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=14.0.0" + "node": ">=18" } }, - "node_modules/tinyspy": { - "version": "2.2.1", + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=14.0.0" + "node": ">=18" } }, - "node_modules/tmp": { - "version": "0.2.3", + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=14.14" + "node": ">=18" } }, - "node_modules/tmpl": { - "version": "1.0.5", + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8.0" + "node": ">=18" } }, - "node_modules/toidentifier": { - "version": "1.0.1", + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.6" + "node": ">=18" } }, - "node_modules/token-types": { - "version": "5.0.1", + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=18" } }, - "node_modules/totalist": { - "version": "3.0.1", + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/tough-cookie": { - "version": "4.1.4", + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4.0.0" + "node": ">=18" } }, - "node_modules/tr46": { - "version": "3.0.0", + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/tree-dump": { - "version": "1.0.2", + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=18" } }, - "node_modules/trim-repeated": { - "version": "2.0.0", + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "5.0.0", + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/ts-api-utils": { - "version": "1.3.0", + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">=18" } }, - "node_modules/ts-jest": { - "version": "29.2.5", + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.6.3", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } + "node": ">=18" } }, - "node_modules/ts-node": { - "version": "10.9.1", + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/tslib": { - "version": "2.8.0", + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "0BSD" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/tsx": { - "version": "4.19.1", + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "esbuild": "~0.23.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "node": ">=18" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "node_modules/tsx/node_modules/@esbuild/win32-x64": { "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=18" diff --git a/projects/nx-verdaccio/package.json b/projects/nx-verdaccio/package.json index 12735906..4172ae89 100644 --- a/projects/nx-verdaccio/package.json +++ b/projects/nx-verdaccio/package.json @@ -16,5 +16,61 @@ "type": "commonjs", "main": "./src/index.js", "typings": "./src/index.d.ts", - "executors": "./executors.json" + "executors": "./executors.json", + "nx": { + "sourceRoot": "packages/pkg/src", + "projectType": "library", + "name": "nx-verdaccio", + "tags": ["publishable"], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/nx-verdaccio", + "main": "src/index.ts", + "tsConfig": "tsconfig.lib.json", + "assets": [ + "src/*.md", + { + "input": "./src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": ".", + "glob": "executors.json", + "output": "." + } + ] + } + }, + "lint": { + "options": { + "lintFilePatterns": [ + "{projectRoot}/**/*.ts", + "{projectRoot}/package.json", + "{projectRoot}/generators.json" + ] + } + }, + "unit-test": { + "executor": "@nx/vite:test", + "options": { + "configFile": "vite.config.ts" + } + }, + "integration-test": { + "executor": "@nx/vite:test", + "options": { + "configFile": "vite.integration.config.ts" + } + } + } + } } diff --git a/projects/nx-verdaccio/project.json b/projects/nx-verdaccio/project.json deleted file mode 100644 index d20244bd..00000000 --- a/projects/nx-verdaccio/project.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "nx-verdaccio", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "projects/nx-verdaccio/src", - "projectType": "library", - "tags": ["publishable"], - "implicitDependencies": ["nx-verdaccio"], - "targets": { - "build": { - "executor": "@nx/js:tsc", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/projects/nx-verdaccio", - "main": "projects/nx-verdaccio/src/index.ts", - "tsConfig": "projects/nx-verdaccio/tsconfig.lib.json", - "assets": [ - "projects/nx-verdaccio/*.md", - { - "input": "./projects/nx-verdaccio/src", - "glob": "**/!(*.ts)", - "output": "./src" - }, - { - "input": "./projects/nx-verdaccio/src", - "glob": "**/*.d.ts", - "output": "./src" - }, - { - "input": "./projects/nx-verdaccio", - "glob": "executors.json", - "output": "." - } - ] - } - }, - "lint": { - "options": { - "lintFilePatterns": [ - "{projectRoot}/**/*.ts", - "{projectRoot}/package.json", - "{projectRoot}/generators.json" - ] - } - }, - "unit-test": { - "executor": "@nx/vite:test", - "options": { - "configFile": "projects/nx-verdaccio/vite.config.ts" - } - }, - "integration-test": { - "executor": "@nx/vite:test", - "options": { - "configFile": "projects/nx-verdaccio/vite.integration.config.ts" - } - } - } -} diff --git a/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts b/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts index d276d365..6a80f3ef 100644 --- a/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts +++ b/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts @@ -7,30 +7,24 @@ import { type ProjectConfiguration, readJsonFile, } from '@nx/devkit'; -import { readFile } from 'node:fs/promises'; -import { dirname, join } from 'node:path'; -import type { NxVerdaccioCreateNodeOptions } from './schema'; -import { - normalizeCreateNodesOptions, - type NormalizedCreateNodeOptions, -} from './normalize-create-nodes-options'; -import { hashObject } from 'nx/src/hasher/file-hasher'; -import { workspaceDataDirectory } from 'nx/src/utils/cache-directory'; -import { PLUGIN_NAME } from './constants'; -import { - getCacheRecord, - readTargetsCache, - setCacheRecord, - writeTargetsToCache, -} from './caching'; -import { createProjectConfiguration } from './targets/create-targets'; +import {dirname, join} from 'node:path'; +import type {NxVerdaccioCreateNodeOptions} from './schema'; +import {normalizeCreateNodesOptions, type NormalizedCreateNodeOptions,} from './normalize-create-nodes-options'; +import {hashObject} from 'nx/src/hasher/file-hasher'; +import {workspaceDataDirectory} from 'nx/src/utils/cache-directory'; +import {PLUGIN_NAME} from './constants'; +import {getCacheRecord, readTargetsCache, setCacheRecord, writeTargetsToCache,} from './caching'; +import {createProjectConfiguration} from './targets/create-targets'; +import {getPackageJsonNxConfig, getProjectConfig, getProjectJsonNxConfig} from "./project-config"; const PROJECT_JSON_FILE_GLOB = '**/project.json'; +const PACKAGE_JSON_FILE_GLOB = '**/package.json'; +const FILE_GLOB = `**/{project,package}.json`; export const createNodesV2: CreateNodesV2 = [ - PROJECT_JSON_FILE_GLOB, + FILE_GLOB, async (configFiles, options, context) => { - const optionsHash = hashObject({ options: options ?? {} }); + const optionsHash = hashObject({options: options ?? {}}); const nxVerdaccioEnvPluginCachePath = join( workspaceDataDirectory, `push-based--${PLUGIN_NAME}-${optionsHash}.hash` @@ -39,10 +33,13 @@ export const createNodesV2: CreateNodesV2 = [ try { return await createNodesFromFiles( async (projectConfigurationFile, internalOptions) => { - const projectConfiguration: ProjectConfiguration = await readFile( - join(process.cwd(), projectConfigurationFile), - 'utf8' - ).then(JSON.parse); + const isPkgJson = projectConfigurationFile.endsWith('package.json'); + if(isPkgJson) { + throw new Error('!!!!!!!!!!!!!!!!!!') + } + + const [primaryConfig, fallback] = isPkgJson ? [getPackageJsonNxConfig, getProjectJsonNxConfig] : [getProjectJsonNxConfig, getPackageJsonNxConfig]; + const projectConfiguration: ProjectConfiguration = await getProjectConfig(projectConfigurationFile, primaryConfig, fallback); if ( !('name' in projectConfiguration) || typeof projectConfiguration.name !== 'string' @@ -74,7 +71,7 @@ export const createNodesV2: CreateNodesV2 = [ ); } } - const { targets, namedInputs = {} } = cachedProjectConfiguration; + const {targets, namedInputs = {}} = cachedProjectConfiguration; return { projects: { [projectRoot]: { diff --git a/projects/nx-verdaccio/src/plugin/project-config.ts b/projects/nx-verdaccio/src/plugin/project-config.ts index 2ca8f2d8..2e58dd39 100644 --- a/projects/nx-verdaccio/src/plugin/project-config.ts +++ b/projects/nx-verdaccio/src/plugin/project-config.ts @@ -1,22 +1,33 @@ -import type { ProjectConfiguration } from '@nx/devkit'; -import { readFile } from 'node:fs/promises'; -import { dirname, join } from 'node:path'; +import type {ProjectConfiguration} from '@nx/devkit'; +import {readFile} from 'node:fs/promises'; +import {dirname, join} from 'node:path'; -export async function getProjectConfig(packageJsonFile: string) { - const { nx: pkgNxConfig = {} } = await readFile( +export async function getProjectJsonNxConfig(packageJsonFile: string) { + const projectConfig: ProjectConfiguration = await readFile( + join(process.cwd(), dirname(packageJsonFile), 'project.json'), + 'utf8' + ).then(JSON.parse); + if (!('name' in projectConfig) || typeof projectConfig.name !== 'string') { + throw new Error('Project name is required'); + } + return projectConfig; +} + +export async function getPackageJsonNxConfig(packageJsonFile: string) { + const {nx: pkgNxConfig = {}} = await readFile( join(process.cwd(), packageJsonFile), 'utf8' ).then(JSON.parse); + return pkgNxConfig; +} + +export async function getProjectConfig(projectConfigFile, getConfig:(projectConfigFile: string) => Promise, fallback: (projectConfigFile: string) => Promise) { + + const pkgNxConfig = await getConfig(projectConfigFile); + if (!('name' in pkgNxConfig) || typeof pkgNxConfig?.name !== 'string') { - // fallback to project.json - const projectConfig: ProjectConfiguration = await readFile( - join(process.cwd(), dirname(packageJsonFile), 'project.json'), - 'utf8' - ).then(JSON.parse); - if (!('name' in projectConfig) || typeof projectConfig.name !== 'string') { - throw new Error('Project name is required'); - } - return projectConfig; + return await fallback(projectConfigFile); } return pkgNxConfig; + } From 15a1beab6367aa85159296dd1f51e8e510b368d0 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 18 Dec 2024 17:11:23 +0100 Subject: [PATCH 2/3] wip --- e2e/nx-verdaccio-e2e/setup/setup.ts | 51 +++++++++++-------- .../test/plugin-create-nodes.e2e.test.ts | 40 +++++++-------- projects/nx-verdaccio/package.json | 8 ++- .../src/plugin/nx-verdaccio.plugin.ts | 49 ++++++++++++------ .../nx-verdaccio/src/plugin/project-config.ts | 16 +++--- 5 files changed, 99 insertions(+), 65 deletions(-) diff --git a/e2e/nx-verdaccio-e2e/setup/setup.ts b/e2e/nx-verdaccio-e2e/setup/setup.ts index 381a00ac..d49cee46 100644 --- a/e2e/nx-verdaccio-e2e/setup/setup.ts +++ b/e2e/nx-verdaccio-e2e/setup/setup.ts @@ -5,24 +5,29 @@ import { objectToCliArgs, updateJson, } from '@push-based/test-utils'; -import {copyFile, lstat, mkdir, readdir} from 'fs/promises'; -import {join} from 'path'; -import {dirname, join} from 'node:path'; -import {copyFile, mkdir, symlink, readlink} from 'node:fs/promises'; -import {logger, NxJsonConfiguration, PluginConfiguration, TargetConfiguration,} from '@nx/devkit'; -import {PackageJson} from 'nx/src/utils/package-json'; +import { copyFile, lstat, mkdir, readdir } from 'fs/promises'; +import { join } from 'path'; +import { dirname, join } from 'node:path'; +import { copyFile, mkdir, symlink, readlink } from 'node:fs/promises'; +import { + logger, + NxJsonConfiguration, + PluginConfiguration, + TargetConfiguration, +} from '@nx/devkit'; +import { PackageJson } from 'nx/src/utils/package-json'; export async function setup({ - envRoot, - projectName, - repoName, - }: { + envRoot, + projectName, + repoName, +}: { envRoot: string; repoName: string; projectName: string; }) { // dedupe packages because symlink copy problems - await mkdir(envRoot, {recursive: true}); + await mkdir(envRoot, { recursive: true }); // setup nx environment for e2e tests logger.info(`Created nx workspace under ${envRoot}`); await executeProcess({ @@ -113,7 +118,7 @@ export async function setup({ DEFAULT_TEST_FIXTURE_DIST, repoName ), - {recursive: true} + { recursive: true } ); await copyFile( join(getTestEnvironmentRoot(projectName), '.npmrc'), @@ -123,16 +128,17 @@ export async function setup({ await executeProcess({ command: 'npm', args: objectToCliArgs({ - _: ['dedupe'] + _: ['dedupe'], }), verbose: true, cwd: dirname(envRoot), }); - - } -export async function registerNxVerdaccioPlugin(envRoot: string, options?: PluginConfiguration) { +export async function registerNxVerdaccioPlugin( + envRoot: string, + options?: PluginConfiguration +) { logger.info(`register nx-verdaccio plugin`); await updateJson(join(envRoot, 'nx.json'), (json) => registerPluginInNxJson(json, { @@ -142,7 +148,7 @@ export async function registerNxVerdaccioPlugin(envRoot: string, options?: Plugi targetNames: ['e2e'], }, }, - ...options + ...options, }) ); } @@ -173,17 +179,20 @@ function updatePackageJsonNxTargets( }; } - /** * This function avoids issues with symlinks and other edge cases. * */ -export async function copyDirectory(src: string, dest: string, exclude: string[] = []) { +export async function copyDirectory( + src: string, + dest: string, + exclude: string[] = [] +) { // Ensure the destination directory exists - await mkdir(dest, {recursive: true}); + await mkdir(dest, { recursive: true }); // Read the contents of the source directory - const entries = await readdir(src, {withFileTypes: true}); + const entries = await readdir(src, { withFileTypes: true }); for (const entry of entries) { const srcPath = join(src, entry.name); diff --git a/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts b/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts index 98d457a3..249b5288 100644 --- a/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts +++ b/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts @@ -1,39 +1,41 @@ -import type {Tree} from '@nx/devkit'; -import {join} from 'node:path'; -import {afterEach, beforeAll, expect} from 'vitest'; -import {nxShowProjectJson,} from '@push-based/test-nx-utils'; -import {copyDirectory, registerNxVerdaccioPlugin} from '../setup/setup'; -import {mkdir} from 'node:fs/promises'; -import {TARGET_PACKAGE_INSTALL, TARGET_PACKAGE_PUBLISH,} from '@push-based/nx-verdaccio'; -import {DEFAULT_TEST_FIXTURE_DIST, getTestEnvironmentRoot} from '@push-based/test-utils'; +import type { Tree } from '@nx/devkit'; +import { join } from 'node:path'; +import { afterEach, beforeAll, expect } from 'vitest'; +import { nxShowProjectJson } from '@push-based/test-nx-utils'; +import { copyDirectory, registerNxVerdaccioPlugin } from '../setup/setup'; +import { mkdir } from 'node:fs/promises'; +import { + TARGET_PACKAGE_INSTALL, + TARGET_PACKAGE_PUBLISH, +} from '@push-based/nx-verdaccio'; +import { + DEFAULT_TEST_FIXTURE_DIST, + getTestEnvironmentRoot, +} from '@push-based/test-utils'; // eslint-disable-next-line @nx/enforce-module-boundaries -import {REPO_NAME} from "../fixtures/basic-nx-workspace"; +import { REPO_NAME } from '../fixtures/basic-nx-workspace'; describe('in a fresh Nx workspace', () => { - - const projectName = process.env['NX_TASK_TARGET_PROJECT']; const envRoot = getTestEnvironmentRoot(projectName); const basicNxReopPath = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, REPO_NAME); const baseDir = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, 'create-nodes-v2'); beforeAll(async () => { - await mkdir(baseDir, {recursive: true}); + await mkdir(baseDir, { recursive: true }); await copyDirectory(basicNxReopPath, baseDir, []); - }) + }); afterEach(async () => { // await teardownTestFolder(baseDir); }); describe('with nx-verdaccio plugin installed', () => { - beforeAll(async () => { await registerNxVerdaccioPlugin(baseDir); - }) + }); it('should add package targets to library project', async () => { - - const {code, projectJson} = await nxShowProjectJson(baseDir, 'pkg'); + const { code, projectJson } = await nxShowProjectJson(baseDir, 'pkg'); expect(code).toBe(0); expect(projectJson.targets).toStrictEqual({ @@ -69,7 +71,7 @@ describe('in a fresh Nx workspace', () => { expect(projectJson.targets).toMatchSnapshot(); }); -/* + /* it('should NOT add package targets to application project', async () => { const cwd = join(baseDir, 'no-pkg-targets'); registerPluginInWorkspace(tree, { @@ -276,7 +278,5 @@ describe('in a fresh Nx workspace', () => { ); }); */ - }); - }); diff --git a/projects/nx-verdaccio/package.json b/projects/nx-verdaccio/package.json index 4172ae89..f63fd944 100644 --- a/projects/nx-verdaccio/package.json +++ b/projects/nx-verdaccio/package.json @@ -21,11 +21,15 @@ "sourceRoot": "packages/pkg/src", "projectType": "library", "name": "nx-verdaccio", - "tags": ["publishable"], + "tags": [ + "publishable" + ], "targets": { "build": { "executor": "@nx/js:tsc", - "outputs": ["{options.outputPath}"], + "outputs": [ + "{options.outputPath}" + ], "options": { "outputPath": "dist/nx-verdaccio", "main": "src/index.ts", diff --git a/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts b/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts index 6a80f3ef..ab4b5921 100644 --- a/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts +++ b/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts @@ -7,15 +7,27 @@ import { type ProjectConfiguration, readJsonFile, } from '@nx/devkit'; -import {dirname, join} from 'node:path'; -import type {NxVerdaccioCreateNodeOptions} from './schema'; -import {normalizeCreateNodesOptions, type NormalizedCreateNodeOptions,} from './normalize-create-nodes-options'; -import {hashObject} from 'nx/src/hasher/file-hasher'; -import {workspaceDataDirectory} from 'nx/src/utils/cache-directory'; -import {PLUGIN_NAME} from './constants'; -import {getCacheRecord, readTargetsCache, setCacheRecord, writeTargetsToCache,} from './caching'; -import {createProjectConfiguration} from './targets/create-targets'; -import {getPackageJsonNxConfig, getProjectConfig, getProjectJsonNxConfig} from "./project-config"; +import { dirname, join } from 'node:path'; +import type { NxVerdaccioCreateNodeOptions } from './schema'; +import { + normalizeCreateNodesOptions, + type NormalizedCreateNodeOptions, +} from './normalize-create-nodes-options'; +import { hashObject } from 'nx/src/hasher/file-hasher'; +import { workspaceDataDirectory } from 'nx/src/utils/cache-directory'; +import { PLUGIN_NAME } from './constants'; +import { + getCacheRecord, + readTargetsCache, + setCacheRecord, + writeTargetsToCache, +} from './caching'; +import { createProjectConfiguration } from './targets/create-targets'; +import { + getPackageJsonNxConfig, + getProjectConfig, + getProjectJsonNxConfig, +} from './project-config'; const PROJECT_JSON_FILE_GLOB = '**/project.json'; const PACKAGE_JSON_FILE_GLOB = '**/package.json'; @@ -24,7 +36,7 @@ const FILE_GLOB = `**/{project,package}.json`; export const createNodesV2: CreateNodesV2 = [ FILE_GLOB, async (configFiles, options, context) => { - const optionsHash = hashObject({options: options ?? {}}); + const optionsHash = hashObject({ options: options ?? {} }); const nxVerdaccioEnvPluginCachePath = join( workspaceDataDirectory, `push-based--${PLUGIN_NAME}-${optionsHash}.hash` @@ -34,12 +46,19 @@ export const createNodesV2: CreateNodesV2 = [ return await createNodesFromFiles( async (projectConfigurationFile, internalOptions) => { const isPkgJson = projectConfigurationFile.endsWith('package.json'); - if(isPkgJson) { - throw new Error('!!!!!!!!!!!!!!!!!!') + if (isPkgJson) { + throw new Error('!!!!!!!!!!!!!!!!!!'); } - const [primaryConfig, fallback] = isPkgJson ? [getPackageJsonNxConfig, getProjectJsonNxConfig] : [getProjectJsonNxConfig, getPackageJsonNxConfig]; - const projectConfiguration: ProjectConfiguration = await getProjectConfig(projectConfigurationFile, primaryConfig, fallback); + const [primaryConfig, fallback] = isPkgJson + ? [getPackageJsonNxConfig, getProjectJsonNxConfig] + : [getProjectJsonNxConfig, getPackageJsonNxConfig]; + const projectConfiguration: ProjectConfiguration = + await getProjectConfig( + projectConfigurationFile, + primaryConfig, + fallback + ); if ( !('name' in projectConfiguration) || typeof projectConfiguration.name !== 'string' @@ -71,7 +90,7 @@ export const createNodesV2: CreateNodesV2 = [ ); } } - const {targets, namedInputs = {}} = cachedProjectConfiguration; + const { targets, namedInputs = {} } = cachedProjectConfiguration; return { projects: { [projectRoot]: { diff --git a/projects/nx-verdaccio/src/plugin/project-config.ts b/projects/nx-verdaccio/src/plugin/project-config.ts index 2e58dd39..bb506d54 100644 --- a/projects/nx-verdaccio/src/plugin/project-config.ts +++ b/projects/nx-verdaccio/src/plugin/project-config.ts @@ -1,6 +1,6 @@ -import type {ProjectConfiguration} from '@nx/devkit'; -import {readFile} from 'node:fs/promises'; -import {dirname, join} from 'node:path'; +import type { ProjectConfiguration } from '@nx/devkit'; +import { readFile } from 'node:fs/promises'; +import { dirname, join } from 'node:path'; export async function getProjectJsonNxConfig(packageJsonFile: string) { const projectConfig: ProjectConfiguration = await readFile( @@ -14,20 +14,22 @@ export async function getProjectJsonNxConfig(packageJsonFile: string) { } export async function getPackageJsonNxConfig(packageJsonFile: string) { - const {nx: pkgNxConfig = {}} = await readFile( + const { nx: pkgNxConfig = {} } = await readFile( join(process.cwd(), packageJsonFile), 'utf8' ).then(JSON.parse); return pkgNxConfig; } -export async function getProjectConfig(projectConfigFile, getConfig:(projectConfigFile: string) => Promise, fallback: (projectConfigFile: string) => Promise) { - +export async function getProjectConfig( + projectConfigFile, + getConfig: (projectConfigFile: string) => Promise, + fallback: (projectConfigFile: string) => Promise +) { const pkgNxConfig = await getConfig(projectConfigFile); if (!('name' in pkgNxConfig) || typeof pkgNxConfig?.name !== 'string') { return await fallback(projectConfigFile); } return pkgNxConfig; - } From 03b2b99c10d90baf647f02db12011475888a6d7c Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 27 Dec 2024 18:22:27 +0100 Subject: [PATCH 3/3] wip --- .../fixtures/basic-nx-workspace.ts | 2 +- e2e/nx-verdaccio-e2e/project.json | 5 +- e2e/nx-verdaccio-e2e/setup/setup.ts | 177 ++++++----- .../plugin-create-nodes.e2e.test.ts.snap | 112 +++---- .../test/plugin-create-nodes.e2e.test.ts | 187 ++++++------ nx.json | 14 +- package-lock.json | 280 +++++------------- package.json | 3 + packages/pkg/pkg/README.md | 7 + packages/pkg/pkg/package.json | 11 + packages/pkg/pkg/project.json | 19 ++ packages/pkg/pkg/src/index.ts | 1 + packages/pkg/pkg/src/lib/pkg-pkg.ts | 3 + packages/pkg/pkg/tsconfig.json | 19 ++ packages/pkg/pkg/tsconfig.lib.json | 10 + .../src/plugin/nx-verdaccio.plugin.ts | 15 +- .../src/plugin/targets/create-targets.ts | 2 +- .../test-setup/src/lib/extend/path-matcher.ts | 10 +- testing/test-utils/src/lib/file-system.ts | 16 +- tsconfig.base.json | 1 + tsconfig.json | 6 + 21 files changed, 420 insertions(+), 480 deletions(-) create mode 100644 packages/pkg/pkg/README.md create mode 100644 packages/pkg/pkg/package.json create mode 100644 packages/pkg/pkg/project.json create mode 100644 packages/pkg/pkg/src/index.ts create mode 100644 packages/pkg/pkg/src/lib/pkg-pkg.ts create mode 100644 packages/pkg/pkg/tsconfig.json create mode 100644 packages/pkg/pkg/tsconfig.lib.json create mode 100644 tsconfig.json diff --git a/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts b/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts index 7ea8c55b..7b767f0a 100644 --- a/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts +++ b/e2e/nx-verdaccio-e2e/fixtures/basic-nx-workspace.ts @@ -1,6 +1,6 @@ import { join } from 'node:path'; -export const REPO_NAME = '__nx-ts-repo__'; +export const REPO_NAME = 'nx-ts-repo'; export const envRoot = `tmp/environments/${process.env['NX_TASK_TARGET_PROJECT']}`; export const projectName = 'pkg'; export const e2eProjectName = 'pkg-e2e'; diff --git a/e2e/nx-verdaccio-e2e/project.json b/e2e/nx-verdaccio-e2e/project.json index 4fbe0a24..d94d0ea9 100644 --- a/e2e/nx-verdaccio-e2e/project.json +++ b/e2e/nx-verdaccio-e2e/project.json @@ -10,11 +10,10 @@ "nxv-env-setup": { "cache": false, "options": { - "skipInstall": true, - "postScript": "npx tsx --tsconfig e2e/nx-verdaccio-e2e/tsconfig.spec.json e2e/nx-verdaccio-e2e/setup/exec-global-setup.ts" + "skipInstall": true } }, - "_e2e": { + "e2e": { "executor": "@nx/vite:test", "inputs": ["default", "^production"], "outputs": ["{options.reportsDirectory}"], diff --git a/e2e/nx-verdaccio-e2e/setup/setup.ts b/e2e/nx-verdaccio-e2e/setup/setup.ts index d49cee46..a15dfe0a 100644 --- a/e2e/nx-verdaccio-e2e/setup/setup.ts +++ b/e2e/nx-verdaccio-e2e/setup/setup.ts @@ -5,36 +5,45 @@ import { objectToCliArgs, updateJson, } from '@push-based/test-utils'; -import { copyFile, lstat, mkdir, readdir } from 'fs/promises'; -import { join } from 'path'; -import { dirname, join } from 'node:path'; -import { copyFile, mkdir, symlink, readlink } from 'node:fs/promises'; +import {copyFile, lstat, mkdir, rm, readdir} from 'fs/promises'; +import {join} from 'path'; +import {dirname, join} from 'node:path'; +import {copyFile, writeFile, mkdir, symlink, readlink} from 'node:fs/promises'; import { logger, NxJsonConfiguration, - PluginConfiguration, + PluginConfiguration, ProjectConfiguration, TargetConfiguration, } from '@nx/devkit'; -import { PackageJson } from 'nx/src/utils/package-json'; +import {PackageJson} from 'nx/src/utils/package-json'; +import {writeFileDefaults} from "memfs/lib/node/options"; +import {readFile} from "@nx/plugin/testing"; +import {REPO_NAME} from "../fixtures/basic-nx-workspace"; export async function setup({ - envRoot, - projectName, - repoName, -}: { + envRoot, + projectName, + repoName, + }: { envRoot: string; repoName: string; projectName: string; }) { // dedupe packages because symlink copy problems - await mkdir(envRoot, { recursive: true }); + await mkdir(envRoot, {recursive: true}); + + await copyFile( + join(getTestEnvironmentRoot(projectName), '.npmrc'), + join(envRoot, '.npmrc') + ); + // setup nx environment for e2e tests logger.info(`Created nx workspace under ${envRoot}`); await executeProcess({ command: 'npx', args: objectToCliArgs({ - _: ['--yes', '--quiet', 'create-nx-workspace'], - name: repoName, + _: ['--yes', '--quiet', 'create-nx-workspace@18'], + name: `${repoName}-18`, preset: 'ts', ci: 'skip', e2eTestRunner: 'none', @@ -44,65 +53,56 @@ export async function setup({ cwd: dirname(envRoot), }); - logger.info(`Add project & target`); - await executeProcess({ - command: 'nx', - args: objectToCliArgs({ - _: ['generate', '@nx/js:library', 'pkg'], - directory: 'packages/pkg', - bundler: 'tsc', - unitTestRunner: 'none', - linter: 'none', - interactive: false, - }), - verbose: true, - cwd: envRoot, - }); - await updateJson( - join(envRoot, 'packages', 'pkg', 'package.json'), - (json) => ({ - ...json, - nx: { - ...json?.nx, + logger.info(`Add project & target`); + await executeProcess({ + command: 'nx', + args: objectToCliArgs({ + _: ['generate', '@nx/js:library', 'pkg'], + name: `pkg`, + directory: 'packages/pkg', + bundler: 'tsc', + unitTestRunner: 'none', + linter: 'none', + interactive: false, + }), + verbose: true, + cwd: envRoot, + }); + + logger.info(`Add e2e project & target`); + await executeProcess({ + command: 'nx', + args: objectToCliArgs({ + _: ['generate', '@nx/js:library', 'pkg-e2e'], + name: `pkg-e2e`, + directory: 'packages/pkg-e2e', + bundler: 'tsc', + unitTestRunner: 'none', + linter: 'none', + interactive: false, + }), + verbose: true, + cwd: envRoot, + }); + /* + await updateJson( + join(envRoot, 'packages', 'pkg-e2e', 'project.json'), + (json) => ({ + ...json, + name: 'pkg-e2e', + root: join(envRoot, 'packages', 'pkg-e2e'), + projectType: 'application', targets: { - ...json?.nx?.targets, - build: { - options: { - outputPath: ['dist/pkg'], - }, - command: 'echo "lib"', + ...json?.targets, + e2e: { + command: 'echo "e2e"', }, - }, - }, - }) - ); - - logger.info(`Add e2e project & target`); - await executeProcess({ - command: 'nx', - args: objectToCliArgs({ - _: ['generate', '@nx/js:library', 'pkg-e2e'], - directory: 'packages/pkg-e2e', - bundler: 'tsc', - unitTestRunner: 'none', - linter: 'none', - interactive: false, - }), - verbose: true, - cwd: envRoot, - }); - await updateJson( - join(envRoot, 'packages', 'pkg-e2e', 'package.json'), - (json) => - updatePackageJsonNxTargets(json, { - ...json?.nx?.targets, - e2e: { - command: 'echo "e2e"', - }, + } }) - ); - + ); + */ logger.info(`Install @push-based/nx-verdaccio`); + await executeProcess({ command: 'npm', args: objectToCliArgs({ @@ -118,13 +118,10 @@ export async function setup({ DEFAULT_TEST_FIXTURE_DIST, repoName ), - { recursive: true } - ); - await copyFile( - join(getTestEnvironmentRoot(projectName), '.npmrc'), - join(envRoot, '.npmrc') + {recursive: true} ); + await executeProcess({ command: 'npm', args: objectToCliArgs({ @@ -153,6 +150,29 @@ export async function registerNxVerdaccioPlugin( ); } + +async function updatePackageJsonTargets( + targetFile: string, + projectConfig: ProjectConfiguration +) { + let json = undefined; + try { + const j = await readFile(targetFile); + json = JSON.parse(j.toString()); + } catch (e) { + json = {} + } + await writeFile(targetFile, JSON.stringify({ + ...json, + ...projectConfig, + targets: { + ...json?.targets, + ...projectConfig.targets, + }, + }, null, 2)); +} + + export function registerPluginInNxJson( nxJson: NxJsonConfiguration, pluginConfig: PluginConfiguration @@ -186,13 +206,16 @@ function updatePackageJsonNxTargets( export async function copyDirectory( src: string, dest: string, - exclude: string[] = [] + {exclude = [], cleanup}?: { exclude?: string[], cleanup?: boolean } = {exclude: []} ) { + if (cleanup) { + await rm(dest, {recursive: true}); + } // Ensure the destination directory exists - await mkdir(dest, { recursive: true }); + await mkdir(dest, {recursive: true}); // Read the contents of the source directory - const entries = await readdir(src, { withFileTypes: true }); + const entries = await readdir(src, {withFileTypes: true}); for (const entry of entries) { const srcPath = join(src, entry.name); @@ -209,7 +232,7 @@ export async function copyDirectory( await symlink(linkTarget, destPath); } else if (stats.isDirectory()) { // Recursively copy directories - await copyDirectory(srcPath, destPath, exclude); + await copyDirectory(srcPath, destPath, {exclude}); } else if (stats.isFile()) { // Copy files await copyFile(srcPath, destPath); diff --git a/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap b/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap index b7ebb99b..2211d6f6 100644 --- a/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap +++ b/e2e/nx-verdaccio-e2e/test/__snapshots__/plugin-create-nodes.e2e.test.ts.snap @@ -1,46 +1,18 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`in a fresh Nx workspace > nx-verdaccio plugin create-nodes-v2 > should add package targets to library project 1`] = ` +exports[`in a fresh Nx workspace > with nx-verdaccio plugin installed > should add package targets to library project 1`] = ` { - "nxv-pkg-install": { - "configurations": {}, - "dependsOn": [ - { - "params": "forward", - "target": "nxv-pkg-publish", - }, - { - "params": "forward", - "projects": "dependencies", - "target": "nxv-pkg-install", - }, - ], - "executor": "@push-based/nx-verdaccio:pkg-install", - "options": {}, - "parallelism": true, - }, - "nxv-pkg-publish": { + "build": { "configurations": {}, - "dependsOn": [ - { - "params": "forward", - "target": "build", - }, - { - "params": "forward", - "projects": "dependencies", - "target": "nxv-pkg-publish", - }, - ], - "executor": "@push-based/nx-verdaccio:pkg-publish", - "options": {}, + "executor": "nx:run-commands", + "options": { + "command": "echo "lib"", + "outputPath": [ + "dist/pkg", + ], + }, "parallelism": true, }, -} -`; - -exports[`in a fresh Nx workspace > with nx-verdaccio plugin installed > should add package targets to library project 1`] = ` -{ "nxv-pkg-install": { "configurations": {}, "dependsOn": [ @@ -75,44 +47,50 @@ exports[`in a fresh Nx workspace > with nx-verdaccio plugin installed > should a "options": {}, "parallelism": true, }, -} -`; - -exports[`nx-verdaccio plugin create-nodes-v2 > should add package targets to library project 1`] = ` -{ - "nxv-pkg-install": { + "typecheck": { + "cache": true, "configurations": {}, "dependsOn": [ - { - "params": "forward", - "target": "nxv-pkg-publish", - }, - { - "params": "forward", - "projects": "dependencies", - "target": "nxv-pkg-install", - }, + "^typecheck", ], - "executor": "@push-based/nx-verdaccio:pkg-install", - "options": {}, - "parallelism": true, - }, - "nxv-pkg-publish": { - "configurations": {}, - "dependsOn": [ + "executor": "nx:run-commands", + "inputs": [ + "{workspaceRoot}/tsconfig.base.json", + "{projectRoot}/tsconfig.json", + "{projectRoot}/tsconfig.lib.json", + "{projectRoot}/src/**/*.ts", + "^production", { - "params": "forward", - "target": "build", + "externalDependencies": [ + "typescript", + ], }, - { - "params": "forward", - "projects": "dependencies", - "target": "nxv-pkg-publish", + ], + "metadata": { + "description": "Runs type-checking for the project.", + "help": { + "command": "npx tsc --build --help", + "example": { + "args": [ + "--force", + ], + }, }, + "technologies": [ + "typescript", + ], + }, + "options": { + "command": "tsc --build --emitDeclarationOnly --pretty --verbose", + "cwd": "packages/pkg", + }, + "outputs": [ + "{projectRoot}/dist", ], - "executor": "@push-based/nx-verdaccio:pkg-publish", - "options": {}, "parallelism": true, + "syncGenerators": [ + "@nx/js:typescript-sync", + ], }, } `; diff --git a/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts b/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts index 249b5288..f17d3117 100644 --- a/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts +++ b/e2e/nx-verdaccio-e2e/test/plugin-create-nodes.e2e.test.ts @@ -1,90 +1,92 @@ -import type { Tree } from '@nx/devkit'; -import { join } from 'node:path'; -import { afterEach, beforeAll, expect } from 'vitest'; -import { nxShowProjectJson } from '@push-based/test-nx-utils'; -import { copyDirectory, registerNxVerdaccioPlugin } from '../setup/setup'; -import { mkdir } from 'node:fs/promises'; +import type {ProjectConfiguration, Tree} from '@nx/devkit'; +import {join} from 'node:path'; +import {afterAll, afterEach, beforeAll, beforeEach, expect} from 'vitest'; +import {nxShowProjectJson, registerPluginInWorkspace} from '@push-based/test-nx-utils'; +import {copyDirectory, registerNxVerdaccioPlugin, registerPluginInNxJson} from '../setup/setup'; +import {mkdir} from 'node:fs/promises'; import { + TARGET_ENVIRONMENT_BOOTSTRAP, + TARGET_ENVIRONMENT_INSTALL, + TARGET_ENVIRONMENT_SETUP, + TARGET_ENVIRONMENT_VERDACCIO_START, TARGET_ENVIRONMENT_VERDACCIO_STOP, TARGET_PACKAGE_INSTALL, - TARGET_PACKAGE_PUBLISH, + TARGET_PACKAGE_PUBLISH } from '@push-based/nx-verdaccio'; import { DEFAULT_TEST_FIXTURE_DIST, - getTestEnvironmentRoot, + getTestEnvironmentRoot, teardownTestFolder, } from '@push-based/test-utils'; // eslint-disable-next-line @nx/enforce-module-boundaries -import { REPO_NAME } from '../fixtures/basic-nx-workspace'; +import {REPO_NAME} from '../fixtures/basic-nx-workspace'; +import {copyFile} from "fs/promises"; +import {updateJson} from '@push-based/test-utils'; describe('in a fresh Nx workspace', () => { const projectName = process.env['NX_TASK_TARGET_PROJECT']; const envRoot = getTestEnvironmentRoot(projectName); - const basicNxReopPath = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, REPO_NAME); + const basicNxReopPath = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, `${REPO_NAME}-18`); const baseDir = join(envRoot, DEFAULT_TEST_FIXTURE_DIST, 'create-nodes-v2'); beforeAll(async () => { - await mkdir(baseDir, { recursive: true }); - await copyDirectory(basicNxReopPath, baseDir, []); + await mkdir(baseDir, {recursive: true}); + await copyDirectory(basicNxReopPath, baseDir); }); - afterEach(async () => { + afterAll(async () => { // await teardownTestFolder(baseDir); }); + describe('with nx-verdaccio plugin installed', () => { - beforeAll(async () => { - await registerNxVerdaccioPlugin(baseDir); + beforeEach(async () => { + await copyFile(join(basicNxReopPath, 'nx.json'), join(baseDir, 'nx.json')); + await copyDirectory(join(basicNxReopPath, 'packages'), join(baseDir, 'packages'), {cleanup: true}); }); it('should add package targets to library project', async () => { - const { code, projectJson } = await nxShowProjectJson(baseDir, 'pkg'); + await registerNxVerdaccioPlugin(baseDir); + + const {code, projectJson} = await nxShowProjectJson(baseDir, 'pkg'); expect(code).toBe(0); - expect(projectJson.targets).toStrictEqual({ - [TARGET_PACKAGE_INSTALL]: expect.objectContaining({ - dependsOn: [ - { - target: TARGET_PACKAGE_PUBLISH, - params: 'forward', - }, - { - target: TARGET_PACKAGE_INSTALL, - projects: 'dependencies', - params: 'forward', - }, - ], - executor: '@push-based/nx-verdaccio:pkg-install', - }), - [TARGET_PACKAGE_PUBLISH]: expect.objectContaining({ - dependsOn: [ - { - params: 'forward', - target: 'build', - }, - { - params: 'forward', - projects: 'dependencies', - target: 'nxv-pkg-publish', - }, - ], - executor: '@push-based/nx-verdaccio:pkg-publish', - }), - }); + expect(projectJson.targets).toStrictEqual( + expect.objectContaining({ + [TARGET_PACKAGE_INSTALL]: expect.objectContaining({ + dependsOn: [ + { + target: TARGET_PACKAGE_PUBLISH, + params: 'forward', + }, + { + target: TARGET_PACKAGE_INSTALL, + projects: 'dependencies', + params: 'forward', + }, + ], + executor: '@push-based/nx-verdaccio:pkg-install', + }), + [TARGET_PACKAGE_PUBLISH]: expect.objectContaining({ + dependsOn: [ + { + params: 'forward', + target: 'build', + }, + { + params: 'forward', + projects: 'dependencies', + target: 'nxv-pkg-publish', + }, + ], + executor: '@push-based/nx-verdaccio:pkg-publish', + }) + })); expect(projectJson.targets).toMatchSnapshot(); }); - /* + it('should NOT add package targets to application project', async () => { - const cwd = join(baseDir, 'no-pkg-targets'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], - }, - }, - }); - await materializeTree(tree, cwd); + await registerNxVerdaccioPlugin(baseDir); - const {projectJson} = await nxShowProjectJson(cwd, 'pkg-e2e'); + const {projectJson} = await nxShowProjectJson(baseDir, 'pkg-e2e'); expect(projectJson.targets).toStrictEqual( expect.not.objectContaining({ @@ -95,8 +97,7 @@ describe('in a fresh Nx workspace', () => { }); it('should add package targets to library project if some tag of options.packages.filterByTag match', async () => { - const cwd = join(baseDir, 'add-pkg-targets-filterByTag'); - registerPluginInWorkspace(tree, { + await registerNxVerdaccioPlugin(baseDir, { plugin: '@push-based/nx-verdaccio', options: { environments: { @@ -107,61 +108,41 @@ describe('in a fresh Nx workspace', () => { }, }, }); - updateProjectConfiguration(tree, projectB, { - root: `projects/${projectB}`, - sourceRoot: 'projects/lib-b/src', + await updateJson(join(baseDir, 'packages', 'pkg', 'project.json'), (json) => ({ + ...json, + root: `packages/pkg`, + sourceRoot: 'packages/pkg/src', projectType: 'library', tags: ['publish'], - }); - await materializeTree(tree, cwd); - - const {projectJson: projectJsonB} = await nxShowProjectJson( - cwd, - projectB - ); - expect(projectJsonB.name).toBe(projectB); - expect(projectJsonB.tags).toStrictEqual(['publish']); - expect(projectJsonB.targets).toStrictEqual( - expect.objectContaining({ - [TARGET_PACKAGE_INSTALL]: expect.any(Object), - [TARGET_PACKAGE_PUBLISH]: expect.any(Object), - }) - ); + })); - const {projectJson: projectJsonA} = await nxShowProjectJson( - cwd, + const {projectJson} = await nxShowProjectJson( + baseDir, 'pkg' ); - expect(projectJsonA.name).toBe('pkg'); - expect(projectJsonA.tags).toStrictEqual([]); - expect(projectJsonA.targets).toStrictEqual( - expect.not.objectContaining({ + expect(projectJson.name).toBe('pkg'); + expect(projectJson.tags).toStrictEqual(expect.arrayContaining(['publish'])); + expect(projectJson.targets).toStrictEqual( + expect.objectContaining({ [TARGET_PACKAGE_INSTALL]: expect.any(Object), [TARGET_PACKAGE_PUBLISH]: expect.any(Object), }) ); }); - it('should add environment targets to project with targetName e2e dynamically', async () => { - const cwd = join(baseDir, 'add-env-targets'); - registerPluginInWorkspace(tree, { - plugin: '@push-based/nx-verdaccio', - options: { - environments: { - targetNames: ['e2e'], - }, - }, - }); - updateProjectConfiguration(tree, 'pkg-e2e', { - root: e2eProjectARoot, + it.only('should add environment targets to project with targetName e2e dynamically', async () => { + await registerNxVerdaccioPlugin(baseDir); + await updateJson(join(baseDir, 'packages', 'pkg-e2e', 'project.json'), (json) => ({ + ...json, + name: 'pkg-e2e', projectType: 'application', targets: { e2e: {}, }, - }); - await materializeTree(tree, cwd); + implicitDependencies: ['pkg'], + })); - const {code, projectJson} = await nxShowProjectJson(cwd, 'pkg-e2e'); + const {code, projectJson} = await nxShowProjectJson(baseDir, 'pkg-e2e'); expect(code).toBe(0); expect(projectJson.targets).toStrictEqual( @@ -254,8 +235,7 @@ describe('in a fresh Nx workspace', () => { }); it('should NOT add environment targets to project without targetName e2e', async () => { - const cwd = join(baseDir, 'no-env-targets'); - registerPluginInWorkspace(tree, { + registerNxVerdaccioPlugin(baseDir, { plugin: '@push-based/nx-verdaccio', options: { environments: { @@ -263,9 +243,8 @@ describe('in a fresh Nx workspace', () => { }, }, }); - await materializeTree(tree, cwd); - const {projectJson} = await nxShowProjectJson(cwd, 'pkg-e2e'); + const {projectJson} = await nxShowProjectJson(baseDir, 'pkg-e2e'); expect(projectJson.targets).toStrictEqual( expect.not.objectContaining({ @@ -277,6 +256,6 @@ describe('in a fresh Nx workspace', () => { }) ); }); - */ + }); }); diff --git a/nx.json b/nx.json index 57ddef60..d231d3b0 100644 --- a/nx.json +++ b/nx.json @@ -87,6 +87,18 @@ } }, "plugins": [ + { + "plugin": "@nx/js/typescript", + "options": { + "typecheck": { + "targetName": "typecheck" + }, + "build": { + "targetName": "build", + "configName": "tsconfig.lib.json" + } + } + }, { "plugin": "./projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts", "include": ["e2e/nx-verdaccio-e2e/**"], @@ -95,7 +107,7 @@ "filterByTags": ["publishable"] }, "environments": { - "targetNames": ["_e2e", "_e2e-static"] + "targetNames": ["e2e", "_e2e-static"] } } }, diff --git a/package-lock.json b/package-lock.json index 66d3d4b8..450e12ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@push-based/source", "version": "0.0.0", "license": "MIT", + "dependencies": { + "@push-based/nx-verdaccio": "^0.0.0-alpha.26" + }, "devDependencies": { "@code-pushup/cli": "^0.54.0", "@code-pushup/core": "^0.54.0", @@ -2035,7 +2038,6 @@ }, "node_modules/@emnapi/core": { "version": "1.3.1", - "dev": true, "license": "MIT", "dependencies": { "@emnapi/wasi-threads": "1.0.1", @@ -2044,7 +2046,6 @@ }, "node_modules/@emnapi/runtime": { "version": "1.3.1", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" @@ -2052,7 +2053,6 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" @@ -3027,7 +3027,6 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -3214,7 +3213,6 @@ }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1" @@ -3222,7 +3220,6 @@ }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "dev": true, "license": "MIT" }, "node_modules/@mole-inc/bin-wrapper": { @@ -3291,7 +3288,6 @@ }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.4", - "dev": true, "license": "MIT", "dependencies": { "@emnapi/core": "^1.1.0", @@ -3333,7 +3329,6 @@ }, "node_modules/@nrwl/devkit": { "version": "19.8.0", - "dev": true, "license": "MIT", "dependencies": { "@nx/devkit": "19.8.0" @@ -3381,7 +3376,6 @@ }, "node_modules/@nrwl/tao": { "version": "19.8.0", - "dev": true, "license": "MIT", "dependencies": { "nx": "19.8.0", @@ -3417,7 +3411,6 @@ }, "node_modules/@nx/devkit": { "version": "19.8.0", - "dev": true, "license": "MIT", "dependencies": { "@nrwl/devkit": "19.8.0", @@ -3949,7 +3942,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -3965,7 +3957,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3981,7 +3972,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3997,7 +3987,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -4029,7 +4018,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -4045,7 +4033,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -4061,7 +4048,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -4203,6 +4189,17 @@ "node": ">=18.16.0" } }, + "node_modules/@push-based/nx-verdaccio": { + "version": "0.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@push-based/nx-verdaccio/-/nx-verdaccio-0.0.0-alpha.26.tgz", + "integrity": "sha512-Go11Dg+w5Ntl5Ig8YNzVVPbpOG85aVszjyBIK0FvVBX+/QllQY1F4fP8K8fYnMJnO9v5Tao3cryGFY5Zo9i+/g==", + "dependencies": { + "@nx/devkit": "19.8.0", + "ansis": "^3.3.2", + "simple-git": "^3.27.0", + "tslib": "^2.3.0" + } + }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.24.0", "cpu": [ @@ -4241,7 +4238,6 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -4273,7 +4269,7 @@ }, "node_modules/@swc-node/core": { "version": "1.13.3", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 10" @@ -4289,7 +4285,7 @@ }, "node_modules/@swc-node/register": { "version": "1.9.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@swc-node/core": "^1.13.1", @@ -4310,7 +4306,7 @@ }, "node_modules/@swc-node/sourcemap-support": { "version": "0.5.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "source-map-support": "^0.5.21", @@ -4319,7 +4315,7 @@ }, "node_modules/@swc-node/sourcemap-support/node_modules/source-map": { "version": "0.6.1", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -4327,7 +4323,7 @@ }, "node_modules/@swc-node/sourcemap-support/node_modules/source-map-support": { "version": "0.5.21", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -4371,7 +4367,7 @@ "version": "1.7.39", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.39.tgz", "integrity": "sha512-jns6VFeOT49uoTKLWIEfiQqJAlyqldNAt80kAr8f7a5YjX0zgnG3RBiLMpksx4Ka4SlK4O6TJ/lumIM3Trp82g==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "dependencies": { "@swc/counter": "^0.1.3", @@ -4567,7 +4563,7 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@swc/helpers": { @@ -4580,7 +4576,7 @@ }, "node_modules/@swc/types": { "version": "0.1.13", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -4632,7 +4628,6 @@ }, "node_modules/@tybys/wasm-util": { "version": "0.9.0", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" @@ -4924,13 +4919,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz", - "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz", + "integrity": "sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.18.1", - "@typescript-eslint/utils": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.2", + "@typescript-eslint/utils": "8.18.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4947,9 +4942,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", - "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.2.tgz", + "integrity": "sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4960,13 +4955,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", - "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz", + "integrity": "sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4986,12 +4981,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", - "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz", + "integrity": "sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/types": "8.18.2", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -5111,15 +5106,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz", - "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.2.tgz", + "integrity": "sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.18.1", - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/typescript-estree": "8.18.1" + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/typescript-estree": "8.18.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5134,13 +5129,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz", - "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz", + "integrity": "sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1" + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5151,9 +5146,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", - "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.2.tgz", + "integrity": "sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5164,13 +5159,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", - "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz", + "integrity": "sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5190,12 +5185,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", - "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz", + "integrity": "sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/types": "8.18.2", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -5992,12 +5987,10 @@ }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { "version": "3.0.0-rc.46", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "js-yaml": "^3.10.0", @@ -6009,7 +6002,6 @@ }, "node_modules/@zkochan/js-yaml": { "version": "0.0.7", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -6020,7 +6012,6 @@ }, "node_modules/@zkochan/js-yaml/node_modules/argparse": { "version": "2.0.1", - "dev": true, "license": "Python-2.0" }, "node_modules/abab": { @@ -6128,7 +6119,6 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6162,7 +6152,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -6176,7 +6165,6 @@ }, "node_modules/ansis": { "version": "3.3.2", - "dev": true, "license": "ISC", "engines": { "node": ">=15" @@ -6228,7 +6216,6 @@ }, "node_modules/argparse": { "version": "1.0.10", - "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -6275,12 +6262,10 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true, "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", - "dev": true, "license": "MIT" }, "node_modules/atomic-sleep": { @@ -6306,7 +6291,6 @@ }, "node_modules/axios": { "version": "1.7.7", - "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -6508,7 +6492,6 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/bare-events": { @@ -6519,7 +6502,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "dev": true, "funding": [ { "type": "github", @@ -6668,7 +6650,6 @@ }, "node_modules/bl": { "version": "4.1.0", - "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -6722,7 +6703,6 @@ }, "node_modules/brace-expansion": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -6799,7 +6779,6 @@ }, "node_modules/buffer": { "version": "5.7.1", - "dev": true, "funding": [ { "type": "github", @@ -6827,7 +6806,7 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/build-md": { @@ -7000,7 +6979,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -7015,7 +6993,6 @@ }, "node_modules/chalk/node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7023,7 +7000,6 @@ }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -7099,7 +7075,6 @@ }, "node_modules/cli-spinners": { "version": "2.6.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7228,7 +7203,6 @@ }, "node_modules/cliui": { "version": "8.0.1", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -7241,7 +7215,6 @@ }, "node_modules/cliui/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7249,12 +7222,10 @@ }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7262,7 +7233,6 @@ }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -7275,7 +7245,6 @@ }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -7286,7 +7255,6 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -7302,7 +7270,6 @@ }, "node_modules/clone": { "version": "1.0.4", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -7335,7 +7302,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -7346,12 +7312,11 @@ }, "node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/columnify": { @@ -7387,7 +7352,6 @@ }, "node_modules/combined-stream": { "version": "1.0.8", - "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -7452,7 +7416,6 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/confbox": { @@ -7656,7 +7619,6 @@ }, "node_modules/debug": { "version": "4.3.7", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -7726,7 +7688,6 @@ }, "node_modules/defaults": { "version": "1.0.4", - "dev": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" @@ -7761,7 +7722,6 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7769,7 +7729,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -7826,7 +7785,6 @@ }, "node_modules/diff-sequences": { "version": "29.6.3", - "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -7867,7 +7825,6 @@ }, "node_modules/dotenv": { "version": "16.4.5", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -7878,7 +7835,6 @@ }, "node_modules/dotenv-expand": { "version": "11.0.6", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "dotenv": "^16.4.4" @@ -7892,7 +7848,6 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "dev": true, "license": "MIT" }, "node_modules/duplexify": { @@ -7963,7 +7918,6 @@ }, "node_modules/ejs": { "version": "3.1.10", - "dev": true, "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -8007,7 +7961,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -8015,7 +7968,6 @@ }, "node_modules/enquirer": { "version": "2.3.6", - "dev": true, "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" @@ -8124,7 +8076,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8407,7 +8358,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -8797,7 +8747,6 @@ }, "node_modules/figures": { "version": "3.2.0", - "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -8811,7 +8760,6 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -8846,7 +8794,6 @@ }, "node_modules/filelist": { "version": "1.0.4", - "dev": true, "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" @@ -8854,7 +8801,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -8959,7 +8905,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "dev": true, "license": "BSD-3-Clause", "bin": { "flat": "cli.js" @@ -8985,7 +8930,6 @@ }, "node_modules/follow-redirects": { "version": "1.15.9", - "dev": true, "funding": [ { "type": "individual", @@ -9012,7 +8956,6 @@ }, "node_modules/form-data": { "version": "4.0.1", - "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -9041,7 +8984,6 @@ }, "node_modules/front-matter": { "version": "4.0.2", - "dev": true, "license": "MIT", "dependencies": { "js-yaml": "^3.13.1" @@ -9049,12 +8991,10 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/fs-extra": { "version": "11.2.0", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -9100,7 +9040,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -9323,7 +9262,6 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -9626,7 +9564,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -9645,7 +9582,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -9711,7 +9647,6 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, "node_modules/ipaddr.js": { @@ -9748,7 +9683,6 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -9809,7 +9743,6 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9864,7 +9797,6 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -9875,7 +9807,6 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "dev": true, "license": "MIT", "dependencies": { "is-docker": "^2.0.0" @@ -9989,7 +9920,6 @@ }, "node_modules/jake": { "version": "10.9.2", - "dev": true, "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", @@ -10006,7 +9936,6 @@ }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.11", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -10015,7 +9944,6 @@ }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10274,7 +10202,6 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -10356,7 +10283,6 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10723,7 +10649,6 @@ }, "node_modules/js-yaml": { "version": "3.14.1", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -10825,7 +10750,6 @@ }, "node_modules/json5": { "version": "2.2.3", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -10853,12 +10777,10 @@ }, "node_modules/jsonc-parser": { "version": "3.2.0", - "dev": true, "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", - "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -10982,7 +10904,6 @@ }, "node_modules/lines-and-columns": { "version": "2.0.3", - "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -11088,7 +11009,6 @@ }, "node_modules/log-symbols": { "version": "4.1.0", - "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -11392,7 +11312,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11400,7 +11319,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -11411,7 +11329,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11439,7 +11356,6 @@ }, "node_modules/minimatch": { "version": "9.0.3", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -11453,7 +11369,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11491,7 +11406,6 @@ }, "node_modules/ms": { "version": "2.1.3", - "dev": true, "license": "MIT" }, "node_modules/multi-progress-bars": { @@ -11509,9 +11423,9 @@ } }, "node_modules/multi-progress-bars/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -11644,7 +11558,6 @@ }, "node_modules/node-machine-id": { "version": "1.1.12", - "dev": true, "license": "MIT" }, "node_modules/node-releases": { @@ -11687,7 +11600,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -11703,7 +11615,6 @@ }, "node_modules/nx": { "version": "19.8.0", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -11774,7 +11685,6 @@ }, "node_modules/nx/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11782,7 +11692,6 @@ }, "node_modules/nx/node_modules/cli-cursor": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -11793,12 +11702,10 @@ }, "node_modules/nx/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "license": "MIT" }, "node_modules/nx/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11806,7 +11713,6 @@ }, "node_modules/nx/node_modules/onetime": { "version": "5.1.2", - "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -11820,7 +11726,6 @@ }, "node_modules/nx/node_modules/restore-cursor": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -11832,7 +11737,6 @@ }, "node_modules/nx/node_modules/string-width": { "version": "4.2.3", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11845,7 +11749,6 @@ }, "node_modules/nx/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -11902,7 +11805,6 @@ }, "node_modules/once": { "version": "1.4.0", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -11925,7 +11827,6 @@ }, "node_modules/open": { "version": "8.4.2", - "dev": true, "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -11965,7 +11866,6 @@ }, "node_modules/ora": { "version": "5.3.0", - "dev": true, "license": "MIT", "dependencies": { "bl": "^4.0.3", @@ -11986,7 +11886,6 @@ }, "node_modules/ora/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11994,7 +11893,6 @@ }, "node_modules/ora/node_modules/cli-cursor": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -12005,7 +11903,6 @@ }, "node_modules/ora/node_modules/onetime": { "version": "5.1.2", - "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -12019,7 +11916,6 @@ }, "node_modules/ora/node_modules/restore-cursor": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -12031,7 +11927,6 @@ }, "node_modules/ora/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12195,7 +12090,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12337,9 +12231,10 @@ } }, "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.5.2", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.6.0.tgz", + "integrity": "sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==", "dev": true, - "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -12363,7 +12258,7 @@ }, "node_modules/pirates": { "version": "4.0.6", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 6" @@ -12486,7 +12381,6 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -12499,7 +12393,6 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -12577,7 +12470,6 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "dev": true, "license": "MIT" }, "node_modules/pseudomap": { @@ -12723,12 +12615,10 @@ }, "node_modules/react-is": { "version": "18.3.1", - "dev": true, "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -12825,7 +12715,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13020,7 +12909,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -13068,7 +12956,6 @@ }, "node_modules/semver": { "version": "7.6.3", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13224,12 +13111,10 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, "license": "ISC" }, "node_modules/simple-git": { "version": "3.27.0", - "dev": true, "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -13368,7 +13253,6 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/sshpk": { @@ -13460,7 +13344,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -13668,7 +13551,6 @@ }, "node_modules/strong-log-transformer": { "version": "2.1.0", - "dev": true, "license": "Apache-2.0", "dependencies": { "duplexer": "^0.1.1", @@ -13728,7 +13610,6 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "dev": true, "license": "MIT", "dependencies": { "bl": "^4.0.3", @@ -13817,7 +13698,6 @@ }, "node_modules/through": { "version": "2.3.8", - "dev": true, "license": "MIT" }, "node_modules/through2": { @@ -13879,7 +13759,6 @@ }, "node_modules/tmp": { "version": "0.2.3", - "dev": true, "license": "MIT", "engines": { "node": ">=14.14" @@ -14113,7 +13992,6 @@ }, "node_modules/tsconfig-paths": { "version": "4.2.0", - "dev": true, "license": "MIT", "dependencies": { "json5": "^2.2.2", @@ -14126,7 +14004,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -14134,7 +14011,6 @@ }, "node_modules/tslib": { "version": "2.8.0", - "dev": true, "license": "0BSD" }, "node_modules/tsx": { @@ -14650,7 +14526,7 @@ }, "node_modules/typescript": { "version": "5.5.4", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -14725,7 +14601,6 @@ }, "node_modules/universalify": { "version": "2.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -14797,7 +14672,6 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -15365,7 +15239,6 @@ }, "node_modules/wcwidth": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" @@ -15562,7 +15435,6 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -15620,7 +15492,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -15641,7 +15512,6 @@ }, "node_modules/yargs": { "version": "17.7.2", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -15658,7 +15528,6 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -15666,7 +15535,6 @@ }, "node_modules/yargs/node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15674,12 +15542,10 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -15687,7 +15553,6 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -15700,7 +15565,6 @@ }, "node_modules/yargs/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" diff --git a/package.json b/package.json index 1baa554e..2e403e03 100644 --- a/package.json +++ b/package.json @@ -75,5 +75,8 @@ "directories": { "doc": "docs", "example": "examples" + }, + "dependencies": { + "@push-based/nx-verdaccio": "^0.0.0-alpha.26" } } diff --git a/packages/pkg/pkg/README.md b/packages/pkg/pkg/README.md new file mode 100644 index 00000000..22392145 --- /dev/null +++ b/packages/pkg/pkg/README.md @@ -0,0 +1,7 @@ +# pkg-pkg + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build pkg-pkg` to build the library. diff --git a/packages/pkg/pkg/package.json b/packages/pkg/pkg/package.json new file mode 100644 index 00000000..d789e181 --- /dev/null +++ b/packages/pkg/pkg/package.json @@ -0,0 +1,11 @@ +{ + "name": "@push-based/pkg/pkg", + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0" + }, + "type": "commonjs", + "main": "./src/index.js", + "typings": "./src/index.d.ts", + "private": true +} diff --git a/packages/pkg/pkg/project.json b/packages/pkg/pkg/project.json new file mode 100644 index 00000000..6325cd5e --- /dev/null +++ b/packages/pkg/pkg/project.json @@ -0,0 +1,19 @@ +{ + "name": "pkg-pkg", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/pkg/pkg/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/pkg/pkg", + "main": "packages/pkg/pkg/src/index.ts", + "tsConfig": "packages/pkg/pkg/tsconfig.lib.json", + "assets": ["packages/pkg/pkg/*.md"] + } + } + }, + "tags": [] +} diff --git a/packages/pkg/pkg/src/index.ts b/packages/pkg/pkg/src/index.ts new file mode 100644 index 00000000..837df08b --- /dev/null +++ b/packages/pkg/pkg/src/index.ts @@ -0,0 +1 @@ +export * from './lib/pkg-pkg'; diff --git a/packages/pkg/pkg/src/lib/pkg-pkg.ts b/packages/pkg/pkg/src/lib/pkg-pkg.ts new file mode 100644 index 00000000..3354680f --- /dev/null +++ b/packages/pkg/pkg/src/lib/pkg-pkg.ts @@ -0,0 +1,3 @@ +export function pkgPkg(): string { + return 'pkg-pkg'; +} diff --git a/packages/pkg/pkg/tsconfig.json b/packages/pkg/pkg/tsconfig.json new file mode 100644 index 00000000..f2400abe --- /dev/null +++ b/packages/pkg/pkg/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/packages/pkg/pkg/tsconfig.lib.json b/packages/pkg/pkg/tsconfig.lib.json new file mode 100644 index 00000000..8f9c818e --- /dev/null +++ b/packages/pkg/pkg/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts b/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts index ab4b5921..e3783688 100644 --- a/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts +++ b/projects/nx-verdaccio/src/plugin/nx-verdaccio.plugin.ts @@ -1,6 +1,6 @@ import { type CreateNodes, - type CreateNodesContext, + type CreateNodesContext, CreateNodesContextV2, createNodesFromFiles, type CreateNodesV2, logger, @@ -28,14 +28,15 @@ import { getProjectConfig, getProjectJsonNxConfig, } from './project-config'; +import {combineGlobPatterns} from "nx/src/utils/globs"; const PROJECT_JSON_FILE_GLOB = '**/project.json'; const PACKAGE_JSON_FILE_GLOB = '**/package.json'; -const FILE_GLOB = `**/{project,package}.json`; +const FILE_GLOB = combineGlobPatterns(PROJECT_JSON_FILE_GLOB, PACKAGE_JSON_FILE_GLOB); export const createNodesV2: CreateNodesV2 = [ FILE_GLOB, - async (configFiles, options, context) => { + async (configFiles, options, context: CreateNodesContextV2) => { const optionsHash = hashObject({ options: options ?? {} }); const nxVerdaccioEnvPluginCachePath = join( workspaceDataDirectory, @@ -46,13 +47,10 @@ export const createNodesV2: CreateNodesV2 = [ return await createNodesFromFiles( async (projectConfigurationFile, internalOptions) => { const isPkgJson = projectConfigurationFile.endsWith('package.json'); - if (isPkgJson) { - throw new Error('!!!!!!!!!!!!!!!!!!'); - } - const [primaryConfig, fallback] = isPkgJson ? [getPackageJsonNxConfig, getProjectJsonNxConfig] : [getProjectJsonNxConfig, getPackageJsonNxConfig]; + const projectConfiguration: ProjectConfiguration = await getProjectConfig( projectConfigurationFile, @@ -128,8 +126,7 @@ export const createNodes: CreateNodes = [ return { projects: { [projectRoot]: { - targets: createProjectConfiguration(projectConfiguration, options) - .targets, + targets: createProjectConfiguration(projectConfiguration, options).targets, }, }, }; diff --git a/projects/nx-verdaccio/src/plugin/targets/create-targets.ts b/projects/nx-verdaccio/src/plugin/targets/create-targets.ts index d5ae71e8..cf1330a9 100644 --- a/projects/nx-verdaccio/src/plugin/targets/create-targets.ts +++ b/projects/nx-verdaccio/src/plugin/targets/create-targets.ts @@ -22,7 +22,7 @@ export function createProjectConfiguration( return {}; } if (isE2eProject && !projectConfiguration.implicitDependencies?.length) { - logger.warn( + logger.info( `Project ${projectConfiguration.name} is an environment project but has no implicit dependencies.` ); } diff --git a/testing/test-setup/src/lib/extend/path-matcher.ts b/testing/test-setup/src/lib/extend/path-matcher.ts index 1be32514..25fb9afa 100644 --- a/testing/test-setup/src/lib/extend/path-matcher.ts +++ b/testing/test-setup/src/lib/extend/path-matcher.ts @@ -1,10 +1,10 @@ import { expect } from 'vitest'; -import path from 'path'; +import {normalize} from 'node:path'; expect.extend({ toMatchPath(received, expected) { - const normalizedReceived = path.normalize(received); - const normalizedExpected = path.normalize(expected); + const normalizedReceived = normalize(received); + const normalizedExpected = normalize(expected); const pass = normalizedReceived.includes(normalizedExpected); if (pass) { @@ -20,8 +20,8 @@ expect.extend({ } }, pathToMatch(received, expected) { - const normalizedReceived = path.normalize(received); - const normalizedExpected = path.normalize(expected); + const normalizedReceived = normalize(received); + const normalizedExpected = normalize(expected); const pass = normalizedReceived.includes(normalizedExpected); if (pass) { diff --git a/testing/test-utils/src/lib/file-system.ts b/testing/test-utils/src/lib/file-system.ts index dba7303e..47b28c82 100644 --- a/testing/test-utils/src/lib/file-system.ts +++ b/testing/test-utils/src/lib/file-system.ts @@ -1,9 +1,9 @@ -import { mkdir, readFile, writeFile } from 'node:fs/promises'; -import { join } from 'node:path'; +import {mkdir, readFile, writeFile} from 'node:fs/promises'; +import {join, dirname} from 'node:path'; export async function ensureDirectoryExists(baseDir: string) { try { - await mkdir(baseDir, { recursive: true }); + await mkdir(baseDir, {recursive: true}); return; } catch (error) { console.error((error as { code: string; message: string }).message); @@ -17,6 +17,14 @@ export async function updateJson>( target: string, transformFn: (i: T) => O ): Promise { - const json = JSON.parse((await readFile(target)).toString()); + let json = {}; + try { + await mkdir(dirname(target), {recursive: true}); + } catch (e) { + } + try { + json = JSON.parse((await readFile(target)).toString()); + } catch (e) { + } await writeFile(target, JSON.stringify(transformFn(json), null, 2)); } diff --git a/tsconfig.base.json b/tsconfig.base.json index e6d36deb..f1e0ab92 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -19,6 +19,7 @@ "@push-based/core": ["examples/projects/core/src/index.ts"], "@push-based/models": ["examples/projects/models/src/index.ts"], "@push-based/nx-verdaccio": ["projects/nx-verdaccio/src/index.ts"], + "@push-based/pkg/pkg": ["packages/pkg/pkg/src/index.ts"], "@push-based/plugin-1": ["projects/plugin-1/src/index.ts"], "@push-based/test-nx-utils": ["testing/test-nx-utils/src/index.ts"], "@push-based/test-setup": ["testing/test-setup/src/index.ts"], diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..3a2dd7a1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compileOnSave": false, + "files": [], + "references": [] +}