@nx/remix 23.2.0-beta.1 → 23.2.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +2 -2
  2. package/dist/src/executors/build/build.impl.js +9 -11
  3. package/dist/src/generators/application/application.impl.js +13 -5
  4. package/dist/src/generators/application/files/common/app/entry.server.tsx__tmpl__ +1 -2
  5. package/dist/src/generators/application/files/common/tests/routes/_index.spec.tsx__tmpl__ +1 -1
  6. package/dist/src/generators/application/files/nx-welcome/claimed/app/nx-welcome.tsx__tmpl__ +2 -0
  7. package/dist/src/generators/application/files/nx-welcome/not-configured/app/nx-welcome.tsx__tmpl__ +2 -0
  8. package/dist/src/generators/application/files/nx-welcome/unclaimed/app/nx-welcome.tsx__tmpl__ +2 -0
  9. package/dist/src/generators/application/lib/add-e2e.js +1 -1
  10. package/dist/src/generators/application/lib/ignore-vite-temp-files.d.ts +0 -1
  11. package/dist/src/generators/application/lib/ignore-vite-temp-files.js +4 -14
  12. package/dist/src/generators/application/lib/normalize-options.js +1 -1
  13. package/dist/src/generators/application/schema.d.ts +3 -3
  14. package/dist/src/generators/application/schema.json +7 -4
  15. package/dist/src/generators/library/lib/normalize-options.js +3 -0
  16. package/dist/src/generators/library/library.impl.js +4 -1
  17. package/dist/src/generators/library/schema.d.ts +2 -1
  18. package/dist/src/generators/library/schema.json +2 -4
  19. package/dist/src/generators/preset/preset.impl.js +1 -2
  20. package/dist/src/generators/storybook-configuration/schema.d.ts +2 -2
  21. package/dist/src/generators/storybook-configuration/schema.json +1 -2
  22. package/dist/src/plugins/plugin.js +2 -4
  23. package/dist/src/utils/create-watch-paths.js +4 -5
  24. package/package.json +17 -9
  25. /package/dist/src/generators/storybook-configuration/files/{vite.config.ts__tpl__ → vite.config.mts__tpl__} +0 -0
package/README.md CHANGED
@@ -7,9 +7,9 @@
7
7
 
8
8
  <div style="text-align: center;">
9
9
 
