@git.zone/cli 2.13.8 → 2.13.11
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/assets/templates/gitignore/_gitignore +4 -0
- package/assets/templates/{npmextra/npmextra.json → smartconfig/_smartconfig.json} +3 -0
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.gitzoneconfig.js +4 -4
- package/dist_ts/gitzone.cli.js +1 -15
- package/dist_ts/mod_commit/index.js +4 -4
- package/dist_ts/mod_config/classes.commitconfig.d.ts +3 -3
- package/dist_ts/mod_config/classes.commitconfig.js +20 -20
- package/dist_ts/mod_config/classes.releaseconfig.d.ts +3 -3
- package/dist_ts/mod_config/classes.releaseconfig.js +21 -21
- package/dist_ts/mod_config/index.js +12 -12
- package/dist_ts/mod_format/classes.baseformatter.d.ts +2 -9
- package/dist_ts/mod_format/classes.baseformatter.js +13 -26
- package/dist_ts/mod_format/classes.formatplanner.d.ts +1 -3
- package/dist_ts/mod_format/classes.formatplanner.js +11 -39
- package/dist_ts/mod_format/classes.formatstats.d.ts +0 -5
- package/dist_ts/mod_format/classes.formatstats.js +3 -35
- package/dist_ts/mod_format/formatters/cleanup.formatter.js +1 -2
- package/dist_ts/mod_format/formatters/copy.formatter.js +5 -8
- package/dist_ts/mod_format/formatters/gitignore.formatter.d.ts +5 -0
- package/dist_ts/mod_format/formatters/gitignore.formatter.js +23 -29
- package/dist_ts/mod_format/formatters/packagejson.formatter.js +5 -5
- package/dist_ts/mod_format/formatters/prettier.formatter.js +4 -12
- package/dist_ts/mod_format/formatters/{npmextra.formatter.d.ts → smartconfig.formatter.d.ts} +6 -1
- package/dist_ts/mod_format/formatters/smartconfig.formatter.js +180 -0
- package/dist_ts/mod_format/formatters/templates.formatter.js +1 -10
- package/dist_ts/mod_format/formatters/tsconfig.formatter.js +6 -4
- package/dist_ts/mod_format/index.d.ts +0 -4
- package/dist_ts/mod_format/index.js +27 -78
- package/dist_ts/mod_format/interfaces.format.d.ts +1 -18
- package/dist_ts/mod_format/interfaces.format.js +16 -2
- package/dist_ts/mod_format/mod.plugins.d.ts +2 -7
- package/dist_ts/mod_format/mod.plugins.js +3 -8
- package/dist_ts/mod_services/classes.globalregistry.js +2 -2
- package/dist_ts/mod_services/classes.servicemanager.d.ts +2 -2
- package/dist_ts/mod_services/classes.servicemanager.js +21 -21
- package/dist_ts/plugins.d.ts +2 -2
- package/dist_ts/plugins.js +3 -3
- package/package.json +11 -17
- package/readme.md +231 -218
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gitzoneconfig.ts +3 -3
- package/ts/gitzone.cli.ts +0 -17
- package/ts/mod_commit/index.ts +3 -3
- package/ts/mod_config/classes.commitconfig.ts +19 -19
- package/ts/mod_config/classes.releaseconfig.ts +20 -20
- package/ts/mod_config/index.ts +11 -11
- package/ts/mod_format/classes.baseformatter.ts +14 -25
- package/ts/mod_format/classes.formatplanner.ts +10 -39
- package/ts/mod_format/classes.formatstats.ts +2 -42
- package/ts/mod_format/formatters/cleanup.formatter.ts +0 -1
- package/ts/mod_format/formatters/copy.formatter.ts +4 -8
- package/ts/mod_format/formatters/gitignore.formatter.ts +25 -29
- package/ts/mod_format/formatters/packagejson.formatter.ts +4 -4
- package/ts/mod_format/formatters/prettier.formatter.ts +3 -13
- package/ts/mod_format/formatters/smartconfig.formatter.ts +213 -0
- package/ts/mod_format/formatters/templates.formatter.ts +0 -9
- package/ts/mod_format/formatters/tsconfig.formatter.ts +6 -3
- package/ts/mod_format/index.ts +35 -98
- package/ts/mod_format/interfaces.format.ts +16 -19
- package/ts/mod_format/mod.plugins.ts +2 -12
- package/ts/mod_services/classes.globalregistry.ts +2 -2
- package/ts/mod_services/classes.servicemanager.ts +20 -20
- package/ts/plugins.ts +2 -2
- package/dist_ts/mod_format/classes.changecache.d.ts +0 -26
- package/dist_ts/mod_format/classes.changecache.js +0 -181
- package/dist_ts/mod_format/classes.dependency-analyzer.d.ts +0 -13
- package/dist_ts/mod_format/classes.dependency-analyzer.js +0 -93
- package/dist_ts/mod_format/classes.rollbackmanager.d.ts +0 -22
- package/dist_ts/mod_format/classes.rollbackmanager.js +0 -259
- package/dist_ts/mod_format/format.cleanup.d.ts +0 -2
- package/dist_ts/mod_format/format.cleanup.js +0 -25
- package/dist_ts/mod_format/format.copy.d.ts +0 -24
- package/dist_ts/mod_format/format.copy.js +0 -77
- package/dist_ts/mod_format/format.gitignore.d.ts +0 -2
- package/dist_ts/mod_format/format.gitignore.js +0 -48
- package/dist_ts/mod_format/format.license.d.ts +0 -2
- package/dist_ts/mod_format/format.license.js +0 -26
- package/dist_ts/mod_format/format.npmextra.d.ts +0 -5
- package/dist_ts/mod_format/format.npmextra.js +0 -125
- package/dist_ts/mod_format/format.packagejson.d.ts +0 -2
- package/dist_ts/mod_format/format.packagejson.js +0 -145
- package/dist_ts/mod_format/format.prettier.d.ts +0 -2
- package/dist_ts/mod_format/format.prettier.js +0 -56
- package/dist_ts/mod_format/format.readme.d.ts +0 -1
- package/dist_ts/mod_format/format.readme.js +0 -29
- package/dist_ts/mod_format/format.templates.d.ts +0 -5
- package/dist_ts/mod_format/format.templates.js +0 -68
- package/dist_ts/mod_format/format.tsconfig.d.ts +0 -2
- package/dist_ts/mod_format/format.tsconfig.js +0 -28
- package/dist_ts/mod_format/formatters/npmextra.formatter.js +0 -142
- package/ts/mod_format/classes.changecache.ts +0 -235
- package/ts/mod_format/classes.dependency-analyzer.ts +0 -117
- package/ts/mod_format/classes.rollbackmanager.ts +0 -340
- package/ts/mod_format/format.cleanup.ts +0 -26
- package/ts/mod_format/format.copy.ts +0 -93
- package/ts/mod_format/format.gitignore.ts +0 -54
- package/ts/mod_format/format.license.ts +0 -32
- package/ts/mod_format/format.npmextra.ts +0 -151
- package/ts/mod_format/format.packagejson.ts +0 -196
- package/ts/mod_format/format.prettier.ts +0 -66
- package/ts/mod_format/format.readme.ts +0 -29
- package/ts/mod_format/format.templates.ts +0 -79
- package/ts/mod_format/format.tsconfig.ts +0 -31
- package/ts/mod_format/formatters/npmextra.formatter.ts +0 -174
- /package/{npmextra.json → .smartconfig.json} +0 -0
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
export class ChangeCache {
|
|
4
|
-
cacheDir;
|
|
5
|
-
manifestPath;
|
|
6
|
-
cacheVersion = '1.0.0';
|
|
7
|
-
constructor() {
|
|
8
|
-
this.cacheDir = plugins.path.join(paths.cwd, '.nogit', 'gitzone-cache');
|
|
9
|
-
this.manifestPath = plugins.path.join(this.cacheDir, 'manifest.json');
|
|
10
|
-
}
|
|
11
|
-
async initialize() {
|
|
12
|
-
await plugins.smartfs.directory(this.cacheDir).recursive().create();
|
|
13
|
-
}
|
|
14
|
-
async getManifest() {
|
|
15
|
-
const defaultManifest = {
|
|
16
|
-
version: this.cacheVersion,
|
|
17
|
-
lastFormat: 0,
|
|
18
|
-
files: [],
|
|
19
|
-
};
|
|
20
|
-
const exists = await plugins.smartfs.file(this.manifestPath).exists();
|
|
21
|
-
if (!exists) {
|
|
22
|
-
return defaultManifest;
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
const content = (await plugins.smartfs
|
|
26
|
-
.file(this.manifestPath)
|
|
27
|
-
.encoding('utf8')
|
|
28
|
-
.read());
|
|
29
|
-
const manifest = JSON.parse(content);
|
|
30
|
-
// Validate the manifest structure
|
|
31
|
-
if (this.isValidManifest(manifest)) {
|
|
32
|
-
return manifest;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
console.warn('Invalid manifest structure, returning default manifest');
|
|
36
|
-
return defaultManifest;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
console.warn(`Failed to read cache manifest: ${error.message}, returning default manifest`);
|
|
41
|
-
// Try to delete the corrupted file
|
|
42
|
-
try {
|
|
43
|
-
await plugins.smartfs.file(this.manifestPath).delete();
|
|
44
|
-
}
|
|
45
|
-
catch (removeError) {
|
|
46
|
-
// Ignore removal errors
|
|
47
|
-
}
|
|
48
|
-
return defaultManifest;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async saveManifest(manifest) {
|
|
52
|
-
// Validate before saving
|
|
53
|
-
if (!this.isValidManifest(manifest)) {
|
|
54
|
-
throw new Error('Invalid manifest structure, cannot save');
|
|
55
|
-
}
|
|
56
|
-
// Ensure directory exists
|
|
57
|
-
await plugins.smartfs.directory(this.cacheDir).recursive().create();
|
|
58
|
-
// Write directly with proper JSON stringification
|
|
59
|
-
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
60
|
-
await plugins.smartfs
|
|
61
|
-
.file(this.manifestPath)
|
|
62
|
-
.encoding('utf8')
|
|
63
|
-
.write(jsonContent);
|
|
64
|
-
}
|
|
65
|
-
async hasFileChanged(filePath) {
|
|
66
|
-
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
67
|
-
? filePath
|
|
68
|
-
: plugins.path.join(paths.cwd, filePath);
|
|
69
|
-
// Check if file exists
|
|
70
|
-
const exists = await plugins.smartfs.file(absolutePath).exists();
|
|
71
|
-
if (!exists) {
|
|
72
|
-
return true; // File doesn't exist, so it's "changed" (will be created)
|
|
73
|
-
}
|
|
74
|
-
// Get current file stats
|
|
75
|
-
const stats = await plugins.smartfs.file(absolutePath).stat();
|
|
76
|
-
// Skip directories
|
|
77
|
-
if (stats.isDirectory) {
|
|
78
|
-
return false; // Directories are not processed
|
|
79
|
-
}
|
|
80
|
-
const content = (await plugins.smartfs
|
|
81
|
-
.file(absolutePath)
|
|
82
|
-
.encoding('utf8')
|
|
83
|
-
.read());
|
|
84
|
-
const currentChecksum = this.calculateChecksum(content);
|
|
85
|
-
// Get cached info
|
|
86
|
-
const manifest = await this.getManifest();
|
|
87
|
-
const cachedFile = manifest.files.find((f) => f.path === filePath);
|
|
88
|
-
if (!cachedFile) {
|
|
89
|
-
return true; // Not in cache, so it's changed
|
|
90
|
-
}
|
|
91
|
-
// Compare checksums
|
|
92
|
-
return (cachedFile.checksum !== currentChecksum ||
|
|
93
|
-
cachedFile.size !== stats.size ||
|
|
94
|
-
cachedFile.modified !== stats.mtime.getTime());
|
|
95
|
-
}
|
|
96
|
-
async updateFileCache(filePath) {
|
|
97
|
-
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
98
|
-
? filePath
|
|
99
|
-
: plugins.path.join(paths.cwd, filePath);
|
|
100
|
-
// Get current file stats
|
|
101
|
-
const stats = await plugins.smartfs.file(absolutePath).stat();
|
|
102
|
-
// Skip directories
|
|
103
|
-
if (stats.isDirectory) {
|
|
104
|
-
return; // Don't cache directories
|
|
105
|
-
}
|
|
106
|
-
const content = (await plugins.smartfs
|
|
107
|
-
.file(absolutePath)
|
|
108
|
-
.encoding('utf8')
|
|
109
|
-
.read());
|
|
110
|
-
const checksum = this.calculateChecksum(content);
|
|
111
|
-
// Update manifest
|
|
112
|
-
const manifest = await this.getManifest();
|
|
113
|
-
const existingIndex = manifest.files.findIndex((f) => f.path === filePath);
|
|
114
|
-
const cacheEntry = {
|
|
115
|
-
path: filePath,
|
|
116
|
-
checksum,
|
|
117
|
-
modified: stats.mtime.getTime(),
|
|
118
|
-
size: stats.size,
|
|
119
|
-
};
|
|
120
|
-
if (existingIndex !== -1) {
|
|
121
|
-
manifest.files[existingIndex] = cacheEntry;
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
manifest.files.push(cacheEntry);
|
|
125
|
-
}
|
|
126
|
-
manifest.lastFormat = Date.now();
|
|
127
|
-
await this.saveManifest(manifest);
|
|
128
|
-
}
|
|
129
|
-
async getChangedFiles(filePaths) {
|
|
130
|
-
const changedFiles = [];
|
|
131
|
-
for (const filePath of filePaths) {
|
|
132
|
-
if (await this.hasFileChanged(filePath)) {
|
|
133
|
-
changedFiles.push(filePath);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return changedFiles;
|
|
137
|
-
}
|
|
138
|
-
async clean() {
|
|
139
|
-
const manifest = await this.getManifest();
|
|
140
|
-
const validFiles = [];
|
|
141
|
-
// Remove entries for files that no longer exist
|
|
142
|
-
for (const file of manifest.files) {
|
|
143
|
-
const absolutePath = plugins.path.isAbsolute(file.path)
|
|
144
|
-
? file.path
|
|
145
|
-
: plugins.path.join(paths.cwd, file.path);
|
|
146
|
-
if (await plugins.smartfs.file(absolutePath).exists()) {
|
|
147
|
-
validFiles.push(file);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
manifest.files = validFiles;
|
|
151
|
-
await this.saveManifest(manifest);
|
|
152
|
-
}
|
|
153
|
-
calculateChecksum(content) {
|
|
154
|
-
return plugins.crypto.createHash('sha256').update(content).digest('hex');
|
|
155
|
-
}
|
|
156
|
-
isValidManifest(manifest) {
|
|
157
|
-
// Check if manifest has the required structure
|
|
158
|
-
if (!manifest || typeof manifest !== 'object') {
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
// Check required fields
|
|
162
|
-
if (typeof manifest.version !== 'string' ||
|
|
163
|
-
typeof manifest.lastFormat !== 'number' ||
|
|
164
|
-
!Array.isArray(manifest.files)) {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
// Check each file entry
|
|
168
|
-
for (const file of manifest.files) {
|
|
169
|
-
if (!file ||
|
|
170
|
-
typeof file !== 'object' ||
|
|
171
|
-
typeof file.path !== 'string' ||
|
|
172
|
-
typeof file.checksum !== 'string' ||
|
|
173
|
-
typeof file.modified !== 'number' ||
|
|
174
|
-
typeof file.size !== 'number') {
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jaGFuZ2VjYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9mb3JtYXQvY2xhc3Nlcy5jaGFuZ2VjYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBZXJDLE1BQU0sT0FBTyxXQUFXO0lBQ2QsUUFBUSxDQUFTO0lBQ2pCLFlBQVksQ0FBUztJQUNyQixZQUFZLEdBQUcsT0FBTyxDQUFDO0lBRS9CO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxlQUFlLEdBQW1CO1lBQ3RDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMxQixVQUFVLEVBQUUsQ0FBQztZQUNiLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sZUFBZSxDQUFDO1FBQ3pC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
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { BaseFormatter } from './classes.baseformatter.js';
|
|
2
|
-
export interface IModuleDependency {
|
|
3
|
-
module: string;
|
|
4
|
-
dependencies: Set<string>;
|
|
5
|
-
dependents: Set<string>;
|
|
6
|
-
}
|
|
7
|
-
export declare class DependencyAnalyzer {
|
|
8
|
-
private moduleDependencies;
|
|
9
|
-
constructor();
|
|
10
|
-
private initializeDependencies;
|
|
11
|
-
getExecutionGroups(modules: BaseFormatter[]): BaseFormatter[][];
|
|
12
|
-
canRunInParallel(module1: string, module2: string): boolean;
|
|
13
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import { BaseFormatter } from './classes.baseformatter.js';
|
|
3
|
-
export class DependencyAnalyzer {
|
|
4
|
-
moduleDependencies = new Map();
|
|
5
|
-
constructor() {
|
|
6
|
-
this.initializeDependencies();
|
|
7
|
-
}
|
|
8
|
-
initializeDependencies() {
|
|
9
|
-
// Define dependencies between format modules
|
|
10
|
-
const dependencies = {
|
|
11
|
-
cleanup: [], // No dependencies
|
|
12
|
-
npmextra: [], // No dependencies
|
|
13
|
-
license: ['npmextra'], // Depends on npmextra for config
|
|
14
|
-
packagejson: ['npmextra'], // Depends on npmextra for config
|
|
15
|
-
templates: ['npmextra', 'packagejson'], // Depends on both
|
|
16
|
-
gitignore: ['templates'], // Depends on templates
|
|
17
|
-
tsconfig: ['packagejson'], // Depends on package.json
|
|
18
|
-
prettier: [
|
|
19
|
-
'cleanup',
|
|
20
|
-
'npmextra',
|
|
21
|
-
'packagejson',
|
|
22
|
-
'templates',
|
|
23
|
-
'gitignore',
|
|
24
|
-
'tsconfig',
|
|
25
|
-
], // Runs after most others
|
|
26
|
-
readme: ['npmextra', 'packagejson'], // Depends on project metadata
|
|
27
|
-
copy: ['npmextra'], // Depends on config
|
|
28
|
-
};
|
|
29
|
-
// Initialize all modules
|
|
30
|
-
for (const [module, deps] of Object.entries(dependencies)) {
|
|
31
|
-
this.moduleDependencies.set(module, {
|
|
32
|
-
module,
|
|
33
|
-
dependencies: new Set(deps),
|
|
34
|
-
dependents: new Set(),
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
// Build reverse dependencies (dependents)
|
|
38
|
-
for (const [module, deps] of Object.entries(dependencies)) {
|
|
39
|
-
for (const dep of deps) {
|
|
40
|
-
const depModule = this.moduleDependencies.get(dep);
|
|
41
|
-
if (depModule) {
|
|
42
|
-
depModule.dependents.add(module);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
getExecutionGroups(modules) {
|
|
48
|
-
const modulesMap = new Map(modules.map((m) => [m.name, m]));
|
|
49
|
-
const executed = new Set();
|
|
50
|
-
const groups = [];
|
|
51
|
-
while (executed.size < modules.length) {
|
|
52
|
-
const currentGroup = [];
|
|
53
|
-
for (const module of modules) {
|
|
54
|
-
if (executed.has(module.name))
|
|
55
|
-
continue;
|
|
56
|
-
const dependency = this.moduleDependencies.get(module.name);
|
|
57
|
-
if (!dependency) {
|
|
58
|
-
// Unknown module, execute in isolation
|
|
59
|
-
currentGroup.push(module);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
// Check if all dependencies have been executed
|
|
63
|
-
const allDepsExecuted = Array.from(dependency.dependencies).every((dep) => executed.has(dep) || !modulesMap.has(dep));
|
|
64
|
-
if (allDepsExecuted) {
|
|
65
|
-
currentGroup.push(module);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (currentGroup.length === 0) {
|
|
69
|
-
// Circular dependency or error - execute remaining modules
|
|
70
|
-
for (const module of modules) {
|
|
71
|
-
if (!executed.has(module.name)) {
|
|
72
|
-
currentGroup.push(module);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
currentGroup.forEach((m) => executed.add(m.name));
|
|
77
|
-
groups.push(currentGroup);
|
|
78
|
-
}
|
|
79
|
-
return groups;
|
|
80
|
-
}
|
|
81
|
-
canRunInParallel(module1, module2) {
|
|
82
|
-
const dep1 = this.moduleDependencies.get(module1);
|
|
83
|
-
const dep2 = this.moduleDependencies.get(module2);
|
|
84
|
-
if (!dep1 || !dep2)
|
|
85
|
-
return false;
|
|
86
|
-
// Check if module1 depends on module2 or vice versa
|
|
87
|
-
return (!dep1.dependencies.has(module2) &&
|
|
88
|
-
!dep2.dependencies.has(module1) &&
|
|
89
|
-
!dep1.dependents.has(module2) &&
|
|
90
|
-
!dep2.dependents.has(module1));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kZXBlbmRlbmN5LWFuYWx5emVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2Zvcm1hdC9jbGFzc2VzLmRlcGVuZGVuY3ktYW5hbHl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFRM0QsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixrQkFBa0IsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV2RTtRQUNFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsNkNBQTZDO1FBQzdDLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE9BQU8sRUFBRSxFQUFFLEVBQUUsa0JBQWtCO1lBQy9CLFFBQVEsRUFBRSxFQUFFLEVBQUUsa0JBQWtCO1lBQ2hDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGlDQUFpQztZQUN4RCxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxpQ0FBaUM7WUFDNUQsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxFQUFFLGtCQUFrQjtZQUMxRCxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSx1QkFBdUI7WUFDakQsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsMEJBQTBCO1lBQ3JELFFBQVEsRUFBRTtnQkFDUixTQUFTO2dCQUNULFVBQVU7Z0JBQ1YsYUFBYTtnQkFDYixXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsVUFBVTthQUNYLEVBQUUseUJBQXlCO1lBQzVCLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBRSw4QkFBOEI7WUFDbkUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsb0JBQW9CO1NBQ3pDLENBQUM7UUFFRix5QkFB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
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { IFormatOperation } from './interfaces.format.js';
|
|
2
|
-
export declare class RollbackManager {
|
|
3
|
-
private backupDir;
|
|
4
|
-
private manifestPath;
|
|
5
|
-
constructor();
|
|
6
|
-
createOperation(): Promise<IFormatOperation>;
|
|
7
|
-
backupFile(filepath: string, operationId: string): Promise<void>;
|
|
8
|
-
rollback(operationId: string): Promise<void>;
|
|
9
|
-
markComplete(operationId: string): Promise<void>;
|
|
10
|
-
cleanOldBackups(retentionDays: number): Promise<void>;
|
|
11
|
-
verifyBackup(operationId: string): Promise<boolean>;
|
|
12
|
-
listBackups(): Promise<IFormatOperation[]>;
|
|
13
|
-
private ensureBackupDir;
|
|
14
|
-
private generateOperationId;
|
|
15
|
-
private getBackupPath;
|
|
16
|
-
private calculateChecksum;
|
|
17
|
-
private getManifest;
|
|
18
|
-
private saveManifest;
|
|
19
|
-
private getOperation;
|
|
20
|
-
private updateManifest;
|
|
21
|
-
private isValidManifest;
|
|
22
|
-
}
|
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
export class RollbackManager {
|
|
4
|
-
backupDir;
|
|
5
|
-
manifestPath;
|
|
6
|
-
constructor() {
|
|
7
|
-
this.backupDir = plugins.path.join(paths.cwd, '.nogit', 'gitzone-backups');
|
|
8
|
-
this.manifestPath = plugins.path.join(this.backupDir, 'manifest.json');
|
|
9
|
-
}
|
|
10
|
-
async createOperation() {
|
|
11
|
-
await this.ensureBackupDir();
|
|
12
|
-
const operation = {
|
|
13
|
-
id: this.generateOperationId(),
|
|
14
|
-
timestamp: Date.now(),
|
|
15
|
-
files: [],
|
|
16
|
-
status: 'pending',
|
|
17
|
-
};
|
|
18
|
-
await this.updateManifest(operation);
|
|
19
|
-
return operation;
|
|
20
|
-
}
|
|
21
|
-
async backupFile(filepath, operationId) {
|
|
22
|
-
const operation = await this.getOperation(operationId);
|
|
23
|
-
if (!operation) {
|
|
24
|
-
throw new Error(`Operation ${operationId} not found`);
|
|
25
|
-
}
|
|
26
|
-
const absolutePath = plugins.path.isAbsolute(filepath)
|
|
27
|
-
? filepath
|
|
28
|
-
: plugins.path.join(paths.cwd, filepath);
|
|
29
|
-
// Check if file exists
|
|
30
|
-
const exists = await plugins.smartfs.file(absolutePath).exists();
|
|
31
|
-
if (!exists) {
|
|
32
|
-
// File doesn't exist yet (will be created), so we skip backup
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
// Read file content and metadata
|
|
36
|
-
const content = (await plugins.smartfs
|
|
37
|
-
.file(absolutePath)
|
|
38
|
-
.encoding('utf8')
|
|
39
|
-
.read());
|
|
40
|
-
const stats = await plugins.smartfs.file(absolutePath).stat();
|
|
41
|
-
const checksum = this.calculateChecksum(content);
|
|
42
|
-
// Create backup
|
|
43
|
-
const backupPath = this.getBackupPath(operationId, filepath);
|
|
44
|
-
await plugins.smartfs
|
|
45
|
-
.directory(plugins.path.dirname(backupPath))
|
|
46
|
-
.recursive()
|
|
47
|
-
.create();
|
|
48
|
-
await plugins.smartfs.file(backupPath).encoding('utf8').write(content);
|
|
49
|
-
// Update operation
|
|
50
|
-
operation.files.push({
|
|
51
|
-
path: filepath,
|
|
52
|
-
originalContent: content,
|
|
53
|
-
checksum,
|
|
54
|
-
permissions: stats.mode.toString(8),
|
|
55
|
-
});
|
|
56
|
-
await this.updateManifest(operation);
|
|
57
|
-
}
|
|
58
|
-
async rollback(operationId) {
|
|
59
|
-
const operation = await this.getOperation(operationId);
|
|
60
|
-
if (!operation) {
|
|
61
|
-
// Operation doesn't exist, might have already been rolled back or never created
|
|
62
|
-
console.warn(`Operation ${operationId} not found for rollback, skipping`);
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
if (operation.status === 'rolled-back') {
|
|
66
|
-
throw new Error(`Operation ${operationId} has already been rolled back`);
|
|
67
|
-
}
|
|
68
|
-
// Restore files in reverse order
|
|
69
|
-
for (let i = operation.files.length - 1; i >= 0; i--) {
|
|
70
|
-
const file = operation.files[i];
|
|
71
|
-
const absolutePath = plugins.path.isAbsolute(file.path)
|
|
72
|
-
? file.path
|
|
73
|
-
: plugins.path.join(paths.cwd, file.path);
|
|
74
|
-
// Verify backup integrity
|
|
75
|
-
const backupPath = this.getBackupPath(operationId, file.path);
|
|
76
|
-
const backupContent = await plugins.smartfs
|
|
77
|
-
.file(backupPath)
|
|
78
|
-
.encoding('utf8')
|
|
79
|
-
.read();
|
|
80
|
-
const backupChecksum = this.calculateChecksum(backupContent);
|
|
81
|
-
if (backupChecksum !== file.checksum) {
|
|
82
|
-
throw new Error(`Backup integrity check failed for ${file.path}`);
|
|
83
|
-
}
|
|
84
|
-
// Restore file
|
|
85
|
-
await plugins.smartfs
|
|
86
|
-
.file(absolutePath)
|
|
87
|
-
.encoding('utf8')
|
|
88
|
-
.write(file.originalContent);
|
|
89
|
-
// Restore permissions
|
|
90
|
-
const mode = parseInt(file.permissions, 8);
|
|
91
|
-
// Note: Permissions restoration may not work on all platforms
|
|
92
|
-
}
|
|
93
|
-
// Update operation status
|
|
94
|
-
operation.status = 'rolled-back';
|
|
95
|
-
await this.updateManifest(operation);
|
|
96
|
-
}
|
|
97
|
-
async markComplete(operationId) {
|
|
98
|
-
const operation = await this.getOperation(operationId);
|
|
99
|
-
if (!operation) {
|
|
100
|
-
throw new Error(`Operation ${operationId} not found`);
|
|
101
|
-
}
|
|
102
|
-
operation.status = 'completed';
|
|
103
|
-
await this.updateManifest(operation);
|
|
104
|
-
}
|
|
105
|
-
async cleanOldBackups(retentionDays) {
|
|
106
|
-
const manifest = await this.getManifest();
|
|
107
|
-
const cutoffTime = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
|
|
108
|
-
const operationsToDelete = manifest.operations.filter((op) => op.timestamp < cutoffTime && op.status === 'completed');
|
|
109
|
-
for (const operation of operationsToDelete) {
|
|
110
|
-
// Remove backup files
|
|
111
|
-
const operationDir = plugins.path.join(this.backupDir, 'operations', operation.id);
|
|
112
|
-
await plugins.smartfs.directory(operationDir).recursive().delete();
|
|
113
|
-
// Remove from manifest
|
|
114
|
-
manifest.operations = manifest.operations.filter((op) => op.id !== operation.id);
|
|
115
|
-
}
|
|
116
|
-
await this.saveManifest(manifest);
|
|
117
|
-
}
|
|
118
|
-
async verifyBackup(operationId) {
|
|
119
|
-
const operation = await this.getOperation(operationId);
|
|
120
|
-
if (!operation) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
for (const file of operation.files) {
|
|
124
|
-
const backupPath = this.getBackupPath(operationId, file.path);
|
|
125
|
-
const exists = await plugins.smartfs.file(backupPath).exists();
|
|
126
|
-
if (!exists) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
const content = await plugins.smartfs
|
|
130
|
-
.file(backupPath)
|
|
131
|
-
.encoding('utf8')
|
|
132
|
-
.read();
|
|
133
|
-
const checksum = this.calculateChecksum(content);
|
|
134
|
-
if (checksum !== file.checksum) {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
async listBackups() {
|
|
141
|
-
const manifest = await this.getManifest();
|
|
142
|
-
return manifest.operations;
|
|
143
|
-
}
|
|
144
|
-
async ensureBackupDir() {
|
|
145
|
-
await plugins.smartfs.directory(this.backupDir).recursive().create();
|
|
146
|
-
await plugins.smartfs
|
|
147
|
-
.directory(plugins.path.join(this.backupDir, 'operations'))
|
|
148
|
-
.recursive()
|
|
149
|
-
.create();
|
|
150
|
-
}
|
|
151
|
-
generateOperationId() {
|
|
152
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
153
|
-
const random = Math.random().toString(36).substring(2, 8);
|
|
154
|
-
return `${timestamp}-${random}`;
|
|
155
|
-
}
|
|
156
|
-
getBackupPath(operationId, filepath) {
|
|
157
|
-
const filename = plugins.path.basename(filepath);
|
|
158
|
-
const dir = plugins.path.dirname(filepath);
|
|
159
|
-
const safeDir = dir.replace(/[/\\]/g, '__');
|
|
160
|
-
return plugins.path.join(this.backupDir, 'operations', operationId, 'files', safeDir, `${filename}.backup`);
|
|
161
|
-
}
|
|
162
|
-
calculateChecksum(content) {
|
|
163
|
-
return plugins.crypto.createHash('sha256').update(content).digest('hex');
|
|
164
|
-
}
|
|
165
|
-
async getManifest() {
|
|
166
|
-
const defaultManifest = { operations: [] };
|
|
167
|
-
const exists = await plugins.smartfs.file(this.manifestPath).exists();
|
|
168
|
-
if (!exists) {
|
|
169
|
-
return defaultManifest;
|
|
170
|
-
}
|
|
171
|
-
try {
|
|
172
|
-
const content = (await plugins.smartfs
|
|
173
|
-
.file(this.manifestPath)
|
|
174
|
-
.encoding('utf8')
|
|
175
|
-
.read());
|
|
176
|
-
const manifest = JSON.parse(content);
|
|
177
|
-
// Validate the manifest structure
|
|
178
|
-
if (this.isValidManifest(manifest)) {
|
|
179
|
-
return manifest;
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
console.warn('Invalid rollback manifest structure, returning default manifest');
|
|
183
|
-
return defaultManifest;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
console.warn(`Failed to read rollback manifest: ${error.message}, returning default manifest`);
|
|
188
|
-
// Try to delete the corrupted file
|
|
189
|
-
try {
|
|
190
|
-
await plugins.smartfs.file(this.manifestPath).delete();
|
|
191
|
-
}
|
|
192
|
-
catch (removeError) {
|
|
193
|
-
// Ignore removal errors
|
|
194
|
-
}
|
|
195
|
-
return defaultManifest;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
async saveManifest(manifest) {
|
|
199
|
-
// Validate before saving
|
|
200
|
-
if (!this.isValidManifest(manifest)) {
|
|
201
|
-
throw new Error('Invalid rollback manifest structure, cannot save');
|
|
202
|
-
}
|
|
203
|
-
// Ensure directory exists
|
|
204
|
-
await this.ensureBackupDir();
|
|
205
|
-
// Write directly with proper JSON stringification
|
|
206
|
-
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
207
|
-
await plugins.smartfs
|
|
208
|
-
.file(this.manifestPath)
|
|
209
|
-
.encoding('utf8')
|
|
210
|
-
.write(jsonContent);
|
|
211
|
-
}
|
|
212
|
-
async getOperation(operationId) {
|
|
213
|
-
const manifest = await this.getManifest();
|
|
214
|
-
return manifest.operations.find((op) => op.id === operationId) || null;
|
|
215
|
-
}
|
|
216
|
-
async updateManifest(operation) {
|
|
217
|
-
const manifest = await this.getManifest();
|
|
218
|
-
const existingIndex = manifest.operations.findIndex((op) => op.id === operation.id);
|
|
219
|
-
if (existingIndex !== -1) {
|
|
220
|
-
manifest.operations[existingIndex] = operation;
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
manifest.operations.push(operation);
|
|
224
|
-
}
|
|
225
|
-
await this.saveManifest(manifest);
|
|
226
|
-
}
|
|
227
|
-
isValidManifest(manifest) {
|
|
228
|
-
// Check if manifest has the required structure
|
|
229
|
-
if (!manifest || typeof manifest !== 'object') {
|
|
230
|
-
return false;
|
|
231
|
-
}
|
|
232
|
-
// Check required fields
|
|
233
|
-
if (!Array.isArray(manifest.operations)) {
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
|
-
// Check each operation entry
|
|
237
|
-
for (const operation of manifest.operations) {
|
|
238
|
-
if (!operation ||
|
|
239
|
-
typeof operation !== 'object' ||
|
|
240
|
-
typeof operation.id !== 'string' ||
|
|
241
|
-
typeof operation.timestamp !== 'number' ||
|
|
242
|
-
typeof operation.status !== 'string' ||
|
|
243
|
-
!Array.isArray(operation.files)) {
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
// Check each file in the operation
|
|
247
|
-
for (const file of operation.files) {
|
|
248
|
-
if (!file ||
|
|
249
|
-
typeof file !== 'object' ||
|
|
250
|
-
typeof file.path !== 'string' ||
|
|
251
|
-
typeof file.checksum !== 'string') {
|
|
252
|
-
return false;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
return true;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb2xsYmFja21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2NsYXNzZXMucm9sbGJhY2ttYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFHckMsTUFBTSxPQUFPLGVBQWU7SUFDbEIsU0FBUyxDQUFTO0lBQ2xCLFlBQVksQ0FBUztJQUU3QjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTdCLE1BQU0sU0FBUyxHQUFxQjtZQUNsQyxFQUFFLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQztRQUVGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFnQixFQUFFLFdBQW1CO1FBQ3BELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7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
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
import { logger } from '../gitzone.logging.js';
|
|
4
|
-
import { Project } from '../classes.project.js';
|
|
5
|
-
const filesToDelete = [
|
|
6
|
-
'defaults.yml',
|
|
7
|
-
'yarn.lock',
|
|
8
|
-
'package-lock.json',
|
|
9
|
-
'tslint.json',
|
|
10
|
-
];
|
|
11
|
-
export const run = async (projectArg) => {
|
|
12
|
-
for (const relativeFilePath of filesToDelete) {
|
|
13
|
-
const fileExists = await plugins.smartfs.file(relativeFilePath).exists();
|
|
14
|
-
if (fileExists) {
|
|
15
|
-
logger.log('info', `Found ${relativeFilePath}! Removing it!`);
|
|
16
|
-
await plugins.smartfs
|
|
17
|
-
.file(plugins.path.join(paths.cwd, relativeFilePath))
|
|
18
|
-
.delete();
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
logger.log('info', `Project is free of ${relativeFilePath}`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmNsZWFudXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L2Zvcm1hdC5jbGVhbnVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBRztJQUNwQixjQUFjO0lBQ2QsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixhQUFhO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsVUFBbUIsRUFBRSxFQUFFO0lBQy9DLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsZ0JBQWdCLGdCQUFnQixDQUFDLENBQUM7WUFDOUQsTUFBTSxPQUFPLENBQUMsT0FBTztpQkFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztpQkFDcEQsTUFBTSxFQUFFLENBQUM7UUFDZCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHNCQUFzQixnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUMifQ==
|