@jujulego/jill 1.2.0 → 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -0
  3. package/dist/commands/list.d.ts +23 -0
  4. package/dist/commands/list.d.ts.map +1 -0
  5. package/dist/commands/list.js +169 -0
  6. package/dist/commands/list.js.map +1 -0
  7. package/dist/filters/affected.filter.d.ts +11 -0
  8. package/dist/filters/affected.filter.d.ts.map +1 -0
  9. package/dist/filters/affected.filter.js +82 -0
  10. package/dist/filters/affected.filter.js.map +1 -0
  11. package/dist/filters/index.d.ts +4 -0
  12. package/dist/filters/index.d.ts.map +1 -0
  13. package/dist/filters/index.js +21 -0
  14. package/dist/filters/index.js.map +1 -0
  15. package/dist/filters/pipeline.d.ts +11 -0
  16. package/dist/filters/pipeline.d.ts.map +1 -0
  17. package/dist/filters/pipeline.js +34 -0
  18. package/dist/filters/pipeline.js.map +1 -0
  19. package/dist/filters/private.filter.d.ts +7 -0
  20. package/dist/filters/private.filter.d.ts.map +1 -0
  21. package/dist/filters/private.filter.js +20 -0
  22. package/dist/filters/private.filter.js.map +1 -0
  23. package/dist/filters/scripts.filter.d.ts +7 -0
  24. package/dist/filters/scripts.filter.d.ts.map +1 -0
  25. package/dist/filters/scripts.filter.js +21 -0
  26. package/dist/filters/scripts.filter.js.map +1 -0
  27. package/dist/git.d.ts +16 -0
  28. package/dist/git.d.ts.map +1 -0
  29. package/dist/git.js +94 -0
  30. package/dist/git.js.map +1 -0
  31. package/dist/index.d.ts +7 -4
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +19 -33
  34. package/dist/index.js.map +1 -1
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +23 -52
  37. package/dist/main.js.map +1 -1
  38. package/dist/modifiers/global-config.d.ts +6 -0
  39. package/dist/modifiers/global-config.d.ts.map +1 -0
  40. package/dist/modifiers/global-config.js +24 -0
  41. package/dist/modifiers/global-config.js.map +1 -0
  42. package/dist/modifiers/index.d.ts +3 -0
  43. package/dist/modifiers/index.d.ts.map +1 -0
  44. package/dist/modifiers/index.js +20 -0
  45. package/dist/modifiers/index.js.map +1 -0
  46. package/dist/modifiers/load-project.d.ts +7 -0
  47. package/dist/modifiers/load-project.d.ts.map +1 -0
  48. package/dist/modifiers/load-project.js +39 -0
  49. package/dist/modifiers/load-project.js.map +1 -0
  50. package/dist/modifiers/setup-ink.d.ts +2 -0
  51. package/dist/modifiers/setup-ink.d.ts.map +1 -0
  52. package/dist/modifiers/setup-ink.js +19 -0
  53. package/dist/modifiers/setup-ink.js.map +1 -0
  54. package/dist/project/index.d.ts +2 -0
  55. package/dist/project/index.d.ts.map +1 -0
  56. package/dist/project/index.js +19 -0
  57. package/dist/project/index.js.map +1 -0
  58. package/dist/project/project.d.ts +25 -0
  59. package/dist/project/project.d.ts.map +1 -0
  60. package/dist/project/project.js +190 -0
  61. package/dist/project/project.js.map +1 -0
  62. package/dist/project/workspace.d.ts +32 -0
  63. package/dist/project/workspace.d.ts.map +1 -0
  64. package/dist/project/workspace.js +159 -0
  65. package/dist/project/workspace.js.map +1 -0
  66. package/dist/services/index.d.ts +4 -0
  67. package/dist/services/index.d.ts.map +1 -0
  68. package/dist/services/index.js +21 -0
  69. package/dist/services/index.js.map +1 -0
  70. package/dist/services/inversify.config.d.ts +11 -0
  71. package/dist/services/inversify.config.d.ts.map +1 -0
  72. package/dist/services/inversify.config.js +34 -0
  73. package/dist/services/inversify.config.js.map +1 -0
  74. package/dist/services/logger.service.d.ts +5 -0
  75. package/dist/services/logger.service.d.ts.map +1 -0
  76. package/dist/services/logger.service.js +58 -0
  77. package/dist/services/logger.service.js.map +1 -0
  78. package/dist/services/spinner.service.d.ts +14 -0
  79. package/dist/services/spinner.service.d.ts.map +1 -0
  80. package/dist/services/spinner.service.js +55 -0
  81. package/dist/services/spinner.service.js.map +1 -0
  82. package/dist/services/task-manager.service.d.ts +1 -0
  83. package/dist/services/task-manager.service.d.ts.map +1 -0
  84. package/dist/services/task-manager.service.js +18 -0
  85. package/dist/services/task-manager.service.js.map +1 -0
  86. package/dist/types.d.ts +1 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +7 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/ui/cli-list.d.ts +15 -0
  91. package/dist/ui/cli-list.d.ts.map +1 -0
  92. package/dist/ui/cli-list.js +66 -0
  93. package/dist/ui/cli-list.js.map +1 -0
  94. package/dist/ui/global-spinner.d.ts +2 -0
  95. package/dist/ui/global-spinner.d.ts.map +1 -0
  96. package/dist/ui/global-spinner.js +43 -0
  97. package/dist/ui/global-spinner.js.map +1 -0
  98. package/dist/ui/index.d.ts +4 -0
  99. package/dist/ui/index.d.ts.map +1 -0
  100. package/dist/ui/index.js +21 -0
  101. package/dist/ui/index.js.map +1 -0
  102. package/dist/ui/layout.d.ts +2 -0
  103. package/dist/ui/layout.d.ts.map +1 -0
  104. package/dist/ui/layout.js +19 -0
  105. package/dist/ui/layout.js.map +1 -0
  106. package/dist/ui/static-logs.d.ts +2 -0
  107. package/dist/ui/static-logs.d.ts.map +1 -0
  108. package/dist/ui/static-logs.js +79 -0
  109. package/dist/ui/static-logs.js.map +1 -0
  110. package/dist/utils.d.ts +7 -0
  111. package/dist/utils.d.ts.map +1 -0
  112. package/dist/utils.js +61 -0
  113. package/dist/utils.js.map +1 -0
  114. package/package.json +56 -48
  115. package/dist/commands/each.command.d.ts +0 -16
  116. package/dist/commands/each.command.d.ts.map +0 -1
  117. package/dist/commands/each.command.js +0 -203
  118. package/dist/commands/each.command.js.map +0 -1
  119. package/dist/commands/info.command.d.ts +0 -8
  120. package/dist/commands/info.command.d.ts.map +0 -1
  121. package/dist/commands/info.command.js +0 -178
  122. package/dist/commands/info.command.js.map +0 -1
  123. package/dist/commands/list.command.d.ts +0 -21
  124. package/dist/commands/list.command.d.ts.map +0 -1
  125. package/dist/commands/list.command.js +0 -251
  126. package/dist/commands/list.command.js.map +0 -1
  127. package/dist/commands/run.command.d.ts +0 -12
  128. package/dist/commands/run.command.d.ts.map +0 -1
  129. package/dist/commands/run.command.js +0 -111
  130. package/dist/commands/run.command.js.map +0 -1
  131. package/dist/core.plugin.d.ts +0 -2
  132. package/dist/core.plugin.d.ts.map +0 -1
  133. package/dist/core.plugin.js +0 -22
  134. package/dist/core.plugin.js.map +0 -1
  135. package/dist/task-logger.d.ts +0 -14
  136. package/dist/task-logger.d.ts.map +0 -1
  137. package/dist/task-logger.js +0 -76
  138. package/dist/task-logger.js.map +0 -1
