@git.zone/cli 1.16.6 → 1.16.7
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 +1 -1
- package/dist_ts/classes.gitzoneconfig.js +1 -1
- package/dist_ts/gitzone.cli.js +1 -1
- package/dist_ts/gitzone.logging.js +1 -1
- package/dist_ts/mod_commit/index.js +3 -2
- package/dist_ts/mod_deprecate/index.js +1 -1
- package/dist_ts/mod_format/classes.rollbackmanager.d.ts +1 -0
- package/dist_ts/mod_format/classes.rollbackmanager.js +83 -8
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gitzoneconfig.ts +3 -1
- package/ts/gitzone.cli.ts +5 -5
- package/ts/gitzone.logging.ts +2 -1
- package/ts/mod_commit/index.ts +36 -11
- package/ts/mod_deprecate/index.ts +4 -1
- package/ts/mod_format/classes.rollbackmanager.ts +87 -7
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '1.16.
|
|
6
|
+
version: '1.16.7',
|
|
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
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
|
|
@@ -18,4 +18,4 @@ export class GitzoneConfig {
|
|
|
18
18
|
}
|
|
19
19
|
constructor() { }
|
|
20
20
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXR6b25lY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXR6b25lY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBMEJwQzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztRQUN6QixNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUlNLEtBQUssQ0FBQyxpQkFBaUI7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBcUIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FFL0MsT0FBTyxFQUFFO1lBQ1QsY0FBYyxFQUFFLFFBQVE7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFlLENBQUM7Q0FDakIifQ==
|
package/dist_ts/gitzone.cli.js
CHANGED
|
@@ -20,4 +20,4 @@ export const logVerbose = (message) => {
|
|
|
20
20
|
logger.log('info', `[VERBOSE] ${message}`);
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0em9uZS5sb2dnaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZ2l0em9uZS5sb2dnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qyx5QkFBeUI7QUFDekIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRWhGLDBCQUEwQjtBQUMxQixNQUFNLGtCQUFrQixHQUN0QixJQUFJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQzFELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdDLHlCQUF5QjtBQUN6QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBZ0IsRUFBUSxFQUFFO0lBQ3ZELFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFZLEVBQUU7SUFDekMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYseUNBQXlDO0FBQ3pDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWUsRUFBUSxFQUFFO0lBQ2xELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7QUFDSCxDQUFDLENBQUMifQ==
|
|
@@ -82,7 +82,8 @@ export const run = async (argvArg) => {
|
|
|
82
82
|
await smartshellInstance.exec(`git add -A`);
|
|
83
83
|
await smartshellInstance.exec(`git commit -m "${commitString}"`);
|
|
84
84
|
await smartshellInstance.exec(`npm version ${commitVersionType}`);
|
|
85
|
-
if (answerBucket.getAnswerFor('pushToOrigin') &&
|
|
85
|
+
if (answerBucket.getAnswerFor('pushToOrigin') &&
|
|
86
|
+
!(process.env.CI === 'true')) {
|
|
86
87
|
await smartshellInstance.exec(`git push origin master --follow-tags`);
|
|
87
88
|
}
|
|
88
89
|
};
|
|
@@ -92,4 +93,4 @@ const createCommitStringFromAnswerBucket = (answerBucket) => {
|
|
|
92
93
|
const commitDescription = answerBucket.getAnswerFor('commitDescription');
|
|
93
94
|
return `${commitType}(${commitScope}): ${commitDescription}`;
|
|
94
95
|
};
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUVoRSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO0lBQ3hDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRXBCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sQ0FBQyxHQUFHLENBQ1IsTUFBTSxFQUNOOzs7U0FHSyxnQkFBZ0IsQ0FBQyxzQkFBc0I7U0FDdkMsZ0JBQWdCLENBQUMsMkJBQTJCLElBQUksZ0JBQWdCLENBQUMsMkJBQTJCLE1BQU0sZ0JBQWdCLENBQUMsNkJBQTZCOztHQUV0SixDQUNBLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDakUsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUMx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
|
|
@@ -43,4 +43,4 @@ export const run = async () => {
|
|
|
43
43
|
`"${oldPackageName} has been deprecated in favour of ${newPackageName} - please upgrade asap!!!" --registry ${registryUrl}`);
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZGVwcmVjYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLElBQUksRUFBRTtJQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBQzVEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSw0QkFBNEI7WUFDckMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3hCLE9BQU8sV0FBVyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9DLENBQUM7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixPQUFPLEVBQUUsb0NBQW9DO1lBQzdDLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxXQUFXLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0MsQ0FBQztTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLE9BQU8sRUFBRSxvQ0FBb0M7WUFDN0MsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN4QixPQUFPLFdBQVcsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxDQUFDO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxHQUFHLENBQ1IsTUFBTSxFQUNOLHVCQUF1QixjQUFjLGlCQUFpQixjQUFjLEVBQUUsQ0FDdkUsQ0FBQztJQUNGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUMzRCxRQUFRLEVBQUUsTUFBTTtLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUMzQixpQkFBaUIsY0FBYyxLQUFLO1lBQ2xDLElBQUksY0FBYyxxQ0FBcUMsY0FBYyx5Q0FBeUMsV0FBVyxFQUFFLENBQzlILENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDIn0=
|
|
@@ -31,7 +31,7 @@ export class RollbackManager {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
// Read file content and metadata
|
|
34
|
-
const content =
|
|
34
|
+
const content = plugins.smartfile.fs.toStringSync(absolutePath);
|
|
35
35
|
const stats = await plugins.smartfile.fs.stat(absolutePath);
|
|
36
36
|
const checksum = this.calculateChecksum(content);
|
|
37
37
|
// Create backup
|
|
@@ -63,7 +63,7 @@ export class RollbackManager {
|
|
|
63
63
|
: plugins.path.join(paths.cwd, file.path);
|
|
64
64
|
// Verify backup integrity
|
|
65
65
|
const backupPath = this.getBackupPath(operationId, file.path);
|
|
66
|
-
const backupContent =
|
|
66
|
+
const backupContent = plugins.smartfile.fs.toStringSync(backupPath);
|
|
67
67
|
const backupChecksum = this.calculateChecksum(backupContent);
|
|
68
68
|
if (backupChecksum !== file.checksum) {
|
|
69
69
|
throw new Error(`Backup integrity check failed for ${file.path}`);
|
|
@@ -110,7 +110,7 @@ export class RollbackManager {
|
|
|
110
110
|
if (!exists) {
|
|
111
111
|
return false;
|
|
112
112
|
}
|
|
113
|
-
const content =
|
|
113
|
+
const content = plugins.smartfile.fs.toStringSync(backupPath);
|
|
114
114
|
const checksum = this.calculateChecksum(content);
|
|
115
115
|
if (checksum !== file.checksum) {
|
|
116
116
|
return false;
|
|
@@ -141,15 +141,61 @@ export class RollbackManager {
|
|
|
141
141
|
return plugins.crypto.createHash('sha256').update(content).digest('hex');
|
|
142
142
|
}
|
|
143
143
|
async getManifest() {
|
|
144
|
+
const defaultManifest = { operations: [] };
|
|
144
145
|
const exists = await plugins.smartfile.fs.fileExists(this.manifestPath);
|
|
145
146
|
if (!exists) {
|
|
146
|
-
return
|
|
147
|
+
return defaultManifest;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const content = plugins.smartfile.fs.toStringSync(this.manifestPath);
|
|
151
|
+
const manifest = JSON.parse(content);
|
|
152
|
+
// Validate the manifest structure
|
|
153
|
+
if (this.isValidManifest(manifest)) {
|
|
154
|
+
return manifest;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
console.warn('Invalid rollback manifest structure, returning default manifest');
|
|
158
|
+
return defaultManifest;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.warn(`Failed to read rollback manifest: ${error.message}, returning default manifest`);
|
|
163
|
+
// Try to delete the corrupted file
|
|
164
|
+
try {
|
|
165
|
+
await plugins.smartfile.fs.remove(this.manifestPath);
|
|
166
|
+
}
|
|
167
|
+
catch (removeError) {
|
|
168
|
+
// Ignore removal errors
|
|
169
|
+
}
|
|
170
|
+
return defaultManifest;
|
|
147
171
|
}
|
|
148
|
-
const content = await plugins.smartfile.fs.toStringSync(this.manifestPath);
|
|
149
|
-
return JSON.parse(content);
|
|
150
172
|
}
|
|
151
173
|
async saveManifest(manifest) {
|
|
152
|
-
|
|
174
|
+
// Validate before saving
|
|
175
|
+
if (!this.isValidManifest(manifest)) {
|
|
176
|
+
throw new Error('Invalid rollback manifest structure, cannot save');
|
|
177
|
+
}
|
|
178
|
+
// Use atomic write: write to temp file, then move it
|
|
179
|
+
const tempPath = `${this.manifestPath}.tmp`;
|
|
180
|
+
try {
|
|
181
|
+
// Write to temporary file
|
|
182
|
+
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
183
|
+
await plugins.smartfile.memory.toFs(jsonContent, tempPath);
|
|
184
|
+
// Move temp file to actual manifest (atomic-like operation)
|
|
185
|
+
// Since smartfile doesn't have rename, we copy and delete
|
|
186
|
+
await plugins.smartfile.fs.copy(tempPath, this.manifestPath);
|
|
187
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
// Clean up temp file if it exists
|
|
191
|
+
try {
|
|
192
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
193
|
+
}
|
|
194
|
+
catch (removeError) {
|
|
195
|
+
// Ignore removal errors
|
|
196
|
+
}
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
153
199
|
}
|
|
154
200
|
async getOperation(operationId) {
|
|
155
201
|
const manifest = await this.getManifest();
|
|
@@ -166,5 +212,34 @@ export class RollbackManager {
|
|
|
166
212
|
}
|
|
167
213
|
await this.saveManifest(manifest);
|
|
168
214
|
}
|
|
215
|
+
isValidManifest(manifest) {
|
|
216
|
+
// Check if manifest has the required structure
|
|
217
|
+
if (!manifest || typeof manifest !== 'object') {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
// Check required fields
|
|
221
|
+
if (!Array.isArray(manifest.operations)) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
// Check each operation entry
|
|
225
|
+
for (const operation of manifest.operations) {
|
|
226
|
+
if (!operation || typeof operation !== 'object' ||
|
|
227
|
+
typeof operation.id !== 'string' ||
|
|
228
|
+
typeof operation.timestamp !== 'number' ||
|
|
229
|
+
typeof operation.status !== 'string' ||
|
|
230
|
+
!Array.isArray(operation.files)) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
// Check each file in the operation
|
|
234
|
+
for (const file of operation.files) {
|
|
235
|
+
if (!file || typeof file !== 'object' ||
|
|
236
|
+
typeof file.path !== 'string' ||
|
|
237
|
+
typeof file.checksum !== 'string') {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
169
244
|
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb2xsYmFja21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2NsYXNzZXMucm9sbGJhY2ttYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFHckMsTUFBTSxPQUFPLGVBQWU7SUFJMUI7UUFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUU3QixNQUFNLFNBQVMsR0FBcUI7WUFDbEMsRUFBRSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUM7UUFFRixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtRQUNwRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdB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
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb2xsYmFja21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2NsYXNzZXMucm9sbGJhY2ttYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFHckMsTUFBTSxPQUFPLGVBQWU7SUFJMUI7UUFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUU3QixNQUFNLFNBQVMsR0FBcUI7WUFDbEMsRUFBRSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUM7UUFFRixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtRQUNwRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdBQVcsWUFBWSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwRCxDQUFDLENBQUMsUUFBUTtZQUNWLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLHVCQUF1QjtRQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWiw4REFBOEQ7WUFDOUQsT0FBTztRQUNULENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRCxnQkFBZ0I7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFekQsbUJBQW1CO1FBQ25CLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ25CLElBQUksRUFBRSxRQUFRO1lBQ2QsZUFBZSxFQUFFLE9BQU87WUFDeEIsUUFBUTtZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQW1CO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsV0FBVyxZQUFZLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxXQUFXLCtCQUErQixDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVDLDBCQUEwQjtZQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUU3RCxJQUFJLGNBQWMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxlQUFlO1lBQ2YsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUV4RSxzQkFBc0I7WUFDdEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsOERBQThEO1FBQ2hFLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsU0FBUyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7UUFDakMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQW1CO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsV0FBVyxZQUFZLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsU0FBUyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7UUFDL0IsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLGFBQXFCO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUV0RSxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3pELEVBQUUsQ0FBQyxTQUFTLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUN2RCxDQUFDO1FBRUYsS0FBSyxNQUFNLFNBQVMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzNDLHNCQUFzQjtZQUN0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkYsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFaEQsdUJBQXVCO1lBQ3ZCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQW1CO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFakUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakQsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELE9BQU8sR0FBRyxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ3pELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUF3QjtRQUNoRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLE1BQU0sZUFBZSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRTNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXJDLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUVBQWlFLENBQUMsQ0FBQztnQkFDaEYsT0FBTyxlQUFlLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsS0FBSyxDQUFDLE9BQU8sOEJBQThCLENBQUMsQ0FBQztZQUMvRixtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsd0JBQXdCO1lBQzFCLENBQUM7WUFDRCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBNEM7UUFDckUseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxNQUFNLENBQUM7UUFFNUMsSUFBSSxDQUFDO1lBQ0gsMEJBQTBCO1lBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFM0QsNERBQTREO1lBQzVELDBEQUEwRDtZQUMxRCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysa0NBQWtDO1lBQ2xDLElBQUksQ0FBQztnQkFDSCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsd0JBQXdCO1lBQzFCLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFtQjtRQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDdkUsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBMkI7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsRixJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ2pELENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWE7UUFDbkMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVE7Z0JBQzNDLE9BQU8sU0FBUyxDQUFDLEVBQUUsS0FBSyxRQUFRO2dCQUNoQyxPQUFPLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUTtnQkFDdkMsT0FBTyxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVE7Z0JBQ3BDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLEtBQUssTUFBTSxJQUFJLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7b0JBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRO29CQUM3QixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/cli",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.16.
|
|
4
|
+
"version": "1.16.7",
|
|
5
5
|
"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.",
|
|
6
6
|
"main": "dist_ts/index.ts",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '1.16.
|
|
6
|
+
version: '1.16.7',
|
|
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
|
}
|
|
@@ -40,7 +40,9 @@ export class GitzoneConfig {
|
|
|
40
40
|
public async readConfigFromCwd() {
|
|
41
41
|
const npmextraInstance = new plugins.npmextra.Npmextra(paths.cwd);
|
|
42
42
|
this.data = npmextraInstance.dataFor<IGitzoneConfigData>('gitzone', {});
|
|
43
|
-
this.data.npmciOptions = npmextraInstance.dataFor<
|
|
43
|
+
this.data.npmciOptions = npmextraInstance.dataFor<
|
|
44
|
+
IGitzoneConfigData['npmciOptions']
|
|
45
|
+
>('npmci', {
|
|
44
46
|
npmAccessLevel: 'public',
|
|
45
47
|
});
|
|
46
48
|
}
|
package/ts/gitzone.cli.ts
CHANGED
|
@@ -62,23 +62,23 @@ export let run = async () => {
|
|
|
62
62
|
gitzoneSmartcli.addCommand('format').subscribe(async (argvArg) => {
|
|
63
63
|
const config = GitzoneConfig.fromCwd();
|
|
64
64
|
const modFormat = await import('./mod_format/index.js');
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
// Handle rollback commands
|
|
67
67
|
if (argvArg.rollback) {
|
|
68
68
|
await modFormat.handleRollback(argvArg.rollback);
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
|
|
72
72
|
if (argvArg['list-backups']) {
|
|
73
73
|
await modFormat.handleListBackups();
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
if (argvArg['clean-backups']) {
|
|
78
78
|
await modFormat.handleCleanBackups();
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
// Handle format with options
|
|
83
83
|
await modFormat.run({
|
|
84
84
|
dryRun: argvArg['dry-run'],
|
|
@@ -89,7 +89,7 @@ export let run = async () => {
|
|
|
89
89
|
detailed: argvArg.detailed,
|
|
90
90
|
interactive: argvArg.interactive !== false,
|
|
91
91
|
parallel: argvArg.parallel !== false,
|
|
92
|
-
verbose: argvArg.verbose
|
|
92
|
+
verbose: argvArg.verbose,
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
|
package/ts/gitzone.logging.ts
CHANGED
|
@@ -5,7 +5,8 @@ import * as plugins from './plugins.js';
|
|
|
5
5
|
export const logger = plugins.smartlog.Smartlog.createForCommitinfo(commitinfo);
|
|
6
6
|
|
|
7
7
|
// Add console destination
|
|
8
|
-
const consoleDestination =
|
|
8
|
+
const consoleDestination =
|
|
9
|
+
new plugins.smartlogDestinationLocal.DestinationLocal();
|
|
9
10
|
logger.addLogDestination(consoleDestination);
|
|
10
11
|
|
|
11
12
|
// Verbose logging helper
|
package/ts/mod_commit/index.ts
CHANGED
|
@@ -10,20 +10,22 @@ export const run = async (argvArg: any) => {
|
|
|
10
10
|
await formatMod.run();
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
logger.log('info', `gathering facts...`);
|
|
15
14
|
const aidoc = new plugins.tsdoc.AiDoc();
|
|
16
15
|
await aidoc.start();
|
|
17
16
|
|
|
18
17
|
const nextCommitObject = await aidoc.buildNextCommitObject(paths.cwd);
|
|
19
18
|
|
|
20
|
-
logger.log(
|
|
19
|
+
logger.log(
|
|
20
|
+
'info',
|
|
21
|
+
`---------
|
|
21
22
|
Next recommended commit would be:
|
|
22
23
|
===========
|
|
23
24
|
-> ${nextCommitObject.recommendedNextVersion}:
|
|
24
25
|
-> ${nextCommitObject.recommendedNextVersionLevel}(${nextCommitObject.recommendedNextVersionScope}): ${nextCommitObject.recommendedNextVersionMessage}
|
|
25
26
|
===========
|
|
26
|
-
|
|
27
|
+
`,
|
|
28
|
+
);
|
|
27
29
|
const commitInteract = new plugins.smartinteract.SmartInteract();
|
|
28
30
|
commitInteract.addQuestions([
|
|
29
31
|
{
|
|
@@ -72,32 +74,55 @@ export const run = async (argvArg: any) => {
|
|
|
72
74
|
});
|
|
73
75
|
|
|
74
76
|
logger.log('info', `Baking commitinfo into code ...`);
|
|
75
|
-
const commitInfo = new plugins.commitinfo.CommitInfo(
|
|
77
|
+
const commitInfo = new plugins.commitinfo.CommitInfo(
|
|
78
|
+
paths.cwd,
|
|
79
|
+
commitVersionType,
|
|
80
|
+
);
|
|
76
81
|
await commitInfo.writeIntoPotentialDirs();
|
|
77
82
|
|
|
78
83
|
logger.log('info', `Writing changelog.md ...`);
|
|
79
84
|
let changelog = nextCommitObject.changelog;
|
|
80
|
-
changelog = changelog.replaceAll(
|
|
81
|
-
|
|
82
|
-
|
|
85
|
+
changelog = changelog.replaceAll(
|
|
86
|
+
'{{nextVersion}}',
|
|
87
|
+
(await commitInfo.getNextPlannedVersion()).versionString,
|
|
88
|
+
);
|
|
89
|
+
changelog = changelog.replaceAll(
|
|
90
|
+
'{{nextVersionScope}}',
|
|
91
|
+
`${await answerBucket.getAnswerFor('commitType')}(${await answerBucket.getAnswerFor('commitScope')})`,
|
|
92
|
+
);
|
|
93
|
+
changelog = changelog.replaceAll(
|
|
94
|
+
'{{nextVersionMessage}}',
|
|
95
|
+
nextCommitObject.recommendedNextVersionMessage,
|
|
96
|
+
);
|
|
83
97
|
if (nextCommitObject.recommendedNextVersionDetails?.length > 0) {
|
|
84
|
-
changelog = changelog.replaceAll(
|
|
98
|
+
changelog = changelog.replaceAll(
|
|
99
|
+
'{{nextVersionDetails}}',
|
|
100
|
+
'- ' + nextCommitObject.recommendedNextVersionDetails.join('\n- '),
|
|
101
|
+
);
|
|
85
102
|
} else {
|
|
86
103
|
changelog = changelog.replaceAll('\n{{nextVersionDetails}}', '');
|
|
87
104
|
}
|
|
88
105
|
|
|
89
|
-
await plugins.smartfile.memory.toFs(
|
|
106
|
+
await plugins.smartfile.memory.toFs(
|
|
107
|
+
changelog,
|
|
108
|
+
plugins.path.join(paths.cwd, `changelog.md`),
|
|
109
|
+
);
|
|
90
110
|
|
|
91
111
|
logger.log('info', `Staging files for commit:`);
|
|
92
112
|
await smartshellInstance.exec(`git add -A`);
|
|
93
113
|
await smartshellInstance.exec(`git commit -m "${commitString}"`);
|
|
94
114
|
await smartshellInstance.exec(`npm version ${commitVersionType}`);
|
|
95
|
-
if (
|
|
115
|
+
if (
|
|
116
|
+
answerBucket.getAnswerFor('pushToOrigin') &&
|
|
117
|
+
!(process.env.CI === 'true')
|
|
118
|
+
) {
|
|
96
119
|
await smartshellInstance.exec(`git push origin master --follow-tags`);
|
|
97
120
|
}
|
|
98
121
|
};
|
|
99
122
|
|
|
100
|
-
const createCommitStringFromAnswerBucket = (
|
|
123
|
+
const createCommitStringFromAnswerBucket = (
|
|
124
|
+
answerBucket: plugins.smartinteract.AnswerBucket,
|
|
125
|
+
) => {
|
|
101
126
|
const commitType = answerBucket.getAnswerFor('commitType');
|
|
102
127
|
const commitScope = answerBucket.getAnswerFor('commitScope');
|
|
103
128
|
const commitDescription = answerBucket.getAnswerFor('commitDescription');
|
|
@@ -36,7 +36,10 @@ export const run = async () => {
|
|
|
36
36
|
const registryUrls = answerBucket.getAnswerFor(`registryUrls`).split(',');
|
|
37
37
|
const oldPackageName = answerBucket.getAnswerFor(`oldPackageName`);
|
|
38
38
|
const newPackageName = answerBucket.getAnswerFor(`newPackageName`);
|
|
39
|
-
logger.log(
|
|
39
|
+
logger.log(
|
|
40
|
+
'info',
|
|
41
|
+
`Deprecating package ${oldPackageName} in favour of ${newPackageName}`,
|
|
42
|
+
);
|
|
40
43
|
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
41
44
|
executor: 'bash',
|
|
42
45
|
});
|
|
@@ -43,7 +43,7 @@ export class RollbackManager {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
// Read file content and metadata
|
|
46
|
-
const content =
|
|
46
|
+
const content = plugins.smartfile.fs.toStringSync(absolutePath);
|
|
47
47
|
const stats = await plugins.smartfile.fs.stat(absolutePath);
|
|
48
48
|
const checksum = this.calculateChecksum(content);
|
|
49
49
|
|
|
@@ -82,7 +82,7 @@ export class RollbackManager {
|
|
|
82
82
|
|
|
83
83
|
// Verify backup integrity
|
|
84
84
|
const backupPath = this.getBackupPath(operationId, file.path);
|
|
85
|
-
const backupContent =
|
|
85
|
+
const backupContent = plugins.smartfile.fs.toStringSync(backupPath);
|
|
86
86
|
const backupChecksum = this.calculateChecksum(backupContent);
|
|
87
87
|
|
|
88
88
|
if (backupChecksum !== file.checksum) {
|
|
@@ -146,7 +146,7 @@ export class RollbackManager {
|
|
|
146
146
|
return false;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
const content =
|
|
149
|
+
const content = plugins.smartfile.fs.toStringSync(backupPath);
|
|
150
150
|
const checksum = this.calculateChecksum(content);
|
|
151
151
|
|
|
152
152
|
if (checksum !== file.checksum) {
|
|
@@ -185,17 +185,63 @@ export class RollbackManager {
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
private async getManifest(): Promise<{ operations: IFormatOperation[] }> {
|
|
188
|
+
const defaultManifest = { operations: [] };
|
|
189
|
+
|
|
188
190
|
const exists = await plugins.smartfile.fs.fileExists(this.manifestPath);
|
|
189
191
|
if (!exists) {
|
|
190
|
-
return
|
|
192
|
+
return defaultManifest;
|
|
191
193
|
}
|
|
192
194
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
+
try {
|
|
196
|
+
const content = plugins.smartfile.fs.toStringSync(this.manifestPath);
|
|
197
|
+
const manifest = JSON.parse(content);
|
|
198
|
+
|
|
199
|
+
// Validate the manifest structure
|
|
200
|
+
if (this.isValidManifest(manifest)) {
|
|
201
|
+
return manifest;
|
|
202
|
+
} else {
|
|
203
|
+
console.warn('Invalid rollback manifest structure, returning default manifest');
|
|
204
|
+
return defaultManifest;
|
|
205
|
+
}
|
|
206
|
+
} catch (error) {
|
|
207
|
+
console.warn(`Failed to read rollback manifest: ${error.message}, returning default manifest`);
|
|
208
|
+
// Try to delete the corrupted file
|
|
209
|
+
try {
|
|
210
|
+
await plugins.smartfile.fs.remove(this.manifestPath);
|
|
211
|
+
} catch (removeError) {
|
|
212
|
+
// Ignore removal errors
|
|
213
|
+
}
|
|
214
|
+
return defaultManifest;
|
|
215
|
+
}
|
|
195
216
|
}
|
|
196
217
|
|
|
197
218
|
private async saveManifest(manifest: { operations: IFormatOperation[] }): Promise<void> {
|
|
198
|
-
|
|
219
|
+
// Validate before saving
|
|
220
|
+
if (!this.isValidManifest(manifest)) {
|
|
221
|
+
throw new Error('Invalid rollback manifest structure, cannot save');
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Use atomic write: write to temp file, then move it
|
|
225
|
+
const tempPath = `${this.manifestPath}.tmp`;
|
|
226
|
+
|
|
227
|
+
try {
|
|
228
|
+
// Write to temporary file
|
|
229
|
+
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
230
|
+
await plugins.smartfile.memory.toFs(jsonContent, tempPath);
|
|
231
|
+
|
|
232
|
+
// Move temp file to actual manifest (atomic-like operation)
|
|
233
|
+
// Since smartfile doesn't have rename, we copy and delete
|
|
234
|
+
await plugins.smartfile.fs.copy(tempPath, this.manifestPath);
|
|
235
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
// Clean up temp file if it exists
|
|
238
|
+
try {
|
|
239
|
+
await plugins.smartfile.fs.remove(tempPath);
|
|
240
|
+
} catch (removeError) {
|
|
241
|
+
// Ignore removal errors
|
|
242
|
+
}
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
199
245
|
}
|
|
200
246
|
|
|
201
247
|
private async getOperation(operationId: string): Promise<IFormatOperation | null> {
|
|
@@ -215,4 +261,38 @@ export class RollbackManager {
|
|
|
215
261
|
|
|
216
262
|
await this.saveManifest(manifest);
|
|
217
263
|
}
|
|
264
|
+
|
|
265
|
+
private isValidManifest(manifest: any): manifest is { operations: IFormatOperation[] } {
|
|
266
|
+
// Check if manifest has the required structure
|
|
267
|
+
if (!manifest || typeof manifest !== 'object') {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Check required fields
|
|
272
|
+
if (!Array.isArray(manifest.operations)) {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Check each operation entry
|
|
277
|
+
for (const operation of manifest.operations) {
|
|
278
|
+
if (!operation || typeof operation !== 'object' ||
|
|
279
|
+
typeof operation.id !== 'string' ||
|
|
280
|
+
typeof operation.timestamp !== 'number' ||
|
|
281
|
+
typeof operation.status !== 'string' ||
|
|
282
|
+
!Array.isArray(operation.files)) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Check each file in the operation
|
|
287
|
+
for (const file of operation.files) {
|
|
288
|
+
if (!file || typeof file !== 'object' ||
|
|
289
|
+
typeof file.path !== 'string' ||
|
|
290
|
+
typeof file.checksum !== 'string') {
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
218
298
|
}
|