@storm-software/workspace-tools 1.269.0 → 1.270.0

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 (274) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +2 -1
  3. package/dist/chunk-A7JGVU4P.js +468 -0
  4. package/dist/chunk-SRN4D7WO.mjs +468 -0
  5. package/dist/executors.js +2 -2
  6. package/dist/executors.mjs +1 -1
  7. package/dist/index.js +2 -2
  8. package/dist/index.mjs +1 -1
  9. package/dist/src/executors/npm-publish/executor.js +2 -2
  10. package/dist/src/executors/npm-publish/executor.mjs +1 -1
  11. package/docs/executors/rollup.md +88 -0
  12. package/executors.ts +23 -0
  13. package/generators.ts +14 -0
  14. package/index.ts +5 -0
  15. package/package.json +4 -4
  16. package/project.json +58 -0
  17. package/src/base/base-executor.ts +200 -0
  18. package/src/base/base-executor.untyped.ts +18 -0
  19. package/src/base/base-generator.ts +130 -0
  20. package/src/base/base-generator.untyped.ts +16 -0
  21. package/src/base/cargo-base-executor.untyped.ts +73 -0
  22. package/src/base/index.ts +8 -0
  23. package/src/base/typescript-build-executor.untyped.ts +153 -0
  24. package/src/base/typescript-library-generator.ts +415 -0
  25. package/src/base/typescript-library-generator.untyped.ts +106 -0
  26. package/src/executors/cargo-build/executor.spec.ts +18 -0
  27. package/src/executors/cargo-build/executor.ts +28 -0
  28. package/src/executors/cargo-build/untyped.ts +18 -0
  29. package/src/executors/cargo-check/executor.spec.ts +18 -0
  30. package/src/executors/cargo-check/executor.ts +27 -0
  31. package/src/executors/cargo-check/untyped.ts +11 -0
  32. package/src/executors/cargo-clippy/executor.spec.ts +18 -0
  33. package/src/executors/cargo-clippy/executor.ts +28 -0
  34. package/src/executors/cargo-clippy/untyped.ts +18 -0
  35. package/src/executors/cargo-doc/executor.spec.ts +18 -0
  36. package/src/executors/cargo-doc/executor.ts +39 -0
  37. package/src/executors/cargo-doc/untyped.ts +44 -0
  38. package/src/executors/cargo-format/executor.spec.ts +18 -0
  39. package/src/executors/cargo-format/executor.ts +28 -0
  40. package/src/executors/cargo-format/untyped.ts +11 -0
  41. package/src/executors/cargo-publish/executor.spec.ts +11 -0
  42. package/src/executors/cargo-publish/executor.ts +139 -0
  43. package/src/executors/cargo-publish/untyped.ts +33 -0
  44. package/src/executors/clean-package/constants.ts +99 -0
  45. package/src/executors/clean-package/executor.spec.ts +18 -0
  46. package/src/executors/clean-package/executor.ts +214 -0
  47. package/src/executors/clean-package/types.ts +6 -0
  48. package/src/executors/clean-package/untyped.ts +60 -0
  49. package/src/executors/clean-package/utils.ts +85 -0
  50. package/src/executors/esbuild/executor.spec.ts +11 -0
  51. package/src/executors/esbuild/executor.ts +67 -0
  52. package/src/executors/esbuild/untyped.ts +20 -0
  53. package/src/executors/npm-publish/executor.spec.ts +11 -0
  54. package/src/executors/npm-publish/executor.ts +681 -0
  55. package/src/executors/npm-publish/untyped.ts +56 -0
  56. package/src/executors/size-limit/executor.spec.ts +18 -0
  57. package/src/executors/size-limit/executor.ts +88 -0
  58. package/src/executors/size-limit/untyped.ts +22 -0
  59. package/src/executors/typia/executor.ts +54 -0
  60. package/src/executors/typia/untyped.ts +48 -0
  61. package/src/executors/unbuild/executor.spec.ts +11 -0
  62. package/src/executors/unbuild/executor.ts +136 -0
  63. package/src/executors/unbuild/untyped.ts +152 -0
  64. package/src/generators/browser-library/generator.spec.ts +20 -0
  65. package/src/generators/browser-library/generator.ts +109 -0
  66. package/src/generators/browser-library/untyped.ts +29 -0
  67. package/src/generators/config-schema/generator.spec.ts +20 -0
  68. package/src/generators/config-schema/generator.ts +90 -0
  69. package/src/generators/config-schema/untyped.ts +19 -0
  70. package/src/generators/init/init.ts +32 -0
  71. package/src/generators/init/untyped.ts +16 -0
  72. package/src/generators/neutral-library/generator.spec.ts +20 -0
  73. package/src/generators/neutral-library/generator.ts +81 -0
  74. package/src/generators/neutral-library/untyped.ts +29 -0
  75. package/src/generators/node-library/generator.spec.ts +20 -0
  76. package/src/generators/node-library/generator.ts +84 -0
  77. package/src/generators/node-library/untyped.ts +29 -0
  78. package/src/generators/preset/files/.all-contributorsrc.template +48 -0
  79. package/src/generators/preset/files/.editorconfig +454 -0
  80. package/src/generators/preset/files/.env.template +38 -0
  81. package/src/generators/preset/files/.gitattributes +52 -0
  82. package/src/generators/preset/files/.github/.nvmrc +1 -0
  83. package/src/generators/preset/files/.github/CODEOWNERS +3 -0
  84. package/src/generators/preset/files/.github/CODE_OF_CONDUCT.md +125 -0
  85. package/src/generators/preset/files/.github/CONTRIBUTING.md.template +15 -0
  86. package/src/generators/preset/files/.github/FUNDING.yml +3 -0
  87. package/src/generators/preset/files/.github/ISSUE_TEMPLATE/bug-report.yml.template +102 -0
  88. package/src/generators/preset/files/.github/ISSUE_TEMPLATE/documentation.yml.template +56 -0
  89. package/src/generators/preset/files/.github/ISSUE_TEMPLATE/feature-request.yml.template +60 -0
  90. package/src/generators/preset/files/.github/PULL_REQUEST_TEMPLATE.md.template +39 -0
  91. package/src/generators/preset/files/.github/SECURITY.md +9 -0
  92. package/src/generators/preset/files/.github/codecov.yml +29 -0
  93. package/src/generators/preset/files/.github/dependabot.yml +64 -0
  94. package/src/generators/preset/files/.github/labels.yml +84 -0
  95. package/src/generators/preset/files/.github/renovate.json +4 -0
  96. package/src/generators/preset/files/.github/renovate.json.template +63 -0
  97. package/src/generators/preset/files/.github/stale.yml +55 -0
  98. package/src/generators/preset/files/.github/workflows/build-release.yml.template +25 -0
  99. package/src/generators/preset/files/.github/workflows/code-review.yml +18 -0
  100. package/src/generators/preset/files/.github/workflows/codeql.yml +84 -0
  101. package/src/generators/preset/files/.github/workflows/dependabot-update.yml +32 -0
  102. package/src/generators/preset/files/.github/workflows/git-guardian.yml +23 -0
  103. package/src/generators/preset/files/.github/workflows/greetings.yml +31 -0
  104. package/src/generators/preset/files/.github/workflows/labels.yml +31 -0
  105. package/src/generators/preset/files/.github/workflows/lock.yml +26 -0
  106. package/src/generators/preset/files/.log4brains.yml.template +5 -0
  107. package/src/generators/preset/files/.markdownlint.json +155 -0
  108. package/src/generators/preset/files/.verdaccio/config.yml.template +40 -0
  109. package/src/generators/preset/files/.vscode/README.md +32 -0
  110. package/src/generators/preset/files/.vscode/cspell.json +3 -0
  111. package/src/generators/preset/files/.vscode/extensions.json +14 -0
  112. package/src/generators/preset/files/.vscode/launch.json +37 -0
  113. package/src/generators/preset/files/.vscode/settings.json +401 -0
  114. package/src/generators/preset/files/.vscode/tasks.json +4 -0
  115. package/src/generators/preset/files/.whitesource +14 -0
  116. package/src/generators/preset/files/assets/diagrams/.gitkeep +0 -0
  117. package/src/generators/preset/files/assets/icons/dark/.gitkeep +0 -0
  118. package/src/generators/preset/files/assets/icons/light/.gitkeep +0 -0
  119. package/src/generators/preset/files/assets/logos/.gitkeep +0 -0
  120. package/src/generators/preset/files/docs/api-reference/.gitkeep +0 -0
  121. package/src/generators/preset/generator.spec.ts +20 -0
  122. package/src/generators/preset/generator.ts +315 -0
  123. package/src/generators/preset/untyped.ts +88 -0
  124. package/src/generators/release-version/generator.spec.ts +20 -0
  125. package/src/generators/release-version/generator.ts +920 -0
  126. package/src/generators/release-version/untyped.ts +156 -0
  127. package/src/plugins/rust/cargo-toml.ts +434 -0
  128. package/src/plugins/rust/index.ts +1 -0
  129. package/src/plugins/typescript/index.ts +1 -0
  130. package/src/plugins/typescript/project-config.ts +564 -0
  131. package/src/plugins/typescript/tsup.ts +198 -0
  132. package/src/types.ts +130 -0
  133. package/src/utils/apply-workspace-tokens.ts +73 -0
  134. package/src/utils/cargo.ts +219 -0
  135. package/src/utils/create-cli-options.ts +23 -0
  136. package/src/utils/get-project-configurations.ts +27 -0
  137. package/src/utils/index.ts +12 -0
  138. package/src/utils/lock-file.ts +159 -0
  139. package/src/utils/package-helpers.ts +54 -0
  140. package/src/utils/plugin-helpers.ts +112 -0
  141. package/src/utils/pnpm-deps-update.ts +111 -0
  142. package/src/utils/project-tags.ts +162 -0
  143. package/src/utils/toml.ts +204 -0
  144. package/src/utils/typia-transform.ts +8 -0
  145. package/src/utils/versions.ts +19 -0
  146. package/tsconfig.json +30 -0
  147. package/tsup.config.ts +36 -0
  148. package/dist/chunk-62LQXZNY.js +0 -282
  149. package/dist/chunk-F3VG4R53.mjs +0 -282
  150. package/dist/src/generators/preset/files/LICENSE +0 -201
  151. package/docs/api/base/base-executor.schema.md +0 -16
  152. package/docs/api/base/base-generator.schema.md +0 -15
  153. package/docs/api/base/cargo-base-executor.schema.md +0 -90
  154. package/docs/api/base/typescript-build-executor.schema.md +0 -126
  155. package/docs/api/base/typescript-library-generator.schema.md +0 -129
  156. package/docs/api/executors/cargo-build/schema.md +0 -89
  157. package/docs/api/executors/cargo-check/schema.md +0 -90
  158. package/docs/api/executors/cargo-clippy/schema.md +0 -99
  159. package/docs/api/executors/cargo-doc/schema.md +0 -130
  160. package/docs/api/executors/cargo-format/schema.md +0 -90
  161. package/docs/api/executors/cargo-publish/schema.md +0 -117
  162. package/docs/api/executors/clean-package/schema.md +0 -65
  163. package/docs/api/executors/esbuild/schema.md +0 -126
  164. package/docs/api/executors/npm-publish/schema.md +0 -64
  165. package/docs/api/executors/size-limit/schema.md +0 -25
  166. package/docs/api/executors/typia/schema.md +0 -46
  167. package/docs/api/executors/unbuild/schema.md +0 -222
  168. package/docs/api/generators/browser-library/files/README.md +0 -58
  169. package/docs/api/generators/browser-library/schema.md +0 -129
  170. package/docs/api/generators/config-schema/schema.md +0 -25
  171. package/docs/api/generators/init/schema.md +0 -15
  172. package/docs/api/generators/neutral-library/files/README.md +0 -58
  173. package/docs/api/generators/neutral-library/schema.md +0 -129
  174. package/docs/api/generators/node-library/files/README.md +0 -63
  175. package/docs/api/generators/node-library/schema.md +0 -129
  176. package/docs/api/generators/preset/schema.md +0 -110
  177. package/docs/api/generators/release-version/schema.md +0 -160
  178. /package/{dist/src → src}/base/base-executor.schema.d.ts +0 -0
  179. /package/{dist/src → src}/base/base-executor.schema.json +0 -0
  180. /package/{dist/src → src}/base/base-executor.schema.md +0 -0
  181. /package/{dist/src → src}/base/base-generator.schema.d.ts +0 -0
  182. /package/{dist/src → src}/base/base-generator.schema.json +0 -0
  183. /package/{dist/src → src}/base/base-generator.schema.md +0 -0
  184. /package/{dist/src → src}/base/cargo-base-executor.schema.d.ts +0 -0
  185. /package/{dist/src → src}/base/cargo-base-executor.schema.json +0 -0
  186. /package/{dist/src → src}/base/cargo-base-executor.schema.md +0 -0
  187. /package/{dist/src → src}/base/typescript-build-executor.schema.d.ts +0 -0
  188. /package/{dist/src → src}/base/typescript-build-executor.schema.json +0 -0
  189. /package/{dist/src → src}/base/typescript-build-executor.schema.md +0 -0
  190. /package/{dist/src → src}/base/typescript-library-generator.schema.d.ts +0 -0
  191. /package/{dist/src → src}/base/typescript-library-generator.schema.json +0 -0
  192. /package/{dist/src → src}/base/typescript-library-generator.schema.md +0 -0
  193. /package/{dist/src → src}/executors/cargo-build/schema.d.ts +0 -0
  194. /package/{dist/src → src}/executors/cargo-build/schema.json +0 -0
  195. /package/{dist/src → src}/executors/cargo-build/schema.md +0 -0
  196. /package/{dist/src → src}/executors/cargo-check/schema.d.ts +0 -0
  197. /package/{dist/src → src}/executors/cargo-check/schema.json +0 -0
  198. /package/{dist/src → src}/executors/cargo-check/schema.md +0 -0
  199. /package/{dist/src → src}/executors/cargo-clippy/schema.d.ts +0 -0
  200. /package/{dist/src → src}/executors/cargo-clippy/schema.json +0 -0
  201. /package/{dist/src → src}/executors/cargo-clippy/schema.md +0 -0
  202. /package/{dist/src → src}/executors/cargo-doc/schema.d.ts +0 -0
  203. /package/{dist/src → src}/executors/cargo-doc/schema.json +0 -0
  204. /package/{dist/src → src}/executors/cargo-doc/schema.md +0 -0
  205. /package/{dist/src → src}/executors/cargo-format/schema.d.ts +0 -0
  206. /package/{dist/src → src}/executors/cargo-format/schema.json +0 -0
  207. /package/{dist/src → src}/executors/cargo-format/schema.md +0 -0
  208. /package/{dist/src → src}/executors/cargo-publish/schema.d.ts +0 -0
  209. /package/{dist/src → src}/executors/cargo-publish/schema.json +0 -0
  210. /package/{dist/src → src}/executors/cargo-publish/schema.md +0 -0
  211. /package/{dist/src → src}/executors/clean-package/schema.d.ts +0 -0
  212. /package/{dist/src → src}/executors/clean-package/schema.json +0 -0
  213. /package/{dist/src → src}/executors/clean-package/schema.md +0 -0
  214. /package/{dist/src → src}/executors/esbuild/schema.d.ts +0 -0
  215. /package/{dist/src → src}/executors/esbuild/schema.json +0 -0
  216. /package/{dist/src → src}/executors/esbuild/schema.md +0 -0
  217. /package/{dist/src → src}/executors/npm-publish/schema.d.ts +0 -0
  218. /package/{dist/src → src}/executors/npm-publish/schema.json +0 -0
  219. /package/{dist/src → src}/executors/npm-publish/schema.md +0 -0
  220. /package/{dist/src → src}/executors/size-limit/schema.d.ts +0 -0
  221. /package/{dist/src → src}/executors/size-limit/schema.json +0 -0
  222. /package/{dist/src → src}/executors/size-limit/schema.md +0 -0
  223. /package/{dist/src → src}/executors/typia/schema.d.ts +0 -0
  224. /package/{dist/src → src}/executors/typia/schema.json +0 -0
  225. /package/{dist/src → src}/executors/typia/schema.md +0 -0
  226. /package/{dist/src → src}/executors/unbuild/schema.d.ts +0 -0
  227. /package/{dist/src → src}/executors/unbuild/schema.json +0 -0
  228. /package/{dist/src → src}/executors/unbuild/schema.md +0 -0
  229. /package/{dist/src → src}/generators/browser-library/files/README.md +0 -0
  230. /package/{dist/src → src}/generators/browser-library/files/jest.config.ts +0 -0
  231. /package/{dist/src → src}/generators/browser-library/files/src/index.ts.template +0 -0
  232. /package/{dist/src → src}/generators/browser-library/files/tsconfig.spec.json +0 -0
  233. /package/{dist/src → src}/generators/browser-library/schema.d.ts +0 -0
  234. /package/{dist/src → src}/generators/browser-library/schema.json +0 -0
  235. /package/{dist/src → src}/generators/browser-library/schema.md +0 -0
  236. /package/{dist/src → src}/generators/config-schema/schema.d.ts +0 -0
  237. /package/{dist/src → src}/generators/config-schema/schema.json +0 -0
  238. /package/{dist/src → src}/generators/config-schema/schema.md +0 -0
  239. /package/{dist/src → src}/generators/init/schema.d.ts +0 -0
  240. /package/{dist/src → src}/generators/init/schema.json +0 -0
  241. /package/{dist/src → src}/generators/init/schema.md +0 -0
  242. /package/{dist/src → src}/generators/neutral-library/files/README.md +0 -0
  243. /package/{dist/src → src}/generators/neutral-library/files/jest.config.ts +0 -0
  244. /package/{dist/src → src}/generators/neutral-library/files/src/index.ts.template +0 -0
  245. /package/{dist/src → src}/generators/neutral-library/files/tsconfig.spec.json +0 -0
  246. /package/{dist/src → src}/generators/neutral-library/schema.d.ts +0 -0
  247. /package/{dist/src → src}/generators/neutral-library/schema.json +0 -0
  248. /package/{dist/src → src}/generators/neutral-library/schema.md +0 -0
  249. /package/{dist/src → src}/generators/node-library/files/README.md +0 -0
  250. /package/{dist/src → src}/generators/node-library/files/jest.config.ts +0 -0
  251. /package/{dist/src → src}/generators/node-library/files/src/index.ts.template +0 -0
  252. /package/{dist/src → src}/generators/node-library/files/tsconfig.spec.json +0 -0
  253. /package/{dist/src → src}/generators/node-library/schema.d.ts +0 -0
  254. /package/{dist/src → src}/generators/node-library/schema.json +0 -0
  255. /package/{dist/src → src}/generators/node-library/schema.md +0 -0
  256. /package/{LICENSE → src/generators/preset/files/LICENSE} +0 -0
  257. /package/{dist/src → src}/generators/preset/files/README.md.template +0 -0
  258. /package/{dist/src → src}/generators/preset/files/docs/readme-templates/README.footer.md.template +0 -0
  259. /package/{dist/src → src}/generators/preset/files/docs/readme-templates/README.header.md.template +0 -0
  260. /package/{dist/src → src}/generators/preset/files/eslint.config.js.template +0 -0
  261. /package/{dist/src → src}/generators/preset/files/knip.json +0 -0
  262. /package/{dist/src → src}/generators/preset/files/lefthook.json +0 -0
  263. /package/{dist/src → src}/generators/preset/files/nx.json +0 -0
  264. /package/{dist/src → src}/generators/preset/files/pnpm-workspace.yaml +0 -0
  265. /package/{dist/src → src}/generators/preset/files/socket.yaml +0 -0
  266. /package/{dist/src → src}/generators/preset/files/storm.json.template +0 -0
  267. /package/{dist/src → src}/generators/preset/files/tsconfig.base.json.template +0 -0
  268. /package/{dist/src → src}/generators/preset/schema.d.ts +0 -0
  269. /package/{dist/src → src}/generators/preset/schema.json +0 -0
  270. /package/{dist/src → src}/generators/preset/schema.md +0 -0
  271. /package/{dist/src → src}/generators/release-version/schema.d.ts +0 -0
  272. /package/{dist/src → src}/generators/release-version/schema.json +0 -0
  273. /package/{dist/src → src}/generators/release-version/schema.md +0 -0
  274. /package/{dist/src → src}/plugins/typescript/untyped-schema.ts +0 -0
