api.ts 2.1 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
  output.logFilename = !!output.logFilename
fxy060608's avatar
fxy060608 已提交
44
  output.noColor = !!output.noColor
fxy060608's avatar
fxy060608 已提交
45

46 47
  return options
}
fxy060608's avatar
fxy060608 已提交
48

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

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

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

fxy060608's avatar
fxy060608 已提交
76
export function bundle(options: UtsBundleOptions): Promise<UtsResult> {
fxy060608's avatar
fxy060608 已提交
77 78 79 80 81
  const bundleOptions = resolveOptions(options)
  if (!bundleOptions) {
    return Promise.resolve({})
  }
  return bindings.bundle(toBuffer(bundleOptions)).then((res: string) => res)
fxy060608's avatar
fxy060608 已提交
82 83
}

fxy060608's avatar
fxy060608 已提交
84 85 86
function toBuffer(t: any): Buffer {
  return Buffer.from(JSON.stringify(t))
}