import type { PluginCommand } from 'histoire'
import fs from 'node:fs'
import launchEditor from 'launch-editor'
import path from 'pathe'
export default {
id: 'histoire:plugin-svelte:generate-story',
label: 'Generate Svelte 3 story from component',
icon: 'https://svelte.dev/favicon.png',
searchText: 'generate create',
async serverAction(params) {
const targetFile = path.join(path.dirname(params.component), params.fileName)
if (fs.existsSync(targetFile)) {
throw new Error(`File ${targetFile} already exists`)
}
const { component, componentName, isTs } = await getComponentInfo(params.component)
const content = `
<${componentName} />
`
await fs.promises.writeFile(targetFile, content, 'utf-8')
launchEditor(targetFile)
},
clientSetupFile: '@histoire/plugin-svelte/dist/commands/generate-story.client.js',
} as PluginCommand
async function isComponentTs(component: string) {
const componentContent = await fs.promises.readFile(component, 'utf-8')
return componentContent.includes('lang="ts"')
}
async function getComponentInfo(file: string) {
const component = path.basename(file)
const componentName = component.replace(path.extname(component), '')
const isTs = await isComponentTs(file)
return {
component,
componentName,
isTs,
}
}