From ae3353ff1a40ef9db75d77efc08c180872e6b006 Mon Sep 17 00:00:00 2001 From: JYC Date: Mon, 8 Jan 2024 20:32:49 +0100 Subject: [PATCH] :tada: NEW: should strip now (#593) --- .changeset/chilly-stingrays-drum.md | 5 +++ packages/vite-plugin-striper/.env.local | 1 + packages/vite-plugin-striper/package.json | 1 + .../vite-plugin-striper/src/hooks.server.ts | 5 +++ .../src/hooks/handleRemult.ts | 7 +++ .../vite-plugin-striper/src/lib/plugin.ts | 10 ++++- .../src/lib/transformDecorator.spec.ts | 44 +++++++++++++++++-- .../src/lib/transformDecorator.ts | 16 ++++++- .../src/routes/+page.svelte | 1 + .../src/routes/decorators/+page.svelte | 13 ++++++ .../src/shared/actionsController.ts | 13 ++++++ packages/vite-plugin-striper/vite.config.ts | 6 ++- pnpm-lock.yaml | 5 ++- 13 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 .changeset/chilly-stingrays-drum.md create mode 100644 packages/vite-plugin-striper/.env.local create mode 100644 packages/vite-plugin-striper/src/hooks.server.ts create mode 100644 packages/vite-plugin-striper/src/hooks/handleRemult.ts create mode 100644 packages/vite-plugin-striper/src/routes/decorators/+page.svelte create mode 100644 packages/vite-plugin-striper/src/shared/actionsController.ts diff --git a/.changeset/chilly-stingrays-drum.md b/.changeset/chilly-stingrays-drum.md new file mode 100644 index 00000000..1b9c8092 --- /dev/null +++ b/.changeset/chilly-stingrays-drum.md @@ -0,0 +1,5 @@ +--- +'vite-plugin-striper': minor +--- + +striper is now actually spripping things! (it was not updating the transformed code before) diff --git a/packages/vite-plugin-striper/.env.local b/packages/vite-plugin-striper/.env.local new file mode 100644 index 00000000..b98830a8 --- /dev/null +++ b/packages/vite-plugin-striper/.env.local @@ -0,0 +1 @@ +AUTH_SECRET = 'top secret' \ No newline at end of file diff --git a/packages/vite-plugin-striper/package.json b/packages/vite-plugin-striper/package.json index ddb3ca67..6ab6b977 100644 --- a/packages/vite-plugin-striper/package.json +++ b/packages/vite-plugin-striper/package.json @@ -33,6 +33,7 @@ "@sveltejs/package": "2.2.2", "@sveltejs/vite-plugin-svelte": "^3.0.0", "publint": "0.2.4", + "remult": "^0.23.0", "svelte": "4.2.1", "svelte-check": "3.6.0", "tslib": "2.6.2", diff --git a/packages/vite-plugin-striper/src/hooks.server.ts b/packages/vite-plugin-striper/src/hooks.server.ts new file mode 100644 index 00000000..081b8eb4 --- /dev/null +++ b/packages/vite-plugin-striper/src/hooks.server.ts @@ -0,0 +1,5 @@ +import { sequence } from '@sveltejs/kit/hooks' + +import { handleRemult } from './hooks/handleRemult' + +export const handle = sequence(handleRemult) diff --git a/packages/vite-plugin-striper/src/hooks/handleRemult.ts b/packages/vite-plugin-striper/src/hooks/handleRemult.ts new file mode 100644 index 00000000..3d178ef1 --- /dev/null +++ b/packages/vite-plugin-striper/src/hooks/handleRemult.ts @@ -0,0 +1,7 @@ +import { remultSveltekit } from 'remult/remult-sveltekit' + +import { ActionsController } from '../shared/actionsController.js' + +export const handleRemult = remultSveltekit({ + controllers: [ActionsController], +}) diff --git a/packages/vite-plugin-striper/src/lib/plugin.ts b/packages/vite-plugin-striper/src/lib/plugin.ts index 2193931d..105886da 100644 --- a/packages/vite-plugin-striper/src/lib/plugin.ts +++ b/packages/vite-plugin-striper/src/lib/plugin.ts @@ -101,12 +101,16 @@ export function striper(options?: ViteStriperOptions): Plugin[] { return } + let infosNumber = 0 + if (options && options?.decorators && options.decorators.length > 0) { const { info, ...rest } = await transformDecorator(code, options.decorators) // Update the code for later transforms code = rest.code + infosNumber += info.length + if (options?.debug && info.length > 0) { log.info( `` + @@ -123,7 +127,7 @@ export function striper(options?: ViteStriperOptions): Plugin[] { if (options && options?.packages && options.packages.length > 0) { const { info, ...rest } = await removePackages(code, options.packages) - + infosNumber += info.length if (options?.debug && info.length > 0) { log.info( `` + @@ -138,6 +142,10 @@ export function striper(options?: ViteStriperOptions): Plugin[] { } } + if (infosNumber > 0) { + return { code, map: null } + } + return }, }, diff --git a/packages/vite-plugin-striper/src/lib/transformDecorator.spec.ts b/packages/vite-plugin-striper/src/lib/transformDecorator.spec.ts index 3bb9aec8..5806187d 100644 --- a/packages/vite-plugin-striper/src/lib/transformDecorator.spec.ts +++ b/packages/vite-plugin-striper/src/lib/transformDecorator.spec.ts @@ -50,12 +50,12 @@ export class TasksController { @BackendMethod({ allowed: Allow.authenticated }) - static async setAllCompleted(completed: boolean) {} + static async setAllCompleted(completed) {} @BackendMethod({ allowed: Allow.authenticated }) - static async Yop(completed: boolean) {} + static async Yop(completed) {} }", "info": [ "Striped: 'BackendMethod'", @@ -202,7 +202,7 @@ export class TasksController { @BackendMethod({ allowed: false }) - static async init(hello: string) {} + static async init(hello) {} }", "info": [ "Striped: 'BackendMethod'", @@ -415,4 +415,42 @@ export class TasksController { } `) }) + + it('should strip import types', async () => { + const code = `import { AUTH_SECRET } from '$env/static/private' + import { BackendMethod, type Allowed, remult } from 'remult' + + export class ActionsController { + @BackendMethod({ + // Only unauthenticated users can call this method + allowed: () => remult.user === undefined, + }) + static async read(info: Allowed) { + console.log('AUTH_SECRET', AUTH_SECRET) + return AUTH_SECRET + ' ' + info + } + } + + ` + + const transformed = await transformDecorator(code, ['BackendMethod']) + + expect(transformed).toMatchInlineSnapshot(` + { + "code": "import { BackendMethod, remult } from "remult"; + + export class ActionsController { + @BackendMethod({ + allowed: () => remult.user === undefined + }) + static async read(info) {} + }", + "info": [ + "Striped: 'BackendMethod'", + "Removed: 'AUTH_SECRET' from '$env/static/private'", + "Removed: 'Allowed' from 'remult'", + ], + } + `) + }) }) diff --git a/packages/vite-plugin-striper/src/lib/transformDecorator.ts b/packages/vite-plugin-striper/src/lib/transformDecorator.ts index bdca722a..183f8b5d 100644 --- a/packages/vite-plugin-striper/src/lib/transformDecorator.ts +++ b/packages/vite-plugin-striper/src/lib/transformDecorator.ts @@ -146,9 +146,23 @@ export const transformDecorator = async (code: string, decorators_to_strip: stri return true }) - // If one of decorators was found, empty the function body + // If one of the decorators was found, empty the function body and remove types if (foundDecorator) { path.node.body.body = [] + + // Remove the return type of the function + if (path.node.returnType) { + delete path.node.returnType + } + + // Remove the types of all parameters + path.node.params.forEach(param => { + // @ts-ignore + if (param.typeAnnotation) { + // @ts-ignore + delete param.typeAnnotation + } + }) } this.traverse(path) diff --git a/packages/vite-plugin-striper/src/routes/+page.svelte b/packages/vite-plugin-striper/src/routes/+page.svelte index 54964ccf..1523cead 100644 --- a/packages/vite-plugin-striper/src/routes/+page.svelte +++ b/packages/vite-plugin-striper/src/routes/+page.svelte @@ -2,3 +2,4 @@ Hello ThrowClass ThrowRandom +decorators diff --git a/packages/vite-plugin-striper/src/routes/decorators/+page.svelte b/packages/vite-plugin-striper/src/routes/decorators/+page.svelte new file mode 100644 index 00000000..3f318421 --- /dev/null +++ b/packages/vite-plugin-striper/src/routes/decorators/+page.svelte @@ -0,0 +1,13 @@ + + +

Bye bye decorators

+secretContent: {secretContent} diff --git a/packages/vite-plugin-striper/src/shared/actionsController.ts b/packages/vite-plugin-striper/src/shared/actionsController.ts new file mode 100644 index 00000000..47201073 --- /dev/null +++ b/packages/vite-plugin-striper/src/shared/actionsController.ts @@ -0,0 +1,13 @@ +import { AUTH_SECRET } from '$env/static/private' +import { BackendMethod, type Allowed, remult } from 'remult' + +export class ActionsController { + @BackendMethod({ + // Only unauthenticated users can call this method + allowed: () => remult.user === undefined, + }) + static async read(info: Allowed) { + console.info('AUTH_SECRET', AUTH_SECRET) + return AUTH_SECRET + ' ' + info + } +} diff --git a/packages/vite-plugin-striper/vite.config.ts b/packages/vite-plugin-striper/vite.config.ts index d53931c7..dee33a2f 100644 --- a/packages/vite-plugin-striper/vite.config.ts +++ b/packages/vite-plugin-striper/vite.config.ts @@ -5,7 +5,11 @@ import { striper } from './src/lib/plugin.js' export default defineConfig({ plugins: [ - striper({ log_on_throw_is_not_a_new_class: true }), + striper({ + decorators: ['BackendMethod'], + debug: false, + log_on_throw_is_not_a_new_class: true, + }), // sveltekit(), ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b49be9bb..6199fe24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -462,6 +462,9 @@ importers: publint: specifier: 0.2.4 version: 0.2.4 + remult: + specifier: ^0.23.0 + version: 0.23.2 svelte: specifier: 4.2.1 version: 4.2.1 @@ -2842,7 +2845,7 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@sveltejs/kit': 2.0.3(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) + '@sveltejs/kit': 2.0.3(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.1)(vite@5.0.10) import-meta-resolve: 4.0.0 dev: true -- 2.51.2