@git.zone/cli 2.13.13 → 2.14.0
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/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/gitzone.cli.js +46 -35
- package/dist_ts/helpers.climode.d.ts +22 -0
- package/dist_ts/helpers.climode.js +158 -0
- package/dist_ts/helpers.smartconfig.d.ts +11 -0
- package/dist_ts/helpers.smartconfig.js +139 -0
- package/dist_ts/mod_commit/index.d.ts +2 -0
- package/dist_ts/mod_commit/index.js +204 -92
- package/dist_ts/mod_config/index.d.ts +7 -2
- package/dist_ts/mod_config/index.js +390 -176
- package/dist_ts/mod_format/classes.formatcontext.d.ts +11 -2
- package/dist_ts/mod_format/classes.formatcontext.js +14 -4
- package/dist_ts/mod_format/formatters/packagejson.formatter.js +1 -67
- package/dist_ts/mod_format/formatters/smartconfig.formatter.d.ts +2 -7
- package/dist_ts/mod_format/formatters/smartconfig.formatter.js +57 -93
- package/dist_ts/mod_format/index.d.ts +4 -1
- package/dist_ts/mod_format/index.js +235 -67
- package/dist_ts/mod_format/mod.plugins.d.ts +1 -2
- package/dist_ts/mod_format/mod.plugins.js +2 -3
- package/dist_ts/mod_services/index.d.ts +2 -0
- package/dist_ts/mod_services/index.js +366 -168
- package/dist_ts/mod_standard/index.d.ts +3 -1
- package/dist_ts/mod_standard/index.js +159 -59
- package/package.json +1 -1
- package/readme.hints.md +25 -32
- package/readme.md +87 -65
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +50 -38
- package/ts/helpers.climode.ts +212 -0
- package/ts/helpers.smartconfig.ts +192 -0
- package/ts/mod_commit/index.ts +325 -98
- package/ts/mod_config/index.ts +490 -182
- package/ts/mod_format/classes.formatcontext.ts +20 -3
- package/ts/mod_format/formatters/packagejson.formatter.ts +0 -91
- package/ts/mod_format/formatters/smartconfig.formatter.ts +67 -94
- package/ts/mod_format/index.ts +294 -81
- package/ts/mod_format/mod.plugins.ts +0 -2
- package/ts/mod_services/index.ts +550 -183
- package/ts/mod_standard/index.ts +191 -58
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '2.
|
|
6
|
+
version: '2.14.0',
|
|
7
7
|
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
|
package/dist_ts/gitzone.cli.js
CHANGED
|
@@ -1,61 +1,72 @@
|
|
|
1
|
-
import * as plugins from
|
|
2
|
-
import * as paths from
|
|
3
|
-
import { GitzoneConfig } from
|
|
1
|
+
import * as plugins from "./plugins.js";
|
|
2
|
+
import * as paths from "./paths.js";
|
|
3
|
+
import { GitzoneConfig } from "./classes.gitzoneconfig.js";
|
|
4
|
+
import { getRawCliMode } from "./helpers.climode.js";
|
|
4
5
|
const gitzoneSmartcli = new plugins.smartcli.Smartcli();
|
|
5
6
|
export let run = async () => {
|
|
6
7
|
const done = plugins.smartpromise.defer();
|
|
8
|
+
const rawCliMode = await getRawCliMode();
|
|
7
9
|
// get packageInfo
|
|
8
10
|
const projectInfo = new plugins.projectinfo.ProjectInfo(paths.packageDir);
|
|
9
11
|
// check for updates
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
if (rawCliMode.checkUpdates) {
|
|
13
|
+
const smartupdateInstance = new plugins.smartupdate.SmartUpdate();
|
|
14
|
+
await smartupdateInstance.check("gitzone", projectInfo.npm.version, "http://gitzone.gitlab.io/gitzone/changelog.html");
|
|
15
|
+
}
|
|
16
|
+
if (rawCliMode.output === "human") {
|
|
17
|
+
console.log("---------------------------------------------");
|
|
18
|
+
}
|
|
13
19
|
gitzoneSmartcli.addVersion(projectInfo.npm.version);
|
|
14
20
|
// ======> Standard task <======
|
|
15
21
|
/**
|
|
16
22
|
* standard task
|
|
17
23
|
*/
|
|
18
24
|
gitzoneSmartcli.standardCommand().subscribe(async (argvArg) => {
|
|
19
|
-
const modStandard = await import(
|
|
20
|
-
await modStandard.run();
|
|
25
|
+
const modStandard = await import("./mod_standard/index.js");
|
|
26
|
+
await modStandard.run(argvArg);
|
|
27
|
+
});
|
|
28
|
+
gitzoneSmartcli.addCommand("help").subscribe(async (argvArg) => {
|
|
29
|
+
const modStandard = await import("./mod_standard/index.js");
|
|
30
|
+
await modStandard.run(argvArg);
|
|
21
31
|
});
|
|
22
32
|
// ======> Specific tasks <======
|
|
23
33
|
/**
|
|
24
34
|
* commit something
|
|
25
35
|
*/
|
|
26
|
-
gitzoneSmartcli.addCommand(
|
|
27
|
-
const modCommit = await import(
|
|
36
|
+
gitzoneSmartcli.addCommand("commit").subscribe(async (argvArg) => {
|
|
37
|
+
const modCommit = await import("./mod_commit/index.js");
|
|
28
38
|
await modCommit.run(argvArg);
|
|
29
39
|
});
|
|
30
40
|
/**
|
|
31
41
|
* deprecate a package on npm
|
|
32
42
|
*/
|
|
33
|
-
gitzoneSmartcli.addCommand(
|
|
34
|
-
const modDeprecate = await import(
|
|
43
|
+
gitzoneSmartcli.addCommand("deprecate").subscribe(async (argvArg) => {
|
|
44
|
+
const modDeprecate = await import("./mod_deprecate/index.js");
|
|
35
45
|
await modDeprecate.run();
|
|
36
46
|
});
|
|
37
47
|
/**
|
|
38
48
|
* docker
|
|
39
49
|
*/
|
|
40
|
-
gitzoneSmartcli.addCommand(
|
|
41
|
-
const modDocker = await import(
|
|
50
|
+
gitzoneSmartcli.addCommand("docker").subscribe(async (argvArg) => {
|
|
51
|
+
const modDocker = await import("./mod_docker/index.js");
|
|
42
52
|
await modDocker.run(argvArg);
|
|
43
53
|
});
|
|
44
54
|
/**
|
|
45
55
|
* Update all files that comply with the gitzone standard
|
|
46
56
|
*/
|
|
47
|
-
gitzoneSmartcli.addCommand(
|
|
57
|
+
gitzoneSmartcli.addCommand("format").subscribe(async (argvArg) => {
|
|
48
58
|
const config = GitzoneConfig.fromCwd();
|
|
49
|
-
const modFormat = await import(
|
|
59
|
+
const modFormat = await import("./mod_format/index.js");
|
|
50
60
|
// Handle format with options
|
|
51
61
|
// Default is dry-mode, use --write/-w to apply changes
|
|
52
62
|
await modFormat.run({
|
|
63
|
+
...argvArg,
|
|
53
64
|
write: argvArg.write || argvArg.w,
|
|
54
|
-
dryRun: argvArg[
|
|
65
|
+
dryRun: argvArg["dry-run"],
|
|
55
66
|
yes: argvArg.yes,
|
|
56
|
-
planOnly: argvArg[
|
|
57
|
-
savePlan: argvArg[
|
|
58
|
-
fromPlan: argvArg[
|
|
67
|
+
planOnly: argvArg["plan-only"],
|
|
68
|
+
savePlan: argvArg["save-plan"],
|
|
69
|
+
fromPlan: argvArg["from-plan"],
|
|
59
70
|
detailed: argvArg.detailed,
|
|
60
71
|
interactive: argvArg.interactive !== false,
|
|
61
72
|
verbose: argvArg.verbose,
|
|
@@ -65,52 +76,52 @@ export let run = async () => {
|
|
|
65
76
|
/**
|
|
66
77
|
* run meta commands
|
|
67
78
|
*/
|
|
68
|
-
gitzoneSmartcli.addCommand(
|
|
79
|
+
gitzoneSmartcli.addCommand("meta").subscribe(async (argvArg) => {
|
|
69
80
|
const config = GitzoneConfig.fromCwd();
|
|
70
|
-
const modMeta = await import(
|
|
81
|
+
const modMeta = await import("./mod_meta/index.js");
|
|
71
82
|
modMeta.run(argvArg);
|
|
72
83
|
});
|
|
73
84
|
/**
|
|
74
85
|
* open assets
|
|
75
86
|
*/
|
|
76
|
-
gitzoneSmartcli.addCommand(
|
|
77
|
-
const modOpen = await import(
|
|
87
|
+
gitzoneSmartcli.addCommand("open").subscribe(async (argvArg) => {
|
|
88
|
+
const modOpen = await import("./mod_open/index.js");
|
|
78
89
|
modOpen.run(argvArg);
|
|
79
90
|
});
|
|
80
91
|
/**
|
|
81
92
|
* add a readme to a project
|
|
82
93
|
*/
|
|
83
|
-
gitzoneSmartcli.addCommand(
|
|
84
|
-
const modTemplate = await import(
|
|
94
|
+
gitzoneSmartcli.addCommand("template").subscribe(async (argvArg) => {
|
|
95
|
+
const modTemplate = await import("./mod_template/index.js");
|
|
85
96
|
modTemplate.run(argvArg);
|
|
86
97
|
});
|
|
87
98
|
/**
|
|
88
99
|
* start working on a project
|
|
89
100
|
*/
|
|
90
|
-
gitzoneSmartcli.addCommand(
|
|
91
|
-
const modTemplate = await import(
|
|
101
|
+
gitzoneSmartcli.addCommand("start").subscribe(async (argvArg) => {
|
|
102
|
+
const modTemplate = await import("./mod_start/index.js");
|
|
92
103
|
modTemplate.run(argvArg);
|
|
93
104
|
});
|
|
94
|
-
gitzoneSmartcli.addCommand(
|
|
95
|
-
const modHelpers = await import(
|
|
105
|
+
gitzoneSmartcli.addCommand("helpers").subscribe(async (argvArg) => {
|
|
106
|
+
const modHelpers = await import("./mod_helpers/index.js");
|
|
96
107
|
modHelpers.run(argvArg);
|
|
97
108
|
});
|
|
98
109
|
/**
|
|
99
110
|
* manage release configuration
|
|
100
111
|
*/
|
|
101
|
-
gitzoneSmartcli.addCommand(
|
|
102
|
-
const modConfig = await import(
|
|
112
|
+
gitzoneSmartcli.addCommand("config").subscribe(async (argvArg) => {
|
|
113
|
+
const modConfig = await import("./mod_config/index.js");
|
|
103
114
|
await modConfig.run(argvArg);
|
|
104
115
|
});
|
|
105
116
|
/**
|
|
106
117
|
* manage development services (MongoDB, S3/MinIO)
|
|
107
118
|
*/
|
|
108
|
-
gitzoneSmartcli.addCommand(
|
|
109
|
-
const modServices = await import(
|
|
119
|
+
gitzoneSmartcli.addCommand("services").subscribe(async (argvArg) => {
|
|
120
|
+
const modServices = await import("./mod_services/index.js");
|
|
110
121
|
await modServices.run(argvArg);
|
|
111
122
|
});
|
|
112
123
|
// start parsing of the cli
|
|
113
124
|
gitzoneSmartcli.startParse();
|
|
114
125
|
return await done.promise;
|
|
115
126
|
};
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0em9uZS5jbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9naXR6b25lLmNsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUV4RCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLGFBQWEsRUFBRSxDQUFDO0lBRXpDLGtCQUFrQjtJQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUxRSxvQkFBb0I7SUFDcEIsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLENBQzdCLFNBQVMsRUFDVCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFDdkIsaURBQWlELENBQ2xELENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXBELGdDQUFnQztJQUVoQzs7T0FFRztJQUNILGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQzVELE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQzdELE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsaUNBQWlDO0lBRWpDOztPQUVHO0lBQ0gsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxlQUFlLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDbEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5RCxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFeEQsNkJBQTZCO1FBQzdCLHVEQUF1RDtRQUN2RCxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDbEIsR0FBRyxPQUFPO1lBQ1YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLENBQUM7WUFDakMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDMUIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsS0FBSyxLQUFLO1lBQzFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUM3RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDN0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxlQUFlLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakUsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxlQUFlLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBRUgsZUFBZSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDMUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxlQUFlLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakUsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RCxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7SUFFSCwyQkFBMkI7SUFDM0IsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzVCLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type TCliOutputMode = "human" | "plain" | "json";
|
|
2
|
+
export interface ICliMode {
|
|
3
|
+
output: TCliOutputMode;
|
|
4
|
+
interactive: boolean;
|
|
5
|
+
json: boolean;
|
|
6
|
+
plain: boolean;
|
|
7
|
+
quiet: boolean;
|
|
8
|
+
yes: boolean;
|
|
9
|
+
help: boolean;
|
|
10
|
+
agent: boolean;
|
|
11
|
+
checkUpdates: boolean;
|
|
12
|
+
isTty: boolean;
|
|
13
|
+
command?: string;
|
|
14
|
+
}
|
|
15
|
+
type TArgSource = Record<string, any> & {
|
|
16
|
+
_?: string[];
|
|
17
|
+
};
|
|
18
|
+
export declare const getCliMode: (argvArg?: TArgSource) => Promise<ICliMode>;
|
|
19
|
+
export declare const getRawCliMode: () => Promise<ICliMode>;
|
|
20
|
+
export declare const printJson: (data: unknown) => void;
|
|
21
|
+
export declare const runWithSuppressedOutput: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { getCliConfigValue } from "./helpers.smartconfig.js";
|
|
2
|
+
const camelCase = (value) => {
|
|
3
|
+
return value.replace(/-([a-z])/g, (_match, group) => group.toUpperCase());
|
|
4
|
+
};
|
|
5
|
+
const getArgValue = (argvArg, key) => {
|
|
6
|
+
const keyVariants = [key, camelCase(key), key.replace(/-/g, "")];
|
|
7
|
+
for (const keyVariant of keyVariants) {
|
|
8
|
+
if (argvArg[keyVariant] !== undefined) {
|
|
9
|
+
return argvArg[keyVariant];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
};
|
|
14
|
+
const parseRawArgv = (argv) => {
|
|
15
|
+
const parsedArgv = { _: [] };
|
|
16
|
+
for (let i = 0; i < argv.length; i++) {
|
|
17
|
+
const currentArg = argv[i];
|
|
18
|
+
if (currentArg.startsWith("--no-")) {
|
|
19
|
+
const key = currentArg.slice(5);
|
|
20
|
+
parsedArgv[key] = false;
|
|
21
|
+
parsedArgv[camelCase(key)] = false;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (currentArg.startsWith("--")) {
|
|
25
|
+
const withoutPrefix = currentArg.slice(2);
|
|
26
|
+
const [rawKey, inlineValue] = withoutPrefix.split("=", 2);
|
|
27
|
+
if (inlineValue !== undefined) {
|
|
28
|
+
parsedArgv[rawKey] = inlineValue;
|
|
29
|
+
parsedArgv[camelCase(rawKey)] = inlineValue;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const nextArg = argv[i + 1];
|
|
33
|
+
if (nextArg && !nextArg.startsWith("-")) {
|
|
34
|
+
parsedArgv[rawKey] = nextArg;
|
|
35
|
+
parsedArgv[camelCase(rawKey)] = nextArg;
|
|
36
|
+
i++;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
parsedArgv[rawKey] = true;
|
|
40
|
+
parsedArgv[camelCase(rawKey)] = true;
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (currentArg.startsWith("-") && currentArg.length > 1) {
|
|
45
|
+
for (const shortFlag of currentArg.slice(1).split("")) {
|
|
46
|
+
parsedArgv[shortFlag] = true;
|
|
47
|
+
}
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
parsedArgv._ = parsedArgv._ || [];
|
|
51
|
+
parsedArgv._.push(currentArg);
|
|
52
|
+
}
|
|
53
|
+
return parsedArgv;
|
|
54
|
+
};
|
|
55
|
+
const normalizeOutputMode = (value) => {
|
|
56
|
+
if (value === "human" || value === "plain" || value === "json") {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
};
|
|
61
|
+
const resolveCliMode = (argvArg, cliConfig) => {
|
|
62
|
+
const isTty = Boolean(process.stdout?.isTTY && process.stdin?.isTTY);
|
|
63
|
+
const agentMode = Boolean(getArgValue(argvArg, "agent"));
|
|
64
|
+
const outputOverride = normalizeOutputMode(getArgValue(argvArg, "output"));
|
|
65
|
+
let output = normalizeOutputMode(cliConfig.output) || (isTty ? "human" : "plain");
|
|
66
|
+
if (agentMode || getArgValue(argvArg, "json")) {
|
|
67
|
+
output = "json";
|
|
68
|
+
}
|
|
69
|
+
else if (getArgValue(argvArg, "plain")) {
|
|
70
|
+
output = "plain";
|
|
71
|
+
}
|
|
72
|
+
else if (outputOverride) {
|
|
73
|
+
output = outputOverride;
|
|
74
|
+
}
|
|
75
|
+
const interactiveSetting = getArgValue(argvArg, "interactive");
|
|
76
|
+
let interactive = cliConfig.interactive ?? isTty;
|
|
77
|
+
if (interactiveSetting === true) {
|
|
78
|
+
interactive = true;
|
|
79
|
+
}
|
|
80
|
+
else if (interactiveSetting === false) {
|
|
81
|
+
interactive = false;
|
|
82
|
+
}
|
|
83
|
+
if (!isTty || output !== "human" || agentMode) {
|
|
84
|
+
interactive = false;
|
|
85
|
+
}
|
|
86
|
+
const checkUpdatesSetting = getArgValue(argvArg, "check-updates");
|
|
87
|
+
let checkUpdates = cliConfig.checkUpdates ?? output === "human";
|
|
88
|
+
if (checkUpdatesSetting === true) {
|
|
89
|
+
checkUpdates = true;
|
|
90
|
+
}
|
|
91
|
+
else if (checkUpdatesSetting === false) {
|
|
92
|
+
checkUpdates = false;
|
|
93
|
+
}
|
|
94
|
+
if (output !== "human" || agentMode) {
|
|
95
|
+
checkUpdates = false;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
output,
|
|
99
|
+
interactive,
|
|
100
|
+
json: output === "json",
|
|
101
|
+
plain: output === "plain",
|
|
102
|
+
quiet: Boolean(getArgValue(argvArg, "quiet") ||
|
|
103
|
+
getArgValue(argvArg, "q") ||
|
|
104
|
+
output === "json"),
|
|
105
|
+
yes: Boolean(getArgValue(argvArg, "yes") || getArgValue(argvArg, "y")),
|
|
106
|
+
help: Boolean(getArgValue(argvArg, "help") ||
|
|
107
|
+
getArgValue(argvArg, "h") ||
|
|
108
|
+
argvArg._?.[0] === "help"),
|
|
109
|
+
agent: agentMode,
|
|
110
|
+
checkUpdates,
|
|
111
|
+
isTty,
|
|
112
|
+
command: argvArg._?.[0],
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
const getCliModeConfig = async () => {
|
|
116
|
+
return await getCliConfigValue("cli", {});
|
|
117
|
+
};
|
|
118
|
+
export const getCliMode = async (argvArg = {}) => {
|
|
119
|
+
const cliConfig = await getCliModeConfig();
|
|
120
|
+
return resolveCliMode(argvArg, cliConfig);
|
|
121
|
+
};
|
|
122
|
+
export const getRawCliMode = async () => {
|
|
123
|
+
const cliConfig = await getCliModeConfig();
|
|
124
|
+
const rawArgv = parseRawArgv(process.argv.slice(2));
|
|
125
|
+
return resolveCliMode(rawArgv, cliConfig);
|
|
126
|
+
};
|
|
127
|
+
export const printJson = (data) => {
|
|
128
|
+
console.log(JSON.stringify(data, null, 2));
|
|
129
|
+
};
|
|
130
|
+
export const runWithSuppressedOutput = async (fn) => {
|
|
131
|
+
const originalConsole = {
|
|
132
|
+
log: console.log,
|
|
133
|
+
info: console.info,
|
|
134
|
+
warn: console.warn,
|
|
135
|
+
error: console.error,
|
|
136
|
+
};
|
|
137
|
+
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
138
|
+
const originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
139
|
+
const noop = () => undefined;
|
|
140
|
+
console.log = noop;
|
|
141
|
+
console.info = noop;
|
|
142
|
+
console.warn = noop;
|
|
143
|
+
console.error = noop;
|
|
144
|
+
process.stdout.write = (() => true);
|
|
145
|
+
process.stderr.write = (() => true);
|
|
146
|
+
try {
|
|
147
|
+
return await fn();
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
console.log = originalConsole.log;
|
|
151
|
+
console.info = originalConsole.info;
|
|
152
|
+
console.warn = originalConsole.warn;
|
|
153
|
+
console.error = originalConsole.error;
|
|
154
|
+
process.stdout.write = originalStdoutWrite;
|
|
155
|
+
process.stderr.write = originalStderrWrite;
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5jbGltb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvaGVscGVycy5jbGltb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBMEI3RCxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO0lBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FDMUQsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUNwQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFtQixFQUFFLEdBQVcsRUFBTyxFQUFFO0lBQzVELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxDQUFDLElBQWMsRUFBYyxFQUFFO0lBQ2xELE1BQU0sVUFBVSxHQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FB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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const CLI_NAMESPACE = "@git.zone/cli";
|
|
2
|
+
export declare const getSmartconfigPath: (cwd?: string) => string;
|
|
3
|
+
export declare const readSmartconfigFile: (cwd?: string) => Promise<Record<string, any>>;
|
|
4
|
+
export declare const writeSmartconfigFile: (data: Record<string, any>, cwd?: string) => Promise<void>;
|
|
5
|
+
export declare const normalizeCliConfigPath: (configPath: string) => string;
|
|
6
|
+
export declare const getCliConfigPathSegments: (configPath: string) => string[];
|
|
7
|
+
export declare const getCliNamespaceConfig: (smartconfigData: Record<string, any>) => Record<string, any>;
|
|
8
|
+
export declare const getCliConfigValueFromData: (smartconfigData: Record<string, any>, configPath: string) => any;
|
|
9
|
+
export declare const getCliConfigValue: <T>(configPath: string, defaultValue: T, cwd?: string) => Promise<T>;
|
|
10
|
+
export declare const setCliConfigValueInData: (smartconfigData: Record<string, any>, configPath: string, value: any) => Record<string, any>;
|
|
11
|
+
export declare const unsetCliConfigValueInData: (smartconfigData: Record<string, any>, configPath: string) => boolean;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import * as plugins from "./plugins.js";
|
|
2
|
+
import { rename, writeFile } from "fs/promises";
|
|
3
|
+
export const CLI_NAMESPACE = "@git.zone/cli";
|
|
4
|
+
const isPlainObject = (value) => {
|
|
5
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
+
};
|
|
7
|
+
export const getSmartconfigPath = (cwd = process.cwd()) => {
|
|
8
|
+
return plugins.path.join(cwd, ".smartconfig.json");
|
|
9
|
+
};
|
|
10
|
+
export const readSmartconfigFile = async (cwd = process.cwd()) => {
|
|
11
|
+
const smartconfigPath = getSmartconfigPath(cwd);
|
|
12
|
+
if (!(await plugins.smartfs.file(smartconfigPath).exists())) {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
const content = (await plugins.smartfs
|
|
16
|
+
.file(smartconfigPath)
|
|
17
|
+
.encoding("utf8")
|
|
18
|
+
.read());
|
|
19
|
+
if (content.trim() === "") {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
return JSON.parse(content);
|
|
23
|
+
};
|
|
24
|
+
export const writeSmartconfigFile = async (data, cwd = process.cwd()) => {
|
|
25
|
+
const smartconfigPath = getSmartconfigPath(cwd);
|
|
26
|
+
const tempPath = `${smartconfigPath}.tmp-${Date.now()}`;
|
|
27
|
+
const content = JSON.stringify(data, null, 2);
|
|
28
|
+
await writeFile(tempPath, content, "utf8");
|
|
29
|
+
await rename(tempPath, smartconfigPath);
|
|
30
|
+
};
|
|
31
|
+
export const normalizeCliConfigPath = (configPath) => {
|
|
32
|
+
const trimmedPath = configPath.trim();
|
|
33
|
+
if (!trimmedPath || trimmedPath === CLI_NAMESPACE) {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
if (trimmedPath.startsWith(`${CLI_NAMESPACE}.`)) {
|
|
37
|
+
return trimmedPath.slice(`${CLI_NAMESPACE}.`.length);
|
|
38
|
+
}
|
|
39
|
+
return trimmedPath;
|
|
40
|
+
};
|
|
41
|
+
export const getCliConfigPathSegments = (configPath) => {
|
|
42
|
+
const normalizedPath = normalizeCliConfigPath(configPath);
|
|
43
|
+
if (!normalizedPath) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
return normalizedPath
|
|
47
|
+
.split(".")
|
|
48
|
+
.map((segment) => segment.trim())
|
|
49
|
+
.filter(Boolean);
|
|
50
|
+
};
|
|
51
|
+
export const getCliNamespaceConfig = (smartconfigData) => {
|
|
52
|
+
const cliConfig = smartconfigData[CLI_NAMESPACE];
|
|
53
|
+
if (isPlainObject(cliConfig)) {
|
|
54
|
+
return cliConfig;
|
|
55
|
+
}
|
|
56
|
+
return {};
|
|
57
|
+
};
|
|
58
|
+
export const getCliConfigValueFromData = (smartconfigData, configPath) => {
|
|
59
|
+
const segments = getCliConfigPathSegments(configPath);
|
|
60
|
+
let currentValue = getCliNamespaceConfig(smartconfigData);
|
|
61
|
+
for (const segment of segments) {
|
|
62
|
+
if (!isPlainObject(currentValue) && !Array.isArray(currentValue)) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
currentValue = currentValue?.[segment];
|
|
66
|
+
}
|
|
67
|
+
return currentValue;
|
|
68
|
+
};
|
|
69
|
+
export const getCliConfigValue = async (configPath, defaultValue, cwd = process.cwd()) => {
|
|
70
|
+
const smartconfigData = await readSmartconfigFile(cwd);
|
|
71
|
+
const configValue = getCliConfigValueFromData(smartconfigData, configPath);
|
|
72
|
+
if (configValue === undefined) {
|
|
73
|
+
return defaultValue;
|
|
74
|
+
}
|
|
75
|
+
if (isPlainObject(defaultValue) && isPlainObject(configValue)) {
|
|
76
|
+
return {
|
|
77
|
+
...defaultValue,
|
|
78
|
+
...configValue,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return configValue;
|
|
82
|
+
};
|
|
83
|
+
export const setCliConfigValueInData = (smartconfigData, configPath, value) => {
|
|
84
|
+
const segments = getCliConfigPathSegments(configPath);
|
|
85
|
+
if (!isPlainObject(smartconfigData[CLI_NAMESPACE])) {
|
|
86
|
+
smartconfigData[CLI_NAMESPACE] = {};
|
|
87
|
+
}
|
|
88
|
+
if (segments.length === 0) {
|
|
89
|
+
smartconfigData[CLI_NAMESPACE] = value;
|
|
90
|
+
return smartconfigData;
|
|
91
|
+
}
|
|
92
|
+
let currentValue = smartconfigData[CLI_NAMESPACE];
|
|
93
|
+
for (const segment of segments.slice(0, -1)) {
|
|
94
|
+
if (!isPlainObject(currentValue[segment])) {
|
|
95
|
+
currentValue[segment] = {};
|
|
96
|
+
}
|
|
97
|
+
currentValue = currentValue[segment];
|
|
98
|
+
}
|
|
99
|
+
currentValue[segments[segments.length - 1]] = value;
|
|
100
|
+
return smartconfigData;
|
|
101
|
+
};
|
|
102
|
+
export const unsetCliConfigValueInData = (smartconfigData, configPath) => {
|
|
103
|
+
const segments = getCliConfigPathSegments(configPath);
|
|
104
|
+
if (segments.length === 0) {
|
|
105
|
+
if (smartconfigData[CLI_NAMESPACE] !== undefined) {
|
|
106
|
+
delete smartconfigData[CLI_NAMESPACE];
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const parentSegments = segments.slice(0, -1);
|
|
112
|
+
let currentValue = getCliNamespaceConfig(smartconfigData);
|
|
113
|
+
const objectPath = [currentValue];
|
|
114
|
+
for (const segment of parentSegments) {
|
|
115
|
+
if (!isPlainObject(currentValue[segment])) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
currentValue = currentValue[segment];
|
|
119
|
+
objectPath.push(currentValue);
|
|
120
|
+
}
|
|
121
|
+
const lastSegment = segments[segments.length - 1];
|
|
122
|
+
if (!(lastSegment in currentValue)) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
delete currentValue[lastSegment];
|
|
126
|
+
for (let i = objectPath.length - 1; i >= 1; i--) {
|
|
127
|
+
if (Object.keys(objectPath[i]).length > 0) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
const parentObject = objectPath[i - 1];
|
|
131
|
+
const parentKey = parentSegments[i - 1];
|
|
132
|
+
delete parentObject[parentKey];
|
|
133
|
+
}
|
|
134
|
+
if (Object.keys(getCliNamespaceConfig(smartconfigData)).length === 0) {
|
|
135
|
+
delete smartconfigData[CLI_NAMESPACE];
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zbWFydGNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2hlbHBlcnMuc21hcnRjb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUU3QyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBZ0MsRUFBRTtJQUNyRSxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BQWMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFVLEVBQUU7SUFDeEUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLE1BQWMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUNHLEVBQUU7SUFDaEMsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDNUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxPQUFPO1NBQ25DLElBQUksQ0FBQyxlQUFlLENBQUM7U0FDckIsUUFBUSxD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
|