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

wip(uts): compiler

上级 0a8dd9e5
import { UIDevice } from 'UIKit'
type GetBatteryInfoOptions = {
success?: (res: UTSJSONObject) => void
fail?: (res: UTSJSONObject) => void
complete?: (res: UTSJSONObject) => void
}
export default async function getBatteryInfo(options: GetBatteryInfoOptions) {
const res = {
errMsg: 'getBatteryInfo:ok',
level: UIDevice.current.batteryLevel * 100,
isCharging: UIDevice.current.batteryState == UIDevice.BatteryState.charging,
}
if (options.success != null) {
options.success!(res)
}
if (options.complete != null) {
options.complete!(res)
}
}
import UIKit;
typealias GetBatteryInfoOptions = {
var success?: (_ res: UTSJSONObject) -> Void;
var fail?: (_ res: UTSJSONObject) -> Void;
var complete?: (_ res: UTSJSONObject) -> Void;
};
async func getBatteryInfo(_ options: GetBatteryInfoOptions) {
var res = [
"errMsg": "getBatteryInfo:ok",
"level": UIDevice.current.batteryLevel * 100,
"isCharging": UIDevice.current.batteryState == UIDevice.BatteryState.charging
];
if (options.success != nil) options.success!(res);
if (options.complete != nil) options.complete!(res);
}
{"version":3,"sources":["/Users/fxy/Projects/GitHub/uni-app/uni-app-next/packages/playground/uts/uni_modules/test-uniplugin/app-ios/index.uts"],"sourcesContent":["import { UIDevice } from 'UIKit'\n\ntype GetBatteryInfoOptions = {\n success?: (res: UTSJSONObject) => void\n fail?: (res: UTSJSONObject) => void\n complete?: (res: UTSJSONObject) => void\n}\n\nexport default async function getBatteryInfo(options: GetBatteryInfoOptions) {\n const res = {\n errMsg: 'getBatteryInfo:ok',\n level: UIDevice.current.batteryLevel * 100,\n isCharging: UIDevice.current.batteryState == UIDevice.BatteryState.charging,\n }\n if (options.success != null) {\n options.success!(res)\n }\n if (options.complete != null) {\n options.complete!(res)\n }\n}\n"],"names":[],"mappings":"AAAA;UAEK,qBAAqB;QACxB,OAAO,MAAI,GAAkB,EAAb,aAAa,KAAK,IAAI;QACtC,IAAI,MAAI,GAAkB,EAAb,aAAa,KAAK,IAAI;QACnC,QAAQ,MAAI,GAAkB,EAAb,aAAa,KAAK,IAAI;;AAG1B,WAAe,cAAc,CAAC,EAAA,OAA8B,EAArB,qBAAqB,EAAE;IAC3E,IAAM,GAAG,GAAG;QACV,CAAA,MAAM,GAAE,mBAAmB;QAC3B,CAAA,KAAK,GAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG;QAC1C,CAAA,UAAU,GAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ;KAC5E;IACD,IAAI,OAAO,CAAC,OAAO,IAAI,GAAI,EACzB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;IAEvB,IAAI,OAAO,CAAC,QAAQ,IAAI,GAAI,EAC1B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;AAE1B"}
\ No newline at end of file
import { isInHBuilderX, resolveSourceMapPath } from '@dcloudio/uni-cli-shared'
import { capitalize } from '@vue/shared'
import { genUTSPlatformResource, getUtsCompiler, resolvePackage } from './utils'
export function parseSwiftPackage(filename: string) {
......@@ -6,7 +7,7 @@ export function parseSwiftPackage(filename: string) {
if (!res) {
return ''
}
return 'UTSSDK' + (res.is_uni_modules ? 'Modules' : '') + res.name
return 'UTSSDK' + (res.is_uni_modules ? 'Modules' : '') + capitalize(res.name)
}
export async function compileSwift(filename: string) {
......@@ -31,7 +32,7 @@ export async function compileSwift(filename: string) {
outDir: outputDir,
package: '',
sourceMap: resolveSourceMapPath(),
extname: 'kt',
extname: 'swift',
imports: [],
logFilename: true,
noColor: isInHBuilderX(),
......
......@@ -44,11 +44,13 @@ export function genUTSPlatformResource(
const utsOutputDir = resolveUTSPlatformDir(platformFile, platform)
// 拷贝所有非uts文件及目录
fs.copySync(utsInputDir, utsOutputDir, {
filter(src) {
return path.extname(src) !== '.uts'
},
})
if (fs.existsSync(utsInputDir)) {
fs.copySync(utsInputDir, utsOutputDir, {
filter(src) {
return path.extname(src) !== '.uts'
},
})
}
// 生产模式下,需要将 kt 文件转移到 src 下
const srcDir = path.resolve(utsOutputDir, 'src')
......
......@@ -63,6 +63,16 @@ export function toKotlin(options: UtsOptions): Promise<UtsResult> {
.then((res: string) => JSON.parse(res))
}
export function bundleKotlin(options: UtsBundleOptions): Promise<UtsResult> {
const bundleOptions = resolveOptions(options)
if (!bundleOptions) {
return Promise.resolve({})
}
return bindings
.bundleKotlin(toBuffer(bundleOptions))
.then((res: string) => res)
}
export function toSwift(options: UtsOptions): Promise<UtsResult> {
const swiftOptions = resolveOptions(options)
if (!swiftOptions) {
......@@ -73,12 +83,14 @@ export function toSwift(options: UtsOptions): Promise<UtsResult> {
.then((res: string) => JSON.parse(res))
}
export function bundle(options: UtsBundleOptions): Promise<UtsResult> {
export function bundleSwift(options: UtsBundleOptions): Promise<UtsResult> {
const bundleOptions = resolveOptions(options)
if (!bundleOptions) {
return Promise.resolve({})
}
return bindings.bundle(toBuffer(bundleOptions)).then((res: string) => res)
return bindings
.bundleSwift(toBuffer(bundleOptions))
.then((res: string) => res)
}
function toBuffer(t: any): Buffer {
......
......@@ -4,8 +4,9 @@ import glob from 'fast-glob'
import chokidar from 'chokidar'
import { toKotlin, toSwift } from './api'
import { bundleKotlin, bundleSwift, toKotlin, toSwift } from './api'
import {
UtsBundleOptions,
UtsInputOptions,
UtsOptions,
UtsOutputOptions,
......@@ -316,7 +317,16 @@ function buildFile(
})
}
export { parse, bundle } from './api'
export { parse, bundleKotlin, bundleSwift } from './api'
export function bundle(target: UtsTarget, opts: UtsBundleOptions) {
if (target === UtsTarget.KOTLIN) {
return bundleKotlin(opts)
} else if (target === UtsTarget.SWIFT) {
return bundleSwift(opts)
}
return Promise.resolve({})
}
export function runDev(target: UtsTarget, opts: ToOptions) {
opts = parseOptions('dev', target, opts)
......
const fs = require('fs')
const path = require('path')
const { parse, bundle } = require('../packages/uts/dist')
const { parse, bundle, UtsTarget } = require('../packages/uts/dist')
const projectDir = path.resolve(__dirname, '../packages/playground/uts')
let start = Date.now()
const start = Date.now()
parse(
fs.readFileSync(
path.resolve(
......@@ -16,33 +16,74 @@ parse(
console.log('parse: ' + (Date.now() - start) + 'ms')
console.log(JSON.stringify(res))
})
start = Date.now()
bundle({
input: {
root: projectDir,
filename: path.resolve(
projectDir,
'uni_modules/test-uniplugin/app-android/index.uts'
),
},
output: {
outDir: path.resolve(projectDir, 'unpackage/dist/app'),
package: 'uts.modules.testUniPlugin',
imports: ['kotlinx.coroutines.*', 'io.dcloud.uts.runtime.*'],
sourceMap: true,
extname: 'kt',
logFilename: true,
},
}).then((res) => {
console.log('bundle: ' + (Date.now() - start) + 'ms')
console.log(JSON.stringify(res))
console.log(
fs.readFileSync(
path.resolve(
function testKotlin() {
const start = Date.now()
return bundle(UtsTarget.KOTLIN, {
input: {
root: projectDir,
filename: path.resolve(
projectDir,
'unpackage/dist/app/uni_modules/test-uniplugin/app-android/index.kt'
'uni_modules/test-uniplugin/app-android/index.uts'
),
'utf8'
},
output: {
outDir: path.resolve(projectDir, 'unpackage/dist/app'),
package: 'uts.modules.testUniPlugin',
imports: ['kotlinx.coroutines.*', 'io.dcloud.uts.runtime.*'],
sourceMap: true,
extname: 'kt',
logFilename: true,
},
}).then((res) => {
console.log('bundle: ' + (Date.now() - start) + 'ms')
console.log(JSON.stringify(res))
console.log(
fs.readFileSync(
path.resolve(
projectDir,
'unpackage/dist/app/uni_modules/test-uniplugin/app-android/index.kt'
),
'utf8'
)
)
)
})
})
}
function testSwift() {
const start = Date.now()
return bundle(UtsTarget.SWIFT, {
input: {
root: projectDir,
filename: path.resolve(
projectDir,
'uni_modules/test-uniplugin/app-ios/index.uts'
),
},
output: {
outDir: path.resolve(projectDir, 'unpackage/dist/app'),
package: 'uts.modules.testUniPlugin',
sourceMap: true,
extname: 'swift',
logFilename: true,
},
}).then((res) => {
console.log('bundle: ' + (Date.now() - start) + 'ms')
console.log(JSON.stringify(res))
console.log(
fs.readFileSync(
path.resolve(
projectDir,
'unpackage/dist/app/uni_modules/test-uniplugin/app-ios/index.swift'
),
'utf8'
)
)
})
}
async function test() {
await testKotlin()
await testSwift()
}
test()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册