All files / src/commands init.ts

88% Statements 22/25
68.75% Branches 11/16
100% Functions 2/2
100% Lines 20/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 401x 1x                       3x 3x 3x 3x 3x 3x   3x   3x     3x   3x 3x 2x 2x 2x   2x 2x   2x 2x    
import { Repository, Resource, Project, Effect, EffectOptions } from '@/internal'
import { checkWorkDir } from '@/utils'
 
interface InitOptions {
  cwd?: string
  name?: string
  noDeps?: boolean
  version?: string
  force?: boolean
  repository?: string
  effect?: EffectOptions
}
 
export default async(options: InitOptions): Promise<void> => {
  const cwd = options.cwd || process.cwd()
  const name = options.name
  const noDeps = options.noDeps || false
  const version = options.version || 'latest'
  const force = options.force || false
 
  Iif (!options.repository) throw new TypeError('options.repository is required for `mili.init(options)`')
 
  Effect.replace(options.effect)
 
 
  Iif (force) await checkWorkDir(cwd)
 
  const repo = await Repository.format(options.repository)
  Eif (version) await repo.checkout(version)
  const template = await repo.install({ noDeps })
  const project = await Project.load(cwd)
  Iif (options.name) project.name = name
 
  const resource = new Resource('init', project, template)
  const compiler = await resource.compile()
 
  await compiler.render({ ignoreAnswered: true })
  await compiler.emit('initialized')
}