1 | #!/usr/bin/env node
|
2 |
|
3 | require('lazy-ass');
|
4 | var check = require('check-more-types');
|
5 |
|
6 | var join = require('path').join;
|
7 | var fromThis = join.bind(null, __dirname);
|
8 | var pkg = require(fromThis('../package.json'));
|
9 | console.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 |
|
15 | var resolve = require('path').resolve;
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | var fakeGruntfile = 'fake-gruntfile.js';
|
25 | var resolved = resolve(fakeGruntfile);
|
26 |
|
27 |
|
28 | var Module = require('module');
|
29 | var _resolveFilename = Module._resolveFilename;
|
30 | console.assert(typeof _resolveFilename === 'function');
|
31 | Module._resolveFilename = function fakeResolveFilename(request, parent) {
|
32 | if (request === resolved) {
|
33 | return resolved;
|
34 | } else {
|
35 | return _resolveFilename(request, parent);
|
36 | }
|
37 | };
|
38 |
|
39 | var grunt = require('grunt');
|
40 |
|
41 | Object.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 |
|
51 | var plugin = process.argv[2];
|
52 | la(check.unemptyString(plugin),
|
53 | 'missing grunt plugin name to run, for example grunt-contrib-concat',
|
54 | process.argv);
|
55 | console.log('plugin', plugin);
|
56 |
|
57 | var target = process.argv[3];
|
58 | function isOption(x) {
|
59 | return check.unemptyString(x) && /^-/.test(x);
|
60 | }
|
61 | if (check.unemptyString(target)) {
|
62 | if (isOption(target)) {
|
63 | target = null;
|
64 | }
|
65 | }
|
66 |
|
67 | var 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 | });
|
73 | la(check.fn(fakeGruntfileFunc), 'expected fake gruntfile function', fakeGruntfileFunc);
|
74 | la(fakeGruntfileFunc.length === 1,
|
75 | 'fake gruntfile function should expect 1 argument', fakeGruntfileFunc.toString());
|
76 | require.cache[resolved] = {
|
77 | id: resolved,
|
78 | exports: fakeGruntfileFunc,
|
79 | parent: null,
|
80 | filename: resolved,
|
81 | loaded: true
|
82 | };
|
83 |
|
84 |
|
85 | var _exists = grunt.file.exists;
|
86 | grunt.file.exists = function mockExists(filename) {
|
87 | if (filename === fakeGruntfile) {
|
88 | return true;
|
89 | } else {
|
90 | return _exists(filename)
|
91 | }
|
92 | };
|
93 |
|
94 |
|
95 |
|
96 | function done() {
|
97 | console.log('grunt is done');
|
98 | }
|
99 |
|
100 | var options = {
|
101 | verbose: Boolean(grunt.cli.options.verbose),
|
102 | gruntfile: fakeGruntfile
|
103 | };
|
104 |
|
105 | if (target) {
|
106 | grunt.tasks([target], options, done);
|
107 | }
|
108 |
|
109 |
|