@knightly/vitepress
Version:
Vite & Vue powered static site generator
97 lines • 3.66 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.bundle = exports.failMark = exports.okMark = void 0;
const ora_1 = __importDefault(require("ora"));
const path_1 = __importDefault(require("path"));
const slash_1 = require("../utils/slash");
const alias_1 = require("../alias");
const vite_1 = require("vite");
const plugin_1 = require("../plugin");
exports.okMark = '\x1b[32m✓\x1b[0m';
exports.failMark = '\x1b[31m✖\x1b[0m';
// bundles the VitePress app for both client AND server.
async function bundle(config, options) {
const { root, srcDir } = config;
const pageToHashMap = Object.create(null);
// define custom rollup input
// this is a multi-entry build - every page is considered an entry chunk
// the loading is done via filename conversion rules so that the
// metadata doesn't need to be included in the main chunk.
const input = {
app: path_1.default.resolve(alias_1.APP_PATH, 'index.js')
};
config.pages.forEach((file) => {
// page filename conversion
// foo/bar.md -> foo_bar.md
input[slash_1.slash(file).replace(/\//g, '_')] = path_1.default.resolve(srcDir, file);
});
// resolve options to pass to vite
const { rollupOptions } = options;
const resolveViteConfig = (ssr) => ({
root: srcDir,
base: config.site.base,
logLevel: 'warn',
plugins: plugin_1.createVitePressPlugin(root, config, ssr, pageToHashMap),
// @ts-ignore
ssr: {
noExternal: ['vitepress']
},
build: {
...options,
emptyOutDir: true,
ssr,
outDir: ssr ? config.tempDir : config.outDir,
cssCodeSplit: false,
rollupOptions: {
...rollupOptions,
input,
// important so that each page chunk and the index export things for each
// other
preserveEntrySignatures: 'allow-extension',
output: {
...rollupOptions === null || rollupOptions === void 0 ? void 0 : rollupOptions.output,
...(ssr
? {}
: {
chunkFileNames(chunk) {
if (!chunk.isEntry && /runtime/.test(chunk.name)) {
return `assets/framework.[hash].js`;
}
return adComponentRE.test(chunk.name)
? `assets/ui-custom.[hash].js`
: `assets/[name].[hash].js`;
}
})
}
},
minify: ssr ? false : !process.env.DEBUG
}
});
let clientResult;
let serverResult;
const spinner = ora_1.default();
spinner.start('building client + server bundles...');
try {
;
[clientResult, serverResult] = await Promise.all([
vite_1.build(resolveViteConfig(false)),
vite_1.build(resolveViteConfig(true))
]);
}
catch (e) {
spinner.stopAndPersist({
symbol: exports.failMark
});
throw e;
}
spinner.stopAndPersist({
symbol: exports.okMark
});
return [clientResult, serverResult, pageToHashMap];
}
exports.bundle = bundle;
const adComponentRE = /(?:Carbon|BuySell)Ads/;
//# sourceMappingURL=bundle.js.map