@teambit/preview 1.0.1231 → 1.0.1233
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/ui-bundle/asset-manifest.json +3 -3
- package/artifacts/ui-bundle/static/js/{main.71c70d31.cjs → main.99881697.cjs} +1 -1
- package/dist/{preview-1792168769587.js → preview-1792424544587.js} +2 -2
- package/dist/preview.preview.runtime.d.ts +5 -0
- package/dist/preview.preview.runtime.js +10 -0
- package/dist/preview.preview.runtime.js.map +1 -1
- package/package.json +14 -14
- package/preview.preview.runtime.tsx +11 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.1233/dist/preview.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.1233/dist/preview.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
|
@@ -35,6 +35,11 @@ export declare class PreviewPreview {
|
|
|
35
35
|
private rerenderOnPreviewModulesUpdated;
|
|
36
36
|
private registerClickPubSub;
|
|
37
37
|
private isDev;
|
|
38
|
+
/**
|
|
39
|
+
* reports the preview size to the parent. render() runs on every hash change, so it's replaced each time.
|
|
40
|
+
*/
|
|
41
|
+
private sizeObserver?;
|
|
42
|
+
private debouncedSizeReport?;
|
|
38
43
|
private isReady;
|
|
39
44
|
private _setupPromise?;
|
|
40
45
|
setup: () => Promise<void>;
|
|
@@ -129,6 +129,11 @@ class PreviewPreview {
|
|
|
129
129
|
});
|
|
130
130
|
}, 30));
|
|
131
131
|
_defineProperty(this, "isDev", false);
|
|
132
|
+
/**
|
|
133
|
+
* reports the preview size to the parent. render() runs on every hash change, so it's replaced each time.
|
|
134
|
+
*/
|
|
135
|
+
_defineProperty(this, "sizeObserver", void 0);
|
|
136
|
+
_defineProperty(this, "debouncedSizeReport", void 0);
|
|
132
137
|
_defineProperty(this, "_setupPromise", void 0);
|
|
133
138
|
_defineProperty(this, "setup", () => {
|
|
134
139
|
if (this.isReady()) return Promise.resolve();
|
|
@@ -265,6 +270,9 @@ class PreviewPreview {
|
|
|
265
270
|
height
|
|
266
271
|
}));
|
|
267
272
|
};
|
|
273
|
+
// drop the observer of the previous render, otherwise every render adds another report per resize
|
|
274
|
+
this.sizeObserver?.disconnect();
|
|
275
|
+
this.debouncedSizeReport?.cancel();
|
|
268
276
|
// publish right away so the parent gets the first real size as soon as possible
|
|
269
277
|
publish();
|
|
270
278
|
// publish dimension changes when the content size actually changes
|
|
@@ -273,6 +281,8 @@ class PreviewPreview {
|
|
|
273
281
|
resizedObserver.observe(window.document.documentElement);
|
|
274
282
|
const root = window.document.getElementById('root');
|
|
275
283
|
if (root) resizedObserver.observe(root);
|
|
284
|
+
this.sizeObserver = resizedObserver;
|
|
285
|
+
this.debouncedSizeReport = debounced;
|
|
276
286
|
}
|
|
277
287
|
async getPreviewModule(previewName, id) {
|
|
278
288
|
const compShortId = id.fullName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_pubsub","data","require","_harmony","_componentId","_crossFetch","_interopRequireDefault","_lodash","_exceptions","_preview","_renderingContext","_fetchComponentAspects","_lruCache","_previewModules","_htmlUtils","_sizeEvent","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","PreviewPreview","constructor","pubsub","previewSlot","renderingContextSlot","debounce","isReady","render","catch","err","console","error","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","onlyOverview","getParam","includes","filter","module","isObject","keysWithoutDefault","keys","key","defaultKeys","intersection","length","componentAspects","getComponentAspects","toString","previewModule","getRenderingContext","reportSize","setViewport","setFullScreen","LRUCache","max","ttl","cached","componentAspectsCache","get","result","fetchComponentAspects","set","registerClickPubSub","addEventListener","timestamp","Date","now","clickEvent","assign","pub","PreviewAspect","id","ClickInsideAnIframeEvent","has","includedReady","every","included","fullScreen","root","getElementById","height","viewPort","maxWidth","parent","measure","documentElement","prevHeight","scrollHeight","scrollWidth","publish","SizeEvent","debounced","resizedObserver","ResizeObserver","observe","compShortId","relevantModel","Error","componentMap","componentPreviews","fetchComponentPreview","loadComponentPreviews","component","metadata","modulesMap","componentMapMetadata","previewFile","allFiles","fetchComponentPreviewFiles","file","endsWith","addComponentFileElement","loadPreviewScript","previewBundleFileName","addComponentFileScriptElement","addComponentFileLinkElement","previewAssetsRoute","stringId","url","res","crossFetch","status","parsed","json","isBundledWithEnv","files","previewRoute","src","loadScript","href","loadLink","globalId","toStringWithoutVersion","componentPreview","registerPreview","register","aspectsFilter","RenderingContext","registerRenderContext","renderContext","previews","values","defaultOne","find","previewCandidate","param","params","URLSearchParams","withoutHash","location","hash","substring","after","split","before","ComponentID","tryFromString","provider","config","rerenderOnPreviewModulesUpdated","exports","PreviewRuntime","PubsubAspect","Slot","withType","addRuntime"],"sources":["preview.preview.runtime.tsx"],"sourcesContent":["import type { PubsubPreview } from '@teambit/pubsub';\nimport { PubsubAspect, ClickInsideAnIframeEvent } from '@teambit/pubsub';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport { ComponentID } from '@teambit/component-id';\n// Using cross-fetch here instead of @pnpm/node-fetch\n// which is crucial in this context as preview operates from the frontend where proxy and CA cert handling are not required\n// Reverting to cross-fetch restores correct handling of relative URLs, ensuring that previews render correctly\nimport crossFetch from 'cross-fetch';\nimport { debounce, intersection, isObject } from 'lodash';\n\nimport { PreviewNotFound } from './exceptions';\nimport type { PreviewType } from './preview-type';\nimport { PreviewAspect, PreviewRuntime } from './preview.aspect';\nimport type { ModuleFile, PreviewModule } from './types/preview-module';\nimport { RenderingContext } from './rendering-context';\nimport { fetchComponentAspects } from './gql/fetch-component-aspects';\nimport { LRUCache } from 'lru-cache';\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 rerenderOnPreviewModulesUpdated = debounce(() => {\n if (!this.isReady()) return;\n void this.render().catch((err) => {\n // eslint-disable-next-line no-console\n console.error('[preview.preview] failed re-rendering after preview module update', err);\n });\n }, 30);\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 const query = this.getQuery();\n const onlyOverview = this.getParam(query, 'onlyOverview');\n\n const includes =\n onlyOverview === 'true'\n ? []\n : includesAll\n .filter((module) => !!module)\n .map((module) => {\n if (!module.default || !isObject(module.default)) return module;\n // This aims to handle use cases where we have package.json with type:\"module\" in the root\n // in that case sometime we might get the props both under default and in the object root\n const keysWithoutDefault = Object.keys(module).filter((key) => key !== 'default');\n const defaultKeys = Object.keys(module.default);\n if (intersection(keysWithoutDefault, defaultKeys).length === defaultKeys.length) return module.default;\n return module;\n });\n\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 this.setFullScreen();\n return render;\n };\n\n setFullScreen() {\n const query = this.getQuery();\n const fullScreen = this.getParam(query, 'fullscreen');\n\n if (!fullScreen) return;\n\n const root = window.document.getElementById('root');\n\n if (root) {\n root.style.height = '100vh';\n }\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 // In Preview, the <body> is always exactly as tall as the iframe viewport, not as tall as the content.\n // by measuring the scrollHeight of the root element, we can get the height of the content.\n const measure = () => {\n const root = window.document.getElementById('root') ?? window.document.documentElement;\n const prevHeight = root.style.height;\n // set height auto to make the browser calculate the natural block formatting height\n // scrollHeight of an element that has height: 100% reports the viewport height, not the content height\n root.style.height = 'auto';\n const height = root.scrollHeight;\n const width = root.scrollWidth;\n // restore the previous height so nothing visually changes within the same tick\n root.style.height = prevHeight;\n return { width, height };\n };\n const publish = () => {\n const { width, height } = measure();\n this.pubsub.pub(PreviewAspect.id, new SizeEvent({ width, height }));\n };\n // publish right away so the parent gets the first real size as soon as possible\n publish();\n // publish dimension changes when the content size actually changes\n const debounced = debounce(publish, 100);\n const resizedObserver = new ResizeObserver(debounced);\n resizedObserver.observe(window.document.documentElement);\n const root = window.document.getElementById('root');\n if (root) resizedObserver.observe(root);\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 // Use LRU cache directly with TTL for component aspects\n private componentAspectsCache = new LRUCache<string, any>({\n max: 100,\n ttl: 12 * 60 * 60 * 1000, // 12 hours\n });\n\n private getComponentAspects = async (componentId: string) => {\n const cached = this.componentAspectsCache.get(componentId);\n if (cached) {\n return cached;\n }\n\n const result = await fetchComponentAspects(componentId);\n this.componentAspectsCache.set(componentId, result);\n return result;\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('bit-preview-modules-updated', () => {\n preview.rerenderOnPreviewModulesUpdated();\n });\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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_pubsub","data","require","_harmony","_componentId","_crossFetch","_interopRequireDefault","_lodash","_exceptions","_preview","_renderingContext","_fetchComponentAspects","_lruCache","_previewModules","_htmlUtils","_sizeEvent","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","PreviewPreview","constructor","pubsub","previewSlot","renderingContextSlot","debounce","isReady","render","catch","err","console","error","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","onlyOverview","getParam","includes","filter","module","isObject","keysWithoutDefault","keys","key","defaultKeys","intersection","length","componentAspects","getComponentAspects","toString","previewModule","getRenderingContext","reportSize","setViewport","setFullScreen","LRUCache","max","ttl","cached","componentAspectsCache","get","result","fetchComponentAspects","set","registerClickPubSub","addEventListener","timestamp","Date","now","clickEvent","assign","pub","PreviewAspect","id","ClickInsideAnIframeEvent","has","includedReady","every","included","fullScreen","root","getElementById","height","viewPort","maxWidth","parent","measure","documentElement","prevHeight","scrollHeight","scrollWidth","publish","SizeEvent","sizeObserver","disconnect","debouncedSizeReport","cancel","debounced","resizedObserver","ResizeObserver","observe","compShortId","relevantModel","Error","componentMap","componentPreviews","fetchComponentPreview","loadComponentPreviews","component","metadata","modulesMap","componentMapMetadata","previewFile","allFiles","fetchComponentPreviewFiles","file","endsWith","addComponentFileElement","loadPreviewScript","previewBundleFileName","addComponentFileScriptElement","addComponentFileLinkElement","previewAssetsRoute","stringId","url","res","crossFetch","status","parsed","json","isBundledWithEnv","files","previewRoute","src","loadScript","href","loadLink","globalId","toStringWithoutVersion","componentPreview","registerPreview","register","aspectsFilter","RenderingContext","registerRenderContext","renderContext","previews","values","defaultOne","find","previewCandidate","param","params","URLSearchParams","withoutHash","location","hash","substring","after","split","before","ComponentID","tryFromString","provider","config","rerenderOnPreviewModulesUpdated","exports","PreviewRuntime","PubsubAspect","Slot","withType","addRuntime"],"sources":["preview.preview.runtime.tsx"],"sourcesContent":["import type { PubsubPreview } from '@teambit/pubsub';\nimport { PubsubAspect, ClickInsideAnIframeEvent } from '@teambit/pubsub';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport { ComponentID } from '@teambit/component-id';\n// Using cross-fetch here instead of @pnpm/node-fetch\n// which is crucial in this context as preview operates from the frontend where proxy and CA cert handling are not required\n// Reverting to cross-fetch restores correct handling of relative URLs, ensuring that previews render correctly\nimport crossFetch from 'cross-fetch';\nimport { debounce, intersection, isObject } from 'lodash';\n\nimport { PreviewNotFound } from './exceptions';\nimport type { PreviewType } from './preview-type';\nimport { PreviewAspect, PreviewRuntime } from './preview.aspect';\nimport type { ModuleFile, PreviewModule } from './types/preview-module';\nimport { RenderingContext } from './rendering-context';\nimport { fetchComponentAspects } from './gql/fetch-component-aspects';\nimport { LRUCache } from 'lru-cache';\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 rerenderOnPreviewModulesUpdated = debounce(() => {\n if (!this.isReady()) return;\n void this.render().catch((err) => {\n // eslint-disable-next-line no-console\n console.error('[preview.preview] failed re-rendering after preview module update', err);\n });\n }, 30);\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 /**\n * reports the preview size to the parent. render() runs on every hash change, so it's replaced each time.\n */\n private sizeObserver?: ResizeObserver;\n private debouncedSizeReport?: ReturnType<typeof debounce>;\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 const query = this.getQuery();\n const onlyOverview = this.getParam(query, 'onlyOverview');\n\n const includes =\n onlyOverview === 'true'\n ? []\n : includesAll\n .filter((module) => !!module)\n .map((module) => {\n if (!module.default || !isObject(module.default)) return module;\n // This aims to handle use cases where we have package.json with type:\"module\" in the root\n // in that case sometime we might get the props both under default and in the object root\n const keysWithoutDefault = Object.keys(module).filter((key) => key !== 'default');\n const defaultKeys = Object.keys(module.default);\n if (intersection(keysWithoutDefault, defaultKeys).length === defaultKeys.length) return module.default;\n return module;\n });\n\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 this.setFullScreen();\n return render;\n };\n\n setFullScreen() {\n const query = this.getQuery();\n const fullScreen = this.getParam(query, 'fullscreen');\n\n if (!fullScreen) return;\n\n const root = window.document.getElementById('root');\n\n if (root) {\n root.style.height = '100vh';\n }\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 // In Preview, the <body> is always exactly as tall as the iframe viewport, not as tall as the content.\n // by measuring the scrollHeight of the root element, we can get the height of the content.\n const measure = () => {\n const root = window.document.getElementById('root') ?? window.document.documentElement;\n const prevHeight = root.style.height;\n // set height auto to make the browser calculate the natural block formatting height\n // scrollHeight of an element that has height: 100% reports the viewport height, not the content height\n root.style.height = 'auto';\n const height = root.scrollHeight;\n const width = root.scrollWidth;\n // restore the previous height so nothing visually changes within the same tick\n root.style.height = prevHeight;\n return { width, height };\n };\n const publish = () => {\n const { width, height } = measure();\n this.pubsub.pub(PreviewAspect.id, new SizeEvent({ width, height }));\n };\n // drop the observer of the previous render, otherwise every render adds another report per resize\n this.sizeObserver?.disconnect();\n this.debouncedSizeReport?.cancel();\n // publish right away so the parent gets the first real size as soon as possible\n publish();\n // publish dimension changes when the content size actually changes\n const debounced = debounce(publish, 100);\n const resizedObserver = new ResizeObserver(debounced);\n resizedObserver.observe(window.document.documentElement);\n const root = window.document.getElementById('root');\n if (root) resizedObserver.observe(root);\n this.sizeObserver = resizedObserver;\n this.debouncedSizeReport = debounced;\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 // Use LRU cache directly with TTL for component aspects\n private componentAspectsCache = new LRUCache<string, any>({\n max: 100,\n ttl: 12 * 60 * 60 * 1000, // 12 hours\n });\n\n private getComponentAspects = async (componentId: string) => {\n const cached = this.componentAspectsCache.get(componentId);\n if (cached) {\n return cached;\n }\n\n const result = await fetchComponentAspects(componentId);\n this.componentAspectsCache.set(componentId, result);\n return result;\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('bit-preview-modules-updated', () => {\n preview.rerenderOnPreviewModulesUpdated();\n });\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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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/preview",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1233",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/preview/preview",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.preview",
|
|
8
8
|
"name": "preview",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.1233"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"mime": "2.5.2",
|
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
"@teambit/express": "0.0.1505",
|
|
33
33
|
"@teambit/logger": "0.0.1499",
|
|
34
34
|
"@teambit/ui-foundation.ui.pages.static-error": "0.0.116",
|
|
35
|
+
"@teambit/builder": "1.0.1232",
|
|
36
|
+
"@teambit/bundler": "1.0.1232",
|
|
35
37
|
"@teambit/component": "1.0.1225",
|
|
36
|
-
"@teambit/preview.ui.component-preview": "1.0.43",
|
|
37
38
|
"@teambit/aspect-loader": "1.0.1225",
|
|
38
39
|
"@teambit/dependency-resolver": "1.0.1225",
|
|
39
40
|
"@teambit/envs": "1.0.1225",
|
|
@@ -41,9 +42,11 @@
|
|
|
41
42
|
"@teambit/toolbox.path.to-windows-compatible-path": "0.0.518",
|
|
42
43
|
"@teambit/cli": "0.0.1415",
|
|
43
44
|
"@teambit/legacy.constants": "0.0.49",
|
|
44
|
-
"@teambit/pubsub": "1.0.
|
|
45
|
+
"@teambit/pubsub": "1.0.1214",
|
|
45
46
|
"@teambit/harmony": "0.4.12",
|
|
46
47
|
"@teambit/toolbox.crypto.sha1": "0.0.24",
|
|
48
|
+
"@teambit/ui": "1.0.1232",
|
|
49
|
+
"@teambit/isolator": "1.0.1232",
|
|
47
50
|
"@teambit/harmony.modules.harmony-root-generator": "0.0.49",
|
|
48
51
|
"@teambit/legacy.logger": "0.0.68",
|
|
49
52
|
"@teambit/component.sources": "0.0.236",
|
|
@@ -54,22 +57,19 @@
|
|
|
54
57
|
"@teambit/cache": "0.0.1499",
|
|
55
58
|
"@teambit/graphql": "1.0.1206",
|
|
56
59
|
"@teambit/harmony.modules.feature-toggle": "0.0.63",
|
|
60
|
+
"@teambit/pkg": "1.0.1232",
|
|
61
|
+
"@teambit/scope": "1.0.1232",
|
|
62
|
+
"@teambit/watcher": "1.0.1232",
|
|
63
|
+
"@teambit/workspace": "1.0.1232",
|
|
64
|
+
"@teambit/compiler": "1.0.1232",
|
|
57
65
|
"@teambit/preview.cli.dev-server-events-listener": "0.0.1",
|
|
58
66
|
"@teambit/preview.cli.webpack-events-listener": "0.0.194",
|
|
59
67
|
"@teambit/lanes.entities.lane-diff": "0.0.206",
|
|
60
68
|
"@teambit/mdx.modules.mdx-v3-options": "0.0.3",
|
|
61
69
|
"@teambit/rspack.modules.generate-asset-manifest": "0.0.21",
|
|
62
70
|
"@teambit/webpack.modules.exclude-node-modules-js": "0.0.1",
|
|
63
|
-
"@teambit/
|
|
64
|
-
"@teambit/
|
|
65
|
-
"@teambit/ui": "1.0.1231",
|
|
66
|
-
"@teambit/isolator": "1.0.1231",
|
|
67
|
-
"@teambit/pkg": "1.0.1231",
|
|
68
|
-
"@teambit/scope": "1.0.1231",
|
|
69
|
-
"@teambit/watcher": "1.0.1231",
|
|
70
|
-
"@teambit/workspace": "1.0.1231",
|
|
71
|
-
"@teambit/compiler": "1.0.1231",
|
|
72
|
-
"@teambit/webpack": "1.0.1231"
|
|
71
|
+
"@teambit/webpack": "1.0.1232",
|
|
72
|
+
"@teambit/preview.ui.component-preview": "1.0.45"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/mime": "2.0.3",
|
|
@@ -64,6 +64,12 @@ export class PreviewPreview {
|
|
|
64
64
|
|
|
65
65
|
private isDev = false;
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* reports the preview size to the parent. render() runs on every hash change, so it's replaced each time.
|
|
69
|
+
*/
|
|
70
|
+
private sizeObserver?: ResizeObserver;
|
|
71
|
+
private debouncedSizeReport?: ReturnType<typeof debounce>;
|
|
72
|
+
|
|
67
73
|
private isReady() {
|
|
68
74
|
const { previewName } = this.getLocation();
|
|
69
75
|
const name = previewName || this.getDefault();
|
|
@@ -195,6 +201,9 @@ export class PreviewPreview {
|
|
|
195
201
|
const { width, height } = measure();
|
|
196
202
|
this.pubsub.pub(PreviewAspect.id, new SizeEvent({ width, height }));
|
|
197
203
|
};
|
|
204
|
+
// drop the observer of the previous render, otherwise every render adds another report per resize
|
|
205
|
+
this.sizeObserver?.disconnect();
|
|
206
|
+
this.debouncedSizeReport?.cancel();
|
|
198
207
|
// publish right away so the parent gets the first real size as soon as possible
|
|
199
208
|
publish();
|
|
200
209
|
// publish dimension changes when the content size actually changes
|
|
@@ -203,6 +212,8 @@ export class PreviewPreview {
|
|
|
203
212
|
resizedObserver.observe(window.document.documentElement);
|
|
204
213
|
const root = window.document.getElementById('root');
|
|
205
214
|
if (root) resizedObserver.observe(root);
|
|
215
|
+
this.sizeObserver = resizedObserver;
|
|
216
|
+
this.debouncedSizeReport = debounced;
|
|
206
217
|
}
|
|
207
218
|
|
|
208
219
|
async getPreviewModule(previewName: string, id: ComponentID): Promise<PreviewModule> {
|