提交 68efd5ec 编写于 作者: fxy060608's avatar fxy060608

wip(uts): normalize path

上级 0ce7e37a
declare const _default: any;
export default _default;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
function isMusl() {
// For Node 10
if (!process.report || typeof process.report.getReport !== 'function') {
try {
return fs_1.default.readFileSync('/usr/bin/ldd', 'utf8').includes('musl');
}
catch (e) {
return true;
}
}
else {
const { glibcVersionRuntime } = process.report.getReport().header;
return !glibcVersionRuntime;
}
}
function resolveNativeBinding() {
const { platform, arch } = process;
let nativeBinding = '';
switch (platform) {
case 'android':
switch (arch) {
case 'arm64':
nativeBinding = 'uts-android-arm64';
break;
case 'arm':
nativeBinding = 'uts-android-arm-eabi';
break;
default:
throw new Error(`Unsupported architecture on Android ${arch}`);
}
break;
case 'win32':
switch (arch) {
case 'x64':
nativeBinding = 'uts-win32-x64-msvc';
break;
case 'ia32':
nativeBinding = 'uts-win32-ia32-msvc';
break;
case 'arm64':
nativeBinding = 'uts-win32-arm64-msvc';
break;
default:
throw new Error(`Unsupported architecture on Windows: ${arch}`);
}
break;
case 'darwin':
switch (arch) {
case 'x64':
nativeBinding = 'uts-darwin-x64';
break;
case 'arm64':
nativeBinding = 'uts-darwin-arm64';
break;
default:
throw new Error(`Unsupported architecture on macOS: ${arch}`);
}
break;
case 'freebsd':
if (arch !== 'x64') {
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`);
}
nativeBinding = 'uts-freebsd-x64';
break;
case 'linux':
switch (arch) {
case 'x64':
if (isMusl()) {
nativeBinding = 'uts-linux-x64-musl';
}
else {
nativeBinding = 'uts-linux-x64-gnu';
}
break;
case 'arm64':
if (isMusl()) {
nativeBinding = 'uts-linux-arm64-musl';
}
else {
nativeBinding = 'uts-linux-arm64-gnu';
}
break;
case 'arm':
nativeBinding = 'uts-linux-arm-gnueabihf';
break;
default:
throw new Error(`Unsupported architecture on Linux: ${arch}`);
}
break;
default:
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`);
}
return require('@dcloudio/' + nativeBinding);
}
exports.default = resolveNativeBinding();
export declare const enum UtsTarget {
KOTLIN = "kotlin",
SWIFT = "swift"
}
export declare type UtsMode = 'dev' | 'build';
export interface ToOptions {
/**
* 为 true 时,禁用日志输出,默认为 false
*/
silent?: boolean;
input: {
/**
* 插件根目录
*/
dir: string;
/**
* 文件后缀,默认 .uts
*/
extname?: string;
};
output: {
/**
* 输出目录
*/
dir: string;
/**
* 是否生成 sourceMap,为 string 时,表示生成的 sourceMap 目标目录
*/
sourceMap: boolean | string;
/**
* sourceMap 中是否包含源码
*/
inlineSourcesContent?: boolean;
};
}
export declare function runDev(target: UtsTarget, opts: ToOptions): void;
export declare function runBuild(target: UtsTarget, opts: ToOptions): void | Promise<import("./types").UtsResult[]>;
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.runBuild = exports.runDev = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const fast_glob_1 = __importDefault(require("fast-glob"));
const chokidar_1 = require("chokidar");
const api_1 = require("./api");
const utils_1 = require("./utils");
const targetDirs = {
["kotlin" /* KOTLIN */]: 'android',
["swift" /* SWIFT */]: 'ios',
};
function resolveDefaultOutputDir(mode, inputDir) {
return path_1.default.resolve(inputDir, '../dist/' + mode);
}
function parseOptions(mode, target, opts) {
const { input } = opts;
if (!(input === null || input === void 0 ? void 0 : input.dir)) {
throw new Error(`input.dir is required.`);
}
if (!fs_extra_1.default.existsSync(input.dir)) {
throw new Error(`${input} is not found.`);
}
let inputSrcDir = '';
if (target === "kotlin" /* KOTLIN */) {
inputSrcDir = resolveKotlinSrcDir(input.dir);
}
else {
throw new Error(`${target} is unsupported.`);
}
if (!fs_extra_1.default.existsSync(inputSrcDir)) {
throw new Error(`${inputSrcDir} is not found.`);
}
if (!opts.output) {
opts.output = {
dir: '',
sourceMap: '',
};
}
if (!opts.output.dir) {
opts.output.dir = resolveDefaultOutputDir(mode, input.dir);
}
opts.silent = opts.silent === true;
return opts;
}
const EXTNAME = '.uts';
function resolveKotlinSrcDir(dir) {
return path_1.default.join(dir, targetDirs["kotlin" /* KOTLIN */] + '/src');
}
function initInputKotlinOptions(root) {
return {
root,
filename: '',
};
}
function initOutputKotlinOptions(outDir, sourceMap, inlineSourcesContent) {
return {
outDir,
sourceMap,
inlineSourcesContent,
};
}
function watchSwift(_) { }
function buildSwift(_) { }
function watchKotlin({ silent, input: { dir: inputDir, extname }, output: { dir: outputDir, sourceMap, inlineSourcesContent }, }) {
fs_extra_1.default.emptyDirSync(outputDir);
extname = extname || EXTNAME;
const inputSrcDir = resolveKotlinSrcDir(inputDir);
const outputSrcDir = resolveKotlinSrcDir(outputDir);
const input = initInputKotlinOptions(inputSrcDir);
const output = initOutputKotlinOptions(outputSrcDir, sourceMap, !!inlineSourcesContent);
(0, chokidar_1.watch)('**/*' + extname, {
cwd: inputSrcDir,
ignored: ['**/*.d' + extname],
})
.on('add', (filename) => {
buildKotlinFile(path_1.default.resolve(inputSrcDir, filename), input, output).then((res) => {
!silent && (0, utils_1.printUtsResult)(res);
});
})
.on('change', (filename) => {
buildKotlinFile(path_1.default.resolve(inputSrcDir, filename), input, output).then((res) => {
!silent && (0, utils_1.printUtsResult)(res);
});
})
.on('unlink', (filename) => {
try {
fs_extra_1.default.unlinkSync(path_1.default.resolve(outputSrcDir, filename));
}
catch (e) { }
})
.on('ready', () => {
copyAssets("kotlin" /* KOTLIN */, inputDir, outputDir, extname);
});
}
function buildKotlin({ silent, input: { dir: inputDir, extname }, output: { dir: outputDir, sourceMap, inlineSourcesContent }, }) {
fs_extra_1.default.emptyDirSync(outputDir);
extname = extname || EXTNAME;
const inputSrcDir = resolveKotlinSrcDir(inputDir);
const outputSrcDir = resolveKotlinSrcDir(outputDir);
const input = initInputKotlinOptions(inputSrcDir);
const output = initOutputKotlinOptions(outputSrcDir, sourceMap, !!inlineSourcesContent);
const files = fast_glob_1.default.sync('**/*' + extname, {
absolute: true,
cwd: inputSrcDir,
ignore: ['**/*.d' + extname],
});
return Promise.all(files.map((filename) => buildKotlinFile(filename, input, output)))
.then((res) => {
return copyAssets("kotlin" /* KOTLIN */, inputDir, outputDir, extname).then(() => res);
})
.then((res) => {
!silent && (0, utils_1.printUtsResults)(res);
return res;
});
}
function copyAssets(target, inputDir, outputDir, extname) {
inputDir = path_1.default.resolve(inputDir);
outputDir = path_1.default.resolve(outputDir);
const kotlinRootDir = path_1.default.join(inputDir, targetDirs["kotlin" /* KOTLIN */]);
const swiftRootDir = path_1.default.join(inputDir, targetDirs["swift" /* SWIFT */]);
return fs_extra_1.default.copy(inputDir, outputDir, {
filter(src) {
if (target === "kotlin" /* KOTLIN */) {
if (src === swiftRootDir) {
return false;
}
}
else if (target === "swift" /* SWIFT */) {
if (src === kotlinRootDir) {
return false;
}
}
return ![extname, '.ts'].includes(path_1.default.extname(src));
},
});
}
function buildKotlinFile(filename, input, output) {
const toKotlinOptions = {
input: {
...input,
filename,
namespace: '',
},
output: {
...output,
},
};
const start = process.hrtime();
return (0, api_1.toKotlin)(toKotlinOptions).then((res) => {
res.time = (0, utils_1.timeEnd)(start);
return res;
});
}
function runDev(target, opts) {
opts = parseOptions('dev', target, opts);
!opts.silent && (0, utils_1.printStartup)(target, 'development');
switch (target) {
case "kotlin" /* KOTLIN */:
return watchKotlin(opts);
case "swift" /* SWIFT */:
return watchSwift(opts);
}
}
exports.runDev = runDev;
function runBuild(target, opts) {
opts = parseOptions('build', target, opts);
!opts.silent && (0, utils_1.printStartup)(target, 'production');
switch (target) {
case "kotlin" /* KOTLIN */:
return buildKotlin(opts);
case "swift" /* SWIFT */:
return buildSwift(opts);
}
}
exports.runBuild = runBuild;
export interface UtsParserConfig {
/**
* Defaults to `false`.
*/
tsx?: boolean;
/**
* Defaults to `false`.
*/
decorators?: boolean;
/**
* Defaults to `false`
*/
dynamicImport?: boolean;
}
export declare type UtsParseOptions = UtsParserConfig & {
filename?: string;
comments?: boolean;
};
export declare type InputKotlinOptions = UtsParseOptions & {
root: string;
filename: string;
namespace?: string;
};
export declare type OutputKotlinOptions = {
outDir: string;
sourceMap: boolean | string;
inlineSourcesContent?: boolean;
};
export interface UtsKotlinOptions {
input: InputKotlinOptions;
output: OutputKotlinOptions;
}
export declare type InputSwiftOptions = UtsParseOptions;
export declare type OutputSwiftOptions = {};
export interface UtsSwiftOptions {
input: InputSwiftOptions;
output: OutputSwiftOptions;
}
export interface UtsResult {
filename?: string;
time?: number;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
import { resolve } from 'path'
import { UtsKotlinOptions, UtsResult, UtsSwiftOptions } from './types'
import { normalizePath } from './utils'
export * from './types'
......@@ -25,6 +26,12 @@ export function toKotlin(options: UtsKotlinOptions): Promise<UtsResult> {
} else if (output.sourceMap === false) {
output.sourceMap = ''
}
input.root = normalizePath(input.root)
input.filename = normalizePath(input.filename)
output.outDir = normalizePath(output.outDir)
output.sourceMap = normalizePath(output.sourceMap)
return bindings
.toKotlin(toBuffer(options))
.then((res: string) => JSON.parse(res))
......
......@@ -8,7 +8,7 @@ import { InputKotlinOptions, toKotlin } from './api'
import { OutputKotlinOptions, UtsKotlinOptions } from './types'
import { printStartup, printUtsResult, printUtsResults, timeEnd } from './utils'
export const enum UtsTarget {
export enum UtsTarget {
KOTLIN = 'kotlin',
SWIFT = 'swift',
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册