esbuild-pilet-plugin
Version:
Plugin for transforming pilets.
8 lines (7 loc) • 8.48 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/index.ts", "../../src/importmap-plugin.ts", "../../src/banner-plugin.ts"],
"sourcesContent": ["import type { SharedDependency } from 'piral-cli';\nimport { Plugin } from 'esbuild';\nimport { transformFileAsync, PluginObj } from '@babel/core';\nimport { promises } from 'fs';\nimport { resolve, basename } from 'path';\n\nimport importmapPlugin from './importmap-plugin';\nimport bannerPlugin from './banner-plugin';\n\nexport interface PiletPluginOptions {\n name: string;\n requireRef: string;\n importmap: Array<SharedDependency>;\n schema: 'v2' | 'v3';\n}\n\nexport const piletPlugin = (options: PiletPluginOptions): Plugin => ({\n name: 'pilet-plugin',\n setup(build) {\n build.initialOptions.metafile = true;\n\n build.onEnd(async (result) => {\n const root = process.cwd();\n\n if (result.metafile) {\n const { outputs } = result.metafile;\n const { entryPoints } = build.initialOptions;\n const [name] = Object.keys(entryPoints);\n const entryModule = resolve(root, entryPoints[name]);\n const cssFiles = Object.keys(outputs)\n .filter((m) => m.endsWith('.css'))\n .map((m) => basename(m));\n\n await Promise.all(\n Object.keys(outputs)\n .filter((m) => m.endsWith('.js'))\n .map(async (file) => {\n const { entryPoint } = outputs[file];\n const isEntryModule = entryPoint && resolve(root, entryPoint) === entryModule;\n const path = resolve(root, file);\n const smname = `${file}.map`;\n const smpath = resolve(root, smname);\n const sourceMaps = smname in outputs;\n const inputSourceMap = sourceMaps ? JSON.parse(await promises.readFile(smpath, 'utf8')) : undefined;\n const plugins: Array<PluginObj> = [importmapPlugin(options.importmap)];\n\n if (isEntryModule) {\n plugins.push(\n bannerPlugin(options.name, options.importmap, options.requireRef, options.schema, cssFiles),\n );\n }\n\n const { code, map } = await transformFileAsync(path, {\n sourceMaps,\n inputSourceMap,\n comments: isEntryModule,\n plugins,\n presets: [\n [\n '@babel/preset-env',\n {\n modules: 'systemjs',\n },\n ],\n ],\n });\n\n if (map) {\n await promises.writeFile(smpath, JSON.stringify(map), 'utf8');\n }\n\n await promises.writeFile(path, code, 'utf8');\n }),\n );\n }\n });\n },\n});\n", "import { stringLiteral } from '@babel/types';\nimport type { PluginObj } from '@babel/core';\nimport type { SharedDependency } from 'piral-cli';\n\nexport default function babelPlugin(importmap: Array<SharedDependency>): PluginObj {\n return {\n visitor: {\n ImportDeclaration(path) {\n path.traverse({\n Literal(path) {\n if (path.node.type === 'StringLiteral') {\n const name = path.node.value;\n const entry = importmap.find((m) => m.name === name);\n\n if (entry) {\n path.replaceWith(stringLiteral(entry.requireId || entry.id));\n }\n }\n },\n });\n },\n },\n };\n}\n", "import type { SharedDependency } from 'piral-cli';\nimport type { PluginObj } from '@babel/core';\nimport type { Statement } from '@babel/types';\nimport template from '@babel/template';\n\nexport interface PluginOptions {}\n\nexport default function babelPlugin(\n name: string,\n importmap: Array<SharedDependency>,\n requireRef: string,\n schema: 'v2' | 'v3',\n cssFiles: Array<string>,\n): PluginObj {\n const debug = process.env.NODE_ENV === 'development';\n\n return {\n visitor: {\n Program(path) {\n const deps = importmap.reduce((obj, dep) => {\n obj[dep.id] = dep.ref;\n return obj;\n }, {});\n\n if (schema === 'v2') {\n path.addComment('leading', `@pilet v:2(${requireRef},${JSON.stringify(deps)})`, true);\n\n if (cssFiles.length > 0) {\n const bundleUrl = `function(){try{throw new Error}catch(t){const e=(\"\"+t.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\\\\/\\\\/[^)\\\\n]+/g);if(e)return e[0].replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\\\\/\\\\/.+)\\\\/[^\\\\/]+$/,\"$1\")+\"/\"}return\"/\"}`;\n const stylesheet = [\n `var d=document`,\n `var __bundleUrl__=(${bundleUrl})()`,\n `${JSON.stringify(cssFiles)}.forEach(cf=>{`,\n `var u=__bundleUrl__+cf`,\n `var e=d.createElement(\"link\")`,\n `e.setAttribute('data-origin', ${JSON.stringify(name)})`,\n `e.type=\"text/css\"`,\n `e.rel=\"stylesheet\"`,\n `e.href=${debug ? 'u+\"?_=\"+Math.random()' : 'u'}`,\n `d.head.appendChild(e)`,\n `})`,\n ].join(';\\n');\n path.node.body.push(template.ast(`(function(){${stylesheet}})()`) as Statement);\n }\n } else if (schema === 'v3') {\n path.addComment('leading', `@pilet v:3(${requireRef},${JSON.stringify(deps)})`, true);\n\n if (cssFiles.length > 0) {\n path.node.body.push(template.ast(`export const styles = ${JSON.stringify(cssFiles)};`) as Statement);\n }\n }\n },\n },\n };\n}\n"],
"mappings": "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",
"names": ["path", "babelPlugin", "babelPlugin"]
}