api.ts 1.9 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
import { resolve } from 'path'
fxy060608's avatar
fxy060608 已提交
2 3 4 5 6 7
import type {
  UtsBundleOptions,
  UtsOptions,
  UtsParseOptions,
  UtsResult,
} from './types'
fxy060608's avatar
fxy060608 已提交
8
import { normalizePath } from './utils'
fxy060608's avatar
fxy060608 已提交
9 10 11 12 13 14

const bindingsOverride = process.env['UTS_BINARY_PATH']
const bindings = !!bindingsOverride
  ? require(resolve(bindingsOverride))
  : require('./binding').default

fxy060608's avatar
fxy060608 已提交
15
function resolveOptions(options: UtsOptions) {
fxy060608's avatar
fxy060608 已提交
16 17
  const { input, output } = options
  if (!input?.root) {
18
    return
fxy060608's avatar
fxy060608 已提交
19 20
  }
  if (!input?.filename) {
21
    return
fxy060608's avatar
fxy060608 已提交
22 23
  }
  if (!output?.outDir) {
24
    return
fxy060608's avatar
fxy060608 已提交
25 26 27
  }
  if (output.sourceMap === true) {
    output.sourceMap = output.outDir
fxy060608's avatar
fxy060608 已提交
28 29 30 31
  } else if (
    output.sourceMap === false ||
    typeof output.sourceMap === 'undefined'
  ) {
fxy060608's avatar
fxy060608 已提交
32 33
    output.sourceMap = ''
  }
fxy060608's avatar
fxy060608 已提交
34 35 36 37
  if (!output.imports) {
    // TODO
    output.imports = []
  }
fxy060608's avatar
fxy060608 已提交
38 39 40 41 42

  input.root = normalizePath(input.root)
  input.filename = normalizePath(input.filename)
  output.outDir = normalizePath(output.outDir)
  output.sourceMap = normalizePath(output.sourceMap)
fxy060608's avatar
fxy060608 已提交
43

44 45
  return options
}
fxy060608's avatar
fxy060608 已提交
46

fxy060608's avatar
fxy060608 已提交
47 48 49 50 51 52
export function parse(source: string, options: UtsParseOptions = {}) {
  return bindings
    .parse(source, toBuffer(options))
    .then((res: string) => JSON.parse(res))
}

fxy060608's avatar
fxy060608 已提交
53
export function toKotlin(options: UtsOptions): Promise<UtsResult> {
54 55 56 57
  const kotlinOptions = resolveOptions(options)
  if (!kotlinOptions) {
    return Promise.resolve({})
  }
fxy060608's avatar
fxy060608 已提交
58
  return bindings
59
    .toKotlin(toBuffer(kotlinOptions))
fxy060608's avatar
fxy060608 已提交
60
    .then((res: string) => JSON.parse(res))
fxy060608's avatar
fxy060608 已提交
61 62
}

fxy060608's avatar
fxy060608 已提交
63
export function toSwift(options: UtsOptions): Promise<UtsResult> {
64 65 66 67
  const swiftOptions = resolveOptions(options)
  if (!swiftOptions) {
    return Promise.resolve({})
  }
fxy060608's avatar
fxy060608 已提交
68
  return bindings
69
    .toSwift(toBuffer(swiftOptions))
fxy060608's avatar
fxy060608 已提交
70
    .then((res: string) => JSON.parse(res))
fxy060608's avatar
fxy060608 已提交
71 72
}

fxy060608's avatar
fxy060608 已提交
73 74 75 76
export function bundle(options: UtsBundleOptions): Promise<UtsResult> {
  return bindings.bundle(toBuffer(options)).then((res: string) => res)
}

fxy060608's avatar
fxy060608 已提交
77 78 79
function toBuffer(t: any): Buffer {
  return Buffer.from(JSON.stringify(t))
}