@basmilius/vite-preset 3.12.0 → 3.13.0
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.mts +1 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/composeLibrary.ts +6 -0
- package/src/preset.ts +25 -19
package/dist/index.d.mts
CHANGED
|
@@ -22,6 +22,7 @@ type ComposePlugin = () => Plugin;
|
|
|
22
22
|
type PathGenerator = (name: string) => string;
|
|
23
23
|
type Options$1 = {
|
|
24
24
|
readonly alias: string;
|
|
25
|
+
readonly autoConfigureTsconfig?: boolean;
|
|
25
26
|
readonly isolated?: boolean;
|
|
26
27
|
readonly name: string;
|
|
27
28
|
readonly sourcesPathGenerator?: PathGenerator;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/advancedAppChunk.ts","../src/advancedLibraryChunk.ts","../src/closeBundle.ts","../src/composeLibrary.ts","../src/preset.ts","../src/libraries.ts"],"mappings":";;;KAAK,eAAA;EAAA,SACQ,IAAA;EAAA,SACA,IAAA,GAAO,QAAA;AAAA;AAAA,cAGpB,QAAA,GAAgB,IAAA,UAAc,SAAA,eAAsB,eAAA;;;KCL/C,aAAA;EAAA,SACQ,IAAA;EAAA,SACA,IAAA,GAAO,QAAA;AAAA;AAAA,cAGpB,UAAA,GAAgB,IAAA,UAAc,SAAA,eAAsB,aAAA;;;cCHpD,UAAA,QAAmB,MAAA;;;KCGd,aAAA,SAAsB,MAAA;AAAA,KACtB,aAAA,IAAiB,IAAA;AAAA,KAEjB,SAAA;EAAA,SACQ,KAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA;EAAA,SACA,oBAAA,GAAuB,aAAA;EAAA,SACvB,oBAAA,GAAuB,aAAA;AAAA;AAAA,cAMpC,UAAA,GAAgB,OAAA,EAAS,SAAA,KAAU,aAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/advancedAppChunk.ts","../src/advancedLibraryChunk.ts","../src/closeBundle.ts","../src/composeLibrary.ts","../src/preset.ts","../src/libraries.ts"],"mappings":";;;KAAK,eAAA;EAAA,SACQ,IAAA;EAAA,SACA,IAAA,GAAO,QAAA;AAAA;AAAA,cAGpB,QAAA,GAAgB,IAAA,UAAc,SAAA,eAAsB,eAAA;;;KCL/C,aAAA;EAAA,SACQ,IAAA;EAAA,SACA,IAAA,GAAO,QAAA;AAAA;AAAA,cAGpB,UAAA,GAAgB,IAAA,UAAc,SAAA,eAAsB,aAAA;;;cCHpD,UAAA,QAAmB,MAAA;;;KCGd,aAAA,SAAsB,MAAA;AAAA,KACtB,aAAA,IAAiB,IAAA;AAAA,KAEjB,SAAA;EAAA,SACQ,KAAA;EAAA,SACA,qBAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA;EAAA,SACA,oBAAA,GAAuB,aAAA;EAAA,SACvB,oBAAA,GAAuB,aAAA;AAAA;AAAA,cAMpC,UAAA,GAAgB,OAAA,EAAS,SAAA,KAAU,aAAA;;;KCX9B,OAAA;EAAA,SACQ,UAAA;IAAA,SACI,UAAA;IAAA,SACA,kBAAA,IAAsB,IAAA,UAAc,QAAA,UAAkB,GAAA;EAAA;EAAA,SAE1D,cAAA;EAAA,SACA,SAAA;EAAA,SACA,SAAA;EAAA,SACA,YAAA;AAAA;AAAA,cAgFb,UAAA,GAAgB,OAAA,GAAS,OAAA,KAAe,MAAA;;;KC9FnC,aAAA,SAAsB,MAAA;AAAA,cAEd,IAAA,EAAM,aAAA;AAAA,cAKN,aAAA,EAAe,aAAA;AAAA,cAKf,cAAA,EAAgB,aAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{existsSync as e,readFileSync as t,writeFileSync as n}from"node:fs";import{join as r,relative as i,resolve as a}from"node:path";import{searchForWorkspaceRoot as o}from"vite";import{camelCase as s,kebabCase as c}from"change-case";import{patchCssModules as l}from"vite-css-modules";import u from"css-class-generator";import d from"@laynezh/vite-plugin-lib-assets";import f from"vite-plugin-dts";var p=(e,t)=>({name:e,test:e=>!!t.find(t=>e.includes(`/src/${t}`))}),m=(e,t)=>({name:e,test:e=>!!t.find(t=>e.includes(`/node_modules/${t}/`))}),h=()=>({name:`@basmilius/vite-preset/close-bundle`,closeBundle(){process.exit(0)}});const g=[`tsconfig.app.json`,`tsconfig.json`],_=process.cwd();var v=s=>{let c=o(_),l=r(s.isolated?_:i(_,c),`node_modules`),u=s.sourcesPathGenerator??(e=>a(_,`${l}/${e}/src`)),d=s.tsAliasPathGenerator??(e=>`${l}/${e}/src/*`),f=u(s.name);return()=>({name:s.name,config:()=>({optimizeDeps:{exclude:[s.name]},resolve:{alias:{[s.name]:f,[s.alias]:f}},server:{fs:{allow:[f]}}}),configResolved(i){let a;for(let t of g){let n=r(i.root,t);if(e(n)){a=n;break}}a||(i.logger.error(`[${s.name}] A tsconfig.json is required for this library. Please create one.`),process.exit(1));let o=`${s.alias}/*`,c=t(a,{encoding:`utf-8`}),l=JSON.parse(c);l.compilerOptions.paths??={},!(o in l.compilerOptions.paths)
|
|
1
|
+
import{existsSync as e,readFileSync as t,writeFileSync as n}from"node:fs";import{join as r,relative as i,resolve as a}from"node:path";import{searchForWorkspaceRoot as o}from"vite";import{camelCase as s,kebabCase as c}from"change-case";import{patchCssModules as l}from"vite-css-modules";import u from"css-class-generator";import d from"@laynezh/vite-plugin-lib-assets";import f from"vite-plugin-dts";var p=(e,t)=>({name:e,test:e=>!!t.find(t=>e.includes(`/src/${t}`))}),m=(e,t)=>({name:e,test:e=>!!t.find(t=>e.includes(`/node_modules/${t}/`))}),h=()=>({name:`@basmilius/vite-preset/close-bundle`,closeBundle(){process.exit(0)}});const g=[`tsconfig.app.json`,`tsconfig.json`],_=process.cwd();var v=s=>{let c=o(_),l=r(s.isolated?_:i(_,c),`node_modules`),u=s.sourcesPathGenerator??(e=>a(_,`${l}/${e}/src`)),d=s.tsAliasPathGenerator??(e=>`${l}/${e}/src/*`),f=u(s.name);return()=>({name:s.name,config:()=>({optimizeDeps:{exclude:[s.name]},resolve:{alias:{[s.name]:f,[s.alias]:f}},server:{fs:{allow:[f]}}}),configResolved(i){let a;for(let t of g){let n=r(i.root,t);if(e(n)){a=n;break}}a||(i.logger.error(`[${s.name}] A tsconfig.json is required for this library. Please create one.`),process.exit(1));let o=`${s.alias}/*`,c=t(a,{encoding:`utf-8`}),l=JSON.parse(c);if(l.compilerOptions.paths??={},!(o in l.compilerOptions.paths)){if(s.autoConfigureTsconfig===!1){i.logger.warn(`[${s.name}] Path alias "${o}" is missing from tsconfig. Add it manually or set autoConfigureTsconfig: true.`);return}l.compilerOptions.paths[o]=[d(s.name)],n(a,JSON.stringify(l,null,4),{encoding:`utf-8`})}}})};const y=e=>{let t=[];function n(n){return n.startsWith(`i__const_`)&&(n=n.substring(9),n=n.substring(0,n.length-2)),e.cssModules?.classNames===`camel`?s(n):e.cssModules?.classNames===`kebab`?c(n):t.includes(n)?u(t.indexOf(n)):u(t.push(n)-1)}return{name:`@basmilius/vite-preset`,config:()=>({build:{assetsInlineLimit:0,cssMinify:e.isLibrary?!1:`lightningcss`,minify:e.isLibrary?!1:`oxc`,rolldownOptions:{output:{assetFileNames:e.fileNames===`actual`||e.isLibrary?void 0:`[hash].[ext]`,chunkFileNames:e.fileNames===`actual`||e.isLibrary?void 0:`[hash].js`,entryFileNames:e.fileNames===`actual`||e.isLibrary?void 0:`[hash].js`,minifyInternalExports:!0}}},css:{preprocessorMaxWorkers:!0,preprocessorOptions:{scss:{api:`modern-compiler`}},modules:{generateScopedName:e.cssModules?.generateScopedName??n}},json:{stringify:!0},resolve:{alias:{"@":a(process.cwd(),`./src`)},extensions:[`.js`,`.ts`,`.json`,`.vue`]},server:{fs:{allow:[o(process.cwd())]}}})}};var b=(e={})=>{let t=[l(),y(e)];return e.isLibrary&&(t.push(d({limit:0,name:e.assetFileNames??`[contenthash:8].[ext]`})),t.push(f({cleanVueFileName:!1,copyDtsFiles:!0,staticImport:!0,tsconfigPath:e.tsconfigPath}))),t};const x=v({name:`@flux-ui/components`,alias:`$flux`}),S=v({name:`@flux-ui/dashboard`,alias:`$fluxDashboard`}),C=v({name:`@flux-ui/statistics`,alias:`$fluxStatistics`});export{p as advancedAppChunk,m as advancedLibraryChunk,h as closeBundle,v as composeLibrary,x as flux,S as fluxDashboard,C as fluxStatistics,b as preset};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["composeLibrary"],"sources":["../src/advancedAppChunk.ts","../src/advancedLibraryChunk.ts","../src/closeBundle.ts","../src/composeLibrary.ts","../src/preset.ts","../src/libraries.ts"],"sourcesContent":["type AdvancedChunk = {\n readonly name: string;\n readonly test: (moduleId: string) => boolean;\n};\n\nexport default (name: string, moduleIds: string[]): AdvancedChunk => ({\n name: name,\n test: moduleId => !!moduleIds.find(module => moduleId.includes(`/src/${module}`))\n});\n","type AdvancedChunk = {\n readonly name: string;\n readonly test: (moduleId: string) => boolean;\n};\n\nexport default (name: string, moduleIds: string[]): AdvancedChunk => ({\n name: name,\n test: moduleId => !!moduleIds.find(module => moduleId.includes(`/node_modules/${module}/`))\n});\n","import type { Plugin } from 'vite';\n\nexport default (): Plugin => ({\n name: '@basmilius/vite-preset/close-bundle',\n\n closeBundle() {\n process.exit(0);\n }\n});\n","import { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, relative, resolve } from 'node:path';\nimport type { Plugin, UserConfig } from 'vite';\nimport { searchForWorkspaceRoot } from 'vite';\n\ntype ComposePlugin = () => Plugin;\ntype PathGenerator = (name: string) => string;\n\ntype Options = {\n readonly alias: string;\n readonly isolated?: boolean;\n readonly name: string;\n readonly sourcesPathGenerator?: PathGenerator;\n readonly tsAliasPathGenerator?: PathGenerator;\n};\n\nconst TSCONFIG_FILES = ['tsconfig.app.json', 'tsconfig.json'] as const;\nconst WORKING_DIR = process.cwd();\n\nexport default (options: Options): ComposePlugin => {\n const WORKSPACE_ROOT = searchForWorkspaceRoot(WORKING_DIR);\n const WORKSPACE_NODE_MODULES = join(options.isolated ? WORKING_DIR : relative(WORKING_DIR, WORKSPACE_ROOT), 'node_modules');\n\n const sourcesPathGenerator = options.sourcesPathGenerator ?? (name => resolve(WORKING_DIR, `${WORKSPACE_NODE_MODULES}/${name}/src`));\n const tsAliasPathGenerator = options.tsAliasPathGenerator ?? (name => `${WORKSPACE_NODE_MODULES}/${name}/src/*`);\n\n const src = sourcesPathGenerator(options.name);\n\n return (): Plugin => ({\n name: options.name,\n\n config: (): UserConfig => ({\n optimizeDeps: {\n exclude: [options.name]\n },\n resolve: {\n alias: {\n [options.name]: src,\n [options.alias]: src\n }\n },\n server: {\n fs: {\n allow: [src]\n }\n }\n }),\n\n configResolved(config): void {\n let tsconfigPath: string | undefined;\n\n for (const file of TSCONFIG_FILES) {\n const path = join(config.root, file);\n\n if (existsSync(path)) {\n tsconfigPath = path;\n break;\n }\n }\n\n if (!tsconfigPath) {\n config.logger.error(`[${options.name}] A tsconfig.json is required for this library. Please create one.`);\n process.exit(1);\n }\n\n const key = `${options.alias}/*`;\n const tsconfigData = readFileSync(tsconfigPath, {encoding: 'utf-8'});\n const tsconfig = JSON.parse(tsconfigData);\n tsconfig.compilerOptions.paths ??= {};\n\n if (key in tsconfig.compilerOptions.paths) {\n return;\n }\n\n tsconfig.compilerOptions.paths[key] = [tsAliasPathGenerator(options.name)];\n\n writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 4), {encoding: 'utf-8'});\n }\n });\n};\n","import { resolve } from 'node:path';\nimport { camelCase, kebabCase } from 'change-case';\nimport { patchCssModules } from 'vite-css-modules';\nimport type { Plugin } from 'vite';\nimport { searchForWorkspaceRoot } from 'vite';\nimport className from 'css-class-generator';\nimport libAssets from '@laynezh/vite-plugin-lib-assets';\nimport libDts from 'vite-plugin-dts';\n\nconst VISITED_CLASSES: string[] = [];\n\ntype Options = {\n readonly cssModules?: {\n readonly classNames?: 'mangled' | 'camel' | 'kebab';\n readonly generateScopedName?: (name: string, filename: string, css: string) => string;\n };\n readonly assetFileNames?: string;\n readonly fileNames?: 'hashes' | 'actual';\n readonly isLibrary?: boolean;\n readonly tsconfigPath?: string;\n};\n\nconst preset = (options: Options): Plugin => {\n function generateScopedName(name: string): string {\n if (name.startsWith('i__const_')) {\n name = name.substring(9);\n name = name.substring(0, name.length - 2);\n }\n\n if (options.cssModules?.classNames === 'camel') {\n return camelCase(name);\n }\n\n if (options.cssModules?.classNames === 'kebab') {\n return kebabCase(name);\n }\n\n if (VISITED_CLASSES.includes(name)) {\n return className(VISITED_CLASSES.indexOf(name));\n }\n\n return className(VISITED_CLASSES.push(name) - 1);\n }\n\n return {\n name: '@basmilius/vite-preset',\n\n config: () => ({\n build: {\n assetsInlineLimit: 0,\n cssMinify: options.isLibrary ? false : 'lightningcss',\n minify: options.isLibrary ? false : 'oxc',\n rolldownOptions: {\n output: {\n assetFileNames: options.fileNames === 'actual' || options.isLibrary ? undefined : '[hash].[ext]',\n chunkFileNames: options.fileNames === 'actual' || options.isLibrary ? undefined : '[hash].js',\n entryFileNames: options.fileNames === 'actual' || options.isLibrary ? undefined : '[hash].js',\n minifyInternalExports: true\n }\n }\n },\n css: {\n preprocessorMaxWorkers: true,\n preprocessorOptions: {\n scss: {\n api: 'modern-compiler'\n }\n },\n modules: {\n generateScopedName: options.cssModules?.generateScopedName ?? generateScopedName\n }\n },\n json: {\n stringify: true\n },\n resolve: {\n alias: {\n '@': resolve(process.cwd(), './src')\n },\n extensions: [\n '.js',\n '.ts',\n '.json',\n '.vue'\n ]\n },\n server: {\n fs: {\n allow: [\n searchForWorkspaceRoot(process.cwd())\n ]\n }\n }\n })\n };\n};\n\nexport default (options: Options = {}): Plugin[] => [\n patchCssModules() as unknown as Plugin,\n preset(options),\n\n (options.isLibrary && libAssets({\n limit: 0,\n name: options.assetFileNames ?? '[contenthash:8].[ext]'\n })) as unknown as Plugin,\n\n (options.isLibrary && libDts({\n cleanVueFileName: false,\n copyDtsFiles: true,\n staticImport: true,\n tsconfigPath: options.tsconfigPath\n })) as unknown as Plugin\n] satisfies Plugin[];\n","import type { Plugin } from 'vite';\nimport composeLibrary from './composeLibrary';\n\ntype LibraryPlugin = () => Plugin;\n\nexport const flux: LibraryPlugin = composeLibrary({\n name: '@flux-ui/components',\n alias: '$flux'\n});\n\nexport const fluxDashboard: LibraryPlugin = composeLibrary({\n name: '@flux-ui/dashboard',\n alias: '$fluxDashboard'\n});\n\nexport const fluxStatistics: LibraryPlugin = composeLibrary({\n name: '@flux-ui/statistics',\n alias: '$fluxStatistics'\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["composeLibrary"],"sources":["../src/advancedAppChunk.ts","../src/advancedLibraryChunk.ts","../src/closeBundle.ts","../src/composeLibrary.ts","../src/preset.ts","../src/libraries.ts"],"sourcesContent":["type AdvancedChunk = {\n readonly name: string;\n readonly test: (moduleId: string) => boolean;\n};\n\nexport default (name: string, moduleIds: string[]): AdvancedChunk => ({\n name: name,\n test: moduleId => !!moduleIds.find(module => moduleId.includes(`/src/${module}`))\n});\n","type AdvancedChunk = {\n readonly name: string;\n readonly test: (moduleId: string) => boolean;\n};\n\nexport default (name: string, moduleIds: string[]): AdvancedChunk => ({\n name: name,\n test: moduleId => !!moduleIds.find(module => moduleId.includes(`/node_modules/${module}/`))\n});\n","import type { Plugin } from 'vite';\n\nexport default (): Plugin => ({\n name: '@basmilius/vite-preset/close-bundle',\n\n closeBundle() {\n process.exit(0);\n }\n});\n","import { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join, relative, resolve } from 'node:path';\nimport type { Plugin, UserConfig } from 'vite';\nimport { searchForWorkspaceRoot } from 'vite';\n\ntype ComposePlugin = () => Plugin;\ntype PathGenerator = (name: string) => string;\n\ntype Options = {\n readonly alias: string;\n readonly autoConfigureTsconfig?: boolean;\n readonly isolated?: boolean;\n readonly name: string;\n readonly sourcesPathGenerator?: PathGenerator;\n readonly tsAliasPathGenerator?: PathGenerator;\n};\n\nconst TSCONFIG_FILES = ['tsconfig.app.json', 'tsconfig.json'] as const;\nconst WORKING_DIR = process.cwd();\n\nexport default (options: Options): ComposePlugin => {\n const WORKSPACE_ROOT = searchForWorkspaceRoot(WORKING_DIR);\n const WORKSPACE_NODE_MODULES = join(options.isolated ? WORKING_DIR : relative(WORKING_DIR, WORKSPACE_ROOT), 'node_modules');\n\n const sourcesPathGenerator = options.sourcesPathGenerator ?? (name => resolve(WORKING_DIR, `${WORKSPACE_NODE_MODULES}/${name}/src`));\n const tsAliasPathGenerator = options.tsAliasPathGenerator ?? (name => `${WORKSPACE_NODE_MODULES}/${name}/src/*`);\n\n const src = sourcesPathGenerator(options.name);\n\n return (): Plugin => ({\n name: options.name,\n\n config: (): UserConfig => ({\n optimizeDeps: {\n exclude: [options.name]\n },\n resolve: {\n alias: {\n [options.name]: src,\n [options.alias]: src\n }\n },\n server: {\n fs: {\n allow: [src]\n }\n }\n }),\n\n configResolved(config): void {\n let tsconfigPath: string | undefined;\n\n for (const file of TSCONFIG_FILES) {\n const path = join(config.root, file);\n\n if (existsSync(path)) {\n tsconfigPath = path;\n break;\n }\n }\n\n if (!tsconfigPath) {\n config.logger.error(`[${options.name}] A tsconfig.json is required for this library. Please create one.`);\n process.exit(1);\n }\n\n const key = `${options.alias}/*`;\n const tsconfigData = readFileSync(tsconfigPath, {encoding: 'utf-8'});\n const tsconfig = JSON.parse(tsconfigData);\n tsconfig.compilerOptions.paths ??= {};\n\n if (key in tsconfig.compilerOptions.paths) {\n return;\n }\n\n if (options.autoConfigureTsconfig === false) {\n config.logger.warn(`[${options.name}] Path alias \"${key}\" is missing from tsconfig. Add it manually or set autoConfigureTsconfig: true.`);\n return;\n }\n\n tsconfig.compilerOptions.paths[key] = [tsAliasPathGenerator(options.name)];\n\n writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 4), {encoding: 'utf-8'});\n }\n });\n};\n","import { resolve } from 'node:path';\nimport { camelCase, kebabCase } from 'change-case';\nimport { patchCssModules } from 'vite-css-modules';\nimport type { Plugin } from 'vite';\nimport { searchForWorkspaceRoot } from 'vite';\nimport className from 'css-class-generator';\nimport libAssets from '@laynezh/vite-plugin-lib-assets';\nimport libDts from 'vite-plugin-dts';\n\ntype Options = {\n readonly cssModules?: {\n readonly classNames?: 'mangled' | 'camel' | 'kebab';\n readonly generateScopedName?: (name: string, filename: string, css: string) => string;\n };\n readonly assetFileNames?: string;\n readonly fileNames?: 'hashes' | 'actual';\n readonly isLibrary?: boolean;\n readonly tsconfigPath?: string;\n};\n\nconst preset = (options: Options): Plugin => {\n const visitedClasses: string[] = [];\n\n function generateScopedName(name: string): string {\n if (name.startsWith('i__const_')) {\n name = name.substring(9);\n name = name.substring(0, name.length - 2);\n }\n\n if (options.cssModules?.classNames === 'camel') {\n return camelCase(name);\n }\n\n if (options.cssModules?.classNames === 'kebab') {\n return kebabCase(name);\n }\n\n if (visitedClasses.includes(name)) {\n return className(visitedClasses.indexOf(name));\n }\n\n return className(visitedClasses.push(name) - 1);\n }\n\n return {\n name: '@basmilius/vite-preset',\n\n config: () => ({\n build: {\n assetsInlineLimit: 0,\n cssMinify: options.isLibrary ? false : 'lightningcss',\n minify: options.isLibrary ? false : 'oxc',\n rolldownOptions: {\n output: {\n assetFileNames: options.fileNames === 'actual' || options.isLibrary ? undefined : '[hash].[ext]',\n chunkFileNames: options.fileNames === 'actual' || options.isLibrary ? undefined : '[hash].js',\n entryFileNames: options.fileNames === 'actual' || options.isLibrary ? undefined : '[hash].js',\n minifyInternalExports: true\n }\n }\n },\n css: {\n preprocessorMaxWorkers: true,\n preprocessorOptions: {\n scss: {\n api: 'modern-compiler'\n }\n },\n modules: {\n generateScopedName: options.cssModules?.generateScopedName ?? generateScopedName\n }\n },\n json: {\n stringify: true\n },\n resolve: {\n alias: {\n '@': resolve(process.cwd(), './src')\n },\n extensions: [\n '.js',\n '.ts',\n '.json',\n '.vue'\n ]\n },\n server: {\n fs: {\n allow: [\n searchForWorkspaceRoot(process.cwd())\n ]\n }\n }\n })\n };\n};\n\nexport default (options: Options = {}): Plugin[] => {\n const plugins: Plugin[] = [\n patchCssModules() as unknown as Plugin,\n preset(options)\n ];\n\n if (options.isLibrary) {\n plugins.push(libAssets({\n limit: 0,\n name: options.assetFileNames ?? '[contenthash:8].[ext]'\n }) as unknown as Plugin);\n\n plugins.push(libDts({\n cleanVueFileName: false,\n copyDtsFiles: true,\n staticImport: true,\n tsconfigPath: options.tsconfigPath\n }) as unknown as Plugin);\n }\n\n return plugins;\n};\n","import type { Plugin } from 'vite';\nimport composeLibrary from './composeLibrary';\n\ntype LibraryPlugin = () => Plugin;\n\nexport const flux: LibraryPlugin = composeLibrary({\n name: '@flux-ui/components',\n alias: '$flux'\n});\n\nexport const fluxDashboard: LibraryPlugin = composeLibrary({\n name: '@flux-ui/dashboard',\n alias: '$fluxDashboard'\n});\n\nexport const fluxStatistics: LibraryPlugin = composeLibrary({\n name: '@flux-ui/statistics',\n alias: '$fluxStatistics'\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basmilius/vite-preset",
|
|
3
3
|
"description": "Commonly used presets used in Vite + Vue setups.",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.13.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"funding": "https://github.com/sponsors/basmilius",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"css-class-generator": "^2.0.0",
|
|
50
50
|
"lightningcss": "^1.32.0",
|
|
51
51
|
"vite": "^8.0.0",
|
|
52
|
-
"vite-css-modules": "^1.
|
|
52
|
+
"vite-css-modules": "^1.14.0",
|
|
53
53
|
"vite-plugin-dts": "^4.5.4"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"tsdown": "^0.21.
|
|
56
|
+
"tsdown": "^0.21.4"
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/composeLibrary.ts
CHANGED
|
@@ -8,6 +8,7 @@ type PathGenerator = (name: string) => string;
|
|
|
8
8
|
|
|
9
9
|
type Options = {
|
|
10
10
|
readonly alias: string;
|
|
11
|
+
readonly autoConfigureTsconfig?: boolean;
|
|
11
12
|
readonly isolated?: boolean;
|
|
12
13
|
readonly name: string;
|
|
13
14
|
readonly sourcesPathGenerator?: PathGenerator;
|
|
@@ -72,6 +73,11 @@ export default (options: Options): ComposePlugin => {
|
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
74
75
|
|
|
76
|
+
if (options.autoConfigureTsconfig === false) {
|
|
77
|
+
config.logger.warn(`[${options.name}] Path alias "${key}" is missing from tsconfig. Add it manually or set autoConfigureTsconfig: true.`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
tsconfig.compilerOptions.paths[key] = [tsAliasPathGenerator(options.name)];
|
|
76
82
|
|
|
77
83
|
writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 4), {encoding: 'utf-8'});
|
package/src/preset.ts
CHANGED
|
@@ -7,8 +7,6 @@ import className from 'css-class-generator';
|
|
|
7
7
|
import libAssets from '@laynezh/vite-plugin-lib-assets';
|
|
8
8
|
import libDts from 'vite-plugin-dts';
|
|
9
9
|
|
|
10
|
-
const VISITED_CLASSES: string[] = [];
|
|
11
|
-
|
|
12
10
|
type Options = {
|
|
13
11
|
readonly cssModules?: {
|
|
14
12
|
readonly classNames?: 'mangled' | 'camel' | 'kebab';
|
|
@@ -21,6 +19,8 @@ type Options = {
|
|
|
21
19
|
};
|
|
22
20
|
|
|
23
21
|
const preset = (options: Options): Plugin => {
|
|
22
|
+
const visitedClasses: string[] = [];
|
|
23
|
+
|
|
24
24
|
function generateScopedName(name: string): string {
|
|
25
25
|
if (name.startsWith('i__const_')) {
|
|
26
26
|
name = name.substring(9);
|
|
@@ -35,11 +35,11 @@ const preset = (options: Options): Plugin => {
|
|
|
35
35
|
return kebabCase(name);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
if (
|
|
39
|
-
return className(
|
|
38
|
+
if (visitedClasses.includes(name)) {
|
|
39
|
+
return className(visitedClasses.indexOf(name));
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
return className(
|
|
42
|
+
return className(visitedClasses.push(name) - 1);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
return {
|
|
@@ -95,19 +95,25 @@ const preset = (options: Options): Plugin => {
|
|
|
95
95
|
};
|
|
96
96
|
};
|
|
97
97
|
|
|
98
|
-
export default (options: Options = {}): Plugin[] =>
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
export default (options: Options = {}): Plugin[] => {
|
|
99
|
+
const plugins: Plugin[] = [
|
|
100
|
+
patchCssModules() as unknown as Plugin,
|
|
101
|
+
preset(options)
|
|
102
|
+
];
|
|
101
103
|
|
|
102
|
-
(options.isLibrary
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
if (options.isLibrary) {
|
|
105
|
+
plugins.push(libAssets({
|
|
106
|
+
limit: 0,
|
|
107
|
+
name: options.assetFileNames ?? '[contenthash:8].[ext]'
|
|
108
|
+
}) as unknown as Plugin);
|
|
106
109
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
plugins.push(libDts({
|
|
111
|
+
cleanVueFileName: false,
|
|
112
|
+
copyDtsFiles: true,
|
|
113
|
+
staticImport: true,
|
|
114
|
+
tsconfigPath: options.tsconfigPath
|
|
115
|
+
}) as unknown as Plugin);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return plugins;
|
|
119
|
+
};
|