@@ -1,21 +0,0 @@
1
- import { Arguments, Builder, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';
2
- export declare type Attribute = 'name' | 'version' | 'root' | 'slug';
3
- export declare type Data = Partial<Record<Attribute, string>>;
4
- export interface ListArgs extends ProjectArgs {
5
- private: boolean | undefined;
6
- 'with-script': string[] | undefined;
7
- affected: string | undefined;
8
- 'affected-rev-sort': string | undefined;
9
- 'affected-rev-fallback': string;
10
- attrs: Attribute[];
11
- headers: boolean | undefined;
12
- long: boolean | undefined;
13
- json: boolean | undefined;
14
- }
15
- export declare class ListCommand extends ProjectCommand<ListArgs> {
16
- readonly name: string[];
17
- readonly description = "List workspaces";
18
- private buildExtractor;
19
- protected define<U>(builder: Builder<U>): Builder<U & ListArgs>;
20
- protected run(args: Arguments<ListArgs>): Promise<number | void>;
21
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["commands/list.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,OAAO,EAA6B,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOnI,oBAAY,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,oBAAY,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAItD,MAAM,WAAW,QAAS,SAAQ,WAAW;IAC3C,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,uBAAuB,EAAE,MAAM,CAAC;IAEhC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3B;AAeD,qBAAa,WAAY,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAEvD,QAAQ,CAAC,IAAI,WAAkB;IAC/B,QAAQ,CAAC,WAAW,qBAAqB;IAGzC,OAAO,CAAC,cAAc;IAYtB,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;cA0D/C,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAyEvE","file":"list.command.d.ts","sourcesContent":["import { AffectedFilter, Arguments, Builder, CliList, Filter, Pipeline, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';\nimport { Workspace } from '@jujulego/jill-core';\nimport chalk from 'chalk';\nimport slugify from 'slugify';\nimport path from 'path';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\nexport interface ListArgs extends ProjectArgs {\n private: boolean | undefined;\n 'with-script': string[] | undefined;\n\n affected: string | undefined;\n 'affected-rev-sort': string | undefined;\n 'affected-rev-fallback': string;\n\n attrs: Attribute[];\n headers: boolean | undefined;\n long: boolean | undefined;\n json: boolean | undefined;\n}\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Command\nexport class ListCommand extends ProjectCommand<ListArgs> {\n // Attributes\n readonly name = ['list', 'ls'];\n readonly description = 'List workspaces';\n\n // Methods\n private buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n }\n\n protected define<U>(builder: Builder<U>): Builder<U & ListArgs> {\n return super.define(y => builder(y)\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n })\n );\n }\n\n protected async run(args: Arguments<ListArgs>): Promise<number | void> {\n await super.run(args);\n\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(Filter.privateWorkspace(args.private));\n }\n\n if (args['with-script'] !== undefined) {\n pipeline.add(Filter.scripts(args['with-script']));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args['affected-rev-fallback'],\n args['affected-rev-sort']\n ));\n }\n\n // Filter\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(this.project.workspaces())) {\n workspaces.push(wks);\n }\n\n this.spinner.stop();\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => this.buildExtractor(attrs)(wks, args.json || false));\n\n // Print data\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n this.log(JSON.stringify(data, null, 2));\n } else {\n this.log(JSON.stringify(data));\n }\n } else {\n const list = new CliList();\n\n if (args.headers ?? (attrs.length > 1)) {\n list.setHeaders(attrs);\n }\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) || '.';\n }\n\n list.add(attrs.map(attr => d[attr] || ''));\n }\n\n for (const d of list.lines()) {\n this.log(d);\n }\n }\n }\n}\n"]}
@@ -1,251 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ListCommand = void 0;
7
-
8
- var _jillCommon = require("@jujulego/jill-common");
9
-
10
- var _chalk = _interopRequireDefault(require("chalk"));
11
-
12
- var _slugify = _interopRequireDefault(require("slugify"));
13
-
14
- var _path = _interopRequireDefault(require("path"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
19
- function adopt(value) {
20
- return value instanceof P ? value : new P(function (resolve) {
21
- resolve(value);
22
- });
23
- }
24
-
25
- return new (P || (P = Promise))(function (resolve, reject) {
26
- function fulfilled(value) {
27
- try {
28
- step(generator.next(value));
29
- } catch (e) {
30
- reject(e);
31
- }
32
- }
33
-
34
- function rejected(value) {
35
- try {
36
- step(generator["throw"](value));
37
- } catch (e) {
38
- reject(e);
39
- }
40
- }
41
-
42
- function step(result) {
43
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
44
- }
45
-
46
- step((generator = generator.apply(thisArg, _arguments || [])).next());
47
- });
48
- };
49
-
50
- var __asyncValues = void 0 && (void 0).__asyncValues || function (o) {
51
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
52
- var m = o[Symbol.asyncIterator],
53
- i;
54
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
55
- return this;
56
- }, i);
57
-
58
- function verb(n) {
59
- i[n] = o[n] && function (v) {
60
- return new Promise(function (resolve, reject) {
61
- v = o[n](v), settle(resolve, reject, v.done, v.value);
62
- });
63
- };
64
- }
65
-
66
- function settle(resolve, reject, d, v) {
67
- Promise.resolve(v).then(function (v) {
68
- resolve({
69
- value: v,
70
- done: d
71
- });
72
- }, reject);
73
- }
74
- };
75
-
76
- // Constants
77
- const LONG_ATTRIBUTES = ['name', 'version', 'root'];
78
- const JSON_ATTRIBUTES = ['name', 'version', 'slug', 'root'];
79
- const DEFAULT_ATTRIBUTES = ['name'];
80
- const EXTRACTORS = {
81
- name: wks => wks.name,
82
- version: (wks, json) => wks.manifest.version || (json ? undefined : _chalk.default.grey('unset')),
83
- root: wks => wks.cwd,
84
- slug: wks => (0, _slugify.default)(wks.name)
85
- }; // Command
86
-
87
- class ListCommand extends _jillCommon.ProjectCommand {
88
- constructor() {
89
- super(...arguments); // Attributes
90
-
91
- this.name = ['list', 'ls'];
92
- this.description = 'List workspaces';
93
- } // Methods
94
-
95
-
96
- buildExtractor(attrs) {
97
- return (wks, json) => {
98
- const data = {};
99
-
100
- for (const attr of attrs) {
101
- data[attr] = EXTRACTORS[attr](wks, json);
102
- }
103
-
104
- return data;
105
- };
106
- }
107
-
108
- define(builder) {
109
- return super.define(y => builder(y).option('private', {
110
- type: 'boolean',
111
- group: 'Filters:',
112
- desc: 'Print only private workspaces'
113
- }).option('with-script', {
114
- type: 'array',
115
- string: true,
116
- group: 'Filters:',
117
- desc: 'Print only workspaces having the given script'
118
- }).option('affected', {
119
- alias: 'a',
120
- type: 'string',
121
- coerce: rev => rev === '' ? 'master' : rev,
122
- group: 'Affected:',
123
- desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\n' + 'Replaces %name by workspace name.'
124
- }).option('affected-rev-sort', {
125
- type: 'string',
126
- group: 'Affected:',
127
- desc: 'Sort applied to git tag / git branch command'
128
- }).option('affected-rev-fallback', {
129
- type: 'string',
130
- default: 'master',
131
- group: 'Affected:',
132
- desc: 'Fallback revision, used if no revision matching the given format is found'
133
- }).option('attrs', {
134
- type: 'array',
135
- choices: ['name', 'version', 'root', 'slug'],
136
- default: [],
137
- group: 'Format:',
138
- desc: 'Select printed attributes'
139
- }).option('headers', {
140
- type: 'boolean',
141
- group: 'Format:',
142
- desc: 'Prints columns headers'
143
- }).option('long', {
144
- alias: 'l',
145
- type: 'boolean',
146
- group: 'Format:',
147
- desc: 'Prints name, version and root of all workspaces'
148
- }).option('json', {
149
- type: 'boolean',
150
- group: 'Format:',
151
- desc: 'Prints data as a JSON array'
152
- }));
153
- }
154
-
155
- run(args) {
156
- const _super = Object.create(null, {
157
- run: {
158
- get: () => super.run
159
- }
160
- });
161
-
162
- var e_1, _a;
163
-
164
- var _b;
165
-
166
- return __awaiter(this, void 0, void 0, function* () {
167
- yield _super.run.call(this, args); // Setup pipeline
168
-
169
- const pipeline = new _jillCommon.Pipeline();
170
-
171
- if (args.private !== undefined) {
172
- pipeline.add(_jillCommon.Filter.privateWorkspace(args.private));
173
- }
174
-
175
- if (args['with-script'] !== undefined) {
176
- pipeline.add(_jillCommon.Filter.scripts(args['with-script']));
177
- }
178
-
179
- if (args.affected !== undefined) {
180
- pipeline.add(new _jillCommon.AffectedFilter(args.affected, args['affected-rev-fallback'], args['affected-rev-sort']));
181
- } // Filter
182
-
183
-
184
- const workspaces = [];
185
-
186
- try {
187
- for (var _c = __asyncValues(pipeline.filter(this.project.workspaces())), _d; _d = yield _c.next(), !_d.done;) {
188
- const wks = _d.value;
189
- workspaces.push(wks);
190
- }
191
- } catch (e_1_1) {
192
- e_1 = {
193
- error: e_1_1
194
- };
195
- } finally {
196
- try {
197
- if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c);
198
- } finally {
199
- if (e_1) throw e_1.error;
200
- }
201
- }
202
-
203
- this.spinner.stop(); // Build data
204
-
205
- let attrs = args.attrs;
206
-
207
- if (args.attrs.length === 0) {
208
- if (args.long) {
209
- attrs = LONG_ATTRIBUTES;
210
- } else if (args.json) {
211
- attrs = JSON_ATTRIBUTES;
212
- } else {
213
- attrs = DEFAULT_ATTRIBUTES;
214
- }
215
- }
216
-
217
- const data = workspaces.map(wks => this.buildExtractor(attrs)(wks, args.json || false)); // Print data
218
-
219
- if (args.json) {
220
- if (process.stdout.isTTY) {
221
- // Pretty print for ttys
222
- this.log(JSON.stringify(data, null, 2));
223
- } else {
224
- this.log(JSON.stringify(data));
225
- }
226
- } else {
227
- const list = new _jillCommon.CliList();
228
-
229
- if ((_b = args.headers) !== null && _b !== void 0 ? _b : attrs.length > 1) {
230
- list.setHeaders(attrs);
231
- }
232
-
233
- for (const d of data) {
234
- if (d.root) {
235
- d.root = _path.default.relative(process.cwd(), d.root) || '.';
236
- }
237
-
238
- list.add(attrs.map(attr => d[attr] || ''));
239
- }
240
-
241
- for (const d of list.lines()) {
242
- this.log(d);
243
- }
244
- }
245
- });
246
- }
247
-
248
- }
249
-
250
- exports.ListCommand = ListCommand;
251
- //# sourceMappingURL=list.command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["commands/list.command.ts","commands/list.command.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__asyncValues","o","Symbol","asyncIterator","TypeError","m","i","call","__values","iterator","verb","n","v","settle","d","LONG_ATTRIBUTES","JSON_ATTRIBUTES","DEFAULT_ATTRIBUTES","EXTRACTORS","name","wks","version","json","manifest","undefined","chalk","grey","root","cwd","slug","ListCommand","ProjectCommand","constructor","arguments","description","buildExtractor","attrs","data","attr","define","builder","y","option","type","group","desc","string","alias","coerce","rev","default","choices","run","args","_super","Object","create","get","e_1","_a","_b","pipeline","Pipeline","private","add","Filter","privateWorkspace","scripts","affected","AffectedFilter","workspaces","_c","filter","project","_d","push","e_1_1","error","return","spinner","stop","length","long","map","process","stdout","isTTY","log","JSON","stringify","list","CliList","headers","setHeaders","path","relative","lines"],"mappings":"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","file":"list.command.js","sourcesContent":["import { AffectedFilter, Arguments, Builder, CliList, Filter, Pipeline, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';\nimport { Workspace } from '@jujulego/jill-core';\nimport chalk from 'chalk';\nimport slugify from 'slugify';\nimport path from 'path';\n\n// Types\nexport type Attribute = 'name' | 'version' | 'root' | 'slug';\nexport type Data = Partial<Record<Attribute, string>>;\n\ntype Extractor<T> = (wks: Workspace, json: boolean) => T;\n\nexport interface ListArgs extends ProjectArgs {\n private: boolean | undefined;\n 'with-script': string[] | undefined;\n\n affected: string | undefined;\n 'affected-rev-sort': string | undefined;\n 'affected-rev-fallback': string;\n\n attrs: Attribute[];\n headers: boolean | undefined;\n long: boolean | undefined;\n json: boolean | undefined;\n}\n\n// Constants\nconst LONG_ATTRIBUTES: Attribute[] = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES: Attribute[] = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES: Attribute[] = ['name'];\n\nconst EXTRACTORS: Record<Attribute, Extractor<string | undefined>> = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n\n// Command\nexport class ListCommand extends ProjectCommand<ListArgs> {\n // Attributes\n readonly name = ['list', 'ls'];\n readonly description = 'List workspaces';\n\n // Methods\n private buildExtractor(attrs: Attribute[]): Extractor<Data> {\n return (wks, json: boolean) => {\n const data: Data = {};\n\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n\n return data;\n };\n }\n\n protected define<U>(builder: Builder<U>): Builder<U & ListArgs> {\n return super.define(y => builder(y)\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev: string) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [] as Attribute[],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n })\n );\n }\n\n protected async run(args: Arguments<ListArgs>): Promise<number | void> {\n await super.run(args);\n\n // Setup pipeline\n const pipeline = new Pipeline();\n\n if (args.private !== undefined) {\n pipeline.add(Filter.privateWorkspace(args.private));\n }\n\n if (args['with-script'] !== undefined) {\n pipeline.add(Filter.scripts(args['with-script']));\n }\n\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(\n args.affected,\n args['affected-rev-fallback'],\n args['affected-rev-sort']\n ));\n }\n\n // Filter\n const workspaces: Workspace[] = [];\n\n for await (const wks of pipeline.filter(this.project.workspaces())) {\n workspaces.push(wks);\n }\n\n this.spinner.stop();\n\n // Build data\n let attrs = args.attrs;\n\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n } else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n } else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n\n const data = workspaces.map(wks => this.buildExtractor(attrs)(wks, args.json || false));\n\n // Print data\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n this.log(JSON.stringify(data, null, 2));\n } else {\n this.log(JSON.stringify(data));\n }\n } else {\n const list = new CliList();\n\n if (args.headers ?? (attrs.length > 1)) {\n list.setHeaders(attrs);\n }\n\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) || '.';\n }\n\n list.add(attrs.map(attr => d[attr] || ''));\n }\n\n for (const d of list.lines()) {\n this.log(d);\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nimport { AffectedFilter, CliList, Filter, Pipeline, ProjectCommand } from '@jujulego/jill-common';\nimport chalk from 'chalk';\nimport slugify from 'slugify';\nimport path from 'path';\n// Constants\nconst LONG_ATTRIBUTES = ['name', 'version', 'root'];\nconst JSON_ATTRIBUTES = ['name', 'version', 'slug', 'root'];\nconst DEFAULT_ATTRIBUTES = ['name'];\nconst EXTRACTORS = {\n name: wks => wks.name,\n version: (wks, json) => wks.manifest.version || (json ? undefined : chalk.grey('unset')),\n root: wks => wks.cwd,\n slug: wks => slugify(wks.name)\n};\n// Command\nexport class ListCommand extends ProjectCommand {\n constructor() {\n super(...arguments);\n // Attributes\n this.name = ['list', 'ls'];\n this.description = 'List workspaces';\n }\n // Methods\n buildExtractor(attrs) {\n return (wks, json) => {\n const data = {};\n for (const attr of attrs) {\n data[attr] = EXTRACTORS[attr](wks, json);\n }\n return data;\n };\n }\n define(builder) {\n return super.define(y => builder(y)\n .option('private', {\n type: 'boolean',\n group: 'Filters:',\n desc: 'Print only private workspaces',\n })\n .option('with-script', {\n type: 'array',\n string: true,\n group: 'Filters:',\n desc: 'Print only workspaces having the given script',\n })\n .option('affected', {\n alias: 'a',\n type: 'string',\n coerce: (rev) => rev === '' ? 'master' : rev,\n group: 'Affected:',\n desc: 'Print only affected workspaces towards given git revision. If no revision is given, it will check towards master.\\n' +\n 'Replaces %name by workspace name.',\n })\n .option('affected-rev-sort', {\n type: 'string',\n group: 'Affected:',\n desc: 'Sort applied to git tag / git branch command',\n })\n .option('affected-rev-fallback', {\n type: 'string',\n default: 'master',\n group: 'Affected:',\n desc: 'Fallback revision, used if no revision matching the given format is found',\n })\n .option('attrs', {\n type: 'array',\n choices: ['name', 'version', 'root', 'slug'],\n default: [],\n group: 'Format:',\n desc: 'Select printed attributes'\n })\n .option('headers', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints columns headers'\n })\n .option('long', {\n alias: 'l',\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints name, version and root of all workspaces',\n })\n .option('json', {\n type: 'boolean',\n group: 'Format:',\n desc: 'Prints data as a JSON array',\n }));\n }\n run(args) {\n const _super = Object.create(null, {\n run: { get: () => super.run }\n });\n var e_1, _a;\n var _b;\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.run.call(this, args);\n // Setup pipeline\n const pipeline = new Pipeline();\n if (args.private !== undefined) {\n pipeline.add(Filter.privateWorkspace(args.private));\n }\n if (args['with-script'] !== undefined) {\n pipeline.add(Filter.scripts(args['with-script']));\n }\n if (args.affected !== undefined) {\n pipeline.add(new AffectedFilter(args.affected, args['affected-rev-fallback'], args['affected-rev-sort']));\n }\n // Filter\n const workspaces = [];\n try {\n for (var _c = __asyncValues(pipeline.filter(this.project.workspaces())), _d; _d = yield _c.next(), !_d.done;) {\n const wks = _d.value;\n workspaces.push(wks);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.spinner.stop();\n // Build data\n let attrs = args.attrs;\n if (args.attrs.length === 0) {\n if (args.long) {\n attrs = LONG_ATTRIBUTES;\n }\n else if (args.json) {\n attrs = JSON_ATTRIBUTES;\n }\n else {\n attrs = DEFAULT_ATTRIBUTES;\n }\n }\n const data = workspaces.map(wks => this.buildExtractor(attrs)(wks, args.json || false));\n // Print data\n if (args.json) {\n if (process.stdout.isTTY) { // Pretty print for ttys\n this.log(JSON.stringify(data, null, 2));\n }\n else {\n this.log(JSON.stringify(data));\n }\n }\n else {\n const list = new CliList();\n if ((_b = args.headers) !== null && _b !== void 0 ? _b : (attrs.length > 1)) {\n list.setHeaders(attrs);\n }\n for (const d of data) {\n if (d.root) {\n d.root = path.relative(process.cwd(), d.root) || '.';\n }\n list.add(attrs.map(attr => d[attr] || ''));\n }\n for (const d of list.lines()) {\n this.log(d);\n }\n }\n });\n }\n}"]}
@@ -1,12 +0,0 @@
1
- import { Arguments, Builder, WorkspaceArgs, WorkspaceCommand } from '@jujulego/jill-common';
2
- import { WorkspaceDepsMode } from '@jujulego/jill-core';
3
- export interface RunArgs extends WorkspaceArgs {
4
- script: string;
5
- 'deps-mode': WorkspaceDepsMode;
6
- }
7
- export declare class RunCommand extends WorkspaceCommand<RunArgs> {
8
- readonly name = "run <script>";
9
- readonly description = "Run script inside workspace";
10
- protected define<U>(builder: Builder<U>): Builder<U & RunArgs>;
11
- protected run(args: Arguments<RunArgs>): Promise<number>;
12
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["commands/run.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAW,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKjE,MAAM,WAAW,OAAQ,SAAQ,aAAa;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAGD,qBAAa,UAAW,SAAQ,gBAAgB,CAAC,OAAO,CAAC;IAEvD,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,WAAW,iCAAiC;IAGrD,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;cAc9C,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAqB/D","file":"run.command.d.ts","sourcesContent":["import { Arguments, Builder, WorkspaceArgs, WorkspaceCommand } from '@jujulego/jill-common';\nimport { TaskSet, WorkspaceDepsMode } from '@jujulego/jill-core';\n\nimport { TaskLogger } from '../task-logger';\n\n// Types\nexport interface RunArgs extends WorkspaceArgs {\n script: string;\n 'deps-mode': WorkspaceDepsMode;\n}\n\n// Command\nexport class RunCommand extends WorkspaceCommand<RunArgs> {\n // Attributes\n readonly name = 'run <script>';\n readonly description = 'Run script inside workspace';\n\n // Methods\n protected define<U>(builder: Builder<U>): Builder<U & RunArgs> {\n return super.define(y => builder(y)\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n );\n }\n\n protected async run(args: Arguments<RunArgs>): Promise<number> {\n await super.run(args);\n this.spinner.stop();\n\n // Run build task\n const set = new TaskSet();\n const task = await this.workspace.run(args.script, args['--']?.map(arg => arg.toString()), {\n buildDeps: args['deps-mode']\n });\n set.add(task);\n\n const tlogger = new TaskLogger();\n tlogger.on('spin-simple', (tsk) => tsk === task ? `Running ${args.script} in ${this.workspace.name} ...` : `Building ${tsk.context.workspace?.name} ...`);\n tlogger.on('fail', (tsk) => tsk === task ? `${args.script} failed` : `Failed to build ${tsk.context.workspace?.name}`);\n tlogger.on('succeed', (tsk) => tsk === task ? `${this.workspace.name} ${args.script} done` : `${tsk.context.workspace?.name} built`);\n tlogger.connect(set);\n\n set.start();\n const [result] = await set.waitFor('finished');\n return result.failed === 0 ? 0 : 1;\n }\n}\n"]}
@@ -1,111 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.RunCommand = void 0;
7
-
8
- var _jillCommon = require("@jujulego/jill-common");
9
-
10
- var _jillCore = require("@jujulego/jill-core");
11
-
12
- var _taskLogger = require("../task-logger");
13
-
14
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
15
- function adopt(value) {
16
- return value instanceof P ? value : new P(function (resolve) {
17
- resolve(value);
18
- });
19
- }
20
-
21
- return new (P || (P = Promise))(function (resolve, reject) {
22
- function fulfilled(value) {
23
- try {
24
- step(generator.next(value));
25
- } catch (e) {
26
- reject(e);
27
- }
28
- }
29
-
30
- function rejected(value) {
31
- try {
32
- step(generator["throw"](value));
33
- } catch (e) {
34
- reject(e);
35
- }
36
- }
37
-
38
- function step(result) {
39
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
40
- }
41
-
42
- step((generator = generator.apply(thisArg, _arguments || [])).next());
43
- });
44
- };
45
-
46
- // Command
47
- class RunCommand extends _jillCommon.WorkspaceCommand {
48
- constructor() {
49
- super(...arguments); // Attributes
50
-
51
- this.name = 'run <script>';
52
- this.description = 'Run script inside workspace';
53
- } // Methods
54
-
55
-
56
- define(builder) {
57
- return super.define(y => builder(y).positional('script', {
58
- type: 'string',
59
- demandOption: true
60
- }).option('deps-mode', {
61
- choice: ['all', 'prod', 'none'],
62
- default: 'all',
63
- desc: 'Dependency selection mode:\n' + ' - all = dependencies AND devDependencies\n' + ' - prod = dependencies\n' + ' - none = nothing'
64
- }));
65
- }
66
-
67
- run(args) {
68
- const _super = Object.create(null, {
69
- run: {
70
- get: () => super.run
71
- }
72
- });
73
-
74
- var _a;
75
-
76
- return __awaiter(this, void 0, void 0, function* () {
77
- yield _super.run.call(this, args);
78
- this.spinner.stop(); // Run build task
79
-
80
- const set = new _jillCore.TaskSet();
81
- const task = yield this.workspace.run(args.script, (_a = args['--']) === null || _a === void 0 ? void 0 : _a.map(arg => arg.toString()), {
82
- buildDeps: args['deps-mode']
83
- });
84
- set.add(task);
85
- const tlogger = new _taskLogger.TaskLogger();
86
- tlogger.on('spin-simple', tsk => {
87
- var _a;
88
-
89
- return tsk === task ? `Running ${args.script} in ${this.workspace.name} ...` : `Building ${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name} ...`;
90
- });
91
- tlogger.on('fail', tsk => {
92
- var _a;
93
-
94
- return tsk === task ? `${args.script} failed` : `Failed to build ${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name}`;
95
- });
96
- tlogger.on('succeed', tsk => {
97
- var _a;
98
-
99
- return tsk === task ? `${this.workspace.name} ${args.script} done` : `${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name} built`;
100
- });
101
- tlogger.connect(set);
102
- set.start();
103
- const [result] = yield set.waitFor('finished');
104
- return result.failed === 0 ? 0 : 1;
105
- });
106
- }
107
-
108
- }
109
-
110
- exports.RunCommand = RunCommand;
111
- //# sourceMappingURL=run.command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["commands/run.command.ts","commands/run.command.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","RunCommand","WorkspaceCommand","constructor","arguments","name","description","define","builder","y","positional","type","demandOption","option","choice","default","desc","run","args","_super","Object","create","get","_a","call","spinner","stop","set","TaskSet","task","workspace","script","map","arg","toString","buildDeps","add","tlogger","TaskLogger","on","tsk","context","connect","start","waitFor","failed"],"mappings":"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","file":"run.command.js","sourcesContent":["import { Arguments, Builder, WorkspaceArgs, WorkspaceCommand } from '@jujulego/jill-common';\nimport { TaskSet, WorkspaceDepsMode } from '@jujulego/jill-core';\n\nimport { TaskLogger } from '../task-logger';\n\n// Types\nexport interface RunArgs extends WorkspaceArgs {\n script: string;\n 'deps-mode': WorkspaceDepsMode;\n}\n\n// Command\nexport class RunCommand extends WorkspaceCommand<RunArgs> {\n // Attributes\n readonly name = 'run <script>';\n readonly description = 'Run script inside workspace';\n\n // Methods\n protected define<U>(builder: Builder<U>): Builder<U & RunArgs> {\n return super.define(y => builder(y)\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all' as WorkspaceDepsMode,\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n })\n );\n }\n\n protected async run(args: Arguments<RunArgs>): Promise<number> {\n await super.run(args);\n this.spinner.stop();\n\n // Run build task\n const set = new TaskSet();\n const task = await this.workspace.run(args.script, args['--']?.map(arg => arg.toString()), {\n buildDeps: args['deps-mode']\n });\n set.add(task);\n\n const tlogger = new TaskLogger();\n tlogger.on('spin-simple', (tsk) => tsk === task ? `Running ${args.script} in ${this.workspace.name} ...` : `Building ${tsk.context.workspace?.name} ...`);\n tlogger.on('fail', (tsk) => tsk === task ? `${args.script} failed` : `Failed to build ${tsk.context.workspace?.name}`);\n tlogger.on('succeed', (tsk) => tsk === task ? `${this.workspace.name} ${args.script} done` : `${tsk.context.workspace?.name} built`);\n tlogger.connect(set);\n\n set.start();\n const [result] = await set.waitFor('finished');\n return result.failed === 0 ? 0 : 1;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { WorkspaceCommand } from '@jujulego/jill-common';\nimport { TaskSet } from '@jujulego/jill-core';\nimport { TaskLogger } from '../task-logger';\n// Command\nexport class RunCommand extends WorkspaceCommand {\n constructor() {\n super(...arguments);\n // Attributes\n this.name = 'run <script>';\n this.description = 'Run script inside workspace';\n }\n // Methods\n define(builder) {\n return super.define(y => builder(y)\n .positional('script', { type: 'string', demandOption: true })\n .option('deps-mode', {\n choice: ['all', 'prod', 'none'],\n default: 'all',\n desc: 'Dependency selection mode:\\n' +\n ' - all = dependencies AND devDependencies\\n' +\n ' - prod = dependencies\\n' +\n ' - none = nothing'\n }));\n }\n run(args) {\n const _super = Object.create(null, {\n run: { get: () => super.run }\n });\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.run.call(this, args);\n this.spinner.stop();\n // Run build task\n const set = new TaskSet();\n const task = yield this.workspace.run(args.script, (_a = args['--']) === null || _a === void 0 ? void 0 : _a.map(arg => arg.toString()), {\n buildDeps: args['deps-mode']\n });\n set.add(task);\n const tlogger = new TaskLogger();\n tlogger.on('spin-simple', (tsk) => { var _a; return tsk === task ? `Running ${args.script} in ${this.workspace.name} ...` : `Building ${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name} ...`; });\n tlogger.on('fail', (tsk) => { var _a; return tsk === task ? `${args.script} failed` : `Failed to build ${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name}`; });\n tlogger.on('succeed', (tsk) => { var _a; return tsk === task ? `${this.workspace.name} ${args.script} done` : `${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name} built`; });\n tlogger.connect(set);\n set.start();\n const [result] = yield set.waitFor('finished');\n return result.failed === 0 ? 0 : 1;\n });\n }\n}"]}
@@ -1,2 +0,0 @@
1
- import { Plugin } from '@jujulego/jill-common';
2
- export declare const corePlugin: Plugin;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["core.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQ/C,eAAO,MAAM,UAAU,QAKrB,CAAC","file":"core.plugin.d.ts","sourcesContent":["import { Plugin } from '@jujulego/jill-common';\n\nimport { EachCommand } from './commands/each.command';\nimport { InfoCommand } from './commands/info.command';\nimport { ListCommand } from './commands/list.command';\nimport { RunCommand } from './commands/run.command';\n\n// Plugin\nexport const corePlugin = Plugin.createPlugin('core', [\n InfoCommand,\n ListCommand,\n RunCommand,\n EachCommand,\n]);\n"]}
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.corePlugin = void 0;
7
-
8
- var _jillCommon = require("@jujulego/jill-common");
9
-
10
- var _each = require("./commands/each.command");
11
-
12
- var _info = require("./commands/info.command");
13
-
14
- var _list = require("./commands/list.command");
15
-
16
- var _run = require("./commands/run.command");
17
-
18
- // Plugin
19
- const corePlugin = _jillCommon.Plugin.createPlugin('core', [_info.InfoCommand, _list.ListCommand, _run.RunCommand, _each.EachCommand]);
20
-
21
- exports.corePlugin = corePlugin;
22
- //# sourceMappingURL=core.plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["core.plugin.ts"],"names":["corePlugin","Plugin","createPlugin","InfoCommand","ListCommand","RunCommand","EachCommand"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AAEA;AACO,MAAMA,UAAU,GAAGC,mBAAOC,YAAP,CAAoB,MAApB,EAA4B,CACpDC,iBADoD,EAEpDC,iBAFoD,EAGpDC,eAHoD,EAIpDC,iBAJoD,CAA5B,CAAnB","file":"core.plugin.js","sourcesContent":["import { Plugin } from '@jujulego/jill-common';\n\nimport { EachCommand } from './commands/each.command';\nimport { InfoCommand } from './commands/info.command';\nimport { ListCommand } from './commands/list.command';\nimport { RunCommand } from './commands/run.command';\n\n// Plugin\nexport const corePlugin = Plugin.createPlugin('core', [\n InfoCommand,\n ListCommand,\n RunCommand,\n EachCommand,\n]);\n"]}
@@ -1,14 +0,0 @@
1
- import { Task, TaskSet } from '@jujulego/jill-core';
2
- export declare type TaskLoggerState = 'spin-multiple' | 'spin-simple' | 'fail' | 'succeed';
3
- export declare class TaskLogger {
4
- private readonly _running;
5
- private readonly _formats;
6
- private _refreshSpinner;
7
- private _handleStarted;
8
- private _handleCompleted;
9
- connect(set: TaskSet): void;
10
- on(state: 'spin-multiple', format: (count: number) => string): void;
11
- on(state: 'spin-simple', format: (tsk: Task) => string): void;
12
- on(state: 'fail', format: (tsk: Task) => string): void;
13
- on(state: 'succeed', format: (tsk: Task) => string): void;
14
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["task-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGpD,oBAAY,eAAe,GAAG,eAAe,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAGnF,qBAAa,UAAU;IAErB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAKvB;IAGF,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAK3B,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IACnE,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;IAC7D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;IACtD,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;CAI1D","file":"task-logger.d.ts","sourcesContent":["import { transport } from '@jujulego/jill-common';\nimport { Task, TaskSet } from '@jujulego/jill-core';\n\n// Types\nexport type TaskLoggerState = 'spin-multiple' | 'spin-simple' | 'fail' | 'succeed';\n\n// Class\nexport class TaskLogger {\n // Attributes\n private readonly _running = new Set<Task>();\n private readonly _formats = {\n 'spin-multiple': (count: number) => `Building ${count} workspaces ...`,\n 'spin-simple': (tsk: Task) => `Building ${tsk.context.workspace?.name} ...`,\n 'fail': (tsk: Task) => `Failed to build ${tsk.context.workspace?.name}`,\n 'succeed': (tsk: Task) => `${tsk.context.workspace?.name} built`,\n };\n\n // Methods\n private _refreshSpinner() {\n if (this._running.size > 1) {\n transport.spin(this._formats['spin-multiple'](this._running.size));\n } else if (this._running.size > 0) {\n const tsk = this._running.values().next().value;\n transport.spin(this._formats['spin-simple'](tsk));\n }\n }\n\n private _handleStarted(task: Task) {\n this._running.add(task);\n\n this._refreshSpinner();\n }\n\n private _handleCompleted(task: Task) {\n this._running.delete(task);\n\n if (task.status === 'failed') {\n transport.fail(this._formats['fail'](task));\n } else {\n transport.succeed(this._formats['succeed'](task));\n }\n\n this._refreshSpinner();\n }\n\n connect(set: TaskSet): void {\n set.on('started', (task) => this._handleStarted(task));\n set.on('completed', (task) => this._handleCompleted(task));\n }\n\n on(state: 'spin-multiple', format: (count: number) => string): void;\n on(state: 'spin-simple', format: (tsk: Task) => string): void;\n on(state: 'fail', format: (tsk: Task) => string): void;\n on(state: 'succeed', format: (tsk: Task) => string): void;\n on(state: TaskLoggerState, format: (arg: never) => string): void {\n this._formats[state] = format;\n }\n}\n"]}
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TaskLogger = void 0;
7
-
8
- var _jillCommon = require("@jujulego/jill-common");
9
-
10
- // Class
11
- class TaskLogger {
12
- constructor() {
13
- // Attributes
14
- this._running = new Set();
15
- this._formats = {
16
- 'spin-multiple': count => `Building ${count} workspaces ...`,
17
- 'spin-simple': tsk => {
18
- var _a;
19
-
20
- return `Building ${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name} ...`;
21
- },
22
- 'fail': tsk => {
23
- var _a;
24
-
25
- return `Failed to build ${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name}`;
26
- },
27
- 'succeed': tsk => {
28
- var _a;
29
-
30
- return `${(_a = tsk.context.workspace) === null || _a === void 0 ? void 0 : _a.name} built`;
31
- }
32
- };
33
- } // Methods
34
-
35
-
36
- _refreshSpinner() {
37
- if (this._running.size > 1) {
38
- _jillCommon.transport.spin(this._formats['spin-multiple'](this._running.size));
39
- } else if (this._running.size > 0) {
40
- const tsk = this._running.values().next().value;
41
-
42
- _jillCommon.transport.spin(this._formats['spin-simple'](tsk));
43
- }
44
- }
45
-
46
- _handleStarted(task) {
47
- this._running.add(task);
48
-
49
- this._refreshSpinner();
50
- }
51
-
52
- _handleCompleted(task) {
53
- this._running.delete(task);
54
-
55
- if (task.status === 'failed') {
56
- _jillCommon.transport.fail(this._formats['fail'](task));
57
- } else {
58
- _jillCommon.transport.succeed(this._formats['succeed'](task));
59
- }
60
-
61
- this._refreshSpinner();
62
- }
63
-
64
- connect(set) {
65
- set.on('started', task => this._handleStarted(task));
66
- set.on('completed', task => this._handleCompleted(task));
67
- }
68
-
69
- on(state, format) {
70
- this._formats[state] = format;
71
- }
72
-
73
- }
74
-
75
- exports.TaskLogger = TaskLogger;
76
- //# sourceMappingURL=task-logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["task-logger.ts"],"names":["TaskLogger","constructor","_running","Set","_formats","count","tsk","_a","context","workspace","name","_refreshSpinner","size","transport","spin","values","next","value","_handleStarted","task","add","_handleCompleted","delete","status","fail","succeed","connect","set","on","state","format"],"mappings":";;;;;;;AAAA;;AAMA;AACM,MAAOA,UAAP,CAAiB;AAAvBC,EAAAA,WAAA,GAAA;AACE;AACiB,SAAAC,QAAA,GAAW,IAAIC,GAAJ,EAAX;AACA,SAAAC,QAAA,GAAW;AAC1B,uBAAkBC,KAAD,IAAmB,YAAYA,KAAK,iBAD3B;AAE1B,qBAAgBC,GAAD,IAAc;AAAA,YAAAC,EAAA;;AAAC,eAAA,YAAY,CAAAA,EAAA,GAAAD,GAAG,CAACE,OAAJ,CAAYC,SAAZ,MAAqB,IAArB,IAAqBF,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqBA,EAAA,CAAEG,IAAI,MAAvC;AAA6C,OAFjD;AAG1B,cAASJ,GAAD,IAAc;AAAA,YAAAC,EAAA;;AAAC,eAAA,mBAAmB,CAAAA,EAAA,GAAAD,GAAG,CAACE,OAAJ,CAAYC,SAAZ,MAAqB,IAArB,IAAqBF,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqBA,EAAA,CAAEG,IAAI,EAA9C;AAAgD,OAH7C;AAI1B,iBAAYJ,GAAD,IAAc;AAAA,YAAAC,EAAA;;AAAC,eAAA,GAAG,CAAAA,EAAA,GAAAD,GAAG,CAACE,OAAJ,CAAYC,SAAZ,MAAqB,IAArB,IAAqBF,EAAA,KAAA,KAAA,CAArB,GAAqB,KAAA,CAArB,GAAqBA,EAAA,CAAEG,IAAI,QAA9B;AAAsC;AAJtC,KAAX;AA+ClB,GAlDsB,CAUrB;;;AACQC,EAAAA,eAAe,GAAA;AACrB,QAAI,KAAKT,QAAL,CAAcU,IAAd,GAAqB,CAAzB,EAA4B;AAC1BC,4BAAUC,IAAV,CAAe,KAAKV,QAAL,CAAc,eAAd,EAA+B,KAAKF,QAAL,CAAcU,IAA7C,CAAf;AACD,KAFD,MAEO,IAAI,KAAKV,QAAL,CAAcU,IAAd,GAAqB,CAAzB,EAA4B;AACjC,YAAMN,GAAG,GAAG,KAAKJ,QAAL,CAAca,MAAd,GAAuBC,IAAvB,GAA8BC,KAA1C;;AACAJ,4BAAUC,IAAV,CAAe,KAAKV,QAAL,CAAc,aAAd,EAA6BE,GAA7B,CAAf;AACD;AACF;;AAEOY,EAAAA,cAAc,CAACC,IAAD,EAAW;AAC/B,SAAKjB,QAAL,CAAckB,GAAd,CAAkBD,IAAlB;;AAEA,SAAKR,eAAL;AACD;;AAEOU,EAAAA,gBAAgB,CAACF,IAAD,EAAW;AACjC,SAAKjB,QAAL,CAAcoB,MAAd,CAAqBH,IAArB;;AAEA,QAAIA,IAAI,CAACI,MAAL,KAAgB,QAApB,EAA8B;AAC5BV,4BAAUW,IAAV,CAAe,KAAKpB,QAAL,CAAc,MAAd,EAAsBe,IAAtB,CAAf;AACD,KAFD,MAEO;AACLN,4BAAUY,OAAV,CAAkB,KAAKrB,QAAL,CAAc,SAAd,EAAyBe,IAAzB,CAAlB;AACD;;AAED,SAAKR,eAAL;AACD;;AAEDe,EAAAA,OAAO,CAACC,GAAD,EAAa;AAClBA,IAAAA,GAAG,CAACC,EAAJ,CAAO,SAAP,EAAmBT,IAAD,IAAU,KAAKD,cAAL,CAAoBC,IAApB,CAA5B;AACAQ,IAAAA,GAAG,CAACC,EAAJ,CAAO,WAAP,EAAqBT,IAAD,IAAU,KAAKE,gBAAL,CAAsBF,IAAtB,CAA9B;AACD;;AAMDS,EAAAA,EAAE,CAACC,KAAD,EAAyBC,MAAzB,EAAuD;AACvD,SAAK1B,QAAL,CAAcyB,KAAd,IAAuBC,MAAvB;AACD;;AAjDoB","file":"task-logger.js","sourcesContent":["import { transport } from '@jujulego/jill-common';\nimport { Task, TaskSet } from '@jujulego/jill-core';\n\n// Types\nexport type TaskLoggerState = 'spin-multiple' | 'spin-simple' | 'fail' | 'succeed';\n\n// Class\nexport class TaskLogger {\n // Attributes\n private readonly _running = new Set<Task>();\n private readonly _formats = {\n 'spin-multiple': (count: number) => `Building ${count} workspaces ...`,\n 'spin-simple': (tsk: Task) => `Building ${tsk.context.workspace?.name} ...`,\n 'fail': (tsk: Task) => `Failed to build ${tsk.context.workspace?.name}`,\n 'succeed': (tsk: Task) => `${tsk.context.workspace?.name} built`,\n };\n\n // Methods\n private _refreshSpinner() {\n if (this._running.size > 1) {\n transport.spin(this._formats['spin-multiple'](this._running.size));\n } else if (this._running.size > 0) {\n const tsk = this._running.values().next().value;\n transport.spin(this._formats['spin-simple'](tsk));\n }\n }\n\n private _handleStarted(task: Task) {\n this._running.add(task);\n\n this._refreshSpinner();\n }\n\n private _handleCompleted(task: Task) {\n this._running.delete(task);\n\n if (task.status === 'failed') {\n transport.fail(this._formats['fail'](task));\n } else {\n transport.succeed(this._formats['succeed'](task));\n }\n\n this._refreshSpinner();\n }\n\n connect(set: TaskSet): void {\n set.on('started', (task) => this._handleStarted(task));\n set.on('completed', (task) => this._handleCompleted(task));\n }\n\n on(state: 'spin-multiple', format: (count: number) => string): void;\n on(state: 'spin-simple', format: (tsk: Task) => string): void;\n on(state: 'fail', format: (tsk: Task) => string): void;\n on(state: 'succeed', format: (tsk: Task) => string): void;\n on(state: TaskLoggerState, format: (arg: never) => string): void {\n this._formats[state] = format;\n }\n}\n"]}