| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*
- * Jake JavaScript build tool
- * Copyright 2112 Matthew Eernisse ([email protected])
- *
- * 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.
- *
- */
- var path = require('path')
- , fs = require('fs')
- , existsSync = typeof fs.existsSync == 'function' ?
- fs.existsSync : path.existsSync
- , utils = require('utilities')
- , CoffeeScript
- , Loader;
- Loader = function () {
- var JAKEFILE_PAT = /\.jake(\.js|\.coffee)?$/;
- var _requireCoffee = function () {
- try {
- var cs = require('coffee-script');
- // Ensure we support CoffeeScript versions older than 1.7.0
- if (typeof cs.register == 'function') {
- cs.register();
- }
- }
- catch (e) {
- fail('CoffeeScript is missing! Try `npm install coffee-script`');
- }
- return(cs);
- };
- this.loadFile = function (file) {
- var jakefile = file ?
- file.replace(/\.js$/, '').replace(/\.coffee$/, '') : 'Jakefile'
- , fileSpecified = !!file
- // Dear God, why?
- , isCoffee = false
- // Warning, recursive
- , exists
- , oldCwd = process.cwd();
- exists = function () {
- var cwd = process.cwd();
- if (existsSync(jakefile) || existsSync(jakefile + '.js') ||
- existsSync(jakefile + '.coffee')) {
- return true;
- }
- if (!fileSpecified) {
- process.chdir("..");
- if (cwd === process.cwd()) {
- // Restore the working directory on failure
- process.chdir(oldCwd);
- return false;
- }
- return exists();
- }
- };
- if (!exists()) {
- return false;
- }
- isCoffee = existsSync(jakefile + '.coffee');
- if (isCoffee) {
- CoffeeScript = _requireCoffee();
- }
- require(utils.file.absolutize(jakefile));
- return true;
- };
- this.loadDirectory = function (d) {
- var dirname = d || 'jakelib'
- , dirlist;
- dirname = utils.file.absolutize(dirname);
- if (existsSync(dirname)) {
- dirlist = fs.readdirSync(dirname);
- dirlist.forEach(function (filePath) {
- if (JAKEFILE_PAT.test(filePath)) {
- if (/\.coffee$/.test(filePath)) {
- CoffeeScript = _requireCoffee();
- }
- require(path.join(dirname, filePath));
- }
- });
- return true;
- }
- return false;
- };
- };
- module.exports.Loader = Loader;
|