@powerlines/nx 0.11.269 → 0.11.271

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 (204) hide show
  1. package/README.md +29 -31
  2. package/dist/src/base/base-executor.d.mts +1 -1
  3. package/dist/src/base/base-executor.d.ts +1 -1
  4. package/dist/src/base/base-executor.js +78 -3
  5. package/dist/src/base/base-executor.mjs +75 -3
  6. package/dist/src/base/base-executor.mjs.map +1 -0
  7. package/dist/src/base/base-executor.schema.d.mts +117 -2
  8. package/dist/src/base/base-executor.schema.d.mts.map +1 -0
  9. package/dist/src/base/base-executor.schema.d.ts +117 -2
  10. package/dist/src/base/base-executor.schema.d.ts.map +1 -0
  11. package/dist/src/base/base-executor.untyped.d.mts +1 -1
  12. package/dist/src/base/base-executor.untyped.d.ts +1 -1
  13. package/dist/src/base/base-executor.untyped.js +135 -2
  14. package/dist/src/base/base-executor.untyped.mjs +135 -2
  15. package/dist/src/base/base-executor.untyped.mjs.map +1 -0
  16. package/dist/src/base/index.d.mts +1 -3
  17. package/dist/src/base/index.d.ts +1 -1
  18. package/dist/src/base/index.js +4 -5
  19. package/dist/src/base/index.mjs +2 -4
  20. package/dist/src/base-executor-Bj63x9OE.d.ts +28 -0
  21. package/dist/src/base-executor-Bj63x9OE.d.ts.map +1 -0
  22. package/dist/src/base-executor-D6POztG2.d.mts +28 -0
  23. package/dist/src/base-executor-D6POztG2.d.mts.map +1 -0
  24. package/dist/src/base-executor.untyped-D4R6pki2.d.ts +7 -0
  25. package/dist/src/base-executor.untyped-D4R6pki2.d.ts.map +1 -0
  26. package/dist/src/base-executor.untyped-hmlG6oyC.d.mts +7 -0
  27. package/dist/src/base-executor.untyped-hmlG6oyC.d.mts.map +1 -0
  28. package/dist/src/chunk-BE-pF4vm.js +34 -0
  29. package/dist/src/{constants-BvODbBl8.d.ts → constants-CbG11Mby.d.ts} +1 -1
  30. package/dist/src/constants-CbG11Mby.d.ts.map +1 -0
  31. package/dist/src/{constants-ByputsG8.d.mts → constants-VDvVnoLC.d.mts} +1 -1
  32. package/dist/src/constants-VDvVnoLC.d.mts.map +1 -0
  33. package/dist/src/executors/build/executor.d.mts +2 -16
  34. package/dist/src/executors/build/executor.d.mts.map +1 -1
  35. package/dist/src/executors/build/executor.d.ts +2 -16
  36. package/dist/src/executors/build/executor.d.ts.map +1 -1
  37. package/dist/src/executors/build/executor.js +6 -7
  38. package/dist/src/executors/build/executor.mjs +4 -6
  39. package/dist/src/executors/build/executor.mjs.map +1 -1
  40. package/dist/src/executors/build/untyped.d.mts +2 -2
  41. package/dist/src/executors/build/untyped.d.mts.map +1 -1
  42. package/dist/src/executors/build/untyped.d.ts +2 -2
  43. package/dist/src/executors/build/untyped.d.ts.map +1 -1
  44. package/dist/src/executors/build/untyped.js +3 -4
  45. package/dist/src/executors/build/untyped.mjs +1 -2
  46. package/dist/src/executors/build/untyped.mjs.map +1 -1
  47. package/dist/src/executors/clean/executor.d.mts +2 -13
  48. package/dist/src/executors/clean/executor.d.mts.map +1 -1
  49. package/dist/src/executors/clean/executor.d.ts +2 -13
  50. package/dist/src/executors/clean/executor.d.ts.map +1 -1
  51. package/dist/src/executors/clean/executor.js +4 -6
  52. package/dist/src/executors/clean/executor.mjs +2 -4
  53. package/dist/src/executors/clean/executor.mjs.map +1 -1
  54. package/dist/src/executors/clean/untyped.d.mts +2 -2
  55. package/dist/src/executors/clean/untyped.d.mts.map +1 -1
  56. package/dist/src/executors/clean/untyped.d.ts +2 -2
  57. package/dist/src/executors/clean/untyped.d.ts.map +1 -1
  58. package/dist/src/executors/clean/untyped.js +3 -3
  59. package/dist/src/executors/clean/untyped.mjs +1 -1
  60. package/dist/src/executors/docs/executor.d.mts +2 -15
  61. package/dist/src/executors/docs/executor.d.mts.map +1 -1
  62. package/dist/src/executors/docs/executor.d.ts +2 -15
  63. package/dist/src/executors/docs/executor.d.ts.map +1 -1
  64. package/dist/src/executors/docs/executor.js +4 -6
  65. package/dist/src/executors/docs/executor.mjs +2 -4
  66. package/dist/src/executors/docs/executor.mjs.map +1 -1
  67. package/dist/src/executors/docs/untyped.d.mts +2 -2
  68. package/dist/src/executors/docs/untyped.d.mts.map +1 -1
  69. package/dist/src/executors/docs/untyped.d.ts +2 -2
  70. package/dist/src/executors/docs/untyped.d.ts.map +1 -1
  71. package/dist/src/executors/docs/untyped.js +3 -4
  72. package/dist/src/executors/docs/untyped.mjs +1 -2
  73. package/dist/src/executors/docs/untyped.mjs.map +1 -1
  74. package/dist/src/executors/lint/executor.d.mts +2 -15
  75. package/dist/src/executors/lint/executor.d.mts.map +1 -1
  76. package/dist/src/executors/lint/executor.d.ts +2 -15
  77. package/dist/src/executors/lint/executor.d.ts.map +1 -1
  78. package/dist/src/executors/lint/executor.js +4 -6
  79. package/dist/src/executors/lint/executor.mjs +2 -4
  80. package/dist/src/executors/lint/executor.mjs.map +1 -1
  81. package/dist/src/executors/lint/untyped.d.mts +2 -2
  82. package/dist/src/executors/lint/untyped.d.mts.map +1 -1
  83. package/dist/src/executors/lint/untyped.d.ts +2 -2
  84. package/dist/src/executors/lint/untyped.d.ts.map +1 -1
  85. package/dist/src/executors/lint/untyped.js +3 -4
  86. package/dist/src/executors/lint/untyped.mjs +1 -2
  87. package/dist/src/executors/lint/untyped.mjs.map +1 -1
  88. package/dist/src/executors/prepare/executor.d.mts +2 -15
  89. package/dist/src/executors/prepare/executor.d.mts.map +1 -1
  90. package/dist/src/executors/prepare/executor.d.ts +2 -15
  91. package/dist/src/executors/prepare/executor.d.ts.map +1 -1
  92. package/dist/src/executors/prepare/executor.js +6 -7
  93. package/dist/src/executors/prepare/executor.mjs +4 -6
  94. package/dist/src/executors/prepare/executor.mjs.map +1 -1
  95. package/dist/src/executors/prepare/untyped.d.mts +2 -2
  96. package/dist/src/executors/prepare/untyped.d.mts.map +1 -1
  97. package/dist/src/executors/prepare/untyped.d.ts +2 -2
  98. package/dist/src/executors/prepare/untyped.d.ts.map +1 -1
  99. package/dist/src/executors/prepare/untyped.js +26 -3
  100. package/dist/src/executors/prepare/untyped.mjs +26 -3
  101. package/dist/src/executors/prepare/untyped.mjs.map +1 -0
  102. package/dist/src/generators/sync/generator.d.mts.map +1 -1
  103. package/dist/src/generators/sync/generator.d.ts.map +1 -1
  104. package/dist/src/generators/sync/generator.js +5 -6
  105. package/dist/src/generators/sync/generator.mjs +1 -2
  106. package/dist/src/generators/sync/generator.mjs.map +1 -1
  107. package/dist/src/generators/sync/untyped.d.mts +2 -2
  108. package/dist/src/generators/sync/untyped.d.mts.map +1 -1
  109. package/dist/src/generators/sync/untyped.d.ts +2 -2
  110. package/dist/src/generators/sync/untyped.d.ts.map +1 -1
  111. package/dist/src/generators/sync/untyped.js +1 -1
  112. package/dist/src/helpers/constants.d.mts +1 -1
  113. package/dist/src/helpers/constants.d.ts +1 -1
  114. package/dist/src/helpers/constants.js +34 -2
  115. package/dist/src/helpers/constants.mjs +33 -2
  116. package/dist/src/helpers/constants.mjs.map +1 -0
  117. package/dist/src/helpers/index.d.mts +2 -3
  118. package/dist/src/helpers/index.d.ts +2 -2
  119. package/dist/src/helpers/index.js +7 -8
  120. package/dist/src/helpers/index.mjs +2 -4
  121. package/dist/src/helpers/plugin-utilities.d.mts +1 -1
  122. package/dist/src/helpers/plugin-utilities.d.ts +1 -1
  123. package/dist/src/helpers/plugin-utilities.js +274 -5
  124. package/dist/src/helpers/plugin-utilities.mjs +270 -3
  125. package/dist/src/helpers/plugin-utilities.mjs.map +1 -0
  126. package/dist/src/index.d.mts +4 -7
  127. package/dist/src/index.d.ts +4 -4
  128. package/dist/src/index.js +11 -12
  129. package/dist/src/index.mjs +5 -7
  130. package/dist/src/plugin/index.d.mts +1 -1
  131. package/dist/src/plugin/index.d.mts.map +1 -1
  132. package/dist/src/plugin/index.d.ts +1 -1
  133. package/dist/src/plugin/index.d.ts.map +1 -1
  134. package/dist/src/plugin/index.js +3 -3
  135. package/dist/src/plugin/index.mjs +1 -2
  136. package/dist/src/plugin/index.mjs.map +1 -1
  137. package/dist/src/{plugin-DIj3oU64.d.mts → plugin-B_ZGdX7U.d.mts} +1 -1
  138. package/dist/src/plugin-B_ZGdX7U.d.mts.map +1 -0
  139. package/dist/src/{plugin-DN475itb.d.ts → plugin-DpyutMl2.d.ts} +1 -1
  140. package/dist/src/plugin-DpyutMl2.d.ts.map +1 -0
  141. package/dist/src/{plugin-utilities-Bz3Muyag.d.mts → plugin-utilities-Cg-Ccp4C.d.mts} +2 -3
  142. package/dist/src/plugin-utilities-Cg-Ccp4C.d.mts.map +1 -0
  143. package/dist/src/{plugin-utilities-CeMy-9YQ.d.ts → plugin-utilities-CmfuC3TZ.d.ts} +2 -3
  144. package/dist/src/plugin-utilities-CmfuC3TZ.d.ts.map +1 -0
  145. package/dist/src/types/index.d.mts +1 -1
  146. package/dist/src/types/index.d.ts +1 -1
  147. package/dist/src/types/plugin.d.mts +1 -1
  148. package/dist/src/types/plugin.d.ts +1 -1
  149. package/package.json +4 -4
  150. package/dist/src/base-B7jekb-W.js +0 -0
  151. package/dist/src/base-BRSa-clf.mjs +0 -1
  152. package/dist/src/base-executor-CWToCKgJ.d.ts +0 -2195
  153. package/dist/src/base-executor-CWToCKgJ.d.ts.map +0 -1
  154. package/dist/src/base-executor-Cc27ehGx.js +0 -4881
  155. package/dist/src/base-executor-DPB5qlkm.mjs +0 -4863
  156. package/dist/src/base-executor-DPB5qlkm.mjs.map +0 -1
  157. package/dist/src/base-executor-PhChSWwR.mjs +0 -4863
  158. package/dist/src/base-executor-PhChSWwR.mjs.map +0 -1
  159. package/dist/src/base-executor-tG-B1UsT.js +0 -4881
  160. package/dist/src/base-executor-xsZuLKpp.d.mts +0 -2197
  161. package/dist/src/base-executor-xsZuLKpp.d.mts.map +0 -1
  162. package/dist/src/base-executor.schema-BaaDD_VU.d.ts +0 -130
  163. package/dist/src/base-executor.schema-BaaDD_VU.d.ts.map +0 -1
  164. package/dist/src/base-executor.schema-CYPLsYvI.d.mts +0 -130
  165. package/dist/src/base-executor.schema-CYPLsYvI.d.mts.map +0 -1
  166. package/dist/src/base-executor.untyped-7SvGKXcO.d.mts +0 -7
  167. package/dist/src/base-executor.untyped-7SvGKXcO.d.mts.map +0 -1
  168. package/dist/src/base-executor.untyped-C1pQETnQ.mjs +0 -136
  169. package/dist/src/base-executor.untyped-C1pQETnQ.mjs.map +0 -1
  170. package/dist/src/base-executor.untyped-Cz1Zw_02.js +0 -141
  171. package/dist/src/base-executor.untyped-DBccuF6E.d.ts +0 -7
  172. package/dist/src/base-executor.untyped-DBccuF6E.d.ts.map +0 -1
  173. package/dist/src/base-executor.untyped-DCiPQvRf.d.ts +0 -7
  174. package/dist/src/base-executor.untyped-DCiPQvRf.d.ts.map +0 -1
  175. package/dist/src/base-executor.untyped-imww7Gm9.d.mts +0 -7
  176. package/dist/src/base-executor.untyped-imww7Gm9.d.mts.map +0 -1
  177. package/dist/src/config-CGQhS8tm.js +0 -239
  178. package/dist/src/config-LoR-NIJg.mjs +0 -147
  179. package/dist/src/config-LoR-NIJg.mjs.map +0 -1
  180. package/dist/src/constants-BvODbBl8.d.ts.map +0 -1
  181. package/dist/src/constants-ByputsG8.d.mts.map +0 -1
  182. package/dist/src/constants-CKuImMYn.js +0 -39
  183. package/dist/src/constants-DzvoYj5w.mjs +0 -34
  184. package/dist/src/constants-DzvoYj5w.mjs.map +0 -1
  185. package/dist/src/helpers-B78f0Oey.js +0 -0
  186. package/dist/src/helpers-j01T2doK.mjs +0 -1
  187. package/dist/src/index-7rWKHdox.d.mts +0 -1
  188. package/dist/src/index-CB5PSF-Q.d.ts +0 -1
  189. package/dist/src/index-CDDzqahH.d.ts +0 -1
  190. package/dist/src/index-CsuikFeJ.d.mts +0 -1
  191. package/dist/src/index-LhFpnU-f.d.mts +0 -1
  192. package/dist/src/index-g0mugXoV.d.ts +0 -1
  193. package/dist/src/plugin-BnaFlFmT.js +0 -0
  194. package/dist/src/plugin-DIj3oU64.d.mts.map +0 -1
  195. package/dist/src/plugin-DN475itb.d.ts.map +0 -1
  196. package/dist/src/plugin-DRjpXVSI.mjs +0 -1
  197. package/dist/src/plugin-utilities-ByTgFCEW.js +0 -287
  198. package/dist/src/plugin-utilities-Bz3Muyag.d.mts.map +0 -1
  199. package/dist/src/plugin-utilities-CeMy-9YQ.d.ts.map +0 -1
  200. package/dist/src/plugin-utilities-DamtoOxO.mjs +0 -270
  201. package/dist/src/plugin-utilities-DamtoOxO.mjs.map +0 -1
  202. package/dist/src/untyped-BzuygGwJ.mjs +0 -27
  203. package/dist/src/untyped-BzuygGwJ.mjs.map +0 -1
  204. package/dist/src/untyped-CB-jtwm-.js +0 -32
