@teambit/preview 0.0.959 → 0.0.960

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.
@@ -238,7 +238,9 @@ class EnvPreviewTemplateTask {
238
238
  path
239
239
  } = _ref,
240
240
  rest = (0, _objectWithoutProperties2().default)(_ref, ["name", "path"]);
241
- const linkFile = this.preview.writeLink(name, _component().ComponentMap.create([]), path, workDir, splitComponentBundle);
241
+ const linkFile = this.preview.writeLink(name, _component().ComponentMap.create([]), {
242
+ default: path
243
+ }, workDir, splitComponentBundle);
242
244
  return _objectSpread(_objectSpread({
243
245
  name,
244
246
  path
@@ -280,7 +282,7 @@ class EnvPreviewTemplateTask {
280
282
  if (!def.renderTemplatePathByEnv) return undefined;
281
283
  return {
282
284
  name: def.prefix,
283
- path: await def.renderTemplatePathByEnv(envDef.env),
285
+ path: (await def.renderTemplatePathByEnv(envDef.env)) || '',
284
286
  include: def.include
285
287
  };
286
288
  })));
@@ -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","getPreviewHostDependenciesFromEnv","capsule","graphCapsules","getCapsule","Error","previewRoot","writePreviewRuntime","generateEntries","splitComponentBundle","workDir","path","outputPath","computeOutputPath","existsSync","mkdirpSync","resolvedEnvAspects","resolveAspects","MainRuntime","requestedOnly","resolvedEnv","hostRootDir","aspectPath","warn","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 { MainRuntime } from '@teambit/cli';\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 envPreviewConfig = this.preview.getEnvPreviewConfig(envDef.env);\n\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(envDef.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 const resolvedEnvAspects = await this.preview.resolveAspects(MainRuntime.name, [envComponent.id], undefined, {\n requestedOnly: true,\n });\n const resolvedEnv = resolvedEnvAspects[0];\n const hostRootDir = resolvedEnv?.aspectPath;\n\n if (!hostRootDir) {\n this.logger.warn(`env preview template task, hostRootDir is not defined, for env ${envComponent.id.toString()}`);\n }\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,\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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"}
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","getPreviewHostDependenciesFromEnv","capsule","graphCapsules","getCapsule","Error","previewRoot","writePreviewRuntime","generateEntries","splitComponentBundle","workDir","path","outputPath","computeOutputPath","existsSync","mkdirpSync","resolvedEnvAspects","resolveAspects","MainRuntime","requestedOnly","resolvedEnv","hostRootDir","aspectPath","warn","html","chunking","splitChunks","hostDependencies","aliasHostDependencies","previewModules","getPreviewModules","previewEntries","rest","linkFile","writeLink","ComponentMap","create","default","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 { MainRuntime } from '@teambit/cli';\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 envPreviewConfig = this.preview.getEnvPreviewConfig(envDef.env);\n\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(envDef.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 const resolvedEnvAspects = await this.preview.resolveAspects(MainRuntime.name, [envComponent.id], undefined, {\n requestedOnly: true,\n });\n const resolvedEnv = resolvedEnvAspects[0];\n const hostRootDir = resolvedEnv?.aspectPath;\n\n if (!hostRootDir) {\n this.logger.warn(`env preview template task, hostRootDir is not defined, for env ${envComponent.id.toString()}`);\n }\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,\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(\n name,\n ComponentMap.create([]),\n { default: path },\n workDir,\n splitComponentBundle\n );\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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"}
@@ -1,2 +1,9 @@
1
1
  import type { ComponentMap } from '@teambit/component';
2
- export declare function generateLink(prefix: string, componentMap: ComponentMap<string[]>, mainModule?: string, isSplitComponentBundle?: boolean): string;
2
+ export declare type MainModulesMap = {
3
+ /**
4
+ * Path to default module in case there is no specific module for the current environment.
5
+ */
6
+ default: string;
7
+ [envId: string]: string;
8
+ };
9
+ export declare function generateLink(prefix: string, componentMap: ComponentMap<string[]>, mainModulesMap?: MainModulesMap, isSplitComponentBundle?: boolean): string;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  require("core-js/modules/es.array.iterator.js");
5
+ require("core-js/modules/es.regexp.exec.js");
6
+ require("core-js/modules/es.string.replace.js");
4
7
  Object.defineProperty(exports, "__esModule", {
5
8
  value: true
6
9
  });
@@ -12,8 +15,15 @@ function _toolboxPath() {
12
15
  };
13
16
  return data;
14
17
  }
18
+ function _camelcase() {
19
+ const data = _interopRequireDefault(require("camelcase"));
20
+ _camelcase = function () {
21
+ return data;
22
+ };
23
+ return data;
24
+ }
15
25
  // :TODO refactor to building an AST and generate source code based on it.
16
- function generateLink(prefix, componentMap, mainModule, isSplitComponentBundle = false) {
26
+ function generateLink(prefix, componentMap, mainModulesMap, isSplitComponentBundle = false) {
17
27
  const links = componentMap.toArray().map(([component, modulePath], compIdx) => ({
18
28
  componentIdentifier: component.id.fullName,
19
29
  modules: modulePath.map((path, pathIdx) => ({
@@ -21,15 +31,32 @@ function generateLink(prefix, componentMap, mainModule, isSplitComponentBundle =
21
31
  resolveFrom: (0, _toolboxPath().toWindowsCompatiblePath)(path)
22
32
  }))
23
33
  }));
34
+ let modulesLinks;
35
+ if (mainModulesMap) {
36
+ modulesLinks = Object.entries(mainModulesMap).map(([envId, path]) => {
37
+ const resolveFrom = (0, _toolboxPath().toWindowsCompatiblePath)(path);
38
+ const varName = getEnvVarName(envId);
39
+ return {
40
+ envId,
41
+ varName,
42
+ resolveFrom
43
+ };
44
+ });
45
+ }
24
46
  return `
25
47
  import { linkModules } from '${(0, _toolboxPath().toWindowsCompatiblePath)(require.resolve('./preview.preview.runtime'))}';
26
- ${mainModule ? `import * as mainModule from '${(0, _toolboxPath().toWindowsCompatiblePath)(mainModule)}';` : 'const mainModule = {};'}
27
48
 
28
49
  ${links.map(link => link.modules.map(module => `import * as ${module.varName} from "${module.resolveFrom}";`).join('\n')).filter(line => line !== '') // prevent empty lines
29
50
  .join('\n')}
30
51
 
52
+ ${modulesLinks.map(module => `import * as ${module.varName} from "${module.resolveFrom}";`).join('\n')}
53
+
31
54
  linkModules('${prefix}', {
32
- mainModule,
55
+ modulesMap: {
56
+ ${modulesLinks
57
+ // must include all components, including empty
58
+ .map(module => `"${module.envId}": ${module.varName}`).join(',\n ')}
59
+ },
33
60
  isSplitComponentBundle: ${isSplitComponentBundle},
34
61
  componentMap: {
35
62
  ${links
@@ -42,5 +69,10 @@ ${links
42
69
  function moduleVarName(componentIdx, fileIdx) {
43
70
  return `file_${componentIdx}_${fileIdx}`;
44
71
  }
72
+ function getEnvVarName(envId) {
73
+ const envNameFormatted = (0, _camelcase().default)(envId.replace('@', '').replace('.', '-').replace(/\//g, '-'));
74
+ const varName = `${envNameFormatted}MainModule`;
75
+ return varName;
76
+ }
45
77
 
46
78
  //# sourceMappingURL=generate-link.js.map
@@ -1 +1 @@
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,YAAY,CAC1BC,MAAc,EACdC,YAAoC,EACpCC,UAAmB,EACnBC,sBAAsB,GAAG,KAAK,EACtB;EACR,MAAMC,KAAK,GAAGH,YAAY,CAACI,OAAO,EAAE,CAACC,GAAG,CAAC,CAAC,CAACC,SAAS,EAAEC,UAAU,CAAC,EAAEC,OAAO,MAAM;IAC9EC,mBAAmB,EAAEH,SAAS,CAACI,EAAE,CAACC,QAAQ;IAC1CC,OAAO,EAAEL,UAAU,CAACF,GAAG,CAAC,CAACQ,IAAI,EAAEC,OAAO,MAAM;MAC1CC,OAAO,EAAEC,aAAa,CAACR,OAAO,EAAEM,OAAO,CAAC;MACxCG,WAAW,EAAE,IAAAC,sCAAuB,EAACL,IAAI;IAC3C,CAAC,CAAC;EACJ,CAAC,CAAC,CAAC;EAEH,OAAQ;AACV,+BAA+B,IAAAK,sCAAuB,EAACC,OAAO,CAACC,OAAO,CAAC,2BAA2B,CAAC,CAAE;AACrG,EAAEnB,UAAU,GAAI,gCAA+B,IAAAiB,sCAAuB,EAACjB,UAAU,CAAE,IAAG,GAAG,wBAAyB;AAClH;AACA,EAAEE,KAAK,CACJE,GAAG,CAAEgB,IAAI,IAAKA,IAAI,CAACT,OAAO,CAACP,GAAG,CAAEiB,MAAM,IAAM,eAAcA,MAAM,CAACP,OAAQ,UAASO,MAAM,CAACL,WAAY,IAAG,CAAC,CAACM,IAAI,CAAC,IAAI,CAAC,CAAC,CACrHC,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,EAAE,CAAC,CAAC;EAAA,CAC9BF,IAAI,CAAC,IAAI,CAAE;AACd;AACA,eAAexB,MAAO;AACtB;AACA,4BAA4BG,sBAAuB;AACnD;AACA,EAAEC;EACA;EAAA,CACCE,GAAG,CAAEgB,IAAI,IAAM,QAAOA,IAAI,CAACZ,mBAAoB,OAAMY,IAAI,CAACT,OAAO,CAACP,GAAG,CAAEiB,MAAM,IAAKA,MAAM,CAACP,OAAO,CAAC,CAACQ,IAAI,CAAC,IAAI,CAAE,GAAE,CAAC,CAChHA,IAAI,CAAC,KAAK,CAAE;AACf;AACA;AACA,CAAC;AACD;AAEA,SAASP,aAAa,CAACU,YAAoB,EAAEC,OAAe,EAAE;EAC5D,OAAQ,QAAOD,YAAa,IAAGC,OAAQ,EAAC;AAC1C"}
1
+ {"version":3,"names":["generateLink","prefix","componentMap","mainModulesMap","isSplitComponentBundle","links","toArray","map","component","modulePath","compIdx","componentIdentifier","id","fullName","modules","path","pathIdx","varName","moduleVarName","resolveFrom","toWindowsCompatiblePath","modulesLinks","Object","entries","envId","getEnvVarName","require","resolve","link","module","join","filter","line","componentIdx","fileIdx","envNameFormatted","camelcase","replace"],"sources":["generate-link.ts"],"sourcesContent":["import { toWindowsCompatiblePath } from '@teambit/toolbox.path.to-windows-compatible-path';\nimport camelcase from 'camelcase';\nimport type { ComponentMap } from '@teambit/component';\n\nexport type MainModulesMap = {\n /**\n * Path to default module in case there is no specific module for the current environment.\n */\n default: string;\n [envId: string]: string;\n}\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 mainModulesMap?: MainModulesMap,\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 let modulesLinks;\n if (mainModulesMap) {\n modulesLinks = Object.entries(mainModulesMap).map(([envId, path]) => {\n const resolveFrom = toWindowsCompatiblePath(path);\n const varName = getEnvVarName(envId);\n return { envId, varName, resolveFrom };\n });\n }\n\n return `\nimport { linkModules } from '${toWindowsCompatiblePath(require.resolve('./preview.preview.runtime'))}';\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\n${modulesLinks.map((module) =>`import * as ${module.varName} from \"${module.resolveFrom}\";`).join('\\n')}\n\nlinkModules('${prefix}', {\n modulesMap: {\n ${modulesLinks\n // must include all components, including empty\n .map((module) => `\"${module.envId}\": ${module.varName}`)\n .join(',\\n ')}\n },\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\nfunction getEnvVarName(envId: string) {\n const envNameFormatted = camelcase(envId.replace('@', '').replace('.','-').replace(/\\//g, '-'));\n const varName = `${envNameFormatted}MainModule`;\n return varName;\n}\n"],"mappings":";;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAWA;AACO,SAASA,YAAY,CAC1BC,MAAc,EACdC,YAAoC,EACpCC,cAA+B,EAC/BC,sBAAsB,GAAG,KAAK,EACtB;EACR,MAAMC,KAAK,GAAGH,YAAY,CAACI,OAAO,EAAE,CAACC,GAAG,CAAC,CAAC,CAACC,SAAS,EAAEC,UAAU,CAAC,EAAEC,OAAO,MAAM;IAC9EC,mBAAmB,EAAEH,SAAS,CAACI,EAAE,CAACC,QAAQ;IAC1CC,OAAO,EAAEL,UAAU,CAACF,GAAG,CAAC,CAACQ,IAAI,EAAEC,OAAO,MAAM;MAC1CC,OAAO,EAAEC,aAAa,CAACR,OAAO,EAAEM,OAAO,CAAC;MACxCG,WAAW,EAAE,IAAAC,sCAAuB,EAACL,IAAI;IAC3C,CAAC,CAAC;EACJ,CAAC,CAAC,CAAC;EAEH,IAAIM,YAAY;EAChB,IAAIlB,cAAc,EAAE;IAClBkB,YAAY,GAAGC,MAAM,CAACC,OAAO,CAACpB,cAAc,CAAC,CAACI,GAAG,CAAC,CAAC,CAACiB,KAAK,EAAET,IAAI,CAAC,KAAK;MACnE,MAAMI,WAAW,GAAG,IAAAC,sCAAuB,EAACL,IAAI,CAAC;MACjD,MAAME,OAAO,GAAGQ,aAAa,CAACD,KAAK,CAAC;MACpC,OAAO;QAAEA,KAAK;QAAEP,OAAO;QAAEE;MAAY,CAAC;IACxC,CAAC,CAAC;EACJ;EAEA,OAAQ;AACV,+BAA+B,IAAAC,sCAAuB,EAACM,OAAO,CAACC,OAAO,CAAC,2BAA2B,CAAC,CAAE;AACrG;AACA,EAAEtB,KAAK,CACJE,GAAG,CAAEqB,IAAI,IAAKA,IAAI,CAACd,OAAO,CAACP,GAAG,CAAEsB,MAAM,IAAM,eAAcA,MAAM,CAACZ,OAAQ,UAASY,MAAM,CAACV,WAAY,IAAG,CAAC,CAACW,IAAI,CAAC,IAAI,CAAC,CAAC,CACrHC,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,EAAE,CAAC,CAAC;EAAA,CAC9BF,IAAI,CAAC,IAAI,CAAE;AACd;AACA,EAAET,YAAY,CAACd,GAAG,CAAEsB,MAAM,IAAK,eAAcA,MAAM,CAACZ,OAAQ,UAASY,MAAM,CAACV,WAAY,IAAG,CAAC,CAACW,IAAI,CAAC,IAAI,CAAE;AACxG;AACA,eAAe7B,MAAO;AACtB;AACA,MAAMoB;EACA;EAAA,CACCd,GAAG,CAAEsB,MAAM,IAAM,IAAGA,MAAM,CAACL,KAAM,MAAKK,MAAM,CAACZ,OAAQ,EAAC,CAAC,CACvDa,IAAI,CAAC,SAAS,CAAE;AACvB;AACA,4BAA4B1B,sBAAuB;AACnD;AACA,EAAEC;EACA;EAAA,CACCE,GAAG,CAAEqB,IAAI,IAAM,QAAOA,IAAI,CAACjB,mBAAoB,OAAMiB,IAAI,CAACd,OAAO,CAACP,GAAG,CAAEsB,MAAM,IAAKA,MAAM,CAACZ,OAAO,CAAC,CAACa,IAAI,CAAC,IAAI,CAAE,GAAE,CAAC,CAChHA,IAAI,CAAC,KAAK,CAAE;AACf;AACA;AACA,CAAC;AACD;AAEA,SAASZ,aAAa,CAACe,YAAoB,EAAEC,OAAe,EAAE;EAC5D,OAAQ,QAAOD,YAAa,IAAGC,OAAQ,EAAC;AAC1C;AAEA,SAAST,aAAa,CAACD,KAAa,EAAE;EACpC,MAAMW,gBAAgB,GAAG,IAAAC,oBAAS,EAACZ,KAAK,CAACa,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAC/F,MAAMpB,OAAO,GAAI,GAAEkB,gBAAiB,YAAW;EAC/C,OAAOlB,OAAO;AAChB"}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.preview_preview@0.0.959/dist/preview.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.preview_preview@0.0.959/dist/preview.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.preview_preview@0.0.960/dist/preview.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.preview_preview@0.0.960/dist/preview.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -13,12 +13,12 @@ export interface PreviewDefinition {
13
13
  /**
14
14
  * path of the default template to be executed.
15
15
  */
16
- renderTemplatePath?: (context: ExecutionContext) => Promise<string>;
16
+ renderTemplatePath: (context: ExecutionContext) => Promise<string | undefined>;
17
17
  /**
18
18
  * get the template by env.
19
19
  * TODO: refactor `renderTemplatePath` to accept only an env and remove this method.
20
20
  */
21
- renderTemplatePathByEnv?: (env: Environment) => Promise<string>;
21
+ renderTemplatePathByEnv: (env: Environment) => Promise<string | undefined>;
22
22
  /**
23
23
  * get all files to require in the preview runtime.
24
24
  */
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["preview-definition.ts"],"sourcesContent":["import type { Component, ComponentMap } from '@teambit/component';\nimport type { Environment, ExecutionContext } from '@teambit/envs';\nimport type { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\n\nexport interface PreviewDefinition {\n /**\n * extension preview prefix\n */\n prefix: string;\n\n /**\n * which other extension modules to include in the preview context.\n */\n include?: string[];\n\n /**\n * path of the default template to be executed.\n */\n renderTemplatePath?: (context: ExecutionContext) => Promise<string>;\n\n /**\n * get the template by env.\n * TODO: refactor `renderTemplatePath` to accept only an env and remove this method.\n */\n renderTemplatePathByEnv?: (env: Environment) => Promise<string>;\n\n /**\n * get all files to require in the preview runtime.\n */\n getModuleMap(components: Component[]): Promise<ComponentMap<AbstractVinyl[]>>;\n\n /**\n * Whether to include the peers chunk in the output html\n */\n includePeers?: boolean;\n\n /**\n * Get metadata for the preview\n */\n getMetadata?: (component: Component) => Promise<unknown>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["preview-definition.ts"],"sourcesContent":["import type { Component, ComponentMap } from '@teambit/component';\nimport type { Environment, ExecutionContext } from '@teambit/envs';\nimport type { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\n\nexport interface PreviewDefinition {\n /**\n * extension preview prefix\n */\n prefix: string;\n\n /**\n * which other extension modules to include in the preview context.\n */\n include?: string[];\n\n /**\n * path of the default template to be executed.\n */\n renderTemplatePath: (context: ExecutionContext) => Promise<string | undefined>;\n\n /**\n * get the template by env.\n * TODO: refactor `renderTemplatePath` to accept only an env and remove this method.\n */\n renderTemplatePathByEnv: (env: Environment) => Promise<string | undefined>;\n\n /**\n * get all files to require in the preview runtime.\n */\n getModuleMap(components: Component[]): Promise<ComponentMap<AbstractVinyl[]>>;\n\n /**\n * Whether to include the peers chunk in the output html\n */\n includePeers?: boolean;\n\n /**\n * Get metadata for the preview\n */\n getMetadata?: (component: Component) => Promise<unknown>;\n}\n"],"mappings":""}
@@ -9,7 +9,7 @@ export interface PreviewType {
9
9
  /**
10
10
  * preview render method.
11
11
  */
12
- render(componentId: ComponentID, linkedModules: PreviewModule<any>, includedPreviews: string[], renderingContext: RenderingContext): void;
12
+ render(componentId: ComponentID, envId: string, linkedModules: PreviewModule<any>, includedPreviews: string[], renderingContext: RenderingContext): void;
13
13
  /**
14
14
  * determine if this will be the default preview to render.
15
15
  */
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["preview-type.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport { RenderingContext } from './rendering-context';\nimport { PreviewModule } from './types/preview-module';\n\nexport interface PreviewType {\n /**\n * preview name to register.\n */\n name: string;\n\n /**\n * preview render method.\n */\n render(\n componentId: ComponentID,\n linkedModules: PreviewModule<any>,\n includedPreviews: string[],\n renderingContext: RenderingContext\n ): void;\n\n /**\n * determine if this will be the default preview to render.\n */\n default?: boolean;\n\n /**\n * which other extension modules to include in the preview context.\n */\n include?: string[];\n\n /**\n * select relevant information to show in preview context\n */\n selectPreviewModel?: (componentId: string, module: PreviewModule) => any;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["preview-type.ts"],"sourcesContent":["import { ComponentID } from '@teambit/component-id';\nimport { RenderingContext } from './rendering-context';\nimport { PreviewModule } from './types/preview-module';\n\nexport interface PreviewType {\n /**\n * preview name to register.\n */\n name: string;\n\n /**\n * preview render method.\n */\n render(\n componentId: ComponentID,\n envId: string,\n linkedModules: PreviewModule<any>,\n includedPreviews: string[],\n renderingContext: RenderingContext\n ): void;\n\n /**\n * determine if this will be the default preview to render.\n */\n default?: boolean;\n\n /**\n * which other extension modules to include in the preview context.\n */\n include?: string[];\n\n /**\n * select relevant information to show in preview context\n */\n selectPreviewModel?: (componentId: string, module: PreviewModule) => any;\n}\n"],"mappings":""}
@@ -11,6 +11,7 @@ import { Workspace } from '@teambit/workspace';
11
11
  import { LoggerMain, Logger } from '@teambit/logger';
12
12
  import type { DependencyResolverMain } from '@teambit/dependency-resolver';
13
13
  import { GraphqlMain } from '@teambit/graphql';
14
+ import { MainModulesMap } from './generate-link';
14
15
  import { PreviewArtifact } from './preview-artifact';
15
16
  import { PreviewDefinition } from './preview-definition';
16
17
  import { BundlingStrategy } from './bundling-strategy';
@@ -242,7 +243,7 @@ export declare class PreviewMain {
242
243
  * @param defaultModule
243
244
  * @param dirName
244
245
  */
245
- writeLink(prefix: string, moduleMap: ComponentMap<string[]>, defaultModule: string | undefined, dirName: string, isSplitComponentBundle: boolean): string;
246
+ writeLink(prefix: string, moduleMap: ComponentMap<string[]>, mainModulesMap: MainModulesMap, dirName: string, isSplitComponentBundle: boolean): string;
246
247
  writeLinkContents(contents: string, targetDir: string, prefix: string): string;
247
248
  private executionRefs;
248
249
  private getPreviewTarget;
@@ -311,6 +311,7 @@ class PreviewMain {
311
311
  // add / remove / etc
312
312
  updater(executionRef);
313
313
  await this.updateLinkFiles(executionRef.currentComponents, executionRef.executionCtx);
314
+ throw new Error('gilad');
314
315
  return noopResult;
315
316
  });
316
317
  (0, _defineProperty2().default)(this, "handleComponentRemoval", cId => {
@@ -658,8 +659,8 @@ class PreviewMain {
658
659
  * @param defaultModule
659
660
  * @param dirName
660
661
  */
661
- writeLink(prefix, moduleMap, defaultModule, dirName, isSplitComponentBundle) {
662
- const contents = (0, _generateLink().generateLink)(prefix, moduleMap, defaultModule, isSplitComponentBundle);
662
+ writeLink(prefix, moduleMap, mainModulesMap, dirName, isSplitComponentBundle) {
663
+ const contents = (0, _generateLink().generateLink)(prefix, moduleMap, mainModulesMap, isSplitComponentBundle);
663
664
  return this.writeLinkContents(contents, dirName, prefix);
664
665
  }
665
666
  writeLinkContents(contents, targetDir, prefix) {
@@ -688,12 +689,28 @@ class PreviewMain {
688
689
  const previews = this.previewSlot.values();
689
690
  const paths = previews.map(async previewDef => {
690
691
  var _previewDef$renderTem, _this$getEnvPreviewCo;
691
- const templatePath = await ((_previewDef$renderTem = previewDef.renderTemplatePath) === null || _previewDef$renderTem === void 0 ? void 0 : _previewDef$renderTem.call(previewDef, context));
692
+ const defaultTemplatePath = await ((_previewDef$renderTem = previewDef.renderTemplatePathByEnv) === null || _previewDef$renderTem === void 0 ? void 0 : _previewDef$renderTem.call(previewDef, context.env));
693
+ const visitedEnvs = new Set();
694
+ const mainModulesMap = {
695
+ // @ts-ignore
696
+ default: defaultTemplatePath,
697
+ [context.envDefinition.id]: defaultTemplatePath
698
+ };
692
699
  const map = await previewDef.getModuleMap(components);
693
700
  const isSplitComponentBundle = (_this$getEnvPreviewCo = this.getEnvPreviewConfig().splitComponentBundle) !== null && _this$getEnvPreviewCo !== void 0 ? _this$getEnvPreviewCo : false;
694
- const withPaths = map.map((files, component) => {
701
+ const withPathsP = map.asyncMap(async (files, component) => {
695
702
  var _environment$getCompi, _compilerInstance$get;
696
- const environment = this.envs.getEnv(component).env;
703
+ const envDef = this.envs.getEnv(component);
704
+ const environment = envDef.env;
705
+ const envId = envDef.id;
706
+ if (!mainModulesMap[envId] && !visitedEnvs.has(envId)) {
707
+ var _previewDef$renderTem2;
708
+ const modulePath = await ((_previewDef$renderTem2 = previewDef.renderTemplatePathByEnv) === null || _previewDef$renderTem2 === void 0 ? void 0 : _previewDef$renderTem2.call(previewDef, envDef.env));
709
+ if (modulePath) {
710
+ mainModulesMap[envId] = modulePath;
711
+ }
712
+ visitedEnvs.add(envId);
713
+ }
697
714
  const compilerInstance = (_environment$getCompi = environment.getCompiler) === null || _environment$getCompi === void 0 ? void 0 : _environment$getCompi.call(environment);
698
715
  const modulePath = (compilerInstance === null || compilerInstance === void 0 ? void 0 : (_compilerInstance$get = compilerInstance.getPreviewComponentRootPath) === null || _compilerInstance$get === void 0 ? void 0 : _compilerInstance$get.call(compilerInstance, component)) || this.pkg.getRuntimeModulePath(component);
699
716
  return files.map(file => {
@@ -706,11 +723,12 @@ class PreviewMain {
706
723
  // return files.map((file) => file.path);
707
724
  });
708
725
 
726
+ const withPaths = await withPathsP;
709
727
  const dirPath = (0, _path().join)(this.tempFolder, context.id);
710
728
  if (!(0, _fsExtra().existsSync)(dirPath)) (0, _fsExtra().mkdirSync)(dirPath, {
711
729
  recursive: true
712
730
  });
713
- const link = this.writeLink(previewDef.prefix, withPaths, templatePath, dirPath, isSplitComponentBundle);
731
+ const link = this.writeLink(previewDef.prefix, withPaths, mainModulesMap, dirPath, isSplitComponentBundle);
714
732
  return link;
715
733
  });
716
734
  return Promise.all(paths);
@@ -1 +1 @@
1
- {"version":3,"names":["noopResult","results","toString","DEFAULT_TEMP_DIR","join","CACHE_ROOT","PreviewAspect","id","PreviewMain","constructor","harmony","previewSlot","ui","envs","componentAspect","pkg","aspectLoader","config","bundlingStrategySlot","builder","workspace","logger","dependencyResolver","Map","Date","now","c","updater","env","getEnv","envId","executionRef","executionRefs","get","warn","updateLinkFiles","currentComponents","executionCtx","cId","component","forEach","components","found","Promise","resolve","handleComponentChange","remove","tempFolder","getTempDir","getComponentBundleSize","data","getDataByAspect","undefined","COMPONENT_STRATEGY_SIZE_KEY_NAME","getPreview","artifacts","getArtifactsVinylByAspectAndTaskName","PREVIEW_TASK_NAME","PreviewArtifact","getPreviewFiles","isBundledWithEnv","files","getPaths","getPreviewAspectConfig","state","aspects","getPreviewData","previewData","calcPreviewData","doesScaling","calcDoesScalingForComponent","dataFromEnv","calcPreviewDataFromEnv","envData","calculateDataForEnvComponent","toStringWithoutVersion","strategyName","COMPONENT_PREVIEW_STRATEGY_NAME","splitComponentBundle","envPreviewConfig","getEnvPreviewConfig","envComponent","isEnv","previewAspectConfig","isScaling","calcIsBundledWithEnv","envPreviewData","isBundledWithEnvBackward","ENV_PREVIEW_STRATEGY_NAME","getArtifactsVinylByAspectAndName","COMPONENT_STRATEGY_ARTIFACT_NAME","length","isUsingCoreEnv","isNew","getEnvComponent","isEnvSupportScaling","inWorkspace","hasId","envSupportScaling","calculateIsEnvSupportScaling","isSupportSkipIncludes","isCore","skipIncludes","isLegacyHeader","ENV_WITH_LEGACY_DOCS","ENV_STRATEGY_ARTIFACT_NAME","envType","getEnvData","type","includes","getEnvTemplate","GENERATE_ENV_TEMPLATE_TASK_NAME","getCoreEnvTemplate","coreEnvDir","getAspectDir","artifactDef","getEnvTemplateArtifactDef","artifactFactory","ArtifactFactory","rootDir","getRootDir","existsSync","coreEnvDirFromBvm","getAspectDirFromBvm","paths","resolvePaths","artifactFiles","ArtifactFiles","populateVinylsFromPaths","vinyls","getEnvTemplateFromComponentEnv","getEnvId","getEnvTemplateByEnvId","isCoreEnv","host","getHost","resolvedEnvId","resolveComponentId","BitError","getDefs","values","writeLink","prefix","moduleMap","defaultModule","dirName","isSplitComponentBundle","contents","generateLink","writeLinkContents","targetDir","hash","objectHash","targetPath","timestamp","writeHash","writeFileSync","set","getPreviewTarget","context","relatedContexts","ctxId","ExecutionRef","previewRuntime","writePreviewRuntime","linkFiles","previews","map","previewDef","templatePath","renderTemplatePath","getModuleMap","withPaths","environment","compilerInstance","getCompiler","modulePath","getPreviewComponentRootPath","getRuntimeModulePath","file","path","distRelativePath","getDistPathBySrcPath","relative","dirPath","mkdirSync","recursive","link","all","aspectsIdsToNotFilterOut","name","uiRoot","getUi","resolvedAspects","resolveAspects","PreviewRuntime","filteredAspects","filterAspectsByExecutionContext","filePath","generateRoot","runtimeName","componentIds","opts","root","MainRuntime","Error","allComponentContextAspects","reduce","acc","curr","concat","ids","hostAspects","Object","keys","toObject","allAspectsToInclude","uniq","filtered","filter","aspect","getId","isCoreAspect","getDefaultStrategies","EnvBundlingStrategy","ComponentBundlingStrategy","getPreviewConfig","getBundlingStrategy","defaultStrategies","strategyFromEnv","bundlingStrategy","strategies","selected","find","strategy","BundlingStrategyNotFound","registerBundlingStrategy","register","registerDefinition","provider","bundler","componentExtension","uiMain","pubsub","loggerMain","graphql","createLogger","preview","registerStartPlugin","PreviewStartPlugin","registerRoute","PreviewRoute","ComponentPreviewRoute","EnvTemplateRoute","PreviewAssetsRoute","registerTarget","entry","bind","disabled","registerBuildTasks","EnvPreviewTemplateTask","PreviewTask","registerOnComponentAdd","add","onComponentLoad","registerOnComponentChange","update","registerOnComponentRemove","handleComponentRemoval","registerService","PreviewService","previewSchema","Slot","withType","BundlerAspect","BuilderAspect","ComponentAspect","UIAspect","EnvsAspect","WorkspaceAspect","PkgAspect","PubsubAspect","AspectLoaderAspect","LoggerAspect","DependencyResolverAspect","GraphqlAspect","addRuntime"],"sources":["preview.main.runtime.tsx"],"sourcesContent":["import { ArtifactFactory, BuilderAspect } from '@teambit/builder';\nimport type { BuilderMain } from '@teambit/builder';\nimport { Asset, BundlerAspect, BundlerMain } from '@teambit/bundler';\nimport { PubsubAspect, PubsubMain } from '@teambit/pubsub';\nimport { MainRuntime } from '@teambit/cli';\nimport {\n Component,\n ComponentAspect,\n ComponentMain,\n ComponentMap,\n ComponentID,\n ResolveAspectsOptions,\n} from '@teambit/component';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { EnvsMain, ExecutionContext, PreviewEnv } from '@teambit/envs';\nimport { Slot, SlotRegistry, Harmony } from '@teambit/harmony';\nimport { UIAspect, UiMain, UIRoot } from '@teambit/ui';\nimport { CACHE_ROOT } from '@teambit/legacy/dist/constants';\nimport { BitError } from '@teambit/bit-error';\nimport objectHash from 'object-hash';\nimport { uniq } from 'lodash';\nimport { writeFileSync, existsSync, mkdirSync } from 'fs-extra';\nimport { join } from 'path';\nimport { PkgAspect, PkgMain } from '@teambit/pkg';\nimport { AspectLoaderAspect, getAspectDir, getAspectDirFromBvm } from '@teambit/aspect-loader';\nimport type { AspectDefinition, AspectLoaderMain } from '@teambit/aspect-loader';\nimport WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport { LoggerAspect, LoggerMain, Logger } from '@teambit/logger';\nimport { DependencyResolverAspect } from '@teambit/dependency-resolver';\nimport type { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { ArtifactFiles } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport GraphqlAspect, { GraphqlMain } from '@teambit/graphql';\nimport { BundlingStrategyNotFound } from './exceptions';\nimport { generateLink } from './generate-link';\nimport { PreviewArtifact } from './preview-artifact';\nimport { PreviewDefinition } from './preview-definition';\nimport { PreviewAspect, PreviewRuntime } from './preview.aspect';\nimport { PreviewRoute } from './preview.route';\nimport { PreviewTask, PREVIEW_TASK_NAME } from './preview.task';\nimport { BundlingStrategy } from './bundling-strategy';\nimport {\n EnvBundlingStrategy,\n ComponentBundlingStrategy,\n COMPONENT_STRATEGY_ARTIFACT_NAME,\n COMPONENT_STRATEGY_SIZE_KEY_NAME,\n ENV_PREVIEW_STRATEGY_NAME,\n ENV_STRATEGY_ARTIFACT_NAME,\n COMPONENT_PREVIEW_STRATEGY_NAME,\n} from './strategies';\nimport { ExecutionRef } from './execution-ref';\nimport { PreviewStartPlugin } from './preview.start-plugin';\nimport {\n EnvPreviewTemplateTask,\n GENERATE_ENV_TEMPLATE_TASK_NAME,\n getArtifactDef as getEnvTemplateArtifactDef,\n} from './env-preview-template.task';\nimport { EnvTemplateRoute } from './env-template.route';\nimport { ComponentPreviewRoute } from './component-preview.route';\nimport { previewSchema } from './preview.graphql';\nimport { PreviewAssetsRoute } from './preview-assets.route';\nimport { PreviewService } from './preview.service';\n\nconst noopResult = {\n results: [],\n toString: () => `updating link file`,\n};\n\nconst DEFAULT_TEMP_DIR = join(CACHE_ROOT, PreviewAspect.id);\n\nexport type PreviewDefinitionRegistry = SlotRegistry<PreviewDefinition>;\n\nexport type PreviewStrategyName = 'env' | 'component';\n\nexport type PreviewFiles = {\n files: string[];\n isBundledWithEnv: boolean;\n};\n\nexport type ComponentPreviewSizedFile = Asset;\n\nexport type ComponentPreviewSize = {\n files: ComponentPreviewSizedFile[];\n assets: ComponentPreviewSizedFile[];\n totalFiles: number;\n compressedTotalFiles?: number;\n totalAssets: number;\n compressedTotalAssets?: number;\n total: number;\n compressedTotal?: number;\n};\n\nexport type ComponentPreviewMetaData = {\n size?: ComponentPreviewSize;\n};\n\nexport type PreviewVariantConfig = {\n isScaling?: boolean;\n};\n\n/**\n * Preview data that stored on the component on load\n */\nexport type PreviewComponentData = PreviewAnyComponentData & PreviewEnvComponentData;\n\n/**\n * Preview data that stored on the component on load for any component\n */\nexport type PreviewAnyComponentData = {\n doesScaling?: boolean;\n /**\n * The strategy configured by the component's env\n */\n strategyName?: PreviewStrategyName;\n /**\n * Does the component has a bundle for the component itself (separated from the compositions/docs)\n * Calculated by the component's env\n */\n splitComponentBundle?: boolean;\n\n /**\n * don't allow other aspects implementing a preview definition to be included in your preview.\n */\n skipIncludes?: boolean;\n};\n\n/**\n * Preview data that stored on the component on load if the component is an env\n */\nexport type PreviewEnvComponentData = {\n isScaling?: boolean;\n};\n\nexport type PreviewConfig = {\n bundlingStrategy?: string;\n disabled: boolean;\n /**\n * limit concurrent components when running the bundling step for your bundler during generate components preview task.\n * this helps mitigate large memory consumption for the build pipeline. This may increase the overall time for the generate-preview task, but reduce memory footprint.\n * default - no limit.\n */\n maxChunkSize?: number;\n};\n\nexport type EnvPreviewConfig = {\n strategyName?: PreviewStrategyName;\n splitComponentBundle?: boolean;\n};\n\nexport type BundlingStrategySlot = SlotRegistry<BundlingStrategy>;\n\nexport type GenerateLinkFn = (prefix: string, componentMap: ComponentMap<string[]>, defaultModule?: string) => string;\n\nexport class PreviewMain {\n constructor(\n /**\n * harmony context.\n */\n private harmony: Harmony,\n\n /**\n * slot for preview definitions.\n */\n private previewSlot: PreviewDefinitionRegistry,\n\n private ui: UiMain,\n\n private envs: EnvsMain,\n\n private componentAspect: ComponentMain,\n\n private pkg: PkgMain,\n\n private aspectLoader: AspectLoaderMain,\n\n readonly config: PreviewConfig,\n\n private bundlingStrategySlot: BundlingStrategySlot,\n\n private builder: BuilderMain,\n\n private workspace: Workspace | undefined,\n\n private logger: Logger,\n\n private dependencyResolver: DependencyResolverMain\n ) {}\n\n get tempFolder(): string {\n return this.workspace?.getTempDir(PreviewAspect.id) || DEFAULT_TEMP_DIR;\n }\n\n getComponentBundleSize(component: Component): ComponentPreviewSize | undefined {\n const data = this.builder.getDataByAspect(component, PreviewAspect.id);\n\n if (!data) return undefined;\n return data[COMPONENT_STRATEGY_SIZE_KEY_NAME];\n }\n\n async getPreview(component: Component): Promise<PreviewArtifact | undefined> {\n const artifacts = await this.builder.getArtifactsVinylByAspectAndTaskName(\n component,\n PreviewAspect.id,\n PREVIEW_TASK_NAME\n );\n if (!artifacts) return undefined;\n return new PreviewArtifact(artifacts);\n }\n\n /**\n * Get a list of all the artifact files generated during the GeneratePreview task\n * @param component\n * @returns\n */\n async getPreviewFiles(component: Component): Promise<PreviewFiles | undefined> {\n const artifacts = await this.getPreview(component);\n const isBundledWithEnv = await this.isBundledWithEnv(component);\n if (!artifacts) return undefined;\n return {\n files: artifacts.getPaths(),\n isBundledWithEnv,\n };\n }\n\n /**\n * Get the preview config of the component.\n * (config that was set by variants or on bitmap)\n * @param component\n * @returns\n */\n getPreviewAspectConfig(component: Component): PreviewVariantConfig | undefined {\n return component.state.aspects.get(PreviewAspect.id)?.config;\n }\n\n /**\n * Get the preview data of the component.\n * (data that was calculated during the on load process)\n * @param component\n * @returns\n */\n getPreviewData(component: Component): PreviewComponentData | undefined {\n const previewData = component.state.aspects.get(PreviewAspect.id)?.data;\n return previewData;\n }\n\n /**\n * Calculate preview data on component load\n * @param component\n * @returns\n */\n async calcPreviewData(component: Component): Promise<PreviewComponentData> {\n const doesScaling = await this.calcDoesScalingForComponent(component);\n const dataFromEnv = await this.calcPreviewDataFromEnv(component);\n const envData = (await this.calculateDataForEnvComponent(component)) || {};\n const data: PreviewComponentData = {\n doesScaling,\n ...dataFromEnv,\n ...envData,\n };\n return data;\n }\n\n /**\n * Calculate preview data on component that configured by its env\n * @param component\n * @returns\n */\n async calcPreviewDataFromEnv(component: Component): Promise<Omit<PreviewAnyComponentData, 'doesScaling'> | undefined> {\n // Prevent infinite loop that caused by the fact that the env of the aspect env or the env env is the same as the component\n // so we can't load it since during load we are trying to get env component and load it again\n if (component.id.toStringWithoutVersion() === 'teambit.harmony/aspect' || component.id.toStringWithoutVersion() === 'teambit.envs/env'){\n return {\n strategyName: COMPONENT_PREVIEW_STRATEGY_NAME,\n splitComponentBundle: false,\n }\n }\n\n const env = this.envs.getEnv(component).env;\n const envPreviewConfig = this.getEnvPreviewConfig(env);\n const data = {\n strategyName: envPreviewConfig?.strategyName,\n splitComponentBundle: envPreviewConfig?.splitComponentBundle ?? false,\n };\n return data;\n }\n\n /**\n * calculate extra preview data for env components (on load)\n * @param envComponent\n * @returns\n */\n private async calculateDataForEnvComponent(envComponent: Component): Promise<PreviewEnvComponentData | undefined> {\n const isEnv = this.envs.isEnv(envComponent);\n // If the component is not an env, we don't want to store anything in the data\n if (!isEnv) return undefined;\n const previewAspectConfig = this.getPreviewAspectConfig(envComponent);\n\n const data = {\n // default to true if the env doesn't have a preview config\n isScaling: previewAspectConfig?.isScaling ?? true,\n // disalbe it for now, we will re-enable it later\n // skipIncludes: true,\n };\n return data;\n }\n\n /**\n * Check if the component preview bundle contain the env as part of the bundle or only the component code\n * (we used in the past to bundle them together, there might also be specific envs which still uses the env strategy)\n * This should be used only for calculating the value on load.\n * otherwise, use the isBundledWithEnv function\n * @param component\n * @returns\n */\n async calcIsBundledWithEnv(component: Component): Promise<boolean> {\n const envPreviewData = await this.calcPreviewDataFromEnv(component);\n return envPreviewData?.strategyName !== 'component';\n }\n\n\n /**\n * Check if the component preview bundle contain the env as part of the bundle or only the component code\n * (we used in the past to bundle them together, there might also be specific envs which still uses the env strategy)\n * @param component\n * @returns\n */\n async isBundledWithEnv(component: Component): Promise<boolean> {\n const data = await this.getPreviewData(component);\n // For components that tagged in the past we didn't store the data, so we calculate it the old way\n // We comparing the strategyName to undefined to cover a specific case when it doesn't exist at all.\n if (!data || data.strategyName === undefined) return this.isBundledWithEnvBackward(component);\n return data.strategyName === ENV_PREVIEW_STRATEGY_NAME;\n }\n\n /**\n * This is a legacy calculation for the isBundledWithEnv\n * This calc is based on the component artifacts which is very expensive operation as it requires to fetch and load the artifacts\n * See the new implementation in the isBundledWithEnv method\n * @param component\n * @returns\n */\n private async isBundledWithEnvBackward(component: Component): Promise<boolean> {\n const artifacts = await this.builder.getArtifactsVinylByAspectAndName(\n component,\n PreviewAspect.id,\n COMPONENT_STRATEGY_ARTIFACT_NAME\n );\n if (!artifacts || !artifacts.length) return true;\n\n return false;\n }\n\n // This used on component load to calc the final result of support is scaling for a given component\n // This calc based on the env, env data, env preview config and more\n // if you want to get the final result use the `doesScaling` method below\n // This should be used only for component load\n private async calcDoesScalingForComponent(component: Component): Promise<boolean> {\n const isBundledWithEnv = await this.calcIsBundledWithEnv(component);\n // if it's a core env and the env template is apart from the component it means the template bundle already contain the scaling functionality\n if (this.envs.isUsingCoreEnv(component)) {\n // If the component is new, no point to check the is bundle with env (there is no artifacts so it will for sure return false)\n // If it's new, and we are here, it means that we already use a version of the env that support scaling\n const isNew = await component.isNew();\n if (isNew) {\n return true;\n }\n return isBundledWithEnv === false;\n }\n // For envs that bundled with the env return true always\n if (isBundledWithEnv) {\n return true;\n }\n const envComponent = await this.envs.getEnvComponent(component);\n return this.isEnvSupportScaling(envComponent);\n }\n\n /**\n * can the current component preview scale in size for different preview sizes.\n * this calculation is based on the env of the component and if the env of the component support it.\n */\n async doesScaling(component: Component): Promise<boolean> {\n const inWorkspace = await this.workspace?.hasId(component.id);\n // Support case when we have the dev server for the env, in that case we calc the data of the env as we can't rely on the env data from the scope\n // since we bundle it for the dev server again\n if (inWorkspace) {\n const envComponent = await this.envs.getEnvComponent(component);\n const envSupportScaling = await this.calculateIsEnvSupportScaling(envComponent);\n return envSupportScaling ?? true;\n }\n const previewData = this.getPreviewData(component);\n if (!previewData) return false;\n // Get the does scaling (the new calculation) or the old calc used in isScaling (between versions (about) 848 and 860)\n if (previewData.doesScaling !== undefined) return previewData.doesScaling;\n // in case this component were tagged with versions between 848 and 860 we need to use the old calculation\n // together with the env calculation\n // In that case it means the component already tagged, so we take the env calc from the env data and not re-calc it\n if (previewData.isScaling) {\n const envComponent = await this.envs.getEnvComponent(component);\n const envSupportScaling = this.isEnvSupportScaling(envComponent);\n return !!envSupportScaling;\n }\n return false;\n }\n\n /**\n * Check if the current version of the env support scaling\n * @param envComponent\n * @returns\n */\n isEnvSupportScaling(envComponent: Component): boolean {\n const previewData = this.getPreviewData(envComponent);\n return !!previewData?.isScaling;\n }\n\n async isSupportSkipIncludes(component: Component) {\n const isCore = this.envs.isUsingCoreEnv(component);\n if (isCore) return false;\n\n const envComponent = await this.envs.getEnvComponent(component);\n const previewData = this.getPreviewData(envComponent);\n return !!previewData?.skipIncludes;\n }\n\n /**\n * This function is calculate the isScaling support flag for the component preview.\n * This is calculated only for the env component and not for the component itself.\n * It should be only used during the (env) component on load.\n * Once the component load, you should only use the `isEnvSupportScaling` to fetch it from the calculated data.\n * If you want to check if an env for a given component support scaling, use the `isScaling` function.\n * @param component\n * @returns\n */\n private async calculateIsEnvSupportScaling(envComponent: Component): Promise<boolean | undefined> {\n const isEnv = this.envs.isEnv(envComponent);\n // If the component is not an env, we don't want to store anything in the data\n if (!isEnv) return undefined;\n const previewAspectConfig = this.getPreviewAspectConfig(envComponent);\n // default to true if the env doesn't have a preview config\n return previewAspectConfig?.isScaling ?? true;\n }\n\n /**\n * Check if the component preview bundle contain the header inside of it (legacy)\n * today we are not including the header inside anymore\n * @param component\n * @returns\n */\n async isLegacyHeader(component: Component): Promise<boolean> {\n // these envs had header in their docs\n const ENV_WITH_LEGACY_DOCS = ['react', 'env', 'aspect', 'lit', 'html', 'node', 'mdx', 'react-native', 'readme'];\n\n const artifacts = await this.builder.getArtifactsVinylByAspectAndName(\n component,\n PreviewAspect.id,\n ENV_STRATEGY_ARTIFACT_NAME\n );\n const envType = this.envs.getEnvData(component).type;\n return !!artifacts && !!artifacts.length && ENV_WITH_LEGACY_DOCS.includes(envType);\n }\n\n /**\n * Getting the env template artifact\n * This should be called with the env itself or it will return undefined\n * If you want to get the env template from the env of the component,\n * use: getEnvTemplateFromComponentEnv below\n *\n * @param component\n * @returns\n */\n async getEnvTemplate(component: Component): Promise<PreviewArtifact | undefined> {\n const artifacts = await this.builder.getArtifactsVinylByAspectAndTaskName(\n component,\n PreviewAspect.id,\n GENERATE_ENV_TEMPLATE_TASK_NAME\n );\n if (!artifacts || !artifacts.length) return undefined;\n\n return new PreviewArtifact(artifacts);\n }\n\n /**\n * This is a special method to get a core env template\n * As the core envs doesn't exist in the scope we need to bring it from other place\n * We will bring it from the core env package files\n */\n private async getCoreEnvTemplate(envId: string): Promise<PreviewArtifact | undefined> {\n const coreEnvDir = getAspectDir(envId);\n // const finalDir = join(coreEnvDir, getEnvTemplateArtifactDirectory());\n const artifactDef = getEnvTemplateArtifactDef()[0];\n const artifactFactory = new ArtifactFactory();\n\n let rootDir = artifactFactory.getRootDir(coreEnvDir, artifactDef);\n if (!existsSync(rootDir)) {\n // fallback to the bvm folder\n const coreEnvDirFromBvm = getAspectDirFromBvm(envId);\n rootDir = artifactFactory.getRootDir(coreEnvDirFromBvm, artifactDef);\n }\n if (!existsSync(rootDir)) {\n return undefined;\n }\n const paths = artifactFactory.resolvePaths(rootDir, artifactDef);\n if (!paths || !paths.length) {\n return undefined;\n }\n const artifactFiles = new ArtifactFiles(paths);\n\n artifactFiles.populateVinylsFromPaths(rootDir);\n return new PreviewArtifact(artifactFiles.vinyls);\n }\n\n /**\n * This will fetch the component env, then will take the env template from the component env\n * @param component\n */\n async getEnvTemplateFromComponentEnv(component: Component): Promise<PreviewArtifact | undefined> {\n const envId = this.envs.getEnvId(component);\n return this.getEnvTemplateByEnvId(envId);\n }\n\n /**\n * This will fetch the component env, then will take the env template from the component env\n * @param component\n */\n async getEnvTemplateByEnvId(envId: string): Promise<PreviewArtifact | undefined> {\n // Special treatment for core envs\n if (this.aspectLoader.isCoreEnv(envId)) {\n return this.getCoreEnvTemplate(envId);\n }\n const host = this.componentAspect.getHost();\n const resolvedEnvId = await host.resolveComponentId(envId);\n const envComponent = await host.get(resolvedEnvId);\n if (!envComponent) {\n throw new BitError(`can't load env. env id is ${envId}`);\n }\n return this.getEnvTemplate(envComponent);\n }\n\n getDefs(): PreviewDefinition[] {\n return this.previewSlot.values();\n }\n\n private writeHash = new Map<string, string>();\n private timestamp = Date.now();\n\n /**\n * write a link to load custom modules dynamically.\n * @param prefix write\n * @param moduleMap map of components to module paths to require.\n * @param defaultModule\n * @param dirName\n */\n writeLink(\n prefix: string,\n moduleMap: ComponentMap<string[]>,\n defaultModule: string | undefined,\n dirName: string,\n isSplitComponentBundle: boolean\n ) {\n const contents = generateLink(prefix, moduleMap, defaultModule, isSplitComponentBundle);\n return this.writeLinkContents(contents, dirName, prefix);\n }\n\n writeLinkContents(contents: string, targetDir: string, prefix: string) {\n const hash = objectHash(contents);\n const targetPath = join(targetDir, `${prefix}-${this.timestamp}.js`);\n\n // write only if link has changed (prevents triggering fs watches)\n if (this.writeHash.get(targetPath) !== hash) {\n writeFileSync(targetPath, contents);\n this.writeHash.set(targetPath, hash);\n }\n\n return targetPath;\n }\n\n private executionRefs = new Map<string, ExecutionRef>();\n\n private async getPreviewTarget(\n /** execution context (of the specific env) */\n context: ExecutionContext\n ): Promise<string[]> {\n // store context for later link-file updates\n // also register related envs that this context is acting on their behalf\n [context.id, ...context.relatedContexts].forEach((ctxId) => {\n this.executionRefs.set(ctxId, new ExecutionRef(context));\n });\n\n const previewRuntime = await this.writePreviewRuntime(context);\n const linkFiles = await this.updateLinkFiles(context.components, context);\n\n return [...linkFiles, previewRuntime];\n }\n\n private updateLinkFiles(components: Component[] = [], context: ExecutionContext) {\n const previews = this.previewSlot.values();\n const paths = previews.map(async (previewDef) => {\n const templatePath = await previewDef.renderTemplatePath?.(context);\n\n const map = await previewDef.getModuleMap(components);\n const isSplitComponentBundle = this.getEnvPreviewConfig().splitComponentBundle ?? false;\n const withPaths = map.map<string[]>((files, component) => {\n const environment = this.envs.getEnv(component).env;\n const compilerInstance = environment.getCompiler?.();\n const modulePath =\n compilerInstance?.getPreviewComponentRootPath?.(component) || this.pkg.getRuntimeModulePath(component);\n return files.map((file) => {\n if (!this.workspace || !compilerInstance) {\n return file.path;\n }\n const distRelativePath = compilerInstance.getDistPathBySrcPath(file.relative);\n return join(this.workspace.path, modulePath, distRelativePath);\n });\n // return files.map((file) => file.path);\n });\n\n const dirPath = join(this.tempFolder, context.id);\n if (!existsSync(dirPath)) mkdirSync(dirPath, { recursive: true });\n\n const link = this.writeLink(previewDef.prefix, withPaths, templatePath, dirPath, isSplitComponentBundle);\n return link;\n });\n\n return Promise.all(paths);\n }\n\n async writePreviewRuntime(context: { components: Component[] }, aspectsIdsToNotFilterOut: string[] = []) {\n const [name, uiRoot] = this.getUi();\n const resolvedAspects = await this.resolveAspects(PreviewRuntime.name, undefined, uiRoot);\n const filteredAspects = this.filterAspectsByExecutionContext(resolvedAspects, context, aspectsIdsToNotFilterOut);\n const filePath = await this.ui.generateRoot(filteredAspects, name, 'preview', PreviewAspect.id);\n return filePath;\n }\n\n async resolveAspects(\n runtimeName?: string,\n componentIds?: ComponentID[],\n uiRoot?: UIRoot,\n opts?: ResolveAspectsOptions\n ): Promise<AspectDefinition[]> {\n const root = uiRoot || this.getUi()[1];\n runtimeName = runtimeName || MainRuntime.name;\n const resolvedAspects = await root.resolveAspects(runtimeName, componentIds, opts);\n return resolvedAspects;\n }\n\n private getUi() {\n const ui = this.ui.getUi();\n if (!ui) throw new Error('ui not found');\n return ui;\n }\n\n /**\n * Filter the aspects to have only aspects that are:\n * 1. core aspects\n * 2. configured on the host (workspace/scope)\n * 3. used by at least one component from the context\n * @param aspects\n * @param context\n */\n private filterAspectsByExecutionContext(\n aspects: AspectDefinition[],\n context: { components: Component[] },\n aspectsIdsToNotFilterOut: string[] = []\n ) {\n let allComponentContextAspects: string[] = [];\n allComponentContextAspects = context.components.reduce((acc, curr) => {\n return acc.concat(curr.state.aspects.ids);\n }, allComponentContextAspects);\n const hostAspects = Object.keys(this.harmony.config.toObject());\n const allAspectsToInclude = uniq(hostAspects.concat(allComponentContextAspects));\n const filtered = aspects.filter((aspect) => {\n if (!aspect.getId) {\n return false;\n }\n return (\n this.aspectLoader.isCoreAspect(aspect.getId) ||\n allAspectsToInclude.includes(aspect.getId) ||\n aspectsIdsToNotFilterOut.includes(aspect.getId)\n );\n });\n\n return filtered;\n }\n\n private getDefaultStrategies() {\n return [\n new EnvBundlingStrategy(this, this.pkg, this.dependencyResolver),\n new ComponentBundlingStrategy(this, this.pkg, this.dependencyResolver),\n ];\n }\n\n // TODO - executionContext should be responsible for updating components list, and emit 'update' events\n // instead we keep track of changes\n private handleComponentChange = async (c: Component, updater: (currentComponents: ExecutionRef) => void) => {\n const env = this.envs.getEnv(c);\n const envId = env.id.toString();\n\n const executionRef = this.executionRefs.get(envId);\n if (!executionRef) {\n this.logger.warn(\n `failed to update link file for component \"${c.id.toString()}\" - could not find execution context for ${envId}`\n );\n return noopResult;\n }\n\n // add / remove / etc\n updater(executionRef);\n\n await this.updateLinkFiles(executionRef.currentComponents, executionRef.executionCtx);\n\n return noopResult;\n };\n\n private handleComponentRemoval = (cId: ComponentID) => {\n let component: Component | undefined;\n this.executionRefs.forEach((components) => {\n const found = components.get(cId);\n if (found) component = found;\n });\n if (!component) return Promise.resolve(noopResult);\n\n return this.handleComponentChange(component, (currentComponents) => currentComponents.remove(cId));\n };\n\n getEnvPreviewConfig(env?: PreviewEnv): EnvPreviewConfig {\n const config = env?.getPreviewConfig && typeof env?.getPreviewConfig === 'function' ? env?.getPreviewConfig() : {};\n\n return config;\n }\n\n /**\n * return the configured bundling strategy.\n */\n getBundlingStrategy(env?: PreviewEnv): BundlingStrategy {\n const defaultStrategies = this.getDefaultStrategies();\n const envPreviewConfig = this.getEnvPreviewConfig(env);\n const strategyFromEnv = envPreviewConfig?.strategyName;\n const strategyName = strategyFromEnv || this.config.bundlingStrategy || 'env';\n const strategies = this.bundlingStrategySlot.values().concat(defaultStrategies);\n const selected = strategies.find((strategy) => {\n return strategy.name === strategyName;\n });\n\n if (!selected) throw new BundlingStrategyNotFound(strategyName);\n\n return selected;\n }\n\n /**\n * register a new bundling strategy. default available strategies are `env` and ``\n */\n registerBundlingStrategy(bundlingStrategy: BundlingStrategy) {\n this.bundlingStrategySlot.register(bundlingStrategy);\n return this;\n }\n\n /**\n * register a new preview definition.\n */\n registerDefinition(previewDef: PreviewDefinition) {\n this.previewSlot.register(previewDef);\n }\n\n static slots = [Slot.withType<PreviewDefinition>(), Slot.withType<BundlingStrategy>()];\n\n static runtime = MainRuntime;\n static dependencies = [\n BundlerAspect,\n BuilderAspect,\n ComponentAspect,\n UIAspect,\n EnvsAspect,\n WorkspaceAspect,\n PkgAspect,\n PubsubAspect,\n AspectLoaderAspect,\n LoggerAspect,\n DependencyResolverAspect,\n GraphqlAspect,\n ];\n\n static defaultConfig = {\n disabled: false,\n };\n\n static async provider(\n // eslint-disable-next-line max-len\n [\n bundler,\n builder,\n componentExtension,\n uiMain,\n envs,\n workspace,\n pkg,\n pubsub,\n aspectLoader,\n loggerMain,\n dependencyResolver,\n graphql,\n ]: [\n BundlerMain,\n BuilderMain,\n ComponentMain,\n UiMain,\n EnvsMain,\n Workspace | undefined,\n PkgMain,\n PubsubMain,\n AspectLoaderMain,\n LoggerMain,\n DependencyResolverMain,\n GraphqlMain\n ],\n config: PreviewConfig,\n [previewSlot, bundlingStrategySlot]: [PreviewDefinitionRegistry, BundlingStrategySlot],\n harmony: Harmony\n ) {\n const logger = loggerMain.createLogger(PreviewAspect.id);\n // app.registerApp(new PreviewApp());\n const preview = new PreviewMain(\n harmony,\n previewSlot,\n uiMain,\n envs,\n componentExtension,\n pkg,\n aspectLoader,\n config,\n bundlingStrategySlot,\n builder,\n workspace,\n logger,\n dependencyResolver\n );\n\n if (workspace) uiMain.registerStartPlugin(new PreviewStartPlugin(workspace, bundler, uiMain, pubsub, logger));\n\n componentExtension.registerRoute([\n new PreviewRoute(preview, logger),\n new ComponentPreviewRoute(preview, logger),\n // @ts-ignore\n new EnvTemplateRoute(preview, logger),\n new PreviewAssetsRoute(preview, logger),\n ]);\n\n bundler.registerTarget([\n {\n entry: preview.getPreviewTarget.bind(preview),\n },\n ]);\n\n if (!config.disabled)\n builder.registerBuildTasks([\n new EnvPreviewTemplateTask(preview, envs, aspectLoader, dependencyResolver, logger),\n new PreviewTask(bundler, preview, dependencyResolver, logger),\n ]);\n\n if (workspace) {\n workspace.registerOnComponentAdd((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.add(c))\n );\n workspace.onComponentLoad(async (component) => {\n return preview.calcPreviewData(component);\n });\n workspace.registerOnComponentChange((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.update(c))\n );\n workspace.registerOnComponentRemove((cId) => preview.handleComponentRemoval(cId));\n }\n\n envs.registerService(new PreviewService());\n\n graphql.register(previewSchema(preview));\n\n return preview;\n }\n}\n\nPreviewAspect.addRuntime(PreviewMain);\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;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;AAQA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;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;AACA;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;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;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;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AASA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAKA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA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"}
1
+ {"version":3,"names":["noopResult","results","toString","DEFAULT_TEMP_DIR","join","CACHE_ROOT","PreviewAspect","id","PreviewMain","constructor","harmony","previewSlot","ui","envs","componentAspect","pkg","aspectLoader","config","bundlingStrategySlot","builder","workspace","logger","dependencyResolver","Map","Date","now","c","updater","env","getEnv","envId","executionRef","executionRefs","get","warn","updateLinkFiles","currentComponents","executionCtx","Error","cId","component","forEach","components","found","Promise","resolve","handleComponentChange","remove","tempFolder","getTempDir","getComponentBundleSize","data","getDataByAspect","undefined","COMPONENT_STRATEGY_SIZE_KEY_NAME","getPreview","artifacts","getArtifactsVinylByAspectAndTaskName","PREVIEW_TASK_NAME","PreviewArtifact","getPreviewFiles","isBundledWithEnv","files","getPaths","getPreviewAspectConfig","state","aspects","getPreviewData","previewData","calcPreviewData","doesScaling","calcDoesScalingForComponent","dataFromEnv","calcPreviewDataFromEnv","envData","calculateDataForEnvComponent","toStringWithoutVersion","strategyName","COMPONENT_PREVIEW_STRATEGY_NAME","splitComponentBundle","envPreviewConfig","getEnvPreviewConfig","envComponent","isEnv","previewAspectConfig","isScaling","calcIsBundledWithEnv","envPreviewData","isBundledWithEnvBackward","ENV_PREVIEW_STRATEGY_NAME","getArtifactsVinylByAspectAndName","COMPONENT_STRATEGY_ARTIFACT_NAME","length","isUsingCoreEnv","isNew","getEnvComponent","isEnvSupportScaling","inWorkspace","hasId","envSupportScaling","calculateIsEnvSupportScaling","isSupportSkipIncludes","isCore","skipIncludes","isLegacyHeader","ENV_WITH_LEGACY_DOCS","ENV_STRATEGY_ARTIFACT_NAME","envType","getEnvData","type","includes","getEnvTemplate","GENERATE_ENV_TEMPLATE_TASK_NAME","getCoreEnvTemplate","coreEnvDir","getAspectDir","artifactDef","getEnvTemplateArtifactDef","artifactFactory","ArtifactFactory","rootDir","getRootDir","existsSync","coreEnvDirFromBvm","getAspectDirFromBvm","paths","resolvePaths","artifactFiles","ArtifactFiles","populateVinylsFromPaths","vinyls","getEnvTemplateFromComponentEnv","getEnvId","getEnvTemplateByEnvId","isCoreEnv","host","getHost","resolvedEnvId","resolveComponentId","BitError","getDefs","values","writeLink","prefix","moduleMap","mainModulesMap","dirName","isSplitComponentBundle","contents","generateLink","writeLinkContents","targetDir","hash","objectHash","targetPath","timestamp","writeHash","writeFileSync","set","getPreviewTarget","context","relatedContexts","ctxId","ExecutionRef","previewRuntime","writePreviewRuntime","linkFiles","previews","map","previewDef","defaultTemplatePath","renderTemplatePathByEnv","visitedEnvs","Set","default","envDefinition","getModuleMap","withPathsP","asyncMap","envDef","environment","has","modulePath","add","compilerInstance","getCompiler","getPreviewComponentRootPath","getRuntimeModulePath","file","path","distRelativePath","getDistPathBySrcPath","relative","withPaths","dirPath","mkdirSync","recursive","link","all","aspectsIdsToNotFilterOut","name","uiRoot","getUi","resolvedAspects","resolveAspects","PreviewRuntime","filteredAspects","filterAspectsByExecutionContext","filePath","generateRoot","runtimeName","componentIds","opts","root","MainRuntime","allComponentContextAspects","reduce","acc","curr","concat","ids","hostAspects","Object","keys","toObject","allAspectsToInclude","uniq","filtered","filter","aspect","getId","isCoreAspect","getDefaultStrategies","EnvBundlingStrategy","ComponentBundlingStrategy","getPreviewConfig","getBundlingStrategy","defaultStrategies","strategyFromEnv","bundlingStrategy","strategies","selected","find","strategy","BundlingStrategyNotFound","registerBundlingStrategy","register","registerDefinition","provider","bundler","componentExtension","uiMain","pubsub","loggerMain","graphql","createLogger","preview","registerStartPlugin","PreviewStartPlugin","registerRoute","PreviewRoute","ComponentPreviewRoute","EnvTemplateRoute","PreviewAssetsRoute","registerTarget","entry","bind","disabled","registerBuildTasks","EnvPreviewTemplateTask","PreviewTask","registerOnComponentAdd","onComponentLoad","registerOnComponentChange","update","registerOnComponentRemove","handleComponentRemoval","registerService","PreviewService","previewSchema","Slot","withType","BundlerAspect","BuilderAspect","ComponentAspect","UIAspect","EnvsAspect","WorkspaceAspect","PkgAspect","PubsubAspect","AspectLoaderAspect","LoggerAspect","DependencyResolverAspect","GraphqlAspect","addRuntime"],"sources":["preview.main.runtime.tsx"],"sourcesContent":["import { ArtifactFactory, BuilderAspect } from '@teambit/builder';\nimport type { BuilderMain } from '@teambit/builder';\nimport { Asset, BundlerAspect, BundlerMain } from '@teambit/bundler';\nimport { PubsubAspect, PubsubMain } from '@teambit/pubsub';\nimport { MainRuntime } from '@teambit/cli';\nimport {\n Component,\n ComponentAspect,\n ComponentMain,\n ComponentMap,\n ComponentID,\n ResolveAspectsOptions,\n} from '@teambit/component';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { EnvsMain, ExecutionContext, PreviewEnv } from '@teambit/envs';\nimport { Slot, SlotRegistry, Harmony } from '@teambit/harmony';\nimport { UIAspect, UiMain, UIRoot } from '@teambit/ui';\nimport { CACHE_ROOT } from '@teambit/legacy/dist/constants';\nimport { BitError } from '@teambit/bit-error';\nimport objectHash from 'object-hash';\nimport { uniq } from 'lodash';\nimport { writeFileSync, existsSync, mkdirSync } from 'fs-extra';\nimport { join } from 'path';\nimport { PkgAspect, PkgMain } from '@teambit/pkg';\nimport { AspectLoaderAspect, getAspectDir, getAspectDirFromBvm } from '@teambit/aspect-loader';\nimport type { AspectDefinition, AspectLoaderMain } from '@teambit/aspect-loader';\nimport WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport { LoggerAspect, LoggerMain, Logger } from '@teambit/logger';\nimport { DependencyResolverAspect } from '@teambit/dependency-resolver';\nimport type { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { ArtifactFiles } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport GraphqlAspect, { GraphqlMain } from '@teambit/graphql';\nimport { BundlingStrategyNotFound } from './exceptions';\nimport { generateLink, MainModulesMap } from './generate-link';\nimport { PreviewArtifact } from './preview-artifact';\nimport { PreviewDefinition } from './preview-definition';\nimport { PreviewAspect, PreviewRuntime } from './preview.aspect';\nimport { PreviewRoute } from './preview.route';\nimport { PreviewTask, PREVIEW_TASK_NAME } from './preview.task';\nimport { BundlingStrategy } from './bundling-strategy';\nimport {\n EnvBundlingStrategy,\n ComponentBundlingStrategy,\n COMPONENT_STRATEGY_ARTIFACT_NAME,\n COMPONENT_STRATEGY_SIZE_KEY_NAME,\n ENV_PREVIEW_STRATEGY_NAME,\n ENV_STRATEGY_ARTIFACT_NAME,\n COMPONENT_PREVIEW_STRATEGY_NAME,\n} from './strategies';\nimport { ExecutionRef } from './execution-ref';\nimport { PreviewStartPlugin } from './preview.start-plugin';\nimport {\n EnvPreviewTemplateTask,\n GENERATE_ENV_TEMPLATE_TASK_NAME,\n getArtifactDef as getEnvTemplateArtifactDef,\n} from './env-preview-template.task';\nimport { EnvTemplateRoute } from './env-template.route';\nimport { ComponentPreviewRoute } from './component-preview.route';\nimport { previewSchema } from './preview.graphql';\nimport { PreviewAssetsRoute } from './preview-assets.route';\nimport { PreviewService } from './preview.service';\n\nconst noopResult = {\n results: [],\n toString: () => `updating link file`,\n};\n\nconst DEFAULT_TEMP_DIR = join(CACHE_ROOT, PreviewAspect.id);\n\nexport type PreviewDefinitionRegistry = SlotRegistry<PreviewDefinition>;\n\nexport type PreviewStrategyName = 'env' | 'component';\n\nexport type PreviewFiles = {\n files: string[];\n isBundledWithEnv: boolean;\n};\n\nexport type ComponentPreviewSizedFile = Asset;\n\nexport type ComponentPreviewSize = {\n files: ComponentPreviewSizedFile[];\n assets: ComponentPreviewSizedFile[];\n totalFiles: number;\n compressedTotalFiles?: number;\n totalAssets: number;\n compressedTotalAssets?: number;\n total: number;\n compressedTotal?: number;\n};\n\nexport type ComponentPreviewMetaData = {\n size?: ComponentPreviewSize;\n};\n\nexport type PreviewVariantConfig = {\n isScaling?: boolean;\n};\n\n/**\n * Preview data that stored on the component on load\n */\nexport type PreviewComponentData = PreviewAnyComponentData & PreviewEnvComponentData;\n\n/**\n * Preview data that stored on the component on load for any component\n */\nexport type PreviewAnyComponentData = {\n doesScaling?: boolean;\n /**\n * The strategy configured by the component's env\n */\n strategyName?: PreviewStrategyName;\n /**\n * Does the component has a bundle for the component itself (separated from the compositions/docs)\n * Calculated by the component's env\n */\n splitComponentBundle?: boolean;\n\n /**\n * don't allow other aspects implementing a preview definition to be included in your preview.\n */\n skipIncludes?: boolean;\n};\n\n/**\n * Preview data that stored on the component on load if the component is an env\n */\nexport type PreviewEnvComponentData = {\n isScaling?: boolean;\n};\n\nexport type PreviewConfig = {\n bundlingStrategy?: string;\n disabled: boolean;\n /**\n * limit concurrent components when running the bundling step for your bundler during generate components preview task.\n * this helps mitigate large memory consumption for the build pipeline. This may increase the overall time for the generate-preview task, but reduce memory footprint.\n * default - no limit.\n */\n maxChunkSize?: number;\n};\n\nexport type EnvPreviewConfig = {\n strategyName?: PreviewStrategyName;\n splitComponentBundle?: boolean;\n};\n\nexport type BundlingStrategySlot = SlotRegistry<BundlingStrategy>;\n\nexport type GenerateLinkFn = (prefix: string, componentMap: ComponentMap<string[]>, defaultModule?: string) => string;\n\nexport class PreviewMain {\n constructor(\n /**\n * harmony context.\n */\n private harmony: Harmony,\n\n /**\n * slot for preview definitions.\n */\n private previewSlot: PreviewDefinitionRegistry,\n\n private ui: UiMain,\n\n private envs: EnvsMain,\n\n private componentAspect: ComponentMain,\n\n private pkg: PkgMain,\n\n private aspectLoader: AspectLoaderMain,\n\n readonly config: PreviewConfig,\n\n private bundlingStrategySlot: BundlingStrategySlot,\n\n private builder: BuilderMain,\n\n private workspace: Workspace | undefined,\n\n private logger: Logger,\n\n private dependencyResolver: DependencyResolverMain\n ) {}\n\n get tempFolder(): string {\n return this.workspace?.getTempDir(PreviewAspect.id) || DEFAULT_TEMP_DIR;\n }\n\n getComponentBundleSize(component: Component): ComponentPreviewSize | undefined {\n const data = this.builder.getDataByAspect(component, PreviewAspect.id);\n\n if (!data) return undefined;\n return data[COMPONENT_STRATEGY_SIZE_KEY_NAME];\n }\n\n async getPreview(component: Component): Promise<PreviewArtifact | undefined> {\n const artifacts = await this.builder.getArtifactsVinylByAspectAndTaskName(\n component,\n PreviewAspect.id,\n PREVIEW_TASK_NAME\n );\n if (!artifacts) return undefined;\n return new PreviewArtifact(artifacts);\n }\n\n /**\n * Get a list of all the artifact files generated during the GeneratePreview task\n * @param component\n * @returns\n */\n async getPreviewFiles(component: Component): Promise<PreviewFiles | undefined> {\n const artifacts = await this.getPreview(component);\n const isBundledWithEnv = await this.isBundledWithEnv(component);\n if (!artifacts) return undefined;\n return {\n files: artifacts.getPaths(),\n isBundledWithEnv,\n };\n }\n\n /**\n * Get the preview config of the component.\n * (config that was set by variants or on bitmap)\n * @param component\n * @returns\n */\n getPreviewAspectConfig(component: Component): PreviewVariantConfig | undefined {\n return component.state.aspects.get(PreviewAspect.id)?.config;\n }\n\n /**\n * Get the preview data of the component.\n * (data that was calculated during the on load process)\n * @param component\n * @returns\n */\n getPreviewData(component: Component): PreviewComponentData | undefined {\n const previewData = component.state.aspects.get(PreviewAspect.id)?.data;\n return previewData;\n }\n\n /**\n * Calculate preview data on component load\n * @param component\n * @returns\n */\n async calcPreviewData(component: Component): Promise<PreviewComponentData> {\n const doesScaling = await this.calcDoesScalingForComponent(component);\n const dataFromEnv = await this.calcPreviewDataFromEnv(component);\n const envData = (await this.calculateDataForEnvComponent(component)) || {};\n const data: PreviewComponentData = {\n doesScaling,\n ...dataFromEnv,\n ...envData,\n };\n return data;\n }\n\n /**\n * Calculate preview data on component that configured by its env\n * @param component\n * @returns\n */\n async calcPreviewDataFromEnv(component: Component): Promise<Omit<PreviewAnyComponentData, 'doesScaling'> | undefined> {\n // Prevent infinite loop that caused by the fact that the env of the aspect env or the env env is the same as the component\n // so we can't load it since during load we are trying to get env component and load it again\n if (component.id.toStringWithoutVersion() === 'teambit.harmony/aspect' || component.id.toStringWithoutVersion() === 'teambit.envs/env'){\n return {\n strategyName: COMPONENT_PREVIEW_STRATEGY_NAME,\n splitComponentBundle: false,\n }\n }\n\n const env = this.envs.getEnv(component).env;\n const envPreviewConfig = this.getEnvPreviewConfig(env);\n const data = {\n strategyName: envPreviewConfig?.strategyName,\n splitComponentBundle: envPreviewConfig?.splitComponentBundle ?? false,\n };\n return data;\n }\n\n /**\n * calculate extra preview data for env components (on load)\n * @param envComponent\n * @returns\n */\n private async calculateDataForEnvComponent(envComponent: Component): Promise<PreviewEnvComponentData | undefined> {\n const isEnv = this.envs.isEnv(envComponent);\n // If the component is not an env, we don't want to store anything in the data\n if (!isEnv) return undefined;\n const previewAspectConfig = this.getPreviewAspectConfig(envComponent);\n\n const data = {\n // default to true if the env doesn't have a preview config\n isScaling: previewAspectConfig?.isScaling ?? true,\n // disalbe it for now, we will re-enable it later\n // skipIncludes: true,\n };\n return data;\n }\n\n /**\n * Check if the component preview bundle contain the env as part of the bundle or only the component code\n * (we used in the past to bundle them together, there might also be specific envs which still uses the env strategy)\n * This should be used only for calculating the value on load.\n * otherwise, use the isBundledWithEnv function\n * @param component\n * @returns\n */\n async calcIsBundledWithEnv(component: Component): Promise<boolean> {\n const envPreviewData = await this.calcPreviewDataFromEnv(component);\n return envPreviewData?.strategyName !== 'component';\n }\n\n\n /**\n * Check if the component preview bundle contain the env as part of the bundle or only the component code\n * (we used in the past to bundle them together, there might also be specific envs which still uses the env strategy)\n * @param component\n * @returns\n */\n async isBundledWithEnv(component: Component): Promise<boolean> {\n const data = await this.getPreviewData(component);\n // For components that tagged in the past we didn't store the data, so we calculate it the old way\n // We comparing the strategyName to undefined to cover a specific case when it doesn't exist at all.\n if (!data || data.strategyName === undefined) return this.isBundledWithEnvBackward(component);\n return data.strategyName === ENV_PREVIEW_STRATEGY_NAME;\n }\n\n /**\n * This is a legacy calculation for the isBundledWithEnv\n * This calc is based on the component artifacts which is very expensive operation as it requires to fetch and load the artifacts\n * See the new implementation in the isBundledWithEnv method\n * @param component\n * @returns\n */\n private async isBundledWithEnvBackward(component: Component): Promise<boolean> {\n const artifacts = await this.builder.getArtifactsVinylByAspectAndName(\n component,\n PreviewAspect.id,\n COMPONENT_STRATEGY_ARTIFACT_NAME\n );\n if (!artifacts || !artifacts.length) return true;\n\n return false;\n }\n\n // This used on component load to calc the final result of support is scaling for a given component\n // This calc based on the env, env data, env preview config and more\n // if you want to get the final result use the `doesScaling` method below\n // This should be used only for component load\n private async calcDoesScalingForComponent(component: Component): Promise<boolean> {\n const isBundledWithEnv = await this.calcIsBundledWithEnv(component);\n // if it's a core env and the env template is apart from the component it means the template bundle already contain the scaling functionality\n if (this.envs.isUsingCoreEnv(component)) {\n // If the component is new, no point to check the is bundle with env (there is no artifacts so it will for sure return false)\n // If it's new, and we are here, it means that we already use a version of the env that support scaling\n const isNew = await component.isNew();\n if (isNew) {\n return true;\n }\n return isBundledWithEnv === false;\n }\n // For envs that bundled with the env return true always\n if (isBundledWithEnv) {\n return true;\n }\n const envComponent = await this.envs.getEnvComponent(component);\n return this.isEnvSupportScaling(envComponent);\n }\n\n /**\n * can the current component preview scale in size for different preview sizes.\n * this calculation is based on the env of the component and if the env of the component support it.\n */\n async doesScaling(component: Component): Promise<boolean> {\n const inWorkspace = await this.workspace?.hasId(component.id);\n // Support case when we have the dev server for the env, in that case we calc the data of the env as we can't rely on the env data from the scope\n // since we bundle it for the dev server again\n if (inWorkspace) {\n const envComponent = await this.envs.getEnvComponent(component);\n const envSupportScaling = await this.calculateIsEnvSupportScaling(envComponent);\n return envSupportScaling ?? true;\n }\n const previewData = this.getPreviewData(component);\n if (!previewData) return false;\n // Get the does scaling (the new calculation) or the old calc used in isScaling (between versions (about) 848 and 860)\n if (previewData.doesScaling !== undefined) return previewData.doesScaling;\n // in case this component were tagged with versions between 848 and 860 we need to use the old calculation\n // together with the env calculation\n // In that case it means the component already tagged, so we take the env calc from the env data and not re-calc it\n if (previewData.isScaling) {\n const envComponent = await this.envs.getEnvComponent(component);\n const envSupportScaling = this.isEnvSupportScaling(envComponent);\n return !!envSupportScaling;\n }\n return false;\n }\n\n /**\n * Check if the current version of the env support scaling\n * @param envComponent\n * @returns\n */\n isEnvSupportScaling(envComponent: Component): boolean {\n const previewData = this.getPreviewData(envComponent);\n return !!previewData?.isScaling;\n }\n\n async isSupportSkipIncludes(component: Component) {\n const isCore = this.envs.isUsingCoreEnv(component);\n if (isCore) return false;\n\n const envComponent = await this.envs.getEnvComponent(component);\n const previewData = this.getPreviewData(envComponent);\n return !!previewData?.skipIncludes;\n }\n\n /**\n * This function is calculate the isScaling support flag for the component preview.\n * This is calculated only for the env component and not for the component itself.\n * It should be only used during the (env) component on load.\n * Once the component load, you should only use the `isEnvSupportScaling` to fetch it from the calculated data.\n * If you want to check if an env for a given component support scaling, use the `isScaling` function.\n * @param component\n * @returns\n */\n private async calculateIsEnvSupportScaling(envComponent: Component): Promise<boolean | undefined> {\n const isEnv = this.envs.isEnv(envComponent);\n // If the component is not an env, we don't want to store anything in the data\n if (!isEnv) return undefined;\n const previewAspectConfig = this.getPreviewAspectConfig(envComponent);\n // default to true if the env doesn't have a preview config\n return previewAspectConfig?.isScaling ?? true;\n }\n\n /**\n * Check if the component preview bundle contain the header inside of it (legacy)\n * today we are not including the header inside anymore\n * @param component\n * @returns\n */\n async isLegacyHeader(component: Component): Promise<boolean> {\n // these envs had header in their docs\n const ENV_WITH_LEGACY_DOCS = ['react', 'env', 'aspect', 'lit', 'html', 'node', 'mdx', 'react-native', 'readme'];\n\n const artifacts = await this.builder.getArtifactsVinylByAspectAndName(\n component,\n PreviewAspect.id,\n ENV_STRATEGY_ARTIFACT_NAME\n );\n const envType = this.envs.getEnvData(component).type;\n return !!artifacts && !!artifacts.length && ENV_WITH_LEGACY_DOCS.includes(envType);\n }\n\n /**\n * Getting the env template artifact\n * This should be called with the env itself or it will return undefined\n * If you want to get the env template from the env of the component,\n * use: getEnvTemplateFromComponentEnv below\n *\n * @param component\n * @returns\n */\n async getEnvTemplate(component: Component): Promise<PreviewArtifact | undefined> {\n const artifacts = await this.builder.getArtifactsVinylByAspectAndTaskName(\n component,\n PreviewAspect.id,\n GENERATE_ENV_TEMPLATE_TASK_NAME\n );\n if (!artifacts || !artifacts.length) return undefined;\n\n return new PreviewArtifact(artifacts);\n }\n\n /**\n * This is a special method to get a core env template\n * As the core envs doesn't exist in the scope we need to bring it from other place\n * We will bring it from the core env package files\n */\n private async getCoreEnvTemplate(envId: string): Promise<PreviewArtifact | undefined> {\n const coreEnvDir = getAspectDir(envId);\n // const finalDir = join(coreEnvDir, getEnvTemplateArtifactDirectory());\n const artifactDef = getEnvTemplateArtifactDef()[0];\n const artifactFactory = new ArtifactFactory();\n\n let rootDir = artifactFactory.getRootDir(coreEnvDir, artifactDef);\n if (!existsSync(rootDir)) {\n // fallback to the bvm folder\n const coreEnvDirFromBvm = getAspectDirFromBvm(envId);\n rootDir = artifactFactory.getRootDir(coreEnvDirFromBvm, artifactDef);\n }\n if (!existsSync(rootDir)) {\n return undefined;\n }\n const paths = artifactFactory.resolvePaths(rootDir, artifactDef);\n if (!paths || !paths.length) {\n return undefined;\n }\n const artifactFiles = new ArtifactFiles(paths);\n\n artifactFiles.populateVinylsFromPaths(rootDir);\n return new PreviewArtifact(artifactFiles.vinyls);\n }\n\n /**\n * This will fetch the component env, then will take the env template from the component env\n * @param component\n */\n async getEnvTemplateFromComponentEnv(component: Component): Promise<PreviewArtifact | undefined> {\n const envId = this.envs.getEnvId(component);\n return this.getEnvTemplateByEnvId(envId);\n }\n\n /**\n * This will fetch the component env, then will take the env template from the component env\n * @param component\n */\n async getEnvTemplateByEnvId(envId: string): Promise<PreviewArtifact | undefined> {\n // Special treatment for core envs\n if (this.aspectLoader.isCoreEnv(envId)) {\n return this.getCoreEnvTemplate(envId);\n }\n const host = this.componentAspect.getHost();\n const resolvedEnvId = await host.resolveComponentId(envId);\n const envComponent = await host.get(resolvedEnvId);\n if (!envComponent) {\n throw new BitError(`can't load env. env id is ${envId}`);\n }\n return this.getEnvTemplate(envComponent);\n }\n\n getDefs(): PreviewDefinition[] {\n return this.previewSlot.values();\n }\n\n private writeHash = new Map<string, string>();\n private timestamp = Date.now();\n\n /**\n * write a link to load custom modules dynamically.\n * @param prefix write\n * @param moduleMap map of components to module paths to require.\n * @param defaultModule\n * @param dirName\n */\n writeLink(\n prefix: string,\n moduleMap: ComponentMap<string[]>,\n mainModulesMap: MainModulesMap,\n dirName: string,\n isSplitComponentBundle: boolean\n ) {\n const contents = generateLink(prefix, moduleMap, mainModulesMap, isSplitComponentBundle);\n return this.writeLinkContents(contents, dirName, prefix);\n }\n\n writeLinkContents(contents: string, targetDir: string, prefix: string) {\n const hash = objectHash(contents);\n const targetPath = join(targetDir, `${prefix}-${this.timestamp}.js`);\n\n // write only if link has changed (prevents triggering fs watches)\n if (this.writeHash.get(targetPath) !== hash) {\n writeFileSync(targetPath, contents);\n this.writeHash.set(targetPath, hash);\n }\n\n return targetPath;\n }\n\n private executionRefs = new Map<string, ExecutionRef>();\n\n private async getPreviewTarget(\n /** execution context (of the specific env) */\n context: ExecutionContext\n ): Promise<string[]> {\n // store context for later link-file updates\n // also register related envs that this context is acting on their behalf\n [context.id, ...context.relatedContexts].forEach((ctxId) => {\n this.executionRefs.set(ctxId, new ExecutionRef(context));\n });\n\n const previewRuntime = await this.writePreviewRuntime(context);\n const linkFiles = await this.updateLinkFiles(context.components, context);\n\n return [...linkFiles, previewRuntime];\n }\n\n private updateLinkFiles(components: Component[] = [], context: ExecutionContext) {\n const previews = this.previewSlot.values();\n const paths = previews.map(async (previewDef) => {\n const defaultTemplatePath = await previewDef.renderTemplatePathByEnv?.(context.env);\n const visitedEnvs = new Set();\n const mainModulesMap: MainModulesMap = {\n // @ts-ignore\n default: defaultTemplatePath,\n [context.envDefinition.id]: defaultTemplatePath\n };\n\n const map = await previewDef.getModuleMap(components);\n const isSplitComponentBundle = this.getEnvPreviewConfig().splitComponentBundle ?? false;\n const withPathsP = map.asyncMap(async (files, component) => {\n const envDef = this.envs.getEnv(component);\n const environment = envDef.env;\n const envId = envDef.id;\n\n if (!mainModulesMap[envId] && !visitedEnvs.has(envId)) {\n const modulePath = await previewDef.renderTemplatePathByEnv?.(envDef.env);\n if (modulePath) {\n mainModulesMap[envId] = modulePath;\n }\n visitedEnvs.add(envId);\n }\n const compilerInstance = environment.getCompiler?.();\n const modulePath =\n compilerInstance?.getPreviewComponentRootPath?.(component) || this.pkg.getRuntimeModulePath(component);\n return files.map((file) => {\n if (!this.workspace || !compilerInstance) {\n return file.path;\n }\n const distRelativePath = compilerInstance.getDistPathBySrcPath(file.relative);\n return join(this.workspace.path, modulePath, distRelativePath);\n });\n // return files.map((file) => file.path);\n });\n const withPaths = await withPathsP;\n\n const dirPath = join(this.tempFolder, context.id);\n if (!existsSync(dirPath)) mkdirSync(dirPath, { recursive: true });\n\n\n const link = this.writeLink(previewDef.prefix, withPaths, mainModulesMap, dirPath, isSplitComponentBundle);\n return link;\n });\n\n return Promise.all(paths);\n }\n\n async writePreviewRuntime(context: { components: Component[] }, aspectsIdsToNotFilterOut: string[] = []) {\n const [name, uiRoot] = this.getUi();\n const resolvedAspects = await this.resolveAspects(PreviewRuntime.name, undefined, uiRoot);\n const filteredAspects = this.filterAspectsByExecutionContext(resolvedAspects, context, aspectsIdsToNotFilterOut);\n const filePath = await this.ui.generateRoot(filteredAspects, name, 'preview', PreviewAspect.id);\n return filePath;\n }\n\n async resolveAspects(\n runtimeName?: string,\n componentIds?: ComponentID[],\n uiRoot?: UIRoot,\n opts?: ResolveAspectsOptions\n ): Promise<AspectDefinition[]> {\n const root = uiRoot || this.getUi()[1];\n runtimeName = runtimeName || MainRuntime.name;\n const resolvedAspects = await root.resolveAspects(runtimeName, componentIds, opts);\n return resolvedAspects;\n }\n\n private getUi() {\n const ui = this.ui.getUi();\n if (!ui) throw new Error('ui not found');\n return ui;\n }\n\n /**\n * Filter the aspects to have only aspects that are:\n * 1. core aspects\n * 2. configured on the host (workspace/scope)\n * 3. used by at least one component from the context\n * @param aspects\n * @param context\n */\n private filterAspectsByExecutionContext(\n aspects: AspectDefinition[],\n context: { components: Component[] },\n aspectsIdsToNotFilterOut: string[] = []\n ) {\n let allComponentContextAspects: string[] = [];\n allComponentContextAspects = context.components.reduce((acc, curr) => {\n return acc.concat(curr.state.aspects.ids);\n }, allComponentContextAspects);\n const hostAspects = Object.keys(this.harmony.config.toObject());\n const allAspectsToInclude = uniq(hostAspects.concat(allComponentContextAspects));\n const filtered = aspects.filter((aspect) => {\n if (!aspect.getId) {\n return false;\n }\n return (\n this.aspectLoader.isCoreAspect(aspect.getId) ||\n allAspectsToInclude.includes(aspect.getId) ||\n aspectsIdsToNotFilterOut.includes(aspect.getId)\n );\n });\n\n return filtered;\n }\n\n private getDefaultStrategies() {\n return [\n new EnvBundlingStrategy(this, this.pkg, this.dependencyResolver),\n new ComponentBundlingStrategy(this, this.pkg, this.dependencyResolver),\n ];\n }\n\n // TODO - executionContext should be responsible for updating components list, and emit 'update' events\n // instead we keep track of changes\n private handleComponentChange = async (c: Component, updater: (currentComponents: ExecutionRef) => void) => {\n const env = this.envs.getEnv(c);\n const envId = env.id.toString();\n\n const executionRef = this.executionRefs.get(envId);\n if (!executionRef) {\n this.logger.warn(\n `failed to update link file for component \"${c.id.toString()}\" - could not find execution context for ${envId}`\n );\n return noopResult;\n }\n\n // add / remove / etc\n updater(executionRef);\n\n await this.updateLinkFiles(executionRef.currentComponents, executionRef.executionCtx);\n throw new Error('gilad')\n\n return noopResult;\n };\n\n private handleComponentRemoval = (cId: ComponentID) => {\n let component: Component | undefined;\n this.executionRefs.forEach((components) => {\n const found = components.get(cId);\n if (found) component = found;\n });\n if (!component) return Promise.resolve(noopResult);\n\n return this.handleComponentChange(component, (currentComponents) => currentComponents.remove(cId));\n };\n\n getEnvPreviewConfig(env?: PreviewEnv): EnvPreviewConfig {\n const config = env?.getPreviewConfig && typeof env?.getPreviewConfig === 'function' ? env?.getPreviewConfig() : {};\n\n return config;\n }\n\n /**\n * return the configured bundling strategy.\n */\n getBundlingStrategy(env?: PreviewEnv): BundlingStrategy {\n const defaultStrategies = this.getDefaultStrategies();\n const envPreviewConfig = this.getEnvPreviewConfig(env);\n const strategyFromEnv = envPreviewConfig?.strategyName;\n const strategyName = strategyFromEnv || this.config.bundlingStrategy || 'env';\n const strategies = this.bundlingStrategySlot.values().concat(defaultStrategies);\n const selected = strategies.find((strategy) => {\n return strategy.name === strategyName;\n });\n\n if (!selected) throw new BundlingStrategyNotFound(strategyName);\n\n return selected;\n }\n\n /**\n * register a new bundling strategy. default available strategies are `env` and ``\n */\n registerBundlingStrategy(bundlingStrategy: BundlingStrategy) {\n this.bundlingStrategySlot.register(bundlingStrategy);\n return this;\n }\n\n /**\n * register a new preview definition.\n */\n registerDefinition(previewDef: PreviewDefinition) {\n this.previewSlot.register(previewDef);\n }\n\n static slots = [Slot.withType<PreviewDefinition>(), Slot.withType<BundlingStrategy>()];\n\n static runtime = MainRuntime;\n static dependencies = [\n BundlerAspect,\n BuilderAspect,\n ComponentAspect,\n UIAspect,\n EnvsAspect,\n WorkspaceAspect,\n PkgAspect,\n PubsubAspect,\n AspectLoaderAspect,\n LoggerAspect,\n DependencyResolverAspect,\n GraphqlAspect,\n ];\n\n static defaultConfig = {\n disabled: false,\n };\n\n static async provider(\n // eslint-disable-next-line max-len\n [\n bundler,\n builder,\n componentExtension,\n uiMain,\n envs,\n workspace,\n pkg,\n pubsub,\n aspectLoader,\n loggerMain,\n dependencyResolver,\n graphql,\n ]: [\n BundlerMain,\n BuilderMain,\n ComponentMain,\n UiMain,\n EnvsMain,\n Workspace | undefined,\n PkgMain,\n PubsubMain,\n AspectLoaderMain,\n LoggerMain,\n DependencyResolverMain,\n GraphqlMain\n ],\n config: PreviewConfig,\n [previewSlot, bundlingStrategySlot]: [PreviewDefinitionRegistry, BundlingStrategySlot],\n harmony: Harmony\n ) {\n const logger = loggerMain.createLogger(PreviewAspect.id);\n // app.registerApp(new PreviewApp());\n const preview = new PreviewMain(\n harmony,\n previewSlot,\n uiMain,\n envs,\n componentExtension,\n pkg,\n aspectLoader,\n config,\n bundlingStrategySlot,\n builder,\n workspace,\n logger,\n dependencyResolver\n );\n\n if (workspace) uiMain.registerStartPlugin(new PreviewStartPlugin(workspace, bundler, uiMain, pubsub, logger));\n\n componentExtension.registerRoute([\n new PreviewRoute(preview, logger),\n new ComponentPreviewRoute(preview, logger),\n // @ts-ignore\n new EnvTemplateRoute(preview, logger),\n new PreviewAssetsRoute(preview, logger),\n ]);\n\n bundler.registerTarget([\n {\n entry: preview.getPreviewTarget.bind(preview),\n },\n ]);\n\n if (!config.disabled)\n builder.registerBuildTasks([\n new EnvPreviewTemplateTask(preview, envs, aspectLoader, dependencyResolver, logger),\n new PreviewTask(bundler, preview, dependencyResolver, logger),\n ]);\n\n if (workspace) {\n workspace.registerOnComponentAdd((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.add(c))\n );\n workspace.onComponentLoad(async (component) => {\n return preview.calcPreviewData(component);\n });\n workspace.registerOnComponentChange((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.update(c))\n );\n workspace.registerOnComponentRemove((cId) => preview.handleComponentRemoval(cId));\n }\n\n envs.registerService(new PreviewService());\n\n graphql.register(previewSchema(preview));\n\n return preview;\n }\n}\n\nPreviewAspect.addRuntime(PreviewMain);\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;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;AAQA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;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;AACA;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;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;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;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AASA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAKA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA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"}
@@ -152,7 +152,8 @@ class PreviewPreview {
152
152
  window.document.body.style.width = 'fit-content';
153
153
  const {
154
154
  previewName,
155
- componentId
155
+ componentId,
156
+ envId
156
157
  } = this.getLocation();
157
158
  const name = previewName || this.getDefault();
158
159
  if (rootExt) this.isDev = rootExt === 'teambit.workspace/workspace';
@@ -175,7 +176,7 @@ class PreviewPreview {
175
176
  // during build / tag, the component is isolated, so all aspects are relevant, and do not require filtering
176
177
  const componentAspects = this.isDev ? await this.getComponentAspects(componentId.toString()) : undefined;
177
178
  const previewModule = await this.getPreviewModule(name, componentId);
178
- const render = preview.render(componentId, previewModule, includes, this.getRenderingContext(componentAspects));
179
+ const render = preview.render(componentId, envId || '', previewModule, includes, this.getRenderingContext(componentAspects));
179
180
  this.reportSize();
180
181
  this.setViewport();
181
182
  return render;
@@ -251,7 +252,7 @@ class PreviewPreview {
251
252
  const component = componentPreviews[previewName];
252
253
  const metadata = componentPreviews[`${previewName}_metadata`];
253
254
  return {
254
- mainModule: relevantModel.mainModule,
255
+ modulesMap: relevantModel.modulesMap,
255
256
  componentMap: {
256
257
  [id.fullName]: component
257
258
  },
@@ -386,6 +387,7 @@ class PreviewPreview {
386
387
  const [before, after] = withoutHash.split('?');
387
388
  return {
388
389
  previewName: this.getParam(after, 'preview'),
390
+ envId: this.getParam(after, 'env'),
389
391
  componentId: _componentId().ComponentID.tryFromString(before)
390
392
  };
391
393
  }
@@ -1 +1 @@
1
- {"version":3,"names":["PreviewPreview","constructor","pubsub","previewSlot","renderingContextSlot","isReady","Promise","resolve","_setupPromise","PREVIEW_MODULES","onSet","add","rootExt","window","document","body","style","width","previewName","componentId","getLocation","name","getDefault","isDev","preview","getPreview","PreviewNotFound","includesAll","all","include","map","inclPreviewName","includedPreview","undefined","inclPreviewModule","getPreviewModule","selectPreviewModel","fullName","query","getQuery","skipIncludes","getParam","includes","filter","module","componentAspects","getComponentAspects","toString","previewModule","render","getRenderingContext","reportSize","setViewport","memoize","fetchComponentAspects","max","maxAge","registerClickPubSub","addEventListener","e","timestamp","Date","now","clickEvent","Object","assign","pub","PreviewAspect","id","ClickInsideAnIframeEvent","has","includedReady","every","included","viewPort","maxWidth","parent","sendPubsubEvent","SizeEvent","offsetWidth","height","offsetHeight","debounce","counter","interval","setInterval","clearInterval","compShortId","relevantModel","get","Error","componentMap","componentPreviews","fetchComponentPreview","loadComponentPreviews","component","metadata","mainModule","componentMapMetadata","previewFile","allFiles","fetchComponentPreviewFiles","file","endsWith","addComponentFileElement","loadPreviewScript","previewBundleFileName","addComponentFileScriptElement","addComponentFileLinkElement","catch","err","previewAssetsRoute","stringId","url","res","crossFetch","status","parsed","json","isBundledWithEnv","files","length","previewRoute","src","loadScript","href","loadLink","globalId","toStringWithoutVersion","componentPreview","registerPreview","register","aspectsFilter","RenderingContext","registerRenderContext","renderContext","previews","values","defaultOne","find","previewCandidate","default","param","params","URLSearchParams","withoutHash","location","hash","substring","after","split","before","ComponentID","tryFromString","provider","config","PreviewRuntime","PubsubAspect","Slot","withType","addRuntime"],"sources":["preview.preview.runtime.tsx"],"sourcesContent":["import PubsubAspect, { PubsubPreview } from '@teambit/pubsub';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { ComponentID } from '@teambit/component-id';\nimport crossFetch from 'cross-fetch';\nimport memoize from 'memoizee';\nimport { debounce } from 'lodash';\n\nimport { PreviewNotFound } from './exceptions';\nimport { PreviewType } from './preview-type';\nimport { PreviewAspect, PreviewRuntime } from './preview.aspect';\nimport { ClickInsideAnIframeEvent } from './events';\nimport { ModuleFile, PreviewModule } from './types/preview-module';\nimport { RenderingContext } from './rendering-context';\nimport { fetchComponentAspects } from './gql/fetch-component-aspects';\nimport { PREVIEW_MODULES } from './preview-modules';\nimport { loadScript, loadLink } from './html-utils';\nimport { SizeEvent } from './size-event';\n\n// forward linkModules() for generate-link.ts\nexport { linkModules } from './preview-modules';\n\nexport type PreviewSlot = SlotRegistry<PreviewType>;\n\nexport type RenderingContextOptions = { aspectsFilter?: string[] };\nexport type RenderingContextProvider = (options: RenderingContextOptions) => { [key: string]: any };\nexport type RenderingContextSlot = SlotRegistry<RenderingContextProvider>;\n\nexport class PreviewPreview {\n constructor(\n /**\n * register to pubsub\n */\n private pubsub: PubsubPreview,\n\n /**\n * preview slot.\n */\n private previewSlot: PreviewSlot,\n\n private renderingContextSlot: RenderingContextSlot\n ) {\n this.registerClickPubSub();\n }\n\n private registerClickPubSub() {\n window.addEventListener('click', (e) => {\n const timestamp = Date.now();\n const clickEvent = Object.assign({}, e);\n this.pubsub.pub(PreviewAspect.id, new ClickInsideAnIframeEvent(timestamp, clickEvent));\n });\n }\n\n private isDev = false;\n\n private isReady() {\n const { previewName } = this.getLocation();\n const name = previewName || this.getDefault();\n\n if (!PREVIEW_MODULES.has(name)) return false;\n const preview = this.getPreview(name);\n if (!preview) return false;\n const includedReady = preview.include?.every((included) => PREVIEW_MODULES.has(included)) ?? true;\n if (!includedReady) return false;\n\n return true;\n }\n\n private _setupPromise?: Promise<void>;\n setup = () => {\n if (this.isReady()) return Promise.resolve();\n\n this._setupPromise ??= new Promise((resolve) => {\n PREVIEW_MODULES.onSet.add(() => {\n if (this.isReady()) resolve();\n });\n });\n\n return this._setupPromise;\n };\n\n /**\n * render the preview.\n */\n render = async (rootExt?: string) => {\n // fit content always.\n window.document.body.style.width = 'fit-content';\n\n const { previewName, componentId } = this.getLocation();\n const name = previewName || this.getDefault();\n if (rootExt) this.isDev = rootExt === 'teambit.workspace/workspace';\n\n const preview = this.getPreview(name);\n if (!preview || !componentId) {\n throw new PreviewNotFound(previewName);\n }\n\n const includesAll = await Promise.all(\n (preview.include || []).map(async (inclPreviewName) => {\n const includedPreview = this.getPreview(inclPreviewName);\n if (!includedPreview) return undefined;\n\n const inclPreviewModule = await this.getPreviewModule(inclPreviewName, componentId);\n return includedPreview.selectPreviewModel?.(componentId.fullName, inclPreviewModule);\n })\n );\n\n // remove `includes` (including compositions) when skipIncludes = true.\n const query = this.getQuery();\n const skipIncludes = this.getParam(query, 'skipIncludes');\n\n const includes = skipIncludes === 'true' ? [] : includesAll.filter((module) => !!module);\n // during build / tag, the component is isolated, so all aspects are relevant, and do not require filtering\n const componentAspects = this.isDev ? await this.getComponentAspects(componentId.toString()) : undefined;\n const previewModule = await this.getPreviewModule(name, componentId);\n const render = preview.render(componentId, previewModule, includes, this.getRenderingContext(componentAspects));\n\n this.reportSize();\n this.setViewport();\n return render;\n };\n\n setViewport() {\n const query = this.getQuery();\n const viewPort = this.getParam(query, 'viewport');\n if (!viewPort) {\n window.document.body.style.width = '100%';\n return;\n }\n\n window.document.body.style.maxWidth = `${viewPort}px`;\n }\n\n reportSize() {\n if (!window?.parent || !window?.document) return;\n // TODO: discuss with gilad for a better way to resolve page loaded here.\n\n const sendPubsubEvent = () => {\n this.pubsub.pub(\n PreviewAspect.id,\n new SizeEvent({\n width: window.document.body.offsetWidth,\n height: window.document.body.offsetHeight,\n })\n );\n };\n\n window.document.body.addEventListener('resize', debounce(sendPubsubEvent, 300));\n\n let counter = 0;\n const interval = setInterval(() => {\n // TODO: think\n counter += 1;\n if (counter > 10) {\n clearInterval(interval);\n return;\n }\n this.pubsub.pub(\n PreviewAspect.id,\n new SizeEvent({\n width: window.document.body.offsetWidth,\n height: window.document.body.offsetHeight,\n })\n );\n }, 200);\n }\n\n async getPreviewModule(previewName: string, id: ComponentID): Promise<PreviewModule> {\n const compShortId = id.fullName;\n\n const relevantModel = PREVIEW_MODULES.get(previewName);\n if (!relevantModel) throw new Error(`[preview.preview] missing preview \"${previewName}\"`);\n if (relevantModel.componentMap[compShortId]) return relevantModel;\n\n const componentPreviews = await this.fetchComponentPreview(id, previewName);\n PREVIEW_MODULES.loadComponentPreviews(compShortId, componentPreviews);\n\n const component = componentPreviews[previewName];\n const metadata = componentPreviews[`${previewName}_metadata`];\n\n return {\n mainModule: relevantModel.mainModule,\n componentMap: {\n [id.fullName]: component,\n },\n componentMapMetadata: {\n [id.fullName]: metadata,\n },\n };\n }\n\n async fetchComponentPreview(id: ComponentID, name: string): Promise<Record<string, ModuleFile[]>> {\n let previewFile: string | undefined;\n const allFiles = await this.fetchComponentPreviewFiles(id, name);\n // It's a component bundled with the env\n if (allFiles === null) return {};\n\n await Promise.all(\n allFiles.map((file) => {\n // We want to run the preview file always last\n if (file.endsWith('-preview.js')) {\n previewFile = file;\n return undefined;\n }\n\n return this.addComponentFileElement(id, file);\n })\n );\n\n if (!previewFile) return {};\n return this.loadPreviewScript(id, name, previewFile);\n }\n\n private addComponentFileElement(id: ComponentID, previewBundleFileName: string) {\n if (previewBundleFileName.endsWith('.js')) {\n return this.addComponentFileScriptElement(id, previewBundleFileName);\n }\n\n // TODO - should we load assets other than .css / .js?\n // if (previewBundleFileName.endsWith('.css')) {\n this.addComponentFileLinkElement(id, previewBundleFileName).catch((err) => {\n throw new Error(\n `[preview.preview] failed loading asset \"${previewBundleFileName}\". Error - \"${err?.toString()}\"`\n );\n });\n\n // do NOT await non js assets, as they might never load (like images), and not critical for rendering.\n return undefined;\n }\n\n private async fetchComponentPreviewFiles(id: ComponentID, previewName: string): Promise<string[] | null> {\n const previewAssetsRoute = `~aspect/preview-assets`;\n const stringId = id.toString();\n const url = `/api/${stringId}/${previewAssetsRoute}`;\n\n const res = await crossFetch(url);\n if (res.status >= 400) {\n throw new PreviewNotFound(previewName);\n }\n const parsed = await res.json();\n // This is component bundled with the env, no reason to bring the files, as they will be the files of the env\n if (parsed.isBundledWithEnv) {\n return null;\n }\n if (!parsed.files || !parsed.files.length) {\n throw new PreviewNotFound(previewName);\n }\n return parsed.files;\n }\n\n private addComponentFileScriptElement(id: ComponentID, previewBundleFileName: string) {\n const previewRoute = `~aspect/component-preview`;\n const stringId = id.toString();\n const src = `/api/${stringId}/${previewRoute}/${previewBundleFileName}`;\n return loadScript({ src });\n }\n\n private addComponentFileLinkElement(id: ComponentID, previewBundleFileName: string) {\n const stringId = id.toString();\n const previewRoute = `~aspect/component-preview`;\n const href = `/api/${stringId}/${previewRoute}/${previewBundleFileName}`;\n return loadLink({ href });\n }\n\n private async loadPreviewScript(id: ComponentID, previewName: string, previewBundleFileName: string) {\n const previewRoute = `~aspect/component-preview`;\n const src = `/api/${id.toString()}/${previewRoute}/${previewBundleFileName}`;\n await loadScript({ src });\n\n // TODO - replace with jsonp\n const globalId = `${id.toStringWithoutVersion()}-preview`;\n const componentPreview = window[globalId];\n if (!componentPreview) throw new PreviewNotFound(previewName);\n\n return componentPreview as Record<string, ModuleFile[]>;\n }\n\n private getComponentAspects = memoize(fetchComponentAspects, {\n max: 100,\n maxAge: 12 * 60 * 60 * 1000,\n });\n\n /**\n * register a new preview.\n */\n registerPreview(preview: PreviewType) {\n this.previewSlot.register(preview);\n return this;\n }\n\n /**\n * get the preview rendering context.\n */\n getRenderingContext(aspectsFilter?: string[]) {\n return new RenderingContext(this.renderingContextSlot, { aspectsFilter });\n }\n\n /**\n * allows aspects to add rendering contexts.\n * render context is available through all preview definitions.\n */\n registerRenderContext(renderContext: RenderingContextProvider) {\n this.renderingContextSlot.register(renderContext);\n return this;\n }\n\n getDefault() {\n const previews = this.previewSlot.values();\n const defaultOne = previews.find((previewCandidate) => previewCandidate.default);\n\n return defaultOne?.name || previews[0].name;\n }\n\n private getPreview(previewName: string): undefined | PreviewType {\n const previews = this.previewSlot.values();\n const preview = previews.find((previewCandidate) => previewCandidate.name === previewName);\n\n return preview;\n }\n\n getParam(query: string, param: string) {\n const params = new URLSearchParams(query);\n return params.get(param);\n }\n\n getQuery() {\n const withoutHash = window.location.hash.substring(1);\n const [, after] = withoutHash.split('?');\n return after;\n }\n\n private getLocation() {\n const withoutHash = window.location.hash.substring(1);\n const [before, after] = withoutHash.split('?');\n\n return {\n previewName: this.getParam(after, 'preview'),\n componentId: ComponentID.tryFromString(before),\n };\n }\n\n static runtime = PreviewRuntime;\n\n static dependencies = [PubsubAspect];\n\n static slots = [Slot.withType<PreviewType>(), Slot.withType<RenderingContextProvider>()];\n\n static async provider(\n [pubsub]: [PubsubPreview],\n config,\n [previewSlot, renderingContextSlot]: [PreviewSlot, RenderingContextSlot]\n ) {\n const preview = new PreviewPreview(pubsub, previewSlot, renderingContextSlot);\n\n window.addEventListener('hashchange', () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n preview.render();\n });\n\n return preview;\n }\n}\n\nPreviewAspect.addRuntime(PreviewPreview);\n"],"mappings":"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"}
1
+ {"version":3,"names":["PreviewPreview","constructor","pubsub","previewSlot","renderingContextSlot","isReady","Promise","resolve","_setupPromise","PREVIEW_MODULES","onSet","add","rootExt","window","document","body","style","width","previewName","componentId","envId","getLocation","name","getDefault","isDev","preview","getPreview","PreviewNotFound","includesAll","all","include","map","inclPreviewName","includedPreview","undefined","inclPreviewModule","getPreviewModule","selectPreviewModel","fullName","query","getQuery","skipIncludes","getParam","includes","filter","module","componentAspects","getComponentAspects","toString","previewModule","render","getRenderingContext","reportSize","setViewport","memoize","fetchComponentAspects","max","maxAge","registerClickPubSub","addEventListener","e","timestamp","Date","now","clickEvent","Object","assign","pub","PreviewAspect","id","ClickInsideAnIframeEvent","has","includedReady","every","included","viewPort","maxWidth","parent","sendPubsubEvent","SizeEvent","offsetWidth","height","offsetHeight","debounce","counter","interval","setInterval","clearInterval","compShortId","relevantModel","get","Error","componentMap","componentPreviews","fetchComponentPreview","loadComponentPreviews","component","metadata","modulesMap","componentMapMetadata","previewFile","allFiles","fetchComponentPreviewFiles","file","endsWith","addComponentFileElement","loadPreviewScript","previewBundleFileName","addComponentFileScriptElement","addComponentFileLinkElement","catch","err","previewAssetsRoute","stringId","url","res","crossFetch","status","parsed","json","isBundledWithEnv","files","length","previewRoute","src","loadScript","href","loadLink","globalId","toStringWithoutVersion","componentPreview","registerPreview","register","aspectsFilter","RenderingContext","registerRenderContext","renderContext","previews","values","defaultOne","find","previewCandidate","default","param","params","URLSearchParams","withoutHash","location","hash","substring","after","split","before","ComponentID","tryFromString","provider","config","PreviewRuntime","PubsubAspect","Slot","withType","addRuntime"],"sources":["preview.preview.runtime.tsx"],"sourcesContent":["import PubsubAspect, { PubsubPreview } from '@teambit/pubsub';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { ComponentID } from '@teambit/component-id';\nimport crossFetch from 'cross-fetch';\nimport memoize from 'memoizee';\nimport { debounce } from 'lodash';\n\nimport { PreviewNotFound } from './exceptions';\nimport { PreviewType } from './preview-type';\nimport { PreviewAspect, PreviewRuntime } from './preview.aspect';\nimport { ClickInsideAnIframeEvent } from './events';\nimport { ModuleFile, PreviewModule } from './types/preview-module';\nimport { RenderingContext } from './rendering-context';\nimport { fetchComponentAspects } from './gql/fetch-component-aspects';\nimport { PREVIEW_MODULES } from './preview-modules';\nimport { loadScript, loadLink } from './html-utils';\nimport { SizeEvent } from './size-event';\n\n// forward linkModules() for generate-link.ts\nexport { linkModules } from './preview-modules';\n\nexport type PreviewSlot = SlotRegistry<PreviewType>;\n\nexport type RenderingContextOptions = { aspectsFilter?: string[] };\nexport type RenderingContextProvider = (options: RenderingContextOptions) => { [key: string]: any };\nexport type RenderingContextSlot = SlotRegistry<RenderingContextProvider>;\n\nexport class PreviewPreview {\n constructor(\n /**\n * register to pubsub\n */\n private pubsub: PubsubPreview,\n\n /**\n * preview slot.\n */\n private previewSlot: PreviewSlot,\n\n private renderingContextSlot: RenderingContextSlot\n ) {\n this.registerClickPubSub();\n }\n\n private registerClickPubSub() {\n window.addEventListener('click', (e) => {\n const timestamp = Date.now();\n const clickEvent = Object.assign({}, e);\n this.pubsub.pub(PreviewAspect.id, new ClickInsideAnIframeEvent(timestamp, clickEvent));\n });\n }\n\n private isDev = false;\n\n private isReady() {\n const { previewName } = this.getLocation();\n const name = previewName || this.getDefault();\n\n if (!PREVIEW_MODULES.has(name)) return false;\n const preview = this.getPreview(name);\n if (!preview) return false;\n const includedReady = preview.include?.every((included) => PREVIEW_MODULES.has(included)) ?? true;\n if (!includedReady) return false;\n\n return true;\n }\n\n private _setupPromise?: Promise<void>;\n setup = () => {\n if (this.isReady()) return Promise.resolve();\n\n this._setupPromise ??= new Promise((resolve) => {\n PREVIEW_MODULES.onSet.add(() => {\n if (this.isReady()) resolve();\n });\n });\n\n return this._setupPromise;\n };\n\n /**\n * render the preview.\n */\n render = async (rootExt?: string) => {\n // fit content always.\n window.document.body.style.width = 'fit-content';\n\n const { previewName, componentId, envId } = this.getLocation();\n const name = previewName || this.getDefault();\n if (rootExt) this.isDev = rootExt === 'teambit.workspace/workspace';\n\n const preview = this.getPreview(name);\n if (!preview || !componentId) {\n throw new PreviewNotFound(previewName);\n }\n\n const includesAll = await Promise.all(\n (preview.include || []).map(async (inclPreviewName) => {\n const includedPreview = this.getPreview(inclPreviewName);\n if (!includedPreview) return undefined;\n\n const inclPreviewModule = await this.getPreviewModule(inclPreviewName, componentId);\n return includedPreview.selectPreviewModel?.(componentId.fullName, inclPreviewModule);\n })\n );\n\n // remove `includes` (including compositions) when skipIncludes = true.\n const query = this.getQuery();\n const skipIncludes = this.getParam(query, 'skipIncludes');\n\n const includes = skipIncludes === 'true' ? [] : includesAll.filter((module) => !!module);\n // during build / tag, the component is isolated, so all aspects are relevant, and do not require filtering\n const componentAspects = this.isDev ? await this.getComponentAspects(componentId.toString()) : undefined;\n const previewModule = await this.getPreviewModule(name, componentId);\n const render = preview.render(\n componentId,\n envId || '',\n previewModule,\n includes,\n this.getRenderingContext(componentAspects)\n );\n\n this.reportSize();\n this.setViewport();\n return render;\n };\n\n setViewport() {\n const query = this.getQuery();\n const viewPort = this.getParam(query, 'viewport');\n if (!viewPort) {\n window.document.body.style.width = '100%';\n return;\n }\n\n window.document.body.style.maxWidth = `${viewPort}px`;\n }\n\n reportSize() {\n if (!window?.parent || !window?.document) return;\n // TODO: discuss with gilad for a better way to resolve page loaded here.\n\n const sendPubsubEvent = () => {\n this.pubsub.pub(\n PreviewAspect.id,\n new SizeEvent({\n width: window.document.body.offsetWidth,\n height: window.document.body.offsetHeight,\n })\n );\n };\n\n window.document.body.addEventListener('resize', debounce(sendPubsubEvent, 300));\n\n let counter = 0;\n const interval = setInterval(() => {\n // TODO: think\n counter += 1;\n if (counter > 10) {\n clearInterval(interval);\n return;\n }\n this.pubsub.pub(\n PreviewAspect.id,\n new SizeEvent({\n width: window.document.body.offsetWidth,\n height: window.document.body.offsetHeight,\n })\n );\n }, 200);\n }\n\n async getPreviewModule(previewName: string, id: ComponentID): Promise<PreviewModule> {\n const compShortId = id.fullName;\n\n const relevantModel = PREVIEW_MODULES.get(previewName);\n if (!relevantModel) throw new Error(`[preview.preview] missing preview \"${previewName}\"`);\n if (relevantModel.componentMap[compShortId]) return relevantModel;\n\n const componentPreviews = await this.fetchComponentPreview(id, previewName);\n PREVIEW_MODULES.loadComponentPreviews(compShortId, componentPreviews);\n\n const component = componentPreviews[previewName];\n const metadata = componentPreviews[`${previewName}_metadata`];\n\n return {\n modulesMap: relevantModel.modulesMap,\n componentMap: {\n [id.fullName]: component,\n },\n componentMapMetadata: {\n [id.fullName]: metadata,\n },\n };\n }\n\n async fetchComponentPreview(id: ComponentID, name: string): Promise<Record<string, ModuleFile[]>> {\n let previewFile: string | undefined;\n const allFiles = await this.fetchComponentPreviewFiles(id, name);\n // It's a component bundled with the env\n if (allFiles === null) return {};\n\n await Promise.all(\n allFiles.map((file) => {\n // We want to run the preview file always last\n if (file.endsWith('-preview.js')) {\n previewFile = file;\n return undefined;\n }\n\n return this.addComponentFileElement(id, file);\n })\n );\n\n if (!previewFile) return {};\n return this.loadPreviewScript(id, name, previewFile);\n }\n\n private addComponentFileElement(id: ComponentID, previewBundleFileName: string) {\n if (previewBundleFileName.endsWith('.js')) {\n return this.addComponentFileScriptElement(id, previewBundleFileName);\n }\n\n // TODO - should we load assets other than .css / .js?\n // if (previewBundleFileName.endsWith('.css')) {\n this.addComponentFileLinkElement(id, previewBundleFileName).catch((err) => {\n throw new Error(\n `[preview.preview] failed loading asset \"${previewBundleFileName}\". Error - \"${err?.toString()}\"`\n );\n });\n\n // do NOT await non js assets, as they might never load (like images), and not critical for rendering.\n return undefined;\n }\n\n private async fetchComponentPreviewFiles(id: ComponentID, previewName: string): Promise<string[] | null> {\n const previewAssetsRoute = `~aspect/preview-assets`;\n const stringId = id.toString();\n const url = `/api/${stringId}/${previewAssetsRoute}`;\n\n const res = await crossFetch(url);\n if (res.status >= 400) {\n throw new PreviewNotFound(previewName);\n }\n const parsed = await res.json();\n // This is component bundled with the env, no reason to bring the files, as they will be the files of the env\n if (parsed.isBundledWithEnv) {\n return null;\n }\n if (!parsed.files || !parsed.files.length) {\n throw new PreviewNotFound(previewName);\n }\n return parsed.files;\n }\n\n private addComponentFileScriptElement(id: ComponentID, previewBundleFileName: string) {\n const previewRoute = `~aspect/component-preview`;\n const stringId = id.toString();\n const src = `/api/${stringId}/${previewRoute}/${previewBundleFileName}`;\n return loadScript({ src });\n }\n\n private addComponentFileLinkElement(id: ComponentID, previewBundleFileName: string) {\n const stringId = id.toString();\n const previewRoute = `~aspect/component-preview`;\n const href = `/api/${stringId}/${previewRoute}/${previewBundleFileName}`;\n return loadLink({ href });\n }\n\n private async loadPreviewScript(id: ComponentID, previewName: string, previewBundleFileName: string) {\n const previewRoute = `~aspect/component-preview`;\n const src = `/api/${id.toString()}/${previewRoute}/${previewBundleFileName}`;\n await loadScript({ src });\n\n // TODO - replace with jsonp\n const globalId = `${id.toStringWithoutVersion()}-preview`;\n const componentPreview = window[globalId];\n if (!componentPreview) throw new PreviewNotFound(previewName);\n\n return componentPreview as Record<string, ModuleFile[]>;\n }\n\n private getComponentAspects = memoize(fetchComponentAspects, {\n max: 100,\n maxAge: 12 * 60 * 60 * 1000,\n });\n\n /**\n * register a new preview.\n */\n registerPreview(preview: PreviewType) {\n this.previewSlot.register(preview);\n return this;\n }\n\n /**\n * get the preview rendering context.\n */\n getRenderingContext(aspectsFilter?: string[]) {\n return new RenderingContext(this.renderingContextSlot, { aspectsFilter });\n }\n\n /**\n * allows aspects to add rendering contexts.\n * render context is available through all preview definitions.\n */\n registerRenderContext(renderContext: RenderingContextProvider) {\n this.renderingContextSlot.register(renderContext);\n return this;\n }\n\n getDefault() {\n const previews = this.previewSlot.values();\n const defaultOne = previews.find((previewCandidate) => previewCandidate.default);\n\n return defaultOne?.name || previews[0].name;\n }\n\n private getPreview(previewName: string): undefined | PreviewType {\n const previews = this.previewSlot.values();\n const preview = previews.find((previewCandidate) => previewCandidate.name === previewName);\n\n return preview;\n }\n\n getParam(query: string, param: string) {\n const params = new URLSearchParams(query);\n return params.get(param);\n }\n\n getQuery() {\n const withoutHash = window.location.hash.substring(1);\n const [, after] = withoutHash.split('?');\n return after;\n }\n\n private getLocation() {\n const withoutHash = window.location.hash.substring(1);\n const [before, after] = withoutHash.split('?');\n\n return {\n previewName: this.getParam(after, 'preview'),\n envId: this.getParam(after, 'env'),\n componentId: ComponentID.tryFromString(before),\n };\n }\n\n static runtime = PreviewRuntime;\n\n static dependencies = [PubsubAspect];\n\n static slots = [Slot.withType<PreviewType>(), Slot.withType<RenderingContextProvider>()];\n\n static async provider(\n [pubsub]: [PubsubPreview],\n config,\n [previewSlot, renderingContextSlot]: [PreviewSlot, RenderingContextSlot]\n ) {\n const preview = new PreviewPreview(pubsub, previewSlot, renderingContextSlot);\n\n window.addEventListener('hashchange', () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n preview.render();\n });\n\n return preview;\n }\n}\n\nPreviewAspect.addRuntime(PreviewPreview);\n"],"mappings":"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"}
@@ -144,7 +144,9 @@ class EnvBundlingStrategy {
144
144
  return compiledPaths;
145
145
  });
146
146
  const template = previewDef.renderTemplatePath ? await previewDef.renderTemplatePath(context) : 'undefined';
147
- const link = this.preview.writeLink(previewDef.prefix, paths, previewDef.renderTemplatePath ? await previewDef.renderTemplatePath(context) : undefined, outputPath, false);
147
+ const link = this.preview.writeLink(previewDef.prefix, paths, {
148
+ default: template || 'undefined'
149
+ }, outputPath, false);
148
150
  const files = (0, _lodash().flatten)(paths.toArray().map(([, file]) => file)).concat([link]);
149
151
  if (template) return files.concat([template]);
150
152
  return files;
@@ -1 +1 @@
1
- {"version":3,"names":["ENV_STRATEGY_ARTIFACT_NAME","EnvBundlingStrategy","constructor","preview","pkg","dependencyResolver","computeTargets","context","previewDefs","outputPath","getOutputPath","existsSync","mkdirpSync","htmlConfig","generateHtmlConfig","dev","peers","getPreviewHostDependenciesFromEnv","envDefinition","env","entries","computePaths","html","components","hostDependencies","aliasHostDependencies","options","config","title","templateContent","cache","minify","computeResults","results","result","componentsResults","map","component","errors","err","message","warning","warnings","startTime","endTime","artifacts","getArtifactDef","rootDir","getDirName","name","globPatterns","envName","id","replace","resolve","capsuleNetwork","capsulesRootDir","getPaths","files","capsule","compiler","getCompiler","file","join","path","getDistPathBySrcPath","relative","defs","previewMain","writePreviewRuntime","moduleMapsPromise","previewDef","moduleMap","getModuleMap","paths","ComponentMap","as","graphCapsules","getCapsule","maybeFiles","get","compiledPaths","template","renderTemplatePath","link","writeLink","prefix","undefined","flatten","toArray","concat","moduleMaps","Promise","all"],"sources":["env-strategy.ts"],"sourcesContent":["import { join, resolve } from 'path';\nimport { existsSync, mkdirpSync } from 'fs-extra';\nimport { flatten } from 'lodash';\nimport { ComponentMap } from '@teambit/component';\nimport { Compiler } from '@teambit/compiler';\nimport { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport { Capsule } from '@teambit/isolator';\nimport { ComponentResult } from '@teambit/builder';\nimport { BundlerContext, BundlerHtmlConfig, BundlerResult } from '@teambit/bundler';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { PkgMain } from '@teambit/pkg';\nimport type { BundlingStrategy, ComputeTargetsContext } from '../bundling-strategy';\nimport { PreviewDefinition } from '../preview-definition';\nimport { PreviewMain } from '../preview.main.runtime';\nimport { html } from '../bundler/html-template';\n\nexport const ENV_STRATEGY_ARTIFACT_NAME = 'preview';\n\n/**\n * bundles all components in a given env into the same bundle.\n */\nexport class EnvBundlingStrategy implements BundlingStrategy {\n name = 'env';\n\n constructor(private preview: PreviewMain, private pkg: PkgMain, private dependencyResolver: DependencyResolverMain) {}\n\n async computeTargets(context: ComputeTargetsContext, previewDefs: PreviewDefinition[]) {\n const outputPath = this.getOutputPath(context);\n if (!existsSync(outputPath)) mkdirpSync(outputPath);\n const htmlConfig = this.generateHtmlConfig({ dev: context.dev });\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(context.envDefinition.env);\n\n return [\n {\n entries: await this.computePaths(outputPath, previewDefs, context),\n html: [htmlConfig],\n components: context.components,\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\n private generateHtmlConfig(options: { dev?: boolean }): BundlerHtmlConfig {\n const config = {\n title: 'Preview',\n templateContent: html('Preview'),\n cache: false,\n minify: options?.dev ?? true,\n };\n return config;\n }\n\n async computeResults(context: BundlerContext, results: BundlerResult[]) {\n const result = results[0];\n\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\n const artifacts = this.getArtifactDef(context);\n\n return {\n componentsResults,\n artifacts,\n };\n }\n\n private getArtifactDef(context: ComputeTargetsContext) {\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: ENV_STRATEGY_ARTIFACT_NAME,\n globPatterns: ['public/**'],\n rootDir,\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, files: AbstractVinyl[], capsule: Capsule) {\n const compiler: Compiler = context.env.getCompiler();\n return files.map((file) => join(capsule.path, compiler.getDistPathBySrcPath(file.relative)));\n }\n\n private async computePaths(\n outputPath: string,\n defs: PreviewDefinition[],\n context: ComputeTargetsContext\n ): Promise<string[]> {\n const previewMain = await this.preview.writePreviewRuntime(context);\n const moduleMapsPromise = defs.map(async (previewDef) => {\n const moduleMap = await previewDef.getModuleMap(context.components);\n\n const paths = ComponentMap.as(context.components, (component) => {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n const maybeFiles = moduleMap.get(component);\n if (!maybeFiles || !capsule) return [];\n const [, files] = maybeFiles;\n const compiledPaths = this.getPaths(context, files, capsule);\n return compiledPaths;\n });\n\n const template = previewDef.renderTemplatePath ? await previewDef.renderTemplatePath(context) : 'undefined';\n\n const link = this.preview.writeLink(\n previewDef.prefix,\n paths,\n previewDef.renderTemplatePath ? await previewDef.renderTemplatePath(context) : undefined,\n outputPath,\n false\n );\n\n const files = flatten(paths.toArray().map(([, file]) => file)).concat([link]);\n\n if (template) return files.concat([template]);\n return files;\n });\n\n const moduleMaps = await Promise.all(moduleMapsPromise);\n\n return flatten(moduleMaps.concat([previewMain]));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["ENV_STRATEGY_ARTIFACT_NAME","EnvBundlingStrategy","constructor","preview","pkg","dependencyResolver","computeTargets","context","previewDefs","outputPath","getOutputPath","existsSync","mkdirpSync","htmlConfig","generateHtmlConfig","dev","peers","getPreviewHostDependenciesFromEnv","envDefinition","env","entries","computePaths","html","components","hostDependencies","aliasHostDependencies","options","config","title","templateContent","cache","minify","computeResults","results","result","componentsResults","map","component","errors","err","message","warning","warnings","startTime","endTime","artifacts","getArtifactDef","rootDir","getDirName","name","globPatterns","envName","id","replace","resolve","capsuleNetwork","capsulesRootDir","getPaths","files","capsule","compiler","getCompiler","file","join","path","getDistPathBySrcPath","relative","defs","previewMain","writePreviewRuntime","moduleMapsPromise","previewDef","moduleMap","getModuleMap","paths","ComponentMap","as","graphCapsules","getCapsule","maybeFiles","get","compiledPaths","template","renderTemplatePath","link","writeLink","prefix","default","flatten","toArray","concat","moduleMaps","Promise","all"],"sources":["env-strategy.ts"],"sourcesContent":["import { join, resolve } from 'path';\nimport { existsSync, mkdirpSync } from 'fs-extra';\nimport { flatten } from 'lodash';\nimport { ComponentMap } from '@teambit/component';\nimport { Compiler } from '@teambit/compiler';\nimport { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport { Capsule } from '@teambit/isolator';\nimport { ComponentResult } from '@teambit/builder';\nimport { BundlerContext, BundlerHtmlConfig, BundlerResult } from '@teambit/bundler';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { PkgMain } from '@teambit/pkg';\nimport type { BundlingStrategy, ComputeTargetsContext } from '../bundling-strategy';\nimport { PreviewDefinition } from '../preview-definition';\nimport { PreviewMain } from '../preview.main.runtime';\nimport { html } from '../bundler/html-template';\n\nexport const ENV_STRATEGY_ARTIFACT_NAME = 'preview';\n\n/**\n * bundles all components in a given env into the same bundle.\n */\nexport class EnvBundlingStrategy implements BundlingStrategy {\n name = 'env';\n\n constructor(private preview: PreviewMain, private pkg: PkgMain, private dependencyResolver: DependencyResolverMain) {}\n\n async computeTargets(context: ComputeTargetsContext, previewDefs: PreviewDefinition[]) {\n const outputPath = this.getOutputPath(context);\n if (!existsSync(outputPath)) mkdirpSync(outputPath);\n const htmlConfig = this.generateHtmlConfig({ dev: context.dev });\n const peers = await this.dependencyResolver.getPreviewHostDependenciesFromEnv(context.envDefinition.env);\n\n return [\n {\n entries: await this.computePaths(outputPath, previewDefs, context),\n html: [htmlConfig],\n components: context.components,\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\n private generateHtmlConfig(options: { dev?: boolean }): BundlerHtmlConfig {\n const config = {\n title: 'Preview',\n templateContent: html('Preview'),\n cache: false,\n minify: options?.dev ?? true,\n };\n return config;\n }\n\n async computeResults(context: BundlerContext, results: BundlerResult[]) {\n const result = results[0];\n\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\n const artifacts = this.getArtifactDef(context);\n\n return {\n componentsResults,\n artifacts,\n };\n }\n\n private getArtifactDef(context: ComputeTargetsContext) {\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: ENV_STRATEGY_ARTIFACT_NAME,\n globPatterns: ['public/**'],\n rootDir,\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, files: AbstractVinyl[], capsule: Capsule) {\n const compiler: Compiler = context.env.getCompiler();\n return files.map((file) => join(capsule.path, compiler.getDistPathBySrcPath(file.relative)));\n }\n\n private async computePaths(\n outputPath: string,\n defs: PreviewDefinition[],\n context: ComputeTargetsContext\n ): Promise<string[]> {\n const previewMain = await this.preview.writePreviewRuntime(context);\n const moduleMapsPromise = defs.map(async (previewDef) => {\n const moduleMap = await previewDef.getModuleMap(context.components);\n\n const paths = ComponentMap.as(context.components, (component) => {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n const maybeFiles = moduleMap.get(component);\n if (!maybeFiles || !capsule) return [];\n const [, files] = maybeFiles;\n const compiledPaths = this.getPaths(context, files, capsule);\n return compiledPaths;\n });\n\n const template = previewDef.renderTemplatePath ? await previewDef.renderTemplatePath(context) : 'undefined';\n\n const link = this.preview.writeLink(\n previewDef.prefix,\n paths,\n {default: template || 'undefined'},\n outputPath,\n false\n );\n\n const files = flatten(paths.toArray().map(([, file]) => file)).concat([link]);\n\n if (template) return files.concat([template]);\n return files;\n });\n\n const moduleMaps = await Promise.all(moduleMapsPromise);\n\n return flatten(moduleMaps.concat([previewMain]));\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ declare type MainModuleExports = {
2
+ (...args: any[]): void;
3
+ apiObject?: boolean;
4
+ };
1
5
  /**
2
6
  * A full index of the preview data
3
7
  */
@@ -9,13 +13,16 @@ export declare type PreviewModule<T = any> = {
9
13
  */
10
14
  componentMapMetadata: Record<string, unknown>;
11
15
  /** The 'main file' for this Preview type */
12
- mainModule: {
16
+ modulesMap: {
13
17
  default: {
14
- (...args: any[]): void;
15
- apiObject?: boolean;
18
+ default: MainModuleExports;
19
+ };
20
+ [envId: string]: {
21
+ default: MainModuleExports;
16
22
  };
17
23
  };
18
24
  isSplitComponentBundle?: boolean;
19
25
  };
20
26
  /** single preview module, e.g. compositions file */
21
27
  export declare type ModuleFile<T = any> = Record<string, T>;
28
+ export {};
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["preview-module.ts"],"sourcesContent":["/**\n * A full index of the preview data\n */\nexport type PreviewModule<T = any> = {\n /** Dictionary mapping components to their module files. */\n componentMap: Record<string, ModuleFile<T>[]>;\n\n /**\n * Dictionary mapping components to their preview metadata\n */\n componentMapMetadata: Record<string, unknown>;\n\n /** The 'main file' for this Preview type */\n mainModule: {\n default: {\n (...args: any[]): void;\n apiObject?: boolean;\n };\n };\n\n isSplitComponentBundle?: boolean;\n};\n\n/** single preview module, e.g. compositions file */\nexport type ModuleFile<T = any> = Record<string, T>;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["preview-module.ts"],"sourcesContent":["type MainModuleExports = {\n (...args: any[]): void;\n apiObject?: boolean;\n};\n\n/**\n * A full index of the preview data\n */\nexport type PreviewModule<T = any> = {\n /** Dictionary mapping components to their module files. */\n componentMap: Record<string, ModuleFile<T>[]>;\n\n /**\n * Dictionary mapping components to their preview metadata\n */\n componentMapMetadata: Record<string, unknown>;\n\n /** The 'main file' for this Preview type */\n modulesMap: {\n default: {\n default: MainModuleExports;\n }\n [envId: string]: {\n default: MainModuleExports;\n }\n };\n\n isSplitComponentBundle?: boolean;\n};\n\n/** single preview module, e.g. compositions file */\nexport type ModuleFile<T = any> = Record<string, T>;\n"],"mappings":""}
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@teambit/preview",
3
- "version": "0.0.959",
3
+ "version": "0.0.960",
4
4
  "homepage": "https://bit.dev/teambit/preview/preview",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.preview",
8
8
  "name": "preview",
9
- "version": "0.0.959"
9
+ "version": "0.0.960"
10
10
  },
11
11
  "dependencies": {
12
12
  "mime": "2.5.2",
13
13
  "fs-extra": "10.0.0",
14
14
  "lodash": "4.17.21",
15
15
  "p-map-series": "2.1.0",
16
+ "camelcase": "6.2.0",
16
17
  "graphql-tag": "2.12.1",
17
18
  "object-hash": "2.1.1",
18
19
  "cross-fetch": "3.0.6",
19
20
  "memoizee": "0.4.15",
20
- "camelcase": "6.2.0",
21
21
  "lodash.compact": "3.0.1",
22
22
  "graphql-request": "3.4.0",
23
23
  "core-js": "^3.0.0",
@@ -26,26 +26,26 @@
26
26
  "@teambit/express": "0.0.741",
27
27
  "@teambit/logger": "0.0.736",
28
28
  "@teambit/ui-foundation.ui.pages.static-error": "0.0.86",
29
- "@teambit/builder": "0.0.959",
30
- "@teambit/bundler": "0.0.959",
31
- "@teambit/component": "0.0.959",
32
- "@teambit/preview.ui.component-preview": "0.0.510",
33
- "@teambit/aspect-loader": "0.0.959",
29
+ "@teambit/builder": "0.0.960",
30
+ "@teambit/bundler": "0.0.960",
31
+ "@teambit/component": "0.0.960",
32
+ "@teambit/preview.ui.component-preview": "0.0.511",
33
+ "@teambit/aspect-loader": "0.0.960",
34
34
  "@teambit/cli": "0.0.643",
35
- "@teambit/dependency-resolver": "0.0.959",
36
- "@teambit/envs": "0.0.959",
35
+ "@teambit/dependency-resolver": "0.0.960",
36
+ "@teambit/envs": "0.0.960",
37
37
  "@teambit/toolbox.path.to-windows-compatible-path": "0.0.490",
38
38
  "@teambit/component-id": "0.0.425",
39
39
  "@teambit/bit-error": "0.0.402",
40
- "@teambit/graphql": "0.0.959",
41
- "@teambit/pkg": "0.0.959",
42
- "@teambit/pubsub": "0.0.959",
43
- "@teambit/ui": "0.0.959",
44
- "@teambit/workspace": "0.0.959",
45
- "@teambit/compiler": "0.0.959",
40
+ "@teambit/graphql": "0.0.960",
41
+ "@teambit/pkg": "0.0.960",
42
+ "@teambit/pubsub": "0.0.960",
43
+ "@teambit/ui": "0.0.960",
44
+ "@teambit/workspace": "0.0.960",
45
+ "@teambit/compiler": "0.0.960",
46
46
  "@teambit/preview.cli.preview-server-status": "0.0.499",
47
47
  "@teambit/preview.cli.webpack-events-listener": "0.0.168",
48
- "@teambit/isolator": "0.0.959"
48
+ "@teambit/isolator": "0.0.960"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/mime": "2.0.3",
@@ -31,7 +31,7 @@ import type { DependencyResolverMain } from '@teambit/dependency-resolver';
31
31
  import { ArtifactFiles } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';
32
32
  import GraphqlAspect, { GraphqlMain } from '@teambit/graphql';
33
33
  import { BundlingStrategyNotFound } from './exceptions';
34
- import { generateLink } from './generate-link';
34
+ import { generateLink, MainModulesMap } from './generate-link';
35
35
  import { PreviewArtifact } from './preview-artifact';
36
36
  import { PreviewDefinition } from './preview-definition';
37
37
  import { PreviewAspect, PreviewRuntime } from './preview.aspect';
@@ -551,11 +551,11 @@ export class PreviewMain {
551
551
  writeLink(
552
552
  prefix: string,
553
553
  moduleMap: ComponentMap<string[]>,
554
- defaultModule: string | undefined,
554
+ mainModulesMap: MainModulesMap,
555
555
  dirName: string,
556
556
  isSplitComponentBundle: boolean
557
557
  ) {
558
- const contents = generateLink(prefix, moduleMap, defaultModule, isSplitComponentBundle);
558
+ const contents = generateLink(prefix, moduleMap, mainModulesMap, isSplitComponentBundle);
559
559
  return this.writeLinkContents(contents, dirName, prefix);
560
560
  }
561
561
 
@@ -593,12 +593,28 @@ export class PreviewMain {
593
593
  private updateLinkFiles(components: Component[] = [], context: ExecutionContext) {
594
594
  const previews = this.previewSlot.values();
595
595
  const paths = previews.map(async (previewDef) => {
596
- const templatePath = await previewDef.renderTemplatePath?.(context);
596
+ const defaultTemplatePath = await previewDef.renderTemplatePathByEnv?.(context.env);
597
+ const visitedEnvs = new Set();
598
+ const mainModulesMap: MainModulesMap = {
599
+ // @ts-ignore
600
+ default: defaultTemplatePath,
601
+ [context.envDefinition.id]: defaultTemplatePath
602
+ };
597
603
 
598
604
  const map = await previewDef.getModuleMap(components);
599
605
  const isSplitComponentBundle = this.getEnvPreviewConfig().splitComponentBundle ?? false;
600
- const withPaths = map.map<string[]>((files, component) => {
601
- const environment = this.envs.getEnv(component).env;
606
+ const withPathsP = map.asyncMap(async (files, component) => {
607
+ const envDef = this.envs.getEnv(component);
608
+ const environment = envDef.env;
609
+ const envId = envDef.id;
610
+
611
+ if (!mainModulesMap[envId] && !visitedEnvs.has(envId)) {
612
+ const modulePath = await previewDef.renderTemplatePathByEnv?.(envDef.env);
613
+ if (modulePath) {
614
+ mainModulesMap[envId] = modulePath;
615
+ }
616
+ visitedEnvs.add(envId);
617
+ }
602
618
  const compilerInstance = environment.getCompiler?.();
603
619
  const modulePath =
604
620
  compilerInstance?.getPreviewComponentRootPath?.(component) || this.pkg.getRuntimeModulePath(component);
@@ -611,11 +627,13 @@ export class PreviewMain {
611
627
  });
612
628
  // return files.map((file) => file.path);
613
629
  });
630
+ const withPaths = await withPathsP;
614
631
 
615
632
  const dirPath = join(this.tempFolder, context.id);
616
633
  if (!existsSync(dirPath)) mkdirSync(dirPath, { recursive: true });
617
634
 
618
- const link = this.writeLink(previewDef.prefix, withPaths, templatePath, dirPath, isSplitComponentBundle);
635
+
636
+ const link = this.writeLink(previewDef.prefix, withPaths, mainModulesMap, dirPath, isSplitComponentBundle);
619
637
  return link;
620
638
  });
621
639
 
@@ -706,6 +724,7 @@ export class PreviewMain {
706
724
  updater(executionRef);
707
725
 
708
726
  await this.updateLinkFiles(executionRef.currentComponents, executionRef.executionCtx);
727
+ throw new Error('gilad')
709
728
 
710
729
  return noopResult;
711
730
  };
@@ -85,7 +85,7 @@ export class PreviewPreview {
85
85
  // fit content always.
86
86
  window.document.body.style.width = 'fit-content';
87
87
 
88
- const { previewName, componentId } = this.getLocation();
88
+ const { previewName, componentId, envId } = this.getLocation();
89
89
  const name = previewName || this.getDefault();
90
90
  if (rootExt) this.isDev = rootExt === 'teambit.workspace/workspace';
91
91
 
@@ -112,7 +112,13 @@ export class PreviewPreview {
112
112
  // during build / tag, the component is isolated, so all aspects are relevant, and do not require filtering
113
113
  const componentAspects = this.isDev ? await this.getComponentAspects(componentId.toString()) : undefined;
114
114
  const previewModule = await this.getPreviewModule(name, componentId);
115
- const render = preview.render(componentId, previewModule, includes, this.getRenderingContext(componentAspects));
115
+ const render = preview.render(
116
+ componentId,
117
+ envId || '',
118
+ previewModule,
119
+ includes,
120
+ this.getRenderingContext(componentAspects)
121
+ );
116
122
 
117
123
  this.reportSize();
118
124
  this.setViewport();
@@ -178,7 +184,7 @@ export class PreviewPreview {
178
184
  const metadata = componentPreviews[`${previewName}_metadata`];
179
185
 
180
186
  return {
181
- mainModule: relevantModel.mainModule,
187
+ modulesMap: relevantModel.modulesMap,
182
188
  componentMap: {
183
189
  [id.fullName]: component,
184
190
  },
@@ -334,6 +340,7 @@ export class PreviewPreview {
334
340
 
335
341
  return {
336
342
  previewName: this.getParam(after, 'preview'),
343
+ envId: this.getParam(after, 'env'),
337
344
  componentId: ComponentID.tryFromString(before),
338
345
  };
339
346
  }
@@ -127,7 +127,7 @@ export class EnvBundlingStrategy implements BundlingStrategy {
127
127
  const link = this.preview.writeLink(
128
128
  previewDef.prefix,
129
129
  paths,
130
- previewDef.renderTemplatePath ? await previewDef.renderTemplatePath(context) : undefined,
130
+ {default: template || 'undefined'},
131
131
  outputPath,
132
132
  false
133
133
  );
@@ -1,3 +1,8 @@
1
+ type MainModuleExports = {
2
+ (...args: any[]): void;
3
+ apiObject?: boolean;
4
+ };
5
+
1
6
  /**
2
7
  * A full index of the preview data
3
8
  */
@@ -11,11 +16,13 @@ export type PreviewModule<T = any> = {
11
16
  componentMapMetadata: Record<string, unknown>;
12
17
 
13
18
  /** The 'main file' for this Preview type */
14
- mainModule: {
19
+ modulesMap: {
15
20
  default: {
16
- (...args: any[]): void;
17
- apiObject?: boolean;
18
- };
21
+ default: MainModuleExports;
22
+ }
23
+ [envId: string]: {
24
+ default: MainModuleExports;
25
+ }
19
26
  };
20
27
 
21
28
  isSplitComponentBundle?: boolean;