Skip to content

Commit

Permalink
feat(app): Bulletproof Cordova and Capacitor modes handling after a g…
Browse files Browse the repository at this point in the history
…it clone
  • Loading branch information
rstoenescu committed Dec 19, 2019
1 parent eba6e05 commit bd920c2
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 49 deletions.
7 changes: 4 additions & 3 deletions app/lib/capacitor/capacitor-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ const logger = require('../helpers/logger')
const log = logger('app:capacitor-conf')
const warn = logger('app:capacitor-conf', 'red')

const ensureConsistency = require('../capacitor/ensure-consistency')

class CapacitorConfig {
prepare (cfg) {
this.pkg = require(appPaths.resolve.app('package.json'))
ensureConsistency()

// Make sure there is an index.html, otherwise Capacitor will crash
fse.ensureFileSync(appPaths.resolve.capacitor('www/index.html'))
this.pkg = require(appPaths.resolve.app('package.json'))

this.__updateCapPkg(cfg, this.pkg)
log(`Updated src-capacitor/package.json`)
Expand Down
46 changes: 46 additions & 0 deletions app/lib/capacitor/ensure-consistency.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const fs = require('fs')
const fse = require('fs-extra')

const nodePackager = require('../helpers/node-packager')
const { spawnSync } = require('../helpers/spawn')
const appPaths = require('../app-paths')

const logger = require('../helpers/logger')
const log = logger('app:ensure-consistency')
const warn = logger('app:ensure-consistency', 'red')

function ensureWWW () {
const www = appPaths.resolve.capacitor('www')

fse.removeSync(www)
fse.copySync(
appPaths.resolve.cli('templates/capacitor/www'),
appPaths.resolve.capacitor('www')
)
}

function ensureDeps () {
if (fs.existsSync(appPaths.resolve.capacitor('node_modules'))) {
return
}

const cmdParam = nodePackager === 'npm'
? ['install']
: []

log(`Installing Capacitor dependencies...`)
spawnSync(
nodePackager,
cmdParam,
{ cwd: appPaths.capacitorDir },
() => warn(`⚠️ [FAIL] failed installing dependencies in /src-capacitor`)
)
}

module.exports = function () {
ensureWWW()
ensureDeps()
}

module.exports.ensureWWW = ensureWWW
module.exports.ensureDeps = ensureDeps
3 changes: 3 additions & 0 deletions app/lib/cordova/cordova-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const appPaths = require('../app-paths')
const logger = require('../helpers/logger')
const log = logger('app:cordova-conf')
const warn = logger('app:cordova-conf', 'red')
const ensureConsistency = require('../cordova/ensure-consistency')

const filePath = appPaths.resolve.cordova('config.xml')

Expand Down Expand Up @@ -38,6 +39,8 @@ function setFields (root, cfg) {

class CordovaConfig {
prepare (cfg) {
ensureConsistency()

const doc = et.parse(fs.readFileSync(filePath, 'utf-8'))
this.pkg = require(appPaths.resolve.app('package.json'))
this.APP_URL = cfg.build.APP_URL
Expand Down
44 changes: 44 additions & 0 deletions app/lib/cordova/ensure-consistency.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const fs = require('fs')
const fse = require('fs-extra')

const { spawnSync } = require('../helpers/spawn')
const appPaths = require('../app-paths')

const logger = require('../helpers/logger')
const log = logger('app:ensure-consistency')
const warn = logger('app:ensure-consistency', 'red')

function ensureWWW () {
const www = appPaths.resolve.cordova('www')

fse.removeSync(www)
fse.copySync(
appPaths.resolve.cli('templates/cordova'),
appPaths.cordovaDir
)
}

function ensureDeps () {
if (fs.existsSync(appPaths.resolve.cordova('node_modules'))) {
return
}

log('Installing dependencies in /src-cordova')
spawnSync(
'npm',
[ 'install' ],
{ cwd: appPaths.cordovaDir },
() => {
warn(`⚠️ [FAIL] npm failed installing dependencies in /src-cordova`)
process.exit(1)
}
)
}

module.exports = function () {
ensureWWW()
ensureDeps()
}

module.exports.ensureWWW = ensureWWW
module.exports.ensureDeps = ensureDeps
25 changes: 4 additions & 21 deletions app/lib/mode/mode-capacitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,6 @@ const warn = logger('app:mode-capacitor', 'red')
const { spawnSync } = require('../helpers/spawn')
const nodePackager = require('../helpers/node-packager')

function installDependencies () {
if (fs.existsSync(appPaths.resolve.capacitor('node_modules'))) {
return
}

const cmdParam = nodePackager === 'npm'
? ['install']
: []

log(`Installing Capacitor dependencies...`)
spawnSync(
nodePackager,
cmdParam,
{ cwd: appPaths.capacitorDir },
() => warn('Failed to install Capacitor dependencies')
)
}

class Mode {
get isInstalled () {
return fs.existsSync(appPaths.capacitorDir)
Expand Down Expand Up @@ -72,7 +54,8 @@ class Mode {
fs.writeFileSync(dest, compileTemplate(content)(scope), 'utf-8')
})

installDependencies()
const { ensureDeps } = require('../capacitor/ensure-consistency')
ensureDeps()

const capacitorCliPath = require('../capacitor/capacitor-cli-path')

Expand Down Expand Up @@ -106,10 +89,10 @@ class Mode {
}

addPlatform (target) {
fse.ensureFileSync(appPaths.resolve.capacitor(`www/index.html`))
const ensureConsistency = require('../capacitor/ensure-consistency')
ensureConsistency()

if (this.hasPlatform(target)) {
installDependencies()
return
}

Expand Down
29 changes: 4 additions & 25 deletions app/lib/mode/mode-cordova.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,6 @@ const log = logger('app:mode-cordova')
const warn = logger('app:mode-cordova', 'red')
const { spawnSync } = require('../helpers/spawn')

function installDependencies () {
if (fs.existsSync(appPaths.resolve.cordova('node_modules'))) {
return
}

log('Installing dependencies in /src-cordova')
spawnSync(
'npm',
[ 'install' ],
{ cwd: appPaths.cordovaDir },
() => {
warn(`⚠️ [FAIL] npm failed installing dependencies in /src-cordova`)
process.exit(1)
}
)
}

class Mode {
get isInstalled () {
return fs.existsSync(appPaths.cordovaDir)
Expand Down Expand Up @@ -58,12 +41,8 @@ class Mode {
}
)

const www = appPaths.resolve.cordova('www')
fse.removeSync(www)
fse.copySync(
appPaths.resolve.cli('templates/cordova'),
appPaths.cordovaDir
)
const { ensureWWW } = require('../cordova/ensure-consistency')
ensureWWW()

log(`Cordova support was installed`)
log(`App name was taken from package.json: "${appName}"`)
Expand Down Expand Up @@ -92,10 +71,10 @@ class Mode {
}

addPlatform (target) {
fse.ensureDirSync(appPaths.resolve.cordova(`www`))
const ensureConsistency = require('../cordova/ensure-consistency')
ensureConsistency()

if (this.hasPlatform(target)) {
installDependencies()
return
}

Expand Down

0 comments on commit bd920c2

Please sign in to comment.