No longer need install.js
This commit is contained in:
parent
2d9da7bc1e
commit
474f20a36b
@ -1,150 +0,0 @@
|
|||||||
const prompt = require('prompt')
|
|
||||||
const replace = require('replace-in-file')
|
|
||||||
const fs = require('fs-extra');
|
|
||||||
var Promise = require('promise');
|
|
||||||
var path = require('path');
|
|
||||||
|
|
||||||
// Making the text input a bit legible.
|
|
||||||
|
|
||||||
prompt.colors = false
|
|
||||||
prompt.message = ""
|
|
||||||
|
|
||||||
// The text input takes a "result" object and passes it to one of two functions to do the logistics.
|
|
||||||
|
|
||||||
prompt.get([{
|
|
||||||
name: 'appName',
|
|
||||||
required: true,
|
|
||||||
description: "What's the name of your application? Lowercase and no spaces, please.",
|
|
||||||
message: "Lowercase and no spaces, please.",
|
|
||||||
conform: function(value) {
|
|
||||||
return /^[a-z0-9]+((\-[a-z0-9]+){1,})?$/g.test(value)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'pier',
|
|
||||||
required: true,
|
|
||||||
description: "Where is your Urbit pier's desk located? For example, /Users/dev/zod/home"
|
|
||||||
}], function (err, result) {
|
|
||||||
setupFull(result)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
// Migrate application to root directory.
|
|
||||||
|
|
||||||
const deleteFolderRecursive = function (path) {
|
|
||||||
if (fs.existsSync(path)) {
|
|
||||||
fs.readdirSync(path).forEach(function (file, index) {
|
|
||||||
var curPath = path + "/" + file;
|
|
||||||
if (fs.lstatSync(curPath).isDirectory()) {
|
|
||||||
deleteFolderRecursive(curPath);
|
|
||||||
} else {
|
|
||||||
fs.unlinkSync(curPath);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
fs.rmdirSync(path);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var promiseAllWait = function (promises) {
|
|
||||||
// this is the same as Promise.all(), except that it will wait for all promises to fulfill before rejecting
|
|
||||||
var all_promises = [];
|
|
||||||
for (var i_promise = 0; i_promise < promises.length; i_promise++) {
|
|
||||||
all_promises.push(
|
|
||||||
promises[i_promise]
|
|
||||||
.then(function (res) {
|
|
||||||
return { res: res };
|
|
||||||
}).catch(function (err) {
|
|
||||||
return { err: err };
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.all(all_promises)
|
|
||||||
.then(function (results) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
var is_failure = false;
|
|
||||||
var i_result;
|
|
||||||
for (i_result = 0; i_result < results.length; i_result++) {
|
|
||||||
if (results[i_result].err) {
|
|
||||||
is_failure = true;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
results[i_result] = results[i_result].res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_failure) {
|
|
||||||
reject(results[i_result].err);
|
|
||||||
} else {
|
|
||||||
resolve(results);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var movePromiser = function (from, to, records) {
|
|
||||||
return fs.move(from, to)
|
|
||||||
.then(function () {
|
|
||||||
records.push({ from: from, to: to });
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var moveDir = function (from_dir, to_dir, callback) {
|
|
||||||
return fs.readdir(from_dir)
|
|
||||||
.then(function (children) {
|
|
||||||
return fs.ensureDir(to_dir)
|
|
||||||
.then(function () {
|
|
||||||
var move_promises = [];
|
|
||||||
var moved_records = [];
|
|
||||||
var child;
|
|
||||||
for (var i_child = 0; i_child < children.length; i_child++) {
|
|
||||||
child = children[i_child];
|
|
||||||
move_promises.push(movePromiser(
|
|
||||||
path.join(from_dir, child),
|
|
||||||
path.join(to_dir, child),
|
|
||||||
moved_records
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
return promiseAllWait(move_promises)
|
|
||||||
.catch(function (err) {
|
|
||||||
var undo_move_promises = [];
|
|
||||||
for (var i_moved_record = 0; i_moved_record < moved_records.length; i_moved_record++) {
|
|
||||||
undo_move_promises.push(fs.move(moved_records[i_moved_record].to, moved_records[i_moved_record].from));
|
|
||||||
}
|
|
||||||
|
|
||||||
return promiseAllWait(undo_move_promises)
|
|
||||||
.then(function () {
|
|
||||||
throw err;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}).then(function () {
|
|
||||||
return fs.rmdir(from_dir);
|
|
||||||
});
|
|
||||||
}).then(callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
const setupFull = function (result) {
|
|
||||||
fs.access('.DS_Store', (err) => { if (!err) fs.unlinkSync('.DS_Store') })
|
|
||||||
let deHyphenatedName = result.appName.replace(/-/g, '')
|
|
||||||
moveDir('full', './', function() {
|
|
||||||
fs.renameSync('urbit/app/smol.hoon', 'urbit/app/' + deHyphenatedName + '.hoon')
|
|
||||||
fs.renameSync('urbit/app/smol/', 'urbit/app/' + deHyphenatedName)
|
|
||||||
let urbitPierOptions = {
|
|
||||||
files: '.urbitrc',
|
|
||||||
from: "%URBITPIER%",
|
|
||||||
to: result.pier
|
|
||||||
}
|
|
||||||
replace(urbitPierOptions).then(changedFiles => console.log(changedFiles)).catch(err => console.error(err))
|
|
||||||
let appNameOptions = {
|
|
||||||
files: ['webpack.dev.js', 'webpack.prod.js', 'urbit/app/' + deHyphenatedName + '.hoon',
|
|
||||||
'src/js/api.js', 'src/js/subscription.js', 'src/js/components/root.js',
|
|
||||||
'urbit/app/' + deHyphenatedName + '/index.html'
|
|
||||||
],
|
|
||||||
from: /%APPNAME%/g,
|
|
||||||
to: deHyphenatedName
|
|
||||||
}
|
|
||||||
replace(appNameOptions).then(changedFiles => console.log(changedFiles)).catch(err => console.error(err))
|
|
||||||
})
|
|
||||||
console.log("All done! Happy hacking.")
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user