{"version":3,"file":"index.cjs","sources":["../src/internal/rollup-externals.function.ts","../src/internal/pakk.plugin.ts","../src/internal/update-package-json.plugin.ts"],"sourcesContent":["import {\n\tPACKAGE_JSON_NAME,\n\tcollectFileDirnamePathsUpDirectoryTree,\n\ttype PackageJson,\n} from '@alexaegis/workspace-tools';\nimport { readFileSync } from 'node:fs';\nimport { builtinModules } from 'node:module';\nimport p from 'node:path';\n\nexport const createRollupExternalsFn = (...packageJsons: PackageJson[]) => {\n\tconst dependencyNames: string[] = [];\n\n\tfor (const packageJson of packageJsons) {\n\t\tif (packageJson.name) {\n\t\t\tdependencyNames.push(packageJson.name);\n\t\t}\n\n\t\tif (packageJson.dependencies) {\n\t\t\tdependencyNames.push(...Object.keys(packageJson.dependencies));\n\t\t}\n\t\t// https://github.com/Septh/rollup-plugin-node-externals does not externalises devDependencies\n\t\t// by default. devDependencies are usually not included in source code anyways\n\t\tif (packageJson.devDependencies) {\n\t\t\tdependencyNames.push(...Object.keys(packageJson.devDependencies));\n\t\t}\n\t\tif (packageJson.peerDependencies) {\n\t\t\tdependencyNames.push(...Object.keys(packageJson.peerDependencies));\n\t\t}\n\t\tif (packageJson.optionalDependencies) {\n\t\t\tdependencyNames.push(...Object.keys(packageJson.optionalDependencies));\n\t\t}\n\t}\n\n\treturn (source: string, _importer: string | undefined, _isResolved: boolean): boolean => {\n\t\treturn (\n\t\t\tdependencyNames.some((dep) => source === dep || source.startsWith(dep + '/')) ||\n\t\t\tbuiltinModules.includes(source) ||\n\t\t\tsource.startsWith('node:')\n\t\t);\n\t};\n};\n\nexport const createLazyAutoExternalsFunction = () => {\n\tlet externalsFn:\n\t\t| ((source: string, importer: string | undefined, isResolved: boolean) => boolean)\n\t\t| undefined;\n\n\treturn (source: string, importer: string | undefined, isResolved: boolean): boolean => {\n\t\texternalsFn ??= createRollupExternalsFn(\n\t\t\t...collectFileDirnamePathsUpDirectoryTree(PACKAGE_JSON_NAME, {\n\t\t\t\tmaxPackages: 2,\n\t\t\t}).map(\n\t\t\t\t(path) =>\n\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\treadFileSync(p.join(path, PACKAGE_JSON_NAME), { encoding: 'utf8' }),\n\t\t\t\t\t) as PackageJson,\n\t\t\t),\n\t\t);\n\n\t\treturn externalsFn(source, importer, isResolved);\n\t};\n};\n","import { asyncFilterMap } from '@alexaegis/common';\nimport { writeJson } from '@alexaegis/fs';\nimport { DEFAULT_EXPORT_FORMATS, Pakk, normalizePakkOptions, type PakkOptions } from '@pakk/core';\nimport p from 'node:path';\nimport type { Plugin, PluginOption, UserConfig } from 'vite';\nimport dts from 'vite-plugin-dts';\nimport { preserveImportAttributes } from './preserve-import-attributes.js';\nimport { createLazyAutoExternalsFunction } from './rollup-externals.function.js';\n\n/**\n * # Pakk\n *\n * Autofills your vite config, packageJson and distribution packageJson\n * based on conventional file and directory layouts.\n *\n * Packaging a publishable library is as easy as defining a vite config with\n * just this single plugin (also wraps [vite-plugin-dts](https://github.com/qmhc/vite-plugin-dts)):\n *\n * ```ts\n * import { defineConfig } from 'vite';\n * import { pakk } from 'vite-plugin-pakk';\n *\n * export default defineConfig({\n * \tplugins: [\n * \t\tpakk(),\n * \t],\n * });\n * ```\n *\n */\nexport const pakk = (rawOptions?: PakkOptions): PluginOption => {\n\tlet pakk: Pakk;\n\tconst options = normalizePakkOptions(rawOptions);\n\tconst pakkPlugin: Plugin = {\n\t\tname: 'pakk',\n\t\tapply: 'build',\n\t\tconfig: async (config) => {\n\t\t\tconst startTime = performance.now();\n\n\t\t\tconst formats =\n\t\t\t\tconfig.build?.lib && config.build.lib.formats\n\t\t\t\t\t? config.build.lib.formats\n\t\t\t\t\t: DEFAULT_EXPORT_FORMATS;\n\n\t\t\tconst outDir: string = config.build?.outDir ?? options.outDir;\n\n\t\t\tpakk = await Pakk.withContext(\n\t\t\t\t{\n\t\t\t\t\tformats,\n\t\t\t\t\tfileName:\n\t\t\t\t\t\tconfig.build?.lib && typeof config.build.lib.fileName === 'function'\n\t\t\t\t\t\t\t? config.build.lib.fileName\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...options,\n\t\t\t\t\toutDir,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\toptions.logger.info(\n\t\t\t\t'examining workspace package at',\n\t\t\t\tpakk.context.workspacePackage.packageJsonPath,\n\t\t\t);\n\n\t\t\toptions.logger.trace('initial vite config', config);\n\n\t\t\tif (config.build?.lib && !!config.build.lib.entry) {\n\t\t\t\toptions.logger.info('build.lib.entry is defined in vite config, will be ignored!');\n\t\t\t\t// If the original vite config had it's entries defined as an array it would result in an error https://github.com/vitejs/vite/issues/13641\n\t\t\t\tconfig.build.lib.entry = {};\n\t\t\t}\n\n\t\t\tif (config.build?.outDir && rawOptions?.outDir) {\n\t\t\t\toptions.logger.info(\n\t\t\t\t\t`vite plugin defines build.outDir as \"${config.build.outDir}\". ` +\n\t\t\t\t\t\t`Using that over \"${rawOptions.outDir}\"`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst examinationResult = await pakk.examinePackage();\n\n\t\t\toptions.logger.trace('examination result', examinationResult);\n\t\t\toptions.logger.trace('outDir', outDir);\n\n\t\t\tconst viteConfigUpdates: Partial<UserConfig> = {\n\t\t\t\tbuild: {\n\t\t\t\t\ttarget: config.build?.target ?? 'es2022',\n\t\t\t\t\tminify: config.build?.minify ?? false,\n\t\t\t\t\tsourcemap: config.build?.sourcemap ?? false,\n\t\t\t\t\toutDir,\n\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\texternal:\n\t\t\t\t\t\t\tconfig.build?.rollupOptions?.external ??\n\t\t\t\t\t\t\tcreateLazyAutoExternalsFunction(),\n\t\t\t\t\t\ttreeshake: config.build?.rollupOptions?.treeshake ?? true,\n\t\t\t\t\t},\n\t\t\t\t\tlib: {\n\t\t\t\t\t\tformats: pakk.context.formats,\n\t\t\t\t\t\tentry: examinationResult.bundlerEntryFiles, // The entry has to be an array to keep the file's names in the output directory too.\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\toptions.logger.info(\n\t\t\t\t`preparation phase took ${Math.floor(performance.now() - startTime).toString()}ms to finish`,\n\t\t\t);\n\n\t\t\treturn viteConfigUpdates;\n\t\t},\n\t\tcloseBundle: async () => {\n\t\t\toptions.logger.info(\n\t\t\t\t'processing workspace package at',\n\t\t\t\tpakk.context.workspacePackage.packageJsonPath,\n\t\t\t);\n\t\t\t// I have to cheat a little bit by starting the timer here because other plugins can\n\t\t\t// steal the thread during an async copy step\n\t\t\tconst startTime = performance.now();\n\n\t\t\tawait asyncFilterMap(pakk.getTargetPackageJsonKinds(), async (packageJsonTarget) => {\n\t\t\t\tconst { updatedPackageJson, path } =\n\t\t\t\t\tawait pakk.createUpdatedPackageJson(packageJsonTarget);\n\n\t\t\t\toptions.logger.info('writing updated package.json to', path);\n\n\t\t\t\tawait writeJson(updatedPackageJson, path, {\n\t\t\t\t\tautoPrettier: pakk.options.autoPrettier,\n\t\t\t\t\tdry: pakk.options.dry,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\toptions.logger.info(\n\t\t\t\t`update phase took ~${Math.floor(performance.now() - startTime).toString()}ms to finish`,\n\t\t\t);\n\t\t},\n\t} as Plugin;\n\n\tconst plugins = [pakkPlugin];\n\n\tif (options.dts) {\n\t\tplugins.push(\n\t\t\tdts({\n\t\t\t\tcopyDtsFiles: true,\n\t\t\t\tcleanVueFileName: true,\n\t\t\t\tentryRoot: p.join(options.srcDir, options.exportBaseDir),\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (options.preserveImportAttributes) {\n\t\tplugins.push(preserveImportAttributes(options.preserveImportAttributes));\n\t}\n\n\treturn plugins;\n};\n","import { getPrettierFormatter, readJson, toAbsolute } from '@alexaegis/fs';\nimport { PACKAGE_JSON_NAME, type PackageJson } from '@alexaegis/workspace-tools';\nimport { writeFile } from 'node:fs/promises';\nimport type { Plugin } from 'vite';\n\nexport interface UpdatePackageJsonPluginOptions {\n\tfilename?: string;\n\tupdater: (packageJson: PackageJson) => PackageJson;\n\tcwd?: string;\n\tautoPrettier?: boolean;\n}\n\nexport const updatePackageJsonPlugin = (options: UpdatePackageJsonPluginOptions): Plugin => ({\n\tname: 'update-package-json',\n\tapply: 'build',\n\tbuildEnd: async (error) => {\n\t\tif (!error) {\n\t\t\tconst cwd = options.cwd ?? process.cwd();\n\t\t\tconst packageJsonLocation = toAbsolute(options.filename ?? PACKAGE_JSON_NAME, { cwd });\n\n\t\t\tconst packageJson = await readJson<PackageJson>(packageJsonLocation);\n\t\t\tif (!packageJson) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`updatePackageJsonPlugin didn't find packageJson at ${packageJsonLocation}!`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst augmentedPackageJson = options.updater(packageJson);\n\t\t\tlet rawAugmentedPackageJson = JSON.stringify(augmentedPackageJson);\n\n\t\t\tif (options.autoPrettier ?? true) {\n\t\t\t\tconst formatter = await getPrettierFormatter({\n\t\t\t\t\tparser: 'json-stringify',\n\t\t\t\t\tcwd,\n\t\t\t\t});\n\t\t\t\trawAugmentedPackageJson = await formatter(rawAugmentedPackageJson);\n\t\t\t}\n\n\t\t\tawait writeFile(packageJsonLocation, rawAugmentedPackageJson);\n\t\t}\n\t},\n});\n"],"names":["builtinModules","collectFileDirnamePathsUpDirectoryTree","PACKAGE_JSON_NAME","readFileSync","pakk","normalizePakkOptions","DEFAULT_EXPORT_FORMATS","Pakk","asyncFilterMap","writeJson","preserveImportAttributes","toAbsolute","readJson","getPrettierFormatter","writeFile"],"mappings":";;;;;;;;;;;;AASa,MAAA,0BAA0B,IAAI,iBAAgC;AAC1E,QAAM,kBAA4B,CAAC;AAEnC,aAAW,eAAe,cAAc;AACvC,QAAI,YAAY,MAAM;AACL,sBAAA,KAAK,YAAY,IAAI;AAAA,IAAA;AAGtC,QAAI,YAAY,cAAc;AAC7B,sBAAgB,KAAK,GAAG,OAAO,KAAK,YAAY,YAAY,CAAC;AAAA,IAAA;AAI9D,QAAI,YAAY,iBAAiB;AAChC,sBAAgB,KAAK,GAAG,OAAO,KAAK,YAAY,eAAe,CAAC;AAAA,IAAA;AAEjE,QAAI,YAAY,kBAAkB;AACjC,sBAAgB,KAAK,GAAG,OAAO,KAAK,YAAY,gBAAgB,CAAC;AAAA,IAAA;AAElE,QAAI,YAAY,sBAAsB;AACrC,sBAAgB,KAAK,GAAG,OAAO,KAAK,YAAY,oBAAoB,CAAC;AAAA,IAAA;AAAA,EACtE;AAGM,SAAA,CAAC,QAAgB,WAA+B,gBAAkC;AACxF,WACC,gBAAgB,KAAK,CAAC,QAAQ,WAAW,OAAO,OAAO,WAAW,MAAM,GAAG,CAAC,KAC5EA,YAAAA,eAAe,SAAS,MAAM,KAC9B,OAAO,WAAW,OAAO;AAAA,EAE3B;AACD;AAEO,MAAM,kCAAkC,MAAM;AAChD,MAAA;AAIG,SAAA,CAAC,QAAgB,UAA8B,eAAiC;AACtE,oBAAA;AAAA,MACf,GAAGC,eAAAA,uCAAuCC,eAAAA,mBAAmB;AAAA,QAC5D,aAAa;AAAA,MACb,CAAA,EAAE;AAAA,QACF,CAAC,SACA,KAAK;AAAA,UACJC,QAAA,aAAa,EAAE,KAAK,MAAMD,eAAAA,iBAAiB,GAAG,EAAE,UAAU,OAAQ,CAAA;AAAA,QAAA;AAAA,MACnE;AAAA,IAEH;AAEO,WAAA,YAAY,QAAQ,UAAU,UAAU;AAAA,EAChD;AACD;AC/Ba,MAAA,OAAO,CAAC,eAA2C;AAC3DE,MAAAA;AACE,QAAA,UAAUC,0BAAqB,UAAU;AAC/C,QAAM,aAAqB;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ,OAAO,WAAW;AACnB,YAAA,YAAY,YAAY,IAAI;AAE5B,YAAA,UACL,OAAO,OAAO,OAAO,OAAO,MAAM,IAAI,UACnC,OAAO,MAAM,IAAI,UACjBC,KAAA;AAEJ,YAAM,SAAiB,OAAO,OAAO,UAAU,QAAQ;AAEvDF,cAAO,MAAMG,KAAAA,KAAK;AAAA,QACjB;AAAA,UACC;AAAA,UACA,UACC,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,IAAI,aAAa,aACvD,OAAO,MAAM,IAAI,WACjB;AAAA,QACL;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH;AAAA,QAAA;AAAA,MAEF;AAEA,cAAQ,OAAO;AAAA,QACd;AAAA,QACAH,MAAK,QAAQ,iBAAiB;AAAA,MAC/B;AAEQ,cAAA,OAAO,MAAM,uBAAuB,MAAM;AAE9C,UAAA,OAAO,OAAO,OAAO,CAAC,CAAC,OAAO,MAAM,IAAI,OAAO;AAC1C,gBAAA,OAAO,KAAK,6DAA6D;AAE1E,eAAA,MAAM,IAAI,QAAQ,CAAC;AAAA,MAAA;AAG3B,UAAI,OAAO,OAAO,UAAU,YAAY,QAAQ;AAC/C,gBAAQ,OAAO;AAAA,UACd,wCAAwC,OAAO,MAAM,MAAM,uBACtC,WAAW,MAAM;AAAA,QACvC;AAAA,MAAA;AAGK,YAAA,oBAAoB,MAAMA,MAAK,eAAe;AAE5C,cAAA,OAAO,MAAM,sBAAsB,iBAAiB;AACpD,cAAA,OAAO,MAAM,UAAU,MAAM;AAErC,YAAM,oBAAyC;AAAA,QAC9C,OAAO;AAAA,UACN,QAAQ,OAAO,OAAO,UAAU;AAAA,UAChC,QAAQ,OAAO,OAAO,UAAU;AAAA,UAChC,WAAW,OAAO,OAAO,aAAa;AAAA,UACtC;AAAA,UACA,eAAe;AAAA,YACd,UACC,OAAO,OAAO,eAAe,YAC7B,gCAAgC;AAAA,YACjC,WAAW,OAAO,OAAO,eAAe,aAAa;AAAA,UACtD;AAAA,UACA,KAAK;AAAA,YACJ,SAASA,MAAK,QAAQ;AAAA,YACtB,OAAO,kBAAkB;AAAA;AAAA,UAAA;AAAA,QAC1B;AAAA,MAEF;AAEA,cAAQ,OAAO;AAAA,QACd,0BAA0B,KAAK,MAAM,YAAY,QAAQ,SAAS,EAAE,SAAA,CAAU;AAAA,MAC/E;AAEO,aAAA;AAAA,IACR;AAAA,IACA,aAAa,YAAY;AACxB,cAAQ,OAAO;AAAA,QACd;AAAA,QACAA,MAAK,QAAQ,iBAAiB;AAAA,MAC/B;AAGM,YAAA,YAAY,YAAY,IAAI;AAElC,YAAMI,OAAeJ,eAAAA,MAAK,0BAA0B,GAAG,OAAO,sBAAsB;AACnF,cAAM,EAAE,oBAAoB,KAAA,IAC3B,MAAMA,MAAK,yBAAyB,iBAAiB;AAE9C,gBAAA,OAAO,KAAK,mCAAmC,IAAI;AAErD,cAAAK,GAAA,UAAU,oBAAoB,MAAM;AAAA,UACzC,cAAcL,MAAK,QAAQ;AAAA,UAC3B,KAAKA,MAAK,QAAQ;AAAA,QAAA,CAClB;AAAA,MAAA,CACD;AAED,cAAQ,OAAO;AAAA,QACd,sBAAsB,KAAK,MAAM,YAAY,QAAQ,SAAS,EAAE,SAAA,CAAU;AAAA,MAC3E;AAAA,IAAA;AAAA,EAEF;AAEM,QAAA,UAAU,CAAC,UAAU;AAE3B,MAAI,QAAQ,KAAK;AACR,YAAA;AAAA,MACP,IAAI;AAAA,QACH,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,WAAW,EAAE,KAAK,QAAQ,QAAQ,QAAQ,aAAa;AAAA,MACvD,CAAA;AAAA,IACF;AAAA,EAAA;AAGD,MAAI,QAAQ,0BAA0B;AACrC,YAAQ,KAAKM,yBAAAA,yBAAyB,QAAQ,wBAAwB,CAAC;AAAA,EAAA;AAGjE,SAAA;AACR;AC9Ia,MAAA,0BAA0B,CAAC,aAAqD;AAAA,EAC5F,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU,OAAO,UAAU;AAC1B,QAAI,CAAC,OAAO;AACX,YAAM,MAAM,QAAQ,OAAO,QAAQ,IAAI;AACvC,YAAM,sBAAsBC,GAAAA,WAAW,QAAQ,YAAYT,eAAmB,mBAAA,EAAE,KAAK;AAE/E,YAAA,cAAc,MAAMU,GAAA,SAAsB,mBAAmB;AACnE,UAAI,CAAC,aAAa;AACT,gBAAA;AAAA,UACP,sDAAsD,mBAAmB;AAAA,QAC1E;AACA;AAAA,MAAA;AAEK,YAAA,uBAAuB,QAAQ,QAAQ,WAAW;AACpD,UAAA,0BAA0B,KAAK,UAAU,oBAAoB;AAE7D,UAAA,QAAQ,gBAAgB,MAAM;AAC3B,cAAA,YAAY,MAAMC,wBAAqB;AAAA,UAC5C,QAAQ;AAAA,UACR;AAAA,QAAA,CACA;AACyB,kCAAA,MAAM,UAAU,uBAAuB;AAAA,MAAA;AAG5D,YAAAC,SAAA,UAAU,qBAAqB,uBAAuB;AAAA,IAAA;AAAA,EAC7D;AAEF;;;;;"}