configforge 1.4.0 → 1.5.0

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.
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiFileProcessor = void 0;
4
+ const types_1 = require("../types");
5
+ const ConversionResult_1 = require("./ConversionResult");
6
+ const fs_1 = require("fs");
7
+ /**
8
+ * MultiFileProcessor handles merging multiple input files into a single output
9
+ * or splitting a single input into multiple outputs
10
+ */
11
+ class MultiFileProcessor {
12
+ constructor(converter, options = {}) {
13
+ this.converter = converter;
14
+ this.options = {
15
+ mergeStrategy: options.mergeStrategy ?? 'merge',
16
+ customMerger: options.customMerger ?? this.defaultMerger,
17
+ rootKey: options.rootKey ?? '',
18
+ preserveFileNames: options.preserveFileNames ?? true,
19
+ keyExtractor: options.keyExtractor ?? this.defaultKeyExtractor,
20
+ continueOnError: options.continueOnError ?? true,
21
+ };
22
+ }
23
+ /**
24
+ * Process multiple input files and merge them into a single result
25
+ */
26
+ async processMany(inputPaths) {
27
+ const startTime = performance.now();
28
+ const fileResults = [];
29
+ const failedFiles = [];
30
+ const allWarnings = [];
31
+ const allErrors = [];
32
+ if (inputPaths.length === 0) {
33
+ throw new types_1.GenericConfigForgeError('No input files provided');
34
+ }
35
+ // Process each file individually
36
+ for (const filePath of inputPaths) {
37
+ try {
38
+ const result = await this.converter.convert(filePath);
39
+ fileResults.push({
40
+ filePath,
41
+ result,
42
+ success: result.errors.length === 0,
43
+ });
44
+ // Collect warnings and errors
45
+ allWarnings.push(...result.warnings);
46
+ allErrors.push(...result.errors);
47
+ // If there are errors, add to failed files
48
+ if (result.errors.length > 0) {
49
+ failedFiles.push(filePath);
50
+ if (!this.options.continueOnError) {
51
+ break;
52
+ }
53
+ }
54
+ }
55
+ catch (error) {
56
+ const configError = error instanceof types_1.ConfigForgeError
57
+ ? error
58
+ : new types_1.GenericConfigForgeError(`Failed to process ${filePath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
59
+ failedFiles.push(filePath);
60
+ allErrors.push(configError);
61
+ // Create a failed result entry
62
+ fileResults.push({
63
+ filePath,
64
+ result: {
65
+ data: {},
66
+ warnings: [],
67
+ unmapped: [],
68
+ errors: [configError],
69
+ stats: {
70
+ fieldsProcessed: 0,
71
+ fieldsMapped: 0,
72
+ fieldsUnmapped: 0,
73
+ fieldsWithDefaults: 0,
74
+ transformsApplied: 0,
75
+ validationErrors: 1,
76
+ duration: 0,
77
+ },
78
+ save: async () => { },
79
+ toJSON: () => '{}',
80
+ toYAML: () => '{}',
81
+ print: () => { },
82
+ },
83
+ success: false,
84
+ });
85
+ if (!this.options.continueOnError) {
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ // Extract successful results for merging
91
+ const successfulResults = fileResults
92
+ .filter(fr => fr.success)
93
+ .map(fr => ({ data: fr.result.data, filePath: fr.filePath }));
94
+ // Merge the data
95
+ let mergedData = {};
96
+ if (successfulResults.length > 0) {
97
+ try {
98
+ mergedData = this.mergeData(successfulResults);
99
+ }
100
+ catch (error) {
101
+ allErrors.push(new types_1.GenericConfigForgeError(`Failed to merge data: ${error instanceof Error ? error.message : 'Unknown error'}`));
102
+ }
103
+ }
104
+ // Calculate combined statistics
105
+ const duration = performance.now() - startTime;
106
+ const stats = {
107
+ fieldsProcessed: fileResults.reduce((sum, fr) => sum + fr.result.stats.fieldsProcessed, 0),
108
+ fieldsMapped: fileResults.reduce((sum, fr) => sum + fr.result.stats.fieldsMapped, 0),
109
+ fieldsUnmapped: fileResults.reduce((sum, fr) => sum + fr.result.stats.fieldsUnmapped, 0),
110
+ fieldsWithDefaults: fileResults.reduce((sum, fr) => sum + fr.result.stats.fieldsWithDefaults, 0),
111
+ transformsApplied: fileResults.reduce((sum, fr) => sum + fr.result.stats.transformsApplied, 0),
112
+ validationErrors: allErrors.length,
113
+ duration,
114
+ };
115
+ // Get all unmapped fields
116
+ const allUnmapped = [
117
+ ...new Set(fileResults.flatMap(fr => fr.result.unmapped)),
118
+ ];
119
+ // Create the result
120
+ const baseResult = new ConversionResult_1.ConversionResultImpl(mergedData, allWarnings, allUnmapped, allErrors, stats);
121
+ // Create MultiFileResult by extending the base result
122
+ const result = Object.assign(baseResult, {
123
+ fileResults,
124
+ failedFiles,
125
+ });
126
+ return result;
127
+ }
128
+ /**
129
+ * Split a single input into multiple outputs (one-to-many)
130
+ */
131
+ async processSplit(inputPath, splitFn) {
132
+ // First convert the input file
133
+ const inputResult = await this.converter.convert(inputPath);
134
+ if (inputResult.errors.length > 0) {
135
+ throw new types_1.GenericConfigForgeError(`Failed to process input file: ${inputResult.errors.map(e => e.message).join(', ')}`);
136
+ }
137
+ // Split the data
138
+ const splitData = splitFn(inputResult.data);
139
+ const results = {};
140
+ // Create individual results for each split
141
+ for (const [key, data] of Object.entries(splitData)) {
142
+ // Use the same converter to process the split data directly
143
+ const splitResult = this.converter.convertSync(data);
144
+ results[key] = splitResult;
145
+ }
146
+ return results;
147
+ }
148
+ /**
149
+ * Merge data from multiple successful results
150
+ */
151
+ mergeData(results) {
152
+ const inputs = results.map(r => r.data);
153
+ const filePaths = results.map(r => r.filePath);
154
+ let merged;
155
+ switch (this.options.mergeStrategy) {
156
+ case 'array':
157
+ merged = inputs;
158
+ break;
159
+ case 'custom':
160
+ merged = this.options.customMerger(inputs, filePaths);
161
+ break;
162
+ case 'merge':
163
+ default:
164
+ merged = this.mergeObjects(results);
165
+ break;
166
+ }
167
+ // Wrap in root key if specified
168
+ if (this.options.rootKey) {
169
+ return { [this.options.rootKey]: merged };
170
+ }
171
+ return merged;
172
+ }
173
+ /**
174
+ * Merge objects using file names as keys if preserveFileNames is true
175
+ */
176
+ mergeObjects(results) {
177
+ if (!this.options.preserveFileNames) {
178
+ // Simple deep merge
179
+ return results.reduce((merged, { data }) => {
180
+ return this.deepMerge(merged, data);
181
+ }, {});
182
+ }
183
+ // Use file names as keys
184
+ const merged = {};
185
+ for (const { data, filePath } of results) {
186
+ const key = this.options.keyExtractor(filePath);
187
+ merged[key] = data;
188
+ }
189
+ return merged;
190
+ }
191
+ /**
192
+ * Default key extractor - extracts filename without extension
193
+ */
194
+ defaultKeyExtractor(filePath) {
195
+ return (filePath
196
+ .split(/[/\\]/)
197
+ .pop()
198
+ ?.replace(/\.[^/.]+$/, '') || 'unknown');
199
+ }
200
+ /**
201
+ * Default merger - simple object merge
202
+ */
203
+ defaultMerger(inputs) {
204
+ return inputs.reduce((merged, input) => {
205
+ return this.deepMerge(merged, input);
206
+ }, {});
207
+ }
208
+ /**
209
+ * Deep merge two objects
210
+ */
211
+ deepMerge(target, source) {
212
+ if (source === null || typeof source !== 'object') {
213
+ return source;
214
+ }
215
+ if (target === null || typeof target !== 'object') {
216
+ return source;
217
+ }
218
+ const result = { ...target };
219
+ for (const key in source) {
220
+ if (source.hasOwnProperty(key)) {
221
+ if (typeof source[key] === 'object' &&
222
+ source[key] !== null &&
223
+ !Array.isArray(source[key]) &&
224
+ typeof result[key] === 'object' &&
225
+ result[key] !== null &&
226
+ !Array.isArray(result[key])) {
227
+ result[key] = this.deepMerge(result[key], source[key]);
228
+ }
229
+ else {
230
+ result[key] = source[key];
231
+ }
232
+ }
233
+ }
234
+ return result;
235
+ }
236
+ /**
237
+ * Save split results to multiple files
238
+ */
239
+ async saveSplit(results, outputDir, fileExtension = 'yml') {
240
+ // Ensure output directory exists
241
+ await fs_1.promises.mkdir(outputDir, { recursive: true });
242
+ const savePromises = Object.entries(results).map(async ([key, result]) => {
243
+ const outputPath = `${outputDir}/${key}.${fileExtension}`;
244
+ try {
245
+ await result.save(outputPath);
246
+ }
247
+ catch (error) {
248
+ console.warn(`Failed to save split result for ${key}:`, error);
249
+ }
250
+ });
251
+ await Promise.all(savePromises);
252
+ }
253
+ }
254
+ exports.MultiFileProcessor = MultiFileProcessor;
255
+ //# sourceMappingURL=MultiFileProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiFileProcessor.js","sourceRoot":"","sources":["../../src/core/MultiFileProcessor.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export { ConversionResultImpl } from './ConversionResult';
4
4
  export { Mapper } from './Mapper';
5
5
  export { BatchProcessor } from './BatchProcessor';
6
6
  export { IncrementalProcessor } from './IncrementalProcessor';
7
+ export { MultiFileProcessor } from './MultiFileProcessor';
7
8
  export { PerformanceMonitor, PerformanceBenchmark } from './PerformanceMonitor';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PerformanceBenchmark = exports.PerformanceMonitor = exports.IncrementalProcessor = exports.BatchProcessor = exports.Mapper = exports.ConversionResultImpl = exports.forge = exports.ConditionalMapper = exports.Converter = void 0;
3
+ exports.PerformanceBenchmark = exports.PerformanceMonitor = exports.MultiFileProcessor = exports.IncrementalProcessor = exports.BatchProcessor = exports.Mapper = exports.ConversionResultImpl = exports.forge = exports.ConditionalMapper = exports.Converter = void 0;
4
4
  var Converter_1 = require("./Converter");
5
5
  Object.defineProperty(exports, "Converter", { enumerable: true, get: function () { return Converter_1.Converter; } });
6
6
  Object.defineProperty(exports, "ConditionalMapper", { enumerable: true, get: function () { return Converter_1.ConditionalMapper; } });
@@ -14,6 +14,8 @@ var BatchProcessor_1 = require("./BatchProcessor");
14
14
  Object.defineProperty(exports, "BatchProcessor", { enumerable: true, get: function () { return BatchProcessor_1.BatchProcessor; } });
15
15
  var IncrementalProcessor_1 = require("./IncrementalProcessor");
16
16
  Object.defineProperty(exports, "IncrementalProcessor", { enumerable: true, get: function () { return IncrementalProcessor_1.IncrementalProcessor; } });
17
+ var MultiFileProcessor_1 = require("./MultiFileProcessor");
18
+ Object.defineProperty(exports, "MultiFileProcessor", { enumerable: true, get: function () { return MultiFileProcessor_1.MultiFileProcessor; } });
17
19
  var PerformanceMonitor_1 = require("./PerformanceMonitor");
18
20
  Object.defineProperty(exports, "PerformanceMonitor", { enumerable: true, get: function () { return PerformanceMonitor_1.PerformanceMonitor; } });
19
21
  Object.defineProperty(exports, "PerformanceBenchmark", { enumerable: true, get: function () { return PerformanceMonitor_1.PerformanceBenchmark; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAAA,yCAA2D;AAAlD,sGAAA,SAAS,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AACrC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,uDAA0D;AAAjD,wHAAA,oBAAoB,OAAA;AAC7B,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,2DAAgF;AAAvE,wHAAA,kBAAkB,OAAA;AAAE,0HAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAAA,yCAA2D;AAAlD,sGAAA,SAAS,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AACrC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,uDAA0D;AAAjD,wHAAA,oBAAoB,OAAA;AAC7B,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,2DAAgF;AAAvE,wHAAA,kBAAkB,OAAA;AAAE,0HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,39 @@
1
+ import { DecentHologram, CMIHologram, ConversionOptions, ParsedLocation, ConversionResult as CustomConversionResult } from './types';
2
+ import { ConversionResult } from '../types';
3
+ /**
4
+ * Utility function to parse DecentHolograms location format
5
+ * Converts "spawn:0.500:103.500:-6.5" to { world: "spawn", x: 0.5, y: 103.5, z: -6.5 }
6
+ */
7
+ export declare function parseDecentLocation(location: string, defaultWorld?: string): ParsedLocation;
8
+ /**
9
+ * Utility function to format location for CMI
10
+ * Converts parsed location to "world;0.5;103.5;-6.5" format
11
+ */
12
+ export declare function formatCMILocation(parsed: ParsedLocation): string;
13
+ /**
14
+ * Extract lines from DecentHolograms pages structure
15
+ * Takes the first page and extracts all line content
16
+ */
17
+ export declare function extractLines(pages: any[]): string[];
18
+ /**
19
+ * Default key extractor - extracts filename without extension
20
+ */
21
+ export declare function defaultKeyExtractor(filePath: string): string;
22
+ /**
23
+ * Create a DecentHolograms to CMI Holograms converter
24
+ */
25
+ export declare function createDecentToCMIConverter(options?: ConversionOptions): import("../index").Converter<DecentHologram, CMIHologram>;
26
+ /**
27
+ * Convert multiple DecentHolograms files to a single CMI Holograms file
28
+ */
29
+ export declare function convertDecentToCMI(inputFiles: string[], outputPath?: string, options?: ConversionOptions): Promise<CustomConversionResult>;
30
+ /**
31
+ * Convert a single DecentHolograms file for testing
32
+ */
33
+ export declare function convertSingleDecent(inputFile: string, options?: ConversionOptions): Promise<ConversionResult>;
34
+ /**
35
+ * Batch convert with custom grouping strategies
36
+ */
37
+ export declare function convertWithGrouping(inputFiles: string[], groupingStrategy?: 'by-location' | 'by-type' | 'by-prefix', options?: ConversionOptions): Promise<CustomConversionResult>;
38
+ export default createDecentToCMIConverter;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decentholograms-to-cmiholograms/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,WAAW,EAEX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,IAAI,sBAAsB,EAC3C,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAAgB,GAC7B,cAAc,CAgBhB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAmBnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,iBAAsB,6DAiEzE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAuDjC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAAE,EACpB,gBAAgB,GAAE,aAAa,GAAG,SAAS,GAAG,WAAuB,EACrE,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAqFjC;AAGD,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseDecentLocation = parseDecentLocation;
7
+ exports.formatCMILocation = formatCMILocation;
8
+ exports.extractLines = extractLines;
9
+ exports.defaultKeyExtractor = defaultKeyExtractor;
10
+ exports.createDecentToCMIConverter = createDecentToCMIConverter;
11
+ exports.convertDecentToCMI = convertDecentToCMI;
12
+ exports.convertSingleDecent = convertSingleDecent;
13
+ exports.convertWithGrouping = convertWithGrouping;
14
+ const index_1 = require("../index");
15
+ const path_1 = __importDefault(require("path"));
16
+ /**
17
+ * Utility function to parse DecentHolograms location format
18
+ * Converts "spawn:0.500:103.500:-6.5" to { world: "spawn", x: 0.5, y: 103.5, z: -6.5 }
19
+ */
20
+ function parseDecentLocation(location, defaultWorld = 'world') {
21
+ if (typeof location !== 'string') {
22
+ return { world: defaultWorld, x: 0, y: 0, z: 0 };
23
+ }
24
+ const parts = location.split(':');
25
+ if (parts.length < 4) {
26
+ return { world: defaultWorld, x: 0, y: 0, z: 0 };
27
+ }
28
+ return {
29
+ world: parts[0] || defaultWorld,
30
+ x: parseFloat(parts[1] || '0') || 0,
31
+ y: parseFloat(parts[2] || '0') || 0,
32
+ z: parseFloat(parts[3] || '0') || 0,
33
+ };
34
+ }
35
+ /**
36
+ * Utility function to format location for CMI
37
+ * Converts parsed location to "world;0.5;103.5;-6.5" format
38
+ */
39
+ function formatCMILocation(parsed) {
40
+ return `${parsed.world};${parsed.x};${parsed.y};${parsed.z}`;
41
+ }
42
+ /**
43
+ * Extract lines from DecentHolograms pages structure
44
+ * Takes the first page and extracts all line content
45
+ */
46
+ function extractLines(pages) {
47
+ if (!Array.isArray(pages) || pages.length === 0) {
48
+ return [];
49
+ }
50
+ const firstPage = pages[0];
51
+ if (!firstPage || !Array.isArray(firstPage.lines)) {
52
+ return [];
53
+ }
54
+ return firstPage.lines
55
+ .map((line) => {
56
+ if (typeof line === 'string')
57
+ return line;
58
+ if (line && typeof line.content === 'string') {
59
+ return line.content;
60
+ }
61
+ return '';
62
+ })
63
+ .filter((line) => line.length > 0);
64
+ }
65
+ /**
66
+ * Default key extractor - extracts filename without extension
67
+ */
68
+ function defaultKeyExtractor(filePath) {
69
+ return path_1.default.basename(filePath, path_1.default.extname(filePath));
70
+ }
71
+ /**
72
+ * Create a DecentHolograms to CMI Holograms converter
73
+ */
74
+ function createDecentToCMIConverter(options = {}) {
75
+ const { defaultFiller = 245, defaultWorld = 'world' } = options;
76
+ return ((0, index_1.forge)()
77
+ .from('decentholograms', { format: 'yaml' })
78
+ .to('cmi-holograms', { format: 'yaml' })
79
+ // Map location with proper format conversion
80
+ .map('location', 'Loc', (location) => {
81
+ const parsed = parseDecentLocation(location, defaultWorld);
82
+ return formatCMILocation(parsed);
83
+ })
84
+ // Map display range to CMI RangeExtra
85
+ .map('display-range', 'RangeExtra')
86
+ // Map update interval to CMI Interval
87
+ .map('update-interval', 'Interval')
88
+ // Transform pages structure to CMI Lines format
89
+ .map('pages', 'Lines', (pages) => {
90
+ return extractLines(pages);
91
+ })
92
+ // Set CMI-specific defaults
93
+ .defaults({
94
+ Filler: defaultFiller,
95
+ })
96
+ // Add validation to ensure required fields
97
+ .validate('Loc', value => {
98
+ if (!value || typeof value !== 'string') {
99
+ return 'Location (Loc) is required and must be a string';
100
+ }
101
+ if (!value.includes(';')) {
102
+ return 'Location must be in CMI format (world;x;y;z)';
103
+ }
104
+ return true;
105
+ })
106
+ .validate('Lines', value => {
107
+ if (!Array.isArray(value)) {
108
+ return 'Lines must be an array';
109
+ }
110
+ if (value.length === 0) {
111
+ return 'At least one line is required for the hologram';
112
+ }
113
+ return true;
114
+ })
115
+ // Add before hook for logging
116
+ .before(data => {
117
+ console.log(`🔄 Processing hologram with location: ${data.location}`);
118
+ return data;
119
+ })
120
+ // Add after hook for validation
121
+ .after(data => {
122
+ console.log(`✅ Converted hologram with ${data.Lines?.length || 0} lines`);
123
+ return data;
124
+ }));
125
+ }
126
+ /**
127
+ * Convert multiple DecentHolograms files to a single CMI Holograms file
128
+ */
129
+ async function convertDecentToCMI(inputFiles, outputPath, options = {}) {
130
+ const converter = createDecentToCMIConverter(options);
131
+ try {
132
+ console.log(`🚀 Converting ${inputFiles.length} DecentHolograms files to CMI format...`);
133
+ const result = await converter.convertMany(inputFiles, {
134
+ mergeStrategy: 'merge',
135
+ preserveFileNames: options.preserveFileNames ?? true,
136
+ keyExtractor: options.keyExtractor ?? defaultKeyExtractor,
137
+ continueOnError: options.continueOnError ?? true,
138
+ });
139
+ const customResult = {
140
+ success: result.errors.length === 0,
141
+ data: result.data,
142
+ errors: result.errors.map(e => e.message),
143
+ warnings: result.warnings.map(w => w.message),
144
+ processedFiles: result.fileResults.length,
145
+ failedFiles: result.failedFiles,
146
+ };
147
+ // Log results
148
+ console.log(`✅ Conversion completed!`);
149
+ console.log(`📊 Processed: ${customResult.processedFiles} files`);
150
+ console.log(`⚠️ Warnings: ${customResult.warnings.length}`);
151
+ console.log(`❌ Errors: ${customResult.errors.length}`);
152
+ if (customResult.failedFiles.length > 0) {
153
+ console.log(`💥 Failed files: ${customResult.failedFiles.join(', ')}`);
154
+ }
155
+ // Save to file if output path provided
156
+ if (outputPath) {
157
+ await result.save(outputPath);
158
+ console.log(`💾 Saved to: ${outputPath}`);
159
+ }
160
+ return customResult;
161
+ }
162
+ catch (error) {
163
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
164
+ console.error(`❌ Conversion failed: ${errorMessage}`);
165
+ return {
166
+ success: false,
167
+ data: {},
168
+ errors: [errorMessage],
169
+ warnings: [],
170
+ processedFiles: 0,
171
+ failedFiles: inputFiles,
172
+ };
173
+ }
174
+ }
175
+ /**
176
+ * Convert a single DecentHolograms file for testing
177
+ */
178
+ async function convertSingleDecent(inputFile, options = {}) {
179
+ const converter = createDecentToCMIConverter(options);
180
+ try {
181
+ console.log(`🔄 Converting single file: ${inputFile}`);
182
+ const result = await converter.convert(inputFile);
183
+ console.log(`✅ Single file conversion completed!`);
184
+ if (result.errors.length > 0) {
185
+ console.log(`❌ Errors: ${result.errors.map(e => e.message).join(', ')}`);
186
+ }
187
+ return result;
188
+ }
189
+ catch (error) {
190
+ console.error(`❌ Single file conversion failed: ${error}`);
191
+ throw error;
192
+ }
193
+ }
194
+ /**
195
+ * Batch convert with custom grouping strategies
196
+ */
197
+ async function convertWithGrouping(inputFiles, groupingStrategy = 'by-type', options = {}) {
198
+ const converter = createDecentToCMIConverter(options);
199
+ // Custom merger based on grouping strategy
200
+ const customMerger = (inputs, filePaths) => {
201
+ const grouped = {};
202
+ inputs.forEach((data, index) => {
203
+ const filePath = filePaths[index];
204
+ if (!filePath)
205
+ return;
206
+ const fileName = path_1.default.basename(filePath, path_1.default.extname(filePath));
207
+ let groupKey = 'default';
208
+ switch (groupingStrategy) {
209
+ case 'by-location':
210
+ if (data.location) {
211
+ const parsed = parseDecentLocation(data.location);
212
+ groupKey = `${parsed.world}_holograms`;
213
+ }
214
+ break;
215
+ case 'by-type':
216
+ const lowerName = fileName.toLowerCase();
217
+ if (lowerName.includes('npc')) {
218
+ groupKey = 'npc_holograms';
219
+ }
220
+ else if (lowerName.includes('spawn') ||
221
+ (data.location && data.location.includes('spawn'))) {
222
+ groupKey = 'spawn_holograms';
223
+ }
224
+ else if (lowerName.includes('shop') ||
225
+ lowerName.includes('store')) {
226
+ groupKey = 'shop_holograms';
227
+ }
228
+ else {
229
+ groupKey = 'other_holograms';
230
+ }
231
+ break;
232
+ case 'by-prefix':
233
+ const prefix = fileName.split(/[_-]/)[0];
234
+ groupKey = `${prefix}_holograms`;
235
+ break;
236
+ }
237
+ if (!grouped[groupKey]) {
238
+ grouped[groupKey] = {};
239
+ }
240
+ grouped[groupKey][fileName] = data;
241
+ });
242
+ return grouped;
243
+ };
244
+ try {
245
+ console.log(`🚀 Converting with grouping strategy: ${groupingStrategy}`);
246
+ const result = await converter.convertMany(inputFiles, {
247
+ mergeStrategy: 'custom',
248
+ customMerger,
249
+ continueOnError: options.continueOnError ?? true,
250
+ });
251
+ return {
252
+ success: result.errors.length === 0,
253
+ data: result.data,
254
+ errors: result.errors.map(e => e.message),
255
+ warnings: result.warnings.map(w => w.message),
256
+ processedFiles: result.fileResults.length,
257
+ failedFiles: result.failedFiles,
258
+ };
259
+ }
260
+ catch (error) {
261
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
262
+ return {
263
+ success: false,
264
+ data: {},
265
+ errors: [errorMessage],
266
+ warnings: [],
267
+ processedFiles: 0,
268
+ failedFiles: inputFiles,
269
+ };
270
+ }
271
+ }
272
+ // Export the main converter creation function as default
273
+ exports.default = createDecentToCMIConverter;
274
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decentholograms-to-cmiholograms/index.ts"],"names":[],"mappings":"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"}