1 | var _ = require('lodash');
|
2 | var fs = require('graceful-fs');
|
3 | var minimatch = require('minimatch');
|
4 | var mutil = require('miaow-util');
|
5 | var path = require('path');
|
6 |
|
7 | var Module = require('./Module');
|
8 | var destTask = require('./tasks/dest');
|
9 |
|
10 | function ModuleFactory(options) {
|
11 | this.options = options;
|
12 | }
|
13 |
|
14 | ModuleFactory.prototype.create = function(src, contents, callback) {
|
15 | if (_.isFunction(contents)) {
|
16 | callback = contents;
|
17 | contents = null;
|
18 | }
|
19 |
|
20 | var module = new Module();
|
21 | module.src = src;
|
22 | module.srcDir = path.dirname(src);
|
23 |
|
24 |
|
25 | var options = _.find(this.options, function(item) {
|
26 | return minimatch(src, item.test, {matchBase: true, dot: true});
|
27 | });
|
28 |
|
29 |
|
30 | module.tasks = options.tasks.concat({
|
31 | task: destTask,
|
32 | options: {}
|
33 | });
|
34 |
|
35 |
|
36 | _.assign(module, _.pick(options, ['context', 'output', 'domain', 'hashLength', 'hashConnector', 'ext', 'charset', 'debug']));
|
37 |
|
38 |
|
39 | module.destDir = (options.release || '$0').replace('$0', module.srcDir);
|
40 |
|
41 |
|
42 | module.url = (options.url || '$0').replace('$0', module.srcDir);
|
43 |
|
44 |
|
45 | module.extra = {};
|
46 |
|
47 | function setContents(err, contents) {
|
48 | if (err) {
|
49 | return callback(err);
|
50 | }
|
51 |
|
52 |
|
53 | module.srcContents = module.contents = contents;
|
54 | module.srcHash = mutil.hash(contents);
|
55 |
|
56 | callback(null, module);
|
57 | }
|
58 |
|
59 | if (contents) {
|
60 | setContents(null, contents);
|
61 | } else {
|
62 | fs.readFile(path.resolve(options.context, src), setContents);
|
63 | }
|
64 | };
|
65 |
|
66 | module.exports = ModuleFactory;
|