UNPKG

j-vite-plugin-dynamic-base

Version:

Resolve all resource files dynamic publicPath, like Webpack's __webpack_public_path__

69 lines 3.68 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.dynamicBase = void 0; const transform_1 = require("./core/transform"); function dynamicBase(options) { const defaultOptions = { publicPath: 'window.__dynamic_base__', transformIndexHtml: false // maybe default true }; const { publicPath, transformIndexHtml } = Object.assign(Object.assign({}, defaultOptions), (options || {})); // const preloadHelperId = 'vite/preload-helper' let assetsDir = 'assets'; let base = '/'; let legacy = false; let baseOptions = { assetsDir, base, legacy, publicPath: ` ${publicPath}`, transformIndexHtml }; return { name: 'vite-plugin-dynamic-base', enforce: 'post', apply: 'build', configResolved(resolvedConfig) { var _a; assetsDir = resolvedConfig.build.assetsDir; base = resolvedConfig.base; legacy = !!((_a = resolvedConfig === null || resolvedConfig === void 0 ? void 0 : resolvedConfig.define) === null || _a === void 0 ? void 0 : _a['import.meta.env.LEGACY']); if (!base || base === '/') { throw new Error('Please replace `config.base` in build with unique markup text, (e.g. /__dynamic_base__/)\n' + 'Recommended changes:\n' + ` - base: ${JSON.stringify(base)},\n` + ` + base: process.env.NODE_ENV === "production" ? "/__dynamic_base__/" : "/",\n` + ' (in your vite.config.ts/js file)'); } Object.assign(baseOptions, { assetsDir, base, legacy }); }, generateBundle({ format }, bundle) { return __awaiter(this, void 0, void 0, function* () { if (format !== 'es' && format !== 'system') { return; } yield Promise.all(Object.entries(bundle).map(([, chunk]) => __awaiter(this, void 0, void 0, function* () { if (chunk.type === 'chunk' && chunk.code.indexOf(base) > -1) { chunk.code = yield (0, transform_1.transformChunk)(chunk.code, baseOptions); } else if (chunk.type === 'asset' && typeof chunk.source === 'string') { if (!chunk.fileName.endsWith('.html')) { chunk.source = (0, transform_1.transformAsset)(chunk.source, baseOptions); } else if (transformIndexHtml) { chunk.source = (0, transform_1.transformHtml)(chunk.source, baseOptions); if (legacy) { chunk.source = (0, transform_1.transformLegacyHtml)(chunk.source, baseOptions); } } } }))); }); } }; } exports.dynamicBase = dynamicBase; //# sourceMappingURL=index.js.map