@@ -0,0 +1,214 @@
1
+ import type { ExecutorContext } from "@nx/devkit";
2
+ import { joinPathFragments } from "@nx/devkit";
3
+ import type { StormWorkspaceConfig } from "@storm-software/config";
4
+ import { writeInfo } from "@storm-software/config-tools/logger/console";
5
+ import { joinPaths } from "@storm-software/config-tools/utilities/correct-paths";
6
+ import {
7
+ copy,
8
+ mkdir,
9
+ pathExists,
10
+ readFile,
11
+ readJson,
12
+ remove,
13
+ writeFile,
14
+ writeJson
15
+ } from "fs-extra";
16
+ import { Glob } from "glob";
17
+ import { withRunExecutor } from "../../base/base-executor";
18
+ import { IGNORE_FIELDS, NPM_SCRIPTS, PUBLISH_CONFIG_FIELDS } from "./constants";
19
+ import { CleanPackageExecutorSchema } from "./schema.d";
20
+ import { PackageJson } from "./types";
21
+ import { createFilesFilter, filterObjectByKey, isObject } from "./utils";
22
+
23
+ export async function cleanPackageExecutorFn(
24
+ options: CleanPackageExecutorSchema,
25
+ context: ExecutorContext,
26
+ config: StormWorkspaceConfig
27
+ ) {
28
+ const tempDirectoryName = joinPathFragments(
29
+ config.workspaceRoot,
30
+ "tmp",
31
+ context.root
32
+ );
33
+
34
+ const exists = await pathExists(tempDirectoryName);
35
+ if (exists) {
36
+ writeInfo(
37
+ `🧹 Cleaning temporary directory path: ${tempDirectoryName}`,
38
+ config
39
+ );
40
+ await remove(tempDirectoryName);
41
+ }
42
+
43
+ await mkdir(tempDirectoryName);
44
+ writeInfo(`Created temporary directory: ${tempDirectoryName}`, config);
45
+
46
+ const packageJson = await readJson<PackageJson>(options.packageJsonPath);
47
+
48
+ await copy(options.outputPath, tempDirectoryName, {
49
+ filter: createFilesFilter(options.ignoredFiles, options.outputPath!)
50
+ });
51
+
52
+ if (options.cleanReadMe) {
53
+ await cleanReadMe(
54
+ tempDirectoryName,
55
+ packageJson.repository,
56
+ packageJson.homepage
57
+ );
58
+ }
59
+
60
+ if (options.cleanComments) {
61
+ await cleanComments(tempDirectoryName);
62
+ }
63
+
64
+ const tempPackageJson = clearPackageJSON(packageJson, options.fields);
65
+ writeJson(
66
+ joinPathFragments(tempDirectoryName, "package.json"),
67
+ tempPackageJson
68
+ );
69
+
70
+ await copy(tempDirectoryName, options.outputPath, {
71
+ override: true,
72
+ preserveTimestamps: true
73
+ });
74
+
75
+ await remove(tempDirectoryName);
76
+
77
+ return {
78
+ success: true
79
+ };
80
+ }
81
+
82
+ function getReadmeUrlFromRepository(repository: PackageJson["repository"]) {
83
+ const repoUrl = typeof repository === "object" ? repository.url : repository;
84
+ if (repoUrl) {
85
+ const name = repoUrl.match(/[^/:]+\/[^/:]+$/)?.[0]?.replace(/\.git$/, "");
86
+ return `https://github.com/${name}#README.md`;
87
+ }
88
+
89
+ return null;
90
+ }
91
+
92
+ async function cleanReadMe(
93
+ directoryName: string,
94
+ repository: PackageJson["repository"],
95
+ homepage: PackageJson["homepage"]
96
+ ) {
97
+ const readmePath = joinPathFragments(directoryName, "README.md");
98
+ const readme = await readFile(readmePath);
99
+ const readmeUrl = getReadmeUrlFromRepository(repository);
100
+ if (homepage || readmeUrl) {
101
+ const cleaned =
102
+ readme.toString().split(/\n##\s*\w/m)[0] +
103
+ "\n## Documentation\n" +
104
+ `Read full docs **[here](${homepage || readmeUrl})**.\n`;
105
+
106
+ await writeFile(readmePath, cleaned);
107
+ }
108
+ }
109
+
110
+ async function cleanComments(directoryName: string) {
111
+ const glob = new Glob(["**/*.js"], { cwd: directoryName });
112
+
113
+ const files = await glob.walk();
114
+ await Promise.all(
115
+ files.map(async i => {
116
+ const file = joinPathFragments(directoryName, i);
117
+ const content = await readFile(file);
118
+ const cleaned = content
119
+ .toString()
120
+ .replace(/\s*\/\/.*\n/gm, "\n")
121
+ .replace(/\s*\/\*[^/]+\*\/\n?/gm, "\n")
122
+ .replace(/\n+/gm, "\n")
123
+ .replace(/^\n+/gm, "");
124
+
125
+ await writeFile(file, cleaned);
126
+ })
127
+ );
128
+ }
129
+
130
+ function clearPackageJSON(packageJson, inputIgnoreFields) {
131
+ const ignoreFields = inputIgnoreFields
132
+ ? IGNORE_FIELDS.concat(inputIgnoreFields)
133
+ : IGNORE_FIELDS;
134
+
135
+ if (!packageJson.publishConfig) {
136
+ return packageJson;
137
+ }
138
+
139
+ const publishConfig = {
140
+ ...packageJson.publishConfig
141
+ };
142
+
143
+ PUBLISH_CONFIG_FIELDS.forEach(field => {
144
+ if (publishConfig[field]) {
145
+ packageJson[field] = publishConfig[field];
146
+ delete publishConfig[field];
147
+ }
148
+ });
149
+
150
+ if (!Object.keys(publishConfig).length) {
151
+ // delete property by destructuring
152
+ // eslint-disable-next-line no-unused-vars
153
+ const { publishConfig: _, ...pkg } = packageJson;
154
+
155
+ return pkg;
156
+ }
157
+
158
+ const cleanPackageJSON = filterObjectByKey(
159
+ {
160
+ ...packageJson,
161
+ publishConfig
162
+ },
163
+ key => !!(key && !ignoreFields.includes(key) && key !== "scripts")
164
+ ) as PackageJson;
165
+
166
+ if (packageJson.scripts && !ignoreFields.includes("scripts")) {
167
+ cleanPackageJSON.scripts = filterObjectByKey(
168
+ packageJson.scripts,
169
+ script => !!(script && NPM_SCRIPTS.includes(script))
170
+ );
171
+
172
+ if (
173
+ cleanPackageJSON.scripts.publish &&
174
+ /^clean-publish( |$)/.test(cleanPackageJSON.scripts.publish)
175
+ ) {
176
+ // "custom" publish script is actually calling clean-publish
177
+ delete cleanPackageJSON.scripts.publish;
178
+ }
179
+ }
180
+
181
+ for (const i in cleanPackageJSON) {
182
+ if (
183
+ isObject(cleanPackageJSON[i]) &&
184
+ Object.keys(cleanPackageJSON[i]).length === 0
185
+ ) {
186
+ delete cleanPackageJSON[i];
187
+ }
188
+ }
189
+ return cleanPackageJSON;
190
+ }
191
+
192
+ export default withRunExecutor<CleanPackageExecutorSchema>(
193
+ "Storm Clean-Package executor",
194
+ cleanPackageExecutorFn,
195
+ {
196
+ skipReadingConfig: false,
197
+ hooks: {
198
+ applyDefaultOptions: (
199
+ options: CleanPackageExecutorSchema
200
+ ): CleanPackageExecutorSchema => {
201
+ options.outputPath ??= "dist/{projectRoot}";
202
+ options.packageJsonPath ??= joinPaths(
203
+ options.outputPath,
204
+ "package.json"
205
+ );
206
+
207
+ options.cleanReadMe ??= true;
208
+ options.cleanComments ??= true;
209
+
210
+ return options;
211
+ }
212
+ }
213
+ }
214
+ );
@@ -0,0 +1,6 @@
1
+ import type { PackageJson as NxPackageJson } from "nx/src/utils/package-json.js";
2
+
3
+ export interface PackageJson extends NxPackageJson {
4
+ repository?: string | { type?: string; url: string };
5
+ homepage?: string;
6
+ }
@@ -0,0 +1,60 @@
1
+ import { defineUntypedSchema } from "untyped";
2
+ import baseExecutorSchema from "../../base/base-executor.untyped";
3
+
4
+ export default defineUntypedSchema({
5
+ ...baseExecutorSchema,
6
+ $schema: {
7
+ id: "CleanPackageExecutorSchema",
8
+ title: "Clean Package Executor",
9
+ description:
10
+ "The clean package executor is responsible for removing unnecessary files and fields from a distributable package to make it as light as possible (for scenarios like edge computing, limited memory environments, etc.)",
11
+ },
12
+ outputPath: {
13
+ $schema: {
14
+ title: "Output Path",
15
+ type: "string",
16
+ description: "The path to the output",
17
+ },
18
+ $default: "dist/{projectRoot}",
19
+ },
20
+ packageJsonPath: {
21
+ $schema: {
22
+ title: "Package JSON Path",
23
+ type: "string",
24
+ format: "path",
25
+ description: "The path to the package.json that will be modified",
26
+ },
27
+ $default: "{outputPath}/package.json",
28
+ },
29
+ ignoredFiles: {
30
+ $schema: {
31
+ title: "Ignored Files",
32
+ type: "string",
33
+ description: "The files to ignore",
34
+ },
35
+ },
36
+ fields: {
37
+ $schema: {
38
+ title: "Fields",
39
+ type: "string",
40
+ description: "The fields to include",
41
+ },
42
+ $resolve: (val: string[] = []) => ([] as string[]).concat(val),
43
+ },
44
+ cleanReadMe: {
45
+ $schema: {
46
+ title: "Clean Read Me",
47
+ type: "boolean",
48
+ description: "Clean the read me",
49
+ },
50
+ $default: true,
51
+ },
52
+ cleanComments: {
53
+ $schema: {
54
+ title: "Clean Comments",
55
+ type: "boolean",
56
+ description: "Clean the comments",
57
+ },
58
+ $default: true,
59
+ },
60
+ });
@@ -0,0 +1,85 @@
1
+ import { Glob, hasMagic } from "glob";
2
+ import micromatch from "micromatch";
3
+ import { basename } from "node:path";
4
+ import { IGNORE_FILES } from "./constants";
5
+
6
+ export function isObject(object) {
7
+ return Boolean(object) && typeof object === "object";
8
+ }
9
+
10
+ export function filterObjectByKey(
11
+ object: Record<string, any>,
12
+ filterByKey = (key?: string) => true,
13
+ deep = false,
14
+ ) {
15
+ const result = {};
16
+ let changed = false;
17
+
18
+ for (const key in object) {
19
+ if (filterByKey(key)) {
20
+ if (deep && isObject(object[key])) {
21
+ result[key] = filterObjectByKey(object[key], filterByKey, deep);
22
+
23
+ if (result[key] !== object[key]) {
24
+ changed = true;
25
+ }
26
+ } else {
27
+ result[key] = object[key];
28
+ }
29
+ } else {
30
+ changed = true;
31
+ }
32
+ }
33
+
34
+ return changed ? result : object;
35
+ }
36
+
37
+ export function createIgnoreMatcher(ignorePattern: string | RegExp = "**/*") {
38
+ if (ignorePattern instanceof RegExp) {
39
+ return (filename) => !ignorePattern.test(filename);
40
+ }
41
+
42
+ if (hasMagic(ignorePattern, { magicalBraces: true })) {
43
+ const isMatch = micromatch.matcher(ignorePattern);
44
+
45
+ return (_filename, path) => !isMatch(path);
46
+ }
47
+
48
+ return (filename) => filename !== ignorePattern;
49
+ }
50
+
51
+ export async function createFilesFilter(ignoreFiles = "", cwd: string) {
52
+ let ignoreFilesList = [] as string[];
53
+
54
+ if (ignoreFiles) {
55
+ const glob = new Glob(ignoreFiles, { cwd });
56
+ ignoreFilesList = await glob.walk();
57
+ }
58
+
59
+ const ignorePatterns =
60
+ ignoreFilesList.length > 0
61
+ ? IGNORE_FILES.concat(...ignoreFilesList).filter(Boolean)
62
+ : IGNORE_FILES;
63
+ const filter = ignorePatterns.reduce(
64
+ (
65
+ next: null | ((filename: string, path: string) => void),
66
+ ignorePattern,
67
+ ) => {
68
+ const ignoreMatcher = createIgnoreMatcher(ignorePattern);
69
+
70
+ if (!next) {
71
+ return ignoreMatcher;
72
+ }
73
+
74
+ return (filename: string, path: string) =>
75
+ ignoreMatcher(filename, path) && next && next(filename, path);
76
+ },
77
+ null,
78
+ );
79
+
80
+ return (path) => {
81
+ const filename = basename(path);
82
+
83
+ return filter?.(filename, path);
84
+ };
85
+ }
@@ -0,0 +1,11 @@
1
+ import executor from "./executor";
2
+ import { RolldownExecutorSchema } from "./schema.d";
3
+
4
+ const options: RolldownExecutorSchema = {};
5
+
6
+ describe("Rolldown Executor", () => {
7
+ it("can run", async () => {
8
+ const output = await executor(options);
9
+ expect(output.success).toBe(true);
10
+ });
11
+ });
@@ -0,0 +1,67 @@
1
+ import type { ExecutorContext } from "@nx/devkit";
2
+ import type { StormWorkspaceConfig } from "@storm-software/config";
3
+ import { writeInfo } from "@storm-software/config-tools/logger/console";
4
+ import { build, ESBuildOptions } from "@storm-software/esbuild";
5
+ import { withRunExecutor } from "../../base/base-executor";
6
+ import type { ESBuildExecutorSchema } from "./schema.d";
7
+
8
+ export async function esbuildExecutorFn(
9
+ options: ESBuildExecutorSchema,
10
+ context: ExecutorContext,
11
+ config?: StormWorkspaceConfig
12
+ ) {
13
+ writeInfo("📦 Running Storm ESBuild executor on the workspace", config);
14
+
15
+ // #region Prepare build context variables
16
+
17
+ if (
18
+ !context.projectsConfigurations?.projects ||
19
+ !context.projectName ||
20
+ !context.projectsConfigurations.projects[context.projectName] ||
21
+ !context.projectsConfigurations.projects[context.projectName]?.root
22
+ ) {
23
+ throw new Error(
24
+ "The Build process failed because the context is not valid. Please run this command from a workspace."
25
+ );
26
+ }
27
+
28
+ // #endregion Prepare build context variables
29
+
30
+ await build({
31
+ ...options,
32
+ projectRoot:
33
+ context.projectsConfigurations.projects?.[context.projectName]!.root,
34
+ name: context.projectName,
35
+ sourceRoot:
36
+ context.projectsConfigurations.projects?.[context.projectName]
37
+ ?.sourceRoot,
38
+ format: options.format as ESBuildOptions["format"],
39
+ platform: options.format as ESBuildOptions["platform"]
40
+ });
41
+
42
+ // #endregion Run the build process
43
+
44
+ return {
45
+ success: true
46
+ };
47
+ }
48
+
49
+ export default withRunExecutor<ESBuildExecutorSchema>(
50
+ "Storm ESBuild build",
51
+ esbuildExecutorFn,
52
+ {
53
+ skipReadingConfig: false,
54
+ hooks: {
55
+ applyDefaultOptions: async (
56
+ options: ESBuildExecutorSchema,
57
+ config?: StormWorkspaceConfig | undefined
58
+ ) => {
59
+ options.entry ??= ["src/index.ts"];
60
+ options.outputPath ??= "dist/{projectRoot}";
61
+ options.tsconfig ??= "{projectRoot}/tsconfig.json";
62
+
63
+ return options;
64
+ }
65
+ }
66
+ }
67
+ );
@@ -0,0 +1,20 @@
1
+ import { defineUntypedSchema } from "untyped";
2
+ import typescriptBuildExecutorSchema from "../../base/typescript-build-executor.untyped";
3
+
4
+ export default defineUntypedSchema({
5
+ ...typescriptBuildExecutorSchema,
6
+ $schema: {
7
+ id: "ESBuildExecutorSchema",
8
+ title: "ESBuild Executor",
9
+ description: "A type definition for an ESBuild executor schema",
10
+ },
11
+ format: {
12
+ $schema: {
13
+ title: "Format",
14
+ type: "string",
15
+ description: "The format to build",
16
+ enum: ["cjs", "esm", "iife"],
17
+ },
18
+ $default: "esm",
19
+ },
20
+ });
@@ -0,0 +1,11 @@
1
+ // import type { NpmPublishExecutorSchema } from "./schema.d";
2
+ // import executor from "./executor";
3
+
4
+ // const options: NpmPublishExecutorSchema = {};
5
+
6
+ // describe("NpmPublish Executor", () => {
7
+ // it("can run", async () => {
8
+ // const output = await executor(options);
9
+ // expect(output.success).toBe(true);
10
+ // });
11
+ // });