"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()`; } 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(''); }