@storybook/addon-svelte-csf
Version:
Allows to write stories in Svelte syntax
48 lines (47 loc) • 2.22 kB
JavaScript
import { parseForIndexer } from './parser.js';
import { GetDefineMetaFirstArgumentError, IndexerParseError, MissingModuleTagError, NoStoryComponentDestructuredError, } from '../utils/error/parser/extract/svelte.js';
import { LegacyTemplateNotEnabledError } from '../utils/error/legacy-api/index.js';
import { NoDestructuredDefineMetaCallError } from '../utils/error/parser/analyse/define-meta.js';
import { isStorybookSvelteCSFError } from '../utils/error.js';
import { SVELTE_CSF_V4_TAG, SVELTE_CSF_V5_TAG } from '../constants.js';
export const createIndexer = (legacyTemplate) => ({
test: /\.svelte$/,
createIndex: async (filename, { makeTitle }) => {
try {
const { meta, stories, isLegacy } = await parseForIndexer(filename, {
legacyTemplate,
});
return stories.map((story) => {
return {
type: 'story',
importPath: filename,
exportName: story.exportName,
name: story.name,
title: makeTitle(meta.title),
tags: [
...(meta.tags ?? []),
...(story.tags ?? []),
isLegacy ? SVELTE_CSF_V4_TAG : SVELTE_CSF_V5_TAG,
],
};
});
}
catch (error) {
if (
// NOTE: Those errors are hand-picked from what might be thrown in `./parser.ts`
// and are related to using legacy API.
error instanceof MissingModuleTagError ||
error instanceof NoDestructuredDefineMetaCallError ||
error instanceof NoStoryComponentDestructuredError ||
error instanceof GetDefineMetaFirstArgumentError) {
const { filename } = error;
throw new LegacyTemplateNotEnabledError(filename, { cause: error });
}
// WARN: We can't use `instanceof StorybookSvelteCSFError`, because is an _abstract_ class
if (isStorybookSvelteCSFError(error)) {
throw error;
}
throw new IndexerParseError({ cause: error });
}
},
});