UNPKG

2.74 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3require('lazy-ass');
4var check = require('check-more-types');
5
6var join = require('path').join;
7var fromThis = join.bind(null, __dirname);
8var pkg = require(fromThis('../package.json'));
9console.log('%s@%s - %s\n %s %s\n cwd %s',
10 pkg.name, pkg.version,
11 pkg.description,
12 pkg.author, pkg.homepage,
13 process.cwd());
14
15var resolve = require('path').resolve;
16
17/*
18var pkg = require('../package');
19var packageResolved = resolve(fromThis('../package.json'));
20console.log('require cache has for package', packageResolved);
21console.log(require.cache[packageResolved]);
22*/
23
24var fakeGruntfile = 'fake-gruntfile.js';
25var resolved = resolve(fakeGruntfile);
26
27// put fake stuff into the Require cache
28var Module = require('module');
29var _resolveFilename = Module._resolveFilename;
30console.assert(typeof _resolveFilename === 'function');
31Module._resolveFilename = function fakeResolveFilename(request, parent) {
32 if (request === resolved) {
33 return resolved;
34 } else {
35 return _resolveFilename(request, parent);
36 }
37};
38
39var grunt = require('grunt');
40// console.log(grunt.task.registerTask.toString());
41Object.keys(grunt.cli.options).forEach(function (key) {
42 var str = grunt.cli.options[key];
43 if (check.unemptyString(str)) {
44 var split = str.split(',');
45 if (split.length > 1) {
46 grunt.cli.options[key] = split;
47 }
48 }
49});
50
51var plugin = process.argv[2];
52la(check.unemptyString(plugin),
53 'missing grunt plugin name to run, for example grunt-contrib-concat',
54 process.argv);
55console.log('plugin', plugin);
56
57var target = process.argv[3];
58function isOption(x) {
59 return check.unemptyString(x) && /^-/.test(x);
60}
61if (check.unemptyString(target)) {
62 if (isOption(target)) {
63 target = null;
64 }
65}
66
67var fakeGruntfileFunc = require('../src/fake-gruntfile-code')({
68 plugin: plugin,
69 target: target,
70 src: grunt.cli.options.src,
71 dest: grunt.cli.options.dest
72});
73la(check.fn(fakeGruntfileFunc), 'expected fake gruntfile function', fakeGruntfileFunc);
74la(fakeGruntfileFunc.length === 1,
75 'fake gruntfile function should expect 1 argument', fakeGruntfileFunc.toString());
76require.cache[resolved] = {
77 id: resolved,
78 exports: fakeGruntfileFunc,
79 parent: null,
80 filename: resolved,
81 loaded: true
82};
83
84// process.exit(0);
85var _exists = grunt.file.exists;
86grunt.file.exists = function mockExists(filename) {
87 if (filename === fakeGruntfile) {
88 return true;
89 } else {
90 return _exists(filename)
91 }
92};
93
94// console.log('grunt.tasks', grunt.tasks);
95
96function done() {
97 console.log('grunt is done');
98}
99
100var options = {
101 verbose: Boolean(grunt.cli.options.verbose),
102 gruntfile: fakeGruntfile
103};
104
105if (target) {
106 grunt.tasks([target], options, done);
107}
108// console.log(grunt.file);
109// grunt.cli();