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.
Files changed (38) hide show
  1. package/README.md +88 -2
  2. package/dist/core/Converter.d.ts +27 -0
  3. package/dist/core/Converter.d.ts.map +1 -1
  4. package/dist/core/Converter.js +91 -21
  5. package/dist/core/Converter.js.map +1 -1
  6. package/dist/plugins/Plugin.d.ts +95 -0
  7. package/dist/plugins/Plugin.d.ts.map +1 -0
  8. package/dist/plugins/Plugin.js +3 -0
  9. package/dist/plugins/Plugin.js.map +1 -0
  10. package/dist/plugins/PluginManager.d.ts +73 -0
  11. package/dist/plugins/PluginManager.d.ts.map +1 -0
  12. package/dist/plugins/PluginManager.js +220 -0
  13. package/dist/plugins/PluginManager.js.map +1 -0
  14. package/dist/plugins/PluginRegistry.d.ts +122 -0
  15. package/dist/plugins/PluginRegistry.d.ts.map +1 -0
  16. package/dist/plugins/PluginRegistry.js +385 -0
  17. package/dist/plugins/PluginRegistry.js.map +1 -0
  18. package/dist/plugins/built-in/AuditPlugin.d.ts +81 -0
  19. package/dist/plugins/built-in/AuditPlugin.d.ts.map +1 -0
  20. package/dist/plugins/built-in/AuditPlugin.js +235 -0
  21. package/dist/plugins/built-in/AuditPlugin.js.map +1 -0
  22. package/dist/plugins/built-in/BackupPlugin.d.ts +38 -0
  23. package/dist/plugins/built-in/BackupPlugin.d.ts.map +1 -0
  24. package/dist/plugins/built-in/BackupPlugin.js +105 -0
  25. package/dist/plugins/built-in/BackupPlugin.js.map +1 -0
  26. package/dist/plugins/built-in/ValidationPlugin.d.ts +61 -0
  27. package/dist/plugins/built-in/ValidationPlugin.d.ts.map +1 -0
  28. package/dist/plugins/built-in/ValidationPlugin.js +235 -0
  29. package/dist/plugins/built-in/ValidationPlugin.js.map +1 -0
  30. package/dist/plugins/built-in/index.d.ts +7 -0
  31. package/dist/plugins/built-in/index.d.ts.map +1 -0
  32. package/dist/plugins/built-in/index.js +14 -0
  33. package/dist/plugins/built-in/index.js.map +1 -0
  34. package/dist/plugins/index.d.ts +5 -0
  35. package/dist/plugins/index.d.ts.map +1 -0
  36. package/dist/plugins/index.js +25 -0
  37. package/dist/plugins/index.js.map +1 -0
  38. 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"}