@teambit/preview 0.0.777 → 0.0.780

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 (38) hide show
  1. package/bundler/chunks.ts +2 -7
  2. package/bundler/create-peer-link.spec.ts +33 -0
  3. package/bundler/create-peers-link.ts +48 -0
  4. package/dist/artifact-file-middleware.d.ts +1 -1
  5. package/dist/bundler/chunks.d.ts +1 -1
  6. package/dist/bundler/chunks.js +1 -6
  7. package/dist/bundler/chunks.js.map +1 -1
  8. package/dist/bundler/create-peer-link.spec.d.ts +1 -0
  9. package/dist/bundler/create-peer-link.spec.js +42 -0
  10. package/dist/bundler/create-peer-link.spec.js.map +1 -0
  11. package/dist/bundler/create-peers-link.d.ts +2 -0
  12. package/dist/bundler/create-peers-link.js +100 -0
  13. package/dist/bundler/create-peers-link.js.map +1 -0
  14. package/dist/component-preview.route.d.ts +1 -1
  15. package/dist/env-preview-template.task.js +13 -3
  16. package/dist/env-preview-template.task.js.map +1 -1
  17. package/dist/env-template.route.d.ts +1 -1
  18. package/dist/generate-link.js +11 -7
  19. package/dist/generate-link.js.map +1 -1
  20. package/dist/html-utils.d.ts +6 -0
  21. package/dist/html-utils.js +43 -0
  22. package/dist/html-utils.js.map +1 -0
  23. package/dist/preview-assets.route.d.ts +1 -1
  24. package/dist/preview.preview.runtime.js +27 -31
  25. package/dist/preview.preview.runtime.js.map +1 -1
  26. package/dist/preview.route.d.ts +1 -1
  27. package/dist/strategies/component-strategy.js +13 -10
  28. package/dist/strategies/component-strategy.js.map +1 -1
  29. package/dist/strategies/generate-component-link.js +3 -3
  30. package/dist/strategies/generate-component-link.js.map +1 -1
  31. package/html-utils.tsx +29 -0
  32. package/package-tar/teambit-preview-0.0.780.tgz +0 -0
  33. package/package.json +24 -23
  34. package/{preview-1656732493790.js → preview-1657039361770.js} +3 -3
  35. package/preview.preview.runtime.tsx +19 -32
  36. package/strategies/component-strategy.ts +16 -16
  37. package/strategies/generate-component-link.ts +3 -3
  38. package/package-tar/teambit-preview-0.0.777.tgz +0 -0
