@git.zone/cli 2.13.10 → 2.13.12
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/{npmextra/npmextra.json → smartconfig/_smartconfig.json} +3 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- 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.d.ts +4 -0
- package/dist_ts/mod_format/formatters/templates.formatter.js +50 -43
- 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 +3 -7
- package/dist_ts/mod_format/mod.plugins.js +4 -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 +5 -11
- 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 +55 -43
- 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 +4 -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,10 +1,11 @@
|
|
|
1
1
|
import * as plugins from './mod.plugins.js';
|
|
2
2
|
import { FormatContext } from './classes.formatcontext.js';
|
|
3
3
|
import { Project } from '../classes.project.js';
|
|
4
|
+
import { FormatStats } from './classes.formatstats.js';
|
|
4
5
|
export class BaseFormatter {
|
|
5
6
|
context;
|
|
6
7
|
project;
|
|
7
|
-
stats;
|
|
8
|
+
stats;
|
|
8
9
|
constructor(context, project) {
|
|
9
10
|
this.context = context;
|
|
10
11
|
this.project = project;
|
|
@@ -27,10 +28,6 @@ export class BaseFormatter {
|
|
|
27
28
|
}
|
|
28
29
|
await this.postExecute();
|
|
29
30
|
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
// Don't rollback here - let the FormatPlanner handle it
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
31
|
finally {
|
|
35
32
|
this.stats.endModule(this.name, startTime);
|
|
36
33
|
}
|
|
@@ -42,12 +39,9 @@ export class BaseFormatter {
|
|
|
42
39
|
// Override in subclasses if needed
|
|
43
40
|
}
|
|
44
41
|
async modifyFile(filepath, content) {
|
|
45
|
-
// Validate filepath before writing
|
|
46
42
|
if (!filepath || filepath.trim() === '') {
|
|
47
43
|
throw new Error(`Invalid empty filepath in modifyFile`);
|
|
48
44
|
}
|
|
49
|
-
// Ensure we have a proper path with directory component
|
|
50
|
-
// If the path has no directory component (e.g., "package.json"), prepend "./"
|
|
51
45
|
let normalizedPath = filepath;
|
|
52
46
|
if (!plugins.path.parse(filepath).dir) {
|
|
53
47
|
normalizedPath = './' + filepath;
|
|
@@ -55,38 +49,39 @@ export class BaseFormatter {
|
|
|
55
49
|
await plugins.smartfs.file(normalizedPath).encoding('utf8').write(content);
|
|
56
50
|
}
|
|
57
51
|
async createFile(filepath, content) {
|
|
58
|
-
|
|
52
|
+
let normalizedPath = filepath;
|
|
53
|
+
if (!plugins.path.parse(filepath).dir) {
|
|
54
|
+
normalizedPath = './' + filepath;
|
|
55
|
+
}
|
|
56
|
+
// Ensure parent directory exists
|
|
57
|
+
const dir = plugins.path.dirname(normalizedPath);
|
|
58
|
+
if (dir && dir !== '.') {
|
|
59
|
+
await plugins.smartfs.directory(dir).recursive().create();
|
|
60
|
+
}
|
|
61
|
+
await plugins.smartfs.file(normalizedPath).encoding('utf8').write(content);
|
|
59
62
|
}
|
|
60
63
|
async deleteFile(filepath) {
|
|
61
64
|
await plugins.smartfs.file(filepath).delete();
|
|
62
65
|
}
|
|
63
|
-
async shouldProcessFile(filepath) {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
66
|
/**
|
|
67
67
|
* Check for diffs without applying changes
|
|
68
|
-
* Returns information about what would change
|
|
69
68
|
*/
|
|
70
69
|
async check() {
|
|
71
70
|
const changes = await this.analyze();
|
|
72
71
|
const diffs = [];
|
|
73
72
|
for (const change of changes) {
|
|
74
|
-
// Skip generic changes that don't have actual content
|
|
75
73
|
if (change.path === '<various files>') {
|
|
76
74
|
continue;
|
|
77
75
|
}
|
|
78
76
|
if (change.type === 'modify' || change.type === 'create') {
|
|
79
|
-
// Read current content if file exists
|
|
80
77
|
let currentContent;
|
|
81
78
|
try {
|
|
82
79
|
currentContent = await plugins.smartfs.file(change.path).encoding('utf8').read();
|
|
83
80
|
}
|
|
84
81
|
catch {
|
|
85
|
-
// File doesn't exist yet
|
|
86
82
|
currentContent = undefined;
|
|
87
83
|
}
|
|
88
84
|
const newContent = change.content;
|
|
89
|
-
// Check if there's an actual diff
|
|
90
85
|
if (currentContent !== newContent && newContent !== undefined) {
|
|
91
86
|
diffs.push({
|
|
92
87
|
path: change.path,
|
|
@@ -97,7 +92,6 @@ export class BaseFormatter {
|
|
|
97
92
|
}
|
|
98
93
|
}
|
|
99
94
|
else if (change.type === 'delete') {
|
|
100
|
-
// Check if file exists before marking for deletion
|
|
101
95
|
try {
|
|
102
96
|
const currentContent = await plugins.smartfs.file(change.path).encoding('utf8').read();
|
|
103
97
|
diffs.push({
|
|
@@ -117,9 +111,6 @@ export class BaseFormatter {
|
|
|
117
111
|
diffs,
|
|
118
112
|
};
|
|
119
113
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Display a single diff using smartdiff
|
|
122
|
-
*/
|
|
123
114
|
displayDiff(diff) {
|
|
124
115
|
console.log(`\n--- ${diff.path}`);
|
|
125
116
|
if (diff.before && diff.after) {
|
|
@@ -131,7 +122,6 @@ export class BaseFormatter {
|
|
|
131
122
|
}
|
|
132
123
|
else if (diff.after && !diff.before) {
|
|
133
124
|
console.log(' (new file)');
|
|
134
|
-
// Show first few lines of new content
|
|
135
125
|
const lines = diff.after.split('\n').slice(0, 10);
|
|
136
126
|
lines.forEach(line => console.log(` + ${line}`));
|
|
137
127
|
if (diff.after.split('\n').length > 10) {
|
|
@@ -142,9 +132,6 @@ export class BaseFormatter {
|
|
|
142
132
|
console.log(' (file will be deleted)');
|
|
143
133
|
}
|
|
144
134
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Display all diffs from a check result
|
|
147
|
-
*/
|
|
148
135
|
displayAllDiffs(result) {
|
|
149
136
|
if (!result.hasDiff) {
|
|
150
137
|
console.log(' No changes detected');
|
|
@@ -155,4 +142,4 @@ export class BaseFormatter {
|
|
|
155
142
|
}
|
|
156
143
|
}
|
|
157
144
|
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5iYXNlZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2Zvcm1hdC9jbGFzc2VzLmJhc2Vmb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxNQUFNLE9BQWdCLGFBQWE7SUFDdkIsT0FBTyxDQUFnQjtJQUN2QixPQUFPLENBQVU7SUFDakIsS0FBSyxDQUFjO0lBRTdCLFlBQVksT0FBc0IsRUFBRSxPQUFnQjtRQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBTUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUF5QjtRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRXhCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1C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
|
|
@@ -3,11 +3,9 @@ import { BaseFormatter } from './classes.baseformatter.js';
|
|
|
3
3
|
import type { IFormatPlan } from './interfaces.format.js';
|
|
4
4
|
export declare class FormatPlanner {
|
|
5
5
|
private plannedChanges;
|
|
6
|
-
private dependencyAnalyzer;
|
|
7
6
|
private diffReporter;
|
|
8
7
|
planFormat(modules: BaseFormatter[]): Promise<IFormatPlan>;
|
|
9
|
-
executePlan(plan: IFormatPlan, modules: BaseFormatter[], context: FormatContext
|
|
8
|
+
executePlan(plan: IFormatPlan, modules: BaseFormatter[], context: FormatContext): Promise<void>;
|
|
10
9
|
displayPlan(plan: IFormatPlan, detailed?: boolean): Promise<void>;
|
|
11
|
-
private getModuleIcon;
|
|
12
10
|
private getChangeIcon;
|
|
13
11
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as plugins from './mod.plugins.js';
|
|
2
2
|
import { FormatContext } from './classes.formatcontext.js';
|
|
3
3
|
import { BaseFormatter } from './classes.baseformatter.js';
|
|
4
|
+
import { getModuleIcon } from './interfaces.format.js';
|
|
4
5
|
import { logger } from '../gitzone.logging.js';
|
|
5
|
-
import { DependencyAnalyzer } from './classes.dependency-analyzer.js';
|
|
6
6
|
import { DiffReporter } from './classes.diffreporter.js';
|
|
7
7
|
export class FormatPlanner {
|
|
8
8
|
plannedChanges = new Map();
|
|
9
|
-
dependencyAnalyzer = new DependencyAnalyzer();
|
|
10
9
|
diffReporter = new DiffReporter();
|
|
11
10
|
async planFormat(modules) {
|
|
12
11
|
const plan = {
|
|
@@ -15,7 +14,6 @@ export class FormatPlanner {
|
|
|
15
14
|
filesAdded: 0,
|
|
16
15
|
filesModified: 0,
|
|
17
16
|
filesRemoved: 0,
|
|
18
|
-
estimatedTime: 0,
|
|
19
17
|
},
|
|
20
18
|
changes: [],
|
|
21
19
|
warnings: [],
|
|
@@ -26,7 +24,6 @@ export class FormatPlanner {
|
|
|
26
24
|
this.plannedChanges.set(module.name, changes);
|
|
27
25
|
for (const change of changes) {
|
|
28
26
|
plan.changes.push(change);
|
|
29
|
-
// Update summary
|
|
30
27
|
switch (change.type) {
|
|
31
28
|
case 'create':
|
|
32
29
|
plan.summary.filesAdded++;
|
|
@@ -52,27 +49,19 @@ export class FormatPlanner {
|
|
|
52
49
|
plan.summary.filesAdded +
|
|
53
50
|
plan.summary.filesModified +
|
|
54
51
|
plan.summary.filesRemoved;
|
|
55
|
-
plan.summary.estimatedTime = plan.summary.totalFiles * 100; // 100ms per file estimate
|
|
56
52
|
return plan;
|
|
57
53
|
}
|
|
58
|
-
async executePlan(plan, modules, context
|
|
54
|
+
async executePlan(plan, modules, context) {
|
|
59
55
|
const startTime = Date.now();
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
logger.log('info', `Executing ${module.name} formatter...`);
|
|
66
|
-
await module.execute(changes);
|
|
67
|
-
}
|
|
56
|
+
for (const module of modules) {
|
|
57
|
+
const changes = this.plannedChanges.get(module.name) || [];
|
|
58
|
+
if (changes.length > 0) {
|
|
59
|
+
logger.log('info', `Executing ${module.name} formatter...`);
|
|
60
|
+
await module.execute(changes);
|
|
68
61
|
}
|
|
69
|
-
const endTime = Date.now();
|
|
70
|
-
const duration = endTime - startTime;
|
|
71
|
-
logger.log('info', `Format operations completed in ${duration}ms`);
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
throw error;
|
|
75
62
|
}
|
|
63
|
+
const duration = Date.now() - startTime;
|
|
64
|
+
logger.log('info', `Format operations completed in ${duration}ms`);
|
|
76
65
|
}
|
|
77
66
|
async displayPlan(plan, detailed = false) {
|
|
78
67
|
console.log('\nFormat Plan:');
|
|
@@ -83,7 +72,6 @@ export class FormatPlanner {
|
|
|
83
72
|
console.log(` • ${plan.summary.filesRemoved} deleted files`);
|
|
84
73
|
console.log('');
|
|
85
74
|
console.log('Changes by module:');
|
|
86
|
-
// Group changes by module
|
|
87
75
|
const changesByModule = new Map();
|
|
88
76
|
for (const change of plan.changes) {
|
|
89
77
|
const moduleChanges = changesByModule.get(change.module) || [];
|
|
@@ -91,11 +79,10 @@ export class FormatPlanner {
|
|
|
91
79
|
changesByModule.set(change.module, moduleChanges);
|
|
92
80
|
}
|
|
93
81
|
for (const [module, changes] of changesByModule) {
|
|
94
|
-
console.log(`\n${
|
|
82
|
+
console.log(`\n${getModuleIcon(module)} ${module} (${changes.length} ${changes.length === 1 ? 'file' : 'files'})`);
|
|
95
83
|
for (const change of changes) {
|
|
96
84
|
const icon = this.getChangeIcon(change.type);
|
|
97
85
|
console.log(` ${icon} ${change.path} - ${change.description}`);
|
|
98
|
-
// Show diff for modified files if detailed view is requested
|
|
99
86
|
if (detailed && change.type === 'modify') {
|
|
100
87
|
const diff = await this.diffReporter.generateDiffForChange(change);
|
|
101
88
|
if (diff) {
|
|
@@ -113,21 +100,6 @@ export class FormatPlanner {
|
|
|
113
100
|
}
|
|
114
101
|
console.log('\n' + '━'.repeat(50));
|
|
115
102
|
}
|
|
116
|
-
getModuleIcon(module) {
|
|
117
|
-
const icons = {
|
|
118
|
-
packagejson: '📦',
|
|
119
|
-
license: '📝',
|
|
120
|
-
tsconfig: '🔧',
|
|
121
|
-
cleanup: '🚮',
|
|
122
|
-
gitignore: '🔒',
|
|
123
|
-
prettier: '✨',
|
|
124
|
-
readme: '📖',
|
|
125
|
-
templates: '📄',
|
|
126
|
-
npmextra: '⚙️',
|
|
127
|
-
copy: '📋',
|
|
128
|
-
};
|
|
129
|
-
return icons[module] || '📁';
|
|
130
|
-
}
|
|
131
103
|
getChangeIcon(type) {
|
|
132
104
|
switch (type) {
|
|
133
105
|
case 'create':
|
|
@@ -139,4 +111,4 @@ export class FormatPlanner {
|
|
|
139
111
|
}
|
|
140
112
|
}
|
|
141
113
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5mb3JtYXRwbGFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2Zvcm1hdC9jbGFzc2VzLmZvcm1hdHBsYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE1BQU0sT0FBTyxhQUFhO0lBQ2hCLGNBQWMsR0FBa0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUxQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQXdCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFnQjtZQUN4QixPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLFlBQVksRUFBRSxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFOUMsS0FBSyxNQUFNLE1B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
|
|
@@ -19,8 +19,6 @@ export interface IFormatStats {
|
|
|
19
19
|
totalModified: number;
|
|
20
20
|
totalDeleted: number;
|
|
21
21
|
totalErrors: number;
|
|
22
|
-
cacheHits: number;
|
|
23
|
-
cacheMisses: number;
|
|
24
22
|
};
|
|
25
23
|
}
|
|
26
24
|
export declare class FormatStats {
|
|
@@ -30,11 +28,8 @@ export declare class FormatStats {
|
|
|
30
28
|
moduleStartTime(moduleName: string): number;
|
|
31
29
|
endModule(moduleName: string, startTime: number): void;
|
|
32
30
|
recordFileOperation(moduleName: string, operation: 'create' | 'modify' | 'delete', success?: boolean): void;
|
|
33
|
-
recordCacheHit(): void;
|
|
34
|
-
recordCacheMiss(): void;
|
|
35
31
|
finish(): void;
|
|
36
32
|
displayStats(): void;
|
|
37
33
|
saveReport(outputPath: string): Promise<void>;
|
|
38
34
|
private formatDuration;
|
|
39
|
-
private getModuleIcon;
|
|
40
35
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as plugins from './mod.plugins.js';
|
|
2
2
|
import { logger } from '../gitzone.logging.js';
|
|
3
|
+
import { getModuleIcon } from './interfaces.format.js';
|
|
3
4
|
export class FormatStats {
|
|
4
5
|
stats;
|
|
5
6
|
constructor() {
|
|
@@ -14,8 +15,6 @@ export class FormatStats {
|
|
|
14
15
|
totalModified: 0,
|
|
15
16
|
totalDeleted: 0,
|
|
16
17
|
totalErrors: 0,
|
|
17
|
-
cacheHits: 0,
|
|
18
|
-
cacheMisses: 0,
|
|
19
18
|
},
|
|
20
19
|
};
|
|
21
20
|
}
|
|
@@ -68,12 +67,6 @@ export class FormatStats {
|
|
|
68
67
|
this.stats.overallStats.totalErrors++;
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
|
-
recordCacheHit() {
|
|
72
|
-
this.stats.overallStats.cacheHits++;
|
|
73
|
-
}
|
|
74
|
-
recordCacheMiss() {
|
|
75
|
-
this.stats.overallStats.cacheMisses++;
|
|
76
|
-
}
|
|
77
70
|
finish() {
|
|
78
71
|
this.stats.endTime = Date.now();
|
|
79
72
|
this.stats.totalExecutionTime = this.stats.endTime - this.stats.startTime;
|
|
@@ -89,22 +82,12 @@ export class FormatStats {
|
|
|
89
82
|
console.log(` • Modified: ${this.stats.overallStats.totalModified}`);
|
|
90
83
|
console.log(` • Deleted: ${this.stats.overallStats.totalDeleted}`);
|
|
91
84
|
console.log(` Errors: ${this.stats.overallStats.totalErrors}`);
|
|
92
|
-
if (this.stats.overallStats.cacheHits > 0 ||
|
|
93
|
-
this.stats.overallStats.cacheMisses > 0) {
|
|
94
|
-
const cacheHitRate = (this.stats.overallStats.cacheHits /
|
|
95
|
-
(this.stats.overallStats.cacheHits +
|
|
96
|
-
this.stats.overallStats.cacheMisses)) *
|
|
97
|
-
100;
|
|
98
|
-
console.log(` Cache Hit Rate: ${cacheHitRate.toFixed(1)}%`);
|
|
99
|
-
console.log(` • Hits: ${this.stats.overallStats.cacheHits}`);
|
|
100
|
-
console.log(` • Misses: ${this.stats.overallStats.cacheMisses}`);
|
|
101
|
-
}
|
|
102
85
|
// Module stats
|
|
103
86
|
console.log('\nModule Breakdown:');
|
|
104
87
|
console.log('─'.repeat(50));
|
|
105
88
|
const sortedModules = Array.from(this.stats.moduleStats.values()).sort((a, b) => b.filesProcessed - a.filesProcessed);
|
|
106
89
|
for (const moduleStats of sortedModules) {
|
|
107
|
-
console.log(`\n${
|
|
90
|
+
console.log(`\n${getModuleIcon(moduleStats.name)} ${moduleStats.name}:`);
|
|
108
91
|
console.log(` Execution Time: ${this.formatDuration(moduleStats.executionTime)}`);
|
|
109
92
|
console.log(` Files Processed: ${moduleStats.filesProcessed}`);
|
|
110
93
|
if (moduleStats.filesCreated > 0) {
|
|
@@ -148,20 +131,5 @@ export class FormatStats {
|
|
|
148
131
|
return `${minutes}m ${seconds}s`;
|
|
149
132
|
}
|
|
150
133
|
}
|
|
151
|
-
getModuleIcon(module) {
|
|
152
|
-
const icons = {
|
|
153
|
-
packagejson: '📦',
|
|
154
|
-
license: '📝',
|
|
155
|
-
tsconfig: '🔧',
|
|
156
|
-
cleanup: '🚮',
|
|
157
|
-
gitignore: '🔒',
|
|
158
|
-
prettier: '✨',
|
|
159
|
-
readme: '📖',
|
|
160
|
-
templates: '📄',
|
|
161
|
-
npmextra: '⚙️',
|
|
162
|
-
copy: '📋',
|
|
163
|
-
};
|
|
164
|
-
return icons[module] || '📁';
|
|
165
|
-
}
|
|
166
134
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5mb3JtYXRzdGF0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9mb3JtYXQvY2xhc3Nlcy5mb3JtYXRzdGF0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUEyQnZELE1BQU0sT0FBTyxXQUFXO0lBQ2QsS0FBSyxDQUFlO0lBRTVCO1FBQ0UsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLGtCQUFrQixFQUFFLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDckIsT0FBTyxFQUFFLENBQUM7WUFDVixXQUFXLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDdEIsWUFBWSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxDQUFDO2dCQUNiLFlBQVksRUFBRSxDQUFDO2dCQUNmLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixZQUFZLEVBQUUsQ0FBQztnQkFDZixXQUFXLEVBQUUsQ0FBQzthQUNmO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBa0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixjQUFjLEVBQUUsQ0FBQztZQUNqQixhQUFhLEVBQUUsQ0FBQztZQUNoQixNQUFNLEVBQUUsQ0FBQztZQUNULFNBQVMsRUFBRSxDQUFDO1lBQ1osWUFBWSxFQUFFLENBQUM7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixZQUFZLEVBQUUsQ0FBQztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWtCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEdB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
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BaseFormatter } from '../classes.baseformatter.js';
|
|
2
2
|
import * as plugins from '../mod.plugins.js';
|
|
3
|
-
import * as cleanupFormatter from '../format.cleanup.js';
|
|
4
3
|
export class CleanupFormatter extends BaseFormatter {
|
|
5
4
|
get name() {
|
|
6
5
|
return 'cleanup';
|
|
@@ -35,4 +34,4 @@ export class CleanupFormatter extends BaseFormatter {
|
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfZm9ybWF0L2Zvcm1hdHRlcnMvY2xlYW51cC5mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELE9BQU8sS0FBSyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFFN0MsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGFBQWE7SUFDakQsSUFBSSxJQUFJO1FBQ04sT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxPQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUVyQywwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUc7WUFDcEIsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IsY0FBYztTQUNmLENBQUM7UUFFRixLQUFLLE1BQU0sSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSxJQUFJO29CQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDakIsV0FBVyxFQUFFLHNCQUFzQjtpQkFDcEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFzQjtRQUN0QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixLQUFLLFFBQVE7Z0JBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -7,11 +7,11 @@ export class CopyFormatter extends BaseFormatter {
|
|
|
7
7
|
}
|
|
8
8
|
async analyze() {
|
|
9
9
|
const changes = [];
|
|
10
|
-
// Get copy configuration from
|
|
11
|
-
const
|
|
12
|
-
const copyConfig =
|
|
10
|
+
// Get copy configuration from .smartconfig.json
|
|
11
|
+
const smartconfigInstance = new plugins.smartconfig.Smartconfig();
|
|
12
|
+
const copyConfig = smartconfigInstance.dataFor('gitzone.format.copy', { patterns: [] });
|
|
13
13
|
if (!copyConfig.patterns || copyConfig.patterns.length === 0) {
|
|
14
|
-
logVerbose('No copy patterns configured in
|
|
14
|
+
logVerbose('No copy patterns configured in .smartconfig.json');
|
|
15
15
|
return changes;
|
|
16
16
|
}
|
|
17
17
|
for (const pattern of copyConfig.patterns) {
|
|
@@ -77,9 +77,6 @@ export class CopyFormatter extends BaseFormatter {
|
|
|
77
77
|
async applyChange(change) {
|
|
78
78
|
if (!change.content)
|
|
79
79
|
return;
|
|
80
|
-
// Ensure destination directory exists
|
|
81
|
-
const destDir = plugins.path.dirname(change.path);
|
|
82
|
-
await plugins.smartfs.directory(destDir).recursive().create();
|
|
83
80
|
if (change.type === 'create') {
|
|
84
81
|
await this.createFile(change.path, change.content);
|
|
85
82
|
}
|
|
@@ -89,4 +86,4 @@ export class CopyFormatter extends BaseFormatter {
|
|
|
89
86
|
logger.log('info', `Copied to ${change.path}`);
|
|
90
87
|
}
|
|
91
88
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfZm9ybWF0L2Zvcm1hdHRlcnMvY29weS5mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELE9BQU8sS0FBSyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVE5RCxNQUFNLE9BQU8sYUFBYyxTQUFRLGFBQWE7SUFDOUMsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxPQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUVyQyxnREFBZ0Q7UUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUM1QyxxQkFBcUIsRUFDckIsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxVQUFVLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUMvRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLFVBQVUsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO2dCQUNsRSxTQUFTO1lBQ1gsQ0FBQztZQUVELElB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
|
|
@@ -2,6 +2,11 @@ import { BaseFormatter } from '../classes.baseformatter.js';
|
|
|
2
2
|
import type { IPlannedChange } from '../interfaces.format.js';
|
|
3
3
|
export declare class GitignoreFormatter extends BaseFormatter {
|
|
4
4
|
get name(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Read the standard gitignore template from the asset file,
|
|
7
|
+
* stripping the YAML frontmatter.
|
|
8
|
+
*/
|
|
9
|
+
private getStandardTemplate;
|
|
5
10
|
analyze(): Promise<IPlannedChange[]>;
|
|
6
11
|
applyChange(change: IPlannedChange): Promise<void>;
|
|
7
12
|
}
|
|
@@ -1,37 +1,32 @@
|
|
|
1
1
|
import { BaseFormatter } from '../classes.baseformatter.js';
|
|
2
2
|
import * as plugins from '../mod.plugins.js';
|
|
3
|
+
import * as paths from '../../paths.js';
|
|
3
4
|
import { logger } from '../../gitzone.logging.js';
|
|
4
|
-
// Standard gitignore template content (without front-matter)
|
|
5
|
-
const GITIGNORE_TEMPLATE = `.nogit/
|
|
6
|
-
|
|
7
|
-
# artifacts
|
|
8
|
-
coverage/
|
|
9
|
-
public/
|
|
10
|
-
|
|
11
|
-
# installs
|
|
12
|
-
node_modules/
|
|
13
|
-
|
|
14
|
-
# caches
|
|
15
|
-
.yarn/
|
|
16
|
-
.cache/
|
|
17
|
-
.rpt2_cache
|
|
18
|
-
|
|
19
|
-
# builds
|
|
20
|
-
dist/
|
|
21
|
-
dist_*/
|
|
22
|
-
|
|
23
|
-
# AI
|
|
24
|
-
.claude/
|
|
25
|
-
.serena/
|
|
26
|
-
|
|
27
|
-
#------# custom`;
|
|
28
5
|
export class GitignoreFormatter extends BaseFormatter {
|
|
29
6
|
get name() {
|
|
30
7
|
return 'gitignore';
|
|
31
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Read the standard gitignore template from the asset file,
|
|
11
|
+
* stripping the YAML frontmatter.
|
|
12
|
+
*/
|
|
13
|
+
async getStandardTemplate() {
|
|
14
|
+
const templatePath = plugins.path.join(paths.templatesDir, 'gitignore', '_gitignore');
|
|
15
|
+
const raw = (await plugins.smartfs
|
|
16
|
+
.file(templatePath)
|
|
17
|
+
.encoding('utf8')
|
|
18
|
+
.read());
|
|
19
|
+
// Strip YAML frontmatter (---\n...\n---)
|
|
20
|
+
const frontmatterEnd = raw.indexOf('---', 3);
|
|
21
|
+
if (frontmatterEnd !== -1) {
|
|
22
|
+
return raw.slice(frontmatterEnd + 3).trimStart();
|
|
23
|
+
}
|
|
24
|
+
return raw;
|
|
25
|
+
}
|
|
32
26
|
async analyze() {
|
|
33
27
|
const changes = [];
|
|
34
28
|
const gitignorePath = '.gitignore';
|
|
29
|
+
const standardTemplate = await this.getStandardTemplate();
|
|
35
30
|
// Check if file exists and extract custom content
|
|
36
31
|
let customContent = '';
|
|
37
32
|
const exists = await plugins.smartfs.file(gitignorePath).exists();
|
|
@@ -51,12 +46,12 @@ export class GitignoreFormatter extends BaseFormatter {
|
|
|
51
46
|
}
|
|
52
47
|
}
|
|
53
48
|
// Compute new content
|
|
54
|
-
let newContent =
|
|
49
|
+
let newContent = standardTemplate;
|
|
55
50
|
if (customContent) {
|
|
56
|
-
newContent =
|
|
51
|
+
newContent = standardTemplate + '\n' + customContent + '\n';
|
|
57
52
|
}
|
|
58
53
|
else {
|
|
59
|
-
newContent =
|
|
54
|
+
newContent = standardTemplate + '\n';
|
|
60
55
|
}
|
|
61
56
|
// Read current content to compare
|
|
62
57
|
let currentContent = '';
|
|
@@ -66,7 +61,6 @@ export class GitignoreFormatter extends BaseFormatter {
|
|
|
66
61
|
.encoding('utf8')
|
|
67
62
|
.read());
|
|
68
63
|
}
|
|
69
|
-
// Determine change type
|
|
70
64
|
if (!exists) {
|
|
71
65
|
changes.push({
|
|
72
66
|
type: 'create',
|
|
@@ -100,4 +94,4 @@ export class GitignoreFormatter extends BaseFormatter {
|
|
|
100
94
|
}
|
|
101
95
|
}
|
|
102
96
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aWdub3JlLmZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9mb3JtYXQvZm9ybWF0dGVycy9naXRpZ25vcmUuZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWxELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBQ25ELElBQUksSUFBSTtRQUNOLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsT0FBTzthQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDO2FBQ2xCLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDaEIsSUFBSSxFQUFFLENBQVcsQ0FBQztRQUVyQix5Q0FBeUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxLQUFLLENBQUMsT0FB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
|