10
- [![License](https://img.shields.io/npm/l/@nx/workspace.svg?style=flat-square)]()
10
+ [![License](https://img.shields.io/npm/l/@nx/workspace.svg?style=flat-square)](<>)
11
11
  [![NPM Version](https://badge.fury.io/js/nx.svg)](https://www.npmjs.com/package/nx)
12
- [![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)]()
12
+ [![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)](<>)
13
13
  [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
14
14
  [![Join us on the Official Nx Discord Server](https://img.shields.io/discord/1143497901675401286?label=discord)](https://go.nx.dev/community)
15
15
  [![Nx Sandboxing](https://staging.nx.app/workspaces/62d013ea0852fe0a2df74438/sandbox-badge.svg)](https://nx.dev/docs/features/ci-features/sandboxing)
@@ -51,6 +51,7 @@ async function buildExecutor(options, context) {
51
51
  if (!outputIsDirectory) {
52
52
  (0, fs_extra_1.mkdir)(options.outputPath);
53
53
  }
54
+ const packageManager = (0, devkit_1.detectPackageManager)(context.root);
54
55
  let packageJson;
55
56
  if (options.generatePackageJson) {
56
57
  packageJson = (0, js_1.createPackageJson)(context.projectName, context.projectGraph, {
@@ -66,22 +67,19 @@ async function buildExecutor(options, context) {
66
67
  packageJson.scripts['start'] = 'remix-serve ./build/index.js';
67
68
  }
68
69
  updatePackageJson(packageJson, context);
69
- (0, devkit_1.writeJsonFile)(`${options.outputPath}/package.json`, packageJson);
70
70
  }
71
71
  else {
72
72
  packageJson = (0, devkit_1.readJsonFile)((0, path_1.join)(projectRoot, 'package.json'));
73
73
  }
74
74
  if (options.generateLockfile) {
75
- const packageManager = (0, devkit_1.detectPackageManager)(context.root);
76
- if (packageManager === 'bun') {
77
- devkit_1.logger.warn('Bun lockfile generation is not supported. The generated package.json will not include a lockfile. Run "bun install" in the output directory after deployment if needed.');
78
- }
79
- else {
80
- const lockFile = (0, js_1.createLockFile)(packageJson, context.projectGraph, packageManager);
81
- (0, fs_extra_1.writeFileSync)(`${options.outputPath}/${(0, js_1.getLockFileName)(packageManager)}`, lockFile, {
82
- encoding: 'utf-8',
83
- });
84
- }
75
+ (0, js_1.generatePrunedDeployOutput)(packageJson, context.projectGraph, projectRoot, {
76
+ outputDirectory: options.outputPath,
77
+ packageManager,
78
+ workspaceRoot: context.root,
79
+ });
80
+ }
81
+ if (options.generatePackageJson) {
82
+ (0, devkit_1.writeJsonFile)(`${options.outputPath}/package.json`, packageJson);
85
83
  }
86
84
  // If output path is different from source path, then copy over the config and public files.
87
85
  // This is the default behavior when running `nx build <app>`.
@@ -6,13 +6,12 @@ const tslib_1 = require("tslib");
6
6
  const internal_1 = require("@nx/devkit/internal");
7
7
  const devkit_1 = require("@nx/devkit");
8
8
  const js_1 = require("@nx/js");
9
- const onboarding_1 = require("nx/src/nx-cloud/utilities/onboarding");
9
+ const internal_2 = require("@nx/js/internal");
10
10
  const testing_config_utils_1 = require("../../utils/testing-config-utils");
11
11
  const versions_1 = require("../../utils/versions");
12
12
  const init_1 = tslib_1.__importDefault(require("../init/init"));
13
13
  const update_dependencies_1 = require("../utils/update-dependencies");
14
14
  const lib_1 = require("./lib");
15
- const internal_2 = require("@nx/js/internal");
16
15
  function remixApplicationGenerator(tree, options) {
17
16
  return remixApplicationGeneratorInternal(tree, {
18
17
  addPlugin: true,
@@ -56,9 +55,9 @@ async function remixApplicationGeneratorInternal(tree, _options) {
56
55
  }
57
56
  const installTask = (0, update_dependencies_1.updateDependencies)(tree);
58
57
  tasks.push(installTask);
59
- const onBoardingStatus = await (0, onboarding_1.createNxCloudOnboardingURLForWelcomeApp)(tree, options.nxCloudToken);
58
+ const onBoardingStatus = await (0, internal_1.createNxCloudOnboardingURLForWelcomeApp)(tree, options.nxCloudToken);
60
59
  const connectCloudUrl = onBoardingStatus === 'unclaimed' &&
61
- (await (0, onboarding_1.getNxCloudAppOnBoardingUrl)(options.nxCloudToken));
60
+ (await (0, internal_1.getNxCloudAppOnBoardingUrl)(options.nxCloudToken));
62
61
  const vars = {
63
62
  ...options,
64
63
  tmpl: '',
@@ -148,7 +147,16 @@ async function remixApplicationGeneratorInternal(tree, _options) {
148
147
  else {
149
148
  tree.delete((0, devkit_1.joinPathFragments)(options.projectRoot, `tests/routes/_index.spec.tsx`));
150
149
  }
151
- if (options.linter !== 'none') {
150
+ if (options.linter !== 'eslint' && options.linter !== 'none') {
151
+ tasks.push(await (0, internal_2.addLintingToProject)(tree, {
152
+ oxlintPlugins: ['react', 'react-perf', 'jsx-a11y'],
153
+ unitTestRunner: options.unitTestRunner,
154
+ linter: options.linter,
155
+ project: options.projectName,
156
+ addPlugin: options.addPlugin,
157
+ }));
158
+ }
159
+ if (options.linter === 'eslint') {
152
160
  const { lintProjectGenerator } = (0, devkit_1.ensurePackage)('@nx/eslint', versions_1.nxVersion);
153
161
  const { addIgnoresToLintConfig, } = require('@nx/eslint/internal');
154
162
  const eslintTask = await lintProjectGenerator(tree, {
@@ -21,8 +21,7 @@ export default function handleRequest(
21
21
  remixContext: EntryContext,
22
22
  // This is ignored so we can keep it in the template for visibility. Feel
23
23
  // free to delete this parameter in your app if you're not using it!
24
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
25
- loadContext: AppLoadContext
24
+ _loadContext: AppLoadContext
26
25
  ) {
27
26
  return isbot(request.headers.get("user-agent") || "")
28
27
  ? handleBotRequest(
@@ -13,5 +13,5 @@ test('renders loader data', async () => {
13
13
 
14
14
  render(<RemixStub />);
15
15
 
16
- await screen.findByText('Hello there,');
16
+ expect(await screen.findByText('Hello there,')).toBeTruthy();
17
17
  });
@@ -5,6 +5,8 @@
5
5
  Delete this file and get started with your project!
6
6
  * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7
7
  */
8
+ /* oxlint-disable jsx-a11y/prefer-tag-over-role -- the icons below
9
+ are inline SVGs, which have no tag to swap the role for. */
8
10
  export function NxWelcome({ title }: { title: string }) {
9
11
  return (
10
12
  <>
@@ -5,6 +5,8 @@
5
5
  Delete this file and get started with your project!
6
6
  * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7
7
  */
8
+ /* oxlint-disable jsx-a11y/prefer-tag-over-role -- the icons below
9
+ are inline SVGs, which have no tag to swap the role for. */
8
10
  export function NxWelcome({ title }: { title: string }) {
9
11
  return (
10
12
  <>
@@ -5,6 +5,8 @@
5
5
  Delete this file and get started with your project!
6
6
  * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7
7
  */
8
+ /* oxlint-disable jsx-a11y/prefer-tag-over-role -- the icons below
9
+ are inline SVGs, which have no tag to swap the role for. */
8
10
  export function NxWelcome({ title }: { title: string }) {
9
11
  return (
10
12
  <>
@@ -82,7 +82,7 @@ async function addE2E(tree, options) {
82
82
  directory: 'src',
83
83
  js: false,
84
84
  linter: options.linter,
85
- setParserOptionsProject: false,
85
+ enableTypedLinting: false,
86
86
  webServerCommand: e2eWebsServerInfo.e2eCiWebServerCommand,
87
87
  webServerAddress: e2eWebsServerInfo.e2eCiBaseUrl,
88
88
  rootProject: options.rootProject,
@@ -1,3 +1,2 @@
1
1
  import { type Tree } from '@nx/devkit';
2
2
  export declare function ignoreViteTempFiles(tree: Tree, projectRoot?: string | undefined): Promise<void>;
3
- export declare function isEslintInstalled(tree: Tree): boolean;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ignoreViteTempFiles = ignoreViteTempFiles;
4
- exports.isEslintInstalled = isEslintInstalled;
5
4
  const devkit_1 = require("@nx/devkit");
5
+ const internal_1 = require("@nx/js/internal");
6
6
  const versions_1 = require("../../../utils/versions");
7
7
  async function ignoreViteTempFiles(tree, projectRoot) {
8
8
  addViteTempFilesToGitIgnore(tree);
@@ -23,7 +23,9 @@ function addViteTempFilesToGitIgnore(tree) {
23
23
  tree.write('.gitignore', gitIgnoreContents);
24
24
  }
25
25
  async function ignoreViteTempFilesInEslintConfig(tree, projectRoot) {
26
- if (!isEslintInstalled(tree)) {
26
+ // Checked before `ensurePackage` so an Oxlint workspace does not install
27
+ // `@nx/eslint` only for `isEslintConfigSupported` to send it straight back.
28
+ if (!(0, internal_1.detectLinters)(tree).includes('eslint')) {
27
29
  return;
28
30
  }
29
31
  (0, devkit_1.ensurePackage)('@nx/eslint', versions_1.nxVersion);
@@ -46,15 +48,3 @@ async function ignoreViteTempFilesInEslintConfig(tree, projectRoot) {
46
48
  '**/vitest.config.*.timestamp*',
47
49
  ]);
48
50
  }
49
- function isEslintInstalled(tree) {
50
- try {
51
- require('eslint');
52
- return true;
53
- }
54
- catch { }
55
- // it might not be installed yet, but it might be in the tree pending install
56
- const { devDependencies, dependencies } = tree.exists('package.json')
57
- ? (0, devkit_1.readJson)(tree, 'package.json')
58
- : {};
59
- return !!devDependencies?.['eslint'] || !!dependencies?.['eslint'];
60
- }
@@ -26,7 +26,7 @@ async function normalizeOptions(tree, options) {
26
26
  : [];
27
27
  return {
28
28
  ...options,
29
- linter: options.linter ?? 'eslint',
29
+ linter: await (0, internal_2.normalizeLinterOption)(tree, options.linter),
30
30
  projectName: appProjectName,
31
31
  projectRoot,
32
32
  importPath,
@@ -1,10 +1,10 @@
1
- import type { Linter, LinterType } from '@nx/eslint';
1
+ import type { LinterType } from '@nx/js';
2
2
 
3
3
  export interface NxRemixGeneratorSchema {
4
4
  directory: string;
5
5
  name?: string;
6
6
  tags?: string;
7
- linter?: Linter | LinterType;
7
+ linter?: LinterType;
8
8
  unitTestRunner?: 'vitest' | 'jest' | 'none';
9
9
  e2eTestRunner?: 'cypress' | 'playwright' | 'none';
10
10
  skipFormat?: boolean;
@@ -13,6 +13,6 @@ export interface NxRemixGeneratorSchema {
13
13
  addPlugin?: boolean;
14
14
  nxCloudToken?: string;
15
15
  useTsSolution?: boolean;
16
- formatter?: 'prettier' | 'none';
16
+ formatter?: 'prettier' | 'oxfmt' | 'none';
17
17
  useProjectJson?: boolean;
18
18
  }
@@ -21,13 +21,16 @@
21
21
  "x-priority": "important"
22
22
  },
23
23
  "linter": {
24
- "description": "The tool to use for running lint checks.",
24
+ "description": "The tool to use for running lint checks. Defaults to the linter the workspace already uses.",
25
25
  "type": "string",
26
- "enum": ["eslint", "none"],
27
- "default": "none",
28
- "x-prompt": "Which linter would you like to use?",
26
+ "enum": ["eslint", "oxlint", "none"],
29
27
  "x-priority": "important"
30
28
  },
29
+ "formatter": {
30
+ "description": "The tool to use for code formatting.",
31
+ "type": "string",
32
+ "enum": ["none", "prettier", "oxfmt"]
33
+ },
31
34
  "unitTestRunner": {
32
35
  "type": "string",
33
36
  "enum": ["vitest", "jest", "none"],
@@ -18,6 +18,9 @@ async function normalizeOptions(tree, options) {
18
18
  const isUsingTsSolutionConfig = (0, internal_2.isUsingTsSolutionSetup)(tree);
19
19
  return {
20
20
  ...options,
21
+ // Resolved after the spread: the framework's ESLint shaping is guarded on
22
+ // `=== 'eslint'`, and an unresolved `undefined` would skip all of it.
23
+ linter: await (0, internal_2.normalizeLinterOption)(tree, options.linter),
21
24
  unitTestRunner: options.unitTestRunner ?? 'vitest',
22
25
  projectName: isUsingTsSolutionConfig && !options.name ? importPath : projectName,
23
26
  projectRoot,
@@ -22,6 +22,9 @@ async function remixLibraryGeneratorInternal(tree, schema) {
22
22
  const tasks = [];
23
23
  tasks.push((0, assert_and_pin_remix_typescript_1.assertAndPinRemixTypescript)(tree));
24
24
  const addTsPlugin = (0, internal_1.shouldConfigureTsSolutionSetup)(tree, schema.addPlugin);
25
+ // Detected before `updateDependencies`, which installs eslint unconditionally.
26
+ // Detecting afterwards would just observe what this generator itself added.
27
+ const linter = await (0, internal_1.normalizeLinterOption)(tree, schema.linter);
25
28
  const installTask = (0, update_dependencies_1.updateDependencies)(tree);
26
29
  tasks.push(installTask);
27
30
  const jsInitTask = await (0, js_1.initGenerator)(tree, {
@@ -30,7 +33,7 @@ async function remixLibraryGeneratorInternal(tree, schema) {
30
33
  skipFormat: true,
31
34
  });
32
35
  tasks.push(jsInitTask);
33
- const options = await (0, lib_1.normalizeOptions)(tree, schema);
36
+ const options = await (0, lib_1.normalizeOptions)(tree, { ...schema, linter });
34
37
  if (options.isUsingTsSolutionConfig) {
35
38
  await (0, internal_1.addProjectToTsSolutionWorkspace)(tree, options.projectRoot);
36
39
  }
@@ -1,3 +1,4 @@
1
+ import type { LinterType } from '@nx/js';
1
2
  import { SupportedStyles } from '@nx/react';
2
3
 
3
4
  export interface NxRemixGeneratorSchema {
@@ -9,7 +10,7 @@ export interface NxRemixGeneratorSchema {
9
10
  /** @deprecated Use bundler instead. */
10
11
  buildable?: boolean;
11
12
  bundler?: 'none' | 'vite' | 'rollup';
12
- linter?: 'none' | 'eslint';
13
+ linter?: LinterType;
13
14
  unitTestRunner?: 'jest' | 'vitest' | 'none';
14
15
  js?: boolean;
15
16
  skipFormat?: boolean;
@@ -46,11 +46,9 @@
46
46
  "x-priority": "important"
47
47
  },
48
48
  "linter": {
49
- "description": "The tool to use for running lint checks.",
49
+ "description": "The tool to use for running lint checks. Defaults to the linter the workspace already uses.",
50
50
  "type": "string",
51
- "enum": ["eslint", "none"],
52
- "default": "none",
53
- "x-prompt": "Which linter would you like to use?",
51
+ "enum": ["eslint", "oxlint", "none"],
54
52
  "x-priority": "important"
55
53
  },
56
54
  "unitTestRunner": {
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = default_1;
4
4
  const tslib_1 = require("tslib");
5
5
  const devkit_1 = require("@nx/devkit");
6
- const devkit_2 = require("@nx/devkit");
7
6
  const application_impl_1 = tslib_1.__importDefault(require("../application/application.impl"));
8
7
  const setup_impl_1 = tslib_1.__importDefault(require("../setup/setup.impl"));
9
8
  const normalize_options_1 = require("./lib/normalize-options");
@@ -31,5 +30,5 @@ async function default_1(tree, _options) {
31
30
  tree.delete('apps');
32
31
  tree.delete('libs');
33
32
  await (0, devkit_1.formatFiles)(tree);
34
- return (0, devkit_2.runTasksInSerial)(...tasks);
33
+ return (0, devkit_1.runTasksInSerial)(...tasks);
35
34
  }
@@ -1,4 +1,4 @@
1
- import { Linter, LinterType } from '@nx/eslint';
1
+ import { LinterType } from '@nx/js';
2
2
 
3
3
  export interface StorybookConfigurationSchema {
4
4
  project: string;
@@ -6,7 +6,7 @@ export interface StorybookConfigurationSchema {
6
6
  generateStories?: boolean;
7
7
  js?: boolean;
8
8
  tsConfiguration?: boolean;
9
- linter?: Linter | LinterType;
9
+ linter?: LinterType;
10
10
  ignorePaths?: string[];
11
11
  configureTestRunner?: boolean;
12
12
  configureStaticServe?: boolean;
@@ -53,8 +53,7 @@
53
53
  "linter": {
54
54
  "description": "The tool to use for running lint checks.",
55
55
  "type": "string",
56
- "enum": ["eslint"],
57
- "default": "eslint"
56
+ "enum": ["eslint", "oxlint"]
58
57
  },
59
58
  "ignorePaths": {
60
59
  "type": "array",
@@ -2,8 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createNodesV2 = exports.createNodes = exports.createDependencies = void 0;
4
4
  const internal_1 = require("@nx/devkit/internal");
5
- const cache_directory_1 = require("nx/src/utils/cache-directory");
6
- const file_hasher_1 = require("nx/src/hasher/file-hasher");
7
5
  const devkit_1 = require("@nx/devkit");
8
6
  const js_1 = require("@nx/js");
9
7
  const path_1 = require("path");
@@ -21,8 +19,8 @@ const remixConfigGlob = '**/{remix,vite}.config.{js,cjs,mjs,ts,cts,mts}';
21
19
  exports.createNodes = [
22
20
  remixConfigGlob,
23
21
  async (configFilePaths, options, context) => {
24
- const optionsHash = (0, file_hasher_1.hashObject)(options);
25
- const cachePath = (0, path_1.join)(cache_directory_1.workspaceDataDirectory, `remix-${optionsHash}.hash`);
22
+ const optionsHash = (0, internal_1.hashObject)(options);
23
+ const cachePath = (0, path_1.join)(internal_1.workspaceDataDirectory, `remix-${optionsHash}.hash`);
26
24
  const targetsCache = new internal_1.PluginCache(cachePath);
27
25
  const packageManager = (0, devkit_1.detectPackageManager)(context.workspaceRoot);
28
26
  const pmc = (0, devkit_1.getPackageManagerCommand)(packageManager);
@@ -3,9 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createWatchPaths = createWatchPaths;
4
4
  exports.getRelativeDependencyPaths = getRelativeDependencyPaths;
5
5
  const devkit_1 = require("@nx/devkit");
6
- const find_project_for_path_1 = require("nx/src/project-graph/utils/find-project-for-path");
7
- const project_graph_utils_1 = require("nx/src/utils/project-graph-utils");
8
6
  const path_1 = require("path");
7
+ const internal_1 = require("@nx/devkit/internal");
9
8
  /**
10
9
  * Generates an array of paths to watch based on the project dependencies.
11
10
  *
@@ -13,9 +12,9 @@ const path_1 = require("path");
13
12
  */
14
13
  async function createWatchPaths(dirname) {
15
14
  const graph = await (0, devkit_1.createProjectGraphAsync)();
16
- const projectRootMappings = (0, find_project_for_path_1.createProjectRootMappings)(graph.nodes);
17
- const projectName = (0, find_project_for_path_1.findProjectForPath)((0, path_1.relative)(devkit_1.workspaceRoot, dirname), projectRootMappings);
18
- const deps = (0, project_graph_utils_1.findAllProjectNodeDependencies)(projectName, graph);
15
+ const projectRootMappings = (0, internal_1.createProjectRootMappings)(graph.nodes);
16
+ const projectName = (0, internal_1.findProjectForPath)((0, path_1.relative)(devkit_1.workspaceRoot, dirname), projectRootMappings);
17
+ const deps = (0, internal_1.findAllProjectNodeDependencies)(projectName, graph);
19
18
  return getRelativeDependencyPaths(graph.nodes[projectName], deps, graph);
20
19
  }
21
20
  // Exported for testing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/remix",
3
- "version": "23.2.0-beta.1",
3
+ "version": "23.2.0-beta.11",
4
4
  "description": "The Remix plugin for Nx contains executors and generators for managing Remix applications and libraries within an Nx workspace. It provides:\n\n\n- Integration with libraries such as Vitest, Jest, Playwright, Cypress, and Storybook.\n\n- Generators for applications, libraries, routes, loaders, and more.\n\n- Library build support for publishing packages to npm or other registries.\n\n- Utilities for automatic workspace refactoring.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -56,20 +56,28 @@
56
56
  "dependencies": {
57
57
  "tslib": "^2.3.0",
58
58
  "@phenomnomnominal/tsquery": "~6.2.0",
59
- "@nx/devkit": "23.2.0-beta.1",
60
- "@nx/react": "23.2.0-beta.1",
61
- "@nx/web": "23.2.0-beta.1",
62
- "@nx/js": "23.2.0-beta.1"
59
+ "@nx/devkit": "23.2.0-beta.11",
60
+ "@nx/js": "23.2.0-beta.11",
61
+ "@nx/react": "23.2.0-beta.11",
62
+ "@nx/web": "23.2.0-beta.11"
63
63
  },
64
64
  "devDependencies": {
65
- "@nx/eslint": "23.2.0-beta.1",
66
- "nx": "23.2.0-beta.1",
67
- "@nx/vitest": "23.2.0-beta.1"
65
+ "@nx/eslint": "23.2.0-beta.11",
66
+ "nx": "23.2.0-beta.11",
67
+ "@nx/vitest": "23.2.0-beta.11"
68
68
  },
69
69
  "peerDependencies": {
70
- "@remix-run/dev": "^2.0.0"
70
+ "@remix-run/dev": "^2.0.0",
71
+ "@nx/cypress": "23.2.0-beta.11",
72
+ "@nx/playwright": "23.2.0-beta.11"
71
73
  },
72
74
  "peerDependenciesMeta": {
75
+ "@nx/cypress": {
76
+ "optional": true
77
+ },
78
+ "@nx/playwright": {
79
+ "optional": true
80
+ },
73
81
  "@remix-run/dev": {
74
82
  "optional": true
75
83
  }