infer components when auto-require is enabled
This commit is contained in:
parent
d4c45e8777
commit
b37334a3df
|
@ -682,7 +682,46 @@ updateIosRCTWebSocketExecutor = (iosHost) ->
|
||||||
RCTWebSocketExecutorPath = "node_modules/react-native/Libraries/WebSocket/RCTWebSocketExecutor.m"
|
RCTWebSocketExecutorPath = "node_modules/react-native/Libraries/WebSocket/RCTWebSocketExecutor.m"
|
||||||
edit RCTWebSocketExecutorPath, [[debugHostRx, "host] ?: @\"#{iosHost}\";"]]
|
edit RCTWebSocketExecutorPath, [[debugHostRx, "host] ?: @\"#{iosHost}\";"]]
|
||||||
|
|
||||||
|
platformOfNamespace = (ns) ->
|
||||||
|
if ns?
|
||||||
|
possiblePlatforms = Object.keys platformMeta
|
||||||
|
p = possiblePlatforms.find((p) -> ns.indexOf(".#{p}") > 0);
|
||||||
|
p ?= "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
|
||||||
|
item.path.indexOf('/target/') < 0 # ignore target dir
|
||||||
|
files = klawSync process.cwd(),
|
||||||
|
nodir: true
|
||||||
|
filter: onlyUserCljs
|
||||||
|
filenames = files.map((o) -> o.path)
|
||||||
|
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
|
||||||
|
, {})
|
||||||
|
|
||||||
platformModulesAndImages = (config, platform) ->
|
platformModulesAndImages = (config, platform) ->
|
||||||
|
if config.autoRequire? and config.autoRequire
|
||||||
|
requires = buildRequireByPlatformMap()
|
||||||
|
requires.common.concat(requires[platform])
|
||||||
|
else
|
||||||
images = scanImages(config.imageDirs).map (fname) -> './' + fname;
|
images = scanImages(config.imageDirs).map (fname) -> './' + fname;
|
||||||
modulesAndImages = config.modules.concat images;
|
modulesAndImages = config.modules.concat images;
|
||||||
if typeof config.platforms[platform].modules is 'undefined'
|
if typeof config.platforms[platform].modules is 'undefined'
|
||||||
|
@ -707,6 +746,9 @@ generateDevScripts = () ->
|
||||||
for platform in platforms
|
for platform in platforms
|
||||||
devHost[platform] = config.platforms[platform].host
|
devHost[platform] = config.platforms[platform].host
|
||||||
|
|
||||||
|
if config.autoRequire? and config.autoRequire
|
||||||
|
log 'Auto-require is enabled. Scanning for require() calls in *.cljs files...'
|
||||||
|
|
||||||
for platform in platforms
|
for platform in platforms
|
||||||
moduleMap = generateRequireModulesCode(platformModulesAndImages(config, platform))
|
moduleMap = generateRequireModulesCode(platformModulesAndImages(config, platform))
|
||||||
fs.writeFileSync "index.#{platform}.js", "#{moduleMap}require('figwheel-bridge').withModules(modules).start('#{projName}','#{platform}','#{devHost[platform]}');"
|
fs.writeFileSync "index.#{platform}.js", "#{moduleMap}require('figwheel-bridge').withModules(modules).start('#{projName}','#{platform}','#{devHost[platform]}');"
|
||||||
|
@ -802,41 +844,6 @@ useComponent = (name, platform) ->
|
||||||
catch {message}
|
catch {message}
|
||||||
logErr message
|
logErr message
|
||||||
|
|
||||||
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
|
|
||||||
item.path.indexOf('/target/') < 0 # ignore target dir
|
|
||||||
files = klawSync process.cwd(),
|
|
||||||
nodir: true
|
|
||||||
filter: onlyUserCljs
|
|
||||||
filenames = files.map((o) -> o.path)
|
|
||||||
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 = () ->
|
inferComponents = () ->
|
||||||
requiresByPlatform = buildRequireByPlatformMap()
|
requiresByPlatform = buildRequireByPlatformMap()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue