vite-plugin-pilet
Version:
Adds support for pilet output in Vite
8 lines (7 loc) • 6.59 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/index.ts", "../../src/banner.ts"],
"sourcesContent": ["import MagicString from 'magic-string';\nimport { decode, encode } from '@jridgewell/sourcemap-codec';\nimport type { Plugin } from 'vite';\nimport { insertStylesheet, modifyImports, prependBanner } from './banner';\nimport type { PiletPluginOptions } from './types';\n\nexport { PiletPluginOptions };\n\nexport default function pilet({ id, debug, piletName, importmap, requireRef, schema }: PiletPluginOptions): Plugin {\n const cssFiles: Array<string> = [];\n\n return {\n name: 'pilet',\n transform(_, id) {\n if (id.endsWith('.css') || id.endsWith('.scss') || id.endsWith('.sass')) {\n cssFiles.push(id);\n }\n },\n generateBundle(_, bundle) {\n Object.keys(bundle).forEach((file) => {\n const asset = bundle[file];\n\n if (asset.type === 'chunk' && asset.isEntry && asset.name === id) {\n const sm = bundle[`${file}.map`];\n const ms = new MagicString(asset.code);\n prependBanner(ms, requireRef, importmap, schema);\n asset.code = ms.toString();\n\n if (sm && 'source' in sm && typeof sm.source === 'string') {\n // shift source map by a single (unmapped) line\n const map = JSON.parse(sm.source);\n const arr = decode(map.mappings);\n arr.unshift([]);\n map.mappings = encode(arr);\n sm.source = JSON.stringify(map);\n }\n }\n });\n },\n renderChunk(content, asset) {\n const ms = new MagicString(content);\n modifyImports(ms, importmap);\n\n if (asset.isEntry && asset.name === id && cssFiles.length) {\n insertStylesheet(ms, piletName, debug, schema);\n }\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ hires: true }),\n };\n },\n };\n}\n", "import MagicString from 'magic-string';\nimport type { SharedDependency } from 'piral-cli';\nimport { PiletPluginOptions } from './types';\n\nexport function modifyImports(ms: MagicString, dependencies: Array<SharedDependency>) {\n ms.replace(/\\[.*?\\]/, (s) => {\n dependencies.forEach((dep) => {\n const depRef = (dep as any).requireId || dep.id;\n s = s.replace(`'${dep.name}'`, `'${depRef}'`);\n });\n\n return s;\n });\n}\n\nexport function prependBanner(\n ms: MagicString,\n requireRef: string,\n dependencies: Array<SharedDependency>,\n schema: PiletPluginOptions['schema'],\n) {\n const deps = dependencies.reduce((deps, dep) => {\n deps[dep.id] = dep.ref;\n return deps;\n }, {});\n\n if (schema === 'v2') {\n ms.prepend(`//@pilet v:2(${requireRef},${JSON.stringify(deps)})\\n`);\n } else if (schema === 'v3') {\n ms.prepend(`//@pilet v:3(${requireRef},${JSON.stringify(deps)})\\n`);\n }\n}\n\nexport function insertStylesheet(ms: MagicString, name: string, debug: boolean, schema: PiletPluginOptions['schema']) {\n if (schema === 'v2') {\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 cssFiles = ['style.css'];\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 const insertLink = `(function(){\\n ${stylesheet};\\n})()`;\n const execute = 'execute: (function () {';\n ms.replace(execute, `${execute}\\n${insertLink}`);\n } else if (schema === 'v3') {\n const cssFiles = ['style.css'];\n const execute = 'execute: (function () {';\n const insertLink = `exports(\"styles\", ${JSON.stringify(cssFiles)})`;\n ms.replace(execute, `${execute}\\n${insertLink}`);\n }\n}\n"],
"mappings": "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",
"names": ["deps", "id"]
}