@storybook/vue3-vite 9.1.3 → 9.1.4

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/index.d.ts CHANGED
@@ -18,9 +18,11 @@ type FrameworkOptions = {
18
18
  * "vue-component-meta" will become the new default in the future and "vue-docgen-api" will be
19
19
  * removed.
20
20
  *
21
+ * Set to `false` to disable docgen processing entirely for improved build performance.
22
+ *
21
23
  * @default 'vue-docgen-api'
22
24
  */
23
- docgen?: VueDocgenPlugin | {
25
+ docgen?: boolean | VueDocgenPlugin | {
24
26
  plugin: 'vue-component-meta';
25
27
  /**
26
28
  * Tsconfig filename to use. Should be set if your main `tsconfig.json` includes references
package/dist/preset.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var preset_exports={};__export(preset_exports,{core:()=>core,viteFinal:()=>viteFinal});module.exports=__toCommonJS(preset_exports);var import_node_path2=require("path");var import_promises=require("fs/promises"),import_node_path=require("path"),import_common=require("storybook/internal/common"),import_magic_string=__toESM(require("magic-string")),import_vue_component_meta=require("vue-component-meta"),import_vue_docgen_api=require("vue-docgen-api");async function vueComponentMeta(tsconfigPath="tsconfig.json"){let{createFilter}=await import("vite"),filter=createFilter(/\.(vue|ts|js|tsx|jsx)$/,/\.stories\.(ts|tsx|js|jsx)$|^\0\/virtual:|^\/virtual:|\.storybook\/.*\.(ts|js)$/),checker=await createVueComponentMetaChecker(tsconfigPath);return{name:"storybook:vue-component-meta-plugin",async transform(src,id){if(filter(id))try{let exportNames=checker.getExportNames(id),componentsMeta=exportNames.map(name=>checker.getComponentMeta(id,name));componentsMeta=await applyTempFixForEventDescriptions(id,componentsMeta);let metaSources=[];if(componentsMeta.forEach((meta,index)=>{if(!meta.props.length&&!meta.events.length&&!meta.slots.length&&!meta.exposed.length||meta.type===import_vue_component_meta.TypeMeta.Unknown)return;let exportName=exportNames[index];["props","events","slots","exposed"].forEach(key=>{meta[key].forEach(value=>{Array.isArray(value.schema)?value.schema.forEach(eventSchema=>removeNestedSchemas(eventSchema)):removeNestedSchemas(value.schema)})});let exposed=meta.exposed.filter(expose=>{let nameWithoutOnPrefix=expose.name;return nameWithoutOnPrefix.startsWith("on")&&(nameWithoutOnPrefix=lowercaseFirstLetter(expose.name.replace("on",""))),!meta.events.find(event=>event.name===nameWithoutOnPrefix)}).filter(expose=>expose.name==="$slots"?!meta.slots.map(slot=>slot.name).every(slotName=>expose.type.includes(slotName)):!0);metaSources.push({exportName,displayName:exportName==="default"?getFilenameWithoutExtension(id):exportName,...meta,exposed,sourceFiles:id})}),metaSources.length===0)return;let s=new import_magic_string.default(src);return metaSources.forEach(meta=>{let isDefaultExport=meta.exportName==="default",name=isDefaultExport?"_sfc_main":meta.exportName;new RegExp(`export {.*${name}.*}`).test(src)||new RegExp(`export \\* from ['"]\\S*${name}['"]`).test(src)||!src.includes(name)||(!id.endsWith(".vue")&&isDefaultExport&&(s.replace("export default ","const _sfc_main = "),s.append(`
2
2
  export default _sfc_main;`)),s.append(`
3
- ;${name}.__docgenInfo = ${JSON.stringify(meta)}`))}),{code:s.toString(),map:s.generateMap({hires:!0,source:id})}}catch{return}},async handleHotUpdate({file,read,server,modules,timestamp}){let content=await read();checker.updateFile(file,content);let invalidatedModules=new Set;for(let mod of modules)server.moduleGraph.invalidateModule(mod,invalidatedModules,timestamp,!0);return server.ws.send({type:"full-reload"}),[]}}}async function createVueComponentMetaChecker(tsconfigPath="tsconfig.json"){let checkerOptions={forceUseTs:!0,noDeclarations:!0,printer:{newLine:1}},projectRoot=(0,import_common.getProjectRoot)(),projectTsConfigPath=(0,import_node_path.join)(projectRoot,tsconfigPath),defaultChecker=(0,import_vue_component_meta.createCheckerByJson)(projectRoot,{include:["**/*"]},checkerOptions);return await fileExists(projectTsConfigPath)?(await getTsConfigReferences(projectTsConfigPath)).length>0?defaultChecker:(0,import_vue_component_meta.createChecker)(projectTsConfigPath,checkerOptions):defaultChecker}function getFilenameWithoutExtension(filename){return(0,import_node_path.parse)(filename).name}function lowercaseFirstLetter(string){return string.charAt(0).toLowerCase()+string.slice(1)}async function fileExists(fullPath){try{return await(0,import_promises.stat)(fullPath),!0}catch{return!1}}async function applyTempFixForEventDescriptions(filename,componentMeta){if(!componentMeta.some(meta=>meta.events.length))return componentMeta;try{let parsedComponentDocs=await(0,import_vue_docgen_api.parseMulti)(filename);componentMeta.map((meta,index)=>{let eventsWithDescription=parsedComponentDocs[index].events;return!meta.events.length||!eventsWithDescription?.length||(meta.events=meta.events.map(event=>{let description=eventsWithDescription.find(i=>i.name===event.name)?.description;return description&&(event.description=description),event})),meta})}catch{}return componentMeta}async function getTsConfigReferences(tsConfigPath){try{let content=JSON.parse(await(0,import_promises.readFile)(tsConfigPath,"utf-8"));return!("references"in content)||!Array.isArray(content.references)?[]:content.references}catch{return[]}}function removeNestedSchemas(schema){if(typeof schema=="object"){if(schema.kind==="enum"){schema.schema?.forEach(enumSchema=>removeNestedSchemas(enumSchema));return}delete schema.schema}}var import_magic_string2=__toESM(require("magic-string")),import_vue_docgen_api2=require("vue-docgen-api");async function vueDocgen(){let{createFilter}=await import("vite"),filter=createFilter(/\.(vue)$/);return{name:"storybook:vue-docgen-plugin",async transform(src,id){if(!filter(id))return;let metaData=await(0,import_vue_docgen_api2.parse)(id),s=new import_magic_string2.default(src);return s.append(`;_sfc_main.__docgenInfo = ${JSON.stringify(metaData)}`),{code:s.toString(),map:s.generateMap({hires:!0,source:id})}}}}async function templateCompilation(){return{name:"storybook:vue-template-compilation",config:()=>({resolve:{alias:{vue:"vue/dist/vue.esm-bundler.js"}}})}}var getAbsolutePath=input=>(0,import_node_path2.dirname)(require.resolve((0,import_node_path2.join)(input,"package.json"))),core={builder:getAbsolutePath("@storybook/builder-vite"),renderer:getAbsolutePath("@storybook/vue3")},viteFinal=async(config,options)=>{let plugins=[await templateCompilation()],framework=await options.presets.apply("framework"),frameworkOptions=typeof framework=="string"?{}:framework.options??{},docgen=resolveDocgenOptions(frameworkOptions.docgen);docgen.plugin==="vue-component-meta"?plugins.push(await vueComponentMeta(docgen.tsconfig)):plugins.push(await vueDocgen());let{mergeConfig}=await import("vite");return mergeConfig(config,{plugins})},resolveDocgenOptions=docgen=>docgen?typeof docgen=="string"?{plugin:docgen}:docgen:{plugin:"vue-docgen-api"};0&&(module.exports={core,viteFinal});
3
+ ;${name}.__docgenInfo = ${JSON.stringify(meta)}`))}),{code:s.toString(),map:s.generateMap({hires:!0,source:id})}}catch{return}},async handleHotUpdate({file,read,server,modules,timestamp}){let content=await read();checker.updateFile(file,content);let invalidatedModules=new Set;for(let mod of modules)server.moduleGraph.invalidateModule(mod,invalidatedModules,timestamp,!0);return server.ws.send({type:"full-reload"}),[]}}}async function createVueComponentMetaChecker(tsconfigPath="tsconfig.json"){let checkerOptions={forceUseTs:!0,noDeclarations:!0,printer:{newLine:1}},projectRoot=(0,import_common.getProjectRoot)(),projectTsConfigPath=(0,import_node_path.join)(projectRoot,tsconfigPath),defaultChecker=(0,import_vue_component_meta.createCheckerByJson)(projectRoot,{include:["**/*"]},checkerOptions);return await fileExists(projectTsConfigPath)?(await getTsConfigReferences(projectTsConfigPath)).length>0?defaultChecker:(0,import_vue_component_meta.createChecker)(projectTsConfigPath,checkerOptions):defaultChecker}function getFilenameWithoutExtension(filename){return(0,import_node_path.parse)(filename).name}function lowercaseFirstLetter(string){return string.charAt(0).toLowerCase()+string.slice(1)}async function fileExists(fullPath){try{return await(0,import_promises.stat)(fullPath),!0}catch{return!1}}async function applyTempFixForEventDescriptions(filename,componentMeta){if(!componentMeta.some(meta=>meta.events.length))return componentMeta;try{let parsedComponentDocs=await(0,import_vue_docgen_api.parseMulti)(filename);componentMeta.map((meta,index)=>{let eventsWithDescription=parsedComponentDocs[index].events;return!meta.events.length||!eventsWithDescription?.length||(meta.events=meta.events.map(event=>{let description=eventsWithDescription.find(i=>i.name===event.name)?.description;return description&&(event.description=description),event})),meta})}catch{}return componentMeta}async function getTsConfigReferences(tsConfigPath){try{let content=JSON.parse(await(0,import_promises.readFile)(tsConfigPath,"utf-8"));return!("references"in content)||!Array.isArray(content.references)?[]:content.references}catch{return[]}}function removeNestedSchemas(schema){if(typeof schema=="object"){if(schema.kind==="enum"){schema.schema?.forEach(enumSchema=>removeNestedSchemas(enumSchema));return}delete schema.schema}}var import_magic_string2=__toESM(require("magic-string")),import_vue_docgen_api2=require("vue-docgen-api");async function vueDocgen(){let{createFilter}=await import("vite"),filter=createFilter(/\.(vue)$/);return{name:"storybook:vue-docgen-plugin",async transform(src,id){if(!filter(id))return;let metaData=await(0,import_vue_docgen_api2.parse)(id),s=new import_magic_string2.default(src);return s.append(`;_sfc_main.__docgenInfo = ${JSON.stringify(metaData)}`),{code:s.toString(),map:s.generateMap({hires:!0,source:id})}}}}async function templateCompilation(){return{name:"storybook:vue-template-compilation",config:()=>({resolve:{alias:{vue:"vue/dist/vue.esm-bundler.js"}}})}}var getAbsolutePath=input=>(0,import_node_path2.dirname)(require.resolve((0,import_node_path2.join)(input,"package.json"))),core={builder:getAbsolutePath("@storybook/builder-vite"),renderer:getAbsolutePath("@storybook/vue3")},viteFinal=async(config,options)=>{let plugins=[await templateCompilation()],framework=await options.presets.apply("framework"),frameworkOptions=typeof framework=="string"?{}:framework.options??{},docgen=resolveDocgenOptions(frameworkOptions.docgen);docgen!==!1&&(docgen.plugin==="vue-component-meta"?plugins.push(await vueComponentMeta(docgen.tsconfig)):plugins.push(await vueDocgen()));let{mergeConfig}=await import("vite");return mergeConfig(config,{plugins})},resolveDocgenOptions=docgen=>docgen===!1?!1:docgen===void 0||docgen===!0?{plugin:"vue-docgen-api"}:typeof docgen=="string"?{plugin:docgen}:docgen;0&&(module.exports={core,viteFinal});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/vue3-vite",
3
- "version": "9.1.3",
3
+ "version": "9.1.4",
4
4
  "description": "Storybook for Vue3 and Vite: Develop, document, and test UI components in isolation",
5
5
  "keywords": [
6
6
  "storybook",
@@ -64,8 +64,8 @@
64
64
  "prep": "jiti ../../../scripts/prepare/bundle.ts"
65
65
  },
66
66
  "dependencies": {
67
- "@storybook/builder-vite": "9.1.3",
68
- "@storybook/vue3": "9.1.3",
67
+ "@storybook/builder-vite": "9.1.4",
68
+ "@storybook/vue3": "9.1.4",
69
69
  "find-package-json": "^1.2.0",
70
70
  "magic-string": "^0.30.0",
71
71
  "typescript": "^5.8.3",
@@ -79,7 +79,7 @@
79
79
  "vite": "^6.2.5"
80
80
  },
81
81
  "peerDependencies": {
82
- "storybook": "^9.1.3",
82
+ "storybook": "^9.1.4",
83
83
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
84
84
  },
85
85
  "engines": {