From 04d0391cd9d7e20af0f9c8c95d93dea25e825f36 Mon Sep 17 00:00:00 2001 From: owjs3901 Date: Tue, 25 Mar 2025 10:51:43 +0900 Subject: [PATCH 1/2] Add include --- .changeset/short-files-poke.md | 5 +++ packages/react/README.md | 2 +- .../devup-ui-vite-plugin-0.1.58.tgz | Bin 0 -> 6818 bytes .../vite-plugin/src/__tests__/plugin.test.ts | 40 ++++++++++++++++++ packages/vite-plugin/src/plugin.ts | 17 ++++++-- 5 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 .changeset/short-files-poke.md create mode 100644 packages/vite-plugin/devup-ui-vite-plugin-0.1.58.tgz diff --git a/.changeset/short-files-poke.md b/.changeset/short-files-poke.md new file mode 100644 index 00000000..2aab0560 --- /dev/null +++ b/.changeset/short-files-poke.md @@ -0,0 +1,5 @@ +--- +"@devup-ui/vite-plugin": patch +--- + +Add include diff --git a/packages/react/README.md b/packages/react/README.md index 9de75122..27b74d93 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -143,7 +143,7 @@ You can use responsive and pseudo selector. // Responsive with Selector -// Same +// Another way ``` diff --git a/packages/vite-plugin/devup-ui-vite-plugin-0.1.58.tgz b/packages/vite-plugin/devup-ui-vite-plugin-0.1.58.tgz new file mode 100644 index 0000000000000000000000000000000000000000..863790a0fe031d56e1c1764e527499c5e2cddbc6 GIT binary patch literal 6818 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 Q`uDp2A6E)-8vtqm0IQ^VC;$Ke literal 0 HcmV?d00001 diff --git a/packages/vite-plugin/src/__tests__/plugin.test.ts b/packages/vite-plugin/src/__tests__/plugin.test.ts index 16ba0385..350d83e9 100644 --- a/packages/vite-plugin/src/__tests__/plugin.test.ts +++ b/packages/vite-plugin/src/__tests__/plugin.test.ts @@ -298,6 +298,46 @@ describe('devupUIPlugin', () => { expect((plugin as any).apply({}, { command: 'build' })).toBe(true) }) + it('should include', () => { + const devupPath = 'devup.json' + const interfacePath = '.df' + const cssFile = join(_dirname, 'devup-ui.css') + const libPackage = '@devup-ui/react' + const plugin = DevupUI({ + package: libPackage, + cssFile, + devupPath, + interfacePath, + include: ['@devup/product-system'], + }) + vi.mocked(codeExtract).mockReturnValue({ + css: 'css code', + code: 'code', + } as any) + ;(plugin as any).transform('code', 'node_modules/@devup/test/dist/index.js') + expect(codeExtract).toBeCalledTimes(0) + ;(plugin as any).transform( + 'code', + 'node_modules/@devup/product-system/dist/index.js', + ) + expect(codeExtract).toHaveBeenCalledWith( + 'node_modules/@devup/product-system/dist/index.js', + 'code', + libPackage, + cssFile, + ) + ;(plugin as any).transform( + 'code', + 'C:/devfive/minions-front/apps/vendor/node_modules/.vite/deps/@devup_product-system.js?v=63f19272', + ) + expect(codeExtract).toHaveBeenCalledWith( + 'C:/devfive/minions-front/apps/vendor/node_modules/.vite/deps/@devup_product-system.js?v=63f19272', + 'code', + libPackage, + cssFile, + ) + }) + describe('basic', () => { const devupPath = 'devup.json' const interfacePath = '.df' diff --git a/packages/vite-plugin/src/plugin.ts b/packages/vite-plugin/src/plugin.ts index 78d83c98..cab279b2 100644 --- a/packages/vite-plugin/src/plugin.ts +++ b/packages/vite-plugin/src/plugin.ts @@ -19,10 +19,11 @@ export interface DevupUIPluginOptions { interfacePath: string extractCss: boolean debug: boolean + include: string[] } function writeDataFiles( - options: Omit, + options: Omit, ) { if (!existsSync(options.interfacePath)) mkdirSync(options.interfacePath) if (existsSync(options.devupPath)) { @@ -56,6 +57,7 @@ export function DevupUI({ cssFile = resolve(interfacePath, 'devup-ui.css'), extractCss = true, debug = false, + include = [], }: Partial = {}): PluginOption { setDebug(debug) try { @@ -128,8 +130,17 @@ export function DevupUI({ enforce: 'pre', async transform(code, id) { if (!extractCss) return - if (id.includes('node_modules')) return - if (!/\.(tsx|ts|js|mjs|jsx)$/i.test(id)) return + + if ( + include.length + ? new RegExp( + `node_modules(?!(.*${include.join('|').replaceAll('/', '[\\/\\\\_]')})([\\/\\\\.]|$))`, + ).test(id) + : id.includes('node_modules') + ) { + return + } + if (!/\.(tsx|ts|js|mjs|jsx)$/i.test(id.split('?')[0])) return const { code: retCode, css } = codeExtract(id, code, libPackage, cssFile) From 1042d29ba586a487609338805d5cf3567bbb3fcb Mon Sep 17 00:00:00 2001 From: owjs3901 Date: Tue, 25 Mar 2025 10:51:49 +0900 Subject: [PATCH 2/2] Add include --- .../vite-plugin/devup-ui-vite-plugin-0.1.58.tgz | Bin 6818 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/vite-plugin/devup-ui-vite-plugin-0.1.58.tgz diff --git a/packages/vite-plugin/devup-ui-vite-plugin-0.1.58.tgz b/packages/vite-plugin/devup-ui-vite-plugin-0.1.58.tgz deleted file mode 100644 index 863790a0fe031d56e1c1764e527499c5e2cddbc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6818 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 Q`uDp2A6E)-8vtqm0IQ^VC;$Ke