UNPKG

3.8 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.namespace = exports.task = exports.setOption = exports.strict = exports.option = exports.desc = exports.onerror = exports.after = exports.before = exports.setGlobalOptions = void 0;
4const utils_1 = require("./utils");
5const task_manager_1 = require("./task-manager");
6/**
7 * Set global options for all tasks.
8 * @param options
9 */
10function setGlobalOptions(options) {
11 Object.assign(task_manager_1.getGlobalTaskManager().globalOptions, options);
12}
13exports.setGlobalOptions = setGlobalOptions;
14function appendCallback(name, fn) {
15 let tm = task_manager_1.getGlobalTaskManager();
16 tm.listeners[name].push({
17 namespaces: tm.namespaces,
18 fn,
19 });
20}
21exports.before = (fn) => appendCallback('before', fn);
22exports.after = (fn) => appendCallback('after', fn);
23exports.onerror = (fn) => appendCallback('onerror', fn);
24var TaskOptions;
25(function (TaskOptions) {
26 TaskOptions.last = empty();
27 function empty() {
28 return {
29 desc: undefined,
30 optionDefs: [],
31 strict: task_manager_1.getGlobalTaskManager().globalOptions.strict,
32 loading: undefined,
33 };
34 }
35 TaskOptions.empty = empty;
36})(TaskOptions || (TaskOptions = {}));
37/**
38 * Define task description
39 * @param desc
40 */
41function desc(desc) {
42 TaskOptions.last.desc = desc;
43}
44exports.desc = desc;
45/**
46 * Define a task cli option
47 * @param rawName
48 * @param description
49 * @param config
50 */
51function option(rawName, description, config) {
52 TaskOptions.last.optionDefs.push([rawName, description, config]);
53}
54exports.option = option;
55/**
56 * Define task cli options are strict, which means it will throw an error if you passed undefined options.
57 */
58function strict() {
59 TaskOptions.last.strict = true;
60}
61exports.strict = strict;
62/**
63 * Set options for next task.
64 * @param options
65 */
66function setOption(options) {
67 Object.assign(TaskOptions.last, options);
68}
69exports.setOption = setOption;
70/**
71 * Define a task
72 * @param name
73 * @param dependencies
74 * @param fn
75 */
76function task(name, dependencies = [], fn) {
77 if (utils_1.Is.fn(dependencies)) {
78 fn = dependencies;
79 dependencies = [];
80 }
81 const namespaces = task_manager_1.getGlobalTaskManager().namespaces;
82 if (namespaces.length) {
83 name = `${namespaces.join(':')}:${name}`;
84 }
85 const t = {
86 name,
87 namespaces,
88 options: {},
89 optionDefs: TaskOptions.last.optionDefs,
90 desc: TaskOptions.last.desc,
91 strict: TaskOptions.last.strict,
92 loading: TaskOptions.last.loading,
93 rawArgs: [],
94 dependencies: dependencies.map(d => {
95 if (utils_1.Is.str(d)) {
96 return { name: d, options: {} };
97 }
98 else if (d._isDepBuilder) {
99 return d.toTaskDep();
100 }
101 return d;
102 }),
103 fn,
104 };
105 TaskOptions.last = TaskOptions.empty();
106 task_manager_1.getGlobalTaskManager().addTask(t);
107 return t;
108}
109exports.task = task;
110/**
111 * Create namespace prefix for inner tasks
112 * @param ns namespace
113 * @param fn
114 * @example
115 * namespace('client', ns => {
116 * task('run', async ctx => {
117 * logger.log(ns) // 'client'
118 * await ctx.exec('<run cmd>')
119 * })
120 * })
121 * namespace('server', ns => {
122 * task('run', async ctx => {
123 * logger.log(ns) // 'server'
124 * await ctx.exec('<run cmd>')
125 * })
126 * })
127 *
128 * ==========
129 * $ yarn foy client:run
130 * $ yarn foy server:run
131 */
132function namespace(ns, fn) {
133 const tm = task_manager_1.getGlobalTaskManager();
134 tm.namespaces = tm.namespaces.concat(ns);
135 fn(ns);
136 tm.namespaces = tm.namespaces.slice(0, -1);
137}
138exports.namespace = namespace;
139//# sourceMappingURL=task.js.map
\No newline at end of file