@ms-cloudpack/storybook-builder 0.4.22 → 0.5.1
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/lib/generateAddonSetupCode.d.ts.map +1 -1
- package/lib/generateAddonSetupCode.js +3 -2
- package/lib/generateAddonSetupCode.js.map +1 -1
- package/lib/generateIFrameHtml.d.ts.map +1 -1
- package/lib/generateIFrameHtml.js +4 -4
- package/lib/generateIFrameHtml.js.map +1 -1
- package/lib/generateImportFnScriptCode.d.ts +0 -1
- package/lib/generateImportFnScriptCode.d.ts.map +1 -1
- package/lib/generateImportFnScriptCode.js +10 -10
- package/lib/generateImportFnScriptCode.js.map +1 -1
- package/lib/generateModernIframeScriptCode.d.ts.map +1 -1
- package/lib/generateModernIframeScriptCode.js +10 -28
- package/lib/generateModernIframeScriptCode.js.map +1 -1
- package/lib/index.d.ts +6 -24
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +32 -32
- package/lib/index.js.map +1 -1
- package/package.json +12 -12
- package/lib/generateIframeScriptCode.d.ts +0 -8
- package/lib/generateIframeScriptCode.d.ts.map +0 -1
- package/lib/generateIframeScriptCode.js +0 -104
- package/lib/generateIframeScriptCode.js.map +0 -1
- package/lib/generatePreviewEntryCode.d.ts +0 -3
- package/lib/generatePreviewEntryCode.d.ts.map +0 -1
- package/lib/generatePreviewEntryCode.js +0 -9
- package/lib/generatePreviewEntryCode.js.map +0 -1
- package/lib/generateVirtualStoryEntryCode.d.ts +0 -6
- package/lib/generateVirtualStoryEntryCode.d.ts.map +0 -1
- package/lib/generateVirtualStoryEntryCode.js +0 -28
- package/lib/generateVirtualStoryEntryCode.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateAddonSetupCode.d.ts","sourceRoot":"","sources":["../src/generateAddonSetupCode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateAddonSetupCode.d.ts","sourceRoot":"","sources":["../src/generateAddonSetupCode.ts"],"names":[],"mappings":"AAIA,wBAAgB,sBAAsB,WAarC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-set-addon-channel.ts
|
|
2
|
+
import { dedent } from 'ts-dedent';
|
|
2
3
|
export function generateAddonSetupCode() {
|
|
3
|
-
return `
|
|
4
|
+
return dedent `
|
|
4
5
|
import { createBrowserChannel } from '@storybook/channels';
|
|
5
6
|
import { addons } from '@storybook/preview-api';
|
|
6
7
|
|
|
@@ -11,6 +12,6 @@ export function generateAddonSetupCode() {
|
|
|
11
12
|
if (window.CONFIG_TYPE === 'DEVELOPMENT'){
|
|
12
13
|
window.__STORYBOOK_SERVER_CHANNEL__ = channel;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
+
`;
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=generateAddonSetupCode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateAddonSetupCode.js","sourceRoot":"","sources":["../src/generateAddonSetupCode.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,UAAU,sBAAsB;IACpC,OAAO
|
|
1
|
+
{"version":3,"file":"generateAddonSetupCode.js","sourceRoot":"","sources":["../src/generateAddonSetupCode.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,UAAU,sBAAsB;IACpC,OAAO,MAAM,CAAA;;;;;;;;;;;GAWZ,CAAC;AACJ,CAAC","sourcesContent":["// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-set-addon-channel.ts\n\nimport { dedent } from 'ts-dedent';\n\nexport function generateAddonSetupCode() {\n return dedent`\n import { createBrowserChannel } from '@storybook/channels';\n import { addons } from '@storybook/preview-api';\n\n const channel = createBrowserChannel({ page: 'preview' });\n addons.setChannel(channel);\n window.__STORYBOOK_ADDONS_CHANNEL__ = channel;\n\n if (window.CONFIG_TYPE === 'DEVELOPMENT'){\n window.__STORYBOOK_SERVER_CHANNEL__ = channel;\n }\n `;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateIFrameHtml.d.ts","sourceRoot":"","sources":["../src/generateIFrameHtml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA2B,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"generateIFrameHtml.d.ts","sourceRoot":"","sources":["../src/generateIFrameHtml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA2B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIxD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,CAAC,CAmDjB"}
|
|
@@ -4,9 +4,11 @@ import { readFile } from 'fs/promises';
|
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import { generateModernIframeScriptCode } from './generateModernIframeScriptCode.js';
|
|
7
|
-
import { generateIframeScriptCode } from './generateIframeScriptCode.js';
|
|
8
7
|
let generatedIframeHtml = undefined;
|
|
9
8
|
export async function generateIframeHtml(options, context) {
|
|
9
|
+
if (options.features?.storyStoreV7 === false) {
|
|
10
|
+
throw new Error('Cloudpack only supports storyStoreV7');
|
|
11
|
+
}
|
|
10
12
|
const iFramePath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../static/iframeTemplate.html');
|
|
11
13
|
const iframeHtmlTemplate = await readFile(iFramePath, { encoding: 'utf-8' });
|
|
12
14
|
const { configType, features, presets, serverChannelUrl, configDir } = options;
|
|
@@ -41,9 +43,7 @@ export async function generateIframeHtml(options, context) {
|
|
|
41
43
|
.replace(`'[SERVER_CHANNEL_URL HERE]'`, JSON.stringify(serverChannelUrl))
|
|
42
44
|
.replace('<!-- [HEAD HTML SNIPPET HERE] -->', headHtmlSnippet || '')
|
|
43
45
|
.replace('<!-- [BODY HTML SNIPPET HERE] -->', bodyHtmlSnippet || '')
|
|
44
|
-
.replace(`('[APP MODULE SRC HERE]');`, options
|
|
45
|
-
? await generateModernIframeScriptCode(options, context)
|
|
46
|
-
: await generateIframeScriptCode(options, context));
|
|
46
|
+
.replace(`('[APP MODULE SRC HERE]');`, await generateModernIframeScriptCode(options, context));
|
|
47
47
|
return generatedIframeHtml;
|
|
48
48
|
}
|
|
49
49
|
//# sourceMappingURL=generateIFrameHtml.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateIFrameHtml.js","sourceRoot":"","sources":["../src/generateIFrameHtml.ts"],"names":[],"mappings":"AAAA,wHAAwH;AAExH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"generateIFrameHtml.js","sourceRoot":"","sources":["../src/generateIFrameHtml.ts"],"names":[],"mappings":"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","sourcesContent":["// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/transform-iframe-html.ts\n\nimport { normalizeStories } from '@storybook/core-common';\nimport type { CoreConfig, DocsOptions, Options } from '@storybook/types';\nimport { readFile } from 'fs/promises';\nimport { fileURLToPath } from 'url';\nimport path from 'path';\nimport { generateModernIframeScriptCode } from './generateModernIframeScriptCode.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport type { Session } from '@ms-cloudpack/api-server';\n\nlet generatedIframeHtml: string | undefined = undefined;\n\nexport type PreviewHtml = string | undefined;\n\nexport async function generateIframeHtml(\n options: Options,\n context: { packages: PackageDefinitionsCache; session: Session },\n): Promise<string> {\n if (options.features?.storyStoreV7 === false) {\n throw new Error('Cloudpack only supports storyStoreV7');\n }\n\n const iFramePath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../static/iframeTemplate.html');\n const iframeHtmlTemplate = await readFile(iFramePath, { encoding: 'utf-8' });\n const { configType, features, presets, serverChannelUrl, configDir } = options;\n const build = await presets.apply('build');\n const frameworkOptions = await presets.apply<Record<string, unknown> | null>('frameworkOptions');\n const headHtmlSnippet = await presets.apply<PreviewHtml>('previewHead');\n const bodyHtmlSnippet = await presets.apply<PreviewHtml>('previewBody');\n const logLevel = await presets.apply('logLevel', undefined);\n const docsOptions = await presets.apply<DocsOptions>('docs');\n\n const coreOptions = await presets.apply<CoreConfig>('core');\n const stories = normalizeStories(await presets.apply('stories', [], options), {\n configDir,\n workingDir: context.session.config.appPath,\n }).map((specifier) => ({\n ...specifier,\n importPathMatcher: specifier.importPathMatcher.source,\n }));\n\n const otherGlobals = {\n ...(build?.test?.disableBlocks ? { __STORYBOOK_BLOCKS_EMPTY_MODULE__: {} } : {}),\n };\n\n generatedIframeHtml = iframeHtmlTemplate\n .replace('[CONFIG_TYPE HERE]', configType || '')\n .replace('[LOGLEVEL HERE]', logLevel || '')\n .replace(`'[FRAMEWORK_OPTIONS HERE]'`, JSON.stringify(frameworkOptions))\n .replace(\n `('OTHER_GLOBLALS HERE');`,\n Object.entries(otherGlobals)\n .map(([k, v]) => `window[\"${k}\"] = ${JSON.stringify(v)};`)\n .join(''),\n )\n .replace(\n `'[CHANNEL_OPTIONS HERE]'`,\n JSON.stringify(coreOptions && coreOptions.channelOptions ? coreOptions.channelOptions : {}),\n )\n .replace(`'[FEATURES HERE]'`, JSON.stringify(features || {}))\n .replace(`'[STORIES HERE]'`, JSON.stringify(stories || {}))\n .replace(`'[DOCS_OPTIONS HERE]'`, JSON.stringify(docsOptions || {}))\n .replace(`'[SERVER_CHANNEL_URL HERE]'`, JSON.stringify(serverChannelUrl))\n .replace('<!-- [HEAD HTML SNIPPET HERE] -->', headHtmlSnippet || '')\n .replace('<!-- [BODY HTML SNIPPET HERE] -->', bodyHtmlSnippet || '')\n .replace(`('[APP MODULE SRC HERE]');`, await generateModernIframeScriptCode(options, context));\n\n return generatedIframeHtml;\n}\n"]}
|
|
@@ -6,7 +6,6 @@ import type { Session } from '@ms-cloudpack/api-server';
|
|
|
6
6
|
* to the working directory and their dynamic imports. The import is done in an asynchronous function
|
|
7
7
|
* to delay loading. It then creates a function, `importFn(path)`, which resolves a path to an import
|
|
8
8
|
* function and this is called by Storybook to fetch a story dynamically when needed.
|
|
9
|
-
* @param stories An array of absolute story paths.
|
|
10
9
|
*/
|
|
11
10
|
export declare function generateImportFnScriptCode(options: Options, context: {
|
|
12
11
|
packages: PackageDefinitionsCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateImportFnScriptCode.d.ts","sourceRoot":"","sources":["../src/generateImportFnScriptCode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"generateImportFnScriptCode.d.ts","sourceRoot":"","sources":["../src/generateImportFnScriptCode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAYxD;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
|
|
@@ -3,6 +3,7 @@ import { listStories } from './listStories.js';
|
|
|
3
3
|
import { slash } from '@ms-cloudpack/path-string-parsing';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { logger } from '@storybook/node-logger';
|
|
6
|
+
import { dedent } from 'ts-dedent';
|
|
6
7
|
/**
|
|
7
8
|
* Paths get passed either with no leading './' - e.g. `src/Foo.stories.js`,
|
|
8
9
|
* or with a leading `../` (etc), e.g. `../src/Foo.stories.js`.
|
|
@@ -16,7 +17,6 @@ function toImportPath(relativePath) {
|
|
|
16
17
|
* to the working directory and their dynamic imports. The import is done in an asynchronous function
|
|
17
18
|
* to delay loading. It then creates a function, `importFn(path)`, which resolves a path to an import
|
|
18
19
|
* function and this is called by Storybook to fetch a story dynamically when needed.
|
|
19
|
-
* @param stories An array of absolute story paths.
|
|
20
20
|
*/
|
|
21
21
|
export async function generateImportFnScriptCode(options, context) {
|
|
22
22
|
const { packages, session } = context;
|
|
@@ -31,18 +31,18 @@ export async function generateImportFnScriptCode(options, context) {
|
|
|
31
31
|
const relativeStoryPath = slash(path.relative(appPath, file));
|
|
32
32
|
// TODO: Add support for '.mdx',
|
|
33
33
|
if (!['.js', '.jsx', '.ts', '.tsx'].includes(ext)) {
|
|
34
|
-
logger.warn(`Cannot process ${ext} file
|
|
34
|
+
logger.warn(`Cannot process ${ext} file: ${relativeStoryPath}`);
|
|
35
35
|
}
|
|
36
36
|
return ` '${toImportPath(relativeStoryPath)}': async () => import('${definition.name}/${relativeStoryPath}')`;
|
|
37
37
|
});
|
|
38
|
-
return `
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
return dedent `
|
|
39
|
+
const importers = {
|
|
40
|
+
${objectEntries.join(',\n')}
|
|
41
|
+
};
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
export async function importFn(path) {
|
|
44
|
+
return importers[path]();
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
47
|
}
|
|
48
48
|
//# sourceMappingURL=generateImportFnScriptCode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateImportFnScriptCode.js","sourceRoot":"","sources":["../src/generateImportFnScriptCode.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAG1H,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"generateImportFnScriptCode.js","sourceRoot":"","sources":["../src/generateImportFnScriptCode.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAG1H,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;;GAIG;AACH,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAgB,EAChB,OAAgE;IAEhE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,gCAAgC;QAChC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,UAAU,iBAAiB,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,MAAM,YAAY,CAAC,iBAAiB,CAAC,0BAA0B,UAAU,CAAC,IAAI,IAAI,iBAAiB,IAAI,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAA;;QAEP,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;KAM5B,CAAC;AACN,CAAC","sourcesContent":["// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-importfn-script.ts\n\nimport type { Options } from '@storybook/types';\nimport { listStories } from './listStories.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport path from 'path';\nimport { logger } from '@storybook/node-logger';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport type { Session } from '@ms-cloudpack/api-server';\nimport { dedent } from 'ts-dedent';\n\n/**\n * Paths get passed either with no leading './' - e.g. `src/Foo.stories.js`,\n * or with a leading `../` (etc), e.g. `../src/Foo.stories.js`.\n * We want to deal in importPaths relative to the working dir, so we normalize\n */\nfunction toImportPath(relativePath: string) {\n return relativePath.startsWith('../') ? relativePath : `./${relativePath}`;\n}\n\n/**\n * This function takes an array of stories and creates a mapping between the stories' relative paths\n * to the working directory and their dynamic imports. The import is done in an asynchronous function\n * to delay loading. It then creates a function, `importFn(path)`, which resolves a path to an import\n * function and this is called by Storybook to fetch a story dynamically when needed.\n */\nexport async function generateImportFnScriptCode(\n options: Options,\n context: { packages: PackageDefinitionsCache; session: Session },\n): Promise<string> {\n const { packages, session } = context;\n const { appPath } = session.config;\n const definition = await packages.get(appPath);\n\n if (!definition) {\n throw new Error('Could not find package definition for the current app');\n }\n\n const stories = await listStories(options);\n const objectEntries = stories.map((file) => {\n const ext = path.extname(file);\n const relativeStoryPath = slash(path.relative(appPath, file));\n // TODO: Add support for '.mdx',\n if (!['.js', '.jsx', '.ts', '.tsx'].includes(ext)) {\n logger.warn(`Cannot process ${ext} file: ${relativeStoryPath}`);\n }\n\n return ` '${toImportPath(relativeStoryPath)}': async () => import('${definition.name}/${relativeStoryPath}')`;\n });\n\n return dedent`\n const importers = {\n ${objectEntries.join(',\\n')}\n };\n\n export async function importFn(path) {\n return importers[path]();\n }\n `;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateModernIframeScriptCode.d.ts","sourceRoot":"","sources":["../src/generateModernIframeScriptCode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAI1E,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,kBAAkB,CAAC;AAOnE,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"generateModernIframeScriptCode.d.ts","sourceRoot":"","sources":["../src/generateModernIframeScriptCode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAI1E,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,kBAAkB,CAAC;AAOnE,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/
|
|
1
|
+
// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-modern-iframe-script.ts
|
|
2
2
|
import { addExportsMapEntry, getExportsMap } from '@ms-cloudpack/package-utilities';
|
|
3
3
|
import { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';
|
|
4
|
-
import {
|
|
4
|
+
import { loadPreviewOrConfigFile } from '@storybook/core-common';
|
|
5
5
|
import { relative } from 'path';
|
|
6
|
+
import { dedent } from 'ts-dedent';
|
|
6
7
|
import { generateAddonSetupCode } from './generateAddonSetupCode.js';
|
|
7
8
|
import { generateImportFnScriptCode } from './generateImportFnScriptCode.js';
|
|
8
|
-
import { generateVirtualStoryEntryCode } from './generateVirtualStoryEntryCode.js';
|
|
9
9
|
import { processPreviewAnnotation } from './utils/processPreviewAnnotation.js';
|
|
10
10
|
export async function generateModernIframeScriptCode(options, context) {
|
|
11
11
|
const { presets, configDir } = options;
|
|
12
12
|
const { session, packages } = context;
|
|
13
13
|
const { appPath } = session.config;
|
|
14
|
-
const frameworkName = await getFrameworkName(options);
|
|
15
14
|
const previewOrConfigFile = loadPreviewOrConfigFile({ configDir });
|
|
16
15
|
if (previewOrConfigFile) {
|
|
17
16
|
const exports = await getExportsMap({ packagePath: appPath }, { packages, config: session.config });
|
|
@@ -25,38 +24,19 @@ export async function generateModernIframeScriptCode(options, context) {
|
|
|
25
24
|
const previewAnnotationURLs = await Promise.all([...previewAnnotations, previewOrConfigFile]
|
|
26
25
|
.filter((path) => !!path)
|
|
27
26
|
.map(async (path) => await processPreviewAnnotation(path, context)));
|
|
28
|
-
|
|
29
|
-
// and the HMR handler. We don't use the hot.accept callback params because only the changed
|
|
30
|
-
// modules are provided, the rest are null. We can just re-import everything again in that case.
|
|
31
|
-
const getPreviewAnnotationsFunction = `
|
|
27
|
+
const getPreviewAnnotationsFunction = dedent `
|
|
32
28
|
const getProjectAnnotations = async () => {
|
|
33
29
|
const configs = await Promise.all([${previewAnnotationURLs
|
|
34
30
|
.map((previewAnnotation) => `import('${previewAnnotation.split('\\').join('\\\\')}')`)
|
|
35
31
|
.join(',\n')}]);
|
|
36
32
|
return composeConfigs(configs);
|
|
37
33
|
}`;
|
|
38
|
-
|
|
39
|
-
// Web components are not compatible with HMR, so disable HMR, reload page instead.
|
|
40
|
-
if (frameworkName === '@ms-cloudpack/storybook-react') {
|
|
41
|
-
return `
|
|
42
|
-
if (import.meta.hot) {
|
|
43
|
-
import.meta.hot.decline();
|
|
44
|
-
};`.trim();
|
|
45
|
-
}
|
|
46
|
-
return `
|
|
47
|
-
if (import.meta.hot) {
|
|
48
|
-
alert('HMR is not supported for web components, reloading the page instead.');
|
|
49
|
-
window.location.reload();
|
|
50
|
-
};`.trim();
|
|
51
|
-
};
|
|
52
|
-
return `
|
|
34
|
+
return dedent `
|
|
53
35
|
import { composeConfigs, PreviewWeb, ClientApi } from '@storybook/preview-api';
|
|
54
36
|
|
|
55
37
|
${generateAddonSetupCode()};
|
|
56
38
|
|
|
57
|
-
|
|
58
|
-
? await generateImportFnScriptCode(options, context)
|
|
59
|
-
: await generateVirtualStoryEntryCode(options, context)}
|
|
39
|
+
${await generateImportFnScriptCode(options, context)}
|
|
60
40
|
|
|
61
41
|
${getPreviewAnnotationsFunction}
|
|
62
42
|
|
|
@@ -66,7 +46,9 @@ export async function generateModernIframeScriptCode(options, context) {
|
|
|
66
46
|
window.__STORYBOOK_CLIENT_API__ = window.__STORYBOOK_CLIENT_API__ || new ClientApi({ storyStore: window.__STORYBOOK_PREVIEW__.storyStore });
|
|
67
47
|
window.__STORYBOOK_PREVIEW__.initialize({ importFn, getProjectAnnotations });
|
|
68
48
|
|
|
69
|
-
|
|
70
|
-
|
|
49
|
+
if (import.meta.hot) {
|
|
50
|
+
// Cloudpack doesn't currently support HMR
|
|
51
|
+
import.meta.hot.decline();
|
|
52
|
+
}`;
|
|
71
53
|
}
|
|
72
54
|
//# sourceMappingURL=generateModernIframeScriptCode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateModernIframeScriptCode.js","sourceRoot":"","sources":["../src/generateModernIframeScriptCode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generateModernIframeScriptCode.js","sourceRoot":"","sources":["../src/generateModernIframeScriptCode.ts"],"names":[],"mappings":"AAAA,+HAA+H;AAI/H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAgB,EAChB,OAAgE;IAEhE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEnC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAEnE,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,MAAM,kBAAkB,CACtB;YACE,OAAO;YACP,WAAW,EAAE,OAAO;YACpB,UAAU,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;SAC1E,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CACrC,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAsB,oBAAoB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvG,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7C,CAAC,GAAG,kBAAkB,EAAE,mBAAmB,CAAC;SACzC,MAAM,CAAC,CAAC,IAAI,EAA6B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACnD,GAAG,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE,CAAC,MAAM,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACzF,CAAC;IAEF,MAAM,6BAA6B,GAAG,MAAM,CAAA;;yCAEL,qBAAqB;SACvD,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,WAAW,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;SACrF,IAAI,CAAC,KAAK,CAAC;;IAEd,CAAC;IAEH,OAAO,MAAM,CAAA;;;IAGX,sBAAsB,EAAE;;MAEtB,MAAM,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC;;IAEpD,6BAA6B;;;;;;;;;;;MAW3B,CAAC;AACP,CAAC","sourcesContent":["// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-modern-iframe-script.ts\n\nimport type { Session } from '@ms-cloudpack/api-server';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { addExportsMapEntry, getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { loadPreviewOrConfigFile } from '@storybook/core-common';\nimport type { Options, PreviewAnnotation } from '@storybook/types';\nimport { relative } from 'path';\nimport { dedent } from 'ts-dedent';\nimport { generateAddonSetupCode } from './generateAddonSetupCode.js';\nimport { generateImportFnScriptCode } from './generateImportFnScriptCode.js';\nimport { processPreviewAnnotation } from './utils/processPreviewAnnotation.js';\n\nexport async function generateModernIframeScriptCode(\n options: Options,\n context: { packages: PackageDefinitionsCache; session: Session },\n): Promise<string> {\n const { presets, configDir } = options;\n const { session, packages } = context;\n const { appPath } = session.config;\n\n const previewOrConfigFile = loadPreviewOrConfigFile({ configDir });\n\n if (previewOrConfigFile) {\n const exports = await getExportsMap({ packagePath: appPath }, { packages, config: session.config });\n await addExportsMapEntry(\n {\n exports,\n packagePath: appPath,\n importPath: normalizeRelativePath(relative(appPath, previewOrConfigFile)),\n },\n { packages, config: session.config },\n );\n }\n\n const previewAnnotations = await presets.apply<PreviewAnnotation[]>('previewAnnotations', [], options);\n const previewAnnotationURLs = await Promise.all(\n [...previewAnnotations, previewOrConfigFile]\n .filter((path): path is PreviewAnnotation => !!path)\n .map(async (path: PreviewAnnotation) => await processPreviewAnnotation(path, context)),\n );\n\n const getPreviewAnnotationsFunction = dedent`\n const getProjectAnnotations = async () => {\n const configs = await Promise.all([${previewAnnotationURLs\n .map((previewAnnotation) => `import('${previewAnnotation.split('\\\\').join('\\\\\\\\')}')`)\n .join(',\\n')}]);\n return composeConfigs(configs);\n }`;\n\n return dedent`\n import { composeConfigs, PreviewWeb, ClientApi } from '@storybook/preview-api';\n\n ${generateAddonSetupCode()};\n\n ${await generateImportFnScriptCode(options, context)}\n\n ${getPreviewAnnotationsFunction}\n\n window.__STORYBOOK_PREVIEW__ = window.__STORYBOOK_PREVIEW__ || new PreviewWeb();\n\n window.__STORYBOOK_STORY_STORE__ = window.__STORYBOOK_STORY_STORE__ || window.__STORYBOOK_PREVIEW__.storyStore;\n window.__STORYBOOK_CLIENT_API__ = window.__STORYBOOK_CLIENT_API__ || new ClientApi({ storyStore: window.__STORYBOOK_PREVIEW__.storyStore });\n window.__STORYBOOK_PREVIEW__.initialize({ importFn, getProjectAnnotations });\n\n if (import.meta.hot) {\n // Cloudpack doesn't currently support HMR\n import.meta.hot.decline();\n }`;\n}\n"]}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,25 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
export declare function bail(error?: Error): Promise<void>;
|
|
9
|
-
export declare const start: ({ options, startTime, router, server: devServer, }: {
|
|
10
|
-
options: Options;
|
|
11
|
-
startTime: [number, number];
|
|
12
|
-
router: Router;
|
|
13
|
-
server: Server;
|
|
14
|
-
}) => Promise<{
|
|
15
|
-
bail: typeof bail;
|
|
16
|
-
stats: {
|
|
17
|
-
toJson: () => null;
|
|
18
|
-
};
|
|
19
|
-
totalTime: [number, number];
|
|
20
|
-
}>;
|
|
21
|
-
export declare const build: (_arg: {
|
|
22
|
-
options: Options;
|
|
23
|
-
startTime: [number, number];
|
|
24
|
-
}) => void;
|
|
1
|
+
import type { Builder, Options } from '@storybook/types';
|
|
2
|
+
type CloudpackBuilder = Builder<Options>;
|
|
3
|
+
export declare const bail: CloudpackBuilder['bail'];
|
|
4
|
+
export declare const start: CloudpackBuilder['start'];
|
|
5
|
+
export declare const build: CloudpackBuilder['build'];
|
|
6
|
+
export {};
|
|
25
7
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AASzD,KAAK,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AASzC,eAAO,MAAM,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAmBzC,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAoK3C,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAG3C,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -2,9 +2,8 @@ import { getLocalCachePath, createPartialApiContext, ensurePackageBundled } from
|
|
|
2
2
|
import { startServers } from '@ms-cloudpack/app-server';
|
|
3
3
|
import { readConfig } from '@ms-cloudpack/config';
|
|
4
4
|
import { express } from '@ms-cloudpack/create-express-app';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';
|
|
5
|
+
import { addExportsMapEntry, getDisplayVersion, getExportsMap, getVersion, isExternalPackage, resolve, } from '@ms-cloudpack/package-utilities';
|
|
6
|
+
import { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';
|
|
8
7
|
import { TaskReporter, bold, debugLoggingConfig, defaultLoggingConfig, noLoggingConfig, verboseLoggingConfig, } from '@ms-cloudpack/task-reporter';
|
|
9
8
|
import { createTelemetryClient } from '@ms-cloudpack/telemetry';
|
|
10
9
|
import fsExtra from 'fs-extra';
|
|
@@ -15,24 +14,25 @@ import { generateIframeHtml } from './generateIFrameHtml.js';
|
|
|
15
14
|
import { getNodeModuleDir } from './getNodeModuleDir.js';
|
|
16
15
|
import { listStories } from './listStories.js';
|
|
17
16
|
const servers = {};
|
|
18
|
-
export async
|
|
17
|
+
export const bail = async (error) => {
|
|
19
18
|
if (error) {
|
|
20
19
|
console.error('Error:', error);
|
|
21
20
|
}
|
|
22
21
|
await Promise.all(Object.entries(servers).map(async ([name, server]) => {
|
|
23
22
|
if (!server)
|
|
24
23
|
return;
|
|
25
|
-
|
|
24
|
+
const desc = `${name} (${server.url})`;
|
|
25
|
+
console.info(`Closing ${desc}`);
|
|
26
26
|
try {
|
|
27
|
-
await server
|
|
28
|
-
console.info(`Closed ${
|
|
27
|
+
await server.close();
|
|
28
|
+
console.info(`Closed ${desc}`);
|
|
29
29
|
}
|
|
30
30
|
catch (err) {
|
|
31
|
-
console.warn(
|
|
31
|
+
console.warn(`Error closing ${desc}:`, err);
|
|
32
32
|
}
|
|
33
33
|
}));
|
|
34
|
-
}
|
|
35
|
-
export const start = async ({ options, startTime, router, server: devServer
|
|
34
|
+
};
|
|
35
|
+
export const start = async ({ options, startTime, router, server: devServer }) => {
|
|
36
36
|
const previewResolvedDir = getNodeModuleDir('@storybook/preview');
|
|
37
37
|
const previewDirOrigin = path.join(previewResolvedDir, 'dist');
|
|
38
38
|
router.use('/sb-preview', express.static(previewDirOrigin, { immutable: true, maxAge: '5m' }));
|
|
@@ -43,14 +43,9 @@ export const start = async ({ options, startTime, router, server: devServer, })
|
|
|
43
43
|
const config = await readConfig(appPath);
|
|
44
44
|
// TODO: Move to won package.
|
|
45
45
|
// runPrerequisites(config, appPath);
|
|
46
|
-
// Make sure the package has a valid definition.
|
|
47
|
-
const definition = (await readJson(path.join(appPath, 'package.json')));
|
|
48
|
-
if (!definition.name || !definition.version) {
|
|
49
|
-
throw new Error(`The package.json at "${appPath}" did not have a name and/or version.`);
|
|
50
|
-
}
|
|
51
46
|
// This part should be almost identical to the cli start command.
|
|
52
47
|
const reporter = new TaskReporter({
|
|
53
|
-
productName:
|
|
48
|
+
productName: 'Storybook + Cloudpack',
|
|
54
49
|
version: getDisplayVersion(import.meta.url),
|
|
55
50
|
description: () => `Running "${bold('storybook')}"`,
|
|
56
51
|
helpMessage: config.helpMessage,
|
|
@@ -76,8 +71,8 @@ export const start = async ({ options, startTime, router, server: devServer, })
|
|
|
76
71
|
connectionString,
|
|
77
72
|
logLevel,
|
|
78
73
|
serviceNamespace: 'cloudpack',
|
|
79
|
-
serviceName: '
|
|
80
|
-
rootSpanName: '
|
|
74
|
+
serviceName: 'storybook',
|
|
75
|
+
rootSpanName: 'storybook',
|
|
81
76
|
});
|
|
82
77
|
// Register performance observers to track performance metrics as events of CLI span.
|
|
83
78
|
// registerPerformanceObservers(telemetryClient);
|
|
@@ -97,6 +92,17 @@ export const start = async ({ options, startTime, router, server: devServer, })
|
|
|
97
92
|
overlayPath,
|
|
98
93
|
});
|
|
99
94
|
const { packages, session } = apiContext;
|
|
95
|
+
// Overwrite the exports of the app package to an empty object, since we only care about stories.
|
|
96
|
+
packages.registerTransform(() => ({ definition, packagePath }) => {
|
|
97
|
+
if (slash(appPath) === slash(packagePath)) {
|
|
98
|
+
return { ...definition, exports: {} };
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
// Make sure the package has a valid definition.
|
|
102
|
+
const definition = await packages.get(appPath);
|
|
103
|
+
if (!definition?.name || !definition.version) {
|
|
104
|
+
throw new Error(`The package.json at "${appPath}" did not have a name and/or version.`);
|
|
105
|
+
}
|
|
100
106
|
// TODO: Get options and enable this.
|
|
101
107
|
// Increment the session version if caching is disabled.
|
|
102
108
|
// if (options.cache === false) {
|
|
@@ -113,7 +119,7 @@ export const start = async ({ options, startTime, router, server: devServer, })
|
|
|
113
119
|
const generated = await generateIframeHtml(options, { packages, session });
|
|
114
120
|
await fsExtra.ensureDir(getLocalCachePath(appPath));
|
|
115
121
|
// TODO: Currently saving it to disk as the config only accepts a path.
|
|
116
|
-
const iFramePath = path.join(getLocalCachePath(appPath), '
|
|
122
|
+
const iFramePath = path.join(getLocalCachePath(appPath), 'iframe.html');
|
|
117
123
|
await fsPromises.writeFile(iFramePath, generated, { encoding: 'utf-8' });
|
|
118
124
|
// iFrame script is required for storybook to work.
|
|
119
125
|
config.devServer ??= {};
|
|
@@ -122,17 +128,12 @@ export const start = async ({ options, startTime, router, server: devServer, })
|
|
|
122
128
|
match: '/iframe.html',
|
|
123
129
|
renderScript: iFramePath,
|
|
124
130
|
});
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
throw new Error(`Could not find package ${definition.name} in the resolve map.`);
|
|
132
|
-
}
|
|
133
|
-
const exports = await getExportsMap({ packagePath }, { packages, config: session.config });
|
|
134
|
-
for (const [importPath, filePath] of Object.entries(storyEntries)) {
|
|
135
|
-
await addExportsMapEntry({ exports, packagePath, importPath, filePath }, { packages, config: session.config });
|
|
131
|
+
// Add an exports entry for each story file
|
|
132
|
+
const exports = await getExportsMap({ packagePath: appPath }, { packages, config: session.config });
|
|
133
|
+
const stories = await listStories(options);
|
|
134
|
+
for (const story of stories) {
|
|
135
|
+
const importPath = normalizeRelativePath(path.relative(appPath, story));
|
|
136
|
+
await addExportsMapEntry({ exports, packagePath: appPath, importPath, filePath: importPath }, { packages, config: session.config });
|
|
136
137
|
}
|
|
137
138
|
const { createCloudpackServer } = await import('@ms-cloudpack/api-server');
|
|
138
139
|
// Start api server for tracking status and handling remote requests.
|
|
@@ -156,11 +157,10 @@ export const start = async ({ options, startTime, router, server: devServer, })
|
|
|
156
157
|
// performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);
|
|
157
158
|
return {
|
|
158
159
|
bail,
|
|
159
|
-
stats: { toJson: () => null },
|
|
160
160
|
totalTime: process.hrtime(startTime),
|
|
161
161
|
};
|
|
162
162
|
};
|
|
163
|
-
export const build = (
|
|
163
|
+
export const build = () => {
|
|
164
164
|
console.log('Cloudpack Storybook build is not implemented yet.');
|
|
165
165
|
process.exit(1);
|
|
166
166
|
};
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLocalCachePath, createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport { startServers } from '@ms-cloudpack/app-server';\nimport { readConfig } from '@ms-cloudpack/config';\nimport type { PackageJson } from '@ms-cloudpack/common-types';\nimport { express, type Router } from '@ms-cloudpack/create-express-app';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport {\n addExportsMapEntry,\n findResolveMapEntry,\n getDisplayVersion,\n getExportsMap,\n getVersion,\n isExternalPackage,\n resolve,\n} from '@ms-cloudpack/package-utilities';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport {\n TaskReporter,\n bold,\n debugLoggingConfig,\n defaultLoggingConfig,\n noLoggingConfig,\n verboseLoggingConfig,\n} from '@ms-cloudpack/task-reporter';\nimport { createTelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { Options } from '@storybook/types';\nimport fsExtra from 'fs-extra';\nimport fsPromises from 'fs/promises';\nimport { type Server } from 'http';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { generateIframeHtml } from './generateIFrameHtml.js';\nimport { getNodeModuleDir } from './getNodeModuleDir.js';\nimport { listStories } from './listStories.js';\n\nexport type ClosableServer = {\n close: () => Promise<void>;\n url: string;\n};\n\nconst servers: Record<string, ClosableServer | undefined> = {};\n\nexport async function bail(error?: Error): Promise<void> {\n if (error) {\n console.error('Error:', error);\n }\n\n await Promise.all(\n Object.entries(servers).map(async ([name, server]) => {\n if (!server) return;\n console.info(`Closing ${name}: ${server.url}`);\n try {\n await server?.close();\n console.info(`Closed ${name}: ${server.url}`);\n } catch (err) {\n console.warn('Error closing server:', err);\n }\n }),\n );\n}\n\nexport const start = async ({\n options,\n startTime,\n router,\n server: devServer,\n}: {\n options: Options;\n startTime: [number, number];\n router: Router;\n server: Server;\n}) => {\n const previewResolvedDir = getNodeModuleDir('@storybook/preview');\n const previewDirOrigin = path.join(previewResolvedDir, 'dist');\n\n router.use('/sb-preview', express.static(previewDirOrigin, { immutable: true, maxAge: '5m' }));\n\n // TODO: This might be useful later on.\n // const env = await options.presets.apply<Record<string, string>>('env');\n\n // eslint-disable-next-line no-restricted-properties -- this is the one place we need cwd (for a default)\n const appPath = process.cwd();\n\n const config = await readConfig(appPath);\n\n // TODO: Move to won package.\n // runPrerequisites(config, appPath);\n\n // Make sure the package has a valid definition.\n const definition = (await readJson(path.join(appPath, 'package.json'))) as PackageJson;\n\n if (!definition.name || !definition.version) {\n throw new Error(`The package.json at \"${appPath}\" did not have a name and/or version.`);\n }\n\n // This part should be almost identical to the cli start command.\n const reporter = new TaskReporter({\n productName: `Cloudpack`,\n version: getDisplayVersion(import.meta.url),\n description: () => `Running \"${bold('storybook')}\"`,\n helpMessage: config.helpMessage,\n // TODO: Get options and enable this.\n plainTextMode: options.ci,\n ...(options.loglevel === 'debug'\n ? debugLoggingConfig\n : options.loglevel === 'verbose'\n ? verboseLoggingConfig\n : options.quiet || options.loglevel === 'quiet'\n ? noLoggingConfig\n : defaultLoggingConfig),\n });\n\n const connectionString = options.disableTelemetry\n ? undefined\n : config.telemetry?.connectionString || process.env.CLOUDPACK_TELEMETRY_CONNECTION_STRING;\n\n const logLevel = options.loglevel === 'verbose' ? 'VERBOSE' : options.loglevel === 'debug' ? 'DEBUG' : undefined;\n if (options.loglevel !== 'debug') {\n reporter.ignoreLogMessage('ApplicationInsights:');\n }\n\n const telemetryClient = await createTelemetryClient({\n productVersion: getVersion(import.meta.url),\n connectionString,\n logLevel,\n serviceNamespace: 'cloudpack',\n serviceName: 'cli',\n rootSpanName: 'CLI',\n });\n\n // Register performance observers to track performance metrics as events of CLI span.\n // registerPerformanceObservers(telemetryClient);\n\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let overlayPath = await resolve('@ms-cloudpack/overlay', currentDir);\n\n // If overlay is an internal package, resolve the overlay from the current package's linked node modules\n // to \"externalize\" it, so that we always use the bundled version of the overlay instead of the source.\n if (overlayPath && !isExternalPackage(overlayPath)) {\n overlayPath = path.join(currentDir, '/../', 'node_modules', '@ms-cloudpack/overlay');\n }\n\n const apiContext = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n overlayPath,\n });\n\n const { packages, session } = apiContext;\n\n // TODO: Get options and enable this.\n // Increment the session version if caching is disabled.\n // if (options.cache === false) {\n // session.incrementSessionVersion();\n // }\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\n\n // TODO: Get options and enable this.\n // if (options.logResolveMap) {\n // // Write the resolve map to disk.\n // await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n // }\n\n // Storybook set up is mostly done here.\n const generated = await generateIframeHtml(options, { packages, session });\n await fsExtra.ensureDir(getLocalCachePath(appPath));\n\n // TODO: Currently saving it to disk as the config only accepts a path.\n const iFramePath = path.join(getLocalCachePath(appPath), 'iFrame.html');\n await fsPromises.writeFile(iFramePath, generated, { encoding: 'utf-8' });\n\n // iFrame script is required for storybook to work.\n config.devServer ??= {};\n config.routes ??= [];\n config.routes.push({\n match: '/iframe.html',\n renderScript: iFramePath,\n });\n\n const storyEntries = Object.fromEntries(\n (await listStories(options)).map((story) => {\n const storyPath = normalizeRelativePath(path.relative(appPath, story));\n return [storyPath, storyPath];\n }),\n );\n\n const packagePath = findResolveMapEntry({ packageName: definition.name, resolveMap: session.resolveMap })?.path;\n if (!packagePath) {\n throw new Error(`Could not find package ${definition.name} in the resolve map.`);\n }\n\n const exports = await getExportsMap({ packagePath }, { packages, config: session.config });\n for (const [importPath, filePath] of Object.entries(storyEntries)) {\n await addExportsMapEntry({ exports, packagePath, importPath, filePath }, { packages, config: session.config });\n }\n\n const { createCloudpackServer } = await import('@ms-cloudpack/api-server');\n\n // Start api server for tracking status and handling remote requests.\n servers.apiServer = await createCloudpackServer(apiContext);\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled({\n input: { name: definition.name, version: definition.version },\n ctx: apiContext,\n });\n\n // Start bundle and app servers for hosting the app.\n const { appServer, bundleServer } = await startServers(\n {\n definition,\n server: devServer,\n // TODO: Get options and enable this.\n bundleServerOptions: { disableCache: false },\n },\n apiContext,\n );\n servers.appServer = appServer;\n servers.bundleServer = bundleServer;\n\n router.use(appServer.app);\n\n // TODO: Figure out if it is possible to know when browser will open.\n // performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n\n return {\n bail,\n stats: { toJson: () => null },\n totalTime: process.hrtime(startTime),\n };\n};\n\nexport const build = (_arg: { options: Options; startTime: [number, number] }): void => {\n console.log('Cloudpack Storybook build is not implemented yet.');\n process.exit(1);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLocalCachePath, createPartialApiContext, ensurePackageBundled } from '@ms-cloudpack/api-server';\nimport { startServers } from '@ms-cloudpack/app-server';\nimport { readConfig } from '@ms-cloudpack/config';\nimport { express } from '@ms-cloudpack/create-express-app';\nimport {\n addExportsMapEntry,\n getDisplayVersion,\n getExportsMap,\n getVersion,\n isExternalPackage,\n resolve,\n} from '@ms-cloudpack/package-utilities';\nimport { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';\nimport {\n TaskReporter,\n bold,\n debugLoggingConfig,\n defaultLoggingConfig,\n noLoggingConfig,\n verboseLoggingConfig,\n} from '@ms-cloudpack/task-reporter';\nimport { createTelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { Builder, Options } from '@storybook/types';\nimport fsExtra from 'fs-extra';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { generateIframeHtml } from './generateIFrameHtml.js';\nimport { getNodeModuleDir } from './getNodeModuleDir.js';\nimport { listStories } from './listStories.js';\n\ntype CloudpackBuilder = Builder<Options>;\n\ntype ClosableServer = {\n close: () => Promise<void>;\n url: string;\n};\n\nconst servers: Record<string, ClosableServer | undefined> = {};\n\nexport const bail: CloudpackBuilder['bail'] = async (error) => {\n if (error) {\n console.error('Error:', error);\n }\n\n await Promise.all(\n Object.entries(servers).map(async ([name, server]) => {\n if (!server) return;\n\n const desc = `${name} (${server.url})`;\n console.info(`Closing ${desc}`);\n try {\n await server.close();\n console.info(`Closed ${desc}`);\n } catch (err) {\n console.warn(`Error closing ${desc}:`, err);\n }\n }),\n );\n};\n\nexport const start: CloudpackBuilder['start'] = async ({ options, startTime, router, server: devServer }) => {\n const previewResolvedDir = getNodeModuleDir('@storybook/preview');\n const previewDirOrigin = path.join(previewResolvedDir, 'dist');\n\n router.use('/sb-preview', express.static(previewDirOrigin, { immutable: true, maxAge: '5m' }));\n\n // TODO: This might be useful later on.\n // const env = await options.presets.apply<Record<string, string>>('env');\n\n // eslint-disable-next-line no-restricted-properties -- this is the one place we need cwd (for a default)\n const appPath = process.cwd();\n\n const config = await readConfig(appPath);\n\n // TODO: Move to won package.\n // runPrerequisites(config, appPath);\n\n // This part should be almost identical to the cli start command.\n const reporter = new TaskReporter({\n productName: 'Storybook + Cloudpack',\n version: getDisplayVersion(import.meta.url),\n description: () => `Running \"${bold('storybook')}\"`,\n helpMessage: config.helpMessage,\n // TODO: Get options and enable this.\n plainTextMode: options.ci,\n ...(options.loglevel === 'debug'\n ? debugLoggingConfig\n : options.loglevel === 'verbose'\n ? verboseLoggingConfig\n : options.quiet || options.loglevel === 'quiet'\n ? noLoggingConfig\n : defaultLoggingConfig),\n });\n\n const connectionString = options.disableTelemetry\n ? undefined\n : config.telemetry?.connectionString || process.env.CLOUDPACK_TELEMETRY_CONNECTION_STRING;\n\n const logLevel = options.loglevel === 'verbose' ? 'VERBOSE' : options.loglevel === 'debug' ? 'DEBUG' : undefined;\n if (options.loglevel !== 'debug') {\n reporter.ignoreLogMessage('ApplicationInsights:');\n }\n\n const telemetryClient = await createTelemetryClient({\n productVersion: getVersion(import.meta.url),\n connectionString,\n logLevel,\n serviceNamespace: 'cloudpack',\n serviceName: 'storybook',\n rootSpanName: 'storybook',\n });\n\n // Register performance observers to track performance metrics as events of CLI span.\n // registerPerformanceObservers(telemetryClient);\n\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let overlayPath = await resolve('@ms-cloudpack/overlay', currentDir);\n\n // If overlay is an internal package, resolve the overlay from the current package's linked node modules\n // to \"externalize\" it, so that we always use the bundled version of the overlay instead of the source.\n if (overlayPath && !isExternalPackage(overlayPath)) {\n overlayPath = path.join(currentDir, '/../', 'node_modules', '@ms-cloudpack/overlay');\n }\n\n const apiContext = await createPartialApiContext({\n appPath,\n config,\n reporter,\n telemetryClient,\n items: ['bus', 'watcher', 'taskRunner', 'packages', 'session', 'packageImportPaths', 'packageHashes'],\n overlayPath,\n });\n\n const { packages, session } = apiContext;\n\n // Overwrite the exports of the app package to an empty object, since we only care about stories.\n packages.registerTransform(() => ({ definition, packagePath }) => {\n if (slash(appPath) === slash(packagePath)) {\n return { ...definition, exports: {} };\n }\n });\n\n // Make sure the package has a valid definition.\n const definition = await packages.get(appPath);\n if (!definition?.name || !definition.version) {\n throw new Error(`The package.json at \"${appPath}\" did not have a name and/or version.`);\n }\n\n // TODO: Get options and enable this.\n // Increment the session version if caching is disabled.\n // if (options.cache === false) {\n // session.incrementSessionVersion();\n // }\n\n // Set shared telemetry attributes which will be sent with all telemetry events.\n telemetryClient.setSharedSpanAttribute('sessionId', session.id);\n\n // TODO: Get options and enable this.\n // if (options.logResolveMap) {\n // // Write the resolve map to disk.\n // await writeJson(path.join(appPath, 'resolve-map.json'), session.resolveMap);\n // }\n\n // Storybook set up is mostly done here.\n const generated = await generateIframeHtml(options, { packages, session });\n await fsExtra.ensureDir(getLocalCachePath(appPath));\n\n // TODO: Currently saving it to disk as the config only accepts a path.\n const iFramePath = path.join(getLocalCachePath(appPath), 'iframe.html');\n await fsPromises.writeFile(iFramePath, generated, { encoding: 'utf-8' });\n\n // iFrame script is required for storybook to work.\n config.devServer ??= {};\n config.routes ??= [];\n config.routes.push({\n match: '/iframe.html',\n renderScript: iFramePath,\n });\n\n // Add an exports entry for each story file\n const exports = await getExportsMap({ packagePath: appPath }, { packages, config: session.config });\n const stories = await listStories(options);\n\n for (const story of stories) {\n const importPath = normalizeRelativePath(path.relative(appPath, story));\n await addExportsMapEntry(\n { exports, packagePath: appPath, importPath, filePath: importPath },\n { packages, config: session.config },\n );\n }\n\n const { createCloudpackServer } = await import('@ms-cloudpack/api-server');\n\n // Start api server for tracking status and handling remote requests.\n servers.apiServer = await createCloudpackServer(apiContext);\n\n // Kick off bundling app package as soon as api server is ready.\n void ensurePackageBundled({\n input: { name: definition.name, version: definition.version },\n ctx: apiContext,\n });\n\n // Start bundle and app servers for hosting the app.\n const { appServer, bundleServer } = await startServers(\n {\n definition,\n server: devServer,\n // TODO: Get options and enable this.\n bundleServerOptions: { disableCache: false },\n },\n apiContext,\n );\n servers.appServer = appServer;\n servers.bundleServer = bundleServer;\n\n router.use(appServer.app);\n\n // TODO: Figure out if it is possible to know when browser will open.\n // performance.measure(PerfMeasurementOpenBrowser, PerfMarkerCliEntry);\n\n return {\n bail,\n totalTime: process.hrtime(startTime),\n };\n};\n\nexport const build: CloudpackBuilder['build'] = () => {\n console.log('Cloudpack Storybook build is not implemented yet.');\n process.exit(1);\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/storybook-builder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "A tool for building storybook bundles for the cloudpack ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -22,16 +22,15 @@
|
|
|
22
22
|
"lint": "cloudpack-scripts lint"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@ms-cloudpack/api-server": "^0.48.
|
|
26
|
-
"@ms-cloudpack/app-server": "^0.14.
|
|
27
|
-
"@ms-cloudpack/common-types": "^0.
|
|
28
|
-
"@ms-cloudpack/config": "^0.
|
|
29
|
-
"@ms-cloudpack/create-express-app": "^1.7.
|
|
30
|
-
"@ms-cloudpack/
|
|
31
|
-
"@ms-cloudpack/
|
|
32
|
-
"@ms-cloudpack/package-utilities": "^9.0.1",
|
|
25
|
+
"@ms-cloudpack/api-server": "^0.48.8",
|
|
26
|
+
"@ms-cloudpack/app-server": "^0.14.3",
|
|
27
|
+
"@ms-cloudpack/common-types": "^0.16.0",
|
|
28
|
+
"@ms-cloudpack/config": "^0.26.1",
|
|
29
|
+
"@ms-cloudpack/create-express-app": "^1.7.4",
|
|
30
|
+
"@ms-cloudpack/overlay": "^0.17.51",
|
|
31
|
+
"@ms-cloudpack/package-utilities": "^9.0.2",
|
|
33
32
|
"@ms-cloudpack/path-string-parsing": "^1.2.4",
|
|
34
|
-
"@ms-cloudpack/path-utilities": "^2.7.
|
|
33
|
+
"@ms-cloudpack/path-utilities": "^2.7.33",
|
|
35
34
|
"@ms-cloudpack/task-reporter": "^0.14.4",
|
|
36
35
|
"@ms-cloudpack/telemetry": "^0.6.1",
|
|
37
36
|
"@storybook/core-common": "^7.0.0",
|
|
@@ -39,10 +38,11 @@
|
|
|
39
38
|
"@storybook/preview": "^7.0.0",
|
|
40
39
|
"@storybook/preview-api": "^7.0.0",
|
|
41
40
|
"fast-glob": "^3.2.12",
|
|
42
|
-
"fs-extra": "^11.2.0"
|
|
41
|
+
"fs-extra": "^11.2.0",
|
|
42
|
+
"ts-dedent": "^2.2.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@ms-cloudpack/common-types": "^0.
|
|
45
|
+
"@ms-cloudpack/common-types": "^0.16.0",
|
|
46
46
|
"@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
|
|
47
47
|
"@ms-cloudpack/scripts": "^0.0.1",
|
|
48
48
|
"@storybook/types": "^7.0.0"
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Options } from '@storybook/types';
|
|
2
|
-
import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';
|
|
3
|
-
import type { Session } from '@ms-cloudpack/api-server';
|
|
4
|
-
export declare function generateIframeScriptCode(options: Options, context: {
|
|
5
|
-
packages: PackageDefinitionsCache;
|
|
6
|
-
session: Session;
|
|
7
|
-
}): Promise<string>;
|
|
8
|
-
//# sourceMappingURL=generateIframeScriptCode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateIframeScriptCode.d.ts","sourceRoot":"","sources":["../src/generateIframeScriptCode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,kBAAkB,CAAC;AAInE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGxD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,mBAwGjE"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/lib/builder-vite/src/codegen-iframe-script.ts
|
|
2
|
-
import { getRendererName } from '@storybook/core-common';
|
|
3
|
-
import { processPreviewAnnotation } from './utils/processPreviewAnnotation.js';
|
|
4
|
-
import { generatePreviewEntryCode } from './generatePreviewEntryCode.js';
|
|
5
|
-
import { generateVirtualStoryEntryCode } from './generateVirtualStoryEntryCode.js';
|
|
6
|
-
// TODO: Work in progress, not needed right now as it is not part of storyStoreV7.
|
|
7
|
-
export async function generateIframeScriptCode(options, context) {
|
|
8
|
-
const { presets } = options;
|
|
9
|
-
const rendererName = await getRendererName(options);
|
|
10
|
-
const previewAnnotations = await presets.apply('previewAnnotations', [], options);
|
|
11
|
-
const configEntries = await Promise.all([...previewAnnotations].filter(Boolean).map((path) => processPreviewAnnotation(path, context)));
|
|
12
|
-
const filesToImport = (files, name) => files.map((el, i) => `import ${name ? `* as ${name}_${i} from ` : ''}'${el}'`).join('\n');
|
|
13
|
-
const importArray = (name, length) => new Array(length).fill(0).map((_, i) => `${name}_${i}`);
|
|
14
|
-
// noinspection UnnecessaryLocalVariableJS
|
|
15
|
-
/** @todo Inline variable and remove `noinspection` */
|
|
16
|
-
// language=JavaScript
|
|
17
|
-
const code = `
|
|
18
|
-
// Ensure that the client API is initialized by the framework before any other iframe code
|
|
19
|
-
// is loaded. That way our client-apis can assume the existence of the API+store
|
|
20
|
-
import { configure } from '${rendererName}';
|
|
21
|
-
|
|
22
|
-
import { logger } from '@storybook/client-logger';
|
|
23
|
-
import * as previewApi from "@storybook/preview-api";
|
|
24
|
-
${filesToImport(configEntries, 'config')}
|
|
25
|
-
|
|
26
|
-
${generatePreviewEntryCode(options)};
|
|
27
|
-
${await generateVirtualStoryEntryCode(options, context)};
|
|
28
|
-
|
|
29
|
-
const {
|
|
30
|
-
addDecorator,
|
|
31
|
-
addParameters,
|
|
32
|
-
addLoader,
|
|
33
|
-
addArgs,
|
|
34
|
-
addArgTypes,
|
|
35
|
-
addStepRunner,
|
|
36
|
-
addArgTypesEnhancer,
|
|
37
|
-
addArgsEnhancer,
|
|
38
|
-
setGlobalRender,
|
|
39
|
-
} = previewApi;
|
|
40
|
-
|
|
41
|
-
const configs = [${importArray('config', configEntries.length).concat('preview.default').join(',')}].filter(Boolean)
|
|
42
|
-
|
|
43
|
-
configs.map(config => config.default ? config.default : config).forEach(config => {
|
|
44
|
-
Object.keys(config).forEach((key) => {
|
|
45
|
-
const value = config[key];
|
|
46
|
-
switch (key) {
|
|
47
|
-
case 'args': {
|
|
48
|
-
return addArgs(value);
|
|
49
|
-
}
|
|
50
|
-
case 'argTypes': {
|
|
51
|
-
return addArgTypes(value);
|
|
52
|
-
}
|
|
53
|
-
case 'decorators': {
|
|
54
|
-
return value.forEach((decorator) => addDecorator(decorator, false));
|
|
55
|
-
}
|
|
56
|
-
case 'loaders': {
|
|
57
|
-
return value.forEach((loader) => addLoader(loader, false));
|
|
58
|
-
}
|
|
59
|
-
case 'parameters': {
|
|
60
|
-
return addParameters({ ...value }, false);
|
|
61
|
-
}
|
|
62
|
-
case 'argTypesEnhancers': {
|
|
63
|
-
return value.forEach((enhancer) => addArgTypesEnhancer(enhancer));
|
|
64
|
-
}
|
|
65
|
-
case 'argsEnhancers': {
|
|
66
|
-
return value.forEach((enhancer) => addArgsEnhancer(enhancer))
|
|
67
|
-
}
|
|
68
|
-
case 'render': {
|
|
69
|
-
return setGlobalRender(value)
|
|
70
|
-
}
|
|
71
|
-
case 'globals':
|
|
72
|
-
case 'globalTypes': {
|
|
73
|
-
const v = {};
|
|
74
|
-
v[key] = value;
|
|
75
|
-
return addParameters(v, false);
|
|
76
|
-
}
|
|
77
|
-
case 'decorateStory':
|
|
78
|
-
case 'applyDecorators':
|
|
79
|
-
case 'renderToDOM': // deprecated
|
|
80
|
-
case 'renderToCanvas': {
|
|
81
|
-
return null; // This key is not handled directly in v6 mode.
|
|
82
|
-
}
|
|
83
|
-
case 'runStep': {
|
|
84
|
-
return addStepRunner(value);
|
|
85
|
-
}
|
|
86
|
-
default: {
|
|
87
|
-
// eslint-disable-next-line prefer-template
|
|
88
|
-
return console.log(key + ' was not supported :( !');
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
/* TODO: not quite sure what to do with this, to fix HMR
|
|
95
|
-
if (import.meta.hot) {
|
|
96
|
-
import.meta.hot.accept();
|
|
97
|
-
}
|
|
98
|
-
*/
|
|
99
|
-
|
|
100
|
-
configStories(configure);
|
|
101
|
-
`.trim();
|
|
102
|
-
return code;
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=generateIframeScriptCode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateIframeScriptCode.js","sourceRoot":"","sources":["../src/generateIframeScriptCode.ts"],"names":[],"mappings":"AAAA,mHAAmH;AAEnH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAInF,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAgB,EAChB,OAAgE;IAEhE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAsB,oBAAoB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvG,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,CAAC,GAAG,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAC/F,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,IAAY,EAAE,EAAE,CACtD,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5F,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAE9G,0CAA0C;IAC1C,sDAAsD;IACtD,sBAAsB;IACtB,MAAM,IAAI,GAAG;;;iCAGkB,YAAY;;;;MAIvC,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC;;MAEtC,wBAAwB,CAAC,OAAO,CAAC;MACjC,MAAM,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC;;;;;;;;;;;;;;uBAcpC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4DjG,CAAC,IAAI,EAAE,CAAC;IACX,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/lib/builder-vite/src/codegen-iframe-script.ts\n\nimport { getRendererName } from '@storybook/core-common';\nimport type { Options, PreviewAnnotation } from '@storybook/types';\nimport { processPreviewAnnotation } from './utils/processPreviewAnnotation.js';\nimport { generatePreviewEntryCode } from './generatePreviewEntryCode.js';\nimport { generateVirtualStoryEntryCode } from './generateVirtualStoryEntryCode.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport type { Session } from '@ms-cloudpack/api-server';\n\n// TODO: Work in progress, not needed right now as it is not part of storyStoreV7.\nexport async function generateIframeScriptCode(\n options: Options,\n context: { packages: PackageDefinitionsCache; session: Session },\n) {\n const { presets } = options;\n const rendererName = await getRendererName(options);\n\n const previewAnnotations = await presets.apply<PreviewAnnotation[]>('previewAnnotations', [], options);\n const configEntries = await Promise.all(\n [...previewAnnotations].filter(Boolean).map((path) => processPreviewAnnotation(path, context)),\n );\n\n const filesToImport = (files: string[], name: string) =>\n files.map((el, i) => `import ${name ? `* as ${name}_${i} from ` : ''}'${el}'`).join('\\n');\n\n const importArray = (name: string, length: number) => new Array(length).fill(0).map((_, i) => `${name}_${i}`);\n\n // noinspection UnnecessaryLocalVariableJS\n /** @todo Inline variable and remove `noinspection` */\n // language=JavaScript\n const code = `\n // Ensure that the client API is initialized by the framework before any other iframe code\n // is loaded. That way our client-apis can assume the existence of the API+store\n import { configure } from '${rendererName}';\n\n import { logger } from '@storybook/client-logger';\n import * as previewApi from \"@storybook/preview-api\";\n ${filesToImport(configEntries, 'config')}\n\n ${generatePreviewEntryCode(options)};\n ${await generateVirtualStoryEntryCode(options, context)};\n\n const {\n addDecorator,\n addParameters,\n addLoader,\n addArgs,\n addArgTypes,\n addStepRunner,\n addArgTypesEnhancer,\n addArgsEnhancer,\n setGlobalRender,\n } = previewApi;\n\n const configs = [${importArray('config', configEntries.length).concat('preview.default').join(',')}].filter(Boolean)\n\n configs.map(config => config.default ? config.default : config).forEach(config => {\n Object.keys(config).forEach((key) => {\n const value = config[key];\n switch (key) {\n case 'args': {\n return addArgs(value);\n }\n case 'argTypes': {\n return addArgTypes(value);\n }\n case 'decorators': {\n return value.forEach((decorator) => addDecorator(decorator, false));\n }\n case 'loaders': {\n return value.forEach((loader) => addLoader(loader, false));\n }\n case 'parameters': {\n return addParameters({ ...value }, false);\n }\n case 'argTypesEnhancers': {\n return value.forEach((enhancer) => addArgTypesEnhancer(enhancer));\n }\n case 'argsEnhancers': {\n return value.forEach((enhancer) => addArgsEnhancer(enhancer))\n }\n case 'render': {\n return setGlobalRender(value)\n }\n case 'globals':\n case 'globalTypes': {\n const v = {};\n v[key] = value;\n return addParameters(v, false);\n }\n case 'decorateStory':\n case 'applyDecorators':\n case 'renderToDOM': // deprecated\n case 'renderToCanvas': {\n return null; // This key is not handled directly in v6 mode.\n }\n case 'runStep': {\n return addStepRunner(value);\n }\n default: {\n // eslint-disable-next-line prefer-template\n return console.log(key + ' was not supported :( !');\n }\n }\n });\n })\n\n /* TODO: not quite sure what to do with this, to fix HMR\n if (import.meta.hot) {\n import.meta.hot.accept();\n }\n */\n\n configStories(configure);\n `.trim();\n return code;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generatePreviewEntryCode.d.ts","sourceRoot":"","sources":["../src/generatePreviewEntryCode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,MAAM,CAKvE"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { slash } from '@ms-cloudpack/path-string-parsing';
|
|
2
|
-
import { loadPreviewOrConfigFile } from '@storybook/core-common';
|
|
3
|
-
export function generatePreviewEntryCode({ configDir }) {
|
|
4
|
-
const previewFile = loadPreviewOrConfigFile({ configDir });
|
|
5
|
-
if (!previewFile)
|
|
6
|
-
return '';
|
|
7
|
-
return `import * as preview from '${slash(previewFile)}';`;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=generatePreviewEntryCode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generatePreviewEntryCode.js","sourceRoot":"","sources":["../src/generatePreviewEntryCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,UAAU,wBAAwB,CAAC,EAAE,SAAS,EAAW;IAC7D,MAAM,WAAW,GAAG,uBAAuB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE5B,OAAO,6BAA6B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AAC7D,CAAC","sourcesContent":["import { slash } from '@ms-cloudpack/path-string-parsing';\nimport { loadPreviewOrConfigFile } from '@storybook/core-common';\nimport type { Options } from '@storybook/types';\n\nexport function generatePreviewEntryCode({ configDir }: Options): string {\n const previewFile = loadPreviewOrConfigFile({ configDir });\n if (!previewFile) return '';\n\n return `import * as preview from '${slash(previewFile)}';`;\n}\n"]}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Options } from '@storybook/types';
|
|
2
|
-
import type { Session } from '@ms-cloudpack/api-server';
|
|
3
|
-
export declare function generateVirtualStoryEntryCode(options: Options, context: {
|
|
4
|
-
session: Session;
|
|
5
|
-
}): Promise<string>;
|
|
6
|
-
//# sourceMappingURL=generateVirtualStoryEntryCode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateVirtualStoryEntryCode.d.ts","sourceRoot":"","sources":["../src/generateVirtualStoryEntryCode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMxD,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBpH"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-entries.ts
|
|
2
|
-
import { listStories } from './listStories.js';
|
|
3
|
-
import { slash } from '@ms-cloudpack/path-string-parsing';
|
|
4
|
-
const absoluteFilesToImport = (files, name) => files.map((el, i) => `import ${name ? `* as ${name}_${i} from ` : ''}'/@fs/${slash(el)}'`).join('\n');
|
|
5
|
-
// TODO: Work in progress, not needed right now as it is not part of storyStoreV7.
|
|
6
|
-
export async function generateVirtualStoryEntryCode(options, context) {
|
|
7
|
-
const { appPath } = context.session.config;
|
|
8
|
-
const storyEntries = await listStories(options);
|
|
9
|
-
const resolveMap = storyEntries.reduce((prev, entry) => ({ ...prev, [entry]: entry.replace(slash(appPath), '.') }), {});
|
|
10
|
-
const modules = storyEntries.map((entry, i) => `${JSON.stringify(entry)}: story_${i}`).join(',');
|
|
11
|
-
return `
|
|
12
|
-
${absoluteFilesToImport(storyEntries, 'story')}
|
|
13
|
-
|
|
14
|
-
function loadable(key) {
|
|
15
|
-
return {${modules}}[key];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
Object.assign(loadable, {
|
|
19
|
-
keys: () => (${JSON.stringify(Object.keys(resolveMap))}),
|
|
20
|
-
resolve: (key) => (${JSON.stringify(resolveMap)}[key])
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
configStories(configure) {
|
|
24
|
-
configure(loadable, { hot: import.meta.hot }, false);
|
|
25
|
-
}
|
|
26
|
-
`.trim();
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=generateVirtualStoryEntryCode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateVirtualStoryEntryCode.js","sourceRoot":"","sources":["../src/generateVirtualStoryEntryCode.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAGlH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAG1D,MAAM,qBAAqB,GAAG,CAAC,KAAe,EAAE,IAAY,EAAE,EAAE,CAC9D,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAExG,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,OAAgB,EAAE,OAA6B;IACjG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CACpC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAC3E,EAAE,CACH,CAAC;IACF,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjG,OAAO;MACH,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC;;;gBAGlC,OAAO;;;;qBAIF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;2BACjC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;;;;;GAMlD,CAAC,IAAI,EAAE,CAAC;AACX,CAAC","sourcesContent":["// based on https://github.com/storybookjs/storybook/blob/v7.6.5/code/builders/builder-vite/src/codegen-entries.ts\n\nimport type { Options } from '@storybook/types';\nimport { listStories } from './listStories.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport type { Session } from '@ms-cloudpack/api-server';\n\nconst absoluteFilesToImport = (files: string[], name: string) =>\n files.map((el, i) => `import ${name ? `* as ${name}_${i} from ` : ''}'/@fs/${slash(el)}'`).join('\\n');\n\n// TODO: Work in progress, not needed right now as it is not part of storyStoreV7.\nexport async function generateVirtualStoryEntryCode(options: Options, context: { session: Session }): Promise<string> {\n const { appPath } = context.session.config;\n const storyEntries = await listStories(options);\n const resolveMap = storyEntries.reduce<Record<string, string>>(\n (prev, entry) => ({ ...prev, [entry]: entry.replace(slash(appPath), '.') }),\n {},\n );\n const modules = storyEntries.map((entry, i) => `${JSON.stringify(entry)}: story_${i}`).join(',');\n\n return `\n ${absoluteFilesToImport(storyEntries, 'story')}\n\n function loadable(key) {\n return {${modules}}[key];\n }\n\n Object.assign(loadable, {\n keys: () => (${JSON.stringify(Object.keys(resolveMap))}),\n resolve: (key) => (${JSON.stringify(resolveMap)}[key])\n });\n\n configStories(configure) {\n configure(loadable, { hot: import.meta.hot }, false);\n }\n `.trim();\n}\n"]}
|