package/bundler/chunks.ts CHANGED
@@ -17,7 +17,7 @@ export const CHUNK_NAMES = {
17
17
 
18
18
  type TemplateEntryOptions = {
19
19
  previewRootPath: string;
20
- peers: string[];
20
+ peers: string | string[];
21
21
  previewModules: {
22
22
  name: string;
23
23
  entry: string;
@@ -30,19 +30,14 @@ export function generateTemplateEntries(options: TemplateEntryOptions): BundlerE
30
30
  const previewChunks = {};
31
31
  options.previewModules.forEach(({ name, entry, include = [] }) => {
32
32
  previewChunks[name] = {
33
- filename: `${name}.[chunkhash].js`,
34
33
  dependOn: [CHUNK_NAMES.peers, CHUNK_NAMES.previewRoot, ...include],
35
34
  import: entry,
36
35
  };
37
36
  });
38
37
 
39
38
  return {
40
- [CHUNK_NAMES.peers]: {
41
- filename: 'peers.[chunkhash].js',
42
- import: options.peers,
43
- },
39
+ [CHUNK_NAMES.peers]: options.peers,
44
40
  [CHUNK_NAMES.previewRoot]: {
45
- filename: 'preview-root.[chunkhash].js',
46
41
  dependOn: [CHUNK_NAMES.peers],
47
42
  import: options.previewRootPath,
48
43
  },
@@ -0,0 +1,33 @@
1
+ import { generatePeerLink } from './create-peers-link';
2
+
3
+ const guardSnapshot = `function guard(property, expected) {
4
+ var existing = globalObj[property];
5
+
6
+ if (existing === expected && expected !== undefined)
7
+ console.warn('[expose-peers] "' + property + '" already exists in global scope, but with correct value');
8
+ else if (existing !== undefined)
9
+ throw new Error('[expose-peers] "' + property + '" already exists in the global scope, cannot overwrite');
10
+ }`;
11
+
12
+ const snapshot = `// @ts-nocheck
13
+ import * as FooBar from "foo-bar";
14
+ import * as BuzQux from "@buz/qux";
15
+
16
+ const globalObj = window;
17
+
18
+ guard("FooBar", FooBar);
19
+ guard("BuzQux", BuzQux);
20
+
21
+ globalObj["FooBar"] = FooBar;
22
+ globalObj["BuzQux"] = BuzQux;
23
+
24
+ ${guardSnapshot}
25
+ `;
26
+
27
+ describe('peers link', () => {
28
+ it('should output snapshot', () => {
29
+ const result = generatePeerLink(['foo-bar', '@buz/qux']);
30
+
31
+ expect(result).toEqual(snapshot);
32
+ });
33
+ });
@@ -0,0 +1,48 @@
1
+ import { join } from 'path';
2
+ import { writeFile } from 'fs-extra';
3
+ import camelcase from 'camelcase';
4
+ import hash from 'object-hash';
5
+
6
+ export async function writePeerLink(peers: string[], workdir: string) {
7
+ const content = generatePeerLink(peers);
8
+ const fullpath = join(workdir, `peers-link.${hash(content)}.js`);
9
+
10
+ await writeFile(fullpath, content);
11
+
12
+ return fullpath;
13
+ }
14
+
15
+ // TODO - this exposes the packages in the "window" strategy,
16
+ // should use a better strategy like umd, systemjs, or jsonp
17
+
18
+ export function generatePeerLink(peers: string[]) {
19
+ if (!peers) return '';
20
+
21
+ const links = peers.map((p) => ({
22
+ packageName: p,
23
+ varName: toVarName(p),
24
+ }));
25
+
26
+ return `// @ts-nocheck
27
+ ${links.map((x) => `import * as ${x.varName} from "${x.packageName}"`).join(';\n')};
28
+
29
+ const globalObj = window;
30
+
31
+ ${links.map(({ varName: localName }) => `guard("${localName}", ${localName})`).join(';\n')};
32
+
33
+ ${links.map((x) => `globalObj["${x.varName}"] = ${x.varName}`).join(';\n')};
34
+
35
+ function guard(property, expected) {
36
+ var existing = globalObj[property];
37
+
38
+ if (existing === expected && expected !== undefined)
39
+ console.warn('[expose-peers] "' + property + '" already exists in global scope, but with correct value');
40
+ else if (existing !== undefined)
41
+ throw new Error('[expose-peers] "' + property + '" already exists in the global scope, cannot overwrite');
42
+ }
43
+ `;
44
+ }
45
+
46
+ function toVarName(packageName: string) {
47
+ return camelcase(packageName.replace('@', '__').replace('/', '_'), { pascalCase: true });
48
+ }
@@ -10,4 +10,4 @@ export declare type PreviewUrlParams = {
10
10
  filePath?: string;
11
11
  };
12
12
  export declare type GetCacheControlFunc = (filePath: string, contents: string, mimeType?: string | null) => string | undefined;
13
- export declare function getArtifactFileMiddleware(logger: Logger, getCacheControlFunc?: GetCacheControlFunc): (req: Request<PreviewUrlParams>, res: Response) => Promise<import("express").Response<any>>;
13
+ export declare function getArtifactFileMiddleware(logger: Logger, getCacheControlFunc?: GetCacheControlFunc): (req: Request<PreviewUrlParams>, res: Response) => Promise<import("express").Response<any, Record<string, any>>>;
@@ -5,7 +5,7 @@ export declare const CHUNK_NAMES: {
5
5
  };
6
6
  declare type TemplateEntryOptions = {
7
7
  previewRootPath: string;
8
- peers: string[];
8
+ peers: string | string[];
9
9
  previewModules: {
10
10
  name: string;
11
11
  entry: string;
@@ -47,18 +47,13 @@ function generateTemplateEntries(options) {
47
47
  include = []
48
48
  }) => {
49
49
  previewChunks[name] = {
50
- filename: `${name}.[chunkhash].js`,
51
50
  dependOn: [CHUNK_NAMES.peers, CHUNK_NAMES.previewRoot, ...include],
52
51
  import: entry
53
52
  };
54
53
  });
55
54
  return _objectSpread({
56
- [CHUNK_NAMES.peers]: {
57
- filename: 'peers.[chunkhash].js',
58
- import: options.peers
59
- },
55
+ [CHUNK_NAMES.peers]: options.peers,
60
56
  [CHUNK_NAMES.previewRoot]: {
61
- filename: 'preview-root.[chunkhash].js',
62
57
  dependOn: [CHUNK_NAMES.peers],
63
58
  import: options.previewRootPath
64
59
  }
@@ -1 +1 @@
1
- {"version":3,"names":["CHUNK_NAMES","previewRoot","peers","generateTemplateEntries","options","previewChunks","previewModules","forEach","name","entry","include","filename","dependOn","import","previewRootPath"],"sources":["chunks.ts"],"sourcesContent":["import type { BundlerEntryMap } from '@teambit/bundler';\n\n// TODO - we can remove the need to depenedOn preview-root, if we output chunks as \"jsonp\".\n//\n// for example:\n// config.entry.someJsonpChunk = {\n// import: \"./xxx\",\n// library: { type: \"jsonp\", name: \"foobar\" }\n// }\n// will result in this output:\n// foobar(() => { ...; return MODULE })\n\nexport const CHUNK_NAMES = {\n previewRoot: 'preview-root',\n peers: 'peers',\n};\n\ntype TemplateEntryOptions = {\n previewRootPath: string;\n peers: string[];\n previewModules: {\n name: string;\n entry: string;\n /** other preview modules to includes */\n include?: string[];\n }[];\n};\n\nexport function generateTemplateEntries(options: TemplateEntryOptions): BundlerEntryMap {\n const previewChunks = {};\n options.previewModules.forEach(({ name, entry, include = [] }) => {\n previewChunks[name] = {\n filename: `${name}.[chunkhash].js`,\n dependOn: [CHUNK_NAMES.peers, CHUNK_NAMES.previewRoot, ...include],\n import: entry,\n };\n });\n\n return {\n [CHUNK_NAMES.peers]: {\n filename: 'peers.[chunkhash].js',\n import: options.peers,\n },\n [CHUNK_NAMES.previewRoot]: {\n filename: 'preview-root.[chunkhash].js',\n dependOn: [CHUNK_NAMES.peers],\n import: options.previewRootPath,\n },\n ...previewChunks,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAMA,WAAW,GAAG;EACzBC,WAAW,EAAE,cADY;EAEzBC,KAAK,EAAE;AAFkB,CAApB;;;AAgBA,SAASC,uBAAT,CAAiCC,OAAjC,EAAiF;EACtF,MAAMC,aAAa,GAAG,EAAtB;EACAD,OAAO,CAACE,cAAR,CAAuBC,OAAvB,CAA+B,CAAC;IAAEC,IAAF;IAAQC,KAAR;IAAeC,OAAO,GAAG;EAAzB,CAAD,KAAmC;IAChEL,aAAa,CAACG,IAAD,CAAb,GAAsB;MACpBG,QAAQ,EAAG,GAAEH,IAAK,iBADE;MAEpBI,QAAQ,EAAE,CAACZ,WAAW,CAACE,KAAb,EAAoBF,WAAW,CAACC,WAAhC,EAA6C,GAAGS,OAAhD,CAFU;MAGpBG,MAAM,EAAEJ;IAHY,CAAtB;EAKD,CAND;EAQA;IACE,CAACT,WAAW,CAACE,KAAb,GAAqB;MACnBS,QAAQ,EAAE,sBADS;MAEnBE,MAAM,EAAET,OAAO,CAACF;IAFG,CADvB;IAKE,CAACF,WAAW,CAACC,WAAb,GAA2B;MACzBU,QAAQ,EAAE,6BADe;MAEzBC,QAAQ,EAAE,CAACZ,WAAW,CAACE,KAAb,CAFe;MAGzBW,MAAM,EAAET,OAAO,CAACU;IAHS;EAL7B,GAUKT,aAVL;AAYD"}
1
+ {"version":3,"names":["CHUNK_NAMES","previewRoot","peers","generateTemplateEntries","options","previewChunks","previewModules","forEach","name","entry","include","dependOn","import","previewRootPath"],"sources":["chunks.ts"],"sourcesContent":["import type { BundlerEntryMap } from '@teambit/bundler';\n\n// TODO - we can remove the need to depenedOn preview-root, if we output chunks as \"jsonp\".\n//\n// for example:\n// config.entry.someJsonpChunk = {\n// import: \"./xxx\",\n// library: { type: \"jsonp\", name: \"foobar\" }\n// }\n// will result in this output:\n// foobar(() => { ...; return MODULE })\n\nexport const CHUNK_NAMES = {\n previewRoot: 'preview-root',\n peers: 'peers',\n};\n\ntype TemplateEntryOptions = {\n previewRootPath: string;\n peers: string | string[];\n previewModules: {\n name: string;\n entry: string;\n /** other preview modules to includes */\n include?: string[];\n }[];\n};\n\nexport function generateTemplateEntries(options: TemplateEntryOptions): BundlerEntryMap {\n const previewChunks = {};\n options.previewModules.forEach(({ name, entry, include = [] }) => {\n previewChunks[name] = {\n dependOn: [CHUNK_NAMES.peers, CHUNK_NAMES.previewRoot, ...include],\n import: entry,\n };\n });\n\n return {\n [CHUNK_NAMES.peers]: options.peers,\n [CHUNK_NAMES.previewRoot]: {\n dependOn: [CHUNK_NAMES.peers],\n import: options.previewRootPath,\n },\n ...previewChunks,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAMA,WAAW,GAAG;EACzBC,WAAW,EAAE,cADY;EAEzBC,KAAK,EAAE;AAFkB,CAApB;;;AAgBA,SAASC,uBAAT,CAAiCC,OAAjC,EAAiF;EACtF,MAAMC,aAAa,GAAG,EAAtB;EACAD,OAAO,CAACE,cAAR,CAAuBC,OAAvB,CAA+B,CAAC;IAAEC,IAAF;IAAQC,KAAR;IAAeC,OAAO,GAAG;EAAzB,CAAD,KAAmC;IAChEL,aAAa,CAACG,IAAD,CAAb,GAAsB;MACpBG,QAAQ,EAAE,CAACX,WAAW,CAACE,KAAb,EAAoBF,WAAW,CAACC,WAAhC,EAA6C,GAAGS,OAAhD,CADU;MAEpBE,MAAM,EAAEH;IAFY,CAAtB;EAID,CALD;EAOA;IACE,CAACT,WAAW,CAACE,KAAb,GAAqBE,OAAO,CAACF,KAD/B;IAEE,CAACF,WAAW,CAACC,WAAb,GAA2B;MACzBU,QAAQ,EAAE,CAACX,WAAW,CAACE,KAAb,CADe;MAEzBU,MAAM,EAAER,OAAO,CAACS;IAFS;EAF7B,GAMKR,aANL;AAQD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ function _createPeersLink() {
4
+ const data = require("./create-peers-link");
5
+
6
+ _createPeersLink = function () {
7
+ return data;
8
+ };
9
+
10
+ return data;
11
+ }
12
+
13
+ const guardSnapshot = `function guard(property, expected) {
14
+ var existing = globalObj[property];
15
+
16
+ if (existing === expected && expected !== undefined)
17
+ console.warn('[expose-peers] "' + property + '" already exists in global scope, but with correct value');
18
+ else if (existing !== undefined)
19
+ throw new Error('[expose-peers] "' + property + '" already exists in the global scope, cannot overwrite');
20
+ }`;
21
+ const snapshot = `// @ts-nocheck
22
+ import * as FooBar from "foo-bar";
23
+ import * as BuzQux from "@buz/qux";
24
+
25
+ const globalObj = window;
26
+
27
+ guard("FooBar", FooBar);
28
+ guard("BuzQux", BuzQux);
29
+
30
+ globalObj["FooBar"] = FooBar;
31
+ globalObj["BuzQux"] = BuzQux;
32
+
33
+ ${guardSnapshot}
34
+ `;
35
+ describe('peers link', () => {
36
+ it('should output snapshot', () => {
37
+ const result = (0, _createPeersLink().generatePeerLink)(['foo-bar', '@buz/qux']);
38
+ expect(result).toEqual(snapshot);
39
+ });
40
+ });
41
+
42
+ //# sourceMappingURL=create-peer-link.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["guardSnapshot","snapshot","describe","it","result","generatePeerLink","expect","toEqual"],"sources":["create-peer-link.spec.ts"],"sourcesContent":["import { generatePeerLink } from './create-peers-link';\n\nconst guardSnapshot = `function guard(property, expected) {\n var existing = globalObj[property];\n\n if (existing === expected && expected !== undefined)\n console.warn('[expose-peers] \"' + property + '\" already exists in global scope, but with correct value');\n else if (existing !== undefined)\n throw new Error('[expose-peers] \"' + property + '\" already exists in the global scope, cannot overwrite');\n}`;\n\nconst snapshot = `// @ts-nocheck\nimport * as FooBar from \"foo-bar\";\nimport * as BuzQux from \"@buz/qux\";\n\nconst globalObj = window;\n\nguard(\"FooBar\", FooBar);\nguard(\"BuzQux\", BuzQux);\n\nglobalObj[\"FooBar\"] = FooBar;\nglobalObj[\"BuzQux\"] = BuzQux;\n\n${guardSnapshot}\n`;\n\ndescribe('peers link', () => {\n it('should output snapshot', () => {\n const result = generatePeerLink(['foo-bar', '@buz/qux']);\n\n expect(result).toEqual(snapshot);\n });\n});\n"],"mappings":";;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA,MAAMA,aAAa,GAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,EAPA;AASA,MAAMC,QAAQ,GAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAED,aAAc;AAChB,CAbA;AAeAE,QAAQ,CAAC,YAAD,EAAe,MAAM;EAC3BC,EAAE,CAAC,wBAAD,EAA2B,MAAM;IACjC,MAAMC,MAAM,GAAG,IAAAC,mCAAA,EAAiB,CAAC,SAAD,EAAY,UAAZ,CAAjB,CAAf;IAEAC,MAAM,CAACF,MAAD,CAAN,CAAeG,OAAf,CAAuBN,QAAvB;EACD,CAJC,CAAF;AAKD,CANO,CAAR"}
@@ -0,0 +1,2 @@
1
+ export declare function writePeerLink(peers: string[], workdir: string): Promise<string>;
2
+ export declare function generatePeerLink(peers: string[]): string;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("core-js/modules/es.promise.js");
6
+
7
+ require("core-js/modules/es.regexp.exec.js");
8
+
9
+ require("core-js/modules/es.string.replace.js");
10
+
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ exports.generatePeerLink = generatePeerLink;
15
+ exports.writePeerLink = writePeerLink;
16
+
17
+ function _path() {
18
+ const data = require("path");
19
+
20
+ _path = function () {
21
+ return data;
22
+ };
23
+
24
+ return data;
25
+ }
26
+
27
+ function _fsExtra() {
28
+ const data = require("fs-extra");
29
+
30
+ _fsExtra = function () {
31
+ return data;
32
+ };
33
+
34
+ return data;
35
+ }
36
+
37
+ function _camelcase() {
38
+ const data = _interopRequireDefault(require("camelcase"));
39
+
40
+ _camelcase = function () {
41
+ return data;
42
+ };
43
+
44
+ return data;
45
+ }
46
+
47
+ function _objectHash() {
48
+ const data = _interopRequireDefault(require("object-hash"));
49
+
50
+ _objectHash = function () {
51
+ return data;
52
+ };
53
+
54
+ return data;
55
+ }
56
+
57
+ async function writePeerLink(peers, workdir) {
58
+ const content = generatePeerLink(peers);
59
+ const fullpath = (0, _path().join)(workdir, `peers-link.${(0, _objectHash().default)(content)}.js`);
60
+ await (0, _fsExtra().writeFile)(fullpath, content);
61
+ return fullpath;
62
+ } // TODO - this exposes the packages in the "window" strategy,
63
+ // should use a better strategy like umd, systemjs, or jsonp
64
+
65
+
66
+ function generatePeerLink(peers) {
67
+ if (!peers) return '';
68
+ const links = peers.map(p => ({
69
+ packageName: p,
70
+ varName: toVarName(p)
71
+ }));
72
+ return `// @ts-nocheck
73
+ ${links.map(x => `import * as ${x.varName} from "${x.packageName}"`).join(';\n')};
74
+
75
+ const globalObj = window;
76
+
77
+ ${links.map(({
78
+ varName: localName
79
+ }) => `guard("${localName}", ${localName})`).join(';\n')};
80
+
81
+ ${links.map(x => `globalObj["${x.varName}"] = ${x.varName}`).join(';\n')};
82
+
83
+ function guard(property, expected) {
84
+ var existing = globalObj[property];
85
+
86
+ if (existing === expected && expected !== undefined)
87
+ console.warn('[expose-peers] "' + property + '" already exists in global scope, but with correct value');
88
+ else if (existing !== undefined)
89
+ throw new Error('[expose-peers] "' + property + '" already exists in the global scope, cannot overwrite');
90
+ }
91
+ `;
92
+ }
93
+
94
+ function toVarName(packageName) {
95
+ return (0, _camelcase().default)(packageName.replace('@', '__').replace('/', '_'), {
96
+ pascalCase: true
97
+ });
98
+ }
99
+
100
+ //# sourceMappingURL=create-peers-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["writePeerLink","peers","workdir","content","generatePeerLink","fullpath","join","hash","writeFile","links","map","p","packageName","varName","toVarName","x","localName","camelcase","replace","pascalCase"],"sources":["create-peers-link.ts"],"sourcesContent":["import { join } from 'path';\nimport { writeFile } from 'fs-extra';\nimport camelcase from 'camelcase';\nimport hash from 'object-hash';\n\nexport async function writePeerLink(peers: string[], workdir: string) {\n const content = generatePeerLink(peers);\n const fullpath = join(workdir, `peers-link.${hash(content)}.js`);\n\n await writeFile(fullpath, content);\n\n return fullpath;\n}\n\n// TODO - this exposes the packages in the \"window\" strategy,\n// should use a better strategy like umd, systemjs, or jsonp\n\nexport function generatePeerLink(peers: string[]) {\n if (!peers) return '';\n\n const links = peers.map((p) => ({\n packageName: p,\n varName: toVarName(p),\n }));\n\n return `// @ts-nocheck\n${links.map((x) => `import * as ${x.varName} from \"${x.packageName}\"`).join(';\\n')};\n\nconst globalObj = window;\n\n${links.map(({ varName: localName }) => `guard(\"${localName}\", ${localName})`).join(';\\n')};\n\n${links.map((x) => `globalObj[\"${x.varName}\"] = ${x.varName}`).join(';\\n')};\n\nfunction guard(property, expected) {\n var existing = globalObj[property];\n\n if (existing === expected && expected !== undefined)\n console.warn('[expose-peers] \"' + property + '\" already exists in global scope, but with correct value');\n else if (existing !== undefined)\n throw new Error('[expose-peers] \"' + property + '\" already exists in the global scope, cannot overwrite');\n}\n`;\n}\n\nfunction toVarName(packageName: string) {\n return camelcase(packageName.replace('@', '__').replace('/', '_'), { pascalCase: true });\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEO,eAAeA,aAAf,CAA6BC,KAA7B,EAA8CC,OAA9C,EAA+D;EACpE,MAAMC,OAAO,GAAGC,gBAAgB,CAACH,KAAD,CAAhC;EACA,MAAMI,QAAQ,GAAG,IAAAC,YAAA,EAAKJ,OAAL,EAAe,cAAa,IAAAK,qBAAA,EAAKJ,OAAL,CAAc,KAA1C,CAAjB;EAEA,MAAM,IAAAK,oBAAA,EAAUH,QAAV,EAAoBF,OAApB,CAAN;EAEA,OAAOE,QAAP;AACD,C,CAED;AACA;;;AAEO,SAASD,gBAAT,CAA0BH,KAA1B,EAA2C;EAChD,IAAI,CAACA,KAAL,EAAY,OAAO,EAAP;EAEZ,MAAMQ,KAAK,GAAGR,KAAK,CAACS,GAAN,CAAWC,CAAD,KAAQ;IAC9BC,WAAW,EAAED,CADiB;IAE9BE,OAAO,EAAEC,SAAS,CAACH,CAAD;EAFY,CAAR,CAAV,CAAd;EAKA,OAAQ;AACV,EAAEF,KAAK,CAACC,GAAN,CAAWK,CAAD,IAAQ,eAAcA,CAAC,CAACF,OAAQ,UAASE,CAAC,CAACH,WAAY,GAAjE,EAAqEN,IAArE,CAA0E,KAA1E,CAAiF;AACnF;AACA;AACA;AACA,EAAEG,KAAK,CAACC,GAAN,CAAU,CAAC;IAAEG,OAAO,EAAEG;EAAX,CAAD,KAA6B,UAASA,SAAU,MAAKA,SAAU,GAAzE,EAA6EV,IAA7E,CAAkF,KAAlF,CAAyF;AAC3F;AACA,EAAEG,KAAK,CAACC,GAAN,CAAWK,CAAD,IAAQ,cAAaA,CAAC,CAACF,OAAQ,QAAOE,CAAC,CAACF,OAAQ,EAA1D,EAA6DP,IAA7D,CAAkE,KAAlE,CAAyE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAjBE;AAkBD;;AAED,SAASQ,SAAT,CAAmBF,WAAnB,EAAwC;EACtC,OAAO,IAAAK,oBAAA,EAAUL,WAAW,CAACM,OAAZ,CAAoB,GAApB,EAAyB,IAAzB,EAA+BA,OAA/B,CAAuC,GAAvC,EAA4C,GAA5C,CAAV,EAA4D;IAAEC,UAAU,EAAE;EAAd,CAA5D,CAAP;AACD"}
@@ -16,5 +16,5 @@ export declare class ComponentPreviewRoute implements Route {
16
16
  preview: PreviewMain, logger: Logger);
17
17
  route: string;
18
18
  method: string;
19
- middlewares: ((req: Request<PreviewUrlParams>, res: Response, next: NextFunction) => Promise<void | import("express").Response<any>>)[];
19
+ middlewares: ((req: Request<PreviewUrlParams>, res: Response, next: NextFunction) => Promise<void | import("express").Response<any, Record<string, any>>>)[];
20
20
  }
@@ -113,6 +113,16 @@ function _htmlPlugin() {
113
113
  return data;
114
114
  }
115
115
 
116
+ function _createPeersLink() {
117
+ const data = require("./bundler/create-peers-link");
118
+
119
+ _createPeersLink = function () {
120
+ return data;
121
+ };
122
+
123
+ return data;
124
+ }
125
+
116
126
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
117
127
 
118
128
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -250,8 +260,7 @@ class EnvPreviewTemplateTask {
250
260
  /* It's a path to the root of the host component. */
251
261
  // hostRootDir, handle this
252
262
  hostDependencies: peers,
253
- aliasHostDependencies: true,
254
- exposeHostDependencies: true
263
+ aliasHostDependencies: true
255
264
  };
256
265
  }
257
266
 
@@ -277,8 +286,9 @@ class EnvPreviewTemplateTask {
277
286
  entry: linkFile
278
287
  });
279
288
  });
289
+ const peerLink = await (0, _createPeersLink().writePeerLink)(peers, workDir);
280
290
  const entries = (0, _chunks().generateTemplateEntries)({
281
- peers,
291
+ peers: peerLink,
282
292
  previewRootPath: previewRoot,
283
293
  previewModules: previewEntries
284
294
  });
@@ -1 +1 @@
1
- {"version":3,"names":["GENERATE_ENV_TEMPLATE_TASK_NAME","EnvPreviewTemplateTask","constructor","preview","envs","aspectLoader","dependencyResolver","logger","execute","context","previewDefs","getDefs","htmlConfig","map","previewModule","generateHtmlConfig","dev","originalSeedersIds","capsuleNetwork","originalSeedersCapsules","c","component","id","toString","grouped","Promise","all","components","length","includes","undefined","envDef","getEnvFromComponent","env","bundlingStrategy","getBundlingStrategy","name","target","getEnvTargetFromComponent","shouldUseDefaultBundler","envToGetBundler","getEnvsEnvDefinition","groupEnvId","targets","push","isEmpty","componentsResults","runBundlerForGroups","groups","bundlerContext","Object","assign","entry","development","metaData","initiator","envId","bundlerResults","mapSeries","entries","targetsGroup","bundler","getTemplateBundler","bundlerResult","run","results","computeResults","flatten","isCoreEnv","envComponent","envPreviewConfig","getEnvPreviewConfig","peers","getPeerDependenciesListFromEnv","capsule","graphCapsules","getCapsule","Error","previewRoot","writePreviewRuntime","generateEntries","splitComponentBundle","workDir","path","outputPath","computeOutputPath","existsSync","mkdirpSync","html","chunking","splitChunks","hostDependencies","aliasHostDependencies","exposeHostDependencies","previewModules","getPreviewModules","previewEntries","rest","linkFile","writeLink","ComponentMap","create","generateTemplateEntries","previewRootPath","allResults","result","errors","err","message","warning","warnings","startTime","endTime","artifacts","getArtifactDef","modules","compact","def","renderTemplatePathByEnv","prefix","include","join","getArtifactDirectory","CAPSULE_ARTIFACTS_DIR","globPatterns","rootDir"],"sources":["env-preview-template.task.ts"],"sourcesContent":["import {\n BuildContext,\n BuiltTaskResult,\n BuildTask,\n TaskLocation,\n ComponentResult,\n CAPSULE_ARTIFACTS_DIR,\n} from '@teambit/builder';\nimport mapSeries from 'p-map-series';\nimport { Component, ComponentMap } from '@teambit/component';\nimport { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { Bundler, BundlerContext, BundlerHtmlConfig, BundlerResult, Target } from '@teambit/bundler';\nimport type { EnvDefinition, Environment, EnvsMain } from '@teambit/envs';\nimport { join } from 'path';\nimport { compact, flatten, isEmpty } from 'lodash';\nimport { Logger } from '@teambit/logger';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { existsSync, mkdirpSync } from 'fs-extra';\nimport type { PreviewMain } from './preview.main.runtime';\nimport { generateTemplateEntries } from './bundler/chunks';\nimport { generateHtmlConfig } from './bundler/html-plugin';\n\nexport type ModuleExpose = {\n name: string;\n path: string;\n include?: string[];\n};\n\ntype TargetsGroup = {\n env: Environment;\n envToGetBundler: Environment;\n targets: Target[];\n};\ntype TargetsGroupMap = {\n [envId: string]: TargetsGroup;\n};\n\nexport const GENERATE_ENV_TEMPLATE_TASK_NAME = 'GenerateEnvTemplate';\n\nexport class EnvPreviewTemplateTask implements BuildTask {\n aspectId = 'teambit.preview/preview';\n name = GENERATE_ENV_TEMPLATE_TASK_NAME;\n location: TaskLocation = 'end';\n // readonly dependencies = [CompilerAspect.id];\n\n constructor(\n private preview: PreviewMain,\n private envs: EnvsMain,\n private aspectLoader: AspectLoaderMain,\n private dependencyResolver: DependencyResolverMain,\n private logger: Logger\n ) {}\n\n async execute(context: BuildContext): Promise<BuiltTaskResult> {\n const previewDefs = this.preview.getDefs();\n const htmlConfig = previewDefs.map((previewModule) => generateHtmlConfig(previewModule, { dev: context.dev }));\n const originalSeedersIds = context.capsuleNetwork.originalSeedersCapsules.map((c) => c.component.id.toString());\n const grouped: TargetsGroupMap = {};\n await Promise.all(\n context.components.map(async (component) => {\n // Do not run over other components in the graph. it make the process much longer with no need\n if (originalSeedersIds && originalSeedersIds.length && !originalSeedersIds.includes(component.id.toString())) {\n return undefined;\n }\n const envDef = this.envs.getEnvFromComponent(component);\n if (!envDef) return undefined;\n const env = envDef.env;\n const bundlingStrategy = this.preview.getBundlingStrategy(envDef.env);\n if (bundlingStrategy.name === 'env') {\n return undefined;\n }\n const target = await this.getEnvTargetFromComponent(context, component, envDef, htmlConfig);\n if (!target) return undefined;\n const shouldUseDefaultBundler = this.shouldUseDefaultBundler(envDef);\n let envToGetBundler = this.envs.getEnvsEnvDefinition().env;\n let groupEnvId = 'default';\n if (!shouldUseDefaultBundler) {\n envToGetBundler = env;\n groupEnvId = envDef.id;\n }\n if (!grouped[groupEnvId]) {\n grouped[groupEnvId] = {\n env,\n envToGetBundler,\n targets: [target],\n };\n } else {\n grouped[groupEnvId].targets.push(target);\n }\n return undefined;\n })\n );\n if (isEmpty(grouped)) {\n return { componentsResults: [] };\n }\n\n return this.runBundlerForGroups(context, grouped);\n }\n\n private async runBundlerForGroups(context: BuildContext, groups: TargetsGroupMap): Promise<BuiltTaskResult> {\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets: [],\n entry: [],\n development: context.dev,\n metaData: {\n initiator: `${GENERATE_ENV_TEMPLATE_TASK_NAME} task`,\n envId: context.id,\n },\n });\n const bundlerResults = await mapSeries(Object.entries(groups), async ([, targetsGroup]) => {\n bundlerContext.targets = targetsGroup.targets;\n const bundler: Bundler = await targetsGroup.envToGetBundler.getTemplateBundler(bundlerContext);\n const bundlerResult = await bundler.run();\n return bundlerResult;\n });\n\n const results = await this.computeResults(bundlerContext, flatten(bundlerResults));\n return results;\n }\n\n private shouldUseDefaultBundler(envDef: EnvDefinition): boolean {\n if (this.aspectLoader.isCoreEnv(envDef.id) && envDef.id !== 'teambit.react/react-native') return true;\n const env = envDef.env;\n if (env.getTemplateBundler && typeof env.getTemplateBundler === 'function') return false;\n return true;\n }\n\n private async getEnvTargetFromComponent(\n context: BuildContext,\n envComponent: Component,\n envDef: EnvDefinition,\n htmlConfig: BundlerHtmlConfig[]\n ): Promise<Target | undefined> {\n const env = envDef.env;\n const envPreviewConfig = this.preview.getEnvPreviewConfig(envDef.env);\n\n const peers = await this.dependencyResolver.getPeerDependenciesListFromEnv(env);\n // const module = await this.getPreviewModule(envComponent);\n // const entries = Object.keys(module).map((key) => module.exposes[key]);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(envComponent.id);\n if (!capsule) throw new Error('no capsule found');\n // Passing here the env itself to make sure it's preview runtime will be part of the preview root file\n // that's needed to make sure the providers register there are running correctly\n const previewRoot = await this.preview.writePreviewRuntime(context, [envComponent.id.toString()]);\n const entries = await this.generateEntries({\n envDef,\n splitComponentBundle: envPreviewConfig.splitComponentBundle ?? false,\n workDir: capsule.path,\n peers,\n previewRoot,\n });\n\n const outputPath = this.computeOutputPath(context, envComponent);\n if (!existsSync(outputPath)) mkdirpSync(outputPath);\n\n return {\n peers,\n html: htmlConfig,\n entries,\n chunking: { splitChunks: true },\n components: [envComponent],\n outputPath,\n /* It's a path to the root of the host component. */\n // hostRootDir, handle this\n hostDependencies: peers,\n aliasHostDependencies: true,\n exposeHostDependencies: true,\n };\n }\n\n private async generateEntries({\n previewRoot,\n workDir,\n peers,\n envDef,\n splitComponentBundle,\n }: {\n previewRoot: string;\n workDir: string;\n peers: string[];\n envDef: EnvDefinition;\n splitComponentBundle: boolean;\n }) {\n const previewModules = await this.getPreviewModules(envDef);\n const previewEntries = previewModules.map(({ name, path, ...rest }) => {\n const linkFile = this.preview.writeLink(name, ComponentMap.create([]), path, workDir, splitComponentBundle);\n\n return { name, path, ...rest, entry: linkFile };\n });\n\n const entries = generateTemplateEntries({ peers, previewRootPath: previewRoot, previewModules: previewEntries });\n return entries;\n }\n\n async computeResults(context: BundlerContext, results: BundlerResult[]) {\n const allResults = results.map((result) => {\n const componentsResults: ComponentResult[] = result.components.map((component) => {\n return {\n component,\n errors: result.errors.map((err) => (typeof err === 'string' ? err : err.message)),\n warning: result.warnings,\n startTime: result.startTime,\n endTime: result.endTime,\n };\n });\n return componentsResults;\n });\n\n const componentsResults = flatten(allResults);\n\n const artifacts = getArtifactDef();\n\n return {\n componentsResults,\n artifacts,\n };\n }\n\n private async getPreviewModules(envDef: EnvDefinition): Promise<ModuleExpose[]> {\n const previewDefs = this.preview.getDefs();\n\n const modules = compact(\n await Promise.all(\n previewDefs.map(async (def) => {\n if (!def.renderTemplatePathByEnv) return undefined;\n return {\n name: def.prefix,\n path: await def.renderTemplatePathByEnv(envDef.env),\n include: def.include,\n };\n })\n )\n );\n\n return modules;\n }\n\n private computeOutputPath(context: BuildContext, component: Component) {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) throw new Error('no capsule found');\n return join(capsule.path, getArtifactDirectory());\n }\n}\n\nexport function getArtifactDirectory() {\n return join(CAPSULE_ARTIFACTS_DIR, 'env-template');\n}\n\nexport function getArtifactDef() {\n return [\n {\n name: 'env-template',\n globPatterns: ['**'],\n rootDir: getArtifactDirectory(),\n },\n ];\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["GENERATE_ENV_TEMPLATE_TASK_NAME","EnvPreviewTemplateTask","constructor","preview","envs","aspectLoader","dependencyResolver","logger","execute","context","previewDefs","getDefs","htmlConfig","map","previewModule","generateHtmlConfig","dev","originalSeedersIds","capsuleNetwork","originalSeedersCapsules","c","component","id","toString","grouped","Promise","all","components","length","includes","undefined","envDef","getEnvFromComponent","env","bundlingStrategy","getBundlingStrategy","name","target","getEnvTargetFromComponent","shouldUseDefaultBundler","envToGetBundler","getEnvsEnvDefinition","groupEnvId","targets","push","isEmpty","componentsResults","runBundlerForGroups","groups","bundlerContext","Object","assign","entry","development","metaData","initiator","envId","bundlerResults","mapSeries","entries","targetsGroup","bundler","getTemplateBundler","bundlerResult","run","results","computeResults","flatten","isCoreEnv","envComponent","envPreviewConfig","getEnvPreviewConfig","peers","getPeerDependenciesListFromEnv","capsule","graphCapsules","getCapsule","Error","previewRoot","writePreviewRuntime","generateEntries","splitComponentBundle","workDir","path","outputPath","computeOutputPath","existsSync","mkdirpSync","html","chunking","splitChunks","hostDependencies","aliasHostDependencies","previewModules","getPreviewModules","previewEntries","rest","linkFile","writeLink","ComponentMap","create","peerLink","writePeerLink","generateTemplateEntries","previewRootPath","allResults","result","errors","err","message","warning","warnings","startTime","endTime","artifacts","getArtifactDef","modules","compact","def","renderTemplatePathByEnv","prefix","include","join","getArtifactDirectory","CAPSULE_ARTIFACTS_DIR","globPatterns","rootDir"],"sources":["env-preview-template.task.ts"],"sourcesContent":["import {\n BuildContext,\n BuiltTaskResult,\n BuildTask,\n TaskLocation,\n ComponentResult,\n CAPSULE_ARTIFACTS_DIR,\n} from '@teambit/builder';\nimport mapSeries from 'p-map-series';\nimport { Component, ComponentMap } from '@teambit/component';\nimport { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { Bundler, BundlerContext, BundlerHtmlConfig, BundlerResult, Target } from '@teambit/bundler';\nimport type { EnvDefinition, Environment, EnvsMain } from '@teambit/envs';\nimport { join } from 'path';\nimport { compact, flatten, isEmpty } from 'lodash';\nimport { Logger } from '@teambit/logger';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { existsSync, mkdirpSync } from 'fs-extra';\nimport type { PreviewMain } from './preview.main.runtime';\nimport { generateTemplateEntries } from './bundler/chunks';\nimport { generateHtmlConfig } from './bundler/html-plugin';\nimport { writePeerLink } from './bundler/create-peers-link';\n\nexport type ModuleExpose = {\n name: string;\n path: string;\n include?: string[];\n};\n\ntype TargetsGroup = {\n env: Environment;\n envToGetBundler: Environment;\n targets: Target[];\n};\ntype TargetsGroupMap = {\n [envId: string]: TargetsGroup;\n};\n\nexport const GENERATE_ENV_TEMPLATE_TASK_NAME = 'GenerateEnvTemplate';\n\nexport class EnvPreviewTemplateTask implements BuildTask {\n aspectId = 'teambit.preview/preview';\n name = GENERATE_ENV_TEMPLATE_TASK_NAME;\n location: TaskLocation = 'end';\n // readonly dependencies = [CompilerAspect.id];\n\n constructor(\n private preview: PreviewMain,\n private envs: EnvsMain,\n private aspectLoader: AspectLoaderMain,\n private dependencyResolver: DependencyResolverMain,\n private logger: Logger\n ) {}\n\n async execute(context: BuildContext): Promise<BuiltTaskResult> {\n const previewDefs = this.preview.getDefs();\n const htmlConfig = previewDefs.map((previewModule) => generateHtmlConfig(previewModule, { dev: context.dev }));\n const originalSeedersIds = context.capsuleNetwork.originalSeedersCapsules.map((c) => c.component.id.toString());\n const grouped: TargetsGroupMap = {};\n await Promise.all(\n context.components.map(async (component) => {\n // Do not run over other components in the graph. it make the process much longer with no need\n if (originalSeedersIds && originalSeedersIds.length && !originalSeedersIds.includes(component.id.toString())) {\n return undefined;\n }\n const envDef = this.envs.getEnvFromComponent(component);\n if (!envDef) return undefined;\n const env = envDef.env;\n const bundlingStrategy = this.preview.getBundlingStrategy(envDef.env);\n if (bundlingStrategy.name === 'env') {\n return undefined;\n }\n const target = await this.getEnvTargetFromComponent(context, component, envDef, htmlConfig);\n if (!target) return undefined;\n const shouldUseDefaultBundler = this.shouldUseDefaultBundler(envDef);\n let envToGetBundler = this.envs.getEnvsEnvDefinition().env;\n let groupEnvId = 'default';\n if (!shouldUseDefaultBundler) {\n envToGetBundler = env;\n groupEnvId = envDef.id;\n }\n if (!grouped[groupEnvId]) {\n grouped[groupEnvId] = {\n env,\n envToGetBundler,\n targets: [target],\n };\n } else {\n grouped[groupEnvId].targets.push(target);\n }\n return undefined;\n })\n );\n if (isEmpty(grouped)) {\n return { componentsResults: [] };\n }\n\n return this.runBundlerForGroups(context, grouped);\n }\n\n private async runBundlerForGroups(context: BuildContext, groups: TargetsGroupMap): Promise<BuiltTaskResult> {\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets: [],\n entry: [],\n development: context.dev,\n metaData: {\n initiator: `${GENERATE_ENV_TEMPLATE_TASK_NAME} task`,\n envId: context.id,\n },\n });\n const bundlerResults = await mapSeries(Object.entries(groups), async ([, targetsGroup]) => {\n bundlerContext.targets = targetsGroup.targets;\n const bundler: Bundler = await targetsGroup.envToGetBundler.getTemplateBundler(bundlerContext);\n const bundlerResult = await bundler.run();\n return bundlerResult;\n });\n\n const results = await this.computeResults(bundlerContext, flatten(bundlerResults));\n return results;\n }\n\n private shouldUseDefaultBundler(envDef: EnvDefinition): boolean {\n if (this.aspectLoader.isCoreEnv(envDef.id) && envDef.id !== 'teambit.react/react-native') return true;\n const env = envDef.env;\n if (env.getTemplateBundler && typeof env.getTemplateBundler === 'function') return false;\n return true;\n }\n\n private async getEnvTargetFromComponent(\n context: BuildContext,\n envComponent: Component,\n envDef: EnvDefinition,\n htmlConfig: BundlerHtmlConfig[]\n ): Promise<Target | undefined> {\n const env = envDef.env;\n const envPreviewConfig = this.preview.getEnvPreviewConfig(envDef.env);\n\n const peers = await this.dependencyResolver.getPeerDependenciesListFromEnv(env);\n // const module = await this.getPreviewModule(envComponent);\n // const entries = Object.keys(module).map((key) => module.exposes[key]);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(envComponent.id);\n if (!capsule) throw new Error('no capsule found');\n // Passing here the env itself to make sure it's preview runtime will be part of the preview root file\n // that's needed to make sure the providers register there are running correctly\n const previewRoot = await this.preview.writePreviewRuntime(context, [envComponent.id.toString()]);\n const entries = await this.generateEntries({\n envDef,\n splitComponentBundle: envPreviewConfig.splitComponentBundle ?? false,\n workDir: capsule.path,\n peers,\n previewRoot,\n });\n\n const outputPath = this.computeOutputPath(context, envComponent);\n if (!existsSync(outputPath)) mkdirpSync(outputPath);\n\n return {\n peers,\n html: htmlConfig,\n entries,\n chunking: { splitChunks: true },\n components: [envComponent],\n outputPath,\n /* It's a path to the root of the host component. */\n // hostRootDir, handle this\n hostDependencies: peers,\n aliasHostDependencies: true,\n };\n }\n\n private async generateEntries({\n previewRoot,\n workDir,\n peers,\n envDef,\n splitComponentBundle,\n }: {\n previewRoot: string;\n workDir: string;\n peers: string[];\n envDef: EnvDefinition;\n splitComponentBundle: boolean;\n }) {\n const previewModules = await this.getPreviewModules(envDef);\n const previewEntries = previewModules.map(({ name, path, ...rest }) => {\n const linkFile = this.preview.writeLink(name, ComponentMap.create([]), path, workDir, splitComponentBundle);\n\n return { name, path, ...rest, entry: linkFile };\n });\n const peerLink = await writePeerLink(peers, workDir);\n\n const entries = generateTemplateEntries({\n peers: peerLink,\n previewRootPath: previewRoot,\n previewModules: previewEntries,\n });\n return entries;\n }\n\n async computeResults(context: BundlerContext, results: BundlerResult[]) {\n const allResults = results.map((result) => {\n const componentsResults: ComponentResult[] = result.components.map((component) => {\n return {\n component,\n errors: result.errors.map((err) => (typeof err === 'string' ? err : err.message)),\n warning: result.warnings,\n startTime: result.startTime,\n endTime: result.endTime,\n };\n });\n return componentsResults;\n });\n\n const componentsResults = flatten(allResults);\n\n const artifacts = getArtifactDef();\n\n return {\n componentsResults,\n artifacts,\n };\n }\n\n private async getPreviewModules(envDef: EnvDefinition): Promise<ModuleExpose[]> {\n const previewDefs = this.preview.getDefs();\n\n const modules = compact(\n await Promise.all(\n previewDefs.map(async (def) => {\n if (!def.renderTemplatePathByEnv) return undefined;\n return {\n name: def.prefix,\n path: await def.renderTemplatePathByEnv(envDef.env),\n include: def.include,\n };\n })\n )\n );\n\n return modules;\n }\n\n private computeOutputPath(context: BuildContext, component: Component) {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) throw new Error('no capsule found');\n return join(capsule.path, getArtifactDirectory());\n }\n}\n\nexport function getArtifactDirectory() {\n return join(CAPSULE_ARTIFACTS_DIR, 'env-template');\n}\n\nexport function getArtifactDef() {\n return [\n {\n name: 'env-template',\n globPatterns: ['**'],\n rootDir: getArtifactDirectory(),\n },\n ];\n}\n"],"mappings":"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"}
@@ -21,6 +21,6 @@ export declare class EnvTemplateRoute implements RegisteredComponentRoute {
21
21
  route: string;
22
22
  method: string;
23
23
  resolveComponent: boolean;
24
- middlewares: (((req: Request<import("./artifact-file-middleware").PreviewUrlParams, any, any, import("qs").ParsedQs>, res: import("express").Response<any>) => Promise<import("express").Response<any>>) | ((req: Request<UrlParams>, res: Response, next: NextFunction) => Promise<void | import("express").Response<any>>))[];
24
+ middlewares: (((req: Request<import("./artifact-file-middleware").PreviewUrlParams, any, any, import("qs").ParsedQs, Record<string, any>>, res: import("express").Response<any, Record<string, any>>) => Promise<import("express").Response<any, Record<string, any>>>) | ((req: Request<UrlParams>, res: Response, next: NextFunction) => Promise<void | import("express").Response<any, Record<string, any>>>))[];
25
25
  }
26
26
  export {};
@@ -19,22 +19,26 @@ function _toolboxPath() {
19
19
 
20
20
  // :TODO refactor to building an AST and generate source code based on it.
21
21
  function generateLink(prefix, componentMap, mainModule, isSplitComponentBundle = false) {
22
+ const links = componentMap.toArray().map(([component, modulePath], compIdx) => ({
23
+ componentIdentifier: component.id.fullName,
24
+ modules: modulePath.map((path, pathIdx) => ({
25
+ varName: moduleVarName(compIdx, pathIdx),
26
+ resolveFrom: (0, _toolboxPath().toWindowsCompatiblePath)(path)
27
+ }))
28
+ }));
22
29
  return `
23
30
  import { linkModules } from '${(0, _toolboxPath().toWindowsCompatiblePath)(require.resolve('./preview.preview.runtime'))}';
24
- import harmony from '${(0, _toolboxPath().toWindowsCompatiblePath)(require.resolve('@teambit/harmony'))}';
25
31
  ${mainModule ? `import * as mainModule from '${(0, _toolboxPath().toWindowsCompatiblePath)(mainModule)}';` : 'const mainModule = {};'}
26
32
 
27
- ${// generate imports:
28
- componentMap.toArray().map(([, modulePath], compIdx) => modulePath.map((path, pathIdx) => `import * as ${moduleVarName(compIdx, pathIdx)} from '${(0, _toolboxPath().toWindowsCompatiblePath)(path)}'`).join('\n')).join('\n')}
33
+ ${links.map(link => link.modules.map(module => `import * as ${module.varName} from "${module.resolveFrom}";`).join('\n')).filter(line => line !== '') // prevent empty lines
34
+ .join('\n')}
29
35
 
30
36
  linkModules('${prefix}', {
31
37
  mainModule,
32
38
  isSplitComponentBundle: ${isSplitComponentBundle},
33
39
  componentMap: {
34
- ${// use imports:
35
- componentMap.toArray().map(([component, modulePaths], compIdx) => {
36
- return ` '${component.id.fullName}': [${modulePaths.map((_, pathIdx) => moduleVarName(compIdx, pathIdx)).join(', ')}]`;
37
- }).join(',\n')}
40
+ ${links // must include all components, including empty
41
+ .map(link => ` "${link.componentIdentifier}": [${link.modules.map(module => module.varName).join(', ')}]`).join(',\n')}
38
42
  }
39
43
  });
40
44
  `;
@@ -1 +1 @@
1
- {"version":3,"names":["generateLink","prefix","componentMap","mainModule","isSplitComponentBundle","toWindowsCompatiblePath","require","resolve","toArray","map","modulePath","compIdx","path","pathIdx","moduleVarName","join","component","modulePaths","id","fullName","_","componentIdx","fileIdx"],"sources":["generate-link.ts"],"sourcesContent":["import { toWindowsCompatiblePath } from '@teambit/toolbox.path.to-windows-compatible-path';\nimport type { ComponentMap } from '@teambit/component';\n\n// :TODO refactor to building an AST and generate source code based on it.\nexport function generateLink(\n prefix: string,\n componentMap: ComponentMap<string[]>,\n mainModule?: string,\n isSplitComponentBundle = false\n): string {\n return `\nimport { linkModules } from '${toWindowsCompatiblePath(require.resolve('./preview.preview.runtime'))}';\nimport harmony from '${toWindowsCompatiblePath(require.resolve('@teambit/harmony'))}';\n${mainModule ? `import * as mainModule from '${toWindowsCompatiblePath(mainModule)}';` : 'const mainModule = {};'}\n\n${\n // generate imports:\n componentMap\n .toArray()\n .map(([, modulePath], compIdx) =>\n modulePath\n .map(\n (path, pathIdx) => `import * as ${moduleVarName(compIdx, pathIdx)} from '${toWindowsCompatiblePath(path)}'`\n )\n .join('\\n')\n )\n .join('\\n')\n}\n\nlinkModules('${prefix}', {\n mainModule,\n isSplitComponentBundle: ${isSplitComponentBundle},\n componentMap: {\n${\n // use imports:\n componentMap\n .toArray()\n .map(([component, modulePaths], compIdx) => {\n return ` '${component.id.fullName}': [${modulePaths\n .map((_, pathIdx) => moduleVarName(compIdx, pathIdx))\n .join(', ')}]`;\n })\n .join(',\\n')\n}\n }\n});\n`;\n}\n\nfunction moduleVarName(componentIdx: number, fileIdx: number) {\n return `file_${componentIdx}_${fileIdx}`;\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;AACO,SAASA,YAAT,CACLC,MADK,EAELC,YAFK,EAGLC,UAHK,EAILC,sBAAsB,GAAG,KAJpB,EAKG;EACR,OAAQ;AACV,+BAA+B,IAAAC,sCAAA,EAAwBC,OAAO,CAACC,OAAR,CAAgB,2BAAhB,CAAxB,CAAsE;AACrG,uBAAuB,IAAAF,sCAAA,EAAwBC,OAAO,CAACC,OAAR,CAAgB,kBAAhB,CAAxB,CAA6D;AACpF,EAAEJ,UAAU,GAAI,gCAA+B,IAAAE,sCAAA,EAAwBF,UAAxB,CAAoC,IAAvE,GAA6E,wBAAyB;AAClH;AACA,EACE;EACAD,YAAY,CACTM,OADH,GAEGC,GAFH,CAEO,CAAC,GAAGC,UAAH,CAAD,EAAiBC,OAAjB,KACHD,UAAU,CACPD,GADH,CAEI,CAACG,IAAD,EAAOC,OAAP,KAAoB,eAAcC,aAAa,CAACH,OAAD,EAAUE,OAAV,CAAmB,UAAS,IAAAR,sCAAA,EAAwBO,IAAxB,CAA8B,GAF7G,EAIGG,IAJH,CAIQ,IAJR,CAHJ,EASGA,IATH,CASQ,IATR,CAUD;AACD;AACA,eAAed,MAAO;AACtB;AACA,4BAA4BG,sBAAuB;AACnD;AACA,EACE;EACAF,YAAY,CACTM,OADH,GAEGC,GAFH,CAEO,CAAC,CAACO,SAAD,EAAYC,WAAZ,CAAD,EAA2BN,OAA3B,KAAuC;IAC1C,OAAQ,QAAOK,SAAS,CAACE,EAAV,CAAaC,QAAS,OAAMF,WAAW,CACnDR,GADwC,CACpC,CAACW,CAAD,EAAIP,OAAJ,KAAgBC,aAAa,CAACH,OAAD,EAAUE,OAAV,CADO,EAExCE,IAFwC,CAEnC,IAFmC,CAE7B,GAFd;EAGD,CANH,EAOGA,IAPH,CAOQ,KAPR,CAQD;AACD;AACA;AACA,CApCE;AAqCD;;AAED,SAASD,aAAT,CAAuBO,YAAvB,EAA6CC,OAA7C,EAA8D;EAC5D,OAAQ,QAAOD,YAAa,IAAGC,OAAQ,EAAvC;AACD"}
1
+ {"version":3,"names":["generateLink","prefix","componentMap","mainModule","isSplitComponentBundle","links","toArray","map","component","modulePath","compIdx","componentIdentifier","id","fullName","modules","path","pathIdx","varName","moduleVarName","resolveFrom","toWindowsCompatiblePath","require","resolve","link","module","join","filter","line","componentIdx","fileIdx"],"sources":["generate-link.ts"],"sourcesContent":["import { toWindowsCompatiblePath } from '@teambit/toolbox.path.to-windows-compatible-path';\nimport type { ComponentMap } from '@teambit/component';\n\n// :TODO refactor to building an AST and generate source code based on it.\nexport function generateLink(\n prefix: string,\n componentMap: ComponentMap<string[]>,\n mainModule?: string,\n isSplitComponentBundle = false\n): string {\n const links = componentMap.toArray().map(([component, modulePath], compIdx) => ({\n componentIdentifier: component.id.fullName,\n modules: modulePath.map((path, pathIdx) => ({\n varName: moduleVarName(compIdx, pathIdx),\n resolveFrom: toWindowsCompatiblePath(path),\n })),\n }));\n\n return `\nimport { linkModules } from '${toWindowsCompatiblePath(require.resolve('./preview.preview.runtime'))}';\n${mainModule ? `import * as mainModule from '${toWindowsCompatiblePath(mainModule)}';` : 'const mainModule = {};'}\n\n${links\n .map((link) => link.modules.map((module) => `import * as ${module.varName} from \"${module.resolveFrom}\";`).join('\\n'))\n .filter((line) => line !== '') // prevent empty lines\n .join('\\n')}\n\nlinkModules('${prefix}', {\n mainModule,\n isSplitComponentBundle: ${isSplitComponentBundle},\n componentMap: {\n${links\n // must include all components, including empty\n .map((link) => ` \"${link.componentIdentifier}\": [${link.modules.map((module) => module.varName).join(', ')}]`)\n .join(',\\n')}\n }\n});\n`;\n}\n\nfunction moduleVarName(componentIdx: number, fileIdx: number) {\n return `file_${componentIdx}_${fileIdx}`;\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAGA;AACO,SAASA,YAAT,CACLC,MADK,EAELC,YAFK,EAGLC,UAHK,EAILC,sBAAsB,GAAG,KAJpB,EAKG;EACR,MAAMC,KAAK,GAAGH,YAAY,CAACI,OAAb,GAAuBC,GAAvB,CAA2B,CAAC,CAACC,SAAD,EAAYC,UAAZ,CAAD,EAA0BC,OAA1B,MAAuC;IAC9EC,mBAAmB,EAAEH,SAAS,CAACI,EAAV,CAAaC,QAD4C;IAE9EC,OAAO,EAAEL,UAAU,CAACF,GAAX,CAAe,CAACQ,IAAD,EAAOC,OAAP,MAAoB;MAC1CC,OAAO,EAAEC,aAAa,CAACR,OAAD,EAAUM,OAAV,CADoB;MAE1CG,WAAW,EAAE,IAAAC,sCAAA,EAAwBL,IAAxB;IAF6B,CAApB,CAAf;EAFqE,CAAvC,CAA3B,CAAd;EAQA,OAAQ;AACV,+BAA+B,IAAAK,sCAAA,EAAwBC,OAAO,CAACC,OAAR,CAAgB,2BAAhB,CAAxB,CAAsE;AACrG,EAAEnB,UAAU,GAAI,gCAA+B,IAAAiB,sCAAA,EAAwBjB,UAAxB,CAAoC,IAAvE,GAA6E,wBAAyB;AAClH;AACA,EAAEE,KAAK,CACJE,GADD,CACMgB,IAAD,IAAUA,IAAI,CAACT,OAAL,CAAaP,GAAb,CAAkBiB,MAAD,IAAa,eAAcA,MAAM,CAACP,OAAQ,UAASO,MAAM,CAACL,WAAY,IAAvF,EAA4FM,IAA5F,CAAiG,IAAjG,CADf,EAECC,MAFD,CAESC,IAAD,IAAUA,IAAI,KAAK,EAF3B,EAE+B;EAF/B,CAGCF,IAHD,CAGM,IAHN,CAGY;AACd;AACA,eAAexB,MAAO;AACtB;AACA,4BAA4BG,sBAAuB;AACnD;AACA,EAAEC,KAAK,CACL;EADK,CAEJE,GAFD,CAEMgB,IAAD,IAAW,QAAOA,IAAI,CAACZ,mBAAoB,OAAMY,IAAI,CAACT,OAAL,CAAaP,GAAb,CAAkBiB,MAAD,IAAYA,MAAM,CAACP,OAApC,EAA6CQ,IAA7C,CAAkD,IAAlD,CAAwD,GAF9G,EAGCA,IAHD,CAGM,KAHN,CAGa;AACf;AACA;AACA,CAnBE;AAoBD;;AAED,SAASP,aAAT,CAAuBU,YAAvB,EAA6CC,OAA7C,EAA8D;EAC5D,OAAQ,QAAOD,YAAa,IAAGC,OAAQ,EAAvC;AACD"}
@@ -0,0 +1,6 @@
1
+ export declare function loadScript({ src }: {
2
+ src: string;
3
+ }): Promise<void>;
4
+ export declare function loadLink({ href }: {
5
+ href: string;
6
+ }): Promise<void>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.promise.js");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.loadLink = loadLink;
9
+ exports.loadScript = loadScript;
10
+
11
+ function loadScript({
12
+ src
13
+ }) {
14
+ return new Promise((resolve, reject) => {
15
+ const script = document.createElement('script');
16
+ script.setAttribute('defer', 'defer');
17
+ script.src = src;
18
+
19
+ script.onload = () => resolve();
20
+
21
+ script.onerror = (message, _, _1, _2, error) => reject(error || new Error(`[preview.preview] failed to load script: ${message}`));
22
+
23
+ document.head.appendChild(script);
24
+ });
25
+ }
26
+
27
+ function loadLink({
28
+ href
29
+ }) {
30
+ return new Promise((resolve, reject) => {
31
+ const link = document.createElement('link');
32
+ if (href.endsWith('.css')) link.setAttribute('rel', 'stylesheet');
33
+ link.setAttribute('href', href);
34
+
35
+ link.onload = () => resolve();
36
+
37
+ link.onerror = (message, _, _1, _2, error) => reject(error || new Error(`[preview.preview] failed to load link: ${message}`));
38
+
39
+ document.head.appendChild(link);
40
+ });
41
+ }
42
+
43
+ //# sourceMappingURL=html-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["loadScript","src","Promise","resolve","reject","script","document","createElement","setAttribute","onload","onerror","message","_","_1","_2","error","Error","head","appendChild","loadLink","href","link","endsWith"],"sources":["html-utils.tsx"],"sourcesContent":["export function loadScript({ src }: { src: string }) {\n return new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n\n script.setAttribute('defer', 'defer');\n script.src = src;\n\n script.onload = () => resolve();\n script.onerror = (message, _, _1, _2, error) =>\n reject(error || new Error(`[preview.preview] failed to load script: ${message}`));\n\n document.head.appendChild(script);\n });\n}\n\nexport function loadLink({ href }: { href: string }) {\n return new Promise<void>((resolve, reject) => {\n const link = document.createElement('link');\n\n if (href.endsWith('.css')) link.setAttribute('rel', 'stylesheet');\n link.setAttribute('href', href);\n\n link.onload = () => resolve();\n link.onerror = (message, _, _1, _2, error) =>\n reject(error || new Error(`[preview.preview] failed to load link: ${message}`));\n\n document.head.appendChild(link);\n });\n}\n"],"mappings":";;;;;;;;;;AAAO,SAASA,UAAT,CAAoB;EAAEC;AAAF,CAApB,EAA8C;EACnD,OAAO,IAAIC,OAAJ,CAAkB,CAACC,OAAD,EAAUC,MAAV,KAAqB;IAC5C,MAAMC,MAAM,GAAGC,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;IAEAF,MAAM,CAACG,YAAP,CAAoB,OAApB,EAA6B,OAA7B;IACAH,MAAM,CAACJ,GAAP,GAAaA,GAAb;;IAEAI,MAAM,CAACI,MAAP,GAAgB,MAAMN,OAAO,EAA7B;;IACAE,MAAM,CAACK,OAAP,GAAiB,CAACC,OAAD,EAAUC,CAAV,EAAaC,EAAb,EAAiBC,EAAjB,EAAqBC,KAArB,KACfX,MAAM,CAACW,KAAK,IAAI,IAAIC,KAAJ,CAAW,4CAA2CL,OAAQ,EAA9D,CAAV,CADR;;IAGAL,QAAQ,CAACW,IAAT,CAAcC,WAAd,CAA0Bb,MAA1B;EACD,CAXM,CAAP;AAYD;;AAEM,SAASc,QAAT,CAAkB;EAAEC;AAAF,CAAlB,EAA8C;EACnD,OAAO,IAAIlB,OAAJ,CAAkB,CAACC,OAAD,EAAUC,MAAV,KAAqB;IAC5C,MAAMiB,IAAI,GAAGf,QAAQ,CAACC,aAAT,CAAuB,MAAvB,CAAb;IAEA,IAAIa,IAAI,CAACE,QAAL,CAAc,MAAd,CAAJ,EAA2BD,IAAI,CAACb,YAAL,CAAkB,KAAlB,EAAyB,YAAzB;IAC3Ba,IAAI,CAACb,YAAL,CAAkB,MAAlB,EAA0BY,IAA1B;;IAEAC,IAAI,CAACZ,MAAL,GAAc,MAAMN,OAAO,EAA3B;;IACAkB,IAAI,CAACX,OAAL,GAAe,CAACC,OAAD,EAAUC,CAAV,EAAaC,EAAb,EAAiBC,EAAjB,EAAqBC,KAArB,KACbX,MAAM,CAACW,KAAK,IAAI,IAAIC,KAAJ,CAAW,0CAAyCL,OAAQ,EAA5D,CAAV,CADR;;IAGAL,QAAQ,CAACW,IAAT,CAAcC,WAAd,CAA0BG,IAA1B;EACD,CAXM,CAAP;AAYD"}
@@ -15,5 +15,5 @@ export declare class PreviewAssetsRoute implements Route {
15
15
  preview: PreviewMain, logger: Logger);
16
16
  route: string;
17
17
  method: string;
18
- middlewares: ((req: Request, res: Response) => Promise<import("express").Response<any>>)[];
18
+ middlewares: ((req: Request, res: Response) => Promise<import("express").Response<any, Record<string, any>>>)[];
19
19
  }