H5-contact/node_modules/@dcloudio/uni-cli-shared/dist/vite/plugins/jsonJs.js

94 lines
3.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defineUniManifestJsonPlugin = exports.defineUniPagesJsonPlugin = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const constants_1 = require("../../constants");
const subpackage_1 = require("../../json/mp/subpackage");
const utils_1 = require("../../utils");
exports.defineUniPagesJsonPlugin = createDefineJsonJsPlugin('pages.json');
exports.defineUniManifestJsonPlugin = createDefineJsonJsPlugin('manifest.json');
function createDefineJsonJsPlugin(name) {
const JSON_JS = constants_1.JSON_JS_MAP[name];
// pages-json-js 仅允许独立分包 root querymanifest-json-js 仍保持 app 级。
const allowedQuery = name === 'pages.json' ? subpackage_1.MP_INDEPENDENT_ROOT_QUERY : '';
return function (createVitePlugin) {
const opts = {
resolvedConfig: {},
filter(id) {
return !!parseJsonJsRequest(id, JSON_JS, allowedQuery);
},
};
const plugin = createVitePlugin(opts);
const origLoad = plugin.load;
const origResolveId = plugin.resolveId;
const origConfigResolved = plugin.configResolved;
let jsonPath = '';
let jsonJsPath = '';
plugin.resolveId = function (id, importer, options) {
const res = origResolveId && origResolveId.call(this, id, importer, options);
if (res) {
return res;
}
const jsonJsRequest = parseJsonJsRequest(id, JSON_JS, allowedQuery);
if (jsonJsRequest) {
return jsonJsPath + jsonJsRequest.query;
}
};
plugin.configResolved = function (config) {
opts.resolvedConfig = config;
jsonPath = (0, utils_1.normalizePath)(path_1.default.join(process.env.UNI_INPUT_DIR, name));
jsonJsPath = (0, utils_1.normalizePath)(path_1.default.join(process.env.UNI_INPUT_DIR, JSON_JS));
return origConfigResolved && origConfigResolved(config);
};
plugin.load = function (id, ssr) {
const res = origLoad && origLoad.call(this, id, ssr);
if (res) {
return res;
}
if (!opts.filter(id)) {
return;
}
return fs_1.default.readFileSync(jsonPath, 'utf8');
};
return plugin;
};
}
function parseJsonJsRequest(id, jsonJs, allowedQuery) {
const queryIndex = id.indexOf('?');
const query = queryIndex === -1 ? '' : id.slice(queryIndex + 1);
if (query && !isAllowedJsonJsQuery(query, allowedQuery)) {
return;
}
if (queryIndex !== -1 && !query) {
return;
}
const filename = queryIndex === -1 ? id : id.slice(0, queryIndex);
if (!filename.endsWith(jsonJs)) {
return;
}
return {
filename,
query: queryIndex === -1 ? '' : id.slice(queryIndex),
};
}
function isAllowedJsonJsQuery(query, allowedQuery) {
if (!allowedQuery) {
return false;
}
const items = query.split('&');
if (items.length !== 1) {
return false;
}
const item = items[0];
const equalIndex = item.indexOf('=');
if (equalIndex === -1) {
return false;
}
return (item.slice(0, equalIndex) === allowedQuery &&
item.slice(equalIndex + 1).length > 0);
}