@teambit/preview 0.0.621 → 0.0.629

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/__preview-1642994756471.js +1 -0
  2. package/dist/artifact-file-middleware.d.ts +12 -0
  3. package/dist/artifact-file-middleware.js +81 -0
  4. package/dist/artifact-file-middleware.js.map +1 -0
  5. package/dist/bundling-strategy.d.ts +6 -1
  6. package/dist/component-preview.route.d.ts +20 -0
  7. package/dist/component-preview.route.js +83 -0
  8. package/dist/component-preview.route.js.map +1 -0
  9. package/dist/env-preview-template.task.d.ts +42 -0
  10. package/dist/env-preview-template.task.js +309 -0
  11. package/dist/env-preview-template.task.js.map +1 -0
  12. package/dist/env-template.route.d.ts +26 -0
  13. package/dist/env-template.route.js +89 -0
  14. package/dist/env-template.route.js.map +1 -0
  15. package/dist/generate-link.d.ts +1 -1
  16. package/dist/generate-link.js +3 -3
  17. package/dist/generate-link.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/preview-artifact.d.ts +2 -0
  21. package/dist/preview-artifact.js +21 -0
  22. package/dist/preview-artifact.js.map +1 -1
  23. package/dist/preview-assets.route.d.ts +19 -0
  24. package/dist/preview-assets.route.js +66 -0
  25. package/dist/preview-assets.route.js.map +1 -0
  26. package/dist/preview-definition.d.ts +16 -3
  27. package/dist/preview.graphql.d.ts +8 -1
  28. package/dist/preview.graphql.js +13 -2
  29. package/dist/preview.graphql.js.map +1 -1
  30. package/dist/preview.main.runtime.d.ts +78 -11
  31. package/dist/preview.main.runtime.js +251 -18
  32. package/dist/preview.main.runtime.js.map +1 -1
  33. package/dist/preview.preview.runtime.d.ts +11 -2
  34. package/dist/preview.preview.runtime.js +124 -6
  35. package/dist/preview.preview.runtime.js.map +1 -1
  36. package/dist/preview.route.d.ts +3 -7
  37. package/dist/preview.route.js +22 -21
  38. package/dist/preview.route.js.map +1 -1
  39. package/dist/preview.task.d.ts +2 -2
  40. package/dist/preview.task.js +25 -24
  41. package/dist/preview.task.js.map +1 -1
  42. package/dist/strategies/component-strategy.d.ts +52 -12
  43. package/dist/strategies/component-strategy.js +348 -20
  44. package/dist/strategies/component-strategy.js.map +1 -1
  45. package/dist/strategies/env-strategy.d.ts +7 -5
  46. package/dist/strategies/env-strategy.js +27 -1
  47. package/dist/strategies/env-strategy.js.map +1 -1
  48. package/dist/strategies/generate-component-link.d.ts +5 -0
  49. package/dist/strategies/generate-component-link.js +25 -0
  50. package/dist/strategies/generate-component-link.js.map +1 -0
  51. package/dist/types/preview-module.d.ts +1 -0
  52. package/dist/webpack/html.d.ts +2 -0
  53. package/dist/webpack/html.js +31 -0
  54. package/dist/webpack/html.js.map +1 -0
  55. package/dist/webpack/index.d.ts +1 -0
  56. package/dist/webpack/index.js +23 -0
  57. package/dist/webpack/index.js.map +1 -0
  58. package/package-tar/teambit-preview-0.0.629.tgz +0 -0
  59. package/package.json +29 -26
  60. package/preview.main.runtime.tsx +235 -23
  61. package/preview.preview.runtime.tsx +123 -7
  62. package/strategies/component-strategy.ts +329 -23
  63. package/strategies/env-strategy.ts +28 -10
  64. package/strategies/generate-component-link.ts +19 -0
  65. package/types/preview-module.ts +2 -0
  66. package/webpack/html.ts +22 -0
  67. package/webpack/index.ts +1 -0
  68. package/package-tar/teambit-preview-0.0.621.tgz +0 -0
@@ -111,6 +111,16 @@ function _constants() {
111
111
  return data;
112
112
  }
113
113
 
