1 | ;
|
2 | var utils = require("./task.utils");
|
3 | var file = require("./file.utils");
|
4 | var task_utils_1 = require("./task.utils");
|
5 | var task_utils_2 = require("./task.utils");
|
6 | var debug = require("debug")("cb:input");
|
7 | var _ = require("../lodash.custom");
|
8 | (function (InputTypes) {
|
9 | InputTypes[InputTypes["DefaultExternalFile"] = "DefaultExternalFile"] = "DefaultExternalFile";
|
10 | InputTypes[InputTypes["ExternalFile"] = "ExternalFile"] = "ExternalFile";
|
11 | InputTypes[InputTypes["InlineObject"] = "InlineObject"] = "InlineObject";
|
12 | InputTypes[InputTypes["StubInlineObject"] = "StubInlineObject"] = "StubInlineObject";
|
13 | InputTypes[InputTypes["CBFile"] = "CBFile"] = "CBFile";
|
14 | InputTypes[InputTypes["InlineJSON"] = "InlineJSON"] = "InlineJSON";
|
15 | })(exports.InputTypes || (exports.InputTypes = {}));
|
16 | var InputTypes = exports.InputTypes;
|
17 | function getInputs(config, inlineInput) {
|
18 | /**
|
19 | * If the User provided a -c flag we MUST validate this
|
20 | * request first as it may fail and then we don't want to continue
|
21 | */
|
22 | if (config.input.length) {
|
23 | debug("config flag provided " + config.input);
|
24 | var stringInputs = config.input.filter(function (x) { return typeof x === "string"; });
|
25 | var inlineInputs = config.input.filter(function (x) { return task_utils_2.isPlainObject(x); });
|
26 | var fileInputs = file.readInputFiles(stringInputs, config.cwd);
|
27 | var mergedFileInputs = fileInputs.valid.map(function (file) { return file.input; });
|
28 | var mergedInputs = _.merge.apply(_, [generateBaseInput({})].concat(mergedFileInputs, inlineInputs, [inlineInput]));
|
29 | if (fileInputs.invalid.length) {
|
30 | return {
|
31 | type: InputTypes.ExternalFile,
|
32 | errors: fileInputs.invalid.map(function (x) { return x.errors[0]; }),
|
33 | sources: fileInputs.invalid,
|
34 | inputs: [],
|
35 | };
|
36 | }
|
37 | return {
|
38 | type: InputTypes.ExternalFile,
|
39 | errors: [],
|
40 | sources: fileInputs.valid,
|
41 | inputs: [
|
42 | /**
|
43 | * Merged all given configs into a single obj
|
44 | * This is to allow, for example, production
|
45 | * configuration to override dev etc..
|
46 | */
|
47 | mergedInputs
|
48 | ],
|
49 | };
|
50 | }
|
51 | if (config.fromJson) {
|
52 | try {
|
53 | var parsed = JSON.parse(config.fromJson);
|
54 | return {
|
55 | errors: [],
|
56 | sources: [],
|
57 | type: InputTypes.InlineJSON,
|
58 | inputs: [generateBaseInput(parsed)]
|
59 | };
|
60 | }
|
61 | catch (e) {
|
62 | return {
|
63 | errors: [{ type: task_utils_1.InputErrorTypes.InvalidJson, json: config.fromJson, error: e }],
|
64 | sources: [],
|
65 | type: InputTypes.InlineJSON,
|
66 | inputs: []
|
67 | };
|
68 | }
|
69 | }
|
70 | /**
|
71 | * If the User provided --cbfile flag we MUST validate this
|
72 | * request first as it may fail and then we don't want to continue
|
73 | */
|
74 | if (config.cbfile) {
|
75 | debug("'cbfile' flag provided " + config.cbfile);
|
76 | var cbfiles = file.retrieveCBFiles(config);
|
77 | if (cbfiles.invalid.length) {
|
78 | return {
|
79 | type: InputTypes.CBFile,
|
80 | errors: cbfiles.invalid.map(function (x) { return x.errors[0]; }),
|
81 | sources: cbfiles.invalid,
|
82 | inputs: [],
|
83 | };
|
84 | }
|
85 | return {
|
86 | type: InputTypes.CBFile,
|
87 | errors: [],
|
88 | sources: cbfiles.valid,
|
89 | inputs: [],
|
90 | };
|
91 | }
|
92 | /**
|
93 | * Crossbow may be used with a simple object literal input.
|
94 | * This is how the test suit is even possible in such a system
|
95 | */
|
96 | if (utils.isPlainObject(inlineInput)) {
|
97 | debug("plain object given as input " + JSON.stringify(inlineInput));
|
98 | return {
|
99 | type: InputTypes.InlineObject,
|
100 | errors: [],
|
101 | sources: [],
|
102 | inputs: [generateBaseInput(inlineInput)]
|
103 | };
|
104 | }
|
105 | if (!config.loadDefaultInputs) {
|
106 | debug("config.loadDefaultInputs = false, not looking for default file types");
|
107 | return {
|
108 | errors: [],
|
109 | sources: [],
|
110 | type: InputTypes.StubInlineObject,
|
111 | inputs: [generateBaseInput({})]
|
112 | };
|
113 | }
|
114 | /**
|
115 | * Finally, try any cbfiles in the cwd
|
116 | */
|
117 | var defaultCbFiles = file.retrieveCBFiles(config);
|
118 | /**
|
119 | * If a cbfile.js **was** found in the current
|
120 | * directory, it will have been 'required' and therefor
|
121 | * some code will have run, which may of errored.
|
122 | * So here we check for that possible error by
|
123 | * filtering out `InputFileNotFound` errors (which simply mean
|
124 | * a cbfile.js was not found anyway.
|
125 | */
|
126 | var inputErrors = defaultCbFiles.invalid
|
127 | .filter(function (x) { return x.errors[0].type !== task_utils_1.InputErrorTypes.InputFileNotFound; });
|
128 | if (inputErrors.length) {
|
129 | return {
|
130 | type: InputTypes.CBFile,
|
131 | errors: inputErrors.map(function (x) { return x.errors[0]; }),
|
132 | sources: inputErrors,
|
133 | inputs: [],
|
134 | };
|
135 | }
|
136 | if (defaultCbFiles.valid.length) {
|
137 | debug("Default cbfile found " + defaultCbFiles.valid[0].resolved);
|
138 | return {
|
139 | errors: [],
|
140 | type: InputTypes.CBFile,
|
141 | sources: defaultCbFiles.valid,
|
142 | inputs: []
|
143 | };
|
144 | }
|
145 | /**
|
146 | * At this point, the user has not attempted to load any config files manually
|
147 | * so we try to load any defaults that are in the CWD
|
148 | */
|
149 | var defaultInputputFiles = file.retrieveDefaultInputFiles(config);
|
150 | var notMissingFileErrors = defaultInputputFiles.invalid
|
151 | .filter(function (x) { return x.errors[0].type !== task_utils_1.InputErrorTypes.InputFileNotFound; });
|
152 | if (notMissingFileErrors.length) {
|
153 | debug("Default input found with errors " + notMissingFileErrors[0].resolved);
|
154 | return {
|
155 | errors: notMissingFileErrors.reduce(function (acc, x) { return acc.concat(x.errors); }, []),
|
156 | type: InputTypes.DefaultExternalFile,
|
157 | sources: notMissingFileErrors,
|
158 | inputs: []
|
159 | };
|
160 | }
|
161 | if (defaultInputputFiles.valid.length) {
|
162 | debug("Default input found " + defaultInputputFiles.valid[0].resolved);
|
163 | return {
|
164 | errors: [],
|
165 | type: InputTypes.DefaultExternalFile,
|
166 | sources: defaultInputputFiles.valid,
|
167 | inputs: [generateBaseInput(defaultInputputFiles.valid[0].input)]
|
168 | };
|
169 | }
|
170 | /**
|
171 | * If we reach this point, we're working with
|
172 | * 1. NO external input files
|
173 | * 2. NO inline Object literal
|
174 | *
|
175 | * Which means we just need the stub objects, enough
|
176 | * to allow the system to work.
|
177 | */
|
178 | debug("No external input given/found, using default");
|
179 | return {
|
180 | errors: [],
|
181 | sources: [],
|
182 | type: InputTypes.InlineObject,
|
183 | inputs: [generateBaseInput({})]
|
184 | };
|
185 | }
|
186 | exports.getInputs = getInputs;
|
187 | /**
|
188 | * `Input` is the object that is looked at to resolve tasks/options and
|
189 | * watchers
|
190 | */
|
191 | function generateBaseInput(incoming) {
|
192 | return _.merge({
|
193 | tasks: {},
|
194 | watch: {
|
195 | before: [],
|
196 | options: {}
|
197 | },
|
198 | options: {},
|
199 | env: {}
|
200 | }, incoming || {});
|
201 | }
|
202 | exports.generateBaseInput = generateBaseInput;
|
203 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQucmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnB1dC5yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFHQSxJQUFZLEtBQUssV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUN0QyxJQUFZLElBQUksV0FBTSxjQUFjLENBQUMsQ0FBQTtBQUNyQywyQkFBOEIsY0FBYyxDQUFDLENBQUE7QUFFN0MsMkJBQTRCLGNBQWMsQ0FBQyxDQUFBO0FBRTNDLElBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQyxJQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV0QyxXQUFZLFVBQVU7SUFDbEIsK0NBQTJCLHFCQUFxQix5QkFBQSxDQUFBO0lBQ2hELHdDQUFvQixjQUFjLGtCQUFBLENBQUE7SUFDbEMsd0NBQW9CLGNBQWMsa0JBQUEsQ0FBQTtJQUNsQyw0Q0FBd0Isa0JBQWtCLHNCQUFBLENBQUE7SUFDMUMsa0NBQWMsUUFBUSxZQUFBLENBQUE7SUFDdEIsc0NBQWtCLFlBQVksZ0JBQUEsQ0FBQTtBQUNsQyxDQUFDLEVBUFcsa0JBQVUsS0FBVixrQkFBVSxRQU9yQjtBQVBELElBQVksVUFBVSxHQUFWLGtCQU9YLENBQUE7QUFTRCxtQkFBMkIsTUFBNkIsRUFBRSxXQUFpQjtJQUV2RTs7O09BR0c7SUFDSCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEIsS0FBSyxDQUFDLDBCQUF3QixNQUFNLENBQUMsS0FBTyxDQUFDLENBQUM7UUFFOUMsSUFBTSxZQUFZLEdBQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQXJCLENBQXFCLENBQUMsQ0FBQztRQUN6RSxJQUFNLFlBQVksR0FBTyxN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 |
\ | No newline at end of file |