@@ -1,6 +1,275 @@
1
- require('../config-CGQhS8tm.js');
2
- const require_plugin_utilities = require('../plugin-utilities-ByTgFCEW.js');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../chunk-BE-pF4vm.js');
3
+ const require_helpers_constants = require('./constants.js');
4
+ let _stryke_type_checks_is_error = require("@stryke/type-checks/is-error");
5
+ let defu = require("defu");
6
+ defu = require_chunk.__toESM(defu);
7
+ let _nx_devkit = require("@nx/devkit");
8
+ let _storm_software_workspace_tools_utils_nx_json = require("@storm-software/workspace-tools/utils/nx-json");
9
+ let _storm_software_workspace_tools_utils_plugin_helpers = require("@storm-software/workspace-tools/utils/plugin-helpers");
10
+ let _storm_software_workspace_tools_utils_project_tags = require("@storm-software/workspace-tools/utils/project-tags");
11
+ let _stryke_env_get_env_paths = require("@stryke/env/get-env-paths");
12
+ let _stryke_fs_exists = require("@stryke/fs/exists");
13
+ let _stryke_hash = require("@stryke/hash");
14
+ let _stryke_path_join_paths = require("@stryke/path/join-paths");
15
+ let _stryke_string_format_camel_case = require("@stryke/string-format/camel-case");
16
+ let _stryke_string_format_kebab_case = require("@stryke/string-format/kebab-case");
17
+ let _stryke_string_format_title_case = require("@stryke/string-format/title-case");
18
+ let _stryke_type_checks_is_set_object = require("@stryke/type-checks/is-set-object");
19
+ let _stryke_type_checks_is_set_string = require("@stryke/type-checks/is-set-string");
20
+ let jiti = require("jiti");
21
+ let node_fs_promises = require("node:fs/promises");
22
+ let nx_src_config_nx_json_js = require("nx/src/config/nx-json.js");
23
+ let nx_src_utils_package_json_js = require("nx/src/utils/package-json.js");
24
+ let powerlines_config = require("powerlines/config");
25
+ let powerlines_constants = require("powerlines/constants");
3
26
 
