{
  "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", "template", "babelPlugin"]
}
