@nx/remix 0.0.0-pr-22179-271588f

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 (163) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +63 -0
  3. package/executors.json +14 -0
  4. package/generators.d.ts +14 -0
  5. package/generators.js +31 -0
  6. package/generators.json +90 -0
  7. package/index.d.ts +1 -0
  8. package/index.js +5 -0
  9. package/migrations.json +107 -0
  10. package/package.json +53 -0
  11. package/plugin.d.ts +1 -0
  12. package/plugin.js +6 -0
  13. package/plugins/component-testing/index.d.ts +30 -0
  14. package/plugins/component-testing/index.js +64 -0
  15. package/src/executors/build/build.impl.d.ts +5 -0
  16. package/src/executors/build/build.impl.js +109 -0
  17. package/src/executors/build/schema.d.ts +7 -0
  18. package/src/executors/build/schema.json +38 -0
  19. package/src/executors/serve/schema.d.ts +9 -0
  20. package/src/executors/serve/schema.json +41 -0
  21. package/src/executors/serve/serve.impl.d.ts +6 -0
  22. package/src/executors/serve/serve.impl.js +77 -0
  23. package/src/generators/action/action.impl.d.ts +3 -0
  24. package/src/generators/action/action.impl.js +39 -0
  25. package/src/generators/action/schema.d.ts +10 -0
  26. package/src/generators/action/schema.json +29 -0
  27. package/src/generators/application/__snapshots__/application.impl.spec.ts.snap +1487 -0
  28. package/src/generators/application/application.impl.d.ts +5 -0
  29. package/src/generators/application/application.impl.js +198 -0
  30. package/src/generators/application/files/common/README.md__tmpl__ +54 -0
  31. package/src/generators/application/files/common/app/nx-welcome.tsx__tmpl__ +886 -0
  32. package/src/generators/application/files/common/app/root.tsx__tmpl__ +32 -0
  33. package/src/generators/application/files/common/app/routes/_index.tsx__tmpl__ +9 -0
  34. package/src/generators/application/files/common/public/favicon.ico +0 -0
  35. package/src/generators/application/files/common/remix.config.js__tmpl__ +17 -0
  36. package/src/generators/application/files/common/remix.env.d.ts__tmpl__ +2 -0
  37. package/src/generators/application/files/common/tests/routes/_index.spec.tsx__tmpl__ +16 -0
  38. package/src/generators/application/files/common/tsconfig.app.json__tmpl__ +20 -0
  39. package/src/generators/application/files/common/tsconfig.json__tmpl__ +24 -0
  40. package/src/generators/application/files/integrated/.gitignore__tmpl__ +4 -0
  41. package/src/generators/application/files/integrated/package.json__tmpl__ +28 -0
  42. package/src/generators/application/lib/add-e2e.d.ts +3 -0
  43. package/src/generators/application/lib/add-e2e.js +66 -0
  44. package/src/generators/application/lib/index.d.ts +3 -0
  45. package/src/generators/application/lib/index.js +6 -0
  46. package/src/generators/application/lib/normalize-options.d.ts +10 -0
  47. package/src/generators/application/lib/normalize-options.js +37 -0
  48. package/src/generators/application/lib/update-unit-test-config.d.ts +2 -0
  49. package/src/generators/application/lib/update-unit-test-config.js +55 -0
  50. package/src/generators/application/schema.d.ts +16 -0
  51. package/src/generators/application/schema.json +68 -0
  52. package/src/generators/cypress-component-configuration/cypress-component-configuration.impl.d.ts +5 -0
  53. package/src/generators/cypress-component-configuration/cypress-component-configuration.impl.js +34 -0
  54. package/src/generators/cypress-component-configuration/files/cypress.config.ts__tmpl__ +6 -0
  55. package/src/generators/cypress-component-configuration/schema.d.ts +6 -0
  56. package/src/generators/cypress-component-configuration/schema.json +41 -0
  57. package/src/generators/error-boundary/__snapshots__/error-boundary.impl.spec.ts.snap +61 -0
  58. package/src/generators/error-boundary/error-boundary.impl.d.ts +3 -0
  59. package/src/generators/error-boundary/error-boundary.impl.js +12 -0
  60. package/src/generators/error-boundary/lib/add-v2-error-boundary.d.ts +3 -0
  61. package/src/generators/error-boundary/lib/add-v2-error-boundary.js +38 -0
  62. package/src/generators/error-boundary/lib/index.d.ts +2 -0
  63. package/src/generators/error-boundary/lib/index.js +5 -0
  64. package/src/generators/error-boundary/lib/normalize-options.d.ts +3 -0
  65. package/src/generators/error-boundary/lib/normalize-options.js +17 -0
  66. package/src/generators/error-boundary/schema.d.ts +11 -0
  67. package/src/generators/error-boundary/schema.json +37 -0
  68. package/src/generators/init/init.d.ts +5 -0
  69. package/src/generators/init/init.js +60 -0
  70. package/src/generators/init/schema.d.ts +7 -0
  71. package/src/generators/init/schema.json +33 -0
  72. package/src/generators/library/__snapshots__/library.impl.spec.ts.snap +157 -0
  73. package/src/generators/library/lib/add-tsconfig-entry-points.d.ts +3 -0
  74. package/src/generators/library/lib/add-tsconfig-entry-points.js +19 -0
  75. package/src/generators/library/lib/add-unit-testing.d.ts +3 -0
  76. package/src/generators/library/lib/add-unit-testing.js +32 -0
  77. package/src/generators/library/lib/index.d.ts +4 -0
  78. package/src/generators/library/lib/index.js +7 -0
  79. package/src/generators/library/lib/normalize-options.d.ts +7 -0
  80. package/src/generators/library/lib/normalize-options.js +29 -0
  81. package/src/generators/library/lib/update-buildable-config.d.ts +2 -0
  82. package/src/generators/library/lib/update-buildable-config.js +21 -0
  83. package/src/generators/library/library.impl.d.ts +6 -0
  84. package/src/generators/library/library.impl.js +45 -0
  85. package/src/generators/library/schema.d.ts +16 -0
  86. package/src/generators/library/schema.json +74 -0
  87. package/src/generators/loader/loader.impl.d.ts +3 -0
  88. package/src/generators/loader/loader.impl.js +39 -0
  89. package/src/generators/loader/schema.d.ts +10 -0
  90. package/src/generators/loader/schema.json +29 -0
  91. package/src/generators/meta/lib/v2.impl.d.ts +3 -0
  92. package/src/generators/meta/lib/v2.impl.js +28 -0
  93. package/src/generators/meta/meta.impl.d.ts +3 -0
  94. package/src/generators/meta/meta.impl.js +7 -0
  95. package/src/generators/meta/schema.d.ts +10 -0
  96. package/src/generators/meta/schema.json +29 -0
  97. package/src/generators/preset/lib/normalize-options.d.ts +11 -0
  98. package/src/generators/preset/lib/normalize-options.js +20 -0
  99. package/src/generators/preset/preset.impl.d.ts +3 -0
  100. package/src/generators/preset/preset.impl.js +32 -0
  101. package/src/generators/preset/schema.d.ts +4 -0
  102. package/src/generators/preset/schema.json +14 -0
  103. package/src/generators/resource-route/__snapshots__/resource-route.impl.spec.ts.snap +21 -0
  104. package/src/generators/resource-route/resource-route.impl.d.ts +3 -0
  105. package/src/generators/resource-route/resource-route.impl.js +41 -0
  106. package/src/generators/resource-route/schema.d.ts +13 -0
  107. package/src/generators/resource-route/schema.json +51 -0
  108. package/src/generators/route/__snapshots__/route.impl.spec.ts.snap +95 -0
  109. package/src/generators/route/route.impl.d.ts +3 -0
  110. package/src/generators/route/route.impl.js +78 -0
  111. package/src/generators/route/schema.d.ts +15 -0
  112. package/src/generators/route/schema.json +62 -0
  113. package/src/generators/setup/schema.json +14 -0
  114. package/src/generators/setup/setup.impl.d.ts +2 -0
  115. package/src/generators/setup/setup.impl.js +34 -0
  116. package/src/generators/setup-tailwind/__snapshots__/setup-tailwind.impl.spec.ts.snap +170 -0
  117. package/src/generators/setup-tailwind/files/app/tailwind.css__tpl__ +3 -0
  118. package/src/generators/setup-tailwind/files/tailwind.config.ts__tpl__ +13 -0
  119. package/src/generators/setup-tailwind/lib/index.d.ts +1 -0
  120. package/src/generators/setup-tailwind/lib/index.js +4 -0
  121. package/src/generators/setup-tailwind/lib/update-remix-config.d.ts +2 -0
  122. package/src/generators/setup-tailwind/lib/update-remix-config.js +35 -0
  123. package/src/generators/setup-tailwind/schema.d.ts +5 -0
  124. package/src/generators/setup-tailwind/schema.json +36 -0
  125. package/src/generators/setup-tailwind/setup-tailwind.impl.d.ts +3 -0
  126. package/src/generators/setup-tailwind/setup-tailwind.impl.js +34 -0
  127. package/src/generators/storybook-configuration/__snapshots__/storybook-configuration.impl.spec.ts.snap +73 -0
  128. package/src/generators/storybook-configuration/files/vite.config.ts__tpl__ +15 -0
  129. package/src/generators/storybook-configuration/schema.d.ts +16 -0
  130. package/src/generators/storybook-configuration/schema.json +89 -0
  131. package/src/generators/storybook-configuration/storybook-configuration.impl.d.ts +4 -0
  132. package/src/generators/storybook-configuration/storybook-configuration.impl.js +26 -0
  133. package/src/generators/style/schema.d.ts +10 -0
  134. package/src/generators/style/schema.json +36 -0
  135. package/src/generators/style/style.impl.d.ts +3 -0
  136. package/src/generators/style/style.impl.js +61 -0
  137. package/src/generators/utils/update-dependencies.d.ts +2 -0
  138. package/src/generators/utils/update-dependencies.js +21 -0
  139. package/src/plugins/__snapshots__/plugin.spec.ts.snap +113 -0
  140. package/src/plugins/plugin.d.ts +9 -0
  141. package/src/plugins/plugin.js +136 -0
  142. package/src/utils/create-watch-paths.d.ts +8 -0
  143. package/src/utils/create-watch-paths.js +40 -0
  144. package/src/utils/get-default-export-name.d.ts +2 -0
  145. package/src/utils/get-default-export-name.js +8 -0
  146. package/src/utils/get-default-export.d.ts +2 -0
  147. package/src/utils/get-default-export.js +15 -0
  148. package/src/utils/insert-import.d.ts +4 -0
  149. package/src/utils/insert-import.js +54 -0
  150. package/src/utils/insert-statement-after-imports.d.ts +5 -0
  151. package/src/utils/insert-statement-after-imports.js +28 -0
  152. package/src/utils/insert-statement-in-default-function.d.ts +2 -0
  153. package/src/utils/insert-statement-in-default-function.js +23 -0
  154. package/src/utils/remix-config.d.ts +5 -0
  155. package/src/utils/remix-config.js +45 -0
  156. package/src/utils/remix-route-utils.d.ts +13 -0
  157. package/src/utils/remix-route-utils.js +70 -0
  158. package/src/utils/testing-config-utils.d.ts +4 -0
  159. package/src/utils/testing-config-utils.js +79 -0
  160. package/src/utils/upsert-links-function.d.ts +2 -0
  161. package/src/utils/upsert-links-function.js +31 -0
  162. package/src/utils/versions.d.ts +16 -0
  163. package/src/utils/versions.js +28 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2017-2023 Narwhal Technologies Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ <p style="text-align: center;"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx.png" width="600" alt="Nx - Smart Monorepos · Fast CI"></p>
