212 lines
7.4 KiB
JavaScript
212 lines
7.4 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.genClassName = exports.getExtApiComponents = exports.addExtApiComponents = exports.getUniCloudObjectInfo = exports.getUniCloudSpaceList = exports.parseUTSImportFilename = exports.parseUTSRelativeFilename = exports.stringifyMap = exports.isVue = exports.uvueOutDir = exports.kotlinOutDir = exports.parseImports = exports.ENTRY_FILENAME = exports.DEFAULT_APPID = exports.UVUE_CLASS_NAME_PREFIX = void 0;
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const es_module_lexer_1 = require("es-module-lexer");
|
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|
const shared_1 = require("@vue/shared");
|
|
exports.UVUE_CLASS_NAME_PREFIX = 'Gen';
|
|
exports.DEFAULT_APPID = 'HBuilder';
|
|
exports.ENTRY_FILENAME = 'index.uts';
|
|
async function parseImports(code) {
|
|
await es_module_lexer_1.init;
|
|
const [imports] = (0, es_module_lexer_1.parse)(code);
|
|
return imports
|
|
.map(({ s, e }) => {
|
|
return `import "${code.slice(s, e)}"`;
|
|
})
|
|
.concat(parseUniExtApiImports(code))
|
|
.join('\n');
|
|
}
|
|
exports.parseImports = parseImports;
|
|
function parseUniExtApiImports(code) {
|
|
const extApis = (0, uni_cli_shared_1.parseUniExtApiNamespacesJsOnce)(process.env.UNI_UTS_PLATFORM, process.env.UNI_UTS_TARGET_LANGUAGE);
|
|
const pattern = /uni\.(\w+)/g;
|
|
const apis = new Set();
|
|
let match;
|
|
while ((match = pattern.exec(code)) !== null) {
|
|
apis.add(match[1]);
|
|
}
|
|
const imports = [];
|
|
apis.forEach((api) => {
|
|
const extApi = extApis[api];
|
|
if (extApi) {
|
|
imports.push(`import "${extApi[0]}"`);
|
|
}
|
|
});
|
|
return imports;
|
|
}
|
|
function kotlinOutDir() {
|
|
return path_1.default.join(process.env.UNI_OUTPUT_DIR, '../.kotlin');
|
|
}
|
|
exports.kotlinOutDir = kotlinOutDir;
|
|
function uvueOutDir() {
|
|
return path_1.default.join(process.env.UNI_OUTPUT_DIR, '../.uvue');
|
|
}
|
|
exports.uvueOutDir = uvueOutDir;
|
|
function isVue(filename) {
|
|
return filename.endsWith('.vue') || filename.endsWith('.uvue');
|
|
}
|
|
exports.isVue = isVue;
|
|
function stringifyMap(obj, ts = false) {
|
|
return serialize(obj, ts);
|
|
}
|
|
exports.stringifyMap = stringifyMap;
|
|
function serialize(obj, ts = false) {
|
|
if ((0, shared_1.isString)(obj)) {
|
|
return `"${obj}"`;
|
|
}
|
|
else if ((0, shared_1.isPlainObject)(obj)) {
|
|
const entries = Object.entries(obj).map(([key, value]) => `[${serialize(key, ts)},${serialize(value, ts)}]`);
|
|
if (entries.length) {
|
|
return `utsMapOf([${entries.join(',')}])`;
|
|
}
|
|
if (ts) {
|
|
return `utsMapOf<string, any | null>()`;
|
|
}
|
|
return `utsMapOf()`;
|
|
}
|
|
else if ((0, shared_1.isArray)(obj)) {
|
|
return `[${obj.map((item) => serialize(item, ts)).join(',')}]`;
|
|
}
|
|
else {
|
|
return String(obj);
|
|
}
|
|
}
|
|
function parseUTSRelativeFilename(filename) {
|
|
if (!path_1.default.isAbsolute(filename)) {
|
|
return filename;
|
|
}
|
|
return (0, uni_cli_shared_1.normalizeNodeModules)(path_1.default.relative(process.env.UNI_INPUT_DIR, filename));
|
|
}
|
|
exports.parseUTSRelativeFilename = parseUTSRelativeFilename;
|
|
function parseUTSImportFilename(filename) {
|
|
if (!path_1.default.isAbsolute(filename)) {
|
|
return filename;
|
|
}
|
|
return (0, uni_cli_shared_1.normalizePath)(path_1.default.join(uvueOutDir(), (0, uni_cli_shared_1.normalizeNodeModules)(path_1.default.relative(process.env.UNI_INPUT_DIR, filename))));
|
|
}
|
|
exports.parseUTSImportFilename = parseUTSImportFilename;
|
|
let uniCloudSpaceList;
|
|
function getUniCloudSpaceList() {
|
|
if (uniCloudSpaceList) {
|
|
return uniCloudSpaceList;
|
|
}
|
|
if (!process.env.UNI_CLOUD_SPACES) {
|
|
uniCloudSpaceList = [];
|
|
return uniCloudSpaceList;
|
|
}
|
|
try {
|
|
const spaces = JSON.parse(process.env.UNI_CLOUD_SPACES);
|
|
if (!Array.isArray(spaces)) {
|
|
uniCloudSpaceList = [];
|
|
return uniCloudSpaceList;
|
|
}
|
|
uniCloudSpaceList = spaces.map((space) => {
|
|
if (space.provider === 'tcb') {
|
|
space.provider = 'tencent';
|
|
}
|
|
if (space.clientSecret) {
|
|
return {
|
|
provider: space.provider,
|
|
spaceName: space.name,
|
|
spaceId: space.id,
|
|
clientSecret: space.clientSecret,
|
|
endpoint: space.apiEndpoint,
|
|
workspaceFolder: space.workspaceFolder,
|
|
};
|
|
}
|
|
else {
|
|
return {
|
|
provider: space.provider,
|
|
spaceName: space.name,
|
|
spaceId: space.id,
|
|
workspaceFolder: space.workspaceFolder,
|
|
};
|
|
}
|
|
});
|
|
}
|
|
catch (e) {
|
|
console.error(e);
|
|
}
|
|
uniCloudSpaceList = uniCloudSpaceList || [];
|
|
if (uniCloudSpaceList.length > 1) {
|
|
console.warn('Multi uniCloud space is not supported yet.');
|
|
}
|
|
return uniCloudSpaceList;
|
|
}
|
|
exports.getUniCloudSpaceList = getUniCloudSpaceList;
|
|
function getUniCloudObjectInfo(uniCloudSpaceList) {
|
|
let uniCloudWorkspaceFolder = process.env.UNI_INPUT_DIR.endsWith('src')
|
|
? path_1.default.resolve(process.env.UNI_INPUT_DIR, '..')
|
|
: process.env.UNI_INPUT_DIR;
|
|
let serviceProvider = 'aliyun';
|
|
if (uniCloudSpaceList && uniCloudSpaceList.length > 0) {
|
|
const space = uniCloudSpaceList[0];
|
|
if (space.workspaceFolder) {
|
|
uniCloudWorkspaceFolder = space.workspaceFolder;
|
|
}
|
|
serviceProvider = space.provider === 'tencent' ? 'tcb' : space.provider;
|
|
}
|
|
else {
|
|
serviceProvider =
|
|
['aliyun', 'tcb', 'alipay'].find((item) => fs_1.default.existsSync(path_1.default.resolve(uniCloudWorkspaceFolder, 'uniCloud-' + item))) || 'aliyun';
|
|
}
|
|
try {
|
|
const { getWorkspaceObjectInfo } = require('../../lib/unicloud-utils');
|
|
return getWorkspaceObjectInfo(uniCloudWorkspaceFolder, serviceProvider);
|
|
}
|
|
catch (e) {
|
|
console.error(e);
|
|
return [];
|
|
}
|
|
}
|
|
exports.getUniCloudObjectInfo = getUniCloudObjectInfo;
|
|
const extApiComponents = new Set();
|
|
function addExtApiComponents(components) {
|
|
components.forEach((component) => {
|
|
extApiComponents.add(component);
|
|
});
|
|
}
|
|
exports.addExtApiComponents = addExtApiComponents;
|
|
function getExtApiComponents() {
|
|
return extApiComponents;
|
|
}
|
|
exports.getExtApiComponents = getExtApiComponents;
|
|
function genClassName(fileName, prefix = 'Gen') {
|
|
return (prefix +
|
|
(0, shared_1.capitalize)((0, shared_1.camelize)(verifySymbol((0, uni_cli_shared_1.removeExt)((0, uni_cli_shared_1.normalizeNodeModules)(fileName).replace(/[\/|_]/g, '-'))))));
|
|
}
|
|
exports.genClassName = genClassName;
|
|
function isValidStart(c) {
|
|
return !!c.match(/^[A-Za-z_-]$/);
|
|
}
|
|
function isValidContinue(c) {
|
|
return !!c.match(/^[A-Za-z0-9_-]$/);
|
|
}
|
|
function verifySymbol(s) {
|
|
const chars = Array.from(s);
|
|
if (isValidStart(chars[0]) && chars.slice(1).every(isValidContinue)) {
|
|
return s;
|
|
}
|
|
const buf = [];
|
|
let hasStart = false;
|
|
for (const c of chars) {
|
|
if (!hasStart && isValidStart(c)) {
|
|
hasStart = true;
|
|
buf.push(c);
|
|
}
|
|
else if (isValidContinue(c)) {
|
|
buf.push(c);
|
|
}
|
|
}
|
|
if (buf.length === 0) {
|
|
buf.push('_');
|
|
}
|
|
return buf.join('');
|
|
}
|