-
Notifications
You must be signed in to change notification settings - Fork 0
/
TsProject.coffee
66 lines (55 loc) · 1.66 KB
/
TsProject.coffee
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# TYPESCRIPT PROJECT FACTORY
# needed for watch to use same ts project
# =======================================
fs = require 'fs'
typescript = require 'typescript' # use build's ts version
class TsProject
# typescript instance locations
# =============================
instances = {}
# private
# =======
help =
fileExists: (_path) ->
try fs.lstatSync(_path).isFile()
catch e then false
hasTsConfig: (tsconfigPath) ->
hasTsConfig = @fileExists tsconfigPath
# console.log "Has tsconfig.json: #{hasTsConfig}".alert
hasTsConfig
# @id = location (ex: client or server)
# @ts = gulp-typescript
# @tsconfig = tsconfig.json path
# @opts = ts project options
# ===========================================
class Typescript
constructor: (@id, @ts, @tsconfig, @opts={}) ->
@hasTsConfig = help.hasTsConfig @tsconfig
@opts.typescript = typescript
return @setProject().setProjectConfig().getProject()
setProject: ->
if @hasTsConfig
@project = @ts.createProject @tsconfig, @opts
else
@project = @ts.createProject @opts
@
setProjectConfig: ->
return @ if @hasTsConfig
# gulp-typescript needs these set if no tsconfig.json
@project.config = {}
@project.configFileName = @tsconfig
@project.options.rootDir = './'
@
getProject: ->
@project
# static method to retrieve an
# instance or create a new one
# ============================
@get: (id, ts, tsconfig, opts) ->
if not instances[id] # create new instance
# console.log "TS INSTANCE ID: #{id}".alert
instances[id] = new Typescript id, ts, tsconfig, opts
instances[id]
# Export Class!
# =============
module.exports = TsProject