@teambit/preview 1.0.465 → 1.0.467
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.
- package/artifacts/__bit_junit.xml +2 -2
- package/artifacts/preview/teambit_preview_preview-preview.js +1 -1
- package/artifacts/schema.json +1545 -779
- package/dist/generate-preview.cmd.d.ts +32 -0
- package/dist/generate-preview.cmd.js +72 -0
- package/dist/generate-preview.cmd.js.map +1 -0
- package/dist/{preview-1731900045011.js → preview-1731986398447.js} +2 -2
- package/dist/preview.main.runtime.d.ts +17 -5
- package/dist/preview.main.runtime.js +119 -10
- package/dist/preview.main.runtime.js.map +1 -1
- package/dist/preview.service.d.ts +24 -2
- package/dist/preview.service.js +203 -1
- package/dist/preview.service.js.map +1 -1
- package/dist/serve-preview.cmd.d.ts +21 -0
- package/dist/serve-preview.cmd.js +29 -0
- package/dist/serve-preview.cmd.js.map +1 -0
- package/dist/strategies/component-strategy.d.ts +1 -3
- package/dist/strategies/component-strategy.js +1 -2
- package/dist/strategies/component-strategy.js.map +1 -1
- package/generate-preview.cmd.tsx +50 -0
- package/package.json +25 -23
- package/preview.service.tsx +188 -2
- package/serve-preview.cmd.tsx +21 -0
- package/strategies/component-strategy.ts +0 -2
package/dist/preview.service.js
CHANGED
@@ -4,11 +4,54 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.PreviewService = void 0;
|
7
|
+
function _filenamify() {
|
8
|
+
const data = _interopRequireDefault(require("filenamify"));
|
9
|
+
_filenamify = function () {
|
10
|
+
return data;
|
11
|
+
};
|
12
|
+
return data;
|
13
|
+
}
|
14
|
+
function _bitError() {
|
15
|
+
const data = require("@teambit/bit-error");
|
16
|
+
_bitError = function () {
|
17
|
+
return data;
|
18
|
+
};
|
19
|
+
return data;
|
20
|
+
}
|
21
|
+
function _path() {
|
22
|
+
const data = require("path");
|
23
|
+
_path = function () {
|
24
|
+
return data;
|
25
|
+
};
|
26
|
+
return data;
|
27
|
+
}
|
28
|
+
function _fsExtra() {
|
29
|
+
const data = require("fs-extra");
|
30
|
+
_fsExtra = function () {
|
31
|
+
return data;
|
32
|
+
};
|
33
|
+
return data;
|
34
|
+
}
|
35
|
+
function _htmlTemplate() {
|
36
|
+
const data = require("./bundler/html-template");
|
37
|
+
_htmlTemplate = function () {
|
38
|
+
return data;
|
39
|
+
};
|
40
|
+
return data;
|
41
|
+
}
|
42
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
43
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
44
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
7
45
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
8
46
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
9
47
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
48
|
+
const LOCAL_PREVIEW_DIR = 'local-preview';
|
10
49
|
class PreviewService {
|
11
|
-
constructor() {
|
50
|
+
constructor(preview, logger, dependencyResolver, scope) {
|
51
|
+
this.preview = preview;
|
52
|
+
this.logger = logger;
|
53
|
+
this.dependencyResolver = dependencyResolver;
|
54
|
+
this.scope = scope;
|
12
55
|
_defineProperty(this, "name", 'preview');
|
13
56
|
}
|
14
57
|
transform(env, envContext) {
|
@@ -26,6 +69,165 @@ class PreviewService {
|
|
26
69
|
}
|
27
70
|
return transformMap;
|
28
71
|
}
|
72
|
+
async run(context, options) {
|
73
|
+
const defs = this.preview.getDefs();
|
74
|
+
const onlyCompositionDef = defs.filter(def => def.prefix === 'compositions');
|
75
|
+
if (!onlyCompositionDef || onlyCompositionDef.length === 0) {
|
76
|
+
throw new (_bitError().BitError)('unable to find composition definition');
|
77
|
+
}
|
78
|
+
const components = context.components;
|
79
|
+
const componentIds = components.map(c => c.id);
|
80
|
+
const envDirName = this.getEnvDirName(context.id);
|
81
|
+
const outputPath = this.getEnvLocalPreviewDir(options.name, envDirName);
|
82
|
+
const linkFiles = await this.preview.updateLinkFiles(onlyCompositionDef, context.components, context);
|
83
|
+
const dirPath = (0, _path().join)(this.preview.tempFolder, context.id);
|
84
|
+
await this.addComponentsToLocalMapping(options.name, envDirName, componentIds);
|
85
|
+
const previewRootEntry = this.generateLocalPreviewRoot(dirPath);
|
86
|
+
const entries = [...linkFiles, previewRootEntry];
|
87
|
+
const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(context.envDefinition.env);
|
88
|
+
const hostRootDir = context.envRuntime.envAspectDefinition?.aspectPath;
|
89
|
+
const targets = this.getTargets({
|
90
|
+
entries,
|
91
|
+
components,
|
92
|
+
outputPath,
|
93
|
+
peers,
|
94
|
+
hostRootDir
|
95
|
+
});
|
96
|
+
const url = `/preview/${context.envRuntime.id}`;
|
97
|
+
const htmlConfig = this.generateHtmlConfig();
|
98
|
+
// @ts-ignore we don't really need the full bundler type here, we should
|
99
|
+
// change the original type to only have the relevant fields
|
100
|
+
const bundlerContext = Object.assign(context, {
|
101
|
+
targets,
|
102
|
+
compress: false,
|
103
|
+
html: [htmlConfig],
|
104
|
+
components,
|
105
|
+
entry: [],
|
106
|
+
publicPath: '/',
|
107
|
+
hostRootDir,
|
108
|
+
hostDependencies: peers,
|
109
|
+
aliasHostDependencies: true,
|
110
|
+
rootPath: url,
|
111
|
+
development: true,
|
112
|
+
metaData: {
|
113
|
+
initiator: `Generate local preview`,
|
114
|
+
envId: context.id
|
115
|
+
}
|
116
|
+
});
|
117
|
+
const bundler = await context.env.getBundler(bundlerContext);
|
118
|
+
await bundler.run();
|
119
|
+
const res = componentIds.reduce((acc, id) => {
|
120
|
+
return _objectSpread(_objectSpread({}, acc), {}, {
|
121
|
+
[id.fullName]: outputPath
|
122
|
+
});
|
123
|
+
}, {});
|
124
|
+
return res;
|
125
|
+
}
|
126
|
+
getEnvDirName(envId) {
|
127
|
+
return (0, _filenamify().default)(envId, {
|
128
|
+
replacement: '_'
|
129
|
+
});
|
130
|
+
}
|
131
|
+
getLocalPreviewDir(name) {
|
132
|
+
const dirPath = this.scope.legacyScope.tmp.composePath(`${LOCAL_PREVIEW_DIR}/${name}`);
|
133
|
+
return dirPath;
|
134
|
+
}
|
135
|
+
getEnvLocalPreviewDir(name, envDirName) {
|
136
|
+
const localPreviewDir = this.getLocalPreviewDir(name);
|
137
|
+
return (0, _path().join)(localPreviewDir, envDirName);
|
138
|
+
}
|
139
|
+
getComponentsPreviewPath(name) {
|
140
|
+
const dirPath = this.getLocalPreviewDir(name);
|
141
|
+
const filePath = (0, _path().join)(dirPath, 'components-preview.json');
|
142
|
+
return filePath;
|
143
|
+
}
|
144
|
+
async readComponentsPreview(name) {
|
145
|
+
const filePath = this.getComponentsPreviewPath(name);
|
146
|
+
return (0, _fsExtra().readJsonSync)(filePath);
|
147
|
+
}
|
148
|
+
async addComponentsToLocalMapping(name, envDirPath, compIds) {
|
149
|
+
const filePath = this.getComponentsPreviewPath(name);
|
150
|
+
// const idsString = compIds.map((id) => id.toString());
|
151
|
+
const idsString = compIds.map(id => id.fullName);
|
152
|
+
const exists = await (0, _fsExtra().pathExists)(filePath);
|
153
|
+
// let newFile = { [envDirPath]: idsString };
|
154
|
+
let newFile = idsString.reduce((acc, id) => {
|
155
|
+
return _objectSpread(_objectSpread({}, acc), {}, {
|
156
|
+
[id]: envDirPath
|
157
|
+
});
|
158
|
+
}, {});
|
159
|
+
if (exists) {
|
160
|
+
const existingFile = (0, _fsExtra().readJsonSync)(filePath);
|
161
|
+
newFile = _objectSpread(_objectSpread({}, existingFile), newFile);
|
162
|
+
}
|
163
|
+
(0, _fsExtra().outputFileSync)(filePath, JSON.stringify(newFile, null, 2));
|
164
|
+
return newFile;
|
165
|
+
}
|
166
|
+
generateLocalPreviewRoot(dir) {
|
167
|
+
const contents = `const previewModules = window.__bit_preview_modules;
|
168
|
+
const queryString = window.location.search;
|
169
|
+
const urlParams = new URLSearchParams(queryString);
|
170
|
+
const location = window.location.pathname;
|
171
|
+
const splitLocation = location.split('/').filter((x) => x);
|
172
|
+
// Remove message part
|
173
|
+
splitLocation.shift();
|
174
|
+
// const comp = urlParams.get('comp');
|
175
|
+
const comp = splitLocation.join('/');
|
176
|
+
const compositions = previewModules.get("compositions");
|
177
|
+
const mounter = compositions.modulesMap.default;
|
178
|
+
const componentMap = compositions.componentMap;
|
179
|
+
const foundComponent = componentMap[comp];
|
180
|
+
if (!foundComponent) {
|
181
|
+
throw new Error('component not found');
|
182
|
+
}
|
183
|
+
let compositionName = urlParams.get('name');
|
184
|
+
if (!compositionName) {
|
185
|
+
const allCompositions = Object.keys(foundComponent[0]);
|
186
|
+
compositionName = allCompositions[0];
|
187
|
+
}
|
188
|
+
const composition = foundComponent[0][compositionName];
|
189
|
+
if (!composition) {
|
190
|
+
throw new Error('composition not found');
|
191
|
+
}
|
192
|
+
let func = mounter.default;
|
193
|
+
if (typeof func !== 'function') {
|
194
|
+
func = func.default;
|
195
|
+
}
|
196
|
+
func(composition);
|
197
|
+
`;
|
198
|
+
const previewRootPath = (0, _path().resolve)((0, _path().join)(dir, `preview.entry.js`));
|
199
|
+
|
200
|
+
// if (!existsSync(previewRootPath)) {
|
201
|
+
(0, _fsExtra().outputFileSync)(previewRootPath, contents);
|
202
|
+
// }
|
203
|
+
return previewRootPath;
|
204
|
+
}
|
205
|
+
generateHtmlConfig() {
|
206
|
+
const config = {
|
207
|
+
title: 'Preview',
|
208
|
+
templateContent: (0, _htmlTemplate().html)('Preview'),
|
209
|
+
minify: false,
|
210
|
+
filename: 'index.html'
|
211
|
+
};
|
212
|
+
return config;
|
213
|
+
}
|
214
|
+
getTargets({
|
215
|
+
entries,
|
216
|
+
components,
|
217
|
+
outputPath,
|
218
|
+
peers,
|
219
|
+
hostRootDir
|
220
|
+
}) {
|
221
|
+
return [{
|
222
|
+
entries,
|
223
|
+
components,
|
224
|
+
outputPath,
|
225
|
+
hostRootDir,
|
226
|
+
hostDependencies: peers,
|
227
|
+
externalizeHostDependencies: false,
|
228
|
+
aliasHostDependencies: true
|
229
|
+
}];
|
230
|
+
}
|
29
231
|
}
|
30
232
|
exports.PreviewService = PreviewService;
|
31
233
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["PreviewService","constructor","_defineProperty","transform","env","envContext","preview","undefined","transformMap","getAdditionalHostDependencies","getHostDependencies","bind","getMounter","getDocsTemplate","getPreviewConfig","getTemplateBundler","context","exports"],"sources":["preview.service.tsx"],"sourcesContent":["import { EnvService, Env, EnvContext, ServiceTransformationMap } from '@teambit/envs';\nimport { EnvPreviewConfig } from './preview.main.runtime';\n\ntype PreviewTransformationMap = ServiceTransformationMap & {\n /**\n * Returns a paths to a function which mounts a given component to DOM\n * Required for `bit start` & `bit build`\n */\n getMounter?: () => string;\n\n /**\n * Returns a path to a docs template.\n * Required for `bit start` & `bit build`\n */\n getDocsTemplate?: () => string;\n\n /**\n * Returns a list of additional host dependencies\n * this list will be provided as globals on the window after bit preview bundle\n * by default bit will merge this list with the peers from the getDependencies function\n */\n getAdditionalHostDependencies?: () => string[] | Promise<string[]>;\n\n /**\n * Returns preview config like the strategy name to use when bundling the components for the preview\n */\n getPreviewConfig?: () => EnvPreviewConfig;\n};\n\nexport class PreviewService implements EnvService<any> {\n name = 'preview';\n\n transform(env: Env, envContext: EnvContext): PreviewTransformationMap | undefined {\n // Old env\n if (!env?.preview) return undefined;\n const preview = env.preview()(envContext);\n\n const transformMap: PreviewTransformationMap = {\n getAdditionalHostDependencies: preview.getHostDependencies.bind(preview),\n getMounter: preview.getMounter.bind(preview),\n getDocsTemplate: preview.getDocsTemplate.bind(preview),\n getPreviewConfig: preview.getPreviewConfig.bind(preview),\n };\n\n if (preview.getTemplateBundler) {\n transformMap.getTemplateBundler = (context) => preview.getTemplateBundler(context)(envContext);\n }\n\n return transformMap;\n }\n}\n"],"mappings":";;;;;;;;;AA6BO,MAAMA,cAAc,CAA4B;EAAAC,YAAA;IAAAC,eAAA,eAC9C,SAAS;EAAA;EAEhBC,SAASA,CAACC,GAAQ,EAAEC,UAAsB,EAAwC;IAChF;IACA,IAAI,CAACD,GAAG,EAAEE,OAAO,EAAE,OAAOC,SAAS;IACnC,MAAMD,OAAO,GAAGF,GAAG,CAACE,OAAO,CAAC,CAAC,CAACD,UAAU,CAAC;IAEzC,MAAMG,YAAsC,GAAG;MAC7CC,6BAA6B,EAAEH,OAAO,CAACI,mBAAmB,CAACC,IAAI,CAACL,OAAO,CAAC;MACxEM,UAAU,EAAEN,OAAO,CAACM,UAAU,CAACD,IAAI,CAACL,OAAO,CAAC;MAC5CO,eAAe,EAAEP,OAAO,CAACO,eAAe,CAACF,IAAI,CAACL,OAAO,CAAC;MACtDQ,gBAAgB,EAAER,OAAO,CAACQ,gBAAgB,CAACH,IAAI,CAACL,OAAO;IACzD,CAAC;IAED,IAAIA,OAAO,CAACS,kBAAkB,EAAE;MAC9BP,YAAY,CAACO,kBAAkB,GAAIC,OAAO,IAAKV,OAAO,CAACS,kBAAkB,CAACC,OAAO,CAAC,CAACX,UAAU,CAAC;IAChG;IAEA,OAAOG,YAAY;EACrB;AACF;AAACS,OAAA,CAAAjB,cAAA,GAAAA,cAAA","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_filenamify","data","_interopRequireDefault","require","_bitError","_path","_fsExtra","_htmlTemplate","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","LOCAL_PREVIEW_DIR","PreviewService","constructor","preview","logger","dependencyResolver","scope","transform","env","envContext","undefined","transformMap","getAdditionalHostDependencies","getHostDependencies","bind","getMounter","getDocsTemplate","getPreviewConfig","getTemplateBundler","context","run","options","defs","getDefs","onlyCompositionDef","def","prefix","BitError","components","componentIds","map","c","id","envDirName","getEnvDirName","outputPath","getEnvLocalPreviewDir","name","linkFiles","updateLinkFiles","dirPath","join","tempFolder","addComponentsToLocalMapping","previewRootEntry","generateLocalPreviewRoot","entries","peers","getPreviewHostDependenciesFromEnv","envDefinition","hostRootDir","envRuntime","envAspectDefinition","aspectPath","targets","getTargets","url","htmlConfig","generateHtmlConfig","bundlerContext","assign","compress","html","entry","publicPath","hostDependencies","aliasHostDependencies","rootPath","development","metaData","initiator","envId","bundler","getBundler","res","reduce","acc","fullName","filenamify","replacement","getLocalPreviewDir","legacyScope","tmp","composePath","localPreviewDir","getComponentsPreviewPath","filePath","readComponentsPreview","readJsonSync","envDirPath","compIds","idsString","exists","pathExists","newFile","existingFile","outputFileSync","JSON","stringify","dir","contents","previewRootPath","resolve","config","title","templateContent","minify","filename","externalizeHostDependencies","exports"],"sources":["preview.service.tsx"],"sourcesContent":["import filenamify from 'filenamify';\nimport { EnvService, ExecutionContext, Env, EnvContext, ServiceTransformationMap } from '@teambit/envs';\nimport { EnvPreviewConfig, PreviewMain } from './preview.main.runtime';\nimport { BitError } from '@teambit/bit-error';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { Bundler, BundlerContext, BundlerHtmlConfig, Target } from '@teambit/bundler';\nimport { Component, ComponentID } from '@teambit/component';\nimport { join, resolve } from 'path';\nimport { outputFileSync, pathExists, readJsonSync } from 'fs-extra';\nimport { ScopeMain } from '@teambit/scope';\nimport { html } from './bundler/html-template';\n\ntype PreviewTransformationMap = ServiceTransformationMap & {\n /**\n * Returns a paths to a function which mounts a given component to DOM\n * Required for `bit start` & `bit build`\n */\n getMounter?: () => string;\n\n /**\n * Returns a path to a docs template.\n * Required for `bit start` & `bit build`\n */\n getDocsTemplate?: () => string;\n\n /**\n * Returns a list of additional host dependencies\n * this list will be provided as globals on the window after bit preview bundle\n * by default bit will merge this list with the peers from the getDependencies function\n */\n getAdditionalHostDependencies?: () => string[] | Promise<string[]>;\n\n /**\n * Returns preview config like the strategy name to use when bundling the components for the preview\n */\n getPreviewConfig?: () => EnvPreviewConfig;\n};\n\nconst LOCAL_PREVIEW_DIR = 'local-preview';\n\nexport class PreviewService implements EnvService<any> {\n name = 'preview';\n\n constructor(\n private preview: PreviewMain,\n private logger: Logger,\n private dependencyResolver: DependencyResolverMain,\n private scope: ScopeMain\n ) {}\n\n transform(env: Env, envContext: EnvContext): PreviewTransformationMap | undefined {\n // Old env\n if (!env?.preview) return undefined;\n const preview = env.preview()(envContext);\n\n const transformMap: PreviewTransformationMap = {\n getAdditionalHostDependencies: preview.getHostDependencies.bind(preview),\n getMounter: preview.getMounter.bind(preview),\n getDocsTemplate: preview.getDocsTemplate.bind(preview),\n getPreviewConfig: preview.getPreviewConfig.bind(preview),\n };\n\n if (preview.getTemplateBundler) {\n transformMap.getTemplateBundler = (context) => preview.getTemplateBundler(context)(envContext);\n }\n\n return transformMap;\n }\n\n async run(context: ExecutionContext, options: { name: string }): Promise<any> {\n const defs = this.preview.getDefs();\n const onlyCompositionDef = defs.filter((def) => def.prefix === 'compositions');\n if (!onlyCompositionDef || onlyCompositionDef.length === 0) {\n throw new BitError('unable to find composition definition');\n }\n const components = context.components;\n const componentIds = components.map((c) => c.id);\n const envDirName = this.getEnvDirName(context.id);\n const outputPath = this.getEnvLocalPreviewDir(options.name, envDirName);\n const linkFiles = await this.preview.updateLinkFiles(onlyCompositionDef, context.components, context);\n const dirPath = join(this.preview.tempFolder, context.id);\n await this.addComponentsToLocalMapping(options.name, envDirName, componentIds);\n const previewRootEntry = this.generateLocalPreviewRoot(dirPath);\n\n const entries = [...linkFiles, previewRootEntry];\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(context.envDefinition.env);\n const hostRootDir = context.envRuntime.envAspectDefinition?.aspectPath;\n const targets = this.getTargets({ entries, components, outputPath, peers, hostRootDir });\n const url = `/preview/${context.envRuntime.id}`;\n const htmlConfig = this.generateHtmlConfig();\n // @ts-ignore we don't really need the full bundler type here, we should\n // change the original type to only have the relevant fields\n const bundlerContext: BundlerContext = Object.assign(context, {\n targets,\n compress: false,\n html: [htmlConfig],\n components,\n entry: [],\n publicPath: '/',\n hostRootDir,\n hostDependencies: peers,\n aliasHostDependencies: true,\n rootPath: url,\n development: true,\n metaData: {\n initiator: `Generate local preview`,\n envId: context.id,\n },\n });\n\n const bundler: Bundler = await context.env.getBundler(bundlerContext);\n await bundler.run();\n const res = componentIds.reduce((acc, id) => {\n return { ...acc, [id.fullName]: outputPath };\n }, {});\n return res;\n }\n\n getEnvDirName(envId: string): string {\n return filenamify(envId, { replacement: '_' });\n }\n\n getLocalPreviewDir(name: string) {\n const dirPath = this.scope.legacyScope.tmp.composePath(`${LOCAL_PREVIEW_DIR}/${name}`);\n return dirPath;\n }\n\n getEnvLocalPreviewDir(name: string, envDirName: string) {\n const localPreviewDir = this.getLocalPreviewDir(name);\n return join(localPreviewDir, envDirName);\n }\n\n getComponentsPreviewPath(name: string) {\n const dirPath = this.getLocalPreviewDir(name);\n const filePath = join(dirPath, 'components-preview.json');\n return filePath;\n }\n\n async readComponentsPreview(name: string) {\n const filePath = this.getComponentsPreviewPath(name);\n return readJsonSync(filePath);\n }\n\n async addComponentsToLocalMapping(name: string, envDirPath: string, compIds: ComponentID[]) {\n const filePath = this.getComponentsPreviewPath(name);\n // const idsString = compIds.map((id) => id.toString());\n const idsString = compIds.map((id) => id.fullName);\n const exists = await pathExists(filePath);\n // let newFile = { [envDirPath]: idsString };\n let newFile = idsString.reduce((acc, id) => {\n return { ...acc, [id]: envDirPath };\n }, {});\n if (exists) {\n const existingFile = readJsonSync(filePath);\n newFile = { ...existingFile, ...newFile };\n }\n outputFileSync(filePath, JSON.stringify(newFile, null, 2));\n return newFile;\n }\n\n generateLocalPreviewRoot(dir: string) {\n const contents = `const previewModules = window.__bit_preview_modules;\nconst queryString = window.location.search;\nconst urlParams = new URLSearchParams(queryString);\nconst location = window.location.pathname;\nconst splitLocation = location.split('/').filter((x) => x);\n// Remove message part\nsplitLocation.shift();\n// const comp = urlParams.get('comp');\nconst comp = splitLocation.join('/');\nconst compositions = previewModules.get(\"compositions\");\nconst mounter = compositions.modulesMap.default;\nconst componentMap = compositions.componentMap;\nconst foundComponent = componentMap[comp];\nif (!foundComponent) {\n throw new Error('component not found');\n}\nlet compositionName = urlParams.get('name');\nif (!compositionName) {\n const allCompositions = Object.keys(foundComponent[0]);\n compositionName = allCompositions[0];\n}\nconst composition = foundComponent[0][compositionName];\nif (!composition) {\n throw new Error('composition not found');\n}\nlet func = mounter.default;\nif (typeof func !== 'function') {\n func = func.default;\n}\nfunc(composition);\n `;\n const previewRootPath = resolve(join(dir, `preview.entry.js`));\n\n // if (!existsSync(previewRootPath)) {\n outputFileSync(previewRootPath, contents);\n // }\n return previewRootPath;\n }\n\n generateHtmlConfig() {\n const config: BundlerHtmlConfig = {\n title: 'Preview',\n templateContent: html('Preview'),\n minify: false,\n filename: 'index.html',\n };\n return config;\n }\n\n private getTargets({\n entries,\n components,\n outputPath,\n peers,\n hostRootDir,\n }: {\n entries: string[];\n components: Component[];\n outputPath: string;\n peers?: string[];\n hostRootDir: string;\n }): Target[] {\n return [\n {\n entries,\n components,\n outputPath,\n hostRootDir,\n hostDependencies: peers,\n externalizeHostDependencies: false,\n aliasHostDependencies: true,\n },\n ];\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { Command, CommandOptions } from '@teambit/cli';
|
2
|
+
import type { PreviewMain } from './preview.main.runtime';
|
3
|
+
export declare class ServePreviewCmd implements Command {
|
4
|
+
/**
|
5
|
+
* access to the extension instance.
|
6
|
+
*/
|
7
|
+
private preview;
|
8
|
+
name: string;
|
9
|
+
description: string;
|
10
|
+
group: string;
|
11
|
+
options: CommandOptions;
|
12
|
+
private: boolean;
|
13
|
+
constructor(
|
14
|
+
/**
|
15
|
+
* access to the extension instance.
|
16
|
+
*/
|
17
|
+
preview: PreviewMain);
|
18
|
+
wait(args: any, options: {
|
19
|
+
port: number;
|
20
|
+
}): Promise<void>;
|
21
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.ServePreviewCmd = void 0;
|
7
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
8
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
9
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
10
|
+
class ServePreviewCmd {
|
11
|
+
constructor(
|
12
|
+
/**
|
13
|
+
* access to the extension instance.
|
14
|
+
*/
|
15
|
+
preview) {
|
16
|
+
this.preview = preview;
|
17
|
+
_defineProperty(this, "name", 'serve-preview');
|
18
|
+
_defineProperty(this, "description", 'serve local preview bundle for components');
|
19
|
+
_defineProperty(this, "group", 'development');
|
20
|
+
_defineProperty(this, "options", [['p', 'port [port]', 'port to run the server on']]);
|
21
|
+
_defineProperty(this, "private", true);
|
22
|
+
}
|
23
|
+
async wait(args, options) {
|
24
|
+
await this.preview.serveLocalPreview(options);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
exports.ServePreviewCmd = ServePreviewCmd;
|
28
|
+
|
29
|
+
//# sourceMappingURL=serve-preview.cmd.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["ServePreviewCmd","constructor","preview","_defineProperty","wait","args","options","serveLocalPreview","exports"],"sources":["serve-preview.cmd.tsx"],"sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport type { PreviewMain } from './preview.main.runtime';\n\nexport class ServePreviewCmd implements Command {\n name = 'serve-preview';\n description = 'serve local preview bundle for components';\n group = 'development';\n options = [['p', 'port [port]', 'port to run the server on']] as CommandOptions;\n private = true;\n\n constructor(\n /**\n * access to the extension instance.\n */\n private preview: PreviewMain\n ) {}\n\n async wait(args, options: { port: number }) {\n await this.preview.serveLocalPreview(options);\n }\n}\n"],"mappings":";;;;;;;;;AAGO,MAAMA,eAAe,CAAoB;EAO9CC,WAAWA;EACT;AACJ;AACA;EACYC,OAAoB,EAC5B;IAAA,KADQA,OAAoB,GAApBA,OAAoB;IAAAC,eAAA,eAVvB,eAAe;IAAAA,eAAA,sBACR,2CAA2C;IAAAA,eAAA,gBACjD,aAAa;IAAAA,eAAA,kBACX,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,2BAA2B,CAAC,CAAC;IAAAA,eAAA,kBACnD,IAAI;EAOX;EAEH,MAAMC,IAAIA,CAACC,IAAI,EAAEC,OAAyB,EAAE;IAC1C,MAAM,IAAI,CAACJ,OAAO,CAACK,iBAAiB,CAACD,OAAO,CAAC;EAC/C;AACF;AAACE,OAAA,CAAAR,eAAA,GAAAA,eAAA","ignoreList":[]}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import { Component } from '@teambit/component';
|
2
2
|
import { ComponentResult } from '@teambit/builder';
|
3
|
-
import type { PkgMain } from '@teambit/pkg';
|
4
3
|
import type { DependencyResolverMain } from '@teambit/dependency-resolver';
|
5
4
|
import { Logger } from '@teambit/logger';
|
6
5
|
import type { BundlerResult, BundlerContext, Target } from '@teambit/bundler';
|
@@ -23,11 +22,10 @@ type ComponentEntry = {
|
|
23
22
|
*/
|
24
23
|
export declare class ComponentBundlingStrategy implements BundlingStrategy {
|
25
24
|
private preview;
|
26
|
-
private pkg;
|
27
25
|
private dependencyResolver;
|
28
26
|
private logger;
|
29
27
|
name: string;
|
30
|
-
constructor(preview: PreviewMain,
|
28
|
+
constructor(preview: PreviewMain, dependencyResolver: DependencyResolverMain, logger: Logger);
|
31
29
|
computeTargets(context: ComputeTargetsContext, previewDefs: PreviewDefinition[]): Promise<Target[]>;
|
32
30
|
computeComponentEntry(previewDefs: PreviewDefinition[], component: Component, context: ComputeTargetsContext): Promise<ComponentEntry>;
|
33
31
|
private getComponentChunkId;
|
@@ -66,9 +66,8 @@ const COMPONENT_STRATEGY_ARTIFACT_NAME = exports.COMPONENT_STRATEGY_ARTIFACT_NAM
|
|
66
66
|
* bundles all components in a given env into the same bundle.
|
67
67
|
*/
|
68
68
|
class ComponentBundlingStrategy {
|
69
|
-
constructor(preview,
|
69
|
+
constructor(preview, dependencyResolver, logger) {
|
70
70
|
this.preview = preview;
|
71
|
-
this.pkg = pkg;
|
72
71
|
this.dependencyResolver = dependencyResolver;
|
73
72
|
this.logger = logger;
|
74
73
|
_defineProperty(this, "name", 'component');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_path","data","require","_fsExtra","_lodash","_builder","_bitError","_generateComponentLink","_exceptions","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","PREVIEW_CHUNK_SUFFIX","exports","COMPONENT_CHUNK_SUFFIX","PREVIEW_CHUNK_FILENAME_SUFFIX","COMPONENT_CHUNK_FILENAME_SUFFIX","COMPONENT_STRATEGY_SIZE_KEY_NAME","COMPONENT_STRATEGY_ARTIFACT_NAME","ComponentBundlingStrategy","constructor","preview","pkg","dependencyResolver","logger","computeTargets","context","previewDefs","outputPath","getOutputPath","existsSync","mkdirpSync","origComponents","capsuleNetwork","originalSeedersCapsules","map","capsule","component","entriesArr","Promise","all","computeComponentEntry","chunkSize","config","maxChunkSize","chunks","chunk","peers","getPreviewHostDependenciesFromEnv","envDefinition","env","targets","currentChunk","entries","components","componentDirectoryMap","forEach","entry","assign","push","id","toString","componentDir","hostRootDir","envRuntime","envAspectDefinition","aspectPath","hostDependencies","aliasHostDependencies","externalizeHostDependencies","componentPreviewPath","computePaths","componentPath","getPaths","mainFile","graphCapsules","getCapsule","path","componentPreview","getComponentChunkId","splitComponentBundle","toStringWithoutVersion","undefined","filename","getComponentChunkFileName","fsCompatible","ignoreVersion","import","dependOn","library","name","type","componentId","idstr","suffix","getAssetAbsolutePath","asset","join","getAssetFilename","split","copyAssetsToCapsules","result","files","findAssetsForComponent","assets","entriesAssetsMap","artifactDirFullPath","getArtifactDirectory","filePath","PreviewOutputFileNotFound","destFilePath","dirname","fs","copyFileSync","componentEntryId","componentPreviewEntryId","componentFiles","componentAuxiliaryFiles","auxiliaryAssets","componentPreviewFiles","componentPreviewAuxiliaryFiles","concat","CAPSULE_ARTIFACTS_DIR","computeComponentMetadata","file","UNKNOWN","basename","warn","size","compressedSize","filesTotalSize","assetsSize","compressedTotalFiles","compressedAssetsSize","assetsTotalSize","auxiliaryAssetsSize","compressedTotalAssets","compressedAuxiliaryAssetsSize","totalSize","compressedTotal","metadata","totalFiles","totalAssets","total","computeResults","results","componentsResults","flatten","computeTargetResult","artifacts","getArtifactDef","isEmpty","errors","err","message","warning","warnings","startTime","endTime","globPatterns","rootDir","getDirName","envName","replace","resolve","capsulesRootDir","compiler","getCompiler","getDistPathBySrcPath","relative","getComponentOutputPath","capsulePath","distDir","getDistDir","defs","BitError","moduleMapsPromise","previewDef","moduleMap","getModuleMap","getMetadata","maybeFiles","get","prefix","paths","compiledPaths","moduleMaps","contents","generateComponentLink","targetDir","writeLinkContents"],"sources":["component-strategy.ts"],"sourcesContent":["import { join, resolve, basename, dirname } from 'path';\nimport { existsSync, mkdirpSync } from 'fs-extra';\nimport { Component } from '@teambit/component';\nimport { ComponentID } from '@teambit/component-id';\nimport { flatten, isEmpty, chunk } from 'lodash';\nimport { Compiler } from '@teambit/compiler';\nimport type { AbstractVinyl } from '@teambit/component.sources';\nimport type { Capsule } from '@teambit/isolator';\nimport { CAPSULE_ARTIFACTS_DIR, ComponentResult } from '@teambit/builder';\nimport type { PkgMain } from '@teambit/pkg';\nimport { BitError } from '@teambit/bit-error';\nimport type { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport type { BundlerResult, BundlerContext, Asset, BundlerEntryMap, EntriesAssetsMap, Target } from '@teambit/bundler';\nimport { BundlingStrategy, ComputeTargetsContext } from '../bundling-strategy';\nimport type { PreviewDefinition } from '../preview-definition';\nimport type { ComponentPreviewMetaData, PreviewMain } from '../preview.main.runtime';\nimport { generateComponentLink } from './generate-component-link';\nimport { PreviewOutputFileNotFound } from '../exceptions';\n\nexport const PREVIEW_CHUNK_SUFFIX = 'preview';\nexport const COMPONENT_CHUNK_SUFFIX = 'component';\nexport const PREVIEW_CHUNK_FILENAME_SUFFIX = `${PREVIEW_CHUNK_SUFFIX}.js`;\nexport const COMPONENT_CHUNK_FILENAME_SUFFIX = `${COMPONENT_CHUNK_SUFFIX}.js`;\n\nexport const COMPONENT_STRATEGY_SIZE_KEY_NAME = 'size';\nexport const COMPONENT_STRATEGY_ARTIFACT_NAME = 'preview-component';\n\ntype ComponentEntry = {\n component: Component;\n entries: object;\n componentDir: string;\n};\n/**\n * bundles all components in a given env into the same bundle.\n */\nexport class ComponentBundlingStrategy implements BundlingStrategy {\n name = 'component';\n\n constructor(\n private preview: PreviewMain,\n private pkg: PkgMain,\n private dependencyResolver: DependencyResolverMain,\n private logger: Logger\n ) {}\n\n async computeTargets(context: ComputeTargetsContext, previewDefs: PreviewDefinition[]): Promise<Target[]> {\n const outputPath = this.getOutputPath(context);\n if (!existsSync(outputPath)) mkdirpSync(outputPath);\n\n // const entriesArr = flatten(\n // await Promise.all(\n // context.capsuleNetwork.seedersCapsules.map((capsule) => {\n // return this.computeComponentEntry(previewDefs, capsule.component, context);\n // }, {})\n // )\n // );\n\n const origComponents = context.capsuleNetwork.originalSeedersCapsules.map((capsule) => capsule.component);\n\n const entriesArr = await Promise.all(\n origComponents.map((component) => {\n return this.computeComponentEntry(previewDefs, component, context);\n }, {})\n );\n\n const chunkSize = this.preview.config.maxChunkSize;\n\n const chunks = chunkSize ? chunk(entriesArr, chunkSize) : [entriesArr];\n\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(context.envDefinition.env);\n\n const targets = chunks.map((currentChunk) => {\n const entries: BundlerEntryMap = {};\n const components: Component[] = [];\n const componentDirectoryMap = {};\n currentChunk.forEach((entry) => {\n Object.assign(entries, entry.entries);\n components.push(entry.component);\n componentDirectoryMap[entry.component.id.toString()] = entry.componentDir;\n });\n\n return {\n entries,\n components,\n componentDirectoryMap,\n outputPath,\n hostRootDir: context.envRuntime.envAspectDefinition.aspectPath,\n hostDependencies: peers,\n aliasHostDependencies: true,\n externalizeHostDependencies: true,\n };\n });\n\n return targets;\n // const entries = entriesArr.reduce((entriesMap, entry) => {\n // entriesMap[entry.library.name] = entry;\n // return entriesMap;\n // }, {});\n\n // const modules = await Promise.all(entriesArr.map(async (entry) => {\n // const dependencies = this.dependencyResolver.getDependencies(entry.component);\n // const manifest = dependencies.toDependenciesManifest();\n // const peer = Object.entries(manifest.peerDependencies || {}).reduce((acc, [packageName, version]) => {\n // acc[packageName] = {\n // singleton: true,\n // requiredVersion: version\n // };\n\n // return acc;\n // }, {});\n // // console.log(entry);\n // return {\n // name: entry.library.name,\n // exposes: {\n // '.': entry.import || ''\n // },\n // shared: {\n // ...manifest.dependencies,\n // ...peer\n // },\n // };\n // }));\n }\n\n async computeComponentEntry(\n previewDefs: PreviewDefinition[],\n component: Component,\n context: ComputeTargetsContext\n ): Promise<ComponentEntry> {\n const componentPreviewPath = await this.computePaths(previewDefs, context, component);\n const [componentPath] = this.getPaths(context, component, [component.mainFile]);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n const componentDir = capsule?.path || '';\n\n const chunks = {\n componentPreview: this.getComponentChunkId(component.id, 'preview'),\n component: context.splitComponentBundle ? component.id.toStringWithoutVersion() : undefined,\n };\n\n const entries = {\n [chunks.componentPreview]: {\n filename: this.getComponentChunkFileName(\n component.id.toString({\n fsCompatible: true,\n ignoreVersion: true,\n }),\n 'preview'\n ),\n import: componentPreviewPath,\n dependOn: chunks.component,\n library: { name: chunks.componentPreview, type: 'umd' },\n },\n };\n\n if (chunks.component) {\n entries[chunks.component] = {\n filename: this.getComponentChunkFileName(\n component.id.toString({\n fsCompatible: true,\n ignoreVersion: true,\n }),\n 'component'\n ),\n dependOn: undefined,\n import: componentPath,\n library: { name: chunks.component, type: 'umd' },\n };\n }\n\n return { component, entries, componentDir };\n }\n\n private getComponentChunkId(componentId: ComponentID, type: 'component' | 'preview') {\n const id =\n type === 'component'\n ? componentId.toStringWithoutVersion()\n : `${componentId.toStringWithoutVersion()}-${PREVIEW_CHUNK_SUFFIX}`;\n return id;\n }\n\n private getComponentChunkFileName(idstr: string, type: 'component' | 'preview') {\n const suffix = type === 'component' ? COMPONENT_CHUNK_FILENAME_SUFFIX : PREVIEW_CHUNK_FILENAME_SUFFIX;\n return `${idstr}-${suffix}`;\n }\n\n private getAssetAbsolutePath(context: BundlerContext, asset: Asset): string {\n const path = this.getOutputPath(context);\n return join(path, 'public', this.getAssetFilename(asset));\n }\n\n private getAssetFilename(asset: Asset): string {\n // handle cases where the asset name is something like my-image.svg?hash (while the filename in the fs is just my-image.svg)\n const [name] = asset.name.split('?');\n return name;\n }\n\n copyAssetsToCapsules(context: BundlerContext, result: BundlerResult) {\n context.components.forEach((component) => {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) return;\n const files = this.findAssetsForComponent(component, result.assets, result.entriesAssetsMap || {});\n if (!files) return;\n const artifactDirFullPath = join(capsule.path, this.getArtifactDirectory());\n // We don't use the mkdirSync as it uses the capsule fs which uses memfs, which doesn't know to handle nested none existing folders\n mkdirpSync(artifactDirFullPath);\n\n files.forEach((asset) => {\n const filePath = this.getAssetAbsolutePath(context, asset);\n if (!existsSync(filePath)) {\n throw new PreviewOutputFileNotFound(component.id, filePath);\n }\n const destFilePath = join(artifactDirFullPath, this.getAssetFilename(asset));\n mkdirpSync(dirname(destFilePath));\n capsule.fs.copyFileSync(filePath, destFilePath);\n });\n });\n }\n\n // private getCssFileName(componentId: ComponentID): string {\n // return `${componentId.toString({ ignoreVersion: true, fsCompatible: true })}.css`;\n // }\n\n private findAssetsForComponent(\n component: Component,\n assets: Asset[],\n entriesAssetsMap: EntriesAssetsMap\n ): Asset[] | undefined {\n if (!assets) return undefined;\n\n const componentEntryId = component.id.toStringWithoutVersion();\n const componentPreviewEntryId = this.getComponentChunkId(component.id, 'preview');\n const componentFiles = entriesAssetsMap[componentEntryId]?.assets || [];\n const componentAuxiliaryFiles = entriesAssetsMap[componentEntryId]?.auxiliaryAssets || [];\n const componentPreviewFiles = entriesAssetsMap[componentPreviewEntryId]?.assets || [];\n const componentPreviewAuxiliaryFiles = entriesAssetsMap[componentPreviewEntryId]?.auxiliaryAssets || [];\n\n const files = componentFiles\n .concat(componentAuxiliaryFiles)\n .concat(componentPreviewFiles)\n .concat(componentPreviewAuxiliaryFiles);\n return files;\n }\n\n private getArtifactDirectory() {\n return join(CAPSULE_ARTIFACTS_DIR, 'preview');\n }\n\n private computeComponentMetadata(\n context: BundlerContext,\n result: BundlerResult,\n component: Component\n ): ComponentPreviewMetaData {\n const componentEntryId = component.id.toStringWithoutVersion();\n if (!result?.entriesAssetsMap || !result?.entriesAssetsMap[componentEntryId]) {\n return {};\n }\n const files = (result.entriesAssetsMap[componentEntryId]?.assets || []).map((file) => {\n const UNKNOWN = 'unknown';\n const name = file.name ? basename(file.name) : UNKNOWN;\n if (name === UNKNOWN) {\n this.logger.warn(`computeComponentMetadata: unable to get the name of the asset ${file}`);\n }\n return {\n name,\n size: file.size,\n compressedSize: file.compressedSize,\n };\n });\n const filesTotalSize = result.entriesAssetsMap[componentEntryId]?.assetsSize || 0;\n const compressedTotalFiles = result.entriesAssetsMap[componentEntryId]?.compressedAssetsSize || 0;\n const assets = (result.entriesAssetsMap[componentEntryId]?.auxiliaryAssets || []).map((file) => {\n const UNKNOWN = 'unknown';\n const name = file.name ? basename(file.name) : UNKNOWN;\n if (name === UNKNOWN) {\n this.logger.warn(`computeComponentMetadata: unable to get the name of the auxiliary asset ${file}`);\n }\n return {\n name,\n size: file.size,\n compressedSize: file.compressedSize,\n };\n });\n const assetsTotalSize = result.entriesAssetsMap[componentEntryId]?.auxiliaryAssetsSize || 0;\n const compressedTotalAssets = result.entriesAssetsMap[componentEntryId]?.compressedAuxiliaryAssetsSize || 0;\n const totalSize = filesTotalSize + assetsTotalSize;\n const compressedTotal = compressedTotalFiles + compressedTotalAssets;\n\n const metadata = {\n [COMPONENT_STRATEGY_SIZE_KEY_NAME]: {\n files,\n assets,\n totalFiles: filesTotalSize,\n totalAssets: assetsTotalSize,\n total: totalSize,\n compressedTotalFiles,\n compressedTotalAssets,\n compressedTotal,\n },\n };\n\n return metadata;\n }\n\n async computeResults(context: BundlerContext, results: BundlerResult[]) {\n const componentsResults = flatten(\n await Promise.all(results.map((result) => this.computeTargetResult(context, result)))\n );\n\n const artifacts = this.getArtifactDef();\n\n return {\n componentsResults,\n artifacts,\n };\n }\n\n async computeTargetResult(context: BundlerContext, result: BundlerResult) {\n if (isEmpty(result.errors)) {\n // In case there are errors files will not be emitted so trying to copy them will fail anyway\n this.copyAssetsToCapsules(context, result);\n }\n\n const componentsResults: ComponentResult[] = result.components.map((component) => {\n const metadata = this.computeComponentMetadata(context, result, component);\n return {\n component,\n metadata,\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\n return componentsResults;\n }\n\n private getArtifactDef() {\n // eslint-disable-next-line @typescript-eslint/prefer-as-const\n // const env: 'env' = 'env';\n // const rootDir = this.getDirName(context);\n\n return [\n {\n name: COMPONENT_STRATEGY_ARTIFACT_NAME,\n globPatterns: ['**'],\n rootDir: this.getArtifactDirectory(),\n // context: env,\n },\n ];\n }\n\n getDirName(context: ComputeTargetsContext) {\n const envName = context.id.replace('/', '__');\n return `${envName}-preview`;\n }\n\n private getOutputPath(context: ComputeTargetsContext) {\n return resolve(`${context.capsuleNetwork.capsulesRootDir}/${this.getDirName(context)}`);\n }\n\n private getPaths(context: ComputeTargetsContext, component: Component, files: AbstractVinyl[]) {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) return [];\n const compiler: Compiler = context.env.getCompiler();\n return files.map((file) => join(capsule.path, compiler.getDistPathBySrcPath(file.relative)));\n }\n\n private getComponentOutputPath(capsule: Capsule, context: ComputeTargetsContext) {\n const capsulePath = resolve(`${capsule.path}`);\n const compiler: Compiler = context.env.getCompiler();\n const distDir = compiler.getDistDir?.() || 'dist';\n return join(capsulePath, distDir);\n }\n\n private async computePaths(\n defs: PreviewDefinition[],\n context: ComputeTargetsContext,\n component: Component\n ): Promise<string> {\n // const previewMain = await this.preview.writePreviewRuntime(context);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n // if (!capsule) return undefined;\n if (!capsule)\n throw new BitError(\n `could not find capsule for component ${component.id.toString()} during compute paths to bundle`\n );\n const moduleMapsPromise = defs.map(async (previewDef) => {\n const moduleMap = await previewDef.getModuleMap([component]);\n const metadata = previewDef.getMetadata ? await previewDef.getMetadata(component) : undefined;\n const maybeFiles = moduleMap.get(component);\n if (!maybeFiles || !capsule) return { prefix: previewDef.prefix, paths: [] };\n\n const [, files] = maybeFiles;\n const compiledPaths = this.getPaths(context, component, files);\n\n return {\n prefix: previewDef.prefix,\n paths: compiledPaths,\n metadata,\n };\n });\n\n const moduleMaps = await Promise.all(moduleMapsPromise);\n\n const contents = generateComponentLink(moduleMaps);\n const targetDir = this.getComponentOutputPath(capsule, context);\n\n return this.preview.writeLinkContents(contents, targetDir, 'preview');\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_path","data","require","_fsExtra","_lodash","_builder","_bitError","_generateComponentLink","_exceptions","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","PREVIEW_CHUNK_SUFFIX","exports","COMPONENT_CHUNK_SUFFIX","PREVIEW_CHUNK_FILENAME_SUFFIX","COMPONENT_CHUNK_FILENAME_SUFFIX","COMPONENT_STRATEGY_SIZE_KEY_NAME","COMPONENT_STRATEGY_ARTIFACT_NAME","ComponentBundlingStrategy","constructor","preview","dependencyResolver","logger","computeTargets","context","previewDefs","outputPath","getOutputPath","existsSync","mkdirpSync","origComponents","capsuleNetwork","originalSeedersCapsules","map","capsule","component","entriesArr","Promise","all","computeComponentEntry","chunkSize","config","maxChunkSize","chunks","chunk","peers","getPreviewHostDependenciesFromEnv","envDefinition","env","targets","currentChunk","entries","components","componentDirectoryMap","forEach","entry","assign","push","id","toString","componentDir","hostRootDir","envRuntime","envAspectDefinition","aspectPath","hostDependencies","aliasHostDependencies","externalizeHostDependencies","componentPreviewPath","computePaths","componentPath","getPaths","mainFile","graphCapsules","getCapsule","path","componentPreview","getComponentChunkId","splitComponentBundle","toStringWithoutVersion","undefined","filename","getComponentChunkFileName","fsCompatible","ignoreVersion","import","dependOn","library","name","type","componentId","idstr","suffix","getAssetAbsolutePath","asset","join","getAssetFilename","split","copyAssetsToCapsules","result","files","findAssetsForComponent","assets","entriesAssetsMap","artifactDirFullPath","getArtifactDirectory","filePath","PreviewOutputFileNotFound","destFilePath","dirname","fs","copyFileSync","componentEntryId","componentPreviewEntryId","componentFiles","componentAuxiliaryFiles","auxiliaryAssets","componentPreviewFiles","componentPreviewAuxiliaryFiles","concat","CAPSULE_ARTIFACTS_DIR","computeComponentMetadata","file","UNKNOWN","basename","warn","size","compressedSize","filesTotalSize","assetsSize","compressedTotalFiles","compressedAssetsSize","assetsTotalSize","auxiliaryAssetsSize","compressedTotalAssets","compressedAuxiliaryAssetsSize","totalSize","compressedTotal","metadata","totalFiles","totalAssets","total","computeResults","results","componentsResults","flatten","computeTargetResult","artifacts","getArtifactDef","isEmpty","errors","err","message","warning","warnings","startTime","endTime","globPatterns","rootDir","getDirName","envName","replace","resolve","capsulesRootDir","compiler","getCompiler","getDistPathBySrcPath","relative","getComponentOutputPath","capsulePath","distDir","getDistDir","defs","BitError","moduleMapsPromise","previewDef","moduleMap","getModuleMap","getMetadata","maybeFiles","get","prefix","paths","compiledPaths","moduleMaps","contents","generateComponentLink","targetDir","writeLinkContents"],"sources":["component-strategy.ts"],"sourcesContent":["import { join, resolve, basename, dirname } from 'path';\nimport { existsSync, mkdirpSync } from 'fs-extra';\nimport { Component } from '@teambit/component';\nimport { ComponentID } from '@teambit/component-id';\nimport { flatten, isEmpty, chunk } from 'lodash';\nimport { Compiler } from '@teambit/compiler';\nimport type { AbstractVinyl } from '@teambit/component.sources';\nimport type { Capsule } from '@teambit/isolator';\nimport { CAPSULE_ARTIFACTS_DIR, ComponentResult } from '@teambit/builder';\nimport { BitError } from '@teambit/bit-error';\nimport type { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport type { BundlerResult, BundlerContext, Asset, BundlerEntryMap, EntriesAssetsMap, Target } from '@teambit/bundler';\nimport { BundlingStrategy, ComputeTargetsContext } from '../bundling-strategy';\nimport type { PreviewDefinition } from '../preview-definition';\nimport type { ComponentPreviewMetaData, PreviewMain } from '../preview.main.runtime';\nimport { generateComponentLink } from './generate-component-link';\nimport { PreviewOutputFileNotFound } from '../exceptions';\n\nexport const PREVIEW_CHUNK_SUFFIX = 'preview';\nexport const COMPONENT_CHUNK_SUFFIX = 'component';\nexport const PREVIEW_CHUNK_FILENAME_SUFFIX = `${PREVIEW_CHUNK_SUFFIX}.js`;\nexport const COMPONENT_CHUNK_FILENAME_SUFFIX = `${COMPONENT_CHUNK_SUFFIX}.js`;\n\nexport const COMPONENT_STRATEGY_SIZE_KEY_NAME = 'size';\nexport const COMPONENT_STRATEGY_ARTIFACT_NAME = 'preview-component';\n\ntype ComponentEntry = {\n component: Component;\n entries: object;\n componentDir: string;\n};\n/**\n * bundles all components in a given env into the same bundle.\n */\nexport class ComponentBundlingStrategy implements BundlingStrategy {\n name = 'component';\n\n constructor(\n private preview: PreviewMain,\n private dependencyResolver: DependencyResolverMain,\n private logger: Logger\n ) {}\n\n async computeTargets(context: ComputeTargetsContext, previewDefs: PreviewDefinition[]): Promise<Target[]> {\n const outputPath = this.getOutputPath(context);\n if (!existsSync(outputPath)) mkdirpSync(outputPath);\n\n // const entriesArr = flatten(\n // await Promise.all(\n // context.capsuleNetwork.seedersCapsules.map((capsule) => {\n // return this.computeComponentEntry(previewDefs, capsule.component, context);\n // }, {})\n // )\n // );\n\n const origComponents = context.capsuleNetwork.originalSeedersCapsules.map((capsule) => capsule.component);\n\n const entriesArr = await Promise.all(\n origComponents.map((component) => {\n return this.computeComponentEntry(previewDefs, component, context);\n }, {})\n );\n\n const chunkSize = this.preview.config.maxChunkSize;\n\n const chunks = chunkSize ? chunk(entriesArr, chunkSize) : [entriesArr];\n\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(context.envDefinition.env);\n\n const targets = chunks.map((currentChunk) => {\n const entries: BundlerEntryMap = {};\n const components: Component[] = [];\n const componentDirectoryMap = {};\n currentChunk.forEach((entry) => {\n Object.assign(entries, entry.entries);\n components.push(entry.component);\n componentDirectoryMap[entry.component.id.toString()] = entry.componentDir;\n });\n\n return {\n entries,\n components,\n componentDirectoryMap,\n outputPath,\n hostRootDir: context.envRuntime.envAspectDefinition.aspectPath,\n hostDependencies: peers,\n aliasHostDependencies: true,\n externalizeHostDependencies: true,\n };\n });\n\n return targets;\n // const entries = entriesArr.reduce((entriesMap, entry) => {\n // entriesMap[entry.library.name] = entry;\n // return entriesMap;\n // }, {});\n\n // const modules = await Promise.all(entriesArr.map(async (entry) => {\n // const dependencies = this.dependencyResolver.getDependencies(entry.component);\n // const manifest = dependencies.toDependenciesManifest();\n // const peer = Object.entries(manifest.peerDependencies || {}).reduce((acc, [packageName, version]) => {\n // acc[packageName] = {\n // singleton: true,\n // requiredVersion: version\n // };\n\n // return acc;\n // }, {});\n // // console.log(entry);\n // return {\n // name: entry.library.name,\n // exposes: {\n // '.': entry.import || ''\n // },\n // shared: {\n // ...manifest.dependencies,\n // ...peer\n // },\n // };\n // }));\n }\n\n async computeComponentEntry(\n previewDefs: PreviewDefinition[],\n component: Component,\n context: ComputeTargetsContext\n ): Promise<ComponentEntry> {\n const componentPreviewPath = await this.computePaths(previewDefs, context, component);\n const [componentPath] = this.getPaths(context, component, [component.mainFile]);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n const componentDir = capsule?.path || '';\n\n const chunks = {\n componentPreview: this.getComponentChunkId(component.id, 'preview'),\n component: context.splitComponentBundle ? component.id.toStringWithoutVersion() : undefined,\n };\n\n const entries = {\n [chunks.componentPreview]: {\n filename: this.getComponentChunkFileName(\n component.id.toString({\n fsCompatible: true,\n ignoreVersion: true,\n }),\n 'preview'\n ),\n import: componentPreviewPath,\n dependOn: chunks.component,\n library: { name: chunks.componentPreview, type: 'umd' },\n },\n };\n\n if (chunks.component) {\n entries[chunks.component] = {\n filename: this.getComponentChunkFileName(\n component.id.toString({\n fsCompatible: true,\n ignoreVersion: true,\n }),\n 'component'\n ),\n dependOn: undefined,\n import: componentPath,\n library: { name: chunks.component, type: 'umd' },\n };\n }\n\n return { component, entries, componentDir };\n }\n\n private getComponentChunkId(componentId: ComponentID, type: 'component' | 'preview') {\n const id =\n type === 'component'\n ? componentId.toStringWithoutVersion()\n : `${componentId.toStringWithoutVersion()}-${PREVIEW_CHUNK_SUFFIX}`;\n return id;\n }\n\n private getComponentChunkFileName(idstr: string, type: 'component' | 'preview') {\n const suffix = type === 'component' ? COMPONENT_CHUNK_FILENAME_SUFFIX : PREVIEW_CHUNK_FILENAME_SUFFIX;\n return `${idstr}-${suffix}`;\n }\n\n private getAssetAbsolutePath(context: BundlerContext, asset: Asset): string {\n const path = this.getOutputPath(context);\n return join(path, 'public', this.getAssetFilename(asset));\n }\n\n private getAssetFilename(asset: Asset): string {\n // handle cases where the asset name is something like my-image.svg?hash (while the filename in the fs is just my-image.svg)\n const [name] = asset.name.split('?');\n return name;\n }\n\n copyAssetsToCapsules(context: BundlerContext, result: BundlerResult) {\n context.components.forEach((component) => {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) return;\n const files = this.findAssetsForComponent(component, result.assets, result.entriesAssetsMap || {});\n if (!files) return;\n const artifactDirFullPath = join(capsule.path, this.getArtifactDirectory());\n // We don't use the mkdirSync as it uses the capsule fs which uses memfs, which doesn't know to handle nested none existing folders\n mkdirpSync(artifactDirFullPath);\n\n files.forEach((asset) => {\n const filePath = this.getAssetAbsolutePath(context, asset);\n if (!existsSync(filePath)) {\n throw new PreviewOutputFileNotFound(component.id, filePath);\n }\n const destFilePath = join(artifactDirFullPath, this.getAssetFilename(asset));\n mkdirpSync(dirname(destFilePath));\n capsule.fs.copyFileSync(filePath, destFilePath);\n });\n });\n }\n\n // private getCssFileName(componentId: ComponentID): string {\n // return `${componentId.toString({ ignoreVersion: true, fsCompatible: true })}.css`;\n // }\n\n private findAssetsForComponent(\n component: Component,\n assets: Asset[],\n entriesAssetsMap: EntriesAssetsMap\n ): Asset[] | undefined {\n if (!assets) return undefined;\n\n const componentEntryId = component.id.toStringWithoutVersion();\n const componentPreviewEntryId = this.getComponentChunkId(component.id, 'preview');\n const componentFiles = entriesAssetsMap[componentEntryId]?.assets || [];\n const componentAuxiliaryFiles = entriesAssetsMap[componentEntryId]?.auxiliaryAssets || [];\n const componentPreviewFiles = entriesAssetsMap[componentPreviewEntryId]?.assets || [];\n const componentPreviewAuxiliaryFiles = entriesAssetsMap[componentPreviewEntryId]?.auxiliaryAssets || [];\n\n const files = componentFiles\n .concat(componentAuxiliaryFiles)\n .concat(componentPreviewFiles)\n .concat(componentPreviewAuxiliaryFiles);\n return files;\n }\n\n private getArtifactDirectory() {\n return join(CAPSULE_ARTIFACTS_DIR, 'preview');\n }\n\n private computeComponentMetadata(\n context: BundlerContext,\n result: BundlerResult,\n component: Component\n ): ComponentPreviewMetaData {\n const componentEntryId = component.id.toStringWithoutVersion();\n if (!result?.entriesAssetsMap || !result?.entriesAssetsMap[componentEntryId]) {\n return {};\n }\n const files = (result.entriesAssetsMap[componentEntryId]?.assets || []).map((file) => {\n const UNKNOWN = 'unknown';\n const name = file.name ? basename(file.name) : UNKNOWN;\n if (name === UNKNOWN) {\n this.logger.warn(`computeComponentMetadata: unable to get the name of the asset ${file}`);\n }\n return {\n name,\n size: file.size,\n compressedSize: file.compressedSize,\n };\n });\n const filesTotalSize = result.entriesAssetsMap[componentEntryId]?.assetsSize || 0;\n const compressedTotalFiles = result.entriesAssetsMap[componentEntryId]?.compressedAssetsSize || 0;\n const assets = (result.entriesAssetsMap[componentEntryId]?.auxiliaryAssets || []).map((file) => {\n const UNKNOWN = 'unknown';\n const name = file.name ? basename(file.name) : UNKNOWN;\n if (name === UNKNOWN) {\n this.logger.warn(`computeComponentMetadata: unable to get the name of the auxiliary asset ${file}`);\n }\n return {\n name,\n size: file.size,\n compressedSize: file.compressedSize,\n };\n });\n const assetsTotalSize = result.entriesAssetsMap[componentEntryId]?.auxiliaryAssetsSize || 0;\n const compressedTotalAssets = result.entriesAssetsMap[componentEntryId]?.compressedAuxiliaryAssetsSize || 0;\n const totalSize = filesTotalSize + assetsTotalSize;\n const compressedTotal = compressedTotalFiles + compressedTotalAssets;\n\n const metadata = {\n [COMPONENT_STRATEGY_SIZE_KEY_NAME]: {\n files,\n assets,\n totalFiles: filesTotalSize,\n totalAssets: assetsTotalSize,\n total: totalSize,\n compressedTotalFiles,\n compressedTotalAssets,\n compressedTotal,\n },\n };\n\n return metadata;\n }\n\n async computeResults(context: BundlerContext, results: BundlerResult[]) {\n const componentsResults = flatten(\n await Promise.all(results.map((result) => this.computeTargetResult(context, result)))\n );\n\n const artifacts = this.getArtifactDef();\n\n return {\n componentsResults,\n artifacts,\n };\n }\n\n async computeTargetResult(context: BundlerContext, result: BundlerResult) {\n if (isEmpty(result.errors)) {\n // In case there are errors files will not be emitted so trying to copy them will fail anyway\n this.copyAssetsToCapsules(context, result);\n }\n\n const componentsResults: ComponentResult[] = result.components.map((component) => {\n const metadata = this.computeComponentMetadata(context, result, component);\n return {\n component,\n metadata,\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\n return componentsResults;\n }\n\n private getArtifactDef() {\n // eslint-disable-next-line @typescript-eslint/prefer-as-const\n // const env: 'env' = 'env';\n // const rootDir = this.getDirName(context);\n\n return [\n {\n name: COMPONENT_STRATEGY_ARTIFACT_NAME,\n globPatterns: ['**'],\n rootDir: this.getArtifactDirectory(),\n // context: env,\n },\n ];\n }\n\n getDirName(context: ComputeTargetsContext) {\n const envName = context.id.replace('/', '__');\n return `${envName}-preview`;\n }\n\n private getOutputPath(context: ComputeTargetsContext) {\n return resolve(`${context.capsuleNetwork.capsulesRootDir}/${this.getDirName(context)}`);\n }\n\n private getPaths(context: ComputeTargetsContext, component: Component, files: AbstractVinyl[]) {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) return [];\n const compiler: Compiler = context.env.getCompiler();\n return files.map((file) => join(capsule.path, compiler.getDistPathBySrcPath(file.relative)));\n }\n\n private getComponentOutputPath(capsule: Capsule, context: ComputeTargetsContext) {\n const capsulePath = resolve(`${capsule.path}`);\n const compiler: Compiler = context.env.getCompiler();\n const distDir = compiler.getDistDir?.() || 'dist';\n return join(capsulePath, distDir);\n }\n\n private async computePaths(\n defs: PreviewDefinition[],\n context: ComputeTargetsContext,\n component: Component\n ): Promise<string> {\n // const previewMain = await this.preview.writePreviewRuntime(context);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n // if (!capsule) return undefined;\n if (!capsule)\n throw new BitError(\n `could not find capsule for component ${component.id.toString()} during compute paths to bundle`\n );\n const moduleMapsPromise = defs.map(async (previewDef) => {\n const moduleMap = await previewDef.getModuleMap([component]);\n const metadata = previewDef.getMetadata ? await previewDef.getMetadata(component) : undefined;\n const maybeFiles = moduleMap.get(component);\n if (!maybeFiles || !capsule) return { prefix: previewDef.prefix, paths: [] };\n\n const [, files] = maybeFiles;\n const compiledPaths = this.getPaths(context, component, files);\n\n return {\n prefix: previewDef.prefix,\n paths: compiledPaths,\n metadata,\n };\n });\n\n const moduleMaps = await Promise.all(moduleMapsPromise);\n\n const contents = generateComponentLink(moduleMaps);\n const targetDir = this.getComponentOutputPath(capsule, context);\n\n return this.preview.writeLinkContents(contents, targetDir, 'preview');\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import padRight from 'pad-right';
|
2
|
+
import { Command, CommandOptions } from '@teambit/cli';
|
3
|
+
import { COMPONENT_PATTERN_HELP } from '@teambit/legacy/dist/constants';
|
4
|
+
import chalk from 'chalk';
|
5
|
+
import type { PreviewMain } from './preview.main.runtime';
|
6
|
+
import { EnvsExecutionResult } from '@teambit/envs';
|
7
|
+
|
8
|
+
type GeneratePreviewArgs = [userPattern: string];
|
9
|
+
type GeneratePreviewFlags = {
|
10
|
+
name: string;
|
11
|
+
};
|
12
|
+
|
13
|
+
export class GeneratePreviewCmd implements Command {
|
14
|
+
name = 'generate-preview [component-pattern]';
|
15
|
+
description = 'generate preview bundle for components';
|
16
|
+
arguments = [
|
17
|
+
{
|
18
|
+
name: 'component-pattern',
|
19
|
+
description: COMPONENT_PATTERN_HELP,
|
20
|
+
},
|
21
|
+
];
|
22
|
+
group = 'development';
|
23
|
+
options = [['n', 'name <name>', 'name for the preview']] as CommandOptions;
|
24
|
+
private = true;
|
25
|
+
|
26
|
+
constructor(
|
27
|
+
/**
|
28
|
+
* access to the extension instance.
|
29
|
+
*/
|
30
|
+
private preview: PreviewMain
|
31
|
+
) {}
|
32
|
+
|
33
|
+
async report([userPattern]: GeneratePreviewArgs, { name }: GeneratePreviewFlags) {
|
34
|
+
const res = await this.preview.generateComponentPreview(userPattern, name);
|
35
|
+
const formattedOutput = this.formatOutput(res);
|
36
|
+
return chalk.green(`previews generated successfully in:\n${formattedOutput}`);
|
37
|
+
}
|
38
|
+
|
39
|
+
formatOutput(res: EnvsExecutionResult<{ [id: string]: string }>) {
|
40
|
+
const merged = res.results.reduce((acc, result) => {
|
41
|
+
acc = { ...acc, ...result.data };
|
42
|
+
return acc;
|
43
|
+
}, {});
|
44
|
+
const rows = Object.entries(merged).map(([id, previewPath]) => {
|
45
|
+
const keyPadded = padRight(id, 20, ' ');
|
46
|
+
return chalk.green(`${keyPadded} - ${previewPath}`);
|
47
|
+
});
|
48
|
+
return rows.join('\n');
|
49
|
+
}
|
50
|
+
}
|