@nx/js 16.0.0-beta.1

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 (184) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +22 -0
  3. package/README.md +63 -0
  4. package/babel.d.ts +10 -0
  5. package/babel.js +89 -0
  6. package/babel.js.map +1 -0
  7. package/executors.json +37 -0
  8. package/generators.json +52 -0
  9. package/migrations.json +60 -0
  10. package/package.json +64 -0
  11. package/src/executors/node/compat.d.ts +2 -0
  12. package/src/executors/node/compat.js +6 -0
  13. package/src/executors/node/compat.js.map +1 -0
  14. package/src/executors/node/node-with-require-overrides.d.ts +5 -0
  15. package/src/executors/node/node-with-require-overrides.js +20 -0
  16. package/src/executors/node/node-with-require-overrides.js.map +1 -0
  17. package/src/executors/node/node.impl.d.ts +8 -0
  18. package/src/executors/node/node.impl.js +184 -0
  19. package/src/executors/node/node.impl.js.map +1 -0
  20. package/src/executors/node/schema.d.ts +16 -0
  21. package/src/executors/node/schema.json +74 -0
  22. package/src/executors/swc/compat.d.ts +2 -0
  23. package/src/executors/swc/compat.js +6 -0
  24. package/src/executors/swc/compat.js.map +1 -0
  25. package/src/executors/swc/schema.json +147 -0
  26. package/src/executors/swc/swc.impl.d.ts +11 -0
  27. package/src/executors/swc/swc.impl.js +126 -0
  28. package/src/executors/swc/swc.impl.js.map +1 -0
  29. package/src/executors/tsc/compat.d.ts +2 -0
  30. package/src/executors/tsc/compat.js +6 -0
  31. package/src/executors/tsc/compat.js.map +1 -0
  32. package/src/executors/tsc/schema.json +156 -0
  33. package/src/executors/tsc/tsc.impl.d.ts +7 -0
  34. package/src/executors/tsc/tsc.impl.js +106 -0
  35. package/src/executors/tsc/tsc.impl.js.map +1 -0
  36. package/src/generators/convert-to-swc/convert-to-swc.d.ts +5 -0
  37. package/src/generators/convert-to-swc/convert-to-swc.js +62 -0
  38. package/src/generators/convert-to-swc/convert-to-swc.js.map +1 -0
  39. package/src/generators/convert-to-swc/schema.d.ts +4 -0
  40. package/src/generators/convert-to-swc/schema.json +36 -0
  41. package/src/generators/init/files/__fileName__ +20 -0
  42. package/src/generators/init/init.d.ts +5 -0
  43. package/src/generators/init/init.js +67 -0
  44. package/src/generators/init/init.js.map +1 -0
  45. package/src/generators/init/schema.d.ts +6 -0
  46. package/src/generators/init/schema.json +30 -0
  47. package/src/generators/library/files/jest-config/jest.config.__ext__ +24 -0
  48. package/src/generators/library/files/lib/README.md +19 -0
  49. package/src/generators/library/files/lib/src/index.ts__tmpl__ +1 -0
  50. package/src/generators/library/files/lib/src/lib/__fileName__.spec.ts__tmpl__ +7 -0
  51. package/src/generators/library/files/lib/src/lib/__fileName__.ts__tmpl__ +3 -0
  52. package/src/generators/library/files/lib/tsconfig.json__tmpl__ +14 -0
  53. package/src/generators/library/files/lib/tsconfig.lib.json__tmpl__ +10 -0
  54. package/src/generators/library/library.d.ts +15 -0
  55. package/src/generators/library/library.js +388 -0
  56. package/src/generators/library/library.js.map +1 -0
  57. package/src/generators/library/schema.json +134 -0
  58. package/src/index.d.ts +15 -0
  59. package/src/index.js +24 -0
  60. package/src/index.js.map +1 -0
  61. package/src/migrations/update-13-10-1/update-lib-swcrc-exclude.d.ts +2 -0
  62. package/src/migrations/update-13-10-1/update-lib-swcrc-exclude.js +32 -0
  63. package/src/migrations/update-13-10-1/update-lib-swcrc-exclude.js.map +1 -0
  64. package/src/migrations/update-13-8-5/update-node-executor.d.ts +2 -0
  65. package/src/migrations/update-13-8-5/update-node-executor.js +28 -0
  66. package/src/migrations/update-13-8-5/update-node-executor.js.map +1 -0
  67. package/src/migrations/update-13-8-5/update-swcrc.d.ts +2 -0
  68. package/src/migrations/update-13-8-5/update-swcrc.js +35 -0
  69. package/src/migrations/update-13-8-5/update-swcrc.js.map +1 -0
  70. package/src/migrations/update-14-0-0/exclude-jest-config-swcrc.d.ts +3 -0
  71. package/src/migrations/update-14-0-0/exclude-jest-config-swcrc.js +27 -0
  72. package/src/migrations/update-14-0-0/exclude-jest-config-swcrc.js.map +1 -0
  73. package/src/migrations/update-14-1-5/update-swcrc-path.d.ts +3 -0
  74. package/src/migrations/update-14-1-5/update-swcrc-path.js +30 -0
  75. package/src/migrations/update-14-1-5/update-swcrc-path.js.map +1 -0
  76. package/src/migrations/update-15-8-0/rename-swcrc-config.d.ts +2 -0
  77. package/src/migrations/update-15-8-0/rename-swcrc-config.js +81 -0
  78. package/src/migrations/update-15-8-0/rename-swcrc-config.js.map +1 -0
  79. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
  80. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +13 -0
  81. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js.map +1 -0
  82. package/src/utils/add-babel-inputs.d.ts +2 -0
  83. package/src/utils/add-babel-inputs.js +23 -0
  84. package/src/utils/add-babel-inputs.js.map +1 -0
  85. package/src/utils/assets/assets.d.ts +10 -0
  86. package/src/utils/assets/assets.js +38 -0
  87. package/src/utils/assets/assets.js.map +1 -0
  88. package/src/utils/assets/copy-assets-handler.d.ts +28 -0
  89. package/src/utils/assets/copy-assets-handler.js +155 -0
  90. package/src/utils/assets/copy-assets-handler.js.map +1 -0
  91. package/src/utils/assets/index.d.ts +16 -0
  92. package/src/utils/assets/index.js +31 -0
  93. package/src/utils/assets/index.js.map +1 -0
  94. package/src/utils/buildable-libs-utils.d.ts +32 -0
  95. package/src/utils/buildable-libs-utils.js +309 -0
  96. package/src/utils/buildable-libs-utils.js.map +1 -0
  97. package/src/utils/check-dependencies.d.ts +8 -0
  98. package/src/utils/check-dependencies.js +24 -0
  99. package/src/utils/check-dependencies.js.map +1 -0
  100. package/src/utils/code-frames/highlight.d.ts +1 -0
  101. package/src/utils/code-frames/highlight.js +87 -0
  102. package/src/utils/code-frames/highlight.js.map +1 -0
  103. package/src/utils/code-frames/identifiers.d.ts +5 -0
  104. package/src/utils/code-frames/identifiers.js +53 -0
  105. package/src/utils/code-frames/identifiers.js.map +1 -0
  106. package/src/utils/compiler-helper-dependency.d.ts +17 -0
  107. package/src/utils/compiler-helper-dependency.js +111 -0
  108. package/src/utils/compiler-helper-dependency.js.map +1 -0
  109. package/src/utils/generate-globs.d.ts +6 -0
  110. package/src/utils/generate-globs.js +81 -0
  111. package/src/utils/generate-globs.js.map +1 -0
  112. package/src/utils/inline.d.ts +19 -0
  113. package/src/utils/inline.js +211 -0
  114. package/src/utils/inline.js.map +1 -0
  115. package/src/utils/minimal-publish-script.d.ts +2 -0
  116. package/src/utils/minimal-publish-script.js +76 -0
  117. package/src/utils/minimal-publish-script.js.map +1 -0
  118. package/src/utils/package-json/index.d.ts +13 -0
  119. package/src/utils/package-json/index.js +34 -0
  120. package/src/utils/package-json/index.js.map +1 -0
  121. package/src/utils/package-json/update-package-json.d.ts +20 -0
  122. package/src/utils/package-json/update-package-json.js +142 -0
  123. package/src/utils/package-json/update-package-json.js.map +1 -0
  124. package/src/utils/prettier.d.ts +6 -0
  125. package/src/utils/prettier.js +38 -0
  126. package/src/utils/prettier.js.map +1 -0
  127. package/src/utils/schema.d.ts +81 -0
  128. package/src/utils/swc/add-swc-config.d.ts +3 -0
  129. package/src/utils/swc/add-swc-config.js +44 -0
  130. package/src/utils/swc/add-swc-config.js.map +1 -0
  131. package/src/utils/swc/add-swc-dependencies.d.ts +2 -0
  132. package/src/utils/swc/add-swc-dependencies.js +15 -0
  133. package/src/utils/swc/add-swc-dependencies.js.map +1 -0
  134. package/src/utils/swc/compile-swc.d.ts +13 -0
  135. package/src/utils/swc/compile-swc.js +161 -0
  136. package/src/utils/swc/compile-swc.js.map +1 -0
  137. package/src/utils/swc/get-swcrc-path.d.ts +2 -0
  138. package/src/utils/swc/get-swcrc-path.js +14 -0
  139. package/src/utils/swc/get-swcrc-path.js.map +1 -0
  140. package/src/utils/swc/inline.d.ts +2 -0
  141. package/src/utils/swc/inline.js +13 -0
  142. package/src/utils/swc/inline.js.map +1 -0
  143. package/src/utils/typescript/__mocks__/plugin-a.d.ts +1 -0
  144. package/src/utils/typescript/__mocks__/plugin-a.js +6 -0
  145. package/src/utils/typescript/__mocks__/plugin-a.js.map +1 -0
  146. package/src/utils/typescript/__mocks__/plugin-b.d.ts +1 -0
  147. package/src/utils/typescript/__mocks__/plugin-b.js +6 -0
  148. package/src/utils/typescript/__mocks__/plugin-b.js.map +1 -0
  149. package/src/utils/typescript/ast-utils.d.ts +22 -0
  150. package/src/utils/typescript/ast-utils.js +199 -0
  151. package/src/utils/typescript/ast-utils.js.map +1 -0
  152. package/src/utils/typescript/compile-typescript-files.d.ts +10 -0
  153. package/src/utils/typescript/compile-typescript-files.js +45 -0
  154. package/src/utils/typescript/compile-typescript-files.js.map +1 -0
  155. package/src/utils/typescript/create-ts-config.d.ts +17 -0
  156. package/src/utils/typescript/create-ts-config.js +48 -0
  157. package/src/utils/typescript/create-ts-config.js.map +1 -0
  158. package/src/utils/typescript/ensure-typescript.d.ts +1 -0
  159. package/src/utils/typescript/ensure-typescript.js +10 -0
  160. package/src/utils/typescript/ensure-typescript.js.map +1 -0
  161. package/src/utils/typescript/get-source-nodes.d.ts +2 -0
  162. package/src/utils/typescript/get-source-nodes.js +19 -0
  163. package/src/utils/typescript/get-source-nodes.js.map +1 -0
  164. package/src/utils/typescript/load-ts-transformers.d.ts +5 -0
  165. package/src/utils/typescript/load-ts-transformers.js +63 -0
  166. package/src/utils/typescript/load-ts-transformers.js.map +1 -0
  167. package/src/utils/typescript/print-diagnostics.d.ts +1 -0
  168. package/src/utils/typescript/print-diagnostics.js +22 -0
  169. package/src/utils/typescript/print-diagnostics.js.map +1 -0
  170. package/src/utils/typescript/run-type-check.d.ts +32 -0
  171. package/src/utils/typescript/run-type-check.js +125 -0
  172. package/src/utils/typescript/run-type-check.js.map +1 -0
  173. package/src/utils/typescript/ts-config.d.ts +6 -0
  174. package/src/utils/typescript/ts-config.js +50 -0
  175. package/src/utils/typescript/ts-config.js.map +1 -0
  176. package/src/utils/typescript/types.d.ts +18 -0
  177. package/src/utils/typescript/types.js +3 -0
  178. package/src/utils/typescript/types.js.map +1 -0
  179. package/src/utils/versions.d.ts +8 -0
  180. package/src/utils/versions.js +13 -0
  181. package/src/utils/versions.js.map +1 -0
  182. package/src/utils/watch-for-single-file-changes.d.ts +1 -0
  183. package/src/utils/watch-for-single-file-changes.js +27 -0
  184. package/src/utils/watch-for-single-file-changes.js.map +1 -0
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const versions_1 = require("@nx/workspace/src/utils/versions");
6
+ function update(host) {
7
+ var _a, _b;
8
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
+ const projects = (0, devkit_1.getProjects)(host);
10
+ let installNeeded = false;
11
+ for (const [name, config] of projects.entries()) {
12
+ if (((_b = (_a = config === null || config === void 0 ? void 0 : config.targets) === null || _a === void 0 ? void 0 : _a.serve) === null || _b === void 0 ? void 0 : _b.executor) !== '@nrwl/js:node')
13
+ continue;
14
+ config.targets.serve.executor = '@nrwl/node:node';
15
+ installNeeded = true;
16
+ (0, devkit_1.updateProjectConfiguration)(host, name, config);
17
+ }
18
+ const task = installNeeded
19
+ ? (0, devkit_1.addDependenciesToPackageJson)(host, {}, {
20
+ '@nrwl/node': versions_1.nxVersion,
21
+ })
22
+ : undefined;
23
+ yield (0, devkit_1.formatFiles)(host);
24
+ return task;
25
+ });
26
+ }
27
+ exports.default = update;
28
+ //# sourceMappingURL=update-node-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-node-executor.js","sourceRoot":"","sources":["../../../../../../packages/js/src/migrations/update-13-8-5/update-node-executor.ts"],"names":[],"mappings":";;;AAAA,uCAMoB;AACpB,+DAA6D;AAE7D,SAA8B,MAAM,CAAC,IAAU;;;QAC7C,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QACnC,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,0CAAE,KAAK,0CAAE,QAAQ,MAAK,eAAe;gBAAE,SAAS;YAEnE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,iBAAiB,CAAC;YAElD,aAAa,GAAG,IAAI,CAAC;YACrB,IAAA,mCAA0B,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;SAChD;QAED,MAAM,IAAI,GAAG,aAAa;YACxB,CAAC,CAAC,IAAA,qCAA4B,EAC1B,IAAI,EACJ,EAAE,EACF;gBACE,YAAY,EAAE,oBAAS;aACxB,CACF;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,IAAI,CAAC;;CACb;AA1BD,yBA0BC"}
@@ -0,0 +1,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export default function update(host: Tree): Promise<void>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const path_1 = require("path");
6
+ const add_swc_config_1 = require("../../utils/swc/add-swc-config");
7
+ function update(host) {
8
+ var _a, _b, _c, _d, _e;
9
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
10
+ const projects = (0, devkit_1.getProjects)(host);
11
+ for (const config of projects.values()) {
12
+ if (((_b = (_a = config === null || config === void 0 ? void 0 : config.targets) === null || _a === void 0 ? void 0 : _a.build) === null || _b === void 0 ? void 0 : _b.executor) !== '@nrwl/js:swc')
13
+ continue;
14
+ const swcrcPath = (0, path_1.join)(config.root, '.swcrc');
15
+ if (!host.exists(swcrcPath))
16
+ continue;
17
+ // rename
18
+ const libSwcrcPath = (0, path_1.join)(config.root, '.lib.swcrc');
19
+ host.rename(swcrcPath, libSwcrcPath);
20
+ const swcrcContent = (0, devkit_1.readJson)(host, libSwcrcPath);
21
+ // skip if swcrc already has "exclude" field
22
+ if (swcrcContent['exclude'])
23
+ continue;
24
+ // check swcExclude build options
25
+ const exclude = ((_e = (_d = (_c = config === null || config === void 0 ? void 0 : config.targets) === null || _c === void 0 ? void 0 : _c.build) === null || _d === void 0 ? void 0 : _d.options) === null || _e === void 0 ? void 0 : _e['swcExclude']) || add_swc_config_1.defaultExclude;
26
+ (0, devkit_1.updateJson)(host, libSwcrcPath, (swcrc) => {
27
+ swcrc['exclude'] = exclude;
28
+ return swcrc;
29
+ });
30
+ }
31
+ yield (0, devkit_1.formatFiles)(host);
32
+ });
33
+ }
34
+ exports.default = update;
35
+ //# sourceMappingURL=update-swcrc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-swcrc.js","sourceRoot":"","sources":["../../../../../../packages/js/src/migrations/update-13-8-5/update-swcrc.ts"],"names":[],"mappings":";;;AAAA,uCAMoB;AACpB,+BAA4B;AAC5B,mEAAgE;AAEhE,SAA8B,MAAM,CAAC,IAAU;;;QAC7C,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;YACtC,IAAI,CAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,0CAAE,KAAK,0CAAE,QAAQ,MAAK,cAAc;gBAAE,SAAS;YAElE,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;gBAAE,SAAS;YAEtC,SAAS;YACT,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAErC,MAAM,YAAY,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAElD,4CAA4C;YAC5C,IAAI,YAAY,CAAC,SAAS,CAAC;gBAAE,SAAS;YAEtC,iCAAiC;YACjC,MAAM,OAAO,GACX,CAAA,MAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,0CAAE,KAAK,0CAAE,OAAO,0CAAG,YAAY,CAAC,KAAI,+BAAc,CAAC;YACpE,IAAA,mBAAU,EAAC,IAAI,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvC,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;;CACzB;AA5BD,yBA4BC"}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function excludeJestConfigSwcrc(tree: Tree): void;
3
+ export default excludeJestConfigSwcrc;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.excludeJestConfigSwcrc = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
6
+ const path_1 = require("path");
7
+ function excludeJestConfigSwcrc(tree) {
8
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/js:swc', (config, projectName) => {
9
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, projectName);
10
+ const libSwcPath = (0, path_1.join)(projectConfig.root, '.lib.swcrc');
11
+ if (!tree.exists(libSwcPath))
12
+ return;
13
+ (0, devkit_1.updateJson)(tree, libSwcPath, (json) => {
14
+ if (json.exclude) {
15
+ const excludePatterns = new Set([
16
+ 'jest.config.js',
17
+ ...json.exclude,
18
+ ]);
19
+ json.exclude = [...excludePatterns];
20
+ }
21
+ return json;
22
+ }, { expectComments: true });
23
+ });
24
+ }
25
+ exports.excludeJestConfigSwcrc = excludeJestConfigSwcrc;
26
+ exports.default = excludeJestConfigSwcrc;
27
+ //# sourceMappingURL=exclude-jest-config-swcrc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exclude-jest-config-swcrc.js","sourceRoot":"","sources":["../../../../../../packages/js/src/migrations/update-14-0-0/exclude-jest-config-swcrc.ts"],"names":[],"mappings":";;;AAAA,uCAAwE;AACxE,6FAA0F;AAE1F,+BAA4B;AAE5B,SAAgB,sBAAsB,CAAC,IAAU;IAC/C,IAAA,+CAAsB,EACpB,IAAI,EACJ,cAAc,EACd,CAAC,MAA0B,EAAE,WAAW,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAAE,OAAO;QAErC,IAAA,mBAAU,EACR,IAAI,EACJ,UAAU,EACV,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;oBAC9B,gBAAgB;oBAChB,GAAG,IAAI,CAAC,OAAO;iBAChB,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;aACrC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AA3BD,wDA2BC;AAED,kBAAe,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function updateSwcrcPath(tree: Tree): Promise<void>;
3
+ export default updateSwcrcPath;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateSwcrcPath = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
7
+ function updateSwcrcPath(tree) {
8
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
+ let changesMade = false;
10
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/js:swc', (_, projectName, targetName, configurationName) => {
11
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, projectName);
12
+ const executorOptions = configurationName
13
+ ? projectConfig.targets[targetName].configurations[configurationName]
14
+ : projectConfig.targets[targetName].options;
15
+ if (!executorOptions.swcrcPath)
16
+ return;
17
+ const newSwcrcPath = (0, devkit_1.joinPathFragments)(projectConfig.root, executorOptions.swcrcPath);
18
+ delete executorOptions.swcrcPath;
19
+ executorOptions.swcrc = newSwcrcPath;
20
+ (0, devkit_1.updateProjectConfiguration)(tree, projectName, projectConfig);
21
+ changesMade = true;
22
+ });
23
+ if (changesMade) {
24
+ yield (0, devkit_1.formatFiles)(tree);
25
+ }
26
+ });
27
+ }
28
+ exports.updateSwcrcPath = updateSwcrcPath;
29
+ exports.default = updateSwcrcPath;
30
+ //# sourceMappingURL=update-swcrc-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-swcrc-path.js","sourceRoot":"","sources":["../../../../../../packages/js/src/migrations/update-14-1-5/update-swcrc-path.ts"],"names":[],"mappings":";;;;AAAA,uCAMoB;AACpB,6FAA0F;AAK1F,SAAsB,eAAe,CAAC,IAAU;;QAC9C,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,IAAA,+CAAsB,EACpB,IAAI,EACJ,cAAc,EACd,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE;YAChD,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,eAAe,GAA0B,iBAAiB;gBAC9D,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC;gBACrE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;YAE9C,IAAI,CAAC,eAAe,CAAC,SAAS;gBAAE,OAAO;YAEvC,MAAM,YAAY,GAAG,IAAA,0BAAiB,EACpC,aAAa,CAAC,IAAI,EAClB,eAAe,CAAC,SAAS,CAC1B,CAAC;YAEF,OAAO,eAAe,CAAC,SAAS,CAAC;YACjC,eAAe,CAAC,KAAK,GAAG,YAAY,CAAC;YAErC,IAAA,mCAA0B,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YAE7D,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CACF,CAAC;QAEF,IAAI,WAAW,EAAE;YACf,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;SACzB;IACH,CAAC;CAAA;AA/BD,0CA+BC;AAED,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export default function (tree: Tree): Promise<void>;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
6
+ const tsquery_1 = require("@phenomnomnominal/tsquery");
7
+ function default_1(tree) {
8
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
+ let changesMade = false;
10
+ const projects = (0, devkit_1.getProjects)(tree);
11
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/js:swc', (_, projectName, target, configurationName) => {
12
+ const projectConfiguration = projects.get(projectName);
13
+ const executorOptions = configurationName
14
+ ? projectConfiguration.targets[target].configurations[configurationName]
15
+ : projectConfiguration.targets[target].options;
16
+ // if the project uses a custom path to swcrc file
17
+ // and only if it's the default name
18
+ if (executorOptions.swcrc &&
19
+ executorOptions.swcrc.includes('.lib.swcrc')) {
20
+ const newSwcrc = executorOptions.swcrc.replace('.lib.swcrc', '.swcrc');
21
+ // rename the swcrc file first
22
+ tree.rename(executorOptions.swcrc, newSwcrc);
23
+ // then update the executor options
24
+ executorOptions.swcrc = newSwcrc;
25
+ changesMade = true;
26
+ }
27
+ const libSwcrcPath = (0, devkit_1.joinPathFragments)(projectConfiguration.root, '.lib.swcrc') ||
28
+ (0, devkit_1.joinPathFragments)(projectConfiguration.sourceRoot, '.lib.swcrc');
29
+ const isLibSwcrcExist = tree.exists(libSwcrcPath);
30
+ if (isLibSwcrcExist) {
31
+ tree.rename(libSwcrcPath, libSwcrcPath.replace('.lib.swcrc', '.swcrc'));
32
+ changesMade = true;
33
+ }
34
+ (0, devkit_1.updateProjectConfiguration)(tree, projectName, projectConfiguration);
35
+ });
36
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (_, projectName, target, configurationName) => {
37
+ const projectConfiguration = projects.get(projectName);
38
+ const executorOptions = configurationName
39
+ ? projectConfiguration.targets[target].configurations[configurationName]
40
+ : projectConfiguration.targets[target].options;
41
+ const isJestConfigExist = executorOptions.jestConfig && tree.exists(executorOptions.jestConfig);
42
+ if (isJestConfigExist) {
43
+ const jestConfig = tree.read(executorOptions.jestConfig, 'utf-8');
44
+ const jsonParseNodes = tsquery_1.tsquery.query(jestConfig, ':matches(CallExpression:has(Identifier[name="JSON"]):has(Identifier[name="parse"]))');
45
+ if (jsonParseNodes.length) {
46
+ // if we already assign false to swcrc, skip
47
+ if (jestConfig.includes('.swcrc = false')) {
48
+ return;
49
+ }
50
+ let updatedJestConfig = tsquery_1.tsquery.replace(jestConfig, 'CallExpression:has(Identifier[name="JSON"]):has(Identifier[name="parse"]) TemplateSpan', (templateSpan) => {
51
+ if (templateSpan.literal.text === '/.lib.swcrc') {
52
+ return templateSpan
53
+ .getFullText()
54
+ .replace('.lib.swcrc', '.swcrc');
55
+ }
56
+ return '';
57
+ });
58
+ updatedJestConfig = tsquery_1.tsquery.replace(updatedJestConfig, ':matches(ExportAssignment, BinaryExpression:has(Identifier[name="module"]):has(Identifier[name="exports"]))', (node) => {
59
+ return `
60
+
61
+ // disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves.
62
+ // If we do not disable this, SWC Core will read .swcrc and won't transform our test files due to "exclude"
63
+ if (swcJestConfig.swcrc === undefined) {
64
+ swcJestConfig.swcrc = false;
65
+ }
66
+
67
+ ${node.getFullText()}
68
+ `;
69
+ });
70
+ tree.write(executorOptions.jestConfig, updatedJestConfig);
71
+ changesMade = true;
72
+ }
73
+ }
74
+ });
75
+ if (changesMade) {
76
+ yield (0, devkit_1.formatFiles)(tree);
77
+ }
78
+ });
79
+ }
80
+ exports.default = default_1;
81
+ //# sourceMappingURL=rename-swcrc-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-swcrc-config.js","sourceRoot":"","sources":["../../../../../../packages/js/src/migrations/update-15-8-0/rename-swcrc-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export default function replacePackage(tree: Tree): Promise<void>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const replace_package_1 = require("@nx/devkit/src/utils/replace-package");
6
+ function replacePackage(tree) {
7
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
8
+ yield (0, replace_package_1.replaceNrwlPackageWithNxPackage)(tree, '@nrwl/js', '@nx/js');
9
+ yield (0, devkit_1.formatFiles)(tree);
10
+ });
11
+ }
12
+ exports.default = replacePackage;
13
+ //# sourceMappingURL=update-16-0-0-add-nx-packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-16-0-0-add-nx-packages.js","sourceRoot":"","sources":["../../../../../../packages/js/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.ts"],"names":[],"mappings":";;;AAAA,uCAA+C;AAC/C,0EAAuF;AAEvF,SAA8B,cAAc,CAAC,IAAU;;QACrD,MAAM,IAAA,iDAA+B,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAElE,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CAAA;AAJD,iCAIC"}
@@ -0,0 +1,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function addBabelInputs(tree: Tree): void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addBabelInputs = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ function addBabelInputs(tree) {
6
+ var _a;
7
+ const nxJson = (0, devkit_1.readNxJson)(tree);
8
+ let globalBabelFile = ['babel.config.js', 'babel.config.json'].find((file) => tree.exists(file));
9
+ if (!globalBabelFile) {
10
+ (0, devkit_1.writeJson)(tree, '/babel.config.json', {
11
+ babelrcRoots: ['*'], // Make sure .babelrc files other than root can be loaded in a monorepo
12
+ });
13
+ globalBabelFile = 'babel.config.json';
14
+ }
15
+ if ((_a = nxJson.namedInputs) === null || _a === void 0 ? void 0 : _a.sharedGlobals) {
16
+ const sharedGlobalFileset = new Set(nxJson.namedInputs.sharedGlobals);
17
+ sharedGlobalFileset.add((0, devkit_1.joinPathFragments)('{workspaceRoot}', globalBabelFile));
18
+ nxJson.namedInputs.sharedGlobals = Array.from(sharedGlobalFileset);
19
+ }
20
+ (0, devkit_1.updateNxJson)(tree, nxJson);
21
+ }
22
+ exports.addBabelInputs = addBabelInputs;
23
+ //# sourceMappingURL=add-babel-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-babel-inputs.js","sourceRoot":"","sources":["../../../../../packages/js/src/utils/add-babel-inputs.ts"],"names":[],"mappings":";;;AAAA,uCAOoB;AAEpB,SAAgB,cAAc,CAAC,IAAU;;IACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;IAChC,IAAI,eAAe,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAClB,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE;QACpB,IAAA,kBAAS,EAAC,IAAI,EAAE,oBAAoB,EAAE;YACpC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,uEAAuE;SAC7F,CAAC,CAAC;QACH,eAAe,GAAG,mBAAmB,CAAC;KACvC;IAED,IAAI,MAAA,MAAM,CAAC,WAAW,0CAAE,aAAa,EAAE;QACrC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACtE,mBAAmB,CAAC,GAAG,CACrB,IAAA,0BAAiB,EAAC,iBAAiB,EAAE,eAAe,CAAC,CACtD,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACpE;IAED,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAtBD,wCAsBC"}
@@ -0,0 +1,10 @@
1
+ export type FileInputOutput = {
2
+ input: string;
3
+ output: string;
4
+ };
5
+ export type AssetGlob = FileInputOutput & {
6
+ glob: string;
7
+ ignore?: string[];
8
+ dot?: boolean;
9
+ };
10
+ export declare function assetGlobsToFiles(assets: Array<AssetGlob | string>, rootDir: string, outDir: string): FileInputOutput[];
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assetGlobsToFiles = void 0;
4
+ const fastGlob = require("fast-glob");
5
+ const path_1 = require("path");
6
+ function assetGlobsToFiles(assets, rootDir, outDir) {
7
+ const files = [];
8
+ const globbedFiles = (pattern, input = '', ignore = [], dot = false) => {
9
+ return fastGlob.sync(pattern, {
10
+ cwd: input,
11
+ onlyFiles: true,
12
+ dot,
13
+ ignore,
14
+ });
15
+ };
16
+ assets.forEach((asset) => {
17
+ var _a;
18
+ if (typeof asset === 'string') {
19
+ globbedFiles(asset, rootDir).forEach((globbedFile) => {
20
+ files.push({
21
+ input: (0, path_1.join)(rootDir, globbedFile),
22
+ output: (0, path_1.join)(outDir, (0, path_1.basename)(globbedFile)),
23
+ });
24
+ });
25
+ }
26
+ else {
27
+ globbedFiles(asset.glob, (0, path_1.join)(rootDir, asset.input), asset.ignore, (_a = asset.dot) !== null && _a !== void 0 ? _a : false).forEach((globbedFile) => {
28
+ files.push({
29
+ input: (0, path_1.join)(rootDir, asset.input, globbedFile),
30
+ output: (0, path_1.join)(outDir, asset.output, globbedFile),
31
+ });
32
+ });
33
+ }
34
+ });
35
+ return files;
36
+ }
37
+ exports.assetGlobsToFiles = assetGlobsToFiles;
38
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../../../../packages/js/src/utils/assets/assets.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,+BAAsC;AAYtC,SAAgB,iBAAiB,CAC/B,MAAiC,EACjC,OAAe,EACf,MAAc;IAEd,MAAM,KAAK,GAAsB,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAG,CACnB,OAAe,EACf,KAAK,GAAG,EAAE,EACV,SAAmB,EAAE,EACrB,MAAe,KAAK,EACpB,EAAE;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;YAC5B,GAAG,EAAE,KAAK;YACV,SAAS,EAAE,IAAI;YACf,GAAG;YACH,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;gBACnD,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,CAAC;oBACjC,MAAM,EAAE,IAAA,WAAI,EAAC,MAAM,EAAE,IAAA,eAAQ,EAAC,WAAW,CAAC,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,YAAY,CACV,KAAK,CAAC,IAAI,EACV,IAAA,WAAI,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAC1B,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,GAAG,mCAAI,KAAK,CACnB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;gBACxB,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,IAAA,WAAI,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;oBAC9C,MAAM,EAAE,IAAA,WAAI,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;iBAChD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AA7CD,8CA6CC"}
@@ -0,0 +1,28 @@
1
+ import { AssetGlob } from './assets';
2
+ export type FileEventType = 'create' | 'update' | 'delete';
3
+ export interface FileEvent {
4
+ type: FileEventType;
5
+ src: string;
6
+ dest: string;
7
+ }
8
+ interface CopyAssetHandlerOptions {
9
+ projectDir: string;
10
+ rootDir: string;
11
+ outputDir: string;
12
+ assets: (string | AssetGlob)[];
13
+ callback?: (events: FileEvent[]) => void;
14
+ }
15
+ export declare const defaultFileEventHandler: (events: FileEvent[]) => void;
16
+ export declare class CopyAssetsHandler {
17
+ private readonly projectDir;
18
+ private readonly rootDir;
19
+ private readonly outputDir;
20
+ private readonly assetGlobs;
21
+ private readonly ignore;
22
+ private readonly callback;
23
+ constructor(opts: CopyAssetHandlerOptions);
24
+ processAllAssetsOnce(): Promise<void>;
25
+ watchAndProcessOnAssetChange(): Promise<() => void>;
26
+ private processEvents;
27
+ }
28
+ export {};
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CopyAssetsHandler = exports.defaultFileEventHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const minimatch = require("minimatch");
6
+ const path = require("path");
7
+ const fse = require("fs-extra");
8
+ const ignore_1 = require("ignore");
9
+ const fg = require("fast-glob");
10
+ const devkit_1 = require("@nx/devkit");
11
+ const client_1 = require("nx/src/daemon/client/client");
12
+ const defaultFileEventHandler = (events) => {
13
+ const dirs = new Set(events.map((event) => path.dirname(event.dest)));
14
+ dirs.forEach((d) => fse.ensureDirSync(d));
15
+ events.forEach((event) => {
16
+ if (event.type === 'create' || event.type === 'update') {
17
+ if (fse.lstatSync(event.src).isFile()) {
18
+ fse.copyFileSync(event.src, event.dest);
19
+ }
20
+ }
21
+ else if (event.type === 'delete') {
22
+ fse.removeSync(event.dest);
23
+ }
24
+ else {
25
+ devkit_1.logger.error(`Unknown file event: ${event.type}`);
26
+ }
27
+ });
28
+ };
29
+ exports.defaultFileEventHandler = defaultFileEventHandler;
30
+ class CopyAssetsHandler {
31
+ constructor(opts) {
32
+ var _a;
33
+ this.rootDir = opts.rootDir;
34
+ this.projectDir = opts.projectDir;
35
+ this.outputDir = opts.outputDir;
36
+ this.callback = (_a = opts.callback) !== null && _a !== void 0 ? _a : exports.defaultFileEventHandler;
37
+ // TODO(jack): Should handle nested .gitignore files
38
+ this.ignore = (0, ignore_1.default)();
39
+ const gitignore = path.join(opts.rootDir, '.gitignore');
40
+ const nxignore = path.join(opts.rootDir, '.nxignore');
41
+ if (fse.existsSync(gitignore))
42
+ this.ignore.add(fse.readFileSync(gitignore).toString());
43
+ if (fse.existsSync(nxignore))
44
+ this.ignore.add(fse.readFileSync(nxignore).toString());
45
+ this.assetGlobs = opts.assets.map((f) => {
46
+ let isGlob = false;
47
+ let pattern;
48
+ // Input and output directories are normalized to be relative to root
49
+ let input;
50
+ let output;
51
+ let ignore = null;
52
+ if (typeof f === 'string') {
53
+ pattern = f;
54
+ input = path.relative(opts.rootDir, opts.projectDir);
55
+ output = path.relative(opts.rootDir, opts.outputDir);
56
+ }
57
+ else {
58
+ isGlob = true;
59
+ pattern = path.join(f.input, f.glob);
60
+ input = f.input;
61
+ output = path.join(path.relative(opts.rootDir, opts.outputDir), f.output);
62
+ if (f.ignore)
63
+ ignore = f.ignore.map((ig) => path.join(f.input, ig));
64
+ }
65
+ return {
66
+ isGlob,
67
+ input,
68
+ pattern,
69
+ ignore,
70
+ output,
71
+ };
72
+ });
73
+ }
74
+ processAllAssetsOnce() {
75
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
76
+ yield Promise.all(this.assetGlobs.map((ag) => tslib_1.__awaiter(this, void 0, void 0, function* () {
77
+ let pattern;
78
+ if (typeof ag === 'string') {
79
+ pattern = ag;
80
+ }
81
+ else {
82
+ pattern = ag.pattern;
83
+ }
84
+ // fast-glob only supports Unix paths
85
+ const files = yield fg(pattern.replace(/\\/g, '/'), {
86
+ cwd: this.rootDir,
87
+ dot: true, // enable hidden files
88
+ });
89
+ this.callback(files.reduce((acc, src) => {
90
+ var _a;
91
+ if (!((_a = ag.ignore) === null || _a === void 0 ? void 0 : _a.some((ig) => minimatch(src, ig))) &&
92
+ !this.ignore.ignores(src)) {
93
+ const relPath = path.relative(ag.input, src);
94
+ const dest = relPath.startsWith('..') ? src : relPath;
95
+ acc.push({
96
+ type: 'create',
97
+ src: path.join(this.rootDir, src),
98
+ dest: path.join(this.rootDir, ag.output, dest),
99
+ });
100
+ }
101
+ return acc;
102
+ }, []));
103
+ })));
104
+ });
105
+ }
106
+ watchAndProcessOnAssetChange() {
107
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
108
+ const unregisterFileWatcher = yield client_1.daemonClient.registerFileWatcher({
109
+ watchProjects: 'all',
110
+ includeGlobalWorkspaceFiles: true,
111
+ }, (err, data) => {
112
+ var _a;
113
+ if (err === 'closed') {
114
+ devkit_1.logger.error(`Watch error: Daemon closed the connection`);
115
+ process.exit(1);
116
+ }
117
+ else if (err) {
118
+ devkit_1.logger.error(`Watch error: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : 'Unknown'}`);
119
+ }
120
+ else {
121
+ this.processEvents(data.changedFiles);
122
+ }
123
+ });
124
+ return () => unregisterFileWatcher();
125
+ });
126
+ }
127
+ processEvents(events) {
128
+ var _a;
129
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
130
+ const fileEvents = [];
131
+ for (const event of events) {
132
+ const pathFromRoot = path.relative(this.rootDir, event.path);
133
+ for (const ag of this.assetGlobs) {
134
+ if (minimatch(pathFromRoot, ag.pattern) &&
135
+ !((_a = ag.ignore) === null || _a === void 0 ? void 0 : _a.some((ig) => minimatch(pathFromRoot, ig))) &&
136
+ !this.ignore.ignores(pathFromRoot)) {
137
+ const relPath = path.relative(ag.input, pathFromRoot);
138
+ const destPath = relPath.startsWith('..') ? pathFromRoot : relPath;
139
+ fileEvents.push({
140
+ type: event.type,
141
+ src: path.join(this.rootDir, pathFromRoot),
142
+ dest: path.join(this.rootDir, ag.output, destPath),
143
+ });
144
+ // Match first entry and skip the rest for this file.
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ if (fileEvents.length > 0)
150
+ this.callback(fileEvents);
151
+ });
152
+ }
153
+ }
154
+ exports.CopyAssetsHandler = CopyAssetsHandler;
155
+ //# sourceMappingURL=copy-assets-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-assets-handler.js","sourceRoot":"","sources":["../../../../../../packages/js/src/utils/assets/copy-assets-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { AssetGlob } from './assets';
2
+ import { FileEvent } from './copy-assets-handler';
3
+ import { ExecutorContext } from '@nx/devkit';
4
+ export interface CopyAssetsOptions {
5
+ outputPath: string;
6
+ assets: (string | AssetGlob)[];
7
+ watch?: boolean | WatchMode;
8
+ }
9
+ export interface CopyAssetsResult {
10
+ success?: boolean;
11
+ stop?: () => void;
12
+ }
13
+ export interface WatchMode {
14
+ onCopy?: (events: FileEvent[]) => void;
15
+ }
16
+ export declare function copyAssets(options: CopyAssetsOptions, context: ExecutorContext): Promise<CopyAssetsResult>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.copyAssets = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const copy_assets_handler_1 = require("./copy-assets-handler");
6
+ function copyAssets(options, context) {
7
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
8
+ const assetHandler = new copy_assets_handler_1.CopyAssetsHandler({
9
+ projectDir: context.projectsConfigurations.projects[context.projectName].root,
10
+ rootDir: context.root,
11
+ outputDir: options.outputPath,
12
+ assets: options.assets,
13
+ callback: typeof (options === null || options === void 0 ? void 0 : options.watch) === 'object' ? options.watch.onCopy : undefined,
14
+ });
15
+ const result = {
16
+ success: true,
17
+ };
18
+ if (options.watch) {
19
+ result.stop = yield assetHandler.watchAndProcessOnAssetChange();
20
+ }
21
+ try {
22
+ yield assetHandler.processAllAssetsOnce();
23
+ }
24
+ catch (_a) {
25
+ result.success = false;
26
+ }
27
+ return result;
28
+ });
29
+ }
30
+ exports.copyAssets = copyAssets;
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/js/src/utils/assets/index.ts"],"names":[],"mappings":";;;;AACA,+DAAqE;AAmBrE,SAAsB,UAAU,CAC9B,OAA0B,EAC1B,OAAwB;;QAExB,MAAM,YAAY,GAAG,IAAI,uCAAiB,CAAC;YACzC,UAAU,EACR,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI;YACnE,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,SAAS,EAAE,OAAO,CAAC,UAAU;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EACN,OAAO,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;QACH,MAAM,MAAM,GAAqB;YAC/B,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,MAAM,CAAC,IAAI,GAAG,MAAM,YAAY,CAAC,4BAA4B,EAAE,CAAC;SACjE;QAED,IAAI;YACF,MAAM,YAAY,CAAC,oBAAoB,EAAE,CAAC;SAC3C;QAAC,WAAM;YACN,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;SACxB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AA5BD,gCA4BC"}