@teambit/preview 1.0.465 → 1.0.467

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,32 @@
1
+ import { Command, CommandOptions } from '@teambit/cli';
2
+ import type { PreviewMain } from './preview.main.runtime';
3
+ import { EnvsExecutionResult } from '@teambit/envs';
4
+ type GeneratePreviewArgs = [userPattern: string];
5
+ type GeneratePreviewFlags = {
6
+ name: string;
7
+ };
8
+ export declare class GeneratePreviewCmd implements Command {
9
+ /**
10
+ * access to the extension instance.
11
+ */
12
+ private preview;
13
+ name: string;
14
+ description: string;
15
+ arguments: {
16
+ name: string;
17
+ description: string;
18
+ }[];
19
+ group: string;
20
+ options: CommandOptions;
21
+ private: boolean;
22
+ constructor(
23
+ /**
24
+ * access to the extension instance.
25
+ */
26
+ preview: PreviewMain);
27
+ report([userPattern]: GeneratePreviewArgs, { name }: GeneratePreviewFlags): Promise<string>;
28
+ formatOutput(res: EnvsExecutionResult<{
29
+ [id: string]: string;
30
+ }>): string;
31
+ }
32
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GeneratePreviewCmd = void 0;
7
+ function _padRight() {
8
+ const data = _interopRequireDefault(require("pad-right"));
9
+ _padRight = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _constants() {
15
+ const data = require("@teambit/legacy/dist/constants");
16
+ _constants = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _chalk() {
22
+ const data = _interopRequireDefault(require("chalk"));
23
+ _chalk = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
29
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
30
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
31
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
32
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
33
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
34
+ class GeneratePreviewCmd {
35
+ constructor(
36
+ /**
37
+ * access to the extension instance.
38
+ */
39
+ preview) {
40
+ this.preview = preview;
41
+ _defineProperty(this, "name", 'generate-preview [component-pattern]');
42
+ _defineProperty(this, "description", 'generate preview bundle for components');
43
+ _defineProperty(this, "arguments", [{
44
+ name: 'component-pattern',
45
+ description: _constants().COMPONENT_PATTERN_HELP
46
+ }]);
47
+ _defineProperty(this, "group", 'development');
48
+ _defineProperty(this, "options", [['n', 'name <name>', 'name for the preview']]);
49
+ _defineProperty(this, "private", true);
50
+ }
51
+ async report([userPattern], {
52
+ name
53
+ }) {
54
+ const res = await this.preview.generateComponentPreview(userPattern, name);
55
+ const formattedOutput = this.formatOutput(res);
56
+ return _chalk().default.green(`previews generated successfully in:\n${formattedOutput}`);
57
+ }
58
+ formatOutput(res) {
59
+ const merged = res.results.reduce((acc, result) => {
60
+ acc = _objectSpread(_objectSpread({}, acc), result.data);
61
+ return acc;
62
+ }, {});
63
+ const rows = Object.entries(merged).map(([id, previewPath]) => {
64
+ const keyPadded = (0, _padRight().default)(id, 20, ' ');
65
+ return _chalk().default.green(`${keyPadded} - ${previewPath}`);
66
+ });
67
+ return rows.join('\n');
68
+ }
69
+ }
70
+ exports.GeneratePreviewCmd = GeneratePreviewCmd;
71
+
72
+ //# sourceMappingURL=generate-preview.cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_padRight","data","_interopRequireDefault","require","_constants","_chalk","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","GeneratePreviewCmd","constructor","preview","name","description","COMPONENT_PATTERN_HELP","report","userPattern","res","generateComponentPreview","formattedOutput","formatOutput","chalk","green","merged","results","reduce","acc","result","rows","entries","map","id","previewPath","keyPadded","padRight","join","exports"],"sources":["generate-preview.cmd.tsx"],"sourcesContent":["import padRight from 'pad-right';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { COMPONENT_PATTERN_HELP } from '@teambit/legacy/dist/constants';\nimport chalk from 'chalk';\nimport type { PreviewMain } from './preview.main.runtime';\nimport { EnvsExecutionResult } from '@teambit/envs';\n\ntype GeneratePreviewArgs = [userPattern: string];\ntype GeneratePreviewFlags = {\n name: string;\n};\n\nexport class GeneratePreviewCmd implements Command {\n name = 'generate-preview [component-pattern]';\n description = 'generate preview bundle for components';\n arguments = [\n {\n name: 'component-pattern',\n description: COMPONENT_PATTERN_HELP,\n },\n ];\n group = 'development';\n options = [['n', 'name <name>', 'name for the preview']] as CommandOptions;\n private = true;\n\n constructor(\n /**\n * access to the extension instance.\n */\n private preview: PreviewMain\n ) {}\n\n async report([userPattern]: GeneratePreviewArgs, { name }: GeneratePreviewFlags) {\n const res = await this.preview.generateComponentPreview(userPattern, name);\n const formattedOutput = this.formatOutput(res);\n return chalk.green(`previews generated successfully in:\\n${formattedOutput}`);\n }\n\n formatOutput(res: EnvsExecutionResult<{ [id: string]: string }>) {\n const merged = res.results.reduce((acc, result) => {\n acc = { ...acc, ...result.data };\n return acc;\n }, {});\n const rows = Object.entries(merged).map(([id, previewPath]) => {\n const keyPadded = padRight(id, 20, ' ');\n return chalk.green(`${keyPadded} - ${previewPath}`);\n });\n return rows.join('\\n');\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.465/dist/preview.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.465/dist/preview.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.467/dist/preview.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.467/dist/preview.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -1,8 +1,9 @@
1
1
  import type { BuilderMain } from '@teambit/builder';
2
2
  import { Asset, BundlerMain } from '@teambit/bundler';
3
3
  import { PubsubMain } from '@teambit/pubsub';
4
+ import type { CLIMain } from '@teambit/cli';
4
5
  import { Component, ComponentMain, ComponentMap, ComponentID, ResolveAspectsOptions } from '@teambit/component';
5
- import type { EnvsMain, PreviewEnv } from '@teambit/envs';
6
+ import type { EnvsExecutionResult, EnvsMain, ExecutionContext, PreviewEnv } from '@teambit/envs';
6
7
  import { SlotRegistry, Harmony } from '@teambit/harmony';
7
8
  import { UiMain, UIRoot } from '@teambit/ui';
8
9
  import { CacheMain } from '@teambit/cache';
@@ -11,6 +12,7 @@ import type { AspectDefinition, AspectLoaderMain } from '@teambit/aspect-loader'
11
12
  import { Workspace } from '@teambit/workspace';
12
13
  import { LoggerMain, Logger } from '@teambit/logger';
13
14
  import type { DependencyResolverMain } from '@teambit/dependency-resolver';
15
+ import { ExpressMain } from '@teambit/express';
14
16
  import { WatcherMain } from '@teambit/watcher';
15
17
  import { GraphqlMain } from '@teambit/graphql';
16
18
  import { ScopeMain } from '@teambit/scope';
@@ -118,6 +120,7 @@ export declare class PreviewMain {
118
120
  private workspace;
119
121
  private logger;
120
122
  private dependencyResolver;
123
+ private express;
121
124
  constructor(
122
125
  /**
123
126
  * harmony context.
@@ -126,7 +129,8 @@ export declare class PreviewMain {
126
129
  /**
127
130
  * slot for preview definitions.
128
131
  */
129
- previewSlot: PreviewDefinitionRegistry, ui: UiMain, cache: CacheMain, envs: EnvsMain, componentAspect: ComponentMain, pkg: PkgMain, aspectLoader: AspectLoaderMain, config: PreviewConfig, bundlingStrategySlot: BundlingStrategySlot, builder: BuilderMain, workspace: Workspace | undefined, logger: Logger, dependencyResolver: DependencyResolverMain);
132
+ previewSlot: PreviewDefinitionRegistry, ui: UiMain, cache: CacheMain, envs: EnvsMain, componentAspect: ComponentMain, pkg: PkgMain, aspectLoader: AspectLoaderMain, config: PreviewConfig, bundlingStrategySlot: BundlingStrategySlot, builder: BuilderMain, workspace: Workspace | undefined, logger: Logger, dependencyResolver: DependencyResolverMain, express: ExpressMain);
133
+ private previewService;
130
134
  get tempFolder(): string;
131
135
  getComponentBundleSize(component: Component): ComponentPreviewSize | undefined;
132
136
  getPreview(component: Component): Promise<PreviewArtifact | undefined>;
@@ -164,6 +168,12 @@ export declare class PreviewMain {
164
168
  doesEnvUseNameParam(envComponent: Component): boolean;
165
169
  private calculateIncludeOnlyOverview;
166
170
  private calculateUseNameParam;
171
+ generateComponentPreview(componentPattern: string, name: string): Promise<EnvsExecutionResult<{
172
+ [id: string]: string;
173
+ }>>;
174
+ serveLocalPreview({ port }: {
175
+ port: number;
176
+ }): Promise<number>;
167
177
  /**
168
178
  * Calculate preview data on component load
169
179
  * @param component
@@ -286,7 +296,7 @@ export declare class PreviewMain {
286
296
  private executionRefs;
287
297
  private getPreviewTarget;
288
298
  private writePreviewEntry;
289
- private updateLinkFiles;
299
+ updateLinkFiles(previews: PreviewDefinition[], components: Component[] | undefined, context: ExecutionContext): Promise<string[]>;
290
300
  writePreviewRuntime(context: {
291
301
  components: Component[];
292
302
  }, aspectsIdsToNotFilterOut?: string[]): Promise<string>;
@@ -324,7 +334,7 @@ export declare class PreviewMain {
324
334
  disabled: boolean;
325
335
  onlyOverview: boolean;
326
336
  };
327
- static provider([bundler, builder, componentExtension, uiMain, cache, envs, workspace, pkg, pubsub, aspectLoader, loggerMain, dependencyResolver, graphql, watcher, scope,]: [
337
+ static provider([bundler, builder, componentExtension, uiMain, cache, envs, workspace, pkg, pubsub, aspectLoader, loggerMain, dependencyResolver, graphql, watcher, scope, cli, express,]: [
328
338
  BundlerMain,
329
339
  BuilderMain,
330
340
  ComponentMain,
@@ -339,6 +349,8 @@ export declare class PreviewMain {
339
349
  DependencyResolverMain,
340
350
  GraphqlMain,
341
351
  WatcherMain,
342
- ScopeMain
352
+ ScopeMain,
353
+ CLIMain,
354
+ ExpressMain
343
355
  ], config: PreviewConfig, [previewSlot, bundlingStrategySlot]: [PreviewDefinitionRegistry, BundlingStrategySlot], harmony: Harmony): Promise<PreviewMain>;
344
356
  }
@@ -144,6 +144,13 @@ function _dependencyResolver() {
144
144
  };
145
145
  return data;
146
146
  }
147
+ function _express() {
148
+ const data = require("@teambit/express");
149
+ _express = function () {
150
+ return data;
151
+ };
152
+ return data;
153
+ }
147
154
  function _component2() {
148
155
  const data = require("@teambit/component.sources");
149
156
  _component2 = function () {
@@ -305,6 +312,20 @@ function _preBundleUtils() {
305
312
  };
306
313
  return data;
307
314
  }
315
+ function _generatePreview() {
316
+ const data = require("./generate-preview.cmd");
317
+ _generatePreview = function () {
318
+ return data;
319
+ };
320
+ return data;
321
+ }
322
+ function _servePreview() {
323
+ const data = require("./serve-preview.cmd");
324
+ _servePreview = function () {
325
+ return data;
326
+ };
327
+ return data;
328
+ }
308
329
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
309
330
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
310
331
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -338,7 +359,7 @@ class PreviewMain {
338
359
  /**
339
360
  * slot for preview definitions.
340
361
  */
341
- previewSlot, ui, cache, envs, componentAspect, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger, dependencyResolver) {
362
+ previewSlot, ui, cache, envs, componentAspect, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger, dependencyResolver, express) {
342
363
  this.harmony = harmony;
343
364
  this.previewSlot = previewSlot;
344
365
  this.ui = ui;
@@ -353,6 +374,8 @@ class PreviewMain {
353
374
  this.workspace = workspace;
354
375
  this.logger = logger;
355
376
  this.dependencyResolver = dependencyResolver;
377
+ this.express = express;
378
+ _defineProperty(this, "previewService", void 0);
356
379
  _defineProperty(this, "writeHash", new Map());
357
380
  _defineProperty(this, "timestamp", Date.now());
358
381
  _defineProperty(this, "executionRefs", new Map());
@@ -369,7 +392,8 @@ class PreviewMain {
369
392
 
370
393
  // add / remove / etc
371
394
  updater(executionRef);
372
- await this.updateLinkFiles(executionRef.currentComponents, executionRef.executionCtx);
395
+ const previews = this.previewSlot.values();
396
+ await this.updateLinkFiles(previews, executionRef.currentComponents, executionRef.executionCtx);
373
397
  return noopResult;
374
398
  });
375
399
  _defineProperty(this, "handleComponentRemoval", cId => {
@@ -465,6 +489,88 @@ class PreviewMain {
465
489
  const envComponent = await this.envs.getEnvComponent(component);
466
490
  return this.doesEnvUseNameParam(envComponent);
467
491
  }
492
+ async generateComponentPreview(componentPattern, name) {
493
+ const componentIds = componentPattern ? await this.workspace?.idsByPattern(componentPattern, true) : this.workspace?.listIds();
494
+ if (!componentIds) {
495
+ throw new (_bitError().BitError)(`unable to find components by the pattern: ${componentPattern}`);
496
+ }
497
+ const components = await this.workspace?.getMany(componentIds);
498
+ if (!components) {
499
+ throw new (_bitError().BitError)(`unable to find components by the pattern: ${componentPattern}`);
500
+ }
501
+ const envsRuntime = await this.envs.createEnvironment(components);
502
+ const previewResults = await envsRuntime.run(this.previewService, {
503
+ name
504
+ });
505
+ return previewResults;
506
+ }
507
+ async serveLocalPreview({
508
+ port
509
+ }) {
510
+ const app = this.express.createApp();
511
+ const getDir = async (comp, msg) => {
512
+ const componentPreviewIndex = await this.previewService.readComponentsPreview(msg);
513
+ const componentPreviewFolder = componentPreviewIndex[comp];
514
+ const envPreviewDir = this.previewService.getEnvLocalPreviewDir(msg, componentPreviewFolder);
515
+ if (!componentPreviewFolder) {
516
+ return undefined;
517
+ }
518
+ const publicDir = (0, _path().join)(envPreviewDir, 'public');
519
+ return publicDir;
520
+ };
521
+
522
+ // const dynamicRouteRegex = '/?[^/@]+(/[^~]*)?';
523
+ // readonly route = `/:componentId(${this.dynamicRouteRegex})/~aspect${this.registerRoute.route}`;
524
+ // app.use(`/:message/:componentId(${dynamicRouteRegex})`, async (req, res, next) => {
525
+
526
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
527
+ app.use(`/:message/:componentId(*)`, async (req, res, next) => {
528
+ // const comp = req.query.comp as string;
529
+ // const msg = req.query.message as string;
530
+ let comp = req.params.componentId;
531
+ const msg = req.params.message;
532
+ // Check if the folderName is provided
533
+ if (!comp) {
534
+ return res.status(400).send('Please specify a comp.');
535
+ }
536
+ if (!msg) {
537
+ return res.status(400).send('Please specify a message.');
538
+ }
539
+ if (comp.endsWith('/')) {
540
+ comp = comp.slice(0, -1);
541
+ }
542
+ let filePath;
543
+ if (comp.endsWith('.js') || comp.endsWith('.css') || comp.endsWith('.map')) {
544
+ const splitted = comp.split('/');
545
+ filePath = splitted.pop();
546
+ comp = splitted.join('/');
547
+ }
548
+ const publicDir = await getDir(comp, msg);
549
+ if (!publicDir) {
550
+ return res.status(404).send('Folder not found.');
551
+ }
552
+ if (filePath) {
553
+ const file = (0, _path().join)(publicDir, filePath);
554
+ if (!(0, _fsExtra().existsSync)(file)) {
555
+ return res.status(404).send('File not found.');
556
+ }
557
+ return res.sendFile(file);
558
+ }
559
+
560
+ // Serve files from the specified folder
561
+ this.express.static(publicDir)(req, res, next);
562
+ });
563
+ const server = await app.listen(port);
564
+ return new Promise((resolve, reject) => {
565
+ server.on('error', err => {
566
+ reject(err);
567
+ });
568
+ server.on('listening', () => {
569
+ this.logger.consoleSuccess(`Bit preview server is listening on port ${port}`);
570
+ resolve(port);
571
+ });
572
+ });
573
+ }
468
574
 
469
575
  /**
470
576
  * Calculate preview data on component load
@@ -814,7 +920,8 @@ class PreviewMain {
814
920
  this.executionRefs.set(ctxId, new (_executionRef().ExecutionRef)(context));
815
921
  });
816
922
  const previewRuntime = await this.writePreviewEntry(context);
817
- const linkFiles = await this.updateLinkFiles(context.components, context);
923
+ const previews = this.previewSlot.values();
924
+ const linkFiles = await this.updateLinkFiles(previews, context.components, context);
818
925
  return [...linkFiles, previewRuntime];
819
926
  }
820
927
  async writePreviewEntry(context, aspectsIdsToNotFilterOut = []) {
@@ -850,8 +957,7 @@ class PreviewMain {
850
957
  const previewRuntime = await (0, _preBundle().generateBundlePreviewEntry)(name, bundlePath, this.harmony.config.toObject());
851
958
  return previewRuntime;
852
959
  }
853
- updateLinkFiles(components = [], context) {
854
- const previews = this.previewSlot.values();
960
+ updateLinkFiles(previews, components = [], context) {
855
961
  const paths = previews.map(async previewDef => {
856
962
  const defaultTemplatePath = await previewDef.renderTemplatePathByEnv?.(context.env);
857
963
  const visitedEnvs = new Set();
@@ -937,7 +1043,7 @@ class PreviewMain {
937
1043
  return filtered;
938
1044
  }
939
1045
  getDefaultStrategies() {
940
- return [new (_strategies().EnvBundlingStrategy)(this, this.pkg, this.dependencyResolver), new (_strategies().ComponentBundlingStrategy)(this, this.pkg, this.dependencyResolver, this.logger)];
1046
+ return [new (_strategies().EnvBundlingStrategy)(this, this.pkg, this.dependencyResolver), new (_strategies().ComponentBundlingStrategy)(this, this.dependencyResolver, this.logger)];
941
1047
  }
942
1048
  getEnvPreviewConfig(env) {
943
1049
  const config = env?.getPreviewConfig && typeof env?.getPreviewConfig === 'function' ? env?.getPreviewConfig() : {};
@@ -976,10 +1082,11 @@ class PreviewMain {
976
1082
  }
977
1083
  static async provider(
978
1084
  // eslint-disable-next-line max-len
979
- [bundler, builder, componentExtension, uiMain, cache, envs, workspace, pkg, pubsub, aspectLoader, loggerMain, dependencyResolver, graphql, watcher, scope], config, [previewSlot, bundlingStrategySlot], harmony) {
1085
+ [bundler, builder, componentExtension, uiMain, cache, envs, workspace, pkg, pubsub, aspectLoader, loggerMain, dependencyResolver, graphql, watcher, scope, cli, express], config, [previewSlot, bundlingStrategySlot], harmony) {
980
1086
  const logger = loggerMain.createLogger(_preview().PreviewAspect.id);
981
1087
  // app.registerApp(new PreviewApp());
982
- const preview = new PreviewMain(harmony, previewSlot, uiMain, cache, envs, componentExtension, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger, dependencyResolver);
1088
+ const preview = new PreviewMain(harmony, previewSlot, uiMain, cache, envs, componentExtension, pkg, aspectLoader, config, bundlingStrategySlot, builder, workspace, logger, dependencyResolver, express);
1089
+ cli.register(new (_generatePreview().GeneratePreviewCmd)(preview), new (_servePreview().ServePreviewCmd)(preview));
983
1090
  if (workspace) uiMain.registerStartPlugin(new (_preview4().PreviewStartPlugin)(workspace, bundler, uiMain, pubsub, logger, watcher));
984
1091
  componentExtension.registerRoute([new (_preview2().PreviewRoute)(preview, logger), new (_componentPreview().ComponentPreviewRoute)(preview, logger),
985
1092
  // @ts-ignore
@@ -999,7 +1106,9 @@ class PreviewMain {
999
1106
  if (scope) {
1000
1107
  scope.registerOnCompAspectReCalc(c => preview.calcPreviewData(c));
1001
1108
  }
1002
- envs.registerService(new (_preview6().PreviewService)());
1109
+ const previewService = new (_preview6().PreviewService)(preview, logger, dependencyResolver, scope);
1110
+ envs.registerService(previewService);
1111
+ preview.previewService = previewService;
1003
1112
  graphql.register((0, _preview5().previewSchema)(preview));
1004
1113
  return preview;
1005
1114
  }
@@ -1007,7 +1116,7 @@ class PreviewMain {
1007
1116
  exports.PreviewMain = PreviewMain;
1008
1117
  _defineProperty(PreviewMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
1009
1118
  _defineProperty(PreviewMain, "runtime", _cli().MainRuntime);
1010
- _defineProperty(PreviewMain, "dependencies", [_bundler().BundlerAspect, _builder().BuilderAspect, _component().ComponentAspect, _ui().UIAspect, _cache().CacheAspect, _envs().EnvsAspect, _workspace().WorkspaceAspect, _pkg().PkgAspect, _pubsub().PubsubAspect, _aspectLoader().AspectLoaderAspect, _logger().LoggerAspect, _dependencyResolver().DependencyResolverAspect, _graphql().GraphqlAspect, _watcher().WatcherAspect, _scope().ScopeAspect]);
1119
+ _defineProperty(PreviewMain, "dependencies", [_bundler().BundlerAspect, _builder().BuilderAspect, _component().ComponentAspect, _ui().UIAspect, _cache().CacheAspect, _envs().EnvsAspect, _workspace().WorkspaceAspect, _pkg().PkgAspect, _pubsub().PubsubAspect, _aspectLoader().AspectLoaderAspect, _logger().LoggerAspect, _dependencyResolver().DependencyResolverAspect, _graphql().GraphqlAspect, _watcher().WatcherAspect, _scope().ScopeAspect, _cli().CLIAspect, _express().ExpressAspect]);
1011
1120
  _defineProperty(PreviewMain, "defaultConfig", {
1012
1121
  disabled: false,
1013
1122
  onlyOverview: false