aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jake/lib/loader.js
diff options
context:
space:
mode:
authorMinteck <minteck@phoenixnet.tech>2021-10-17 20:08:04 +0200
committerMinteck <minteck@phoenixnet.tech>2021-10-17 20:08:04 +0200
commit3a94acf27ea1eff8bd1125450f07c0c366332e80 (patch)
tree5bd619df0b7e04afc174df98736a527477522acb /node_modules/jake/lib/loader.js
downloadwolfeye-js-3a94acf27ea1eff8bd1125450f07c0c366332e80.tar.gz
wolfeye-js-3a94acf27ea1eff8bd1125450f07c0c366332e80.tar.bz2
wolfeye-js-3a94acf27ea1eff8bd1125450f07c0c366332e80.zip
Initial commit
Diffstat (limited to 'node_modules/jake/lib/loader.js')
-rw-r--r--node_modules/jake/lib/loader.js165
1 files changed, 165 insertions, 0 deletions
diff --git a/node_modules/jake/lib/loader.js b/node_modules/jake/lib/loader.js
new file mode 100644
index 0000000..02ad262
--- /dev/null
+++ b/node_modules/jake/lib/loader.js
@@ -0,0 +1,165 @@
+/*
+ * Jake JavaScript build tool
+ * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+
+let path = require('path');
+let fs = require('fs');
+let existsSync = fs.existsSync;
+let utils = require('./utils');
+
+// Files like jakelib/foobar.jake.js
+const JAKELIB_FILE_PAT = /\.jake$|\.js$/;
+const SUPPORTED_EXTENSIONS = {
+ 'js': null,
+ 'coffee': function () {
+ try {
+ let cs = require('coffeescript');
+ if (typeof cs.register == 'function') {
+ cs.register();
+ }
+ }
+ catch(e) {
+ throw new Error('You have a CoffeeScript Jakefile, but have not installed CoffeeScript');
+ }
+ },
+ 'ls': function () {
+ try {
+ require('livescript');
+ }
+ catch (e) {
+ throw new Error('You have a LiveScript Jakefile, but have not installed LiveScript');
+ }
+ }
+};
+const IMPLICIT_JAKEFILE_NAMES = [
+ 'Jakefile',
+ 'Gulpfile'
+];
+
+let Loader = function () {
+ // Load a Jakefile, running the code inside -- this may result in
+ // tasks getting defined using the original Jake API, e.g.,
+ // `task('foo' ['bar', 'baz']);`, or can also auto-create tasks
+ // from any functions exported from the file
+ function loadFile(filePath) {
+ let exported = require(filePath);
+ for (let [key, value] of Object.entries(exported)) {
+ let t;
+ if (typeof value == 'function') {
+ t = jake.task(key, value);
+ t.description = '(Exported function)';
+ }
+ }
+ }
+
+ function fileExists(name) {
+ let nameWithExt = null;
+ // Support no file extension as well
+ let exts = Object.keys(SUPPORTED_EXTENSIONS).concat(['']);
+ exts.some((ext) => {
+ let fname = ext ? `${name}.${ext}` : name;
+ if (existsSync(fname)) {
+ nameWithExt = fname;
+ return true;
+ }
+ });
+ return nameWithExt;
+ }
+
+ // Recursive
+ function findImplicitJakefile() {
+ let cwd = process.cwd();
+ let names = IMPLICIT_JAKEFILE_NAMES;
+ let found = null;
+ names.some((name) => {
+ let n;
+ // Prefer all-lowercase
+ n = name.toLowerCase();
+ if ((found = fileExists(n))) {
+ return found;
+ }
+ // Check mixed-case as well
+ n = name;
+ if ((found = fileExists(n))) {
+ return found;
+ }
+ });
+ if (found) {
+ return found;
+ }
+ else {
+ process.chdir("..");
+ // If we've walked all the way up the directory tree,
+ // bail out with no result
+ if (cwd === process.cwd()) {
+ return null;
+ }
+ return findImplicitJakefile();
+ }
+ }
+
+ this.loadFile = function (fileSpecified) {
+ let jakefile;
+ let origCwd = process.cwd();
+
+ if (fileSpecified) {
+ if (existsSync(fileSpecified)) {
+ jakefile = fileSpecified;
+ }
+ }
+ else {
+ jakefile = findImplicitJakefile();
+ }
+
+ if (jakefile) {
+ let ext = jakefile.split('.')[1];
+ let loaderFunc = SUPPORTED_EXTENSIONS[ext];
+ loaderFunc && loaderFunc();
+
+ loadFile(utils.file.absolutize(jakefile));
+ return true;
+ }
+ else {
+ if (!fileSpecified) {
+ // Restore the working directory on failure
+ process.chdir(origCwd);
+ }
+ return false;
+ }
+ };
+
+ this.loadDirectory = function (d) {
+ let dirname = d || 'jakelib';
+ let dirlist;
+ dirname = utils.file.absolutize(dirname);
+ if (existsSync(dirname)) {
+ dirlist = fs.readdirSync(dirname);
+ dirlist.forEach(function (filePath) {
+ if (JAKELIB_FILE_PAT.test(filePath)) {
+ loadFile(path.join(dirname, filePath));
+ }
+ });
+ return true;
+ }
+ return false;
+ };
+
+};
+
+module.exports = function () {
+ return new Loader();
+};