2
+
3
+ <div style="text-align: center;">
4
+
5
+ [![CircleCI](https://circleci.com/gh/nrwl/nx.svg?style=svg)](https://circleci.com/gh/nrwl/nx)
6
+ [![License](https://img.shields.io/npm/l/@nx/workspace.svg?style=flat-square)]()
7
+ [![NPM Version](https://badge.fury.io/js/%40nrwl%2Fworkspace.svg)](https://www.npmjs.com/@nx/workspace)
8
+ [![Semantic Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)]()
9
+ [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
10
+ [![Join the chat at https://gitter.im/nrwl-nx/community](https://badges.gitter.im/nrwl-nx/community.svg)](https://gitter.im/nrwl-nx/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
11
+ [![Join us on the Official Nx Discord Server](https://img.shields.io/discord/1143497901675401286?label=discord)](https://go.nx.dev/community)
12
+
13
+ </div>
14
+
15
+
16
+ <hr>
17
+
18
+ # Nx: Smart Monorepos · Fast CI
19
+
20
+ Nx is a build system with built-in tooling and advanced CI capabilities. It helps you maintain and scale monorepos, both locally and on CI.
21
+
22
+ This package is a [Remix plugin for Nx](https://nx.dev/packages/remix).
23
+
24
+ ## Getting Started
25
+
26
+ ### Creating an Nx Workspace
27
+
28
+ **Using `npx`**
29
+
30
+ ```bash
31
+ npx create-nx-workspace
32
+ ```
33
+
34
+ **Using `npm init`**
35
+
36
+ ```bash
37
+ npm init nx-workspace
38
+ ```
39
+
40
+ **Using `yarn create`**
41
+
42
+ ```bash
43
+ yarn create nx-workspace
44
+ ```
45
+
46
+ ### Adding Nx to an Existing Repository
47
+
48
+ Run:
49
+
50
+ ```bash
51
+ npx nx@latest init
52
+ ```
53
+
54
+ ## Documentation & Resources
55
+
56
+ - [Nx.Dev: Documentation, Guides, Tutorials](https://nx.dev)
57
+ - [Intro to Nx](https://nx.dev/getting-started/intro)
58
+ - [Official Nx YouTube Channel](https://www.youtube.com/@NxDevtools)
59
+ - [Blog Posts About Nx](https://blog.nrwl.io/nx/home)
60
+
61
+ <p style="text-align: center;"><a href="https://nx.dev/#learning-materials" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-courses-and-videos.svg"
62
+ width="100%" alt="Nx - Smart Monorepos · Fast CI"></a></p>
63
+
package/executors.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "executors": {
3
+ "serve": {
4
+ "implementation": "./src/executors/serve/serve.impl",
5
+ "schema": "./src/executors/serve/schema.json",
6
+ "description": "Serve a Remix application."
7
+ },
8
+ "build": {
9
+ "implementation": "./src/executors/build/build.impl",
10
+ "schema": "./src/executors/build/schema.json",
11
+ "description": "Build a Remix application."
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ export { default as actionGenerator } from './src/generators/action/action.impl';
2
+ export { default as applicationGenerator } from './src/generators/application/application.impl';
3
+ export { default as cypressComponentConfigurationGenerator } from './src/generators/cypress-component-configuration/cypress-component-configuration.impl';
4
+ export { default as errorBoundaryGenerator } from './src/generators/error-boundary/error-boundary.impl';
5
+ export { default as libraryGenerator } from './src/generators/library/library.impl';
6
+ export { default as loaderGenerator } from './src/generators/loader/loader.impl';
7
+ export { default as metaGenerator } from './src/generators/meta/meta.impl';
8
+ export { default as presetGenerator } from './src/generators/preset/preset.impl';
9
+ export { default as resourceRouteGenerator } from './src/generators/resource-route/resource-route.impl';
10
+ export { default as routeGenerator } from './src/generators/route/route.impl';
11
+ export { default as setupTailwindGenerator } from './src/generators/setup-tailwind/setup-tailwind.impl';
12
+ export { default as storybookConfigurationGenerator } from './src/generators/storybook-configuration/storybook-configuration.impl';
13
+ export { default as styleGenerator } from './src/generators/style/style.impl';
14
+ export { default as initGenerator } from './src/generators/init/init';
package/generators.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initGenerator = exports.styleGenerator = exports.storybookConfigurationGenerator = exports.setupTailwindGenerator = exports.routeGenerator = exports.resourceRouteGenerator = exports.presetGenerator = exports.metaGenerator = exports.loaderGenerator = exports.libraryGenerator = exports.errorBoundaryGenerator = exports.cypressComponentConfigurationGenerator = exports.applicationGenerator = exports.actionGenerator = void 0;
4
+ var action_impl_1 = require("./src/generators/action/action.impl");
5
+ Object.defineProperty(exports, "actionGenerator", { enumerable: true, get: function () { return action_impl_1.default; } });
6
+ var application_impl_1 = require("./src/generators/application/application.impl");
7
+ Object.defineProperty(exports, "applicationGenerator", { enumerable: true, get: function () { return application_impl_1.default; } });
8
+ var cypress_component_configuration_impl_1 = require("./src/generators/cypress-component-configuration/cypress-component-configuration.impl");
9
+ Object.defineProperty(exports, "cypressComponentConfigurationGenerator", { enumerable: true, get: function () { return cypress_component_configuration_impl_1.default; } });
10
+ var error_boundary_impl_1 = require("./src/generators/error-boundary/error-boundary.impl");
11
+ Object.defineProperty(exports, "errorBoundaryGenerator", { enumerable: true, get: function () { return error_boundary_impl_1.default; } });
12
+ var library_impl_1 = require("./src/generators/library/library.impl");
13
+ Object.defineProperty(exports, "libraryGenerator", { enumerable: true, get: function () { return library_impl_1.default; } });
14
+ var loader_impl_1 = require("./src/generators/loader/loader.impl");
15
+ Object.defineProperty(exports, "loaderGenerator", { enumerable: true, get: function () { return loader_impl_1.default; } });
16
+ var meta_impl_1 = require("./src/generators/meta/meta.impl");
17
+ Object.defineProperty(exports, "metaGenerator", { enumerable: true, get: function () { return meta_impl_1.default; } });
18
+ var preset_impl_1 = require("./src/generators/preset/preset.impl");
19
+ Object.defineProperty(exports, "presetGenerator", { enumerable: true, get: function () { return preset_impl_1.default; } });
20
+ var resource_route_impl_1 = require("./src/generators/resource-route/resource-route.impl");
21
+ Object.defineProperty(exports, "resourceRouteGenerator", { enumerable: true, get: function () { return resource_route_impl_1.default; } });
22
+ var route_impl_1 = require("./src/generators/route/route.impl");
23
+ Object.defineProperty(exports, "routeGenerator", { enumerable: true, get: function () { return route_impl_1.default; } });
24
+ var setup_tailwind_impl_1 = require("./src/generators/setup-tailwind/setup-tailwind.impl");
25
+ Object.defineProperty(exports, "setupTailwindGenerator", { enumerable: true, get: function () { return setup_tailwind_impl_1.default; } });
26
+ var storybook_configuration_impl_1 = require("./src/generators/storybook-configuration/storybook-configuration.impl");
27
+ Object.defineProperty(exports, "storybookConfigurationGenerator", { enumerable: true, get: function () { return storybook_configuration_impl_1.default; } });
28
+ var style_impl_1 = require("./src/generators/style/style.impl");
29
+ Object.defineProperty(exports, "styleGenerator", { enumerable: true, get: function () { return style_impl_1.default; } });
30
+ var init_1 = require("./src/generators/init/init");
31
+ Object.defineProperty(exports, "initGenerator", { enumerable: true, get: function () { return init_1.default; } });
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "name": "NxRemix",
4
+ "version": "0.0.1",
5
+ "extends": ["@nx/react"],
6
+ "generators": {
7
+ "preset": {
8
+ "implementation": "./src/generators/preset/preset.impl",
9
+ "schema": "./src/generators/preset/schema.json",
10
+ "description": "Generate a new Remix workspace",
11
+ "hidden": true
12
+ },
13
+ "setup": {
14
+ "implementation": "./src/generators/setup/setup.impl",
15
+ "schema": "./src/generators/setup/schema.json",
16
+ "description": "Setup a Remix in an existing workspace",
17
+ "hidden": true
18
+ },
19
+ "application": {
20
+ "implementation": "./src/generators/application/application.impl#remixApplicationGeneratorInternal",
21
+ "schema": "./src/generators/application/schema.json",
22
+ "description": "Generate a new Remix application",
23
+ "aliases": ["app"],
24
+ "x-type": "application"
25
+ },
26
+ "cypress-component-configuration": {
27
+ "implementation": "./src/generators/cypress-component-configuration/cypress-component-configuration.impl#cypressComponentConfigurationGeneratorInternal",
28
+ "schema": "./src/generators/cypress-component-configuration/schema.json",
29
+ "description": "Generate a Cypress Component Testing configuration for a Remix project"
30
+ },
31
+ "library": {
32
+ "implementation": "./src/generators/library/library.impl#remixLibraryGeneratorInternal",
33
+ "schema": "./src/generators/library/schema.json",
34
+ "description": "Generate a new library",
35
+ "aliases": ["lib"],
36
+ "x-type": "library"
37
+ },
38
+ "init": {
39
+ "implementation": "./src/generators/init/init#remixInitGeneratorInternal",
40
+ "schema": "./src/generators/init/schema.json",
41
+ "description": "Initialize the `@nx/remix` plugin.",
42
+ "hidden": true
43
+ },
44
+ "route": {
45
+ "implementation": "./src/generators/route/route.impl",
46
+ "schema": "./src/generators/route/schema.json",
47
+ "description": "Generate a new route"
48
+ },
49
+ "resource-route": {
50
+ "implementation": "./src/generators/resource-route/resource-route.impl",
51
+ "schema": "./src/generators/resource-route/schema.json",
52
+ "description": "Generate a new resource route"
53
+ },
54
+ "action": {
55
+ "implementation": "./src/generators/action/action.impl",
56
+ "schema": "./src/generators/action/schema.json",
57
+ "description": "Add an action function to an existing route"
58
+ },
59
+ "loader": {
60
+ "implementation": "./src/generators/loader/loader.impl",
61
+ "schema": "./src/generators/loader/schema.json",
62
+ "description": "Add a loader function to an existing route"
63
+ },
64
+ "style": {
65
+ "implementation": "./src/generators/style/style.impl",
66
+ "schema": "./src/generators/style/schema.json",
67
+ "description": "Generates a new stylesheet and adds it to an existing route"
68
+ },
69
+ "setup-tailwind": {
70
+ "implementation": "./src/generators/setup-tailwind/setup-tailwind.impl",
71
+ "schema": "./src/generators/setup-tailwind/schema.json",
72
+ "description": "Generates a TailwindCSS configuration for the Remix application"
73
+ },
74
+ "storybook-configuration": {
75
+ "implementation": "./src/generators/storybook-configuration/storybook-configuration.impl#remixStorybookConfiguration",
76
+ "schema": "./src/generators/storybook-configuration/schema.json",
77
+ "description": "Generates a Storybook configuration for a Remix application"
78
+ },
79
+ "meta": {
80
+ "implementation": "./src/generators/meta/meta.impl",
81
+ "schema": "./src/generators/meta/schema.json",
82
+ "description": "Add a meta function to an existing route"
83
+ },
84
+ "error-boundary": {
85
+ "implementation": "./src/generators/error-boundary/error-boundary.impl",
86
+ "schema": "./src/generators/error-boundary/schema.json",
87
+ "description": "Add an ErrorBoundary to an existing route"
88
+ }
89
+ }
90
+ }
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { createWatchPaths } from './src/utils/create-watch-paths';
package/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWatchPaths = void 0;
4
+ var create_watch_paths_1 = require("./src/utils/create-watch-paths");
5
+ Object.defineProperty(exports, "createWatchPaths", { enumerable: true, get: function () { return create_watch_paths_1.createWatchPaths; } });
@@ -0,0 +1,107 @@
1
+ {
2
+ "generators": {},
3
+ "packageJsonUpdates": {
4
+ "17.2.1": {
5
+ "version": "17.2.1-beta.0",
6
+ "packages": {
7
+ "@remix-run/node": {
8
+ "version": "^2.3.0",
9
+ "alwaysAddToPackageJson": true
10
+ },
11
+ "@remix-run/react": {
12
+ "version": "^2.3.0",
13
+ "alwaysAddToPackageJson": true
14
+ },
15
+ "@remix-run/serve": {
16
+ "version": "^2.3.0",
17
+ "alwaysAddToPackageJson": true
18
+ },
19
+ "@remix-run/dev": {
20
+ "version": "^2.3.0",
21
+ "alwaysAddToPackageJson": true
22
+ },
23
+ "@remix-run/css-bundle": {
24
+ "version": "^2.3.0",
25
+ "alwaysAddToPackageJson": true
26
+ },
27
+ "@remix-run/eslint-config": {
28
+ "version": "^2.3.0",
29
+ "alwaysAddToPackageJson": true
30
+ },
31
+ "isbot": {
32
+ "version": "^3.6.8",
33
+ "alwaysAddToPackageJson": true
34
+ },
35
+ "eslint": {
36
+ "version": "^8.38.0",
37
+ "alwaysAddToPackageJson": true
38
+ },
39
+ "@testing-library/react": {
40
+ "version": "^14.1.2",
41
+ "alwaysAddToPackageJson": false
42
+ },
43
+ "@testing-library/jest-dom": {
44
+ "version": "^6.1.4",
45
+ "alwaysAddToPackageJson": false
46
+ },
47
+ "@testing-library/user-event": {
48
+ "version": "^14.5.1",
49
+ "alwaysAddToPackageJson": false
50
+ }
51
+ }
52
+ },
53
+ "18.1.0": {
54
+ "version": "18.1.0-beta.1",
55
+ "packages": {
56
+ "@remix-run/node": {
57
+ "version": "^2.6.0",
58
+ "alwaysAddToPackageJson": true
59
+ },
60
+ "@remix-run/react": {
61
+ "version": "^2.6.0",
62
+ "alwaysAddToPackageJson": true
63
+ },
64
+ "@remix-run/serve": {
65
+ "version": "^2.6.0",
66
+ "alwaysAddToPackageJson": true
67
+ },
68
+ "@remix-run/dev": {
69
+ "version": "^2.6.0",
70
+ "alwaysAddToPackageJson": true
71
+ },
72
+ "@remix-run/css-bundle": {
73
+ "version": "^2.6.0",
74
+ "alwaysAddToPackageJson": true
75
+ },
76
+ "@remix-run/eslint-config": {
77
+ "version": "^2.6.0",
78
+ "alwaysAddToPackageJson": true
79
+ },
80
+ "isbot": {
81
+ "version": "^4.4.0",
82
+ "alwaysAddToPackageJson": true
83
+ },
84
+ "eslint": {
85
+ "version": "^8.56.0",
86
+ "alwaysAddToPackageJson": true
87
+ },
88
+ "@testing-library/react": {
89
+ "version": "^14.1.2",
90
+ "alwaysAddToPackageJson": false
91
+ },
92
+ "@testing-library/jest-dom": {
93
+ "version": "^6.2.0",
94
+ "alwaysAddToPackageJson": false
95
+ },
96
+ "@testing-library/user-event": {
97
+ "version": "^14.5.2",
98
+ "alwaysAddToPackageJson": false
99
+ },
100
+ "typescript": {
101
+ "version": "^5.3.3",
102
+ "alwaysAddToPackageJson": false
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@nx/remix",
3
+ "version": "0.0.0-pr-22179-271588f",
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, 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
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/nrwl/nx.git",
8
+ "directory": "packages/remix"
9
+ },
10
+ "keywords": [
11
+ "Monorepo",
12
+ "Remix",
13
+ "React",
14
+ "Web",
15
+ "CLI"
16
+ ],
17
+ "author": "Victor Savkin",
18
+ "license": "MIT",
19
+ "bugs": {
20
+ "url": "https://github.com/nrwl/nx/issues"
21
+ },
22
+ "homepage": "https://nx.dev",
23
+ "main": "./index.js",
24
+ "typings": "./index.d.ts",
25
+ "generators": "./generators.json",
26
+ "executors": "./executors.json",
27
+ "nx-migrations": {
28
+ "migrations": "./migrations.json"
29
+ },
30
+ "dependencies": {
31
+ "@nx/devkit": "0.0.0-pr-22179-271588f",
32
+ "@nx/js": "0.0.0-pr-22179-271588f",
33
+ "@nx/react": "0.0.0-pr-22179-271588f",
34
+ "tslib": "^2.3.1",
35
+ "@phenomnomnominal/tsquery": "~5.0.1",
36
+ "@nrwl/remix": "0.0.0-pr-22179-271588f"
37
+ },
38
+ "peerDependencies": {},
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "exports": {
43
+ ".": "./index.js",
44
+ "./plugin": "./plugin.js",
45
+ "./plugins/component-testing": "./plugins/component-testing/index.js",
46
+ "./package.json": "./package.json",
47
+ "./executors.json": "./executors.json",
48
+ "./generators.json": "./generators.json",
49
+ "./migrations.json": "./migrations.json",
50
+ "./generators": "./generators.js"
51
+ },
52
+ "type": "commonjs"
53
+ }
package/plugin.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { createNodes, createDependencies, RemixPluginOptions, } from './src/plugins/plugin';
package/plugin.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDependencies = exports.createNodes = void 0;
4
+ var plugin_1 = require("./src/plugins/plugin");
5
+ Object.defineProperty(exports, "createNodes", { enumerable: true, get: function () { return plugin_1.createNodes; } });
6
+ Object.defineProperty(exports, "createDependencies", { enumerable: true, get: function () { return plugin_1.createDependencies; } });
@@ -0,0 +1,30 @@
1
+ type ViteDevServer = {
2
+ framework: 'react';
3
+ bundler: 'vite';
4
+ viteConfig?: any;
5
+ };
6
+ /**
7
+ * Remix nx preset for Cypress Component Testing
8
+ *
9
+ * This preset contains the base configuration
10
+ * for your component tests that nx recommends.
11
+ * including a devServer that supports nx workspaces.
12
+ * you can easily extend this within your cypress config via spreading the preset
13
+ * @example
14
+ * export default defineConfig({
15
+ * component: {
16
+ * ...nxComponentTestingPreset(__dirname)
17
+ * // add your own config here
18
+ * }
19
+ * })
20
+ *
21
+ * @param pathToConfig will be used for loading project options and to construct the output paths for videos and screenshots
22
+ */
23
+ export declare function nxComponentTestingPreset(pathToConfig: string): {
24
+ specPattern: string;
25
+ devServer: ViteDevServer;
26
+ videosFolder: string;
27
+ screenshotsFolder: string;
28
+ chromeWebSecurity: boolean;
29
+ };
30
+ export {};
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nxComponentTestingPreset = void 0;
4
+ const cypress_preset_1 = require("@nx/cypress/plugins/cypress-preset");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ /**
9
+ * Remix nx preset for Cypress Component Testing
10
+ *
11
+ * This preset contains the base configuration
12
+ * for your component tests that nx recommends.
13
+ * including a devServer that supports nx workspaces.
14
+ * you can easily extend this within your cypress config via spreading the preset
15
+ * @example
16
+ * export default defineConfig({
17
+ * component: {
18
+ * ...nxComponentTestingPreset(__dirname)
19
+ * // add your own config here
20
+ * }
21
+ * })
22
+ *
23
+ * @param pathToConfig will be used for loading project options and to construct the output paths for videos and screenshots
24
+ */
25
+ function nxComponentTestingPreset(pathToConfig) {
26
+ const normalizedProjectRootPath = ['.ts', '.js'].some((ext) => pathToConfig.endsWith(ext))
27
+ ? pathToConfig
28
+ : (0, path_1.dirname)(pathToConfig);
29
+ return {
30
+ ...(0, cypress_preset_1.nxBaseCypressPreset)(pathToConfig),
31
+ specPattern: 'src/**/*.cy.{js,jsx,ts,tsx}',
32
+ devServer: {
33
+ ...{ framework: 'react', bundler: 'vite' },
34
+ viteConfig: async () => {
35
+ const viteConfigPath = findViteConfig(normalizedProjectRootPath);
36
+ const { mergeConfig, loadConfigFromFile, searchForWorkspaceRoot } = await Promise.resolve().then(() => require('vite'));
37
+ const resolved = await loadConfigFromFile({
38
+ mode: 'watch',
39
+ command: 'serve',
40
+ }, viteConfigPath);
41
+ return mergeConfig(resolved.config, {
42
+ server: {
43
+ fs: {
44
+ allow: [
45
+ searchForWorkspaceRoot(normalizedProjectRootPath),
46
+ devkit_1.workspaceRoot,
47
+ (0, devkit_1.joinPathFragments)(devkit_1.workspaceRoot, 'node_modules/vite'),
48
+ ],
49
+ },
50
+ },
51
+ });
52
+ },
53
+ },
54
+ };
55
+ }
56
+ exports.nxComponentTestingPreset = nxComponentTestingPreset;
57
+ function findViteConfig(projectRootFullPath) {
58
+ const allowsExt = ['js', 'mjs', 'ts', 'cjs', 'mts', 'cts'];
59
+ for (const ext of allowsExt) {
60
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectRootFullPath, `vite.config.${ext}`))) {
61
+ return (0, path_1.join)(projectRootFullPath, `vite.config.${ext}`);
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,5 @@
1
+ import { type ExecutorContext } from '@nx/devkit';
2
+ import { type RemixBuildSchema } from './schema';
3
+ export default function buildExecutor(options: RemixBuildSchema, context: ExecutorContext): Promise<{
4
+ success: boolean;
5
+ }>;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nx/devkit");
4
+ const js_1 = require("@nx/js");
5
+ const fileutils_1 = require("@nx/workspace/src/utilities/fileutils");
6
+ const child_process_1 = require("child_process");
7
+ const fs_extra_1 = require("fs-extra");
8
+ const path_1 = require("path");
9
+ function buildRemixBuildArgs(options) {
10
+ const args = ['build'];
11
+ if (options.sourcemap) {
12
+ args.push(`--sourcemap`);
13
+ }
14
+ return args;
15
+ }
16
+ async function runBuild(options, context) {
17
+ const projectRoot = context.projectGraph.nodes[context.projectName].data.root;
18
+ return new Promise((resolve, reject) => {
19
+ const remixBin = require.resolve('@remix-run/dev/dist/cli');
20
+ const args = buildRemixBuildArgs(options);
21
+ const p = (0, child_process_1.fork)(remixBin, args, {
22
+ cwd: (0, path_1.join)(context.root, projectRoot),
23
+ stdio: 'inherit',
24
+ });
25
+ p.on('exit', (code) => {
26
+ if (code === 0)
27
+ resolve();
28
+ else
29
+ reject();
30
+ });
31
+ });
32
+ }
33
+ async function buildExecutor(options, context) {
34
+ const projectRoot = context.projectGraph.nodes[context.projectName].data.root;
35
+ try {
36
+ await runBuild(options, context);
37
+ }
38
+ catch (error) {
39
+ devkit_1.logger.error(`Error occurred while trying to build application. See above for more details.`);
40
+ return { success: false };
41
+ }
42
+ if (!(0, fileutils_1.directoryExists)(options.outputPath)) {
43
+ (0, fs_extra_1.mkdir)(options.outputPath);
44
+ }
45
+ let packageJson;
46
+ if (options.generatePackageJson) {
47
+ packageJson = (0, js_1.createPackageJson)(context.projectName, context.projectGraph, {
48
+ target: context.targetName,
49
+ root: context.root,
50
+ isProduction: !options.includeDevDependenciesInPackageJson, // By default we remove devDependencies since this is a production build.
51
+ });
52
+ // Update `package.json` to reflect how users should run the build artifacts
53
+ packageJson.scripts ??= {};
54
+ // Don't override existing custom script since project may have its own server.
55
+ if (!packageJson.scripts.start) {
56
+ packageJson.scripts['start'] = 'remix-serve ./build/index.js';
57
+ }
58
+ updatePackageJson(packageJson, context);
59
+ (0, devkit_1.writeJsonFile)(`${options.outputPath}/package.json`, packageJson);
60
+ }
61
+ else {
62
+ packageJson = (0, devkit_1.readJsonFile)((0, path_1.join)(projectRoot, 'package.json'));
63
+ }
64
+ if (options.generateLockfile) {
65
+ const packageManager = (0, devkit_1.detectPackageManager)(context.root);
66
+ const lockFile = (0, js_1.createLockFile)(packageJson, context.projectGraph, packageManager);
67
+ (0, fs_extra_1.writeFileSync)(`${options.outputPath}/${(0, js_1.getLockFileName)(packageManager)}`, lockFile, {
68
+ encoding: 'utf-8',
69
+ });
70
+ }
71
+ // If output path is different from source path, then copy over the config and public files.
72
+ // This is the default behavior when running `nx build <app>`.
73
+ if (options.outputPath.replace(/\/$/, '') !== projectRoot) {
74
+ (0, fs_extra_1.copySync)((0, path_1.join)(projectRoot, 'public'), (0, path_1.join)(options.outputPath, 'public'), {
75
+ dereference: true,
76
+ });
77
+ (0, fs_extra_1.copySync)((0, path_1.join)(projectRoot, 'build'), (0, path_1.join)(options.outputPath, 'build'), {
78
+ dereference: true,
79
+ });
80
+ }
81
+ return { success: true };
82
+ }
83
+ exports.default = buildExecutor;
84
+ function updatePackageJson(packageJson, context) {
85
+ if (!packageJson.scripts) {
86
+ packageJson.scripts = {};
87
+ }
88
+ if (!packageJson.scripts.start) {
89
+ packageJson.scripts.start = 'remix-serve build';
90
+ }
91
+ packageJson.dependencies ??= {};
92
+ // These are always required for a production Remix app to run.
93
+ const requiredPackages = [
94
+ 'react',
95
+ 'react-dom',
96
+ 'isbot',
97
+ '@remix-run/css-bundle',
98
+ '@remix-run/node',
99
+ '@remix-run/react',
100
+ '@remix-run/serve',
101
+ '@remix-run/dev',
102
+ ];
103
+ for (const pkg of requiredPackages) {
104
+ const externalNode = context.projectGraph.externalNodes[`npm:${pkg}`];
105
+ if (externalNode) {
106
+ packageJson.dependencies[pkg] ??= externalNode.data.version;
107
+ }
108
+ }
109
+ }
@@ -0,0 +1,7 @@
1
+ export interface RemixBuildSchema {
2
+ outputPath: string;
3
+ includeDevDependenciesInPackageJson?: boolean;
4
+ generatePackageJson?: boolean;
5
+ generateLockfile?: boolean;
6
+ sourcemap?: boolean;
7
+ }