UNPKG

@storybook/addon-svelte-csf

Version:
61 lines (60 loc) 2.49 kB
import { print } from 'esrap'; import MagicString from 'magic-string'; import { createExportOrderVariableDeclaration } from './appendix/create-export-order.js'; import { createRuntimeStoriesImport } from './appendix/create-import.js'; import { createVariableFromRuntimeStoriesCall } from './appendix/create-variable-from-runtime-stories-call.js'; import { createNamedExportStories } from './appendix/create-named-export-stories.js'; import { STORYBOOK_META_IDENTIFIER } from '../../constants.js'; import { createASTIdentifier } from '../../parser/ast.js'; import { getStoriesIdentifiers } from '../../parser/analyse/story/attributes/identifiers.js'; import { createRuntimeStoryVariableDeclaration } from './appendix/create-runtime-story-variable-declaration.js'; export async function createAppendix(params) { const { code, nodes, filename } = params; const { compiled, svelte } = nodes; const { storiesFunctionDeclaration } = compiled; const storiesIdentifiers = getStoriesIdentifiers({ nodes: svelte, filename, }); const variableFromRuntimeStoriesCall = createVariableFromRuntimeStoriesCall({ storiesFunctionDeclaration, filename, }); const storiesVariableDeclarations = storiesIdentifiers.map(({ exportName }, idx) => createRuntimeStoryVariableDeclaration({ exportName, filename, nodes: { variable: variableFromRuntimeStoriesCall, tags: getStoryTags({ storyComponents: params.nodes.svelte.storyComponents, idx, }), }, })); const appendix = print({ type: 'Program', sourceType: 'module', body: [ createRuntimeStoriesImport(), variableFromRuntimeStoriesCall, createExportDefaultMeta(), createExportOrderVariableDeclaration({ storiesIdentifiers, filename }), ...storiesVariableDeclarations, createNamedExportStories({ storiesIdentifiers }), ], }); code.append('\n' + appendix.code); } function createExportDefaultMeta() { return { type: 'ExportDefaultDeclaration', declaration: createASTIdentifier(STORYBOOK_META_IDENTIFIER), }; } function getStoryTags(params) { const storyComponent = params.storyComponents[params.idx]; const tags = storyComponent.component.attributes.find((a) => a.name === 'tags'); if (!tags) return; return tags.value.expression; }