mirror of
https://github.com/status-im/re-natal.git
synced 2025-01-12 21:54:14 +00:00
refactor infer-components command to use it in use-figwheel for auto-require
This commit is contained in:
parent
8ae3bce468
commit
b423f76ab7
@ -33,6 +33,8 @@ ipAddressRx = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/i
|
|||||||
figwheelUrlRx = /ws:\/\/[0-9a-zA-Z\.]*:/g
|
figwheelUrlRx = /ws:\/\/[0-9a-zA-Z\.]*:/g
|
||||||
appDelegateRx = /http:\/\/[^:]+/g
|
appDelegateRx = /http:\/\/[^:]+/g
|
||||||
debugHostRx = /host]\s+\?:\s+@".*";/g
|
debugHostRx = /host]\s+\?:\s+@".*";/g
|
||||||
|
namespaceRx = /\(ns\s+([A-Za-z0-9.-]+)/g
|
||||||
|
jsRequireRx = /js\/require "(.+)"/g
|
||||||
rnVersion = '0.47.1'
|
rnVersion = '0.47.1'
|
||||||
rnWinVersion = '0.47.0-rc.5'
|
rnWinVersion = '0.47.0-rc.5'
|
||||||
rnPackagerPort = 8081
|
rnPackagerPort = 8081
|
||||||
@ -800,27 +802,54 @@ useComponent = (name, platform) ->
|
|||||||
catch {message}
|
catch {message}
|
||||||
logErr message
|
logErr message
|
||||||
|
|
||||||
inferComponents = () ->
|
platformOfNamespace = (ns) ->
|
||||||
|
if ns?
|
||||||
|
platforms = Object.keys platformMeta
|
||||||
|
platform = platforms.find((p) -> ns.indexOf(".#{p}") > 0);
|
||||||
|
platform ?= "common"
|
||||||
|
|
||||||
|
extractRequiresFromSourceFile = (file) ->
|
||||||
|
content = fs.readFileSync(file, encoding: 'utf8')
|
||||||
|
requires = []
|
||||||
|
while match = namespaceRx.exec(content)
|
||||||
|
ns = match[1]
|
||||||
|
while match = jsRequireRx.exec(content)
|
||||||
|
requires.push(match[1])
|
||||||
|
|
||||||
|
platform: platformOfNamespace(ns)
|
||||||
|
requires: requires
|
||||||
|
|
||||||
|
buildRequireByPlatformMap = () ->
|
||||||
onlyUserCljs = (item) -> fpath.extname(item.path) == '.cljs' and
|
onlyUserCljs = (item) -> fpath.extname(item.path) == '.cljs' and
|
||||||
item.path.indexOf('/target/') < 0 # ignore target dir
|
item.path.indexOf('/target/') < 0 # ignore target dir
|
||||||
jsRequire = /js\/require \"(.+)\"/g
|
|
||||||
files = klawSync process.cwd(),
|
files = klawSync process.cwd(),
|
||||||
nodir: true
|
nodir: true
|
||||||
filter: onlyUserCljs
|
filter: onlyUserCljs
|
||||||
filenames = files.map((o) -> o.path)
|
filenames = files.map((o) -> o.path)
|
||||||
contents = filenames.map((path) -> fs.readFileSync(path, encoding: 'utf8'))
|
extractedRequires = filenames.map(extractRequiresFromSourceFile)
|
||||||
|
|
||||||
|
extractedRequires.reduce((result, item) ->
|
||||||
|
platform = item.platform
|
||||||
|
if result[platform]?
|
||||||
|
result[platform] = Array.from(new Set(item.requires.concat(result[platform])))
|
||||||
|
else
|
||||||
|
result[platform] = Array.from(new Set(item.requires))
|
||||||
|
result
|
||||||
|
, {})
|
||||||
|
|
||||||
|
inferComponents = () ->
|
||||||
|
requiresByPlatform = buildRequireByPlatformMap()
|
||||||
|
|
||||||
|
allRequires = []
|
||||||
|
for k,v of requiresByPlatform
|
||||||
|
allRequires = Array.from(new Set(allRequires.concat(v)))
|
||||||
|
|
||||||
config = readConfig() # re-natal file
|
config = readConfig() # re-natal file
|
||||||
requires = new Set()
|
|
||||||
contents.forEach((text) ->
|
|
||||||
while match = jsRequire.exec(text)
|
|
||||||
requires.add(match[1]) if match[1].indexOf(config.imageDirs) < 0)
|
|
||||||
|
|
||||||
modules = new Set(config.modules)
|
modules = new Set(config.modules)
|
||||||
difference = new Set(Array.from(requires).filter((m) -> !modules.has(m)))
|
difference = new Set(Array.from(allRequires).filter((m) -> !modules.has(m)))
|
||||||
if(difference.size isnt 0)
|
if(difference.size isnt 0)
|
||||||
log "new component import found #{Array.from(difference)}"
|
log "new component import found #{Array.from(difference)}"
|
||||||
config.modules = Array.from(requires)
|
config.modules = Array.from(allRequires)
|
||||||
writeConfig(config)
|
writeConfig(config)
|
||||||
else
|
else
|
||||||
log "no new component was imported, defaulting to #{Array.from(modules)}"
|
log "no new component was imported, defaulting to #{Array.from(modules)}"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user