@solid-mediakit/auth-plugin
Version:
Package for easily creating server rpc functions in solid-start with goodies baked in
8 lines (7 loc) • 18.4 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/index.ts", "../../../src/compiler/babel.ts", "../../../src/compiler/utils.ts"],
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Plugin } from 'vite'\nimport { compileAuth, type AuthPluginOptions } from './compiler'\nimport { babel as babelUtils, repushPlugin } from '@solid-mediakit/shared'\n\nexport function authVite(opts: AuthPluginOptions): Plugin {\n const filter = babelUtils.getFilter(opts?.filter)\n const plugin: Plugin = {\n enforce: 'pre',\n name: 'auth',\n async transform(code, id) {\n if (!filter(id)) {\n return code\n }\n if (code.includes('protected$(') || code.includes('session$')) {\n return await compileAuth(code, id, opts)\n }\n return undefined\n },\n configResolved(config) {\n repushPlugin(config.plugins as Plugin[], plugin, [\n 'vite-server-references',\n 'solid',\n 'vinxi:routes',\n ])\n },\n }\n return plugin\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { AuthPluginOptions } from '.'\nimport * as babel from '@babel/core'\nimport {\n addMissingImports,\n appendRouteAction,\n getArgs,\n getNodeInfo,\n getProtectedContent,\n} from './utils'\nexport const authLoc = `@solid-mediakit/auth`\n\nexport function createTransformAuth$(opts: AuthPluginOptions) {\n return function transformAuth$({\n types: t,\n template: temp,\n }: {\n types: typeof babel.types\n template: typeof babel.template\n }): babel.PluginObj {\n return {\n visitor: {\n CallExpression(path) {\n const nodeInfo = getNodeInfo(path, t)\n if (nodeInfo.isProtected) {\n const args = getArgs(path, t, opts)\n if (nodeInfo.isProtected) {\n const protectedComp = path.node\n .arguments[0] as babel.types.ArrowFunctionExpression\n\n path.traverse({\n Identifier(innerPath: any) {\n if (\n innerPath.node.name === 'session$' &&\n innerPath.scope?.path?.listKey !== 'params'\n ) {\n innerPath.node.name = '_$$session()'\n }\n },\n })\n\n addMissingImports(path, t, opts, args)\n appendRouteAction(temp, path, t, opts, args)\n protectedComp.params = []\n\n const content = (protectedComp as any).body\n const callGetUser = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier('_$$session'),\n t.callExpression(t.identifier('createAsync'), [\n t.arrowFunctionExpression(\n [],\n t.callExpression(t.identifier('_$$getUser'), []),\n ),\n t.objectExpression([\n t.objectProperty(\n t.identifier('deferStream'),\n t.booleanLiteral(true),\n ),\n ]),\n ]),\n ),\n ])\n\n // const s = createAsync(...)\n // const f = createAsync(...)\n // search for all the createAsync calls within content.body\n\n // const createAsyncCalls = content.body.filter((node: any) => {\n // return (\n // t.isVariableDeclaration(node) &&\n // t.isCallExpression(node.declarations[0].init) &&\n // t.isIdentifier(node.declarations[0].init.callee) &&\n // node.declarations[0].init.callee.name === 'createAsync'\n // )\n // })\n\n // content.body = content.body.filter((node: any) => {\n // return !createAsyncCalls.includes(node)\n // })\n\n const RenderProtected = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier('_$$RenderProtected'),\n t.arrowFunctionExpression([], t.blockStatement(content.body)),\n ),\n ])\n\n content.body = [RenderProtected]\n if (args.fallBack) {\n const RenderFallBack = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier('_$$RenderFallBack'),\n args.fallBack,\n ),\n ])\n content.body.unshift(RenderFallBack)\n }\n content.body.unshift(callGetUser)\n\n const newPage = t.arrowFunctionExpression([], content)\n ;(newPage.body as any).body.push(\n t.returnStatement(getProtectedContent(t, args)),\n )\n ;(newPage.body as any).body = [...(newPage.body as any).body]\n\n path.replaceWith(newPage)\n }\n }\n },\n },\n }\n }\n}\n\nexport async function compileAuth(\n code: string,\n id: string,\n opts: AuthPluginOptions,\n) {\n const plugins: babel.ParserOptions['plugins'] = ['typescript', 'jsx']\n const transformAuth$ = createTransformAuth$(opts)\n const transformed = await babel.transformAsync(code, {\n presets: [['@babel/preset-typescript'], ...(opts?.babel?.presets ?? [])],\n parserOpts: {\n plugins,\n },\n plugins: [[transformAuth$], ...(opts?.babel?.plugins ?? [])],\n filename: id,\n })\n if (transformed) {\n if (opts?.log) {\n console.log(id, transformed.code)\n }\n return {\n code: transformed.code ?? '',\n map: transformed.map,\n }\n }\n return null\n}\n", "import * as babel from '@babel/core'\nimport { AuthPluginOptions } from '.'\nimport { babel as babelUtils } from '@solid-mediakit/shared'\n\nexport const getNodeInfo = (\n path: babel.NodePath<babel.types.CallExpression>,\n t: typeof babel.types,\n) => {\n const { callee } = path.node\n const isProtected = t.isIdentifier(callee, { name: 'protected$' })\n return {\n callee,\n isProtected,\n }\n}\n\nexport const afterImports = (\n path: babel.NodePath<babel.types.CallExpression>,\n value: any,\n) => {\n const p = (path.findParent((p) => p.isProgram())!.node as any).body\n const lastImport = p.findLast((n: any) => n.type === 'ImportDeclaration')\n if (lastImport) {\n p.splice(p.indexOf(lastImport) + 1, 0, value)\n } else {\n p.unshift(value)\n }\n}\n\nexport const addMissingImports = (\n path: babel.NodePath<babel.types.CallExpression>,\n t: typeof babel.types,\n opts: AuthPluginOptions,\n args: ReturnType<typeof getArgs>,\n) => {\n babelUtils.importIfNotThere(path, t, 'query', '@solidjs/router')\n babelUtils.importIfNotThere(path, t, 'createAsync', '@solidjs/router')\n babelUtils.importIfNotThere(path, t, 'getRequestEvent', 'solid-js/web')\n babelUtils.importIfNotThere(path, t, 'getSession', '@solid-mediakit/auth')\n babelUtils.importIfNotThere(path, t, 'Show', 'solid-js')\n babelUtils.importIfNotThere(path, t, opts.authOpts.name, opts.authOpts.dir)\n if (!args.fallBack) {\n babelUtils.importIfNotThere(path, t, 'redirect', '@solidjs/router')\n }\n}\n\nexport const getProtectedContent = (\n t: typeof babel.types,\n args: ReturnType<typeof getArgs>,\n) => {\n const attr = [\n t.jsxAttribute(\n t.jsxIdentifier('when'),\n t.jsxExpressionContainer(\n args.reverse\n ? t.unaryExpression(\n '!',\n t.optionalMemberExpression(\n t.callExpression(t.identifier('_$$session'), []),\n t.identifier('user'),\n false,\n true,\n ),\n )\n : t.optionalMemberExpression(\n t.callExpression(t.identifier('_$$session'), []),\n t.identifier('user'),\n false,\n true,\n ),\n ),\n ),\n ]\n if (args.fallBack) {\n attr.push(\n t.jsxAttribute(\n t.jsxIdentifier('fallback'),\n t.jsxExpressionContainer(\n t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier('_$$RenderFallBack'), [], true),\n t.jsxClosingElement(t.jsxIdentifier('_$$RenderFallBack')),\n [],\n true,\n ),\n ),\n ),\n )\n }\n return t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier('Show'), attr),\n t.jsxClosingElement(t.jsxIdentifier('Show')),\n [\n t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier('_$$RenderProtected'), [], true),\n t.jsxClosingElement(t.jsxIdentifier('_$$RenderProtected')),\n [],\n true,\n ),\n ],\n )\n}\n\nexport const appendRouteAction = (\n temp: typeof babel.template,\n path: babel.NodePath<babel.types.CallExpression>,\n t: typeof babel.types,\n opts: AuthPluginOptions,\n args: ReturnType<typeof getArgs>,\n) => {\n const userKey = opts?.userKey ?? 'media-user'\n let getUserR: ReturnType<ReturnType<typeof temp>> | undefined = undefined\n if (args.fallBack) {\n getUserR = temp`const _$$getUser = query(async () => {\n 'use server'\n const event = getRequestEvent()\n return await getSession(event.request, authOptions)\n }, '${userKey}');\n `()\n } else {\n if (args.reverse) {\n getUserR = temp`const _$$getUser = query(async () => {\n 'use server'\n const event = getRequestEvent()\n const session = await getSession(event.request, authOptions)\n if (session) {\n throw redirect('${args.redirectTo}')\n }\n return null\n }, '${userKey}');\n `()\n } else {\n getUserR = temp`const _$$getUser = query(async () => {\n 'use server'\n const event = getRequestEvent()\n const session = await getSession(event.request, authOptions)\n if (!session) {\n throw redirect('${args.redirectTo}')\n }\n return session\n }, '${userKey}');\n `()\n }\n }\n afterImports(path, getUserR)\n const currentRouteExport = path.scope.getBinding('route')?.path\n if (currentRouteExport) {\n const routeExport = currentRouteExport.node\n const load = (routeExport as any).init.properties.find(\n (p: any) => p.key.name === 'load',\n )\n if (load) {\n load.value = t.arrowFunctionExpression(\n [],\n t.arrayExpression([\n t.callExpression(t.identifier('_$$getUser'), []),\n t.isArrowFunctionExpression(load.value)\n ? load.value.body\n : load.value,\n ]),\n )\n }\n } else {\n path.insertAfter(\n t.exportNamedDeclaration(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier('route'),\n t.objectExpression([\n t.objectProperty(\n t.identifier('load'),\n t.arrowFunctionExpression(\n [],\n t.callExpression(t.identifier('_$$getUser'), []),\n ),\n ),\n ]),\n ),\n ]),\n ),\n )\n }\n}\n\nexport const getArgs = (\n path: babel.NodePath<babel.types.CallExpression>,\n t: typeof babel.types,\n opts: AuthPluginOptions,\n) => {\n const page = path.node.arguments[0] as babel.types.ArrowFunctionExpression\n let fallBack: babel.types.JSXElement | undefined\n let redirectTo: string | undefined\n if (path.node.arguments.length >= 2) {\n if (t.isArrowFunctionExpression(path.node.arguments[1])) {\n fallBack = path.node.arguments[1] as any as babel.types.JSXElement\n } else {\n redirectTo = path.node.arguments[1] as any as string\n }\n }\n if (!redirectTo) {\n redirectTo = opts.redirectTo\n }\n return {\n page,\n fallBack,\n redirectTo,\n reverse: t.isBooleanLiteral(path.node.arguments[2])\n ? path.node.arguments[2].value\n : false,\n }\n}\n"],
"mappings": "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",
"names": ["p", "babelUtils", "import_shared", "babelUtils"]
}