114
+ function _bitError() {
115
+ const data = require("@teambit/bit-error");
116
+
117
+ _bitError = function () {
118
+ return data;
119
+ };
120
+
121
+ return data;
122
+ }
123
+
114
124
  function _objectHash() {
115
125
  const data = _interopRequireDefault(require("object-hash"));
116
126
 
@@ -191,6 +201,36 @@ function _logger() {
191
201
  return data;
192
202
  }
193
203
 
204
+ function _dependencyResolver() {
205
+ const data = require("@teambit/dependency-resolver");
206
+
207
+ _dependencyResolver = function () {
208
+ return data;
209
+ };
210
+
211
+ return data;
212
+ }
213
+
214
+ function _artifactFiles() {
215
+ const data = require("@teambit/legacy/dist/consumer/component/sources/artifact-files");
216
+
217
+ _artifactFiles = function () {
218
+ return data;
219
+ };
220
+
221
+ return data;
222
+ }
223
+
224
+ function _graphql() {
225
+ const data = _interopRequireDefault(require("@teambit/graphql"));
226
+
227
+ _graphql = function () {
228
+ return data;
229
+ };
230
+
231
+ return data;
232
+ }
233
+
194
234
  function _exceptions() {
195
235
  const data = require("./exceptions");
196
236
 
@@ -281,6 +321,66 @@ function _preview4() {
281
321
  return data;
282
322
  }
283
323
 
324
+ function _envPreviewTemplate() {
325
+ const data = require("./env-preview-template.task");
326
+
327
+ _envPreviewTemplate = function () {
328
+ return data;
329
+ };
330
+
331
+ return data;
332
+ }
333
+
334
+ function _envTemplate() {
335
+ const data = require("./env-template.route");
336
+
337
+ _envTemplate = function () {
338
+ return data;
339
+ };
340
+
341
+ return data;
342
+ }
343
+
344
+ function _componentPreview() {
345
+ const data = require("./component-preview.route");
346
+
347
+ _componentPreview = function () {
348
+ return data;
349
+ };
350
+
351
+ return data;
352
+ }
353
+
354
+ function _componentStrategy() {
355
+ const data = require("./strategies/component-strategy");
356
+
357
+ _componentStrategy = function () {
358
+ return data;
359
+ };
360
+
361
+ return data;
362
+ }
363
+
364
+ function _preview5() {
365
+ const data = require("./preview.graphql");
366
+
367
+ _preview5 = function () {
368
+ return data;
369
+ };
370
+
371
+ return data;
372
+ }
373
+
374
+ function _previewAssets() {
375
+ const data = require("./preview-assets.route");
376
+
377
+ _previewAssets = function () {
378
+ return data;
379
+ };
380
+
381
+ return data;
382
+ }
383
+
284
384
  const noopResult = {
285
385
  results: [],
286
386
  toString: () => `updating link file`
@@ -296,11 +396,12 @@ class PreviewMain {
296
396
  /**
297
397
  * slot for preview definitions.
298
398
  */
299
- previewSlot, ui, envs, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger) {
399
+ previewSlot, ui, envs, componentAspect, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger, dependencyResolver) {
300
400
  this.harmony = harmony;
301
401
  this.previewSlot = previewSlot;
302
402
  this.ui = ui;
303
403
  this.envs = envs;
404
+ this.componentAspect = componentAspect;
304
405
  this.pkg = pkg;
305
406
  this.aspectLoader = aspectLoader;
306
407
  this.config = config;
@@ -308,6 +409,7 @@ class PreviewMain {
308
409
  this.builder = builder;
309
410
  this.workspace = workspace;
310
411
  this.logger = logger;
412
+ this.dependencyResolver = dependencyResolver;
311
413
  (0, _defineProperty2().default)(this, "writeHash", new Map());
312
414
  (0, _defineProperty2().default)(this, "timestamp", Date.now());
313
415
  (0, _defineProperty2().default)(this, "executionRefs", new Map());
@@ -343,11 +445,126 @@ class PreviewMain {
343
445
  return ((_this$workspace = this.workspace) === null || _this$workspace === void 0 ? void 0 : _this$workspace.getTempDir(_preview().PreviewAspect.id)) || DEFAULT_TEMP_DIR;
344
446
  }
345
447
 
448
+ getComponentBundleSize(component) {
449
+ const data = this.builder.getDataByAspect(component, _preview().PreviewAspect.id);
450
+ if (!data) return undefined;
451
+ return data[_componentStrategy().COMPONENT_STRATEGY_SIZE_KEY_NAME];
452
+ }
453
+
346
454
  async getPreview(component) {
347
- const artifacts = await this.builder.getArtifactsVinylByExtension(component, _preview().PreviewAspect.id);
348
- if (!artifacts.length) return undefined;
455
+ const artifacts = await this.builder.getArtifactsVinylByExtensionAndTaskName(component, _preview().PreviewAspect.id, _preview3().PREVIEW_TASK_NAME);
456
+ if (!artifacts || !artifacts.length) return undefined;
349
457
  return new (_previewArtifact().PreviewArtifact)(artifacts);
350
458
  }
459
+ /**
460
+ * Get a list of all the artifact files generated during the GeneratePreview task
461
+ * @param component
462
+ * @returns
463
+ */
464
+
465
+
466
+ async getPreviewFiles(component) {
467
+ const artifacts = await this.getPreview(component);
468
+ if (!artifacts) return undefined;
469
+ return {
470
+ files: artifacts.getPaths()
471
+ };
472
+ }
473
+ /**
474
+ * Check if the component preview bundle contain the env as part of the bundle or only the component code
475
+ * (we used in the past to bundle them together, there might also be specific envs which still uses the env strategy)
476
+ * @param component
477
+ * @returns
478
+ */
479
+
480
+
481
+ async isBundledWithEnv(component) {
482
+ const artifacts = await this.builder.getArtifactsVinylByExtensionAndName(component, _preview().PreviewAspect.id, _componentStrategy().COMPONENT_STRATEGY_ARTIFACT_NAME);
483
+ if (!artifacts || !artifacts.length) return true;
484
+ return false;
485
+ }
486
+ /**
487
+ * Getting the env template artifact
488
+ * This should be called with the env itself or it will return undefined
489
+ * If you want to get the env template from the env of the component,
490
+ * use: getEnvTemplateFromComponentEnv below
491
+ *
492
+ * @param component
493
+ * @returns
494
+ */
495
+
496
+
497
+ async getEnvTemplate(component) {
498
+ const artifacts = await this.builder.getArtifactsVinylByExtensionAndTaskName(component, _preview().PreviewAspect.id, _envPreviewTemplate().GENERATE_ENV_TEMPLATE_TASK_NAME);
499
+ if (!artifacts || !artifacts.length) return undefined;
500
+ return new (_previewArtifact().PreviewArtifact)(artifacts);
501
+ }
502
+ /**
503
+ * This is a special method to get a core env template
504
+ * As the core envs doesn't exist in the scope we need to bring it from other place
505
+ * We will bring it from the core env package files
506
+ */
507
+
508
+
509
+ async getCoreEnvTemplate(envId) {
510
+ const coreEnvDir = (0, _aspectLoader().getAspectDir)(envId); // const finalDir = join(coreEnvDir, getEnvTemplateArtifactDirectory());
511
+
512
+ const artifactDef = (0, _envPreviewTemplate().getArtifactDef)()[0];
513
+ const artifactFactory = new (_builder().ArtifactFactory)();
514
+ let rootDir = artifactFactory.getRootDir(coreEnvDir, artifactDef);
515
+
516
+ if (!(0, _fsExtra().existsSync)(rootDir)) {
517
+ // fallback to the bvm folder
518
+ const coreEnvDirFromBvm = (0, _aspectLoader().getAspectDirFromBvm)(envId);
519
+ rootDir = artifactFactory.getRootDir(coreEnvDirFromBvm, artifactDef);
520
+ }
521
+
522
+ if (!(0, _fsExtra().existsSync)(rootDir)) {
523
+ return undefined;
524
+ }
525
+
526
+ const paths = artifactFactory.resolvePaths(rootDir, artifactDef);
527
+
528
+ if (!paths || !paths.length) {
529
+ return undefined;
530
+ }
531
+
532
+ const artifactFiles = new (_artifactFiles().ArtifactFiles)(paths);
533
+ artifactFiles.populateVinylsFromPaths(rootDir);
534
+ return new (_previewArtifact().PreviewArtifact)(artifactFiles.vinyls);
535
+ }
536
+ /**
537
+ * This will fetch the component env, then will take the env template from the component env
538
+ * @param component
539
+ */
540
+
541
+
542
+ async getEnvTemplateFromComponentEnv(component) {
543
+ const envId = this.envs.getEnvId(component);
544
+ return this.getEnvTemplateByEnvId(envId);
545
+ }
546
+ /**
547
+ * This will fetch the component env, then will take the env template from the component env
548
+ * @param component
549
+ */
550
+
551
+
552
+ async getEnvTemplateByEnvId(envId) {
553
+ // Special treatment for core envs
554
+ if (this.aspectLoader.isCoreEnv(envId)) {
555
+ return this.getCoreEnvTemplate(envId);
556
+ }
557
+
558
+ const host = this.componentAspect.getHost();
559
+ const resolvedEnvId = await host.resolveComponentId(envId);
560
+ const envComponent = await host.get(resolvedEnvId);
561
+
562
+ if (!envComponent) {
563
+ throw new (_bitError().BitError)(`can't load env. env id is ${envId}`);
564
+ }
565
+
566
+ return this.getEnvTemplate(envComponent);
567
+ }
351
568
 
352
569
  getDefs() {
353
570
  return this.previewSlot.values();
@@ -360,10 +577,14 @@ class PreviewMain {
360
577
  * @param defaultModule
361
578
  * @param dirName
362
579
  */
363
- writeLink(prefix, moduleMap, defaultModule, dirName) {
364
- const contents = (0, _generateLink().generateLink)(prefix, moduleMap, defaultModule);
580
+ writeLink(prefix, moduleMap, defaultModule, dirName, isSplitComponentBundle) {
581
+ const contents = (0, _generateLink().generateLink)(prefix, moduleMap, defaultModule, isSplitComponentBundle);
582
+ return this.writeLinkContents(contents, dirName, prefix);
583
+ }
584
+
585
+ writeLinkContents(contents, targetDir, prefix) {
365
586
  const hash = (0, _objectHash().default)(contents);
366
- const targetPath = (0, _path().join)(dirName, `__${prefix}-${this.timestamp}.js`); // write only if link has changed (prevents triggering fs watches)
587
+ const targetPath = (0, _path().join)(targetDir, `__${prefix}-${this.timestamp}.js`); // write only if link has changed (prevents triggering fs watches)
367
588
 
368
589
  if (this.writeHash.get(targetPath) !== hash) {
369
590
  (0, _fsExtra().writeFileSync)(targetPath, contents);
@@ -389,11 +610,12 @@ class PreviewMain {
389
610
  updateLinkFiles(components = [], context) {
390
611
  const previews = this.previewSlot.values();
391
612
  const paths = previews.map(async previewDef => {
392
- var _previewDef$renderTem, _environment$getCompi;
613
+ var _previewDef$renderTem, _this$getEnvPreviewCo, _environment$getCompi;
393
614
 
394
615
  const templatePath = await ((_previewDef$renderTem = previewDef.renderTemplatePath) === null || _previewDef$renderTem === void 0 ? void 0 : _previewDef$renderTem.call(previewDef, context));
395
616
  const map = await previewDef.getModuleMap(components);
396
617
  const environment = context.envRuntime.env;
618
+ const isSplitComponentBundle = (_this$getEnvPreviewCo = this.getEnvPreviewConfig().splitComponentBundle) !== null && _this$getEnvPreviewCo !== void 0 ? _this$getEnvPreviewCo : false;
397
619
  const compilerInstance = (_environment$getCompi = environment.getCompiler) === null || _environment$getCompi === void 0 ? void 0 : _environment$getCompi.call(environment);
398
620
  const withPaths = map.map((files, component) => {
399
621
  var _compilerInstance$get;
@@ -412,7 +634,7 @@ class PreviewMain {
412
634
  if (!(0, _fsExtra().existsSync)(dirPath)) (0, _fsExtra().mkdirSync)(dirPath, {
413
635
  recursive: true
414
636
  });
415
- const link = this.writeLink(previewDef.prefix, withPaths, templatePath, dirPath);
637
+ const link = this.writeLink(previewDef.prefix, withPaths, templatePath, dirPath, isSplitComponentBundle);
416
638
  return link;
417
639
  });
418
640
  return Promise.all(paths);
@@ -455,17 +677,25 @@ class PreviewMain {
455
677
  }
456
678
 
457
679
  getDefaultStrategies() {
458
- return [new (_strategies().EnvBundlingStrategy)(this), new (_strategies().ComponentBundlingStrategy)()];
680
+ return [new (_strategies().EnvBundlingStrategy)(this), new (_strategies().ComponentBundlingStrategy)(this, this.pkg, this.dependencyResolver)];
459
681
  } // TODO - executionContext should be responsible for updating components list, and emit 'update' events
460
682
  // instead we keep track of changes
461
683
 
462
684
 
685
+ getEnvPreviewConfig(env) {
686
+ const config = env !== null && env !== void 0 && env.getPreviewConfig && typeof (env === null || env === void 0 ? void 0 : env.getPreviewConfig) === 'function' ? env === null || env === void 0 ? void 0 : env.getPreviewConfig() : {};
687
+ return config;
688
+ }
463
689
  /**
464
690
  * return the configured bundling strategy.
465
691
  */
466
- getBundlingStrategy() {
692
+
693
+
694
+ getBundlingStrategy(env) {
467
695
  const defaultStrategies = this.getDefaultStrategies();
468
- const strategyName = this.config.bundlingStrategy;
696
+ const envPreviewConfig = this.getEnvPreviewConfig(env);
697
+ const strategyFromEnv = envPreviewConfig === null || envPreviewConfig === void 0 ? void 0 : envPreviewConfig.strategyName;
698
+ const strategyName = strategyFromEnv || this.config.bundlingStrategy || 'env';
469
699
  const strategies = this.bundlingStrategySlot.values().concat(defaultStrategies);
470
700
  const selected = strategies.find(strategy => {
471
701
  return strategy.name === strategyName;
@@ -491,15 +721,18 @@ class PreviewMain {
491
721
  this.previewSlot.register(previewDef);
492
722
  }
493
723
 
494
- static async provider([bundler, builder, componentExtension, uiMain, envs, workspace, pkg, pubsub, aspectLoader, loggerMain], config, [previewSlot, bundlingStrategySlot], harmony) {
495
- const logger = loggerMain.createLogger(_preview().PreviewAspect.id);
496
- const preview = new PreviewMain(harmony, previewSlot, uiMain, envs, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger);
724
+ static async provider( // eslint-disable-next-line max-len
725
+ [bundler, builder, componentExtension, uiMain, envs, workspace, pkg, pubsub, aspectLoader, loggerMain, dependencyResolver, graphql], config, [previewSlot, bundlingStrategySlot], harmony) {
726
+ const logger = loggerMain.createLogger(_preview().PreviewAspect.id); // app.registerApp(new PreviewApp());
727
+
728
+ const preview = new PreviewMain(harmony, previewSlot, uiMain, envs, componentExtension, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger, dependencyResolver);
497
729
  if (workspace) uiMain.registerStartPlugin(new (_preview4().PreviewStartPlugin)(workspace, bundler, uiMain, pubsub, logger));
498
- componentExtension.registerRoute([new (_preview2().PreviewRoute)(preview, logger)]);
730
+ componentExtension.registerRoute([new (_preview2().PreviewRoute)(preview, logger), new (_componentPreview().ComponentPreviewRoute)(preview, logger), // @ts-ignore
731
+ new (_envTemplate().EnvTemplateRoute)(preview, logger), new (_previewAssets().PreviewAssetsRoute)(preview, logger)]);
499
732
  bundler.registerTarget([{
500
733
  entry: preview.getPreviewTarget.bind(preview)
501
734
  }]);
502
- if (!config.disabled) builder.registerBuildTasks([new (_preview3().PreviewTask)(bundler, preview)]);
735
+ if (!config.disabled) builder.registerBuildTasks([new (_envPreviewTemplate().EnvPreviewTemplateTask)(preview, envs), new (_preview3().PreviewTask)(bundler, preview)]);
503
736
 
504
737
  if (workspace) {
505
738
  workspace.registerOnComponentAdd(c => preview.handleComponentChange(c, currentComponents => currentComponents.add(c)));
@@ -507,6 +740,7 @@ class PreviewMain {
507
740
  workspace.registerOnComponentRemove(cId => preview.handleComponentRemoval(cId));
508
741
  }
509
742
 
743
+ graphql.register((0, _preview5().previewSchema)(preview));
510
744
  return preview;
511
745
  }
512
746
 
@@ -515,9 +749,8 @@ class PreviewMain {
515
749
  exports.PreviewMain = PreviewMain;
516
750
  (0, _defineProperty2().default)(PreviewMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
517
751
  (0, _defineProperty2().default)(PreviewMain, "runtime", _cli().MainRuntime);
518
- (0, _defineProperty2().default)(PreviewMain, "dependencies", [_bundler().BundlerAspect, _builder().BuilderAspect, _component().ComponentAspect, _ui().UIAspect, _envs().EnvsAspect, _workspace().default, _pkg().PkgAspect, _pubsub().PubsubAspect, _aspectLoader().AspectLoaderAspect, _logger().LoggerAspect]);
752
+ (0, _defineProperty2().default)(PreviewMain, "dependencies", [_bundler().BundlerAspect, _builder().BuilderAspect, _component().ComponentAspect, _ui().UIAspect, _envs().EnvsAspect, _workspace().default, _pkg().PkgAspect, _pubsub().PubsubAspect, _aspectLoader().AspectLoaderAspect, _logger().LoggerAspect, _dependencyResolver().DependencyResolverAspect, _graphql().default]);
519
753
  (0, _defineProperty2().default)(PreviewMain, "defaultConfig", {
520
- bundlingStrategy: 'env',
521
754
  disabled: false
522
755
  });
523
756
 
@@ -1 +1 @@
1
- {"version":3,"sources":["preview.main.runtime.tsx"],"names":["noopResult","results","toString","DEFAULT_TEMP_DIR","CACHE_ROOT","PreviewAspect","id","PreviewMain","constructor","harmony","previewSlot","ui","envs","pkg","aspectLoader","config","bundlingStrategySlot","builder","workspace","logger","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","getPreview","artifacts","getArtifactsVinylByExtension","length","undefined","PreviewArtifact","getDefs","values","writeLink","prefix","moduleMap","defaultModule","dirName","contents","hash","targetPath","timestamp","writeHash","set","getPreviewTarget","context","relatedContexts","ctxId","ExecutionRef","previewRuntime","writePreviewRuntime","linkFiles","previews","paths","map","previewDef","templatePath","renderTemplatePath","getModuleMap","environment","envRuntime","compilerInstance","getCompiler","withPaths","files","modulePath","getPreviewComponentRootPath","getModulePath","file","path","distRelativePath","getDistPathBySrcPath","relative","dirPath","recursive","link","all","getUi","Error","name","uiRoot","resolvedAspects","resolveAspects","PreviewRuntime","filteredAspects","filterAspectsByExecutionContext","filePath","generateRoot","aspects","allComponentContextAspects","reduce","acc","curr","concat","state","ids","hostAspects","Object","keys","toObject","allAspectsToInclude","filtered","filter","aspect","getId","isCoreAspect","includes","getDefaultStrategies","EnvBundlingStrategy","ComponentBundlingStrategy","getBundlingStrategy","defaultStrategies","strategyName","bundlingStrategy","strategies","selected","find","strategy","BundlingStrategyNotFound","registerBundlingStrategy","register","registerDefinition","provider","bundler","componentExtension","uiMain","pubsub","loggerMain","createLogger","preview","registerStartPlugin","PreviewStartPlugin","registerRoute","PreviewRoute","registerTarget","entry","bind","disabled","registerBuildTasks","PreviewTask","registerOnComponentAdd","add","registerOnComponentChange","update","registerOnComponentRemove","handleComponentRemoval","Slot","withType","MainRuntime","BundlerAspect","BuilderAspect","ComponentAspect","UIAspect","EnvsAspect","WorkspaceAspect","PkgAspect","PubsubAspect","AspectLoaderAspect","LoggerAspect","addRuntime"],"mappings":"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","sourcesContent":["import { BuilderAspect, BuilderMain } from '@teambit/builder';\nimport { BundlerAspect, BundlerMain } from '@teambit/bundler';\nimport { PubsubAspect, PubsubMain } from '@teambit/pubsub';\nimport { MainRuntime } from '@teambit/cli';\nimport { Component, ComponentAspect, ComponentMain, ComponentMap, ComponentID } from '@teambit/component';\nimport { EnvsAspect, EnvsMain, ExecutionContext } from '@teambit/envs';\nimport { Slot, SlotRegistry, Harmony } from '@teambit/harmony';\nimport { UIAspect, UiMain } from '@teambit/ui';\nimport { CACHE_ROOT } from '@teambit/legacy/dist/constants';\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 { AspectDefinition, AspectLoaderMain, AspectLoaderAspect } from '@teambit/aspect-loader';\nimport WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport { LoggerAspect, LoggerMain, Logger } from '@teambit/logger';\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 } from './preview.task';\nimport { BundlingStrategy } from './bundling-strategy';\nimport { EnvBundlingStrategy, ComponentBundlingStrategy } from './strategies';\nimport { ExecutionRef } from './execution-ref';\nimport { PreviewStartPlugin } from './preview.start-plugin';\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 PreviewConfig = {\n bundlingStrategy: string;\n disabled: boolean;\n};\n\nexport type BundlingStrategySlot = SlotRegistry<BundlingStrategy>;\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 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\n get tempFolder(): string {\n return this.workspace?.getTempDir(PreviewAspect.id) || DEFAULT_TEMP_DIR;\n }\n\n async getPreview(component: Component): Promise<PreviewArtifact | undefined> {\n const artifacts = await this.builder.getArtifactsVinylByExtension(component, PreviewAspect.id);\n if (!artifacts.length) return undefined;\n\n return new PreviewArtifact(artifacts);\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(prefix: string, moduleMap: ComponentMap<string[]>, defaultModule: string | undefined, dirName: string) {\n const contents = generateLink(prefix, moduleMap, defaultModule);\n const hash = objectHash(contents);\n const targetPath = join(dirName, `__${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 environment = context.envRuntime.env;\n const compilerInstance = environment.getCompiler?.();\n const withPaths = map.map<string[]>((files, component) => {\n const modulePath =\n compilerInstance?.getPreviewComponentRootPath?.(component) || this.pkg.getModulePath(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);\n return link;\n });\n\n return Promise.all(paths);\n }\n\n async writePreviewRuntime(context: { components: Component[] }) {\n const ui = this.ui.getUi();\n if (!ui) throw new Error('ui not found');\n const [name, uiRoot] = ui;\n const resolvedAspects = await uiRoot.resolveAspects(PreviewRuntime.name);\n const filteredAspects = this.filterAspectsByExecutionContext(resolvedAspects, context);\n const filePath = await this.ui.generateRoot(filteredAspects, name, 'preview', PreviewAspect.id);\n return filePath;\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(aspects: AspectDefinition[], context: { components: Component[] }) {\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 this.aspectLoader.isCoreAspect(aspect.getId) || allAspectsToInclude.includes(aspect.getId);\n });\n return filtered;\n }\n\n private getDefaultStrategies() {\n return [new EnvBundlingStrategy(this), new ComponentBundlingStrategy()];\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 /**\n * return the configured bundling strategy.\n */\n getBundlingStrategy(): BundlingStrategy {\n const defaultStrategies = this.getDefaultStrategies();\n const strategyName = this.config.bundlingStrategy;\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 ];\n\n static defaultConfig = {\n bundlingStrategy: 'env',\n disabled: false,\n };\n\n static async provider(\n [bundler, builder, componentExtension, uiMain, envs, workspace, pkg, pubsub, aspectLoader, loggerMain]: [\n BundlerMain,\n BuilderMain,\n ComponentMain,\n UiMain,\n EnvsMain,\n Workspace | undefined,\n PkgMain,\n PubsubMain,\n AspectLoaderMain,\n LoggerMain\n ],\n config: PreviewConfig,\n [previewSlot, bundlingStrategySlot]: [PreviewDefinitionRegistry, BundlingStrategySlot],\n harmony: Harmony\n ) {\n const logger = loggerMain.createLogger(PreviewAspect.id);\n\n const preview = new PreviewMain(\n harmony,\n previewSlot,\n uiMain,\n envs,\n pkg,\n aspectLoader,\n config,\n bundlingStrategySlot,\n builder,\n workspace,\n logger\n );\n\n if (workspace) uiMain.registerStartPlugin(new PreviewStartPlugin(workspace, bundler, uiMain, pubsub, logger));\n\n componentExtension.registerRoute([new PreviewRoute(preview, logger)]);\n bundler.registerTarget([\n {\n entry: preview.getPreviewTarget.bind(preview),\n },\n ]);\n\n if (!config.disabled) builder.registerBuildTasks([new PreviewTask(bundler, preview)]);\n\n if (workspace) {\n workspace.registerOnComponentAdd((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.add(c))\n );\n workspace.registerOnComponentChange((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.update(c))\n );\n workspace.registerOnComponentRemove((cId) => preview.handleComponentRemoval(cId));\n }\n\n return preview;\n }\n}\n\nPreviewAspect.addRuntime(PreviewMain);\n"]}
1
+ {"version":3,"sources":["preview.main.runtime.tsx"],"names":["noopResult","results","toString","DEFAULT_TEMP_DIR","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","getArtifactsVinylByExtensionAndTaskName","PREVIEW_TASK_NAME","length","PreviewArtifact","getPreviewFiles","files","getPaths","isBundledWithEnv","getArtifactsVinylByExtensionAndName","COMPONENT_STRATEGY_ARTIFACT_NAME","getEnvTemplate","GENERATE_ENV_TEMPLATE_TASK_NAME","getCoreEnvTemplate","coreEnvDir","artifactDef","artifactFactory","ArtifactFactory","rootDir","getRootDir","coreEnvDirFromBvm","paths","resolvePaths","artifactFiles","ArtifactFiles","populateVinylsFromPaths","vinyls","getEnvTemplateFromComponentEnv","getEnvId","getEnvTemplateByEnvId","isCoreEnv","host","getHost","resolvedEnvId","resolveComponentId","envComponent","BitError","getDefs","values","writeLink","prefix","moduleMap","defaultModule","dirName","isSplitComponentBundle","contents","writeLinkContents","targetDir","hash","targetPath","timestamp","writeHash","set","getPreviewTarget","context","relatedContexts","ctxId","ExecutionRef","previewRuntime","writePreviewRuntime","linkFiles","previews","map","previewDef","templatePath","renderTemplatePath","getModuleMap","environment","envRuntime","getEnvPreviewConfig","splitComponentBundle","compilerInstance","getCompiler","withPaths","modulePath","getPreviewComponentRootPath","getModulePath","file","path","distRelativePath","getDistPathBySrcPath","relative","dirPath","recursive","link","all","getUi","Error","name","uiRoot","resolvedAspects","resolveAspects","PreviewRuntime","filteredAspects","filterAspectsByExecutionContext","filePath","generateRoot","aspects","allComponentContextAspects","reduce","acc","curr","concat","state","ids","hostAspects","Object","keys","toObject","allAspectsToInclude","filtered","filter","aspect","getId","isCoreAspect","includes","getDefaultStrategies","EnvBundlingStrategy","ComponentBundlingStrategy","getPreviewConfig","getBundlingStrategy","defaultStrategies","envPreviewConfig","strategyFromEnv","strategyName","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","registerOnComponentChange","update","registerOnComponentRemove","handleComponentRemoval","Slot","withType","MainRuntime","BundlerAspect","BuilderAspect","ComponentAspect","UIAspect","EnvsAspect","WorkspaceAspect","PkgAspect","PubsubAspect","AspectLoaderAspect","LoggerAspect","DependencyResolverAspect","GraphqlAspect","addRuntime"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;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","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 { Component, ComponentAspect, ComponentMain, ComponentMap, ComponentID } 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 } 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 { EnvBundlingStrategy, ComponentBundlingStrategy } 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 { COMPONENT_STRATEGY_ARTIFACT_NAME, COMPONENT_STRATEGY_SIZE_KEY_NAME } from './strategies/component-strategy';\nimport { previewSchema } from './preview.graphql';\nimport { PreviewAssetsRoute } from './preview-assets.route';\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\ntype PreviewFiles = {\n files: string[];\n};\n\nexport type ComponentPreviewSizedFile = Asset;\n\nexport type ComponentPreviewSize = {\n files: ComponentPreviewSizedFile[];\n assets: ComponentPreviewSizedFile[];\n totalFiles: number;\n totalAssets: number;\n total: number;\n};\n\nexport type ComponentPreviewMetaData = {\n size?: ComponentPreviewSize;\n};\n\nexport type PreviewConfig = {\n bundlingStrategy?: string;\n disabled: boolean;\n};\n\nexport type EnvPreviewConfig = {\n strategyName?: string;\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.getArtifactsVinylByExtensionAndTaskName(\n component,\n PreviewAspect.id,\n PREVIEW_TASK_NAME\n );\n if (!artifacts || !artifacts.length) 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 if (!artifacts) return undefined;\n return {\n files: artifacts.getPaths(),\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 artifacts = await this.builder.getArtifactsVinylByExtensionAndName(\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 /**\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.getArtifactsVinylByExtensionAndTaskName(\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 environment = context.envRuntime.env;\n const isSplitComponentBundle = this.getEnvPreviewConfig().splitComponentBundle ?? false;\n const compilerInstance = environment.getCompiler?.();\n const withPaths = map.map<string[]>((files, component) => {\n const modulePath =\n compilerInstance?.getPreviewComponentRootPath?.(component) || this.pkg.getModulePath(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[] }) {\n const ui = this.ui.getUi();\n if (!ui) throw new Error('ui not found');\n const [name, uiRoot] = ui;\n const resolvedAspects = await uiRoot.resolveAspects(PreviewRuntime.name);\n const filteredAspects = this.filterAspectsByExecutionContext(resolvedAspects, context);\n const filePath = await this.ui.generateRoot(filteredAspects, name, 'preview', PreviewAspect.id);\n return filePath;\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(aspects: AspectDefinition[], context: { components: Component[] }) {\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 this.aspectLoader.isCoreAspect(aspect.getId) || allAspectsToInclude.includes(aspect.getId);\n });\n return filtered;\n }\n\n private getDefaultStrategies() {\n return [new EnvBundlingStrategy(this), new ComponentBundlingStrategy(this, this.pkg, this.dependencyResolver)];\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([new EnvPreviewTemplateTask(preview, envs), new PreviewTask(bundler, preview)]);\n\n if (workspace) {\n workspace.registerOnComponentAdd((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.add(c))\n );\n workspace.registerOnComponentChange((c) =>\n preview.handleComponentChange(c, (currentComponents) => currentComponents.update(c))\n );\n workspace.registerOnComponentRemove((cId) => preview.handleComponentRemoval(cId));\n }\n\n graphql.register(previewSchema(preview));\n\n return preview;\n }\n}\n\nPreviewAspect.addRuntime(PreviewMain);\n"]}
@@ -1,6 +1,8 @@
1
1
  import { PubsubPreview } from '@teambit/pubsub';
2
2
  import { SlotRegistry } from '@teambit/harmony';
3
+ import { ComponentID } from '@teambit/component-id';
3
4
  import { PreviewType } from './preview-type';
5
+ import { PreviewModule } from './types/preview-module';
4
6
  import { RenderingContext } from './rendering-context';
5
7
  export declare type PreviewSlot = SlotRegistry<PreviewType>;
6
8
  export declare type RenderingContextProvider = () => {
@@ -30,7 +32,14 @@ export declare class PreviewPreview {
30
32
  /**
31
33
  * render the preview.
32
34
  */
33
- render: () => void;
35
+ render: () => Promise<void>;
36
+ getPreviewModule(name: string, id: ComponentID): Promise<PreviewModule>;
37
+ fetchComponentPreview(id: ComponentID, name: string): Promise<unknown>;
38
+ private addComponentFileElement;
39
+ private fetchComponentPreviewFiles;
40
+ private addComponentFileScriptElement;
41
+ private addComponentFileLinkElement;
42
+ private getPreviewScriptElement;
34
43
  /**
35
44
  * register a new preview.
36
45
  */
@@ -53,6 +62,6 @@ export declare class PreviewPreview {
53
62
  static slots: (((registerFn: () => string) => SlotRegistry<PreviewType>) | ((registerFn: () => string) => SlotRegistry<RenderingContextProvider>))[];
54
63
  static provider([pubsub]: [PubsubPreview], config: any, [previewSlot, renderingContextSlot]: [PreviewSlot, RenderingContextSlot]): Promise<PreviewPreview>;
55
64
  }
56
- export declare function linkModules(previewName: string, defaultModule: any, componentMap: {
65
+ export declare function linkModules(previewName: string, defaultModule: any, isSplitComponentBundle: boolean, componentMap: {
57
66
  [key: string]: any;
58
67
  }): void;