@teambit/preview 1.0.1058 → 1.0.1060
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/dist/generate-link.js +28 -1
- package/dist/generate-link.js.map +1 -1
- package/dist/generate-link.spec.d.ts +1 -0
- package/dist/generate-link.spec.js +112 -0
- package/dist/generate-link.spec.js.map +1 -0
- package/dist/{preview-1784136545771.js → preview-1784148848422.js} +2 -2
- package/package.json +19 -19
package/dist/generate-link.js
CHANGED
|
@@ -199,7 +199,7 @@ linkModules('${prefix}', {
|
|
|
199
199
|
},
|
|
200
200
|
isSplitComponentBundle: ${isSplitComponentBundle},
|
|
201
201
|
componentMap: {
|
|
202
|
-
${componentLinks
|
|
202
|
+
${generateComponentMapEntries(componentLinks)}
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
205
|
}
|
|
@@ -210,6 +210,33 @@ ${runtimeBootstrap}
|
|
|
210
210
|
function moduleVarName(componentIdx, fileIdx) {
|
|
211
211
|
return `file_${componentIdx}_${fileIdx}`;
|
|
212
212
|
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The componentMap is keyed by the component fullName, which carries no scope.
|
|
216
|
+
* Components from different scopes sharing a fullName (e.g. several scopes each
|
|
217
|
+
* exposing a "readme" component, all served by one deduped dev server) would
|
|
218
|
+
* emit duplicate object keys — the last entry silently wins, and since
|
|
219
|
+
* non-active components resolve to a null-rendering Placeholder (see
|
|
220
|
+
* getComponentImports), every other same-named component's preview renders
|
|
221
|
+
* blank with no error. For colliding names, select the active component's
|
|
222
|
+
* modules at runtime via __bitShouldSurfaceFor, falling back to the last entry
|
|
223
|
+
* (which preserves the previous behavior when no component id is active, e.g.
|
|
224
|
+
* in isolated builds).
|
|
225
|
+
*/
|
|
226
|
+
function generateComponentMapEntries(componentLinks = []) {
|
|
227
|
+
const byIdentifier = new Map();
|
|
228
|
+
componentLinks.forEach(cl => {
|
|
229
|
+
const links = byIdentifier.get(cl.componentIdentifier) || [];
|
|
230
|
+
links.push(cl);
|
|
231
|
+
byIdentifier.set(cl.componentIdentifier, links);
|
|
232
|
+
});
|
|
233
|
+
const moduleArr = cl => `[${cl.modules.map(m => m.varName).join(', ')}]`;
|
|
234
|
+
return Array.from(byIdentifier.entries()).map(([identifier, links]) => {
|
|
235
|
+
if (links.length === 1) return ` "${identifier}": ${moduleArr(links[0])}`;
|
|
236
|
+
const conditionals = links.map(cl => `__bitShouldSurfaceFor("${cl.componentIdString}") ? ${moduleArr(cl)} : `).join('');
|
|
237
|
+
return ` "${identifier}": ${conditionals}${moduleArr(links[links.length - 1])}`;
|
|
238
|
+
}).join(',\n');
|
|
239
|
+
}
|
|
213
240
|
function getEnvVarName(envId) {
|
|
214
241
|
const envNameFormatted = (0, _camelcase().default)(envId.replace('@', '').replace('.', '-').replace(/\//g, '-'));
|
|
215
242
|
const varName = `${envNameFormatted}MainModule`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_path","data","require","_fsExtra","_normalizePath","_interopRequireDefault","_objectHash","_camelcase","_toolboxPath","_mkTempDir","e","__esModule","default","previewDistDir","getPreviewDistDir","generateLink","prefix","componentMap","mainModulesMap","isSplitComponentBundle","tempPackageDir","workspacePath","useSource","componentLinks","toArray","map","component","modulePath","compIdx","componentIdString","id","toStringWithoutVersion","componentIdVersion","version","componentIdScope","scope","componentIdentifier","fullName","modules","path","pathIdx","varName","moduleVarName","resolveFrom","normalizePath","moduleLinks","Object","entries","envId","getEnvVarName","moduleImports","getModuleImports","acceptedDependencies","Array","from","Set","flatMap","link","module","toWebpackRequestId","tempFilePath","sourceModeBootstrap","JSON","stringify","runtimeBootstrap","contents","join","statement","getComponentImports","m","cl","componentIdx","fileIdx","envNameFormatted","camelcase","replace","filePath","normalizedWorkspacePath","normalizedFilePath","startsWith","relPath","relative","hash","objectHash","tempFileName","toWindowsCompatiblePath","tempFileContents","outputFileSync","moduleLink"],"sources":["generate-link.ts"],"sourcesContent":["import type { ComponentMap } from '@teambit/component';\nimport { join, relative } from 'path';\nimport { outputFileSync } from 'fs-extra';\nimport normalizePath from 'normalize-path';\nimport objectHash from 'object-hash';\nimport camelcase from 'camelcase';\nimport { toWindowsCompatiblePath } from '@teambit/toolbox.path.to-windows-compatible-path';\nimport { getPreviewDistDir } from './mk-temp-dir';\n\nconst previewDistDir = getPreviewDistDir();\n\nexport type MainModulesMap = {\n /**\n * Path to default module in case there is no specific module for the current environment.\n */\n default: string;\n [envId: string]: string;\n};\n\ntype ModuleLink = {\n envId: string;\n varName: string;\n resolveFrom: string;\n};\n\ntype ComponentLink = {\n componentIdString: string;\n componentIdVersion: string;\n componentIdScope: string;\n componentIdentifier: string;\n modules: {\n varName: string;\n resolveFrom: string;\n }[];\n};\n\n// :TODO refactor to building an AST and generate source code based on it.\nexport function generateLink(\n prefix: string,\n componentMap: ComponentMap<string[]>,\n mainModulesMap?: MainModulesMap,\n isSplitComponentBundle = false,\n tempPackageDir?: string,\n workspacePath?: string,\n useSource = false\n): string {\n const componentLinks: ComponentLink[] = componentMap.toArray().map(([component, modulePath], compIdx) => ({\n componentIdString: component.id.toStringWithoutVersion(),\n componentIdVersion: component.id.version,\n componentIdScope: component.id.scope,\n componentIdentifier: component.id.fullName,\n modules: modulePath.map((path, pathIdx) => ({\n varName: moduleVarName(compIdx, pathIdx),\n resolveFrom: normalizePath(path),\n })),\n }));\n\n const moduleLinks: ModuleLink[] = Object.entries(mainModulesMap || {}).map(([envId, path]) => {\n const resolveFrom = normalizePath(path);\n const varName = getEnvVarName(envId);\n return { envId, varName, resolveFrom };\n });\n const moduleImports = getModuleImports(moduleLinks, tempPackageDir);\n const acceptedDependencies = useSource\n ? Array.from(\n new Set([\n ...componentLinks.flatMap((link) =>\n link.modules.map((module) => toWebpackRequestId(module.resolveFrom, workspacePath))\n ),\n ...(moduleImports.tempFilePath ? [toWebpackRequestId(moduleImports.tempFilePath, workspacePath)] : []),\n ])\n )\n : [];\n\n const sourceModeBootstrap = `\nfunction __bitActivePreviewName() {\n try {\n const { hash } = window.location;\n if (!hash) return null;\n const [, query = \"\"] = hash.slice(1).split(\"?\");\n const params = new URLSearchParams(query);\n return params.get(\"preview\");\n } catch {\n return null;\n }\n}\n\nlet __bitInitialized = false;\nasync function __bitMaybeInitialize(force = false, shouldNotify = false) {\n if (__bitInitialized && !force) return;\n __bitInitialized = true;\n // Always call initializeModules() so linkModules runs for every preview\n // (e.g. 'compositions') — even ones that are not the URL's active preview.\n // This is required because included previews (like 'overview'.include = ['compositions'])\n // gate readiness on PREVIEW_MODULES containing every included preview name.\n // Expensive source imports are still filtered per-component via __bitShouldSurfaceFor.\n await initializeModules();\n if (shouldNotify) {\n // Only the active preview dispatches the update event so unrelated previews\n // don't cause extra rerenders during HMR.\n const activePreview = __bitActivePreviewName();\n if (activePreview === ${JSON.stringify(prefix)}) {\n window.dispatchEvent(\n new CustomEvent('bit-preview-modules-updated', {\n detail: { previewName: ${JSON.stringify(prefix)} },\n })\n );\n }\n }\n}\n\nconst __bitHot =\n import.meta.webpackHot\n || (typeof module !== 'undefined' && module.hot)\n || undefined;\n\nif (__bitHot) {\n __bitHot.accept(${JSON.stringify(acceptedDependencies)}, () => {\n __bitInitialized = false;\n void __bitMaybeInitialize(true, true);\n });\n __bitHot.dispose(() => {\n __bitInitialized = false;\n });\n}\n\n// Defer source-mode initialization until after webpack marks the current entry\n// chunk as loaded. Otherwise modules placed in the current entry chunk can be\n// resolved as a missing async chunk while the entry is still evaluating.\nqueueMicrotask(() => {\n void __bitMaybeInitialize();\n});\nwindow.addEventListener('hashchange', () => {\n void __bitMaybeInitialize();\n});\n`;\n\n const runtimeBootstrap = useSource\n ? sourceModeBootstrap\n : `\n(async function initializeModulesOnLoad() {\n await initializeModules();\n})();\n`;\n\n const contents = `import { linkModules } from '${normalizePath(join(previewDistDir, 'preview-modules.js'))}';\n\n// strip leading/trailing slashes from any id we compare\nfunction __bitNormalizeId(id) {\n if (!id) return \"\";\n return String(id).trim().replace(/^\\\\/+|\\\\/+$/g, \"\");\n}\n\nfunction __bitActiveComponentId() {\n try {\n const { hash } = window.location;\n if (!hash) return null;\n const [idPart] = hash.slice(1).split(\"?\");\n const id = __bitNormalizeId(idPart);\n const idWithoutVersion = id.split('@')[0];\n return idWithoutVersion || null;\n } catch {\n return null;\n }\n}\n\nconst __bitActiveId = __bitActiveComponentId();\n\nfunction __bitShouldSurfaceFor(componentId) {\n if (!__bitActiveId) return false;\n const act = __bitNormalizeId(__bitActiveId);\n const cmp = __bitNormalizeId(componentId);\n if (!act || !cmp) return false;\n if (act === cmp) return true;\n return false;\n}\n\n// Surface caught errors to the overlay without breaking fallback.\n// Only for the active component in this iframe.\nfunction __bitSurfaceToOverlay(err, componentId) {\n if (process.env.NODE_ENV === \"production\") return;\n if (!__bitShouldSurfaceFor(componentId)) return;\n const e = err instanceof Error ? err : new Error(String(err));\n const msg = (err && err.message) ? err.message : String(err);\n console.error('[preview][load:fail]', componentId, msg);\n setTimeout(() => {\n void Promise.reject(e);\n }, 0);\n}\n\n${moduleImports.statement}\nasync function initializeModules() {\n${getComponentImports(componentLinks)}\nlinkModules('${prefix}', {\n modulesMap: {\n ${moduleLinks.map((m) => `\"${m.envId}\": ${m.varName}`).join(',\\n ')}\n },\n isSplitComponentBundle: ${isSplitComponentBundle},\n componentMap: {\n${componentLinks\n .map((cl) => ` \"${cl.componentIdentifier}\": [${cl.modules.map((m) => m.varName).join(', ')}]`)\n .join(',\\n')}\n }\n});\n}\n${runtimeBootstrap}\n`;\n return contents;\n}\n\nfunction moduleVarName(componentIdx: number, fileIdx: number) {\n return `file_${componentIdx}_${fileIdx}`;\n}\n\nfunction getEnvVarName(envId: string) {\n const envNameFormatted = camelcase(envId.replace('@', '').replace('.', '-').replace(/\\//g, '-'));\n const varName = `${envNameFormatted}MainModule`;\n return varName;\n}\n\nfunction toWebpackRequestId(filePath: string, workspacePath?: string): string {\n if (!workspacePath) return filePath;\n const normalizedWorkspacePath = normalizePath(workspacePath);\n const normalizedFilePath = normalizePath(filePath);\n if (normalizedFilePath === normalizedWorkspacePath) return '.';\n if (\n normalizedFilePath.startsWith(`${normalizedWorkspacePath}/`) ||\n normalizedFilePath.startsWith(`${normalizedWorkspacePath}\\\\`)\n ) {\n const relPath = normalizePath(relative(workspacePath, filePath));\n return relPath.startsWith('.') ? relPath : `./${relPath}`;\n }\n return filePath;\n}\n\nfunction getModuleImports(\n moduleLinks: ModuleLink[] = [],\n tempPackageDir?: string\n): {\n statement: string;\n tempFilePath?: string;\n} {\n const hash = objectHash(moduleLinks);\n const tempFileName = `preview-modules-${hash}.mjs`;\n const tempFilePath = toWindowsCompatiblePath(join(tempPackageDir || previewDistDir, tempFileName));\n const tempFileContents = moduleLinks\n .map((module) => `export * as ${module.varName} from \"${module.resolveFrom}\";`)\n .join('\\n');\n outputFileSync(tempFilePath, tempFileContents);\n return {\n statement: `import {${moduleLinks.map((moduleLink) => moduleLink.varName).join(', ')}} from \"${normalizePath(\n tempFilePath\n )}\";`,\n tempFilePath: normalizePath(tempFilePath),\n };\n}\n\nfunction getComponentImports(componentLinks: ComponentLink[] = []): string {\n return componentLinks\n .flatMap((link) => {\n return link.modules.map((module) => {\n return `\n let ${module.varName};\n if (__bitShouldSurfaceFor(\"${link.componentIdString}\")) {\n try {\n ${module.varName} = await import(\"${module.resolveFrom}\");\n } \n catch (err) {\n __bitSurfaceToOverlay(err, \"${link.componentIdString}\");\n ${module.varName} = { \n default: function ErrorFallback() { return null; },\n __loadError: err \n };\n }\n } \n else {\n // Don't import non-active modules at all\n ${module.varName} = { default: function Placeholder() { return null; } };\n }`;\n });\n })\n .join('\\n');\n}\n"],"mappings":"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CA;AACA;AACA;AACA;AACA;AACA,4BAA4BC,IAAI,CAACC,SAAS,CAAC/C,MAAM,CAAC;AAClD;AACA;AACA,mCAAmC8C,IAAI,CAACC,SAAS,CAAC/C,MAAM,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB8C,IAAI,CAACC,SAAS,CAACX,oBAAoB,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;EAEC,MAAMY,gBAAgB,GAAG1C,SAAS,GAC9BuC,mBAAmB,GACnB;AACN;AACA;AACA;AACA,CAAC;EAEC,MAAMI,QAAQ,GAAG,gCAAgC,IAAArB,wBAAa,EAAC,IAAAsB,YAAI,EAACrD,cAAc,EAAE,oBAAoB,CAAC,CAAC;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEqC,aAAa,CAACiB,SAAS;AACzB;AACA,EAAEC,mBAAmB,CAAC7C,cAAc,CAAC;AACrC,eAAeP,MAAM;AACrB;AACA,MAAM6B,WAAW,CAACpB,GAAG,CAAE4C,CAAC,IAAK,IAAIA,CAAC,CAACrB,KAAK,MAAMqB,CAAC,CAAC5B,OAAO,EAAE,CAAC,CAACyB,IAAI,CAAC,SAAS,CAAC;AAC1E;AACA,4BAA4B/C,sBAAsB;AAClD;AACA,EAAEI,cAAc,CACbE,GAAG,CAAE6C,EAAE,IAAK,QAAQA,EAAE,CAAClC,mBAAmB,OAAOkC,EAAE,CAAChC,OAAO,CAACb,GAAG,CAAE4C,CAAC,IAAKA,CAAC,CAAC5B,OAAO,CAAC,CAACyB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAChGA,IAAI,CAAC,KAAK,CAAC;AACd;AACA;AACA;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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_path","data","require","_fsExtra","_normalizePath","_interopRequireDefault","_objectHash","_camelcase","_toolboxPath","_mkTempDir","e","__esModule","default","previewDistDir","getPreviewDistDir","generateLink","prefix","componentMap","mainModulesMap","isSplitComponentBundle","tempPackageDir","workspacePath","useSource","componentLinks","toArray","map","component","modulePath","compIdx","componentIdString","id","toStringWithoutVersion","componentIdVersion","version","componentIdScope","scope","componentIdentifier","fullName","modules","path","pathIdx","varName","moduleVarName","resolveFrom","normalizePath","moduleLinks","Object","entries","envId","getEnvVarName","moduleImports","getModuleImports","acceptedDependencies","Array","from","Set","flatMap","link","module","toWebpackRequestId","tempFilePath","sourceModeBootstrap","JSON","stringify","runtimeBootstrap","contents","join","statement","getComponentImports","m","generateComponentMapEntries","componentIdx","fileIdx","byIdentifier","Map","forEach","cl","links","get","push","set","moduleArr","identifier","length","conditionals","envNameFormatted","camelcase","replace","filePath","normalizedWorkspacePath","normalizedFilePath","startsWith","relPath","relative","hash","objectHash","tempFileName","toWindowsCompatiblePath","tempFileContents","outputFileSync","moduleLink"],"sources":["generate-link.ts"],"sourcesContent":["import type { ComponentMap } from '@teambit/component';\nimport { join, relative } from 'path';\nimport { outputFileSync } from 'fs-extra';\nimport normalizePath from 'normalize-path';\nimport objectHash from 'object-hash';\nimport camelcase from 'camelcase';\nimport { toWindowsCompatiblePath } from '@teambit/toolbox.path.to-windows-compatible-path';\nimport { getPreviewDistDir } from './mk-temp-dir';\n\nconst previewDistDir = getPreviewDistDir();\n\nexport type MainModulesMap = {\n /**\n * Path to default module in case there is no specific module for the current environment.\n */\n default: string;\n [envId: string]: string;\n};\n\ntype ModuleLink = {\n envId: string;\n varName: string;\n resolveFrom: string;\n};\n\ntype ComponentLink = {\n componentIdString: string;\n componentIdVersion: string;\n componentIdScope: string;\n componentIdentifier: string;\n modules: {\n varName: string;\n resolveFrom: string;\n }[];\n};\n\n// :TODO refactor to building an AST and generate source code based on it.\nexport function generateLink(\n prefix: string,\n componentMap: ComponentMap<string[]>,\n mainModulesMap?: MainModulesMap,\n isSplitComponentBundle = false,\n tempPackageDir?: string,\n workspacePath?: string,\n useSource = false\n): string {\n const componentLinks: ComponentLink[] = componentMap.toArray().map(([component, modulePath], compIdx) => ({\n componentIdString: component.id.toStringWithoutVersion(),\n componentIdVersion: component.id.version,\n componentIdScope: component.id.scope,\n componentIdentifier: component.id.fullName,\n modules: modulePath.map((path, pathIdx) => ({\n varName: moduleVarName(compIdx, pathIdx),\n resolveFrom: normalizePath(path),\n })),\n }));\n\n const moduleLinks: ModuleLink[] = Object.entries(mainModulesMap || {}).map(([envId, path]) => {\n const resolveFrom = normalizePath(path);\n const varName = getEnvVarName(envId);\n return { envId, varName, resolveFrom };\n });\n const moduleImports = getModuleImports(moduleLinks, tempPackageDir);\n const acceptedDependencies = useSource\n ? Array.from(\n new Set([\n ...componentLinks.flatMap((link) =>\n link.modules.map((module) => toWebpackRequestId(module.resolveFrom, workspacePath))\n ),\n ...(moduleImports.tempFilePath ? [toWebpackRequestId(moduleImports.tempFilePath, workspacePath)] : []),\n ])\n )\n : [];\n\n const sourceModeBootstrap = `\nfunction __bitActivePreviewName() {\n try {\n const { hash } = window.location;\n if (!hash) return null;\n const [, query = \"\"] = hash.slice(1).split(\"?\");\n const params = new URLSearchParams(query);\n return params.get(\"preview\");\n } catch {\n return null;\n }\n}\n\nlet __bitInitialized = false;\nasync function __bitMaybeInitialize(force = false, shouldNotify = false) {\n if (__bitInitialized && !force) return;\n __bitInitialized = true;\n // Always call initializeModules() so linkModules runs for every preview\n // (e.g. 'compositions') — even ones that are not the URL's active preview.\n // This is required because included previews (like 'overview'.include = ['compositions'])\n // gate readiness on PREVIEW_MODULES containing every included preview name.\n // Expensive source imports are still filtered per-component via __bitShouldSurfaceFor.\n await initializeModules();\n if (shouldNotify) {\n // Only the active preview dispatches the update event so unrelated previews\n // don't cause extra rerenders during HMR.\n const activePreview = __bitActivePreviewName();\n if (activePreview === ${JSON.stringify(prefix)}) {\n window.dispatchEvent(\n new CustomEvent('bit-preview-modules-updated', {\n detail: { previewName: ${JSON.stringify(prefix)} },\n })\n );\n }\n }\n}\n\nconst __bitHot =\n import.meta.webpackHot\n || (typeof module !== 'undefined' && module.hot)\n || undefined;\n\nif (__bitHot) {\n __bitHot.accept(${JSON.stringify(acceptedDependencies)}, () => {\n __bitInitialized = false;\n void __bitMaybeInitialize(true, true);\n });\n __bitHot.dispose(() => {\n __bitInitialized = false;\n });\n}\n\n// Defer source-mode initialization until after webpack marks the current entry\n// chunk as loaded. Otherwise modules placed in the current entry chunk can be\n// resolved as a missing async chunk while the entry is still evaluating.\nqueueMicrotask(() => {\n void __bitMaybeInitialize();\n});\nwindow.addEventListener('hashchange', () => {\n void __bitMaybeInitialize();\n});\n`;\n\n const runtimeBootstrap = useSource\n ? sourceModeBootstrap\n : `\n(async function initializeModulesOnLoad() {\n await initializeModules();\n})();\n`;\n\n const contents = `import { linkModules } from '${normalizePath(join(previewDistDir, 'preview-modules.js'))}';\n\n// strip leading/trailing slashes from any id we compare\nfunction __bitNormalizeId(id) {\n if (!id) return \"\";\n return String(id).trim().replace(/^\\\\/+|\\\\/+$/g, \"\");\n}\n\nfunction __bitActiveComponentId() {\n try {\n const { hash } = window.location;\n if (!hash) return null;\n const [idPart] = hash.slice(1).split(\"?\");\n const id = __bitNormalizeId(idPart);\n const idWithoutVersion = id.split('@')[0];\n return idWithoutVersion || null;\n } catch {\n return null;\n }\n}\n\nconst __bitActiveId = __bitActiveComponentId();\n\nfunction __bitShouldSurfaceFor(componentId) {\n if (!__bitActiveId) return false;\n const act = __bitNormalizeId(__bitActiveId);\n const cmp = __bitNormalizeId(componentId);\n if (!act || !cmp) return false;\n if (act === cmp) return true;\n return false;\n}\n\n// Surface caught errors to the overlay without breaking fallback.\n// Only for the active component in this iframe.\nfunction __bitSurfaceToOverlay(err, componentId) {\n if (process.env.NODE_ENV === \"production\") return;\n if (!__bitShouldSurfaceFor(componentId)) return;\n const e = err instanceof Error ? err : new Error(String(err));\n const msg = (err && err.message) ? err.message : String(err);\n console.error('[preview][load:fail]', componentId, msg);\n setTimeout(() => {\n void Promise.reject(e);\n }, 0);\n}\n\n${moduleImports.statement}\nasync function initializeModules() {\n${getComponentImports(componentLinks)}\nlinkModules('${prefix}', {\n modulesMap: {\n ${moduleLinks.map((m) => `\"${m.envId}\": ${m.varName}`).join(',\\n ')}\n },\n isSplitComponentBundle: ${isSplitComponentBundle},\n componentMap: {\n${generateComponentMapEntries(componentLinks)}\n }\n});\n}\n${runtimeBootstrap}\n`;\n return contents;\n}\n\nfunction moduleVarName(componentIdx: number, fileIdx: number) {\n return `file_${componentIdx}_${fileIdx}`;\n}\n\n/**\n * The componentMap is keyed by the component fullName, which carries no scope.\n * Components from different scopes sharing a fullName (e.g. several scopes each\n * exposing a \"readme\" component, all served by one deduped dev server) would\n * emit duplicate object keys — the last entry silently wins, and since\n * non-active components resolve to a null-rendering Placeholder (see\n * getComponentImports), every other same-named component's preview renders\n * blank with no error. For colliding names, select the active component's\n * modules at runtime via __bitShouldSurfaceFor, falling back to the last entry\n * (which preserves the previous behavior when no component id is active, e.g.\n * in isolated builds).\n */\nfunction generateComponentMapEntries(componentLinks: ComponentLink[] = []): string {\n const byIdentifier = new Map<string, ComponentLink[]>();\n componentLinks.forEach((cl) => {\n const links = byIdentifier.get(cl.componentIdentifier) || [];\n links.push(cl);\n byIdentifier.set(cl.componentIdentifier, links);\n });\n const moduleArr = (cl: ComponentLink) => `[${cl.modules.map((m) => m.varName).join(', ')}]`;\n return Array.from(byIdentifier.entries())\n .map(([identifier, links]) => {\n if (links.length === 1) return ` \"${identifier}\": ${moduleArr(links[0])}`;\n const conditionals = links\n .map((cl) => `__bitShouldSurfaceFor(\"${cl.componentIdString}\") ? ${moduleArr(cl)} : `)\n .join('');\n return ` \"${identifier}\": ${conditionals}${moduleArr(links[links.length - 1])}`;\n })\n .join(',\\n');\n}\n\nfunction getEnvVarName(envId: string) {\n const envNameFormatted = camelcase(envId.replace('@', '').replace('.', '-').replace(/\\//g, '-'));\n const varName = `${envNameFormatted}MainModule`;\n return varName;\n}\n\nfunction toWebpackRequestId(filePath: string, workspacePath?: string): string {\n if (!workspacePath) return filePath;\n const normalizedWorkspacePath = normalizePath(workspacePath);\n const normalizedFilePath = normalizePath(filePath);\n if (normalizedFilePath === normalizedWorkspacePath) return '.';\n if (\n normalizedFilePath.startsWith(`${normalizedWorkspacePath}/`) ||\n normalizedFilePath.startsWith(`${normalizedWorkspacePath}\\\\`)\n ) {\n const relPath = normalizePath(relative(workspacePath, filePath));\n return relPath.startsWith('.') ? relPath : `./${relPath}`;\n }\n return filePath;\n}\n\nfunction getModuleImports(\n moduleLinks: ModuleLink[] = [],\n tempPackageDir?: string\n): {\n statement: string;\n tempFilePath?: string;\n} {\n const hash = objectHash(moduleLinks);\n const tempFileName = `preview-modules-${hash}.mjs`;\n const tempFilePath = toWindowsCompatiblePath(join(tempPackageDir || previewDistDir, tempFileName));\n const tempFileContents = moduleLinks\n .map((module) => `export * as ${module.varName} from \"${module.resolveFrom}\";`)\n .join('\\n');\n outputFileSync(tempFilePath, tempFileContents);\n return {\n statement: `import {${moduleLinks.map((moduleLink) => moduleLink.varName).join(', ')}} from \"${normalizePath(\n tempFilePath\n )}\";`,\n tempFilePath: normalizePath(tempFilePath),\n };\n}\n\nfunction getComponentImports(componentLinks: ComponentLink[] = []): string {\n return componentLinks\n .flatMap((link) => {\n return link.modules.map((module) => {\n return `\n let ${module.varName};\n if (__bitShouldSurfaceFor(\"${link.componentIdString}\")) {\n try {\n ${module.varName} = await import(\"${module.resolveFrom}\");\n } \n catch (err) {\n __bitSurfaceToOverlay(err, \"${link.componentIdString}\");\n ${module.varName} = { \n default: function ErrorFallback() { return null; },\n __loadError: err \n };\n }\n } \n else {\n // Don't import non-active modules at all\n ${module.varName} = { default: function Placeholder() { return null; } };\n }`;\n });\n })\n .join('\\n');\n}\n"],"mappings":";;;;;;AACA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,eAAA;EAAA,MAAAH,IAAA,GAAAI,sBAAA,CAAAH,OAAA;EAAAE,cAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,YAAA;EAAA,MAAAL,IAAA,GAAAI,sBAAA,CAAAH,OAAA;EAAAI,WAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,WAAA;EAAA,MAAAN,IAAA,GAAAI,sBAAA,CAAAH,OAAA;EAAAK,UAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,aAAA;EAAA,MAAAP,IAAA,GAAAC,OAAA;EAAAM,YAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,WAAA;EAAA,MAAAR,IAAA,GAAAC,OAAA;EAAAO,UAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAkD,SAAAI,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElD,MAAMG,cAAc,GAAG,IAAAC,8BAAiB,EAAC,CAAC;AA2B1C;AACO,SAASC,YAAYA,CAC1BC,MAAc,EACdC,YAAoC,EACpCC,cAA+B,EAC/BC,sBAAsB,GAAG,KAAK,EAC9BC,cAAuB,EACvBC,aAAsB,EACtBC,SAAS,GAAG,KAAK,EACT;EACR,MAAMC,cAA+B,GAAGN,YAAY,CAACO,OAAO,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAACC,SAAS,EAAEC,UAAU,CAAC,EAAEC,OAAO,MAAM;IACxGC,iBAAiB,EAAEH,SAAS,CAACI,EAAE,CAACC,sBAAsB,CAAC,CAAC;IACxDC,kBAAkB,EAAEN,SAAS,CAACI,EAAE,CAACG,OAAO;IACxCC,gBAAgB,EAAER,SAAS,CAACI,EAAE,CAACK,KAAK;IACpCC,mBAAmB,EAAEV,SAAS,CAACI,EAAE,CAACO,QAAQ;IAC1CC,OAAO,EAAEX,UAAU,CAACF,GAAG,CAAC,CAACc,IAAI,EAAEC,OAAO,MAAM;MAC1CC,OAAO,EAAEC,aAAa,CAACd,OAAO,EAAEY,OAAO,CAAC;MACxCG,WAAW,EAAE,IAAAC,wBAAa,EAACL,IAAI;IACjC,CAAC,CAAC;EACJ,CAAC,CAAC,CAAC;EAEH,MAAMM,WAAyB,GAAGC,MAAM,CAACC,OAAO,CAAC7B,cAAc,IAAI,CAAC,CAAC,CAAC,CAACO,GAAG,CAAC,CAAC,CAACuB,KAAK,EAAET,IAAI,CAAC,KAAK;IAC5F,MAAMI,WAAW,GAAG,IAAAC,wBAAa,EAACL,IAAI,CAAC;IACvC,MAAME,OAAO,GAAGQ,aAAa,CAACD,KAAK,CAAC;IACpC,OAAO;MAAEA,KAAK;MAAEP,OAAO;MAAEE;IAAY,CAAC;EACxC,CAAC,CAAC;EACF,MAAMO,aAAa,GAAGC,gBAAgB,CAACN,WAAW,EAAEzB,cAAc,CAAC;EACnE,MAAMgC,oBAAoB,GAAG9B,SAAS,GAClC+B,KAAK,CAACC,IAAI,CACR,IAAIC,GAAG,CAAC,CACN,GAAGhC,cAAc,CAACiC,OAAO,CAAEC,IAAI,IAC7BA,IAAI,CAACnB,OAAO,CAACb,GAAG,CAAEiC,MAAM,IAAKC,kBAAkB,CAACD,MAAM,CAACf,WAAW,EAAEtB,aAAa,CAAC,CACpF,CAAC,EACD,IAAI6B,aAAa,CAACU,YAAY,GAAG,CAACD,kBAAkB,CAACT,aAAa,CAACU,YAAY,EAAEvC,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC,CACvG,CACH,CAAC,GACD,EAAE;EAEN,MAAMwC,mBAAmB,GAAG;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4BC,IAAI,CAACC,SAAS,CAAC/C,MAAM,CAAC;AAClD;AACA;AACA,mCAAmC8C,IAAI,CAACC,SAAS,CAAC/C,MAAM,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB8C,IAAI,CAACC,SAAS,CAACX,oBAAoB,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;EAEC,MAAMY,gBAAgB,GAAG1C,SAAS,GAC9BuC,mBAAmB,GACnB;AACN;AACA;AACA;AACA,CAAC;EAEC,MAAMI,QAAQ,GAAG,gCAAgC,IAAArB,wBAAa,EAAC,IAAAsB,YAAI,EAACrD,cAAc,EAAE,oBAAoB,CAAC,CAAC;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEqC,aAAa,CAACiB,SAAS;AACzB;AACA,EAAEC,mBAAmB,CAAC7C,cAAc,CAAC;AACrC,eAAeP,MAAM;AACrB;AACA,MAAM6B,WAAW,CAACpB,GAAG,CAAE4C,CAAC,IAAK,IAAIA,CAAC,CAACrB,KAAK,MAAMqB,CAAC,CAAC5B,OAAO,EAAE,CAAC,CAACyB,IAAI,CAAC,SAAS,CAAC;AAC1E;AACA,4BAA4B/C,sBAAsB;AAClD;AACA,EAAEmD,2BAA2B,CAAC/C,cAAc,CAAC;AAC7C;AACA;AACA;AACA,EAAEyC,gBAAgB;AAClB,CAAC;EACC,OAAOC,QAAQ;AACjB;AAEA,SAASvB,aAAaA,CAAC6B,YAAoB,EAAEC,OAAe,EAAE;EAC5D,OAAO,QAAQD,YAAY,IAAIC,OAAO,EAAE;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AA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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _os() {
|
|
4
|
+
const data = _interopRequireDefault(require("os"));
|
|
5
|
+
_os = function () {
|
|
6
|
+
return data;
|
|
7
|
+
};
|
|
8
|
+
return data;
|
|
9
|
+
}
|
|
10
|
+
function _path() {
|
|
11
|
+
const data = require("path");
|
|
12
|
+
_path = function () {
|
|
13
|
+
return data;
|
|
14
|
+
};
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
function _fsExtra() {
|
|
18
|
+
const data = _interopRequireDefault(require("fs-extra"));
|
|
19
|
+
_fsExtra = function () {
|
|
20
|
+
return data;
|
|
21
|
+
};
|
|
22
|
+
return data;
|
|
23
|
+
}
|
|
24
|
+
function _chai() {
|
|
25
|
+
const data = require("chai");
|
|
26
|
+
_chai = function () {
|
|
27
|
+
return data;
|
|
28
|
+
};
|
|
29
|
+
return data;
|
|
30
|
+
}
|
|
31
|
+
function _generateLink() {
|
|
32
|
+
const data = require("./generate-link");
|
|
33
|
+
_generateLink = function () {
|
|
34
|
+
return data;
|
|
35
|
+
};
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
38
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
39
|
+
function mockComponentMap(ids) {
|
|
40
|
+
return {
|
|
41
|
+
toArray: () => ids.map(({
|
|
42
|
+
scope,
|
|
43
|
+
fullName
|
|
44
|
+
}) => [{
|
|
45
|
+
id: {
|
|
46
|
+
toStringWithoutVersion: () => `${scope}/${fullName}`,
|
|
47
|
+
version: '0.0.1',
|
|
48
|
+
scope,
|
|
49
|
+
fullName
|
|
50
|
+
}
|
|
51
|
+
}, [`/fake/${scope}/${fullName.replace(/\//g, '-')}.docs.mdx`]])
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
describe('generateLink', () => {
|
|
55
|
+
// generateLink writes a preview-modules-<hash>.mjs side file; without an
|
|
56
|
+
// explicit tempPackageDir it lands in previewDistDir, which can fall back to
|
|
57
|
+
// this component's own directory — keep test output in a throwaway temp dir.
|
|
58
|
+
let tmpDir;
|
|
59
|
+
before(() => {
|
|
60
|
+
tmpDir = _fsExtra().default.mkdtempSync((0, _path().join)(_os().default.tmpdir(), 'bit-generate-link-'));
|
|
61
|
+
});
|
|
62
|
+
after(() => {
|
|
63
|
+
_fsExtra().default.removeSync(tmpDir);
|
|
64
|
+
});
|
|
65
|
+
const genLink = ids => (0, _generateLink().generateLink)('overview', mockComponentMap(ids), undefined, false, tmpDir);
|
|
66
|
+
describe('componentMap entries', () => {
|
|
67
|
+
it('emits a plain entry for a fullName that appears once', () => {
|
|
68
|
+
const contents = genLink([{
|
|
69
|
+
scope: 'org.scope',
|
|
70
|
+
fullName: 'ui/button'
|
|
71
|
+
}]);
|
|
72
|
+
(0, _chai().expect)(contents).to.include('"ui/button": [file_0_0]');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// the componentMap is keyed by fullName, which carries no scope. components
|
|
76
|
+
// from different scopes sharing a fullName (served by one deduped dev server)
|
|
77
|
+
// used to emit duplicate object keys — the last entry silently won, and since
|
|
78
|
+
// non-active components resolve to a null-rendering Placeholder, every other
|
|
79
|
+
// same-named component's preview rendered blank without any error.
|
|
80
|
+
it('emits a single runtime-conditional entry when the same fullName exists in several scopes', () => {
|
|
81
|
+
const contents = genLink([{
|
|
82
|
+
scope: 'org.scope-a',
|
|
83
|
+
fullName: 'readme'
|
|
84
|
+
}, {
|
|
85
|
+
scope: 'org.scope-b',
|
|
86
|
+
fullName: 'readme'
|
|
87
|
+
}, {
|
|
88
|
+
scope: 'org.scope-c',
|
|
89
|
+
fullName: 'readme'
|
|
90
|
+
}]);
|
|
91
|
+
const entries = contents.match(/"readme":/g);
|
|
92
|
+
(0, _chai().expect)(entries).to.have.lengthOf(1);
|
|
93
|
+
(0, _chai().expect)(contents).to.include('"readme": __bitShouldSurfaceFor("org.scope-a/readme") ? [file_0_0] : ' + '__bitShouldSurfaceFor("org.scope-b/readme") ? [file_1_0] : ' + '__bitShouldSurfaceFor("org.scope-c/readme") ? [file_2_0] : [file_2_0]');
|
|
94
|
+
});
|
|
95
|
+
it('keeps plain entries for non-colliding names alongside a colliding group', () => {
|
|
96
|
+
const contents = genLink([{
|
|
97
|
+
scope: 'org.scope-a',
|
|
98
|
+
fullName: 'ui/card'
|
|
99
|
+
}, {
|
|
100
|
+
scope: 'org.scope-a',
|
|
101
|
+
fullName: 'readme'
|
|
102
|
+
}, {
|
|
103
|
+
scope: 'org.scope-b',
|
|
104
|
+
fullName: 'readme'
|
|
105
|
+
}]);
|
|
106
|
+
(0, _chai().expect)(contents).to.include('"ui/card": [file_0_0]');
|
|
107
|
+
(0, _chai().expect)(contents).to.include('"readme": __bitShouldSurfaceFor("org.scope-a/readme") ? [file_1_0] : ' + '__bitShouldSurfaceFor("org.scope-b/readme") ? [file_2_0] : [file_2_0]');
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
//# sourceMappingURL=generate-link.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_os","data","_interopRequireDefault","require","_path","_fsExtra","_chai","_generateLink","e","__esModule","default","mockComponentMap","ids","toArray","map","scope","fullName","id","toStringWithoutVersion","version","replace","describe","tmpDir","before","fs","mkdtempSync","join","os","tmpdir","after","removeSync","genLink","generateLink","undefined","it","contents","expect","to","include","entries","match","have","lengthOf"],"sources":["generate-link.spec.ts"],"sourcesContent":["import os from 'os';\nimport { join } from 'path';\nimport fs from 'fs-extra';\nimport { expect } from 'chai';\nimport { generateLink } from './generate-link';\n\nfunction mockComponentMap(ids: { scope: string; fullName: string }[]) {\n return {\n toArray: () =>\n ids.map(({ scope, fullName }) => [\n {\n id: {\n toStringWithoutVersion: () => `${scope}/${fullName}`,\n version: '0.0.1',\n scope,\n fullName,\n },\n },\n [`/fake/${scope}/${fullName.replace(/\\//g, '-')}.docs.mdx`],\n ]),\n } as any;\n}\n\ndescribe('generateLink', () => {\n // generateLink writes a preview-modules-<hash>.mjs side file; without an\n // explicit tempPackageDir it lands in previewDistDir, which can fall back to\n // this component's own directory — keep test output in a throwaway temp dir.\n let tmpDir: string;\n before(() => {\n tmpDir = fs.mkdtempSync(join(os.tmpdir(), 'bit-generate-link-'));\n });\n after(() => {\n fs.removeSync(tmpDir);\n });\n\n const genLink = (ids: { scope: string; fullName: string }[]) =>\n generateLink('overview', mockComponentMap(ids), undefined, false, tmpDir);\n\n describe('componentMap entries', () => {\n it('emits a plain entry for a fullName that appears once', () => {\n const contents = genLink([{ scope: 'org.scope', fullName: 'ui/button' }]);\n expect(contents).to.include('\"ui/button\": [file_0_0]');\n });\n\n // the componentMap is keyed by fullName, which carries no scope. components\n // from different scopes sharing a fullName (served by one deduped dev server)\n // used to emit duplicate object keys — the last entry silently won, and since\n // non-active components resolve to a null-rendering Placeholder, every other\n // same-named component's preview rendered blank without any error.\n it('emits a single runtime-conditional entry when the same fullName exists in several scopes', () => {\n const contents = genLink([\n { scope: 'org.scope-a', fullName: 'readme' },\n { scope: 'org.scope-b', fullName: 'readme' },\n { scope: 'org.scope-c', fullName: 'readme' },\n ]);\n const entries = contents.match(/\"readme\":/g);\n expect(entries).to.have.lengthOf(1);\n expect(contents).to.include(\n '\"readme\": __bitShouldSurfaceFor(\"org.scope-a/readme\") ? [file_0_0] : ' +\n '__bitShouldSurfaceFor(\"org.scope-b/readme\") ? [file_1_0] : ' +\n '__bitShouldSurfaceFor(\"org.scope-c/readme\") ? [file_2_0] : [file_2_0]'\n );\n });\n\n it('keeps plain entries for non-colliding names alongside a colliding group', () => {\n const contents = genLink([\n { scope: 'org.scope-a', fullName: 'ui/card' },\n { scope: 'org.scope-a', fullName: 'readme' },\n { scope: 'org.scope-b', fullName: 'readme' },\n ]);\n expect(contents).to.include('\"ui/card\": [file_0_0]');\n expect(contents).to.include(\n '\"readme\": __bitShouldSurfaceFor(\"org.scope-a/readme\") ? [file_1_0] : ' +\n '__bitShouldSurfaceFor(\"org.scope-b/readme\") ? [file_2_0] : [file_2_0]'\n );\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.
|
|
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.1060/dist/preview.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.preview_preview@1.0.1060/dist/preview.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/preview",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1060",
|
|
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.1060"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"mime": "2.5.2",
|
|
@@ -48,23 +48,23 @@
|
|
|
48
48
|
"@teambit/preview.cli.webpack-events-listener": "0.0.182",
|
|
49
49
|
"@teambit/mdx.modules.mdx-v3-options": "0.0.3",
|
|
50
50
|
"@teambit/rspack.modules.generate-asset-manifest": "0.0.7",
|
|
51
|
-
"@teambit/builder": "1.0.
|
|
52
|
-
"@teambit/bundler": "1.0.
|
|
53
|
-
"@teambit/component": "1.0.
|
|
54
|
-
"@teambit/aspect-loader": "1.0.
|
|
55
|
-
"@teambit/dependency-resolver": "1.0.
|
|
56
|
-
"@teambit/envs": "1.0.
|
|
57
|
-
"@teambit/ui": "1.0.
|
|
58
|
-
"@teambit/isolator": "1.0.
|
|
59
|
-
"@teambit/graphql": "1.0.
|
|
60
|
-
"@teambit/pkg": "1.0.
|
|
61
|
-
"@teambit/pubsub": "1.0.
|
|
62
|
-
"@teambit/scope": "1.0.
|
|
63
|
-
"@teambit/watcher": "1.0.
|
|
64
|
-
"@teambit/workspace": "1.0.
|
|
65
|
-
"@teambit/compiler": "1.0.
|
|
66
|
-
"@teambit/react": "1.0.
|
|
67
|
-
"@teambit/webpack": "1.0.
|
|
51
|
+
"@teambit/builder": "1.0.1060",
|
|
52
|
+
"@teambit/bundler": "1.0.1060",
|
|
53
|
+
"@teambit/component": "1.0.1060",
|
|
54
|
+
"@teambit/aspect-loader": "1.0.1060",
|
|
55
|
+
"@teambit/dependency-resolver": "1.0.1060",
|
|
56
|
+
"@teambit/envs": "1.0.1060",
|
|
57
|
+
"@teambit/ui": "1.0.1060",
|
|
58
|
+
"@teambit/isolator": "1.0.1060",
|
|
59
|
+
"@teambit/graphql": "1.0.1060",
|
|
60
|
+
"@teambit/pkg": "1.0.1060",
|
|
61
|
+
"@teambit/pubsub": "1.0.1060",
|
|
62
|
+
"@teambit/scope": "1.0.1060",
|
|
63
|
+
"@teambit/watcher": "1.0.1060",
|
|
64
|
+
"@teambit/workspace": "1.0.1060",
|
|
65
|
+
"@teambit/compiler": "1.0.1060",
|
|
66
|
+
"@teambit/react": "1.0.1060",
|
|
67
|
+
"@teambit/webpack": "1.0.1060"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
70
|
"@types/mime": "2.0.3",
|