| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getExtApiComponents = exports.addExtApiComponents = exports.getUniCloudObjectInfo = exports.getUniCloudSpaceList = exports.parseUTSImportFilename = exports.parseUTSRelativeFilename = exports.stringifyMap = exports.isVue = exports.uvueOutDir = exports.kotlinOutDir = exports.createResolveError = exports.parseImports = exports.createTryResolve = exports.wrapResolve = 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");
- const errors_1 = require("./uvue/compiler/errors");
- exports.UVUE_CLASS_NAME_PREFIX = 'Gen';
- exports.DEFAULT_APPID = 'HBuilder';
- exports.ENTRY_FILENAME = 'main.uts';
- function wrapResolve(resolve) {
- return async (source, importer, options) => {
- try {
- return await resolve(source, importer, options);
- }
- catch (e) {
- // import "@/pages/logo.png" 可能会报 Cannot find module 错误
- }
- return null;
- };
- }
- exports.wrapResolve = wrapResolve;
- function createTryResolve(importer, resolve, offsetStart, origCode = '') {
- return async (source, code, { ss, se }) => {
- const resolved = await wrapResolve(resolve)(source, importer);
- if (!resolved) {
- const { start, end } = (0, uni_cli_shared_1.offsetToStartAndEnd)(code, ss, se);
- if (offsetStart) {
- if (start.line === 1) {
- start.column = start.column + offsetStart.column;
- if (end.line === 1) {
- end.column = end.column + offsetStart.column;
- }
- }
- const offsetLine = offsetStart.line - 1;
- start.line = start.line + offsetLine;
- end.line = end.line + offsetLine;
- }
- throw createResolveError(origCode || code, (0, uni_cli_shared_1.createResolveErrorMsg)(source, importer), start, end);
- }
- };
- }
- exports.createTryResolve = createTryResolve;
- async function parseImports(code, tryResolve) {
- await es_module_lexer_1.init;
- let res = [[], [], false];
- try {
- res = (0, es_module_lexer_1.parse)(code);
- }
- catch (err) {
- const message = err.message;
- if (message) {
- const matches = message.match(/@:(\d+):(\d+)/);
- if (matches) {
- throw (0, uni_cli_shared_1.createRollupError)('', '', (0, errors_1.createCompilerError)(0, {
- start: {
- offset: 0,
- line: parseInt(matches[1]),
- column: parseInt(matches[2]),
- },
- }, { 0: `Parse error` }, ''), code);
- }
- }
- throw err;
- }
- const imports = res[0];
- const importsCode = [];
- for (const specifier of imports) {
- const source = code.slice(specifier.s, specifier.e);
- if (tryResolve) {
- const res = await tryResolve(source, code, specifier);
- if (res === false) {
- // 忽略该import
- continue;
- }
- }
- importsCode.push(`import "${source}"`);
- }
- return importsCode.concat(parseUniExtApiImports(code)).join('\n');
- }
- exports.parseImports = parseImports;
- function createResolveError(code, msg, start, end) {
- return (0, uni_cli_shared_1.createRollupError)('', '', (0, errors_1.createCompilerError)(0, {
- start,
- end,
- }, { 0: msg }, ''), code);
- }
- exports.createResolveError = createResolveError;
- // @ts-expect-error 暂时不用
- function genImportsCode(code, imports) {
- const chars = code.split('');
- const keepChars = [];
- imports.forEach(({ ss, se }) => {
- for (let i = ss; i <= se; i++) {
- keepChars.push(i);
- }
- });
- for (let i = 0; i < chars.length; i++) {
- if (!keepChars.includes(i)) {
- const char = chars[i];
- if (char !== '\r' && char !== '\n') {
- chars[i] = ' ';
- }
- }
- }
- return chars.join('');
- }
- function parseUniExtApiImports(code) {
- if (!process.env.UNI_UTS_PLATFORM) {
- return [];
- }
- 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, root) {
- if (!path_1.default.isAbsolute(filename)) {
- return filename;
- }
- return (0, uni_cli_shared_1.normalizeNodeModules)(path_1.default.relative(root ?? 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.provider && space.clientSecret) {
- space.provider = 'aliyun';
- }
- switch (space.provider) {
- case 'aliyun':
- return {
- provider: space.provider || 'aliyun',
- spaceName: space.name,
- spaceId: space.id,
- clientSecret: space.clientSecret,
- endpoint: space.apiEndpoint,
- workspaceFolder: space.workspaceFolder,
- };
- case 'alipay': {
- return {
- provider: space.provider,
- spaceName: space.name,
- spaceId: space.id,
- spaceAppId: space.spaceAppId,
- accessKey: space.accessKey,
- secretKey: space.secretKey,
- workspaceFolder: space.workspaceFolder,
- };
- }
- case 'tencent':
- default: {
- 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.message);
- process.exit(1);
- }
- }
- 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;
- // export const initAutoImportOnce = once(initAutoImport)
- // function initAutoImport(autoImportOptions?: AutoImportOptions) {
- // const options = initAutoImportOptions(
- // process.env.UNI_UTS_PLATFORM,
- // autoImportOptions || {}
- // )
- // if ((options.imports as any[]).length === 0) {
- // return {
- // transform(code: string, id: string) {
- // return { code }
- // },
- // }
- // }
- // const autoImport = AutoImport(options) as {
- // transform(
- // code: string,
- // id: string
- // ): Promise<{ code: string; map?: SourceMapInput }>
- // }
- // const { transform } = autoImport
- // autoImport.transform = async function (code, id) {
- // const result = await transform.call(this, code, id)
- // if (result) {
- // return result
- // }
- // return { code }
- // }
- // return autoImport
- // }
|