@jujulego/jill 1.2.1 → 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.
- package/LICENSE +21 -0
- package/README.md +28 -0
- package/dist/commands/list.d.ts +23 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +169 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/filters/affected.filter.d.ts +11 -0
- package/dist/filters/affected.filter.d.ts.map +1 -0
- package/dist/filters/affected.filter.js +82 -0
- package/dist/filters/affected.filter.js.map +1 -0
- package/dist/filters/index.d.ts +4 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +21 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/pipeline.d.ts +11 -0
- package/dist/filters/pipeline.d.ts.map +1 -0
- package/dist/filters/pipeline.js +34 -0
- package/dist/filters/pipeline.js.map +1 -0
- package/dist/filters/private.filter.d.ts +7 -0
- package/dist/filters/private.filter.d.ts.map +1 -0
- package/dist/filters/private.filter.js +20 -0
- package/dist/filters/private.filter.js.map +1 -0
- package/dist/filters/scripts.filter.d.ts +7 -0
- package/dist/filters/scripts.filter.d.ts.map +1 -0
- package/dist/filters/scripts.filter.js +21 -0
- package/dist/filters/scripts.filter.js.map +1 -0
- package/dist/git.d.ts +16 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +94 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -33
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +23 -52
- package/dist/main.js.map +1 -1
- package/dist/modifiers/global-config.d.ts +6 -0
- package/dist/modifiers/global-config.d.ts.map +1 -0
- package/dist/modifiers/global-config.js +24 -0
- package/dist/modifiers/global-config.js.map +1 -0
- package/dist/modifiers/index.d.ts +3 -0
- package/dist/modifiers/index.d.ts.map +1 -0
- package/dist/modifiers/index.js +20 -0
- package/dist/modifiers/index.js.map +1 -0
- package/dist/modifiers/load-project.d.ts +7 -0
- package/dist/modifiers/load-project.d.ts.map +1 -0
- package/dist/modifiers/load-project.js +39 -0
- package/dist/modifiers/load-project.js.map +1 -0
- package/dist/modifiers/setup-ink.d.ts +2 -0
- package/dist/modifiers/setup-ink.d.ts.map +1 -0
- package/dist/modifiers/setup-ink.js +19 -0
- package/dist/modifiers/setup-ink.js.map +1 -0
- package/dist/project/index.d.ts +2 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +19 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/project.d.ts +25 -0
- package/dist/project/project.d.ts.map +1 -0
- package/dist/project/project.js +190 -0
- package/dist/project/project.js.map +1 -0
- package/dist/project/workspace.d.ts +32 -0
- package/dist/project/workspace.d.ts.map +1 -0
- package/dist/project/workspace.js +159 -0
- package/dist/project/workspace.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/inversify.config.d.ts +11 -0
- package/dist/services/inversify.config.d.ts.map +1 -0
- package/dist/services/inversify.config.js +34 -0
- package/dist/services/inversify.config.js.map +1 -0
- package/dist/services/logger.service.d.ts +5 -0
- package/dist/services/logger.service.d.ts.map +1 -0
- package/dist/services/logger.service.js +58 -0
- package/dist/services/logger.service.js.map +1 -0
- package/dist/services/spinner.service.d.ts +14 -0
- package/dist/services/spinner.service.d.ts.map +1 -0
- package/dist/services/spinner.service.js +55 -0
- package/dist/services/spinner.service.js.map +1 -0
- package/dist/services/task-manager.service.d.ts +1 -0
- package/dist/services/task-manager.service.d.ts.map +1 -0
- package/dist/services/task-manager.service.js +18 -0
- package/dist/services/task-manager.service.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/cli-list.d.ts +15 -0
- package/dist/ui/cli-list.d.ts.map +1 -0
- package/dist/ui/cli-list.js +66 -0
- package/dist/ui/cli-list.js.map +1 -0
- package/dist/ui/global-spinner.d.ts +2 -0
- package/dist/ui/global-spinner.d.ts.map +1 -0
- package/dist/ui/global-spinner.js +43 -0
- package/dist/ui/global-spinner.js.map +1 -0
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +21 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/layout.d.ts +2 -0
- package/dist/ui/layout.d.ts.map +1 -0
- package/dist/ui/layout.js +19 -0
- package/dist/ui/layout.js.map +1 -0
- package/dist/ui/static-logs.d.ts +2 -0
- package/dist/ui/static-logs.d.ts.map +1 -0
- package/dist/ui/static-logs.js +79 -0
- package/dist/ui/static-logs.js.map +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +61 -0
- package/dist/utils.js.map +1 -0
- package/package.json +52 -40
- package/dist/commands/each.command.d.ts +0 -16
- package/dist/commands/each.command.d.ts.map +0 -1
- package/dist/commands/each.command.js +0 -203
- package/dist/commands/each.command.js.map +0 -1
- package/dist/commands/info.command.d.ts +0 -8
- package/dist/commands/info.command.d.ts.map +0 -1
- package/dist/commands/info.command.js +0 -178
- package/dist/commands/info.command.js.map +0 -1
- package/dist/commands/list.command.d.ts +0 -21
- package/dist/commands/list.command.d.ts.map +0 -1
- package/dist/commands/list.command.js +0 -251
- package/dist/commands/list.command.js.map +0 -1
- package/dist/commands/run.command.d.ts +0 -12
- package/dist/commands/run.command.d.ts.map +0 -1
- package/dist/commands/run.command.js +0 -111
- package/dist/commands/run.command.js.map +0 -1
- package/dist/core.plugin.d.ts +0 -2
- package/dist/core.plugin.d.ts.map +0 -1
- package/dist/core.plugin.js +0 -22
- package/dist/core.plugin.js.map +0 -1
- package/dist/task-logger.d.ts +0 -14
- package/dist/task-logger.d.ts.map +0 -1
- package/dist/task-logger.js +0 -76
- package/dist/task-logger.js.map +0 -1
package/dist/git.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Git", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>Git
|
|
8
|
+
});
|
|
9
|
+
const _tasks = require("@jujulego/tasks");
|
|
10
|
+
const _services = require("./services");
|
|
11
|
+
const _utils = require("./utils");
|
|
12
|
+
var __decorate = (void 0) && (void 0).__decorate || function(decorators, target, key, desc) {
|
|
13
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
16
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
|
+
};
|
|
18
|
+
class Git {
|
|
19
|
+
// commons
|
|
20
|
+
static command(cmd, args, options = {}) {
|
|
21
|
+
const opts = {
|
|
22
|
+
logger: this.logger,
|
|
23
|
+
...options
|
|
24
|
+
};
|
|
25
|
+
// Create task
|
|
26
|
+
const task = new _tasks.SpawnTask('git', [
|
|
27
|
+
cmd,
|
|
28
|
+
...args
|
|
29
|
+
], {
|
|
30
|
+
command: cmd
|
|
31
|
+
}, opts);
|
|
32
|
+
task.subscribe('stream', ({ data })=>opts.logger.debug(data.toString('utf-8')));
|
|
33
|
+
this.manager.add(task);
|
|
34
|
+
return task;
|
|
35
|
+
}
|
|
36
|
+
// commands
|
|
37
|
+
static branch(args, options) {
|
|
38
|
+
return this.command('branch', args, options);
|
|
39
|
+
}
|
|
40
|
+
static diff(args, options) {
|
|
41
|
+
return this.command('diff', args, options);
|
|
42
|
+
}
|
|
43
|
+
static tag(args, options) {
|
|
44
|
+
return this.command('tag', args, options);
|
|
45
|
+
}
|
|
46
|
+
// high level
|
|
47
|
+
static isAffected(reference, args = [], opts) {
|
|
48
|
+
return new Promise((resolve, reject)=>{
|
|
49
|
+
const task = this.diff([
|
|
50
|
+
'--quiet',
|
|
51
|
+
reference,
|
|
52
|
+
...args
|
|
53
|
+
], opts);
|
|
54
|
+
task.subscribe('status.done', ()=>resolve(true));
|
|
55
|
+
task.subscribe('status.failed', ()=>{
|
|
56
|
+
if (task.exitCode) {
|
|
57
|
+
resolve(false);
|
|
58
|
+
} else {
|
|
59
|
+
reject(new Error(`Task ${task.name} failed`));
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
static async listBranches(args = [], opts) {
|
|
65
|
+
const task = this.branch([
|
|
66
|
+
'-l',
|
|
67
|
+
...args
|
|
68
|
+
], opts);
|
|
69
|
+
const result = [];
|
|
70
|
+
for await (const line of (0, _utils.streamLines)(task, 'stdout')){
|
|
71
|
+
result.push(line.replace(/^[ *] /, ''));
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
static async listTags(args = [], opts) {
|
|
76
|
+
const task = this.tag([
|
|
77
|
+
'-l',
|
|
78
|
+
...args
|
|
79
|
+
], opts);
|
|
80
|
+
const result = [];
|
|
81
|
+
for await (const line of (0, _utils.streamLines)(task, 'stdout')){
|
|
82
|
+
result.push(line);
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, _services.lazyInject)(_tasks.TaskManager)
|
|
89
|
+
], Git, "manager", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
(0, _services.lazyInject)(_services.Logger)
|
|
92
|
+
], Git, "logger", void 0);
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["git.js"],"sourcesContent":["import { SpawnTask, SpawnTaskOptions, TaskContext, TaskManager } from '@jujulego/tasks';\n\nimport { lazyInject, Logger } from './services';\nimport { streamLines } from './utils';\n\n// Types\nexport interface GitContext extends TaskContext {\n command: string;\n}\n\n// Git commands\nexport class Git {\n // Services\n @lazyInject(TaskManager)\n static readonly manager: TaskManager<GitContext>;\n\n @lazyInject(Logger)\n static readonly logger: Logger;\n\n // commons\n static command(cmd: string, args: string[], options: SpawnTaskOptions = {}): SpawnTask<GitContext> {\n const opts = { logger: this.logger, ...options };\n\n // Create task\n const task = new SpawnTask('git', [cmd, ...args], { command: cmd }, opts);\n task.subscribe('stream', ({ data }) => opts.logger.debug(data.toString('utf-8')));\n\n this.manager.add(task);\n\n return task;\n }\n\n // commands\n static branch(args: string[], options?: SpawnTaskOptions): SpawnTask<GitContext> {\n return this.command('branch', args, options);\n }\n\n static diff(args: string[], options?: SpawnTaskOptions): SpawnTask<GitContext> {\n return this.command('diff', args, options);\n }\n\n static tag(args: string[], options?: SpawnTaskOptions): SpawnTask<GitContext> {\n return this.command('tag', args, options);\n }\n\n // high level\n static isAffected(reference: string, args: string[] = [], opts?: SpawnTaskOptions): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const task = this.diff(['--quiet', reference, ...args], opts);\n\n task.subscribe('status.done', () => resolve(true));\n task.subscribe('status.failed', () => {\n if (task.exitCode) {\n resolve(false);\n } else {\n reject(new Error(`Task ${task.name} failed`));\n }\n });\n });\n }\n\n static async listBranches(args: string[] = [], opts?: SpawnTaskOptions): Promise<string[]> {\n const task = this.branch(['-l', ...args], opts);\n const result: string[] = [];\n\n for await (const line of streamLines(task, 'stdout')) {\n result.push(line.replace(/^[ *] /, ''));\n }\n\n return result;\n }\n\n static async listTags(args: string[] = [], opts?: SpawnTaskOptions): Promise<string[]> {\n const task = this.tag(['-l', ...args], opts);\n const result: string[] = [];\n\n for await (const line of streamLines(task, 'stdout')) {\n result.push(line);\n }\n\n return result;\n }\n}\n"],"names":["Git","command","cmd","args","options","opts","logger","task","SpawnTask","subscribe","data","debug","toString","manager","add","branch","diff","tag","isAffected","reference","Promise","resolve","reject","exitCode","Error","name","listBranches","result","line","streamLines","push","replace","listTags","lazyInject","TaskManager","Logger"],"mappings":"AAAA;;;;+BAWaA;;aAAAA;;uBAXyD;0BAEnC;uBACP;;;;;;;AAQrB,MAAMA;IAQX,UAAU;IACV,OAAOC,QAAQC,GAAW,EAAEC,IAAc,EAAEC,UAA4B,CAAC,CAAC,EAAyB;QACjG,MAAMC,OAAO;YAAEC,QAAQ,IAAI,CAACA,MAAM;YAAE,GAAGF,OAAO;QAAC;QAE/C,cAAc;QACd,MAAMG,OAAO,IAAIC,gBAAS,CAAC,OAAO;YAACN;eAAQC;SAAK,EAAE;YAAEF,SAASC;QAAI,GAAGG;QACpEE,KAAKE,SAAS,CAAC,UAAU,CAAC,EAAEC,KAAI,EAAE,GAAKL,KAAKC,MAAM,CAACK,KAAK,CAACD,KAAKE,QAAQ,CAAC;QAEvE,IAAI,CAACC,OAAO,CAACC,GAAG,CAACP;QAEjB,OAAOA;IACT;IAEA,WAAW;IACX,OAAOQ,OAAOZ,IAAc,EAAEC,OAA0B,EAAyB;QAC/E,OAAO,IAAI,CAACH,OAAO,CAAC,UAAUE,MAAMC;IACtC;IAEA,OAAOY,KAAKb,IAAc,EAAEC,OAA0B,EAAyB;QAC7E,OAAO,IAAI,CAACH,OAAO,CAAC,QAAQE,MAAMC;IACpC;IAEA,OAAOa,IAAId,IAAc,EAAEC,OAA0B,EAAyB;QAC5E,OAAO,IAAI,CAACH,OAAO,CAAC,OAAOE,MAAMC;IACnC;IAEA,aAAa;IACb,OAAOc,WAAWC,SAAiB,EAAEhB,OAAiB,EAAE,EAAEE,IAAuB,EAAoB;QACnG,OAAO,IAAIe,QAAQ,CAACC,SAASC,SAAW;YACtC,MAAMf,OAAO,IAAI,CAACS,IAAI,CAAC;gBAAC;gBAAWG;mBAAchB;aAAK,EAAEE;YAExDE,KAAKE,SAAS,CAAC,eAAe,IAAMY,QAAQ,IAAI;YAChDd,KAAKE,SAAS,CAAC,iBAAiB,IAAM;gBACpC,IAAIF,KAAKgB,QAAQ,EAAE;oBACjBF,QAAQ,KAAK;gBACf,OAAO;oBACLC,OAAO,IAAIE,MAAM,CAAC,KAAK,EAAEjB,KAAKkB,IAAI,CAAC,OAAO,CAAC;gBAC7C,CAAC;YACH;QACF;IACF;IAEA,aAAaC,aAAavB,OAAiB,EAAE,EAAEE,IAAuB,EAAqB;QACzF,MAAME,OAAO,IAAI,CAACQ,MAAM,CAAC;YAAC;eAASZ;SAAK,EAAEE;QAC1C,MAAMsB,SAAmB,EAAE;QAE3B,WAAW,MAAMC,QAAQC,IAAAA,kBAAW,EAACtB,MAAM,UAAW;YACpDoB,OAAOG,IAAI,CAACF,KAAKG,OAAO,CAAC,UAAU;QACrC;QAEA,OAAOJ;IACT;IAEA,aAAaK,SAAS7B,OAAiB,EAAE,EAAEE,IAAuB,EAAqB;QACrF,MAAME,OAAO,IAAI,CAACU,GAAG,CAAC;YAAC;eAASd;SAAK,EAAEE;QACvC,MAAMsB,SAAmB,EAAE;QAE3B,WAAW,MAAMC,QAAQC,IAAAA,kBAAW,EAACtB,MAAM,UAAW;YACpDoB,OAAOG,IAAI,CAACF;QACd;QAEA,OAAOD;IACT;AACF;;IArEGM,IAAAA,oBAAU,EAACC,kBAAW;GAFZlC;;IAKViC,IAAAA,oBAAU,EAACE,gBAAM;GALPnC","file":"git.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
export * from './filters';
|
|
2
|
+
export * from './git';
|
|
3
|
+
export * from './modifiers';
|
|
4
|
+
export * from './project';
|
|
5
|
+
export * from './services';
|
|
6
|
+
export * from './ui';
|
|
7
|
+
export * from './utils';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC","file":"index.d.ts","sourcesContent":["export * from './filters';\nexport * from './git';\nexport * from './modifiers';\nexport * from './project';\nexport * from './services';\nexport * from './ui';\nexport * from './utils';\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "EachCommand", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _each.EachCommand;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "InfoCommand", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _info.InfoCommand;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "ListCommand", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _list.ListCommand;
|
|
22
|
-
}
|
|
3
|
+
value: true
|
|
23
4
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
5
|
+
_exportStar(require("./filters"), exports);
|
|
6
|
+
_exportStar(require("./git"), exports);
|
|
7
|
+
_exportStar(require("./modifiers"), exports);
|
|
8
|
+
_exportStar(require("./project"), exports);
|
|
9
|
+
_exportStar(require("./services"), exports);
|
|
10
|
+
_exportStar(require("./ui"), exports);
|
|
11
|
+
_exportStar(require("./utils"), exports);
|
|
12
|
+
function _exportStar(from, to) {
|
|
13
|
+
Object.keys(from).forEach(function(k) {
|
|
14
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function() {
|
|
17
|
+
return from[k];
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
return from;
|
|
22
|
+
}
|
|
36
23
|
|
|
37
|
-
var _run = require("./commands/run.command");
|
|
38
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.
|
|
1
|
+
{"version":3,"sources":["index.js"],"sourcesContent":["export * from './filters';\nexport * from './git';\nexport * from './modifiers';\nexport * from './project';\nexport * from './services';\nexport * from './ui';\nexport * from './utils';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA;oBACA;oBACA;oBACA;oBACA","file":"index.js"}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["main.ts"],"names":[],"mappings":"","file":"main.d.ts","sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["main.ts"],"names":[],"mappings":"","file":"main.d.ts","sourcesContent":["import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { globalConfig } from './modifiers';\nimport pkg from '../package.json';\n\n// Bootstrap\n(async () => {\n // Setup yargs\n const parser = yargs(hideBin(process.argv))\n .scriptName('jill')\n .completion('completion', 'Generate bash completion script')\n .help('help', 'Show help for a command')\n .version('version', 'Show version', pkg.version)\n .wrap(yargs.terminalWidth());\n\n // Middlewares\n globalConfig(parser);\n\n // Parse !\n await parser\n .commandDir('commands', {\n visit: obj => obj.default\n })\n .demandCommand()\n .recommendCommands()\n .strict()\n .parse();\n})();\n"]}
|
package/dist/main.js
CHANGED
|
@@ -1,55 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
const _yargs = /*#__PURE__*/ _interopRequireDefault(require("yargs"));
|
|
6
|
+
const _helpers = require("yargs/helpers");
|
|
7
|
+
const _modifiers = require("./modifiers");
|
|
8
|
+
const _packageJson = /*#__PURE__*/ _interopRequireDefault(require("../package.json"));
|
|
9
|
+
function _interopRequireDefault(obj) {
|
|
10
|
+
return obj && obj.__esModule ? obj : {
|
|
11
|
+
default: obj
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
// Bootstrap
|
|
15
|
+
(async ()=>{
|
|
16
|
+
// Setup yargs
|
|
17
|
+
const parser = (0, _yargs.default)((0, _helpers.hideBin)(process.argv)).scriptName('jill').completion('completion', 'Generate bash completion script').help('help', 'Show help for a command').version('version', 'Show version', _packageJson.default.version).wrap(_yargs.default.terminalWidth());
|
|
18
|
+
// Middlewares
|
|
19
|
+
(0, _modifiers.globalConfig)(parser);
|
|
20
|
+
// Parse !
|
|
21
|
+
await parser.commandDir('commands', {
|
|
22
|
+
visit: (obj)=>obj.default
|
|
23
|
+
}).demandCommand().recommendCommands().strict().parse();
|
|
24
|
+
})();
|
|
2
25
|
|
|
3
|
-
var _jillCommon = require("@jujulego/jill-common");
|
|
4
|
-
|
|
5
|
-
var _core = require("./core.plugin");
|
|
6
|
-
|
|
7
|
-
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
8
|
-
function adopt(value) {
|
|
9
|
-
return value instanceof P ? value : new P(function (resolve) {
|
|
10
|
-
resolve(value);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
-
function fulfilled(value) {
|
|
16
|
-
try {
|
|
17
|
-
step(generator.next(value));
|
|
18
|
-
} catch (e) {
|
|
19
|
-
reject(e);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function rejected(value) {
|
|
24
|
-
try {
|
|
25
|
-
step(generator["throw"](value));
|
|
26
|
-
} catch (e) {
|
|
27
|
-
reject(e);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function step(result) {
|
|
32
|
-
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
// Class
|
|
40
|
-
class JillApp extends _jillCommon.Application {
|
|
41
|
-
constructor() {
|
|
42
|
-
super(...arguments); // Attributes
|
|
43
|
-
|
|
44
|
-
this.name = 'jill';
|
|
45
|
-
this.corePlugin = _core.corePlugin;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
} // Bootstrap
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
-
const app = new JillApp();
|
|
53
|
-
yield app.parse();
|
|
54
|
-
}))();
|
|
55
26
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["main.
|
|
1
|
+
{"version":3,"sources":["main.js"],"sourcesContent":["import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { globalConfig } from './modifiers';\nimport pkg from '../package.json';\n\n// Bootstrap\n(async () => {\n // Setup yargs\n const parser = yargs(hideBin(process.argv))\n .scriptName('jill')\n .completion('completion', 'Generate bash completion script')\n .help('help', 'Show help for a command')\n .version('version', 'Show version', pkg.version)\n .wrap(yargs.terminalWidth());\n\n // Middlewares\n globalConfig(parser);\n\n // Parse !\n await parser\n .commandDir('commands', {\n visit: obj => obj.default\n })\n .demandCommand()\n .recommendCommands()\n .strict()\n .parse();\n})();\n"],"names":["parser","yargs","hideBin","process","argv","scriptName","completion","help","version","pkg","wrap","terminalWidth","globalConfig","commandDir","visit","obj","default","demandCommand","recommendCommands","strict","parse"],"mappings":"AAAA;;;;4DAAkB;yBACM;2BAEK;kEACb;;;;;;AAEhB,YAAY;AACX,CAAA,UAAY;IACX,cAAc;IACd,MAAMA,SAASC,IAAAA,cAAK,EAACC,IAAAA,gBAAO,EAACC,QAAQC,IAAI,GACtCC,UAAU,CAAC,QACXC,UAAU,CAAC,cAAc,mCACzBC,IAAI,CAAC,QAAQ,2BACbC,OAAO,CAAC,WAAW,gBAAgBC,oBAAG,CAACD,OAAO,EAC9CE,IAAI,CAACT,cAAK,CAACU,aAAa;IAE3B,cAAc;IACdC,IAAAA,uBAAY,EAACZ;IAEb,UAAU;IACV,MAAMA,OACHa,UAAU,CAAC,YAAY;QACtBC,OAAOC,CAAAA,MAAOA,IAAIC,OAAO;IAC3B,GACCC,aAAa,GACbC,iBAAiB,GACjBC,MAAM,GACNC,KAAK;AACV,CAAA","file":"main.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/global-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAK7B,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;;;;GAe7C","file":"global-config.d.ts","sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, GLOBAL_CONFIG } from '../services';\n\n// Middleware\nexport function globalConfig<T>(yargs: Argv<T>) {\n return yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n })\n .middleware((config) => {\n container.bind(GLOBAL_CONFIG).toConstantValue(config);\n });\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "globalConfig", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>globalConfig
|
|
8
|
+
});
|
|
9
|
+
const _services = require("../services");
|
|
10
|
+
function globalConfig(yargs) {
|
|
11
|
+
return yargs.option('verbose', {
|
|
12
|
+
alias: 'v',
|
|
13
|
+
type: 'count',
|
|
14
|
+
description: 'Set verbosity level'
|
|
15
|
+
}).option('jobs', {
|
|
16
|
+
alias: 'j',
|
|
17
|
+
type: 'number',
|
|
18
|
+
description: 'Set maximum parallel job number'
|
|
19
|
+
}).middleware((config)=>{
|
|
20
|
+
_services.container.bind(_services.GLOBAL_CONFIG).toConstantValue(config);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=global-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/global-config.js"],"sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, GLOBAL_CONFIG } from '../services';\n\n// Middleware\nexport function globalConfig<T>(yargs: Argv<T>) {\n return yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n })\n .middleware((config) => {\n container.bind(GLOBAL_CONFIG).toConstantValue(config);\n });\n}\n"],"names":["globalConfig","yargs","option","alias","type","description","middleware","config","container","bind","GLOBAL_CONFIG","toConstantValue"],"mappings":"AAAA;;;;+BAKgBA;;aAAAA;;0BAHyB;AAGlC,SAASA,aAAgBC,KAAc,EAAE;IAC9C,OAAOA,MACJC,MAAM,CAAC,WAAW;QACjBC,OAAO;QACPC,MAAM;QACNC,aAAa;IACf,GACCH,MAAM,CAAC,QAAQ;QACdC,OAAO;QACPC,MAAM;QACNC,aAAa;IACf,GACCC,UAAU,CAAC,CAACC,SAAW;QACtBC,mBAAS,CAACC,IAAI,CAACC,uBAAa,EAAEC,eAAe,CAACJ;IAChD;AACJ","file":"global-config.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC","file":"index.d.ts","sourcesContent":["export * from './load-project';\nexport * from './global-config';\nexport * from './setup-ink';\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_exportStar(require("./load-project"), exports);
|
|
6
|
+
_exportStar(require("./global-config"), exports);
|
|
7
|
+
_exportStar(require("./setup-ink"), exports);
|
|
8
|
+
function _exportStar(from, to) {
|
|
9
|
+
Object.keys(from).forEach(function(k) {
|
|
10
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return from[k];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
return from;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/index.js"],"sourcesContent":["export * from './load-project';\nexport * from './global-config';\nexport * from './setup-ink';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA","file":"index.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/load-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAGrD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;;;;GA6B5C","file":"load-project.d.ts","sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, CURRENT_PROJECT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\n\n// Middleware\nexport function loadProject<T>(yargs: Argv<T>) {\n return yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n })\n .middleware(async (args) => {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(CURRENT_PROJECT)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }));\n } finally {\n spinner.stop();\n }\n });\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "loadProject", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>loadProject
|
|
8
|
+
});
|
|
9
|
+
const _services = require("../services");
|
|
10
|
+
const _project = require("../project");
|
|
11
|
+
function loadProject(yargs) {
|
|
12
|
+
return yargs.option('project', {
|
|
13
|
+
alias: 'p',
|
|
14
|
+
type: 'string',
|
|
15
|
+
default: process.cwd(),
|
|
16
|
+
description: 'Project root directory'
|
|
17
|
+
}).option('package-manager', {
|
|
18
|
+
choices: [
|
|
19
|
+
'yarn',
|
|
20
|
+
'npm'
|
|
21
|
+
],
|
|
22
|
+
default: undefined,
|
|
23
|
+
type: 'string',
|
|
24
|
+
description: 'Force package manager'
|
|
25
|
+
}).middleware(async (args)=>{
|
|
26
|
+
const spinner = _services.container.get(_services.SpinnerService);
|
|
27
|
+
try {
|
|
28
|
+
spinner.spin('Loading project ...');
|
|
29
|
+
const root = args.project = await _project.Project.searchProjectRoot(args.project);
|
|
30
|
+
_services.container.bind(_services.CURRENT_PROJECT).toDynamicValue(()=>new _project.Project(root, {
|
|
31
|
+
packageManager: args['package-manager']
|
|
32
|
+
}));
|
|
33
|
+
} finally{
|
|
34
|
+
spinner.stop();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=load-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/load-project.js"],"sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, CURRENT_PROJECT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\n\n// Middleware\nexport function loadProject<T>(yargs: Argv<T>) {\n return yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n })\n .middleware(async (args) => {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(CURRENT_PROJECT)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }));\n } finally {\n spinner.stop();\n }\n });\n}\n"],"names":["loadProject","yargs","option","alias","type","default","process","cwd","description","choices","undefined","middleware","args","spinner","container","get","SpinnerService","spin","root","project","Project","searchProjectRoot","bind","CURRENT_PROJECT","toDynamicValue","packageManager","stop"],"mappings":"AAAA;;;;+BAMgBA;;aAAAA;;0BAJ2C;yBACnB;AAGjC,SAASA,YAAeC,KAAc,EAAE;IAC7C,OAAOA,MACJC,MAAM,CAAC,WAAW;QACjBC,OAAO;QACPC,MAAM;QACNC,SAASC,QAAQC,GAAG;QACpBC,aAAa;IACf,GACCN,MAAM,CAAC,mBAAmB;QACzBO,SAAS;YAAC;YAAQ;SAAM;QACxBJ,SAASK;QACTN,MAAM;QACNI,aAAa;IACf,GACCG,UAAU,CAAC,OAAOC,OAAS;QAC1B,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAE5C,IAAI;YACFH,QAAQI,IAAI,CAAC;YACb,MAAMC,OAAON,KAAKO,OAAO,GAAG,MAAMC,gBAAO,CAACC,iBAAiB,CAACT,KAAKO,OAAO;YAExEL,mBAAS,CAACQ,IAAI,CAACC,yBAAe,EAC3BC,cAAc,CAAC,IAAM,IAAIJ,gBAAO,CAACF,MAAM;oBACtCO,gBAAgBb,IAAI,CAAC,kBAAkB;gBACzC;QACJ,SAAU;YACRC,QAAQa,IAAI;QACd;IACF;AACJ","file":"load-project.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/setup-ink.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAO7B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAKzC","file":"setup-ink.d.ts","sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, INK_APP } from '../services';\nimport { Layout } from '../ui';\nimport { render } from 'ink';\n\n// Middleware\nexport function setupInk<T>(yargs: Argv<T>) {\n return yargs.middleware(async () => {\n container.bind(INK_APP)\n .toConstantValue(render(<Layout />));\n });\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "setupInk", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>setupInk
|
|
8
|
+
});
|
|
9
|
+
const _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
const _services = require("../services");
|
|
11
|
+
const _ui = require("../ui");
|
|
12
|
+
const _ink = require("ink");
|
|
13
|
+
function setupInk(yargs) {
|
|
14
|
+
return yargs.middleware(async ()=>{
|
|
15
|
+
_services.container.bind(_services.INK_APP).toConstantValue((0, _ink.render)(/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ui.Layout, {})));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=setup-ink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["modifiers/setup-ink.js"],"sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, INK_APP } from '../services';\nimport { Layout } from '../ui';\nimport { render } from 'ink';\n\n// Middleware\nexport function setupInk<T>(yargs: Argv<T>) {\n return yargs.middleware(async () => {\n container.bind(INK_APP)\n .toConstantValue(render(<Layout />));\n });\n}\n"],"names":["setupInk","yargs","middleware","container","bind","INK_APP","toConstantValue","render","Layout"],"mappings":"AAAA;;;;+BAOgBA;;aAAAA;;;0BALmB;oBACZ;qBACA;AAGhB,SAASA,SAAYC,KAAc,EAAE;IAC1C,OAAOA,MAAMC,UAAU,CAAC,UAAY;QAClCC,mBAAS,CAACC,IAAI,CAACC,iBAAO,EACnBC,eAAe,CAACC,IAAAA,WAAM,gBAAC,qBAACC,UAAM;IACnC;AACF","file":"setup-ink.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["project/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC","file":"index.d.ts","sourcesContent":["export * from './project';\nexport * from './workspace';\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_exportStar(require("./project"), exports);
|
|
6
|
+
_exportStar(require("./workspace"), exports);
|
|
7
|
+
function _exportStar(from, to) {
|
|
8
|
+
Object.keys(from).forEach(function(k) {
|
|
9
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function() {
|
|
12
|
+
return from[k];
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
return from;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["project/index.js"],"sourcesContent":["export * from './project';\nexport * from './workspace';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA","file":"index.js"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Workspace } from './workspace';
|
|
2
|
+
export declare type PackageManager = 'npm' | 'yarn';
|
|
3
|
+
export interface ProjectOptions {
|
|
4
|
+
packageManager?: PackageManager | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare class Project {
|
|
7
|
+
private readonly _root;
|
|
8
|
+
private _mainWorkspace?;
|
|
9
|
+
private readonly _names;
|
|
10
|
+
private readonly _workspaces;
|
|
11
|
+
private _packageManager?;
|
|
12
|
+
private _isFullyLoaded;
|
|
13
|
+
private _lock;
|
|
14
|
+
private readonly _logger;
|
|
15
|
+
constructor(_root: string, opts?: ProjectOptions);
|
|
16
|
+
static searchProjectRoot(dir: string): Promise<string>;
|
|
17
|
+
private _loadManifest;
|
|
18
|
+
private _loadWorkspace;
|
|
19
|
+
packageManager(): Promise<PackageManager>;
|
|
20
|
+
mainWorkspace(): Promise<Workspace>;
|
|
21
|
+
currentWorkspace(cwd?: string): Promise<Workspace | null>;
|
|
22
|
+
workspaces(): AsyncGenerator<Workspace, void>;
|
|
23
|
+
workspace(name?: string): Promise<Workspace | null>;
|
|
24
|
+
get root(): string;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["project/project.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,oBAAY,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAC5C,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC7C;AAGD,qBAAa,OAAO;IAehB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAbxB,OAAO,CAAC,cAAc,CAAC,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,KAAK,CAAmB;IAGhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAId,KAAK,EAAE,MAAM,EAC9B,IAAI,GAAE,cAAmB;WASd,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAkC9C,aAAa;YAYb,cAAc;IAgBtB,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;IAmBzC,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;IAWnC,gBAAgB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAe/D,UAAU,IAAI,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC;IAqC9C,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA2BzD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF","file":"project.d.ts","sourcesContent":["import AsyncLock from 'async-lock';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport normalize, { Package } from 'normalize-package-data';\nimport glob from 'tiny-glob';\n\nimport { container, lazyInject, Logger } from '../services';\nimport { Workspace } from './workspace';\n\n// Types\nexport type PackageManager = 'npm' | 'yarn';\nexport interface ProjectOptions {\n packageManager?: PackageManager | undefined;\n}\n\n// Class\nexport class Project {\n // Attributes\n private _mainWorkspace?: Workspace;\n private readonly _names = new Map<string, Workspace>();\n private readonly _workspaces = new Map<string, Workspace>();\n\n private _packageManager?: PackageManager;\n private _isFullyLoaded = false;\n private _lock = new AsyncLock();\n\n @lazyInject(Logger)\n private readonly _logger: Logger;\n\n // Constructor\n constructor(\n private readonly _root: string,\n opts: ProjectOptions = {}\n ) {\n if (opts.packageManager) {\n this._logger.debug(`Forced use of ${opts.packageManager} in ${path.relative(process.cwd(), this.root) || '.'}`);\n this._packageManager = opts.packageManager;\n }\n }\n\n // Statics\n static async searchProjectRoot(dir: string): Promise<string> {\n const logger = container.get(Logger);\n\n // Will process directories from dir to root\n let found = false;\n let last = dir;\n dir = path.resolve(dir);\n\n do {\n const files = await fs.readdir(dir);\n\n if (files.includes('package.json')) {\n last = dir;\n found = true;\n }\n\n if (['package-lock.json', 'yarn.lock'].some(lock => files.includes(lock))) {\n logger.debug(`Project root found at ${path.relative(process.cwd(), dir) || '.'}`);\n return dir;\n }\n\n dir = path.dirname(dir);\n } while (dir !== path.dirname(dir));\n\n if (found) {\n logger.debug(`Project root found at ${path.relative(process.cwd(), last) || '.'}`);\n } else {\n logger.debug(`Project root not found, keeping ${path.relative(process.cwd(), last) || '.'}`);\n }\n\n return last;\n }\n\n // Methods\n private async _loadManifest(dir: string): Promise<Package> {\n const file = path.resolve(this.root, dir, 'package.json');\n const log = this._logger.child({ label: path.relative(this.root, path.dirname(file)) || '.' });\n log.verbose('Loading package.json ...');\n\n const data = await fs.readFile(file, 'utf-8');\n const mnf = JSON.parse(data);\n normalize(mnf, (msg) => log.verbose(msg));\n\n return mnf;\n }\n\n private async _loadWorkspace(dir: string): Promise<Workspace> {\n return await this._lock.acquire('workspaces', async () => {\n let wks = this._workspaces.get(dir);\n\n if (!wks) {\n const manifest = await this._loadManifest(dir);\n wks = new Workspace(dir, manifest, this);\n\n this._workspaces.set(dir, wks);\n this._names.set(wks.name, wks);\n }\n\n return wks;\n });\n }\n\n async packageManager(): Promise<PackageManager> {\n if (!this._packageManager) {\n const files = await fs.readdir(this.root);\n\n if (files.includes('yarn.lock')) {\n this._logger.debug(`Detected yarn in ${path.relative(process.cwd(), this.root) || '.'}`);\n this._packageManager = 'yarn';\n } else if (files.includes('package-lock.json')) {\n this._logger.debug(`Detected npm in ${path.relative(process.cwd(), this.root) || '.'}`);\n this._packageManager = 'npm';\n } else {\n this._logger.debug(`No package manager recognized in ${path.relative(process.cwd(), this.root) || '.'}, defaults to npm`);\n this._packageManager = 'npm';\n }\n }\n\n return this._packageManager;\n }\n\n async mainWorkspace(): Promise<Workspace> {\n if (!this._mainWorkspace) {\n const manifest = await this._loadManifest('.');\n this._mainWorkspace = new Workspace('.', manifest, this);\n\n this._names.set(this._mainWorkspace.name, this._mainWorkspace);\n }\n\n return this._mainWorkspace;\n }\n\n async currentWorkspace(cwd = process.cwd()): Promise<Workspace | null> {\n let workspace: Workspace | null = null;\n cwd = path.normalize(cwd);\n\n for await (const wks of this.workspaces()) {\n if (cwd.startsWith(path.normalize(wks.cwd))) {\n workspace = wks;\n\n if (wks.cwd !== this.root) return wks;\n }\n }\n\n return workspace;\n }\n\n async* workspaces(): AsyncGenerator<Workspace, void> {\n const main = await this.mainWorkspace();\n yield main;\n\n if (this._isFullyLoaded) {\n for (const wks of this._names.values()) {\n if (wks.name !== main.name) yield wks;\n }\n } else {\n // Load child workspaces\n const { workspaces = [] } = main.manifest;\n\n for (const pattern of workspaces) {\n for (const dir of await glob(pattern, { cwd: this.root })) {\n try {\n // Check if dir is a directory exists\n const file = path.resolve(this.root, dir);\n const stat = await fs.stat(file);\n\n if (stat.isDirectory()) {\n yield await this._loadWorkspace(dir);\n }\n\n } catch (error) {\n if (error.code === 'ENOENT') {\n continue;\n }\n\n throw error;\n }\n }\n }\n\n this._isFullyLoaded = true;\n }\n }\n\n async workspace(name?: string): Promise<Workspace | null> {\n // With current directory\n if (!name) {\n const dir = path.relative(this.root, process.cwd());\n return this._loadWorkspace(dir);\n }\n\n // Try name index\n const wks = this._names.get(name);\n if (wks) return wks;\n\n if (this._isFullyLoaded) {\n return null;\n }\n\n // Load workspaces\n for await (const ws of this.workspaces()) {\n if (ws.name === name) {\n return ws;\n }\n }\n\n this._isFullyLoaded = true;\n return null;\n }\n\n // Properties\n get root(): string {\n return path.resolve(this._root);\n }\n}\n"]}
|