j-vite-plugin-dynamic-base
Version:
Resolve all resource files dynamic publicPath, like Webpack's __webpack_public_path__
69 lines • 3.68 kB
JavaScript
;
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