4
- exports.createNxPlugin = require_plugin_utilities.createNxPlugin;
5
- exports.getNxPluginInputs = require_plugin_utilities.getNxPluginInputs;
6
- exports.getNxTargetInputs = require_plugin_utilities.getNxTargetInputs;
27
+ //#region src/helpers/plugin-utilities.ts
28
+ /**
29
+ * Generates Nx input strings for the Powerlines configuration file, replacing the `{framework}` placeholder with the specified framework name.
30
+ *
31
+ * @param framework - The framework name to use in the input strings
32
+ * @returns An array of Nx input strings for the configuration file
33
+ */
34
+ function getNxTargetInputs(framework) {
35
+ return require_helpers_constants.CONFIG_INPUTS.map((input) => input.replace("{framework}", framework));
36
+ }
37
+ /**
38
+ * Generates Nx input strings for the Powerlines configuration file, replacing the `{framework}` placeholder with the specified framework name.
39
+ *
40
+ * @param framework - The framework name to use in the input strings
41
+ * @returns An array of Nx input strings for the configuration file
42
+ */
43
+ function getNxPluginInputs(framework) {
44
+ return `**/{${getNxTargetInputs(framework).map((input) => input.replace("{projectRoot}/", "")).join(",")}}`;
45
+ }
46
+ /**
47
+ * Creates an Nx plugin that integrates Powerlines into the Nx build process.
48
+ *
49
+ * @param opts - Options for creating the Nx plugin
50
+ * @returns A CreateNodesV2 function that can be used as an Nx plugin
51
+ */
52
+ function createNxPlugin(opts) {
53
+ const framework = opts?.framework || "powerlines";
54
+ const title = `${(0, _stryke_string_format_title_case.titleCase)(framework)} Nx Plugin`;
55
+ try {
56
+ const name = opts?.name || `${framework}/nx/plugin`;
57
+ const artifactsFolder = opts?.artifactsFolder || `{projectRoot}/.${framework}`;
58
+ const targetInputs = getNxTargetInputs(framework);
59
+ const pluginInputs = getNxPluginInputs(framework);
60
+ return [pluginInputs, async (configFiles, options, contextV2) => {
61
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Initializing the ${title} for the following inputs: ${pluginInputs}`);
62
+ const envPaths = (0, _stryke_env_get_env_paths.getEnvPaths)({
63
+ orgId: "storm-software",
64
+ appId: framework,
65
+ workspaceRoot: contextV2.workspaceRoot
66
+ });
67
+ if (!envPaths.cache) throw new Error("The cache directory could not be determined.");
68
+ const nxJson = (0, nx_src_config_nx_json_js.readNxJson)(contextV2.workspaceRoot);
69
+ const resolver = (0, jiti.createJiti)(contextV2.workspaceRoot, {
70
+ debug: !!options?.debug,
71
+ interopDefault: true,
72
+ fsCache: (0, _stryke_path_join_paths.joinPaths)(envPaths.cache, "nx-plugin", (0, _stryke_hash.murmurhash)(contextV2.workspaceRoot, { maxLength: powerlines_constants.ROOT_HASH_LENGTH }), "jiti"),
73
+ moduleCache: true
74
+ });
75
+ return (0, _nx_devkit.createNodesFromFiles)(async (configFile, _, context) => {
76
+ try {
77
+ const projectRoot = (0, _storm_software_workspace_tools_utils_plugin_helpers.getProjectRoot)(configFile, contextV2.workspaceRoot);
78
+ if (!projectRoot) {
79
+ console.error(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - package.json and ${framework} configuration files (i.e. ${framework}.config.ts) must be located in the project root directory: ${configFile}`);
80
+ return {};
81
+ }
82
+ const root = (0, _storm_software_workspace_tools_utils_plugin_helpers.getRoot)(projectRoot, context);
83
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Loading ${framework} user configuration for project in root directory ${projectRoot}.`);
84
+ let userConfig = {};
85
+ try {
86
+ userConfig = await (0, powerlines_config.loadUserConfigFile)(projectRoot, contextV2.workspaceRoot, resolver, "build", "development", configFile, framework);
87
+ } catch (error) {
88
+ console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Failed to load user configuration for project in ${projectRoot} - ${(0, _stryke_type_checks_is_error.isError)(error) ? error.message : (0, _stryke_type_checks_is_set_string.isSetString)(error) ? error : "Unknown error"} \n\nThis error can occur if the project depends on another package in the workspace and the dependent package has not been built yet. To resolve this issue, please ensure that all dependent packages have been built successfully.`);
89
+ }
90
+ if (!(0, _stryke_fs_exists.existsSync)((0, _stryke_path_join_paths.joinPaths)(contextV2.workspaceRoot, projectRoot, "package.json"))) {
91
+ if (options?.verboseOutput) console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Cannot find \`package.json\` file in the project's root directory (path: "${(0, _stryke_path_join_paths.joinPaths)(contextV2.workspaceRoot, projectRoot)}"). Skipping project configuration.`);
92
+ return {};
93
+ }
94
+ const packageJsonContent = await (0, node_fs_promises.readFile)((0, _stryke_path_join_paths.joinPaths)(contextV2.workspaceRoot, projectRoot, "package.json"), "utf8");
95
+ if (!packageJsonContent) {
96
+ if (options?.verboseOutput) console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - No package.json file found for project in root directory ${projectRoot}`);
97
+ return {};
98
+ }
99
+ const packageJson = JSON.parse(packageJsonContent);
100
+ if (!userConfig.configFile && !packageJson?.[(0, _stryke_string_format_camel_case.camelCase)(framework)]) {
101
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Skipping ${projectRoot} - no ${framework} configuration found for project in root directory.`);
102
+ return {};
103
+ }
104
+ const projectConfig = (0, _storm_software_workspace_tools_utils_plugin_helpers.getProjectConfigFromProjectRoot)(projectRoot, packageJson);
105
+ if (!projectConfig) {
106
+ if (options?.verboseOutput) console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - No project configuration found for project in root directory ${projectRoot}`);
107
+ return {};
108
+ }
109
+ const targets = (0, nx_src_utils_package_json_js.readTargetsFromPackageJson)(packageJson, nxJson, projectRoot, context.workspaceRoot);
110
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Preparing Nx targets for project in root directory ${projectRoot}.`);
111
+ if (options?.clean !== false && !targets[options?.clean?.targetName || "clean"]) targets[options?.clean?.targetName || "clean"] = {
112
+ cache: true,
113
+ inputs: Array.isArray(options?.clean?.inputs) ? options.clean.inputs : (0, _storm_software_workspace_tools_utils_nx_json.withNamedInputs)(targetInputs, [options?.clean?.inputs || "typescript"]),
114
+ outputs: options?.clean?.outputs,
115
+ executor: options?.clean?.executor || `@${framework}/nx:${options?.clean?.targetName || "clean"}`,
116
+ dependsOn: options?.clean?.dependsOn ?? [`^${options?.clean?.targetName || "clean"}`],
117
+ defaultConfiguration: options?.clean?.defaultConfiguration || "production",
118
+ options: {
119
+ outputPath: userConfig.output?.outputPath,
120
+ projectType: userConfig.projectType || projectConfig.projectType,
121
+ autoInstall: userConfig.autoInstall
122
+ },
123
+ configurations: {
124
+ production: { mode: "production" },
125
+ test: { mode: "test" },
126
+ development: {
127
+ mode: "development",
128
+ skipCache: true
129
+ }
130
+ }
131
+ };
132
+ if (options?.prepare !== false && !targets[options?.prepare?.targetName || "prepare"]) targets[options?.prepare?.targetName || "prepare"] = {
133
+ cache: true,
134
+ inputs: Array.isArray(options?.prepare?.inputs) ? options.prepare.inputs : (0, _storm_software_workspace_tools_utils_nx_json.withNamedInputs)(targetInputs, [options?.prepare?.inputs || "typescript"]),
135
+ outputs: options?.prepare?.outputs ?? [artifactsFolder],
136
+ executor: options?.prepare?.executor || `@${framework}/nx:${options?.prepare?.targetName || "prepare"}`,
137
+ dependsOn: options?.prepare?.dependsOn ?? [`^${options?.prepare?.targetName || "build"}`, options?.clean !== false && `${options?.clean?.targetName || "clean"}`].filter(Boolean),
138
+ defaultConfiguration: options?.prepare?.defaultConfiguration || "production",
139
+ options: {
140
+ input: userConfig.input,
141
+ projectType: userConfig.projectType || projectConfig.projectType,
142
+ autoInstall: userConfig.autoInstall,
143
+ skipCache: userConfig.skipCache
144
+ },
145
+ configurations: {
146
+ production: { mode: "production" },
147
+ test: { mode: "test" },
148
+ development: {
149
+ mode: "development",
150
+ skipCache: true
151
+ }
152
+ }
153
+ };
154
+ if (options?.build !== false && !targets[options?.build?.targetName || "build"]) targets[options?.build?.targetName || "build"] = {
155
+ cache: true,
156
+ inputs: Array.isArray(options?.build?.inputs) ? options.build.inputs : (0, _storm_software_workspace_tools_utils_nx_json.withNamedInputs)(targetInputs, [options?.build?.inputs || "typescript"]),
157
+ outputs: options?.build?.outputs ?? ["{options.outputPath}"],
158
+ executor: options?.build?.executor || `@${framework}/nx:${options?.build?.targetName || "build"}`,
159
+ dependsOn: options?.build?.dependsOn ?? [`^${options?.build?.targetName || "build"}`, userConfig.skipCache ? void 0 : (0, _stryke_type_checks_is_set_object.isSetObject)(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"].filter(Boolean),
160
+ defaultConfiguration: options?.build?.defaultConfiguration || "production",
161
+ options: {
162
+ input: userConfig.input,
163
+ outputPath: userConfig.output?.outputPath,
164
+ projectType: userConfig.projectType || projectConfig.projectType,
165
+ autoInstall: userConfig.autoInstall,
166
+ skipCache: userConfig.skipCache
167
+ },
168
+ configurations: {
169
+ production: { mode: "production" },
170
+ test: { mode: "test" },
171
+ development: {
172
+ mode: "development",
173
+ skipCache: true
174
+ }
175
+ }
176
+ };
177
+ if (options?.lint !== false && !targets[options?.lint?.targetName || "lint"]) targets[options?.lint?.targetName || "lint"] = {
178
+ cache: true,
179
+ inputs: Array.isArray(options?.lint?.inputs) ? options.lint.inputs : (0, _storm_software_workspace_tools_utils_nx_json.withNamedInputs)([...targetInputs, artifactsFolder], options?.lint?.inputs ? [options.lint.inputs] : ["linting", "typescript"]),
180
+ outputs: options?.lint?.outputs ?? ["{options.outputPath}"],
181
+ executor: options?.lint?.executor || `@${framework}/nx:${options?.lint?.targetName || "lint"}`,
182
+ dependsOn: options?.lint?.dependsOn ?? [`^${options?.lint?.targetName || "lint"}`, userConfig.skipCache ? void 0 : (0, _stryke_type_checks_is_set_object.isSetObject)(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"].filter(Boolean),
183
+ defaultConfiguration: options?.lint?.defaultConfiguration || "production",
184
+ options: {
185
+ input: userConfig.input,
186
+ projectType: userConfig.projectType || projectConfig.projectType,
187
+ autoInstall: userConfig.autoInstall,
188
+ skipCache: userConfig.skipCache
189
+ },
190
+ configurations: {
191
+ production: { mode: "production" },
192
+ test: { mode: "test" },
193
+ development: {
194
+ mode: "development",
195
+ skipCache: true
196
+ }
197
+ }
198
+ };
199
+ if (options?.docs !== false && !targets[options?.docs?.targetName || "docs"]) targets[options?.docs?.targetName || "docs"] = {
200
+ cache: true,
201
+ inputs: Array.isArray(options?.docs?.inputs) ? options.docs.inputs : (0, _storm_software_workspace_tools_utils_nx_json.withNamedInputs)([...targetInputs, artifactsFolder], options?.docs?.inputs ? [options.docs.inputs] : ["documentation", "typescript"]),
202
+ outputs: options?.docs?.outputs ?? ["{options.outputPath}"],
203
+ executor: options?.docs?.executor || `@${framework}/nx:${options?.docs?.targetName || "docs"}`,
204
+ dependsOn: options?.docs?.dependsOn ?? [
205
+ `^${options?.docs?.targetName || "docs"}`,
206
+ options?.build !== false && `${options?.build?.targetName || "build"}`,
207
+ userConfig.skipCache ? void 0 : (0, _stryke_type_checks_is_set_object.isSetObject)(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"
208
+ ].filter(Boolean),
209
+ defaultConfiguration: options?.docs?.defaultConfiguration || "production",
210
+ options: {
211
+ input: userConfig.input,
212
+ projectType: userConfig.projectType || projectConfig.projectType,
213
+ autoInstall: userConfig.autoInstall,
214
+ skipCache: userConfig.skipCache
215
+ },
216
+ configurations: {
217
+ production: { mode: "production" },
218
+ test: { mode: "test" },
219
+ development: {
220
+ mode: "development",
221
+ skipCache: true
222
+ }
223
+ }
224
+ };
225
+ if (options?.deploy !== false && !targets[options?.deploy?.targetName || "deploy"]) targets[options?.deploy?.targetName || "deploy"] = {
226
+ inputs: Array.isArray(options?.deploy?.inputs) ? options.deploy.inputs : (0, _storm_software_workspace_tools_utils_nx_json.withNamedInputs)([...targetInputs, artifactsFolder], options?.deploy?.inputs ? [options.deploy.inputs] : ["documentation", "typescript"]),
227
+ outputs: options?.deploy?.outputs ?? ["{options.outputPath}"],
228
+ executor: options?.deploy?.executor || `@${framework}/nx:${options?.deploy?.targetName || "deploy"}`,
229
+ dependsOn: options?.deploy?.dependsOn ?? [
230
+ `^${options?.deploy?.targetName || "deploy"}`,
231
+ options?.build !== false && `${options?.build?.targetName || "build"}`,
232
+ userConfig.skipCache ? void 0 : (0, _stryke_type_checks_is_set_object.isSetObject)(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"
233
+ ].filter(Boolean),
234
+ defaultConfiguration: options?.deploy?.defaultConfiguration || "production",
235
+ options: {
236
+ input: userConfig.input,
237
+ projectType: userConfig.projectType || projectConfig.projectType,
238
+ autoInstall: userConfig.autoInstall,
239
+ skipCache: userConfig.skipCache
240
+ },
241
+ configurations: {
242
+ production: { mode: "production" },
243
+ test: { mode: "test" },
244
+ development: {
245
+ mode: "development",
246
+ skipCache: true
247
+ }
248
+ }
249
+ };
250
+ (0, _storm_software_workspace_tools_utils_project_tags.setDefaultProjectTags)(projectConfig, name);
251
+ (0, _storm_software_workspace_tools_utils_project_tags.addProjectTag)(projectConfig, framework, userConfig.projectType || projectConfig.projectType || "library", { overwrite: true });
252
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Completed preparing Nx configuration for project in root directory ${projectRoot}.`);
253
+ return { projects: { [root]: (0, defu.default)(projectConfig, {
254
+ name: (0, _stryke_string_format_kebab_case.kebabCase)(userConfig.name),
255
+ projectType: userConfig.projectType || "library",
256
+ root,
257
+ sourceRoot: (0, _stryke_path_join_paths.joinPaths)(root, "src"),
258
+ targets
259
+ }) } };
260
+ } catch (error) {
261
+ console.error(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Failed to process the project configuration for file "${configFile}" - ${(0, _stryke_type_checks_is_error.isError)(error) ? error.message : (0, _stryke_type_checks_is_set_string.isSetString)(error) ? error : "Unknown fatal error"}`);
262
+ return {};
263
+ }
264
+ }, configFiles, options, contextV2);
265
+ }];
266
+ } catch (error) {
267
+ console.error(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - ${(0, _stryke_type_checks_is_error.isError)(error) ? error.message : (0, _stryke_type_checks_is_set_string.isSetString)(error) ? error : "Unknown fatal error during plugin initialization"}`);
268
+ throw new Error(`Failed to initialize the ${title} - ${(0, _stryke_type_checks_is_error.isError)(error) ? error.message : (0, _stryke_type_checks_is_set_string.isSetString)(error) ? error : "See previous logs for more details"}`, { cause: error instanceof Error ? error : void 0 });
269
+ }
270
+ }
271
+
272
+ //#endregion
273
+ exports.createNxPlugin = createNxPlugin;
274
+ exports.getNxPluginInputs = getNxPluginInputs;
275
+ exports.getNxTargetInputs = getNxTargetInputs;
@@ -1,4 +1,271 @@
1
- import "../config-LoR-NIJg.mjs";
2
- import { n as getNxPluginInputs, r as getNxTargetInputs, t as createNxPlugin } from "../plugin-utilities-DamtoOxO.mjs";
1
+ import { CONFIG_INPUTS } from "./constants.mjs";
2
+ import { isError } from "@stryke/type-checks/is-error";
3
+ import defu from "defu";
4
+ import { createNodesFromFiles } from "@nx/devkit";
5
+ import { withNamedInputs } from "@storm-software/workspace-tools/utils/nx-json";
6
+ import { getProjectConfigFromProjectRoot, getProjectRoot, getRoot } from "@storm-software/workspace-tools/utils/plugin-helpers";
7
+ import { addProjectTag, setDefaultProjectTags } from "@storm-software/workspace-tools/utils/project-tags";
8
+ import { getEnvPaths } from "@stryke/env/get-env-paths";
9
+ import { existsSync } from "@stryke/fs/exists";
10
+ import { murmurhash } from "@stryke/hash";
11
+ import { joinPaths } from "@stryke/path/join-paths";
12
+ import { camelCase } from "@stryke/string-format/camel-case";
13
+ import { kebabCase } from "@stryke/string-format/kebab-case";
14
+ import { titleCase } from "@stryke/string-format/title-case";
15
+ import { isSetObject } from "@stryke/type-checks/is-set-object";
16
+ import { isSetString } from "@stryke/type-checks/is-set-string";
17
+ import { createJiti } from "jiti";
18
+ import { readFile } from "node:fs/promises";
19
+ import { readNxJson as readNxJson$1 } from "nx/src/config/nx-json.js";
20
+ import { readTargetsFromPackageJson } from "nx/src/utils/package-json.js";
21
+ import { loadUserConfigFile } from "powerlines/config";
22
+ import { ROOT_HASH_LENGTH } from "powerlines/constants";
3
23
 
4
- export { createNxPlugin, getNxPluginInputs, getNxTargetInputs };
24
+ //#region src/helpers/plugin-utilities.ts
25
+ /**
26
+ * Generates Nx input strings for the Powerlines configuration file, replacing the `{framework}` placeholder with the specified framework name.
27
+ *
28
+ * @param framework - The framework name to use in the input strings
29
+ * @returns An array of Nx input strings for the configuration file
30
+ */
31
+ function getNxTargetInputs(framework) {
32
+ return CONFIG_INPUTS.map((input) => input.replace("{framework}", framework));
33
+ }
34
+ /**
35
+ * Generates Nx input strings for the Powerlines configuration file, replacing the `{framework}` placeholder with the specified framework name.
36
+ *
37
+ * @param framework - The framework name to use in the input strings
38
+ * @returns An array of Nx input strings for the configuration file
39
+ */
40
+ function getNxPluginInputs(framework) {
41
+ return `**/{${getNxTargetInputs(framework).map((input) => input.replace("{projectRoot}/", "")).join(",")}}`;
42
+ }
43
+ /**
44
+ * Creates an Nx plugin that integrates Powerlines into the Nx build process.
45
+ *
46
+ * @param opts - Options for creating the Nx plugin
47
+ * @returns A CreateNodesV2 function that can be used as an Nx plugin
48
+ */
49
+ function createNxPlugin(opts) {
50
+ const framework = opts?.framework || "powerlines";
51
+ const title = `${titleCase(framework)} Nx Plugin`;
52
+ try {
53
+ const name = opts?.name || `${framework}/nx/plugin`;
54
+ const artifactsFolder = opts?.artifactsFolder || `{projectRoot}/.${framework}`;
55
+ const targetInputs = getNxTargetInputs(framework);
56
+ const pluginInputs = getNxPluginInputs(framework);
57
+ return [pluginInputs, async (configFiles, options, contextV2) => {
58
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Initializing the ${title} for the following inputs: ${pluginInputs}`);
59
+ const envPaths = getEnvPaths({
60
+ orgId: "storm-software",
61
+ appId: framework,
62
+ workspaceRoot: contextV2.workspaceRoot
63
+ });
64
+ if (!envPaths.cache) throw new Error("The cache directory could not be determined.");
65
+ const nxJson = readNxJson$1(contextV2.workspaceRoot);
66
+ const resolver = createJiti(contextV2.workspaceRoot, {
67
+ debug: !!options?.debug,
68
+ interopDefault: true,
69
+ fsCache: joinPaths(envPaths.cache, "nx-plugin", murmurhash(contextV2.workspaceRoot, { maxLength: ROOT_HASH_LENGTH }), "jiti"),
70
+ moduleCache: true
71
+ });
72
+ return createNodesFromFiles(async (configFile, _, context) => {
73
+ try {
74
+ const projectRoot = getProjectRoot(configFile, contextV2.workspaceRoot);
75
+ if (!projectRoot) {
76
+ console.error(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - package.json and ${framework} configuration files (i.e. ${framework}.config.ts) must be located in the project root directory: ${configFile}`);
77
+ return {};
78
+ }
79
+ const root = getRoot(projectRoot, context);
80
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Loading ${framework} user configuration for project in root directory ${projectRoot}.`);
81
+ let userConfig = {};
82
+ try {
83
+ userConfig = await loadUserConfigFile(projectRoot, contextV2.workspaceRoot, resolver, "build", "development", configFile, framework);
84
+ } catch (error) {
85
+ console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Failed to load user configuration for project in ${projectRoot} - ${isError(error) ? error.message : isSetString(error) ? error : "Unknown error"} \n\nThis error can occur if the project depends on another package in the workspace and the dependent package has not been built yet. To resolve this issue, please ensure that all dependent packages have been built successfully.`);
86
+ }
87
+ if (!existsSync(joinPaths(contextV2.workspaceRoot, projectRoot, "package.json"))) {
88
+ if (options?.verboseOutput) console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Cannot find \`package.json\` file in the project's root directory (path: "${joinPaths(contextV2.workspaceRoot, projectRoot)}"). Skipping project configuration.`);
89
+ return {};
90
+ }
91
+ const packageJsonContent = await readFile(joinPaths(contextV2.workspaceRoot, projectRoot, "package.json"), "utf8");
92
+ if (!packageJsonContent) {
93
+ if (options?.verboseOutput) console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - No package.json file found for project in root directory ${projectRoot}`);
94
+ return {};
95
+ }
96
+ const packageJson = JSON.parse(packageJsonContent);
97
+ if (!userConfig.configFile && !packageJson?.[camelCase(framework)]) {
98
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Skipping ${projectRoot} - no ${framework} configuration found for project in root directory.`);
99
+ return {};
100
+ }
101
+ const projectConfig = getProjectConfigFromProjectRoot(projectRoot, packageJson);
102
+ if (!projectConfig) {
103
+ if (options?.verboseOutput) console.warn(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - No project configuration found for project in root directory ${projectRoot}`);
104
+ return {};
105
+ }
106
+ const targets = readTargetsFromPackageJson(packageJson, nxJson, projectRoot, context.workspaceRoot);
107
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Preparing Nx targets for project in root directory ${projectRoot}.`);
108
+ if (options?.clean !== false && !targets[options?.clean?.targetName || "clean"]) targets[options?.clean?.targetName || "clean"] = {
109
+ cache: true,
110
+ inputs: Array.isArray(options?.clean?.inputs) ? options.clean.inputs : withNamedInputs(targetInputs, [options?.clean?.inputs || "typescript"]),
111
+ outputs: options?.clean?.outputs,
112
+ executor: options?.clean?.executor || `@${framework}/nx:${options?.clean?.targetName || "clean"}`,
113
+ dependsOn: options?.clean?.dependsOn ?? [`^${options?.clean?.targetName || "clean"}`],
114
+ defaultConfiguration: options?.clean?.defaultConfiguration || "production",
115
+ options: {
116
+ outputPath: userConfig.output?.outputPath,
117
+ projectType: userConfig.projectType || projectConfig.projectType,
118
+ autoInstall: userConfig.autoInstall
119
+ },
120
+ configurations: {
121
+ production: { mode: "production" },
122
+ test: { mode: "test" },
123
+ development: {
124
+ mode: "development",
125
+ skipCache: true
126
+ }
127
+ }
128
+ };
129
+ if (options?.prepare !== false && !targets[options?.prepare?.targetName || "prepare"]) targets[options?.prepare?.targetName || "prepare"] = {
130
+ cache: true,
131
+ inputs: Array.isArray(options?.prepare?.inputs) ? options.prepare.inputs : withNamedInputs(targetInputs, [options?.prepare?.inputs || "typescript"]),
132
+ outputs: options?.prepare?.outputs ?? [artifactsFolder],
133
+ executor: options?.prepare?.executor || `@${framework}/nx:${options?.prepare?.targetName || "prepare"}`,
134
+ dependsOn: options?.prepare?.dependsOn ?? [`^${options?.prepare?.targetName || "build"}`, options?.clean !== false && `${options?.clean?.targetName || "clean"}`].filter(Boolean),
135
+ defaultConfiguration: options?.prepare?.defaultConfiguration || "production",
136
+ options: {
137
+ input: userConfig.input,
138
+ projectType: userConfig.projectType || projectConfig.projectType,
139
+ autoInstall: userConfig.autoInstall,
140
+ skipCache: userConfig.skipCache
141
+ },
142
+ configurations: {
143
+ production: { mode: "production" },
144
+ test: { mode: "test" },
145
+ development: {
146
+ mode: "development",
147
+ skipCache: true
148
+ }
149
+ }
150
+ };
151
+ if (options?.build !== false && !targets[options?.build?.targetName || "build"]) targets[options?.build?.targetName || "build"] = {
152
+ cache: true,
153
+ inputs: Array.isArray(options?.build?.inputs) ? options.build.inputs : withNamedInputs(targetInputs, [options?.build?.inputs || "typescript"]),
154
+ outputs: options?.build?.outputs ?? ["{options.outputPath}"],
155
+ executor: options?.build?.executor || `@${framework}/nx:${options?.build?.targetName || "build"}`,
156
+ dependsOn: options?.build?.dependsOn ?? [`^${options?.build?.targetName || "build"}`, userConfig.skipCache ? void 0 : isSetObject(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"].filter(Boolean),
157
+ defaultConfiguration: options?.build?.defaultConfiguration || "production",
158
+ options: {
159
+ input: userConfig.input,
160
+ outputPath: userConfig.output?.outputPath,
161
+ projectType: userConfig.projectType || projectConfig.projectType,
162
+ autoInstall: userConfig.autoInstall,
163
+ skipCache: userConfig.skipCache
164
+ },
165
+ configurations: {
166
+ production: { mode: "production" },
167
+ test: { mode: "test" },
168
+ development: {
169
+ mode: "development",
170
+ skipCache: true
171
+ }
172
+ }
173
+ };
174
+ if (options?.lint !== false && !targets[options?.lint?.targetName || "lint"]) targets[options?.lint?.targetName || "lint"] = {
175
+ cache: true,
176
+ inputs: Array.isArray(options?.lint?.inputs) ? options.lint.inputs : withNamedInputs([...targetInputs, artifactsFolder], options?.lint?.inputs ? [options.lint.inputs] : ["linting", "typescript"]),
177
+ outputs: options?.lint?.outputs ?? ["{options.outputPath}"],
178
+ executor: options?.lint?.executor || `@${framework}/nx:${options?.lint?.targetName || "lint"}`,
179
+ dependsOn: options?.lint?.dependsOn ?? [`^${options?.lint?.targetName || "lint"}`, userConfig.skipCache ? void 0 : isSetObject(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"].filter(Boolean),
180
+ defaultConfiguration: options?.lint?.defaultConfiguration || "production",
181
+ options: {
182
+ input: userConfig.input,
183
+ projectType: userConfig.projectType || projectConfig.projectType,
184
+ autoInstall: userConfig.autoInstall,
185
+ skipCache: userConfig.skipCache
186
+ },
187
+ configurations: {
188
+ production: { mode: "production" },
189
+ test: { mode: "test" },
190
+ development: {
191
+ mode: "development",
192
+ skipCache: true
193
+ }
194
+ }
195
+ };
196
+ if (options?.docs !== false && !targets[options?.docs?.targetName || "docs"]) targets[options?.docs?.targetName || "docs"] = {
197
+ cache: true,
198
+ inputs: Array.isArray(options?.docs?.inputs) ? options.docs.inputs : withNamedInputs([...targetInputs, artifactsFolder], options?.docs?.inputs ? [options.docs.inputs] : ["documentation", "typescript"]),
199
+ outputs: options?.docs?.outputs ?? ["{options.outputPath}"],
200
+ executor: options?.docs?.executor || `@${framework}/nx:${options?.docs?.targetName || "docs"}`,
201
+ dependsOn: options?.docs?.dependsOn ?? [
202
+ `^${options?.docs?.targetName || "docs"}`,
203
+ options?.build !== false && `${options?.build?.targetName || "build"}`,
204
+ userConfig.skipCache ? void 0 : isSetObject(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"
205
+ ].filter(Boolean),
206
+ defaultConfiguration: options?.docs?.defaultConfiguration || "production",
207
+ options: {
208
+ input: userConfig.input,
209
+ projectType: userConfig.projectType || projectConfig.projectType,
210
+ autoInstall: userConfig.autoInstall,
211
+ skipCache: userConfig.skipCache
212
+ },
213
+ configurations: {
214
+ production: { mode: "production" },
215
+ test: { mode: "test" },
216
+ development: {
217
+ mode: "development",
218
+ skipCache: true
219
+ }
220
+ }
221
+ };
222
+ if (options?.deploy !== false && !targets[options?.deploy?.targetName || "deploy"]) targets[options?.deploy?.targetName || "deploy"] = {
223
+ inputs: Array.isArray(options?.deploy?.inputs) ? options.deploy.inputs : withNamedInputs([...targetInputs, artifactsFolder], options?.deploy?.inputs ? [options.deploy.inputs] : ["documentation", "typescript"]),
224
+ outputs: options?.deploy?.outputs ?? ["{options.outputPath}"],
225
+ executor: options?.deploy?.executor || `@${framework}/nx:${options?.deploy?.targetName || "deploy"}`,
226
+ dependsOn: options?.deploy?.dependsOn ?? [
227
+ `^${options?.deploy?.targetName || "deploy"}`,
228
+ options?.build !== false && `${options?.build?.targetName || "build"}`,
229
+ userConfig.skipCache ? void 0 : isSetObject(options?.prepare) && options?.prepare?.targetName ? options?.prepare?.targetName : "prepare"
230
+ ].filter(Boolean),
231
+ defaultConfiguration: options?.deploy?.defaultConfiguration || "production",
232
+ options: {
233
+ input: userConfig.input,
234
+ projectType: userConfig.projectType || projectConfig.projectType,
235
+ autoInstall: userConfig.autoInstall,
236
+ skipCache: userConfig.skipCache
237
+ },
238
+ configurations: {
239
+ production: { mode: "production" },
240
+ test: { mode: "test" },
241
+ development: {
242
+ mode: "development",
243
+ skipCache: true
244
+ }
245
+ }
246
+ };
247
+ setDefaultProjectTags(projectConfig, name);
248
+ addProjectTag(projectConfig, framework, userConfig.projectType || projectConfig.projectType || "library", { overwrite: true });
249
+ if (options?.verboseOutput) console.debug(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Completed preparing Nx configuration for project in root directory ${projectRoot}.`);
250
+ return { projects: { [root]: defu(projectConfig, {
251
+ name: kebabCase(userConfig.name),
252
+ projectType: userConfig.projectType || "library",
253
+ root,
254
+ sourceRoot: joinPaths(root, "src"),
255
+ targets
256
+ }) } };
257
+ } catch (error) {
258
+ console.error(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - Failed to process the project configuration for file "${configFile}" - ${isError(error) ? error.message : isSetString(error) ? error : "Unknown fatal error"}`);
259
+ return {};
260
+ }
261
+ }, configFiles, options, contextV2);
262
+ }];
263
+ } catch (error) {
264
+ console.error(`[${title}] - ${(/* @__PURE__ */ new Date()).toISOString()} - ${isError(error) ? error.message : isSetString(error) ? error : "Unknown fatal error during plugin initialization"}`);
265
+ throw new Error(`Failed to initialize the ${title} - ${isError(error) ? error.message : isSetString(error) ? error : "See previous logs for more details"}`, { cause: error instanceof Error ? error : void 0 });
266
+ }
267
+ }
268
+
269
+ //#endregion
270
+ export { createNxPlugin, getNxPluginInputs, getNxTargetInputs };
271
+ //# sourceMappingURL=plugin-utilities.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-utilities.mjs","names":["readNxJson"],"sources":["../../../src/helpers/plugin-utilities.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\n/* eslint-disable no-console */\n\nimport type { CreateNodesResultV2, CreateNodesV2 } from \"@nx/devkit\";\nimport { createNodesFromFiles } from \"@nx/devkit\";\nimport type { ProjectTagVariant } from \"@storm-software/workspace-tools/types\";\nimport { withNamedInputs } from \"@storm-software/workspace-tools/utils/nx-json\";\nimport {\n getProjectConfigFromProjectRoot,\n getProjectRoot,\n getRoot\n} from \"@storm-software/workspace-tools/utils/plugin-helpers\";\nimport {\n addProjectTag,\n setDefaultProjectTags\n} from \"@storm-software/workspace-tools/utils/project-tags\";\nimport { getEnvPaths } from \"@stryke/env/get-env-paths\";\nimport { existsSync } from \"@stryke/fs/exists\";\nimport { murmurhash } from \"@stryke/hash\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { titleCase } from \"@stryke/string-format/title-case\";\nimport { isError } from \"@stryke/type-checks/is-error\";\nimport { isSetObject } from \"@stryke/type-checks/is-set-object\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { PackageJson } from \"@stryke/types/package-json\";\nimport defu from \"defu\";\nimport { createJiti } from \"jiti\";\nimport { readFile } from \"node:fs/promises\";\nimport { readNxJson } from \"nx/src/config/nx-json.js\";\nimport type {\n ProjectConfiguration,\n TargetConfiguration\n} from \"nx/src/config/workspace-json-project-json.js\";\nimport type { PackageJson as PackageJsonNx } from \"nx/src/utils/package-json.js\";\nimport { readTargetsFromPackageJson } from \"nx/src/utils/package-json.js\";\nimport type { ParsedUserConfig } from \"powerlines\";\nimport { loadUserConfigFile } from \"powerlines/config\";\nimport { ROOT_HASH_LENGTH } from \"powerlines/constants\";\nimport { NxPluginOptions } from \"../types/plugin\";\nimport { CONFIG_INPUTS } from \"./constants\";\n\n/**\n * Generates Nx input strings for the Powerlines configuration file, replacing the `{framework}` placeholder with the specified framework name.\n *\n * @param framework - The framework name to use in the input strings\n * @returns An array of Nx input strings for the configuration file\n */\nexport function getNxTargetInputs(framework: string): string[] {\n return CONFIG_INPUTS.map(input => input.replace(\"{framework}\", framework));\n}\n\n/**\n * Generates Nx input strings for the Powerlines configuration file, replacing the `{framework}` placeholder with the specified framework name.\n *\n * @param framework - The framework name to use in the input strings\n * @returns An array of Nx input strings for the configuration file\n */\nexport function getNxPluginInputs(framework: string): string {\n return `**/{${getNxTargetInputs(framework)\n .map(input => input.replace(\"{projectRoot}/\", \"\"))\n .join(\",\")}}`;\n}\n\nexport interface CreateNxPluginOptions {\n /**\n * The name of the Nx plugin to create\n *\n * @remarks\n * This will be used in logging and project tagging.\n *\n * @defaultValue \"\\{framework\\}/plugin/nx\"\n */\n name?: string;\n\n /**\n * The folder where the generated runtime artifacts will be located\n *\n * @remarks\n * This folder will contain all runtime artifacts and builtins generated during the \"prepare\" phase.\n *\n * @defaultValue \"\\{projectRoot\\}/.powerlines\"\n */\n artifactsFolder?: string;\n\n /**\n * A string identifier that allows a child framework or tool to identify itself when using Powerlines.\n *\n * @remarks\n * If no values are provided for {@link OutputConfig.dts | output.dts} or {@link OutputConfig.artifactsFolder | output.artifactsFolder}, this value will be used as the default.\n *\n * @defaultValue \"powerlines\"\n */\n framework?: string;\n}\n\n/**\n * Creates an Nx plugin that integrates Powerlines into the Nx build process.\n *\n * @param opts - Options for creating the Nx plugin\n * @returns A CreateNodesV2 function that can be used as an Nx plugin\n */\nexport function createNxPlugin<\n TOptions extends NxPluginOptions = NxPluginOptions\n>(opts?: CreateNxPluginOptions): CreateNodesV2<TOptions> {\n const framework = opts?.framework || \"powerlines\";\n const title = `${titleCase(framework)} Nx Plugin`;\n\n try {\n const name = opts?.name || `${framework}/nx/plugin`;\n const artifactsFolder =\n opts?.artifactsFolder || `{projectRoot}/.${framework}`;\n\n const targetInputs = getNxTargetInputs(framework);\n const pluginInputs = getNxPluginInputs(framework);\n\n return [\n pluginInputs,\n async (configFiles, options, contextV2): Promise<CreateNodesResultV2> => {\n if (options?.verboseOutput) {\n console.debug(\n `[${title}] - ${new Date().toISOString()} - Initializing the ${title} for the following inputs: ${pluginInputs}`\n );\n }\n\n const envPaths = getEnvPaths({\n orgId: \"storm-software\",\n appId: framework,\n workspaceRoot: contextV2.workspaceRoot\n });\n if (!envPaths.cache) {\n throw new Error(\"The cache directory could not be determined.\");\n }\n\n const nxJson = readNxJson(contextV2.workspaceRoot);\n const resolver = createJiti(contextV2.workspaceRoot, {\n debug: !!options?.debug,\n interopDefault: true,\n fsCache: joinPaths(\n envPaths.cache,\n \"nx-plugin\",\n murmurhash(contextV2.workspaceRoot, {\n maxLength: ROOT_HASH_LENGTH\n }),\n \"jiti\"\n ),\n moduleCache: true\n });\n\n return createNodesFromFiles(\n async (configFile, _, context) => {\n try {\n const projectRoot = getProjectRoot(\n configFile,\n contextV2.workspaceRoot\n );\n if (!projectRoot) {\n console.error(\n `[${title}] - ${new Date().toISOString()} - package.json and ${\n framework\n } configuration files (i.e. ${\n framework\n }.config.ts) must be located in the project root directory: ${\n configFile\n }`\n );\n\n return {};\n }\n\n const root = getRoot(projectRoot, context);\n\n if (options?.verboseOutput) {\n console.debug(\n `[${title}] - ${new Date().toISOString()} - Loading ${\n framework\n } user configuration for project in root directory ${\n projectRoot\n }.`\n );\n }\n\n let userConfig = {} as ParsedUserConfig;\n try {\n userConfig = await loadUserConfigFile(\n projectRoot,\n contextV2.workspaceRoot,\n resolver,\n \"build\",\n \"development\",\n configFile,\n framework\n );\n } catch (error) {\n console.warn(\n `[${title}] - ${new Date().toISOString()} - Failed to load user configuration for project in ${\n projectRoot\n } - ${\n isError(error)\n ? error.message\n : isSetString(error)\n ? error\n : \"Unknown error\"\n } \\n\\nThis error can occur if the project depends on another package in the workspace and the dependent package has not been built yet. To resolve this issue, please ensure that all dependent packages have been built successfully.`\n );\n }\n\n if (\n !existsSync(\n joinPaths(\n contextV2.workspaceRoot,\n projectRoot,\n \"package.json\"\n )\n )\n ) {\n if (options?.verboseOutput) {\n console.warn(\n `[${\n title\n }] - ${new Date().toISOString()} - Cannot find \\`package.json\\` file in the project's root directory (path: \"${joinPaths(\n contextV2.workspaceRoot,\n projectRoot\n )}\"). Skipping project configuration.`\n );\n }\n\n return {};\n }\n\n const packageJsonContent = await readFile(\n joinPaths(contextV2.workspaceRoot, projectRoot, \"package.json\"),\n \"utf8\"\n );\n if (!packageJsonContent) {\n if (options?.verboseOutput) {\n console.warn(\n `[${title}] - ${new Date().toISOString()} - No package.json file found for project in root directory ${projectRoot}`\n );\n }\n\n return {};\n }\n\n const packageJson: PackageJson = JSON.parse(packageJsonContent);\n if (\n !userConfig.configFile &&\n !packageJson?.[camelCase(framework)]\n ) {\n if (options?.verboseOutput) {\n console.debug(\n `[${title}] - ${new Date().toISOString()} - Skipping ${projectRoot} - no ${\n framework\n } configuration found for project in root directory.`\n );\n }\n\n return {};\n }\n\n const projectConfig = getProjectConfigFromProjectRoot(\n projectRoot,\n packageJson\n );\n if (!projectConfig) {\n if (options?.verboseOutput) {\n console.warn(\n `[${title}] - ${new Date().toISOString()} - No project configuration found for project in root directory ${\n projectRoot\n }`\n );\n }\n\n return {};\n }\n\n const targets: ProjectConfiguration[\"targets\"] =\n readTargetsFromPackageJson(\n packageJson as PackageJsonNx,\n nxJson,\n projectRoot,\n context.workspaceRoot\n );\n\n if (options?.verboseOutput) {\n console.debug(\n `[${title}] - ${new Date().toISOString()} - Preparing Nx targets for project in root directory ${\n projectRoot\n }.`\n );\n }\n\n if (\n options?.clean !== false &&\n !targets[options?.clean?.targetName || \"clean\"]\n ) {\n targets[options?.clean?.targetName || \"clean\"] = {\n cache: true,\n inputs: Array.isArray(options?.clean?.inputs)\n ? options.clean.inputs\n : withNamedInputs(targetInputs, [\n options?.clean?.inputs || \"typescript\"\n ]),\n outputs: options?.clean?.outputs,\n executor:\n options?.clean?.executor ||\n `@${framework}/nx:${options?.clean?.targetName || \"clean\"}`,\n dependsOn: options?.clean?.dependsOn ?? [\n `^${options?.clean?.targetName || \"clean\"}`\n ],\n defaultConfiguration:\n options?.clean?.defaultConfiguration || \"production\",\n options: {\n outputPath: userConfig.output?.outputPath,\n projectType:\n userConfig.projectType || projectConfig.projectType,\n autoInstall: userConfig.autoInstall\n },\n configurations: {\n production: {\n mode: \"production\"\n },\n test: {\n mode: \"test\"\n },\n development: {\n mode: \"development\",\n skipCache: true\n }\n }\n };\n }\n\n if (\n options?.prepare !== false &&\n !targets[options?.prepare?.targetName || \"prepare\"]\n ) {\n targets[options?.prepare?.targetName || \"prepare\"] = {\n cache: true,\n inputs: Array.isArray(options?.prepare?.inputs)\n ? options.prepare.inputs\n : withNamedInputs(targetInputs, [\n options?.prepare?.inputs || \"typescript\"\n ]),\n outputs: options?.prepare?.outputs ?? [artifactsFolder],\n executor:\n options?.prepare?.executor ||\n `@${framework}/nx:${options?.prepare?.targetName || \"prepare\"}`,\n dependsOn:\n options?.prepare?.dependsOn ??\n ([\n `^${options?.prepare?.targetName || \"build\"}`,\n options?.clean !== false &&\n `${options?.clean?.targetName || \"clean\"}`\n ].filter(Boolean) as string[]),\n defaultConfiguration:\n options?.prepare?.defaultConfiguration || \"production\",\n options: {\n input: userConfig.input,\n projectType:\n userConfig.projectType || projectConfig.projectType,\n autoInstall: userConfig.autoInstall,\n skipCache: userConfig.skipCache\n },\n configurations: {\n production: {\n mode: \"production\"\n },\n test: {\n mode: \"test\"\n },\n development: {\n mode: \"development\",\n skipCache: true\n }\n }\n };\n }\n\n if (\n options?.build !== false &&\n !targets[options?.build?.targetName || \"build\"]\n ) {\n targets[options?.build?.targetName || \"build\"] = {\n cache: true,\n inputs: Array.isArray(options?.build?.inputs)\n ? options.build.inputs\n : withNamedInputs(targetInputs, [\n options?.build?.inputs || \"typescript\"\n ]),\n outputs: options?.build?.outputs ?? [\"{options.outputPath}\"],\n executor:\n options?.build?.executor ||\n `@${framework}/nx:${options?.build?.targetName || \"build\"}`,\n dependsOn:\n options?.build?.dependsOn ??\n ([\n `^${options?.build?.targetName || \"build\"}`,\n userConfig.skipCache\n ? undefined\n : isSetObject(options?.prepare) &&\n options?.prepare?.targetName\n ? options?.prepare?.targetName\n : \"prepare\"\n ].filter(Boolean) as TargetConfiguration[\"dependsOn\"]),\n defaultConfiguration:\n options?.build?.defaultConfiguration || \"production\",\n options: {\n input: userConfig.input,\n outputPath: userConfig.output?.outputPath,\n projectType:\n userConfig.projectType || projectConfig.projectType,\n autoInstall: userConfig.autoInstall,\n skipCache: userConfig.skipCache\n },\n configurations: {\n production: {\n mode: \"production\"\n },\n test: {\n mode: \"test\"\n },\n development: {\n mode: \"development\",\n skipCache: true\n }\n }\n };\n }\n\n if (\n options?.lint !== false &&\n !targets[options?.lint?.targetName || \"lint\"]\n ) {\n targets[options?.lint?.targetName || \"lint\"] = {\n cache: true,\n inputs: Array.isArray(options?.lint?.inputs)\n ? options.lint.inputs\n : withNamedInputs(\n [...targetInputs, artifactsFolder],\n options?.lint?.inputs\n ? [options.lint.inputs]\n : [\"linting\", \"typescript\"]\n ),\n outputs: options?.lint?.outputs ?? [\"{options.outputPath}\"],\n executor:\n options?.lint?.executor ||\n `@${framework}/nx:${options?.lint?.targetName || \"lint\"}`,\n dependsOn:\n options?.lint?.dependsOn ??\n ([\n `^${options?.lint?.targetName || \"lint\"}`,\n userConfig.skipCache\n ? undefined\n : isSetObject(options?.prepare) &&\n options?.prepare?.targetName\n ? options?.prepare?.targetName\n : \"prepare\"\n ].filter(Boolean) as TargetConfiguration[\"dependsOn\"]),\n defaultConfiguration:\n options?.lint?.defaultConfiguration || \"production\",\n options: {\n input: userConfig.input,\n projectType:\n userConfig.projectType || projectConfig.projectType,\n autoInstall: userConfig.autoInstall,\n skipCache: userConfig.skipCache\n },\n configurations: {\n production: {\n mode: \"production\"\n },\n test: {\n mode: \"test\"\n },\n development: {\n mode: \"development\",\n skipCache: true\n }\n }\n };\n }\n\n if (\n options?.docs !== false &&\n !targets[options?.docs?.targetName || \"docs\"]\n ) {\n targets[options?.docs?.targetName || \"docs\"] = {\n cache: true,\n inputs: Array.isArray(options?.docs?.inputs)\n ? options.docs.inputs\n : withNamedInputs(\n [...targetInputs, artifactsFolder],\n options?.docs?.inputs\n ? [options.docs.inputs]\n : [\"documentation\", \"typescript\"]\n ),\n outputs: options?.docs?.outputs ?? [\"{options.outputPath}\"],\n executor:\n options?.docs?.executor ||\n `@${framework}/nx:${options?.docs?.targetName || \"docs\"}`,\n dependsOn:\n options?.docs?.dependsOn ??\n ([\n `^${options?.docs?.targetName || \"docs\"}`,\n options?.build !== false &&\n `${options?.build?.targetName || \"build\"}`,\n userConfig.skipCache\n ? undefined\n : isSetObject(options?.prepare) &&\n options?.prepare?.targetName\n ? options?.prepare?.targetName\n : \"prepare\"\n ].filter(Boolean) as TargetConfiguration[\"dependsOn\"]),\n defaultConfiguration:\n options?.docs?.defaultConfiguration || \"production\",\n options: {\n input: userConfig.input,\n projectType:\n userConfig.projectType || projectConfig.projectType,\n autoInstall: userConfig.autoInstall,\n skipCache: userConfig.skipCache\n },\n configurations: {\n production: {\n mode: \"production\"\n },\n test: {\n mode: \"test\"\n },\n development: {\n mode: \"development\",\n skipCache: true\n }\n }\n };\n }\n\n if (\n options?.deploy !== false &&\n !targets[options?.deploy?.targetName || \"deploy\"]\n ) {\n targets[options?.deploy?.targetName || \"deploy\"] = {\n inputs: Array.isArray(options?.deploy?.inputs)\n ? options.deploy.inputs\n : withNamedInputs(\n [...targetInputs, artifactsFolder],\n options?.deploy?.inputs\n ? [options.deploy.inputs]\n : [\"documentation\", \"typescript\"]\n ),\n outputs: options?.deploy?.outputs ?? [\"{options.outputPath}\"],\n executor:\n options?.deploy?.executor ||\n `@${framework}/nx:${options?.deploy?.targetName || \"deploy\"}`,\n dependsOn:\n options?.deploy?.dependsOn ??\n ([\n `^${options?.deploy?.targetName || \"deploy\"}`,\n options?.build !== false &&\n `${options?.build?.targetName || \"build\"}`,\n userConfig.skipCache\n ? undefined\n : isSetObject(options?.prepare) &&\n options?.prepare?.targetName\n ? options?.prepare?.targetName\n : \"prepare\"\n ].filter(Boolean) as TargetConfiguration[\"dependsOn\"]),\n defaultConfiguration:\n options?.deploy?.defaultConfiguration || \"production\",\n options: {\n input: userConfig.input,\n projectType:\n userConfig.projectType || projectConfig.projectType,\n autoInstall: userConfig.autoInstall,\n skipCache: userConfig.skipCache\n },\n configurations: {\n production: {\n mode: \"production\"\n },\n test: {\n mode: \"test\"\n },\n development: {\n mode: \"development\",\n skipCache: true\n }\n }\n };\n }\n\n setDefaultProjectTags(projectConfig, name);\n addProjectTag(\n projectConfig,\n framework as ProjectTagVariant,\n userConfig.projectType ||\n projectConfig.projectType ||\n \"library\",\n {\n overwrite: true\n }\n );\n\n if (options?.verboseOutput) {\n console.debug(\n `[${\n title\n }] - ${new Date().toISOString()} - Completed preparing Nx configuration for project in root directory ${projectRoot}.`\n );\n }\n\n return {\n projects: {\n [root]: defu(projectConfig, {\n name: kebabCase(userConfig.name)!,\n projectType: userConfig.projectType || \"library\",\n root,\n sourceRoot: joinPaths(root, \"src\"),\n targets\n })\n }\n };\n } catch (error) {\n console.error(\n `[${title}] - ${new Date().toISOString()} - Failed to process the project configuration for file \"${\n configFile\n }\" - ${\n isError(error)\n ? error.message\n : isSetString(error)\n ? error\n : \"Unknown fatal error\"\n }`\n );\n\n return {};\n }\n },\n configFiles,\n options,\n contextV2\n );\n }\n ];\n } catch (error) {\n console.error(\n `[${title}] - ${new Date().toISOString()} - ${\n isError(error)\n ? error.message\n : isSetString(error)\n ? error\n : \"Unknown fatal error during plugin initialization\"\n }`\n );\n\n throw new Error(\n `Failed to initialize the ${title} - ${\n isError(error)\n ? error.message\n : isSetString(error)\n ? error\n : \"See previous logs for more details\"\n }`,\n {\n cause: error instanceof Error ? error : undefined\n }\n );\n }\n}\n"],"mappings":"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"}