configforge 1.0.0-beta.11 → 1.0.0-beta.13
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/README.md +88 -2
- package/dist/core/Converter.d.ts +27 -0
- package/dist/core/Converter.d.ts.map +1 -1
- package/dist/core/Converter.js +91 -21
- package/dist/core/Converter.js.map +1 -1
- package/dist/plugins/Plugin.d.ts +95 -0
- package/dist/plugins/Plugin.d.ts.map +1 -0
- package/dist/plugins/Plugin.js +3 -0
- package/dist/plugins/Plugin.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +73 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +220 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/PluginRegistry.d.ts +122 -0
- package/dist/plugins/PluginRegistry.d.ts.map +1 -0
- package/dist/plugins/PluginRegistry.js +385 -0
- package/dist/plugins/PluginRegistry.js.map +1 -0
- package/dist/plugins/built-in/AuditPlugin.d.ts +81 -0
- package/dist/plugins/built-in/AuditPlugin.d.ts.map +1 -0
- package/dist/plugins/built-in/AuditPlugin.js +235 -0
- package/dist/plugins/built-in/AuditPlugin.js.map +1 -0
- package/dist/plugins/built-in/BackupPlugin.d.ts +38 -0
- package/dist/plugins/built-in/BackupPlugin.d.ts.map +1 -0
- package/dist/plugins/built-in/BackupPlugin.js +105 -0
- package/dist/plugins/built-in/BackupPlugin.js.map +1 -0
- package/dist/plugins/built-in/ValidationPlugin.d.ts +61 -0
- package/dist/plugins/built-in/ValidationPlugin.d.ts.map +1 -0
- package/dist/plugins/built-in/ValidationPlugin.js +235 -0
- package/dist/plugins/built-in/ValidationPlugin.js.map +1 -0
- package/dist/plugins/built-in/index.d.ts +7 -0
- package/dist/plugins/built-in/index.d.ts.map +1 -0
- package/dist/plugins/built-in/index.js +14 -0
- package/dist/plugins/built-in/index.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +25 -0
- package/dist/plugins/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuditPlugin = void 0;
|
|
4
|
+
exports.createAuditPlugin = createAuditPlugin;
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
/**
|
|
8
|
+
* Plugin that logs conversion activities for auditing
|
|
9
|
+
*/
|
|
10
|
+
class AuditPlugin {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.name = 'audit-plugin';
|
|
13
|
+
this.version = '1.0.0';
|
|
14
|
+
this.description = 'Log conversion activities for auditing and compliance';
|
|
15
|
+
this.author = 'ConfigForge Team';
|
|
16
|
+
this.startTime = 0;
|
|
17
|
+
this.logEntries = [];
|
|
18
|
+
this.hooks = {
|
|
19
|
+
beforeParse: async (content, format, context) => {
|
|
20
|
+
this.startTime = Date.now();
|
|
21
|
+
this.logEvent('conversion_started', context, {
|
|
22
|
+
format,
|
|
23
|
+
contentLength: content.length,
|
|
24
|
+
inputFile: context.metadata.inputFile,
|
|
25
|
+
});
|
|
26
|
+
return content;
|
|
27
|
+
},
|
|
28
|
+
afterParse: async (data, context) => {
|
|
29
|
+
this.logEvent('parse_completed', context, {
|
|
30
|
+
fieldsCount: this.countFields(data),
|
|
31
|
+
dataSize: JSON.stringify(data).length,
|
|
32
|
+
});
|
|
33
|
+
return data;
|
|
34
|
+
},
|
|
35
|
+
beforeMap: async (source, context) => {
|
|
36
|
+
this.logEvent('mapping_started', context, {
|
|
37
|
+
sourceFields: this.countFields(source),
|
|
38
|
+
});
|
|
39
|
+
return source;
|
|
40
|
+
},
|
|
41
|
+
afterMap: async (target, context) => {
|
|
42
|
+
this.logEvent('mapping_completed', context, {
|
|
43
|
+
targetFields: this.countFields(target),
|
|
44
|
+
mappedFields: this.countFields(target),
|
|
45
|
+
});
|
|
46
|
+
return target;
|
|
47
|
+
},
|
|
48
|
+
beforeValidate: async (data, context) => {
|
|
49
|
+
this.logEvent('validation_started', context, {
|
|
50
|
+
fieldsToValidate: this.countFields(data),
|
|
51
|
+
});
|
|
52
|
+
return data;
|
|
53
|
+
},
|
|
54
|
+
afterValidate: async (_data, errors, context) => {
|
|
55
|
+
this.logEvent('validation_completed', context, {
|
|
56
|
+
errorsCount: errors.length,
|
|
57
|
+
validationPassed: errors.length === 0,
|
|
58
|
+
errors: this.options.logLevel === 'verbose' ? errors : undefined,
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
afterSerialize: async (content, format, context) => {
|
|
62
|
+
const duration = Date.now() - this.startTime;
|
|
63
|
+
this.logEvent('conversion_completed', context, {
|
|
64
|
+
format,
|
|
65
|
+
outputLength: content.length,
|
|
66
|
+
totalDuration: duration,
|
|
67
|
+
success: true,
|
|
68
|
+
}, duration);
|
|
69
|
+
// Write accumulated logs
|
|
70
|
+
await this.flushLogs();
|
|
71
|
+
return content;
|
|
72
|
+
},
|
|
73
|
+
onError: async (error, context) => {
|
|
74
|
+
const duration = this.startTime ? Date.now() - this.startTime : 0;
|
|
75
|
+
this.logEvent('conversion_failed', context, {
|
|
76
|
+
error: error.message,
|
|
77
|
+
stack: this.options.logLevel === 'verbose' ? error.stack : undefined,
|
|
78
|
+
totalDuration: duration,
|
|
79
|
+
success: false,
|
|
80
|
+
}, duration);
|
|
81
|
+
// Write logs immediately on error
|
|
82
|
+
await this.flushLogs();
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
this.options = {
|
|
86
|
+
logFile: './audit.log',
|
|
87
|
+
logLevel: 'detailed',
|
|
88
|
+
includeData: false,
|
|
89
|
+
maxLogSize: 10 * 1024 * 1024, // 10MB
|
|
90
|
+
rotateDaily: true,
|
|
91
|
+
...options,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async install(context) {
|
|
95
|
+
// Ensure log directory exists
|
|
96
|
+
const logDir = (0, path_1.join)(this.options.logFile, '..');
|
|
97
|
+
if (!(0, fs_1.existsSync)(logDir)) {
|
|
98
|
+
(0, fs_1.mkdirSync)(logDir, { recursive: true });
|
|
99
|
+
}
|
|
100
|
+
this.logEvent('plugin_installed', context, {
|
|
101
|
+
pluginName: this.name,
|
|
102
|
+
options: this.options,
|
|
103
|
+
});
|
|
104
|
+
console.log(`Audit plugin installed - logs will be saved to: ${this.options.logFile}`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Log an event
|
|
108
|
+
*/
|
|
109
|
+
logEvent(event, context, metadata, duration) {
|
|
110
|
+
const entry = {
|
|
111
|
+
timestamp: new Date().toISOString(),
|
|
112
|
+
event,
|
|
113
|
+
converter: 'ConfigForge', // TODO: Get from context
|
|
114
|
+
metadata: {
|
|
115
|
+
...metadata,
|
|
116
|
+
environment: context.environment,
|
|
117
|
+
version: context.version,
|
|
118
|
+
},
|
|
119
|
+
success: !event.includes('failed') && !event.includes('error'),
|
|
120
|
+
};
|
|
121
|
+
if (duration !== undefined) {
|
|
122
|
+
entry.duration = duration;
|
|
123
|
+
}
|
|
124
|
+
if (metadata.error) {
|
|
125
|
+
entry.error = metadata.error;
|
|
126
|
+
entry.success = false;
|
|
127
|
+
}
|
|
128
|
+
this.logEntries.push(entry);
|
|
129
|
+
// Log to console in verbose mode
|
|
130
|
+
if (this.options.logLevel === 'verbose') {
|
|
131
|
+
console.log(`[AUDIT] ${event}:`, entry);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Flush accumulated logs to file
|
|
136
|
+
*/
|
|
137
|
+
async flushLogs() {
|
|
138
|
+
if (this.logEntries.length === 0) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const logFile = this.getLogFileName();
|
|
143
|
+
// Check if we need to rotate the log
|
|
144
|
+
if (this.shouldRotateLog(logFile)) {
|
|
145
|
+
await this.rotateLog(logFile);
|
|
146
|
+
}
|
|
147
|
+
// Write entries to log file
|
|
148
|
+
for (const entry of this.logEntries) {
|
|
149
|
+
const logLine = this.formatLogEntry(entry);
|
|
150
|
+
(0, fs_1.appendFileSync)(logFile, logLine + '\n', 'utf-8');
|
|
151
|
+
}
|
|
152
|
+
this.logEntries = [];
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
console.error('Failed to write audit log:', error);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Format log entry for file output
|
|
160
|
+
*/
|
|
161
|
+
formatLogEntry(entry) {
|
|
162
|
+
if (this.options.logLevel === 'minimal') {
|
|
163
|
+
return `${entry.timestamp} ${entry.event} ${entry.success ? 'SUCCESS' : 'FAILED'}`;
|
|
164
|
+
}
|
|
165
|
+
return JSON.stringify(entry);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get log file name with rotation if enabled
|
|
169
|
+
*/
|
|
170
|
+
getLogFileName() {
|
|
171
|
+
if (!this.options.rotateDaily) {
|
|
172
|
+
return this.options.logFile;
|
|
173
|
+
}
|
|
174
|
+
const date = new Date().toISOString().split('T')[0];
|
|
175
|
+
const ext = this.options.logFile.split('.').pop();
|
|
176
|
+
const base = this.options.logFile.replace(`.${ext}`, '');
|
|
177
|
+
return `${base}.${date}.${ext}`;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if log should be rotated
|
|
181
|
+
*/
|
|
182
|
+
shouldRotateLog(logFile) {
|
|
183
|
+
if (!(0, fs_1.existsSync)(logFile)) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const fs = require('fs');
|
|
188
|
+
const stats = fs.statSync(logFile);
|
|
189
|
+
return stats.size > this.options.maxLogSize;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Rotate log file
|
|
197
|
+
*/
|
|
198
|
+
async rotateLog(logFile) {
|
|
199
|
+
try {
|
|
200
|
+
const fs = require('fs');
|
|
201
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
202
|
+
const rotatedFile = logFile.replace(/\.log$/, `.${timestamp}.log`);
|
|
203
|
+
fs.renameSync(logFile, rotatedFile);
|
|
204
|
+
console.log(`Rotated audit log to: ${rotatedFile}`);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
console.error('Failed to rotate audit log:', error);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Count fields in an object recursively
|
|
212
|
+
*/
|
|
213
|
+
countFields(obj) {
|
|
214
|
+
if (obj === null || obj === undefined) {
|
|
215
|
+
return 0;
|
|
216
|
+
}
|
|
217
|
+
if (typeof obj !== 'object') {
|
|
218
|
+
return 1;
|
|
219
|
+
}
|
|
220
|
+
if (Array.isArray(obj)) {
|
|
221
|
+
return obj.reduce((count, item) => count + this.countFields(item), 0);
|
|
222
|
+
}
|
|
223
|
+
return Object.keys(obj).reduce((count, key) => {
|
|
224
|
+
return count + 1 + this.countFields(obj[key]);
|
|
225
|
+
}, 0);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.AuditPlugin = AuditPlugin;
|
|
229
|
+
/**
|
|
230
|
+
* Factory function to create audit plugin
|
|
231
|
+
*/
|
|
232
|
+
function createAuditPlugin(options) {
|
|
233
|
+
return new AuditPlugin(options);
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=AuditPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditPlugin.js","sourceRoot":"","sources":["../../../src/plugins/built-in/AuditPlugin.ts"],"names":[],"mappings":";;;AAwUA,8CAEC;AAzUD,2BAA2D;AAC3D,+BAA4B;AA2B5B;;GAEG;AACH,MAAa,WAAW;IAUtB,YAAY,UAA8B,EAAE;QAT5C,SAAI,GAAG,cAAc,CAAC;QACtB,YAAO,GAAG,OAAO,CAAC;QAClB,gBAAW,GAAG,uDAAuD,CAAC;QACtE,WAAM,GAAG,kBAAkB,CAAC;QAGpB,cAAS,GAAW,CAAC,CAAC;QACtB,eAAU,GAAoB,EAAE,CAAC;QA8BzC,UAAK,GAAG;YACN,WAAW,EAAE,KAAK,EAChB,OAAe,EACf,MAAc,EACd,OAAsB,EACtB,EAAE;gBACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE5B,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,EAAE;oBAC3C,MAAM;oBACN,aAAa,EAAE,OAAO,CAAC,MAAM;oBAC7B,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;iBACtC,CAAC,CAAC;gBAEH,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,UAAU,EAAE,KAAK,EAAE,IAAS,EAAE,OAAsB,EAAE,EAAE;gBACtD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,EAAE;oBACxC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBACnC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM;iBACtC,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAC;YACd,CAAC;YAED,SAAS,EAAE,KAAK,EAAE,MAAW,EAAE,OAAsB,EAAE,EAAE;gBACvD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,EAAE;oBACxC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;iBACvC,CAAC,CAAC;gBAEH,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,MAAW,EAAE,OAAsB,EAAE,EAAE;gBACtD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,EAAE;oBAC1C,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACtC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;iBACvC,CAAC,CAAC;gBAEH,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,cAAc,EAAE,KAAK,EAAE,IAAS,EAAE,OAAsB,EAAE,EAAE;gBAC1D,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,EAAE;oBAC3C,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;iBACzC,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAC;YACd,CAAC;YAED,aAAa,EAAE,KAAK,EAClB,KAAU,EACV,MAAa,EACb,OAAsB,EACtB,EAAE;gBACF,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,EAAE;oBAC7C,WAAW,EAAE,MAAM,CAAC,MAAM;oBAC1B,gBAAgB,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;oBACrC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;iBACjE,CAAC,CAAC;YACL,CAAC;YAED,cAAc,EAAE,KAAK,EACnB,OAAe,EACf,MAAc,EACd,OAAsB,EACtB,EAAE;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;gBAE7C,IAAI,CAAC,QAAQ,CACX,sBAAsB,EACtB,OAAO,EACP;oBACE,MAAM;oBACN,YAAY,EAAE,OAAO,CAAC,MAAM;oBAC5B,aAAa,EAAE,QAAQ;oBACvB,OAAO,EAAE,IAAI;iBACd,EACD,QAAQ,CACT,CAAC;gBAEF,yBAAyB;gBACzB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBAEvB,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,KAAY,EAAE,OAAsB,EAAE,EAAE;gBACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElE,IAAI,CAAC,QAAQ,CACX,mBAAmB,EACnB,OAAO,EACP;oBACE,KAAK,EAAE,KAAK,CAAC,OAAO;oBACpB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBACpE,aAAa,EAAE,QAAQ;oBACvB,OAAO,EAAE,KAAK;iBACf,EACD,QAAQ,CACT,CAAC;gBAEF,kCAAkC;gBAClC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,CAAC;SACF,CAAC;QArIA,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;YACrC,WAAW,EAAE,IAAI;YACjB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAsB;QAClC,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;YACxB,IAAA,cAAS,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,EAAE;YACzC,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,mDAAmD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAC1E,CAAC;IACJ,CAAC;IA8GD;;OAEG;IACK,QAAQ,CACd,KAAa,EACb,OAAsB,EACtB,QAA6B,EAC7B,QAAiB;QAEjB,MAAM,KAAK,GAAkB;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,SAAS,EAAE,aAAa,EAAE,yBAAyB;YACnD,QAAQ,EAAE;gBACR,GAAG,QAAQ;gBACX,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;SAC/D,CAAC;QAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,iCAAiC;QACjC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtC,qCAAqC;YACrC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YAED,4BAA4B;YAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAA,mBAAc,EAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAoB;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrF,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzD,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAe;QACrC,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAC,OAAe;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,SAAS,MAAM,CAAC,CAAC;YAEnE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAQ;QAC1B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5C,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;CACF;AAnSD,kCAmSC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,OAA4B;IAC5D,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Plugin, PluginContext } from '../Plugin';
|
|
2
|
+
/**
|
|
3
|
+
* Options for the backup plugin
|
|
4
|
+
*/
|
|
5
|
+
export interface BackupPluginOptions {
|
|
6
|
+
backupDir?: string;
|
|
7
|
+
maxBackups?: number;
|
|
8
|
+
includeTimestamp?: boolean;
|
|
9
|
+
compress?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Plugin that automatically creates backups before conversion
|
|
13
|
+
*/
|
|
14
|
+
export declare class BackupPlugin implements Plugin {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
description: string;
|
|
18
|
+
author: string;
|
|
19
|
+
options: Required<BackupPluginOptions>;
|
|
20
|
+
constructor(options?: BackupPluginOptions);
|
|
21
|
+
install(_context: PluginContext): Promise<void>;
|
|
22
|
+
hooks: {
|
|
23
|
+
beforeParse: (content: string, _format: string, context: PluginContext) => Promise<string>;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Create a backup of the file
|
|
27
|
+
*/
|
|
28
|
+
private createBackup;
|
|
29
|
+
/**
|
|
30
|
+
* Clean up old backups to maintain maxBackups limit
|
|
31
|
+
*/
|
|
32
|
+
private cleanupOldBackups;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Factory function to create backup plugin
|
|
36
|
+
*/
|
|
37
|
+
export declare function createBackupPlugin(options?: BackupPluginOptions): BackupPlugin;
|
|
38
|
+
//# sourceMappingURL=BackupPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackupPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/built-in/BackupPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,MAAM;IACzC,IAAI,SAAmB;IACvB,OAAO,SAAW;IAClB,WAAW,SAAkD;IAC7D,MAAM,SAAsB;IAC5B,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBAE3B,OAAO,GAAE,mBAAwB;IAUvC,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,KAAK;+BAEQ,MAAM,WACN,MAAM,WACN,aAAa;MAQxB;IAEF;;OAEG;YACW,YAAY;IA+B1B;;OAEG;YACW,iBAAiB;CAuChC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BackupPlugin = void 0;
|
|
4
|
+
exports.createBackupPlugin = createBackupPlugin;
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
/**
|
|
8
|
+
* Plugin that automatically creates backups before conversion
|
|
9
|
+
*/
|
|
10
|
+
class BackupPlugin {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.name = 'backup-plugin';
|
|
13
|
+
this.version = '1.0.0';
|
|
14
|
+
this.description = 'Automatically backup files before conversion';
|
|
15
|
+
this.author = 'ConfigForge Team';
|
|
16
|
+
this.hooks = {
|
|
17
|
+
beforeParse: async (content, _format, context) => {
|
|
18
|
+
// Create backup of the original content
|
|
19
|
+
if (context.metadata.inputFile) {
|
|
20
|
+
await this.createBackup(context.metadata.inputFile, content);
|
|
21
|
+
}
|
|
22
|
+
return content;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
this.options = {
|
|
26
|
+
backupDir: './backups',
|
|
27
|
+
maxBackups: 10,
|
|
28
|
+
includeTimestamp: true,
|
|
29
|
+
compress: false,
|
|
30
|
+
...options,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async install(_context) {
|
|
34
|
+
// Ensure backup directory exists
|
|
35
|
+
if (!(0, fs_1.existsSync)(this.options.backupDir)) {
|
|
36
|
+
(0, fs_1.mkdirSync)(this.options.backupDir, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
console.log(`Backup plugin installed - backups will be saved to: ${this.options.backupDir}`);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a backup of the file
|
|
42
|
+
*/
|
|
43
|
+
async createBackup(filePath, content) {
|
|
44
|
+
const fileName = (0, path_1.basename)(filePath);
|
|
45
|
+
const fileExt = (0, path_1.extname)(filePath);
|
|
46
|
+
const baseName = (0, path_1.basename)(filePath, fileExt);
|
|
47
|
+
let backupName = fileName;
|
|
48
|
+
if (this.options.includeTimestamp) {
|
|
49
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
50
|
+
backupName = `${baseName}.${timestamp}${fileExt}`;
|
|
51
|
+
}
|
|
52
|
+
const backupPath = (0, path_1.join)(this.options.backupDir, backupName);
|
|
53
|
+
try {
|
|
54
|
+
(0, fs_1.writeFileSync)(backupPath, content, 'utf-8');
|
|
55
|
+
console.log(`Created backup: ${backupPath}`);
|
|
56
|
+
// Clean up old backups if needed
|
|
57
|
+
await this.cleanupOldBackups(baseName, fileExt);
|
|
58
|
+
return backupPath;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error('Failed to create backup:', error);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Clean up old backups to maintain maxBackups limit
|
|
67
|
+
*/
|
|
68
|
+
async cleanupOldBackups(baseName, fileExt) {
|
|
69
|
+
if (this.options.maxBackups <= 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const fs = require('fs');
|
|
74
|
+
const files = fs.readdirSync(this.options.backupDir);
|
|
75
|
+
// Filter files that match our backup pattern
|
|
76
|
+
const backupFiles = files
|
|
77
|
+
.filter((file) => file.startsWith(baseName) && file.endsWith(fileExt))
|
|
78
|
+
.map((file) => ({
|
|
79
|
+
name: file,
|
|
80
|
+
path: (0, path_1.join)(this.options.backupDir, file),
|
|
81
|
+
stats: fs.statSync((0, path_1.join)(this.options.backupDir, file)),
|
|
82
|
+
}))
|
|
83
|
+
.sort((a, b) => b.stats.mtime.getTime() - a.stats.mtime.getTime());
|
|
84
|
+
// Remove excess backups
|
|
85
|
+
if (backupFiles.length > this.options.maxBackups) {
|
|
86
|
+
const filesToDelete = backupFiles.slice(this.options.maxBackups);
|
|
87
|
+
for (const file of filesToDelete) {
|
|
88
|
+
fs.unlinkSync(file.path);
|
|
89
|
+
console.log(`Removed old backup: ${file.name}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('Error cleaning up old backups:', error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.BackupPlugin = BackupPlugin;
|
|
99
|
+
/**
|
|
100
|
+
* Factory function to create backup plugin
|
|
101
|
+
*/
|
|
102
|
+
function createBackupPlugin(options) {
|
|
103
|
+
return new BackupPlugin(options);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=BackupPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackupPlugin.js","sourceRoot":"","sources":["../../../src/plugins/built-in/BackupPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Plugin, PluginContext } from '../Plugin';
|
|
2
|
+
/**
|
|
3
|
+
* Validation rule definition
|
|
4
|
+
*/
|
|
5
|
+
export interface ValidationRule {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
validate: (value: any, path: string, data: any) => boolean | string;
|
|
9
|
+
severity: 'error' | 'warning' | 'info';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Options for the validation plugin
|
|
13
|
+
*/
|
|
14
|
+
export interface ValidationPluginOptions {
|
|
15
|
+
rules?: ValidationRule[];
|
|
16
|
+
strictMode?: boolean;
|
|
17
|
+
failOnWarnings?: boolean;
|
|
18
|
+
customRules?: Record<string, ValidationRule>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Plugin that adds enhanced validation capabilities
|
|
22
|
+
*/
|
|
23
|
+
export declare class ValidationPlugin implements Plugin {
|
|
24
|
+
name: string;
|
|
25
|
+
version: string;
|
|
26
|
+
description: string;
|
|
27
|
+
author: string;
|
|
28
|
+
options: Required<ValidationPluginOptions>;
|
|
29
|
+
private validationResults;
|
|
30
|
+
constructor(options?: ValidationPluginOptions);
|
|
31
|
+
install(_context: PluginContext): Promise<void>;
|
|
32
|
+
hooks: {
|
|
33
|
+
afterMap: (target: any, context: PluginContext) => Promise<any>;
|
|
34
|
+
afterValidate: (_data: any, errors: any[], _context: PluginContext) => Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Add a custom validation rule
|
|
38
|
+
*/
|
|
39
|
+
addRule(rule: ValidationRule): void;
|
|
40
|
+
/**
|
|
41
|
+
* Remove a validation rule by name
|
|
42
|
+
*/
|
|
43
|
+
removeRule(name: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Validate data against all rules
|
|
46
|
+
*/
|
|
47
|
+
private validateData;
|
|
48
|
+
/**
|
|
49
|
+
* Report validation results
|
|
50
|
+
*/
|
|
51
|
+
private reportValidationResults;
|
|
52
|
+
/**
|
|
53
|
+
* Add built-in validation rules
|
|
54
|
+
*/
|
|
55
|
+
private addBuiltInRules;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Factory function to create validation plugin
|
|
59
|
+
*/
|
|
60
|
+
export declare function createValidationPlugin(options?: ValidationPluginOptions): ValidationPlugin;
|
|
61
|
+
//# sourceMappingURL=ValidationPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/built-in/ValidationPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,GAAG,MAAM,CAAC;IACpE,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,IAAI,SAAuB;IAC3B,OAAO,SAAW;IAClB,WAAW,SAAyD;IACpE,MAAM,SAAsB;IAE5B,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IAC3C,OAAO,CAAC,iBAAiB,CAKjB;gBAEI,OAAO,GAAE,uBAA4B;IAa3C,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,KAAK;2BACsB,GAAG,WAAW,aAAa;+BAY3C,GAAG,UACF,GAAG,EAAE,YACH,aAAa;MAkBzB;IAEF;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAInC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASjC;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwC/B;;OAEG;IACH,OAAO,CAAC,eAAe;CAwFxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAElB"}
|