@teambit/webpack 0.0.737 → 0.0.740

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 (48) hide show
  1. package/config/webpack.config.ts +0 -14
  2. package/dist/config/html.js.map +1 -1
  3. package/dist/config/webpack-fallbacks-aliases.js.map +1 -1
  4. package/dist/config/webpack-fallbacks-provide-plugin-config.js.map +1 -1
  5. package/dist/config/webpack-fallbacks.js.map +1 -1
  6. package/dist/config/webpack.config.d.ts +0 -1
  7. package/dist/config/webpack.config.js +1 -40
  8. package/dist/config/webpack.config.js.map +1 -1
  9. package/dist/config/webpack.dev.config.js.map +1 -1
  10. package/dist/events/index.js.map +1 -1
  11. package/dist/events/webpack-compilation-done-event.js.map +1 -1
  12. package/dist/events/webpack-compilation-started-event.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +22 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/plugins/webpack-bit-reporter-plugin.js.map +1 -1
  17. package/dist/transformers/get-exposed-rules.d.ts +3 -0
  18. package/dist/transformers/get-exposed-rules.js +74 -0
  19. package/dist/transformers/get-exposed-rules.js.map +1 -0
  20. package/dist/transformers/get-externals.d.ts +1 -0
  21. package/dist/transformers/get-externals.js +42 -0
  22. package/dist/transformers/get-externals.js.map +1 -0
  23. package/dist/transformers/index.d.ts +1 -0
  24. package/dist/transformers/index.js +28 -0
  25. package/dist/transformers/index.js.map +1 -1
  26. package/dist/transformers/inject-body.js.map +1 -1
  27. package/dist/transformers/resolve-peer.d.ts +14 -0
  28. package/dist/transformers/resolve-peer.js +110 -0
  29. package/dist/transformers/resolve-peer.js.map +1 -0
  30. package/dist/transformers/transformers.d.ts +16 -0
  31. package/dist/transformers/transformers.js +91 -0
  32. package/dist/transformers/transformers.js.map +1 -0
  33. package/dist/webpack.aspect.js.map +1 -1
  34. package/dist/webpack.bundler.js.map +1 -1
  35. package/dist/webpack.composition.js.map +1 -1
  36. package/dist/webpack.dev-server.js.map +1 -1
  37. package/dist/webpack.main.runtime.d.ts +3 -2
  38. package/dist/webpack.main.runtime.js +43 -5
  39. package/dist/webpack.main.runtime.js.map +1 -1
  40. package/package-tar/teambit-webpack-0.0.740.tgz +0 -0
  41. package/package.json +16 -11
  42. package/{preview-1652930732694.js → preview-1653449228788.js} +2 -2
  43. package/transformers/get-exposed-rules.ts +19 -0
  44. package/transformers/get-externals.ts +8 -0
  45. package/transformers/index.ts +5 -0
  46. package/transformers/resolve-peer.ts +63 -0
  47. package/transformers/transformers.ts +52 -0
  48. package/package-tar/teambit-webpack-0.0.737.tgz +0 -0
@@ -0,0 +1,63 @@
1
+ import fs, { realpathSync } from 'fs';
2
+ import { ResolverFactory, CachedInputFileSystem } from 'enhanced-resolve';
3
+ import findRoot from 'find-root';
4
+ import { Logger } from '@teambit/logger';
5
+
6
+ /**
7
+ * Get the package folder, and in case it's not found get the resolved file path
8
+ * @param peerName
9
+ * @returns
10
+ */
11
+ export function resolvePeerToDirOrFile(peerName: string, logger: Logger, hostRootDir?: string): string | undefined {
12
+ let resolved;
13
+ try {
14
+ const options = {
15
+ // resolve the host root dir to its real location, as require.resolve is preserve symlink, so we get wrong result otherwise
16
+ paths: [process.cwd(), __dirname],
17
+ };
18
+ if (hostRootDir) {
19
+ // resolve the host root dir to its real location, as require.resolve is preserve symlink, so we get wrong result otherwise
20
+ options.paths.unshift(realpathSync(hostRootDir));
21
+ }
22
+
23
+ resolved = require.resolve(peerName, options);
24
+ const folder = findRoot(resolved);
25
+ return folder;
26
+ } catch (e) {
27
+ if (resolved) {
28
+ logger.warn(`Couldn't find root dir for "${peerName}" from path "${resolved}" to add it as webpack alias`);
29
+ } else {
30
+ logger.warn(`Couldn't resolve "${peerName}" to add it as webpack alias`);
31
+ }
32
+ return resolved;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Make sure to resolve the peer path correctly
38
+ * we first resolve it to its dir (to be aligned with the aliases transformer)
39
+ * Then we resolve it to specific file, using enhanced resolve to make sure we resolve it using the correct main fields order
40
+ * @param peer
41
+ */
42
+ export function resolvePeerToFile(peer: string, logger: Logger, hostRootDir?: string): string | undefined {
43
+ const dirOrFile = resolvePeerToDirOrFile(peer, logger, hostRootDir);
44
+ if (!dirOrFile) return undefined;
45
+ const resolver = createResolver();
46
+ const resolvedFile = resolver.resolveSync({}, '', dirOrFile);
47
+ return resolvedFile;
48
+ }
49
+
50
+ /**
51
+ * Generate a resolver that will read first the module field then the main field
52
+ * to make it compatible with webpack behavior
53
+ * @returns
54
+ */
55
+ function createResolver() {
56
+ // create a resolver
57
+ const myResolver = ResolverFactory.createResolver({
58
+ fileSystem: new CachedInputFileSystem(fs, 4000),
59
+ useSyncFileSystemCalls: true,
60
+ mainFields: ['module', 'main'],
61
+ });
62
+ return myResolver;
63
+ }
@@ -0,0 +1,52 @@
1
+ import { WebpackConfigTransformContext } from '@teambit/webpack';
2
+ import { WebpackConfigMutator } from '@teambit/webpack.modules.config-mutator';
3
+ import { Logger } from '@teambit/logger';
4
+ import { getExposedRules } from './get-exposed-rules';
5
+ import { resolvePeerToDirOrFile } from './resolve-peer';
6
+ import { getExternals } from './get-externals';
7
+
8
+ export function generateAddAliasesFromPeersTransformer(peers: string[], logger: Logger) {
9
+ return (config: WebpackConfigMutator, context: WebpackConfigTransformContext): WebpackConfigMutator => {
10
+ const peerAliases = peers.reduce((acc, peerName) => {
11
+ // gets the correct module folder of the package.
12
+ // this allows us to resolve internal files, for example:
13
+ // node_modules/react-dom/test-utils
14
+ //
15
+ // we can't use require.resolve() because it resolves to a specific file.
16
+ // for example, if we used "react-dom": require.resolve("react-dom"),
17
+ // it would try to resolve "react-dom/test-utils" as:
18
+ // node_modules/react-dom/index.js/test-utils
19
+ acc[peerName] = resolvePeerToDirOrFile(peerName, logger, context.target?.hostRootDir);
20
+ return acc;
21
+ }, {});
22
+
23
+ config.addAliases(peerAliases);
24
+ return config;
25
+ };
26
+ }
27
+
28
+ /**
29
+ * Generate a transformer that expose all the peers as global via the expose loader
30
+ * @param peers
31
+ * @returns
32
+ */
33
+ export function generateExposePeersTransformer(peers: string[], logger: Logger) {
34
+ return (config: WebpackConfigMutator, context: WebpackConfigTransformContext): WebpackConfigMutator => {
35
+ const exposedRules = getExposedRules(peers, logger, context.target?.hostRootDir);
36
+ config.addModuleRules(exposedRules);
37
+ return config;
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Generate a transformer that expose all the peers as global via the expose loader
43
+ * @param peers
44
+ * @returns
45
+ */
46
+ export function generateExternalsTransformer(depes: string[]) {
47
+ return (config: WebpackConfigMutator): WebpackConfigMutator => {
48
+ const externals = getExternals(depes);
49
+ config.addExternals(externals);
50
+ return config;
51
+ };
52
+ }