@basmilius/vite-preset 3.24.0 → 3.25.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 +4 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/defineFilterMacro.ts +335 -0
- package/src/index.ts +2 -0
package/dist/index.d.mts
CHANGED
|
@@ -31,6 +31,9 @@ type Options$1 = {
|
|
|
31
31
|
};
|
|
32
32
|
declare const _default$3: (options: Options$1) => ComposePlugin;
|
|
33
33
|
//#endregion
|
|
34
|
+
//#region src/defineFilterMacro.d.ts
|
|
35
|
+
declare function defineFilterMacro(): Plugin;
|
|
36
|
+
//#endregion
|
|
34
37
|
//#region src/preset.d.ts
|
|
35
38
|
type Options = {
|
|
36
39
|
readonly cssModules?: {
|
|
@@ -52,5 +55,5 @@ declare const fluxApplication: LibraryPlugin;
|
|
|
52
55
|
declare const fluxDashboard: LibraryPlugin;
|
|
53
56
|
declare const fluxStatistics: LibraryPlugin;
|
|
54
57
|
//#endregion
|
|
55
|
-
export { _default as advancedAppChunk, _default$1 as advancedLibraryChunk, _default$2 as closeBundle, _default$3 as composeLibrary, flux, fluxApplication, fluxDashboard, fluxStatistics, _default$4 as preset };
|
|
58
|
+
export { _default as advancedAppChunk, _default$1 as advancedLibraryChunk, _default$2 as closeBundle, _default$3 as composeLibrary, defineFilterMacro, flux, fluxApplication, fluxDashboard, fluxStatistics, _default$4 as preset };
|
|
56
59
|
//# sourceMappingURL=index.d.mts.map
|
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,qBAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA;EAAA,SACA,gBAAA;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/defineFilterMacro.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,gBAAA;EAAA,SACA,oBAAA,GAAuB,aAAA;EAAA,SACvB,oBAAA,GAAuB,aAAA;AAAA;AAAA,cAMpC,UAAA,GAAgB,OAAA,EAAS,SAAA,KAAU,aAAA;;;iBCjB1B,iBAAA,CAAA,GAAqB,MAAA;;;KCKzB,OAAA;EAAA,SACQ,UAAA;IAAA,SACI,UAAA;IAAA,SACA,kBAAA,IAAsB,IAAA,UAAc,QAAA,UAAkB,GAAA;IAAA,SACtD,MAAA;EAAA;EAAA,SAEJ,cAAA;EAAA,SACA,SAAA;EAAA,SACA,SAAA;EAAA,SACA,YAAA;AAAA;AAAA,cAkFb,UAAA,GAAgB,OAAA,GAAS,OAAA,KAAe,MAAA;;;KCjGnC,aAAA,SAAsB,MAAA;AAAA,cAEd,IAAA,EAAM,aAAA;AAAA,cAMN,eAAA,EAAiB,aAAA;AAAA,cAMjB,aAAA,EAAe,aAAA;AAAA,cAMf,cAAA,EAAgB,aAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
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===!1?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],include:s.peerDependencies?[...s.peerDependencies]:void 0},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
|
|
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===!1?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],include:s.peerDependencies?[...s.peerDependencies]:void 0},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=/<script\b([^>]*)\bsetup\b([^>]*)>([\s\S]*?)<\/script>/gi;function b(){return{name:`@basmilius/vite-preset/define-filter-macro`,enforce:`pre`,transform(e,t){if(!t.endsWith(`.vue`)||!e.includes(`defineFilter`))return;let n=!1,r=e.replace(y,(e,t,r,i)=>{if(!i.includes(`defineFilter`)||i.includes(`__filterDefinitionFactory`)||S(i,`defineOptions`))return e;let a=x(i);return a===i?e:(n=!0,`<script${t}setup${r}>${a}<\/script>`)});if(n)return{code:r,map:null}}}}function x(e){let t=C(e,`defineFilter`);if(!t)return e;let n=`defineOptions({\n __filterDefinitionFactory: ${e.slice(t.callStart,t.callEnd)}\n})`;return e.slice(0,t.callStart)+n+e.slice(t.callEnd)}function S(e,t){return C(e,t)!==null}function C(e,t){let n=0,r=0,i=0,a=null,o=null,s=0;for(;s<e.length;){let c=e[s],l=e[s+1];if(o===`single`){c===`
|
|
2
|
+
`&&(o=null),s++;continue}if(o===`multi`){if(c===`*`&&l===`/`){o=null,s+=2;continue}s++;continue}if(a){if(c===`\\`){s+=2;continue}c===a&&(a=null),s++;continue}if(c===`/`&&l===`/`){o=`single`,s+=2;continue}if(c===`/`&&l===`*`){o=`multi`,s+=2;continue}if(c===`"`||c===`'`||c==="`"){a=c,s++;continue}if(c===`(`){n++,s++;continue}if(c===`)`){n--,s++;continue}if(c===`{`){r++,s++;continue}if(c===`}`){r--,s++;continue}if(c===`[`){i++,s++;continue}if(c===`]`){i--,s++;continue}if(!(n===0&&r===0&&i===0)||!e.startsWith(t,s)){s++;continue}let u=s>0?e[s-1]:``;if(/[A-Za-z0-9_$]/.test(u)){s++;continue}let d=s+t.length,f=e[d];if(f&&/[A-Za-z0-9_$]/.test(f)){s++;continue}let p=w(e,d);if(p===-1||e[p]!==`(`){s++;continue}let m=T(e,p);return m===-1?null:{callStart:s,callEnd:m+1}}return null}function w(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]!==`<`)return n;let r=1;for(n++;n<e.length&&r>0;){let t=e[n];t===`<`?r++:t===`>`&&r--,n++}for(;n<e.length&&/\s/.test(e[n]);)n++;return n}function T(e,t){let n=1,r=null,i=null,a=t+1;for(;a<e.length;){let t=e[a],o=e[a+1];if(i===`single`){t===`
|
|
3
|
+
`&&(i=null),a++;continue}if(i===`multi`){if(t===`*`&&o===`/`){i=null,a+=2;continue}a++;continue}if(r){if(t===`\\`){a+=2;continue}t===r&&(r=null),a++;continue}if(t===`/`&&o===`/`){i=`single`,a+=2;continue}if(t===`/`&&o===`*`){i=`multi`,a+=2;continue}if(t===`"`||t===`'`||t==="`"){r=t,a++;continue}if(t===`(`)n++;else if(t===`)`&&(n--,n===0))return a;a++}return-1}const E=e=>{let t=[];function n(n){n.startsWith(`i__const_`)&&(n=n.substring(9),n=n.substring(0,n.length-2));let r=e.cssModules?.prefix??``;return e.cssModules?.classNames===`camel`?r+s(n):e.cssModules?.classNames===`kebab`?r+c(n):t.includes(n)?r+u(t.indexOf(n)):r+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 D=(e={})=>{let t=[l(),E(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 O=v({name:`@flux-ui/components`,alias:`~flux/components`,peerDependencies:[`luxon`,`vue`]}),k=v({name:`@flux-ui/application`,alias:`~flux/application`,peerDependencies:[`luxon`,`vue`,`vue-router`]}),A=v({name:`@flux-ui/dashboard`,alias:`~flux/dashboard`,peerDependencies:[`luxon`,`vue`]}),j=v({name:`@flux-ui/statistics`,alias:`~flux/statistics`,peerDependencies:[`apexcharts`,`lodash-es`,`vue`,`vue-i18n`,`vue3-apexcharts`]});export{p as advancedAppChunk,m as advancedLibraryChunk,h as closeBundle,v as composeLibrary,b as defineFilterMacro,O as flux,k as fluxApplication,A as fluxDashboard,j as fluxStatistics,D as preset};
|
|
2
4
|
//# 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 autoConfigureTsconfig?: boolean;\n readonly isolated?: false;\n readonly name: string;\n readonly peerDependencies?: readonly 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 === false ? relative(WORKING_DIR, WORKSPACE_ROOT) : WORKING_DIR, '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 include: options.peerDependencies ? [...options.peerDependencies] : undefined\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 readonly prefix?: 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 const prefix = options.cssModules?.prefix ?? '';\n\n if (options.cssModules?.classNames === 'camel') {\n return prefix + camelCase(name);\n }\n\n if (options.cssModules?.classNames === 'kebab') {\n return prefix + kebabCase(name);\n }\n\n if (visitedClasses.includes(name)) {\n return prefix + className(visitedClasses.indexOf(name));\n }\n \n return prefix + 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/components',\n peerDependencies: ['luxon', 'vue']\n});\n\nexport const fluxApplication: LibraryPlugin = composeLibrary({\n name: '@flux-ui/application',\n alias: '~flux/application',\n peerDependencies: ['luxon', 'vue', 'vue-router']\n});\n\nexport const fluxDashboard: LibraryPlugin = composeLibrary({\n name: '@flux-ui/dashboard',\n alias: '~flux/dashboard',\n peerDependencies: ['luxon', 'vue']\n});\n\nexport const fluxStatistics: LibraryPlugin = composeLibrary({\n name: '@flux-ui/statistics',\n alias: '~flux/statistics',\n peerDependencies: ['apexcharts', 'lodash-es', 'vue', 'vue-i18n', 'vue3-apexcharts']\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/defineFilterMacro.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?: false;\n readonly name: string;\n readonly peerDependencies?: readonly 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 === false ? relative(WORKING_DIR, WORKSPACE_ROOT) : WORKING_DIR, '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 include: options.peerDependencies ? [...options.peerDependencies] : undefined\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 type { Plugin } from 'vite';\n\nconst SCRIPT_SETUP_REGEX = /<script\\b([^>]*)\\bsetup\\b([^>]*)>([\\s\\S]*?)<\\/script>/gi;\n\nfunction defineFilterMacro(): Plugin {\n return {\n name: '@basmilius/vite-preset/define-filter-macro',\n enforce: 'pre',\n\n transform(code, id) {\n if (!id.endsWith('.vue')) {\n return;\n }\n\n if (!code.includes('defineFilter')) {\n return;\n }\n\n let transformed = false;\n\n const newCode = code.replace(SCRIPT_SETUP_REGEX, (match, before, after, content) => {\n if (!content.includes('defineFilter')) {\n return match;\n }\n\n if (content.includes('__filterDefinitionFactory')) {\n return match;\n }\n\n if (containsTopLevelCall(content, 'defineOptions')) {\n return match;\n }\n\n const wrapped = wrapDefineFilter(content);\n\n if (wrapped === content) {\n return match;\n }\n\n transformed = true;\n return `<script${before}setup${after}>${wrapped}</script>`;\n });\n\n if (!transformed) {\n return;\n }\n\n return {\n code: newCode,\n map: null\n };\n }\n };\n}\n\nexport default defineFilterMacro;\n\nfunction wrapDefineFilter(content: string): string {\n const range = findTopLevelCall(content, 'defineFilter');\n\n if (!range) {\n return content;\n }\n\n const callExpression = content.slice(range.callStart, range.callEnd);\n const replacement = `defineOptions({\\n __filterDefinitionFactory: ${callExpression}\\n})`;\n\n return content.slice(0, range.callStart) + replacement + content.slice(range.callEnd);\n}\n\nfunction containsTopLevelCall(content: string, name: string): boolean {\n return findTopLevelCall(content, name) !== null;\n}\n\ntype CallRange = {\n readonly callStart: number;\n readonly callEnd: number;\n};\n\nfunction findTopLevelCall(content: string, name: string): CallRange | null {\n let parenDepth = 0;\n let braceDepth = 0;\n let bracketDepth = 0;\n let inString: string | null = null;\n let inComment: 'single' | 'multi' | null = null;\n\n let i = 0;\n\n while (i < content.length) {\n const c = content[i];\n const n = content[i + 1];\n\n if (inComment === 'single') {\n if (c === '\\n') {\n inComment = null;\n }\n\n i++;\n continue;\n }\n\n if (inComment === 'multi') {\n if (c === '*' && n === '/') {\n inComment = null;\n i += 2;\n continue;\n }\n\n i++;\n continue;\n }\n\n if (inString) {\n if (c === '\\\\') {\n i += 2;\n continue;\n }\n\n if (c === inString) {\n inString = null;\n }\n\n i++;\n continue;\n }\n\n if (c === '/' && n === '/') {\n inComment = 'single';\n i += 2;\n continue;\n }\n\n if (c === '/' && n === '*') {\n inComment = 'multi';\n i += 2;\n continue;\n }\n\n if (c === '\"' || c === '\\'' || c === '`') {\n inString = c;\n i++;\n continue;\n }\n\n if (c === '(') {\n parenDepth++;\n i++;\n continue;\n }\n\n if (c === ')') {\n parenDepth--;\n i++;\n continue;\n }\n\n if (c === '{') {\n braceDepth++;\n i++;\n continue;\n }\n\n if (c === '}') {\n braceDepth--;\n i++;\n continue;\n }\n\n if (c === '[') {\n bracketDepth++;\n i++;\n continue;\n }\n\n if (c === ']') {\n bracketDepth--;\n i++;\n continue;\n }\n\n const isTopLevel = parenDepth === 0 && braceDepth === 0 && bracketDepth === 0;\n\n if (!isTopLevel || !content.startsWith(name, i)) {\n i++;\n continue;\n }\n\n const prevChar = i > 0 ? content[i - 1] : '';\n\n if (/[A-Za-z0-9_$]/.test(prevChar)) {\n i++;\n continue;\n }\n\n const afterName = i + name.length;\n const nextChar = content[afterName];\n\n if (nextChar && /[A-Za-z0-9_$]/.test(nextChar)) {\n i++;\n continue;\n }\n\n const callOpen = skipGenericAndWhitespace(content, afterName);\n\n if (callOpen === -1 || content[callOpen] !== '(') {\n i++;\n continue;\n }\n\n const callClose = matchClosingParen(content, callOpen);\n\n if (callClose === -1) {\n return null;\n }\n\n return {\n callStart: i,\n callEnd: callClose + 1\n };\n }\n\n return null;\n}\n\nfunction skipGenericAndWhitespace(content: string, start: number): number {\n let i = start;\n\n while (i < content.length && /\\s/.test(content[i])) {\n i++;\n }\n\n if (content[i] !== '<') {\n return i;\n }\n\n let depth = 1;\n i++;\n\n while (i < content.length && depth > 0) {\n const c = content[i];\n\n if (c === '<') {\n depth++;\n } else if (c === '>') {\n depth--;\n }\n\n i++;\n }\n\n while (i < content.length && /\\s/.test(content[i])) {\n i++;\n }\n\n return i;\n}\n\nfunction matchClosingParen(content: string, openIndex: number): number {\n let depth = 1;\n let inString: string | null = null;\n let inComment: 'single' | 'multi' | null = null;\n\n let i = openIndex + 1;\n\n while (i < content.length) {\n const c = content[i];\n const n = content[i + 1];\n\n if (inComment === 'single') {\n if (c === '\\n') {\n inComment = null;\n }\n\n i++;\n continue;\n }\n\n if (inComment === 'multi') {\n if (c === '*' && n === '/') {\n inComment = null;\n i += 2;\n continue;\n }\n\n i++;\n continue;\n }\n\n if (inString) {\n if (c === '\\\\') {\n i += 2;\n continue;\n }\n\n if (c === inString) {\n inString = null;\n }\n\n i++;\n continue;\n }\n\n if (c === '/' && n === '/') {\n inComment = 'single';\n i += 2;\n continue;\n }\n\n if (c === '/' && n === '*') {\n inComment = 'multi';\n i += 2;\n continue;\n }\n\n if (c === '\"' || c === '\\'' || c === '`') {\n inString = c;\n i++;\n continue;\n }\n\n if (c === '(') {\n depth++;\n } else if (c === ')') {\n depth--;\n\n if (depth === 0) {\n return i;\n }\n }\n\n i++;\n }\n\n return -1;\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 readonly prefix?: 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 const prefix = options.cssModules?.prefix ?? '';\n\n if (options.cssModules?.classNames === 'camel') {\n return prefix + camelCase(name);\n }\n\n if (options.cssModules?.classNames === 'kebab') {\n return prefix + kebabCase(name);\n }\n\n if (visitedClasses.includes(name)) {\n return prefix + className(visitedClasses.indexOf(name));\n }\n \n return prefix + 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/components',\n peerDependencies: ['luxon', 'vue']\n});\n\nexport const fluxApplication: LibraryPlugin = composeLibrary({\n name: '@flux-ui/application',\n alias: '~flux/application',\n peerDependencies: ['luxon', 'vue', 'vue-router']\n});\n\nexport const fluxDashboard: LibraryPlugin = composeLibrary({\n name: '@flux-ui/dashboard',\n alias: '~flux/dashboard',\n peerDependencies: ['luxon', 'vue']\n});\n\nexport const fluxStatistics: LibraryPlugin = composeLibrary({\n name: '@flux-ui/statistics',\n alias: '~flux/statistics',\n peerDependencies: ['apexcharts', 'lodash-es', 'vue', 'vue-i18n', 'vue3-apexcharts']\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
|
|
3
|
+
const SCRIPT_SETUP_REGEX = /<script\b([^>]*)\bsetup\b([^>]*)>([\s\S]*?)<\/script>/gi;
|
|
4
|
+
|
|
5
|
+
function defineFilterMacro(): Plugin {
|
|
6
|
+
return {
|
|
7
|
+
name: '@basmilius/vite-preset/define-filter-macro',
|
|
8
|
+
enforce: 'pre',
|
|
9
|
+
|
|
10
|
+
transform(code, id) {
|
|
11
|
+
if (!id.endsWith('.vue')) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (!code.includes('defineFilter')) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let transformed = false;
|
|
20
|
+
|
|
21
|
+
const newCode = code.replace(SCRIPT_SETUP_REGEX, (match, before, after, content) => {
|
|
22
|
+
if (!content.includes('defineFilter')) {
|
|
23
|
+
return match;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (content.includes('__filterDefinitionFactory')) {
|
|
27
|
+
return match;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (containsTopLevelCall(content, 'defineOptions')) {
|
|
31
|
+
return match;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const wrapped = wrapDefineFilter(content);
|
|
35
|
+
|
|
36
|
+
if (wrapped === content) {
|
|
37
|
+
return match;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
transformed = true;
|
|
41
|
+
return `<script${before}setup${after}>${wrapped}</script>`;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
if (!transformed) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
code: newCode,
|
|
50
|
+
map: null
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default defineFilterMacro;
|
|
57
|
+
|
|
58
|
+
function wrapDefineFilter(content: string): string {
|
|
59
|
+
const range = findTopLevelCall(content, 'defineFilter');
|
|
60
|
+
|
|
61
|
+
if (!range) {
|
|
62
|
+
return content;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const callExpression = content.slice(range.callStart, range.callEnd);
|
|
66
|
+
const replacement = `defineOptions({\n __filterDefinitionFactory: ${callExpression}\n})`;
|
|
67
|
+
|
|
68
|
+
return content.slice(0, range.callStart) + replacement + content.slice(range.callEnd);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function containsTopLevelCall(content: string, name: string): boolean {
|
|
72
|
+
return findTopLevelCall(content, name) !== null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
type CallRange = {
|
|
76
|
+
readonly callStart: number;
|
|
77
|
+
readonly callEnd: number;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
function findTopLevelCall(content: string, name: string): CallRange | null {
|
|
81
|
+
let parenDepth = 0;
|
|
82
|
+
let braceDepth = 0;
|
|
83
|
+
let bracketDepth = 0;
|
|
84
|
+
let inString: string | null = null;
|
|
85
|
+
let inComment: 'single' | 'multi' | null = null;
|
|
86
|
+
|
|
87
|
+
let i = 0;
|
|
88
|
+
|
|
89
|
+
while (i < content.length) {
|
|
90
|
+
const c = content[i];
|
|
91
|
+
const n = content[i + 1];
|
|
92
|
+
|
|
93
|
+
if (inComment === 'single') {
|
|
94
|
+
if (c === '\n') {
|
|
95
|
+
inComment = null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
i++;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (inComment === 'multi') {
|
|
103
|
+
if (c === '*' && n === '/') {
|
|
104
|
+
inComment = null;
|
|
105
|
+
i += 2;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (inString) {
|
|
114
|
+
if (c === '\\') {
|
|
115
|
+
i += 2;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (c === inString) {
|
|
120
|
+
inString = null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
i++;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (c === '/' && n === '/') {
|
|
128
|
+
inComment = 'single';
|
|
129
|
+
i += 2;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (c === '/' && n === '*') {
|
|
134
|
+
inComment = 'multi';
|
|
135
|
+
i += 2;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (c === '"' || c === '\'' || c === '`') {
|
|
140
|
+
inString = c;
|
|
141
|
+
i++;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (c === '(') {
|
|
146
|
+
parenDepth++;
|
|
147
|
+
i++;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (c === ')') {
|
|
152
|
+
parenDepth--;
|
|
153
|
+
i++;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (c === '{') {
|
|
158
|
+
braceDepth++;
|
|
159
|
+
i++;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (c === '}') {
|
|
164
|
+
braceDepth--;
|
|
165
|
+
i++;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (c === '[') {
|
|
170
|
+
bracketDepth++;
|
|
171
|
+
i++;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (c === ']') {
|
|
176
|
+
bracketDepth--;
|
|
177
|
+
i++;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const isTopLevel = parenDepth === 0 && braceDepth === 0 && bracketDepth === 0;
|
|
182
|
+
|
|
183
|
+
if (!isTopLevel || !content.startsWith(name, i)) {
|
|
184
|
+
i++;
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const prevChar = i > 0 ? content[i - 1] : '';
|
|
189
|
+
|
|
190
|
+
if (/[A-Za-z0-9_$]/.test(prevChar)) {
|
|
191
|
+
i++;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const afterName = i + name.length;
|
|
196
|
+
const nextChar = content[afterName];
|
|
197
|
+
|
|
198
|
+
if (nextChar && /[A-Za-z0-9_$]/.test(nextChar)) {
|
|
199
|
+
i++;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const callOpen = skipGenericAndWhitespace(content, afterName);
|
|
204
|
+
|
|
205
|
+
if (callOpen === -1 || content[callOpen] !== '(') {
|
|
206
|
+
i++;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const callClose = matchClosingParen(content, callOpen);
|
|
211
|
+
|
|
212
|
+
if (callClose === -1) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return {
|
|
217
|
+
callStart: i,
|
|
218
|
+
callEnd: callClose + 1
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function skipGenericAndWhitespace(content: string, start: number): number {
|
|
226
|
+
let i = start;
|
|
227
|
+
|
|
228
|
+
while (i < content.length && /\s/.test(content[i])) {
|
|
229
|
+
i++;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (content[i] !== '<') {
|
|
233
|
+
return i;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
let depth = 1;
|
|
237
|
+
i++;
|
|
238
|
+
|
|
239
|
+
while (i < content.length && depth > 0) {
|
|
240
|
+
const c = content[i];
|
|
241
|
+
|
|
242
|
+
if (c === '<') {
|
|
243
|
+
depth++;
|
|
244
|
+
} else if (c === '>') {
|
|
245
|
+
depth--;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
i++;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
while (i < content.length && /\s/.test(content[i])) {
|
|
252
|
+
i++;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return i;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function matchClosingParen(content: string, openIndex: number): number {
|
|
259
|
+
let depth = 1;
|
|
260
|
+
let inString: string | null = null;
|
|
261
|
+
let inComment: 'single' | 'multi' | null = null;
|
|
262
|
+
|
|
263
|
+
let i = openIndex + 1;
|
|
264
|
+
|
|
265
|
+
while (i < content.length) {
|
|
266
|
+
const c = content[i];
|
|
267
|
+
const n = content[i + 1];
|
|
268
|
+
|
|
269
|
+
if (inComment === 'single') {
|
|
270
|
+
if (c === '\n') {
|
|
271
|
+
inComment = null;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
i++;
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (inComment === 'multi') {
|
|
279
|
+
if (c === '*' && n === '/') {
|
|
280
|
+
inComment = null;
|
|
281
|
+
i += 2;
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
i++;
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (inString) {
|
|
290
|
+
if (c === '\\') {
|
|
291
|
+
i += 2;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (c === inString) {
|
|
296
|
+
inString = null;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
i++;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (c === '/' && n === '/') {
|
|
304
|
+
inComment = 'single';
|
|
305
|
+
i += 2;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
if (c === '/' && n === '*') {
|
|
310
|
+
inComment = 'multi';
|
|
311
|
+
i += 2;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (c === '"' || c === '\'' || c === '`') {
|
|
316
|
+
inString = c;
|
|
317
|
+
i++;
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (c === '(') {
|
|
322
|
+
depth++;
|
|
323
|
+
} else if (c === ')') {
|
|
324
|
+
depth--;
|
|
325
|
+
|
|
326
|
+
if (depth === 0) {
|
|
327
|
+
return i;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
i++;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return -1;
|
|
335
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ import advancedAppChunk from './advancedAppChunk';
|
|
|
2
2
|
import advancedLibraryChunk from './advancedLibraryChunk';
|
|
3
3
|
import closeBundle from './closeBundle';
|
|
4
4
|
import composeLibrary from './composeLibrary';
|
|
5
|
+
import defineFilterMacro from './defineFilterMacro';
|
|
5
6
|
import preset from './preset';
|
|
6
7
|
|
|
7
8
|
export {
|
|
@@ -9,6 +10,7 @@ export {
|
|
|
9
10
|
advancedLibraryChunk,
|
|
10
11
|
closeBundle,
|
|
11
12
|
composeLibrary,
|
|
13
|
+
defineFilterMacro,
|
|
12
14
|
preset
|
|
13
15
|
};
|
|
14
16
|
|