-
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathbuild.js
More file actions
106 lines (85 loc) 路 3.23 KB
/
Copy pathbuild.js
File metadata and controls
106 lines (85 loc) 路 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
const fs = require('fs');
const path = require('path');
const SRC_DIR = 'src';
const DIST_DIR = 'dist';
const OUTPUT_FILE = path.join(DIST_DIR, 'sun-position-card.js');
// Ensure dist dir exists
if (!fs.existsSync(DIST_DIR)){
fs.mkdirSync(DIST_DIR);
}
// 1. Process Images
console.log('Processing images...');
const imagesDir = path.join(SRC_DIR, 'images');
const imageFiles = fs.readdirSync(imagesDir).filter(file => file.endsWith('.png'));
const imagesObj = {};
imageFiles.forEach(file => {
const filePath = path.join(imagesDir, file);
const base64 = fs.readFileSync(filePath, 'base64');
imagesObj[file] = `data:image/png;base64,${base64}`;
});
const imagesScript = `const images = ${JSON.stringify(imagesObj, null, 2)};\n`;
// 2. Process Languages
console.log('Processing languages...');
const langFiles = fs.readdirSync(SRC_DIR).filter(file => file.startsWith('lang-') && file.endsWith('.js'));
let langsScript = '';
langFiles.forEach(file => {
const langCode = file.replace('lang-', '').replace('.js', '');
let content = fs.readFileSync(path.join(SRC_DIR, file), 'utf8');
// Extract object
content = content.replace('export default', '').trim();
if (content.endsWith(';')) {
content = content.slice(0, -1);
}
const varName = langCode;
langsScript += `const ${varName} = ${content};\n`;
});
// 3. Process Editor
console.log('Processing editor...');
let editorContent = fs.readFileSync(path.join(SRC_DIR, 'sun-position-card-editor.js'), 'utf8');
// Remove imports
editorContent = editorContent.replace(/import .* from .*/g, '');
// 4. Process Main Card
console.log('Processing main card...');
let mainContent = fs.readFileSync(path.join(SRC_DIR, 'sun-position-card.js'), 'utf8');
// Remove imports
mainContent = mainContent.replace(/import .* from .*/g, '');
// Replace getConfigElement
mainContent = mainContent.replace(
/static async getConfigElement\(\) \{[\s\S]*?return document\.createElement\("sun-position-card-editor"\);\s*\}/,
`static async getConfigElement() { return document.createElement("sun-position-card-editor"); }`
);
// Replace image paths
// 1. Dynamic replacement for displayImage
mainContent = mainContent.replace(
/const newSrc = `\/local\/community\/Sun-Position-Card\/images\/\$\{displayImage\}`;/g,
'const newSrc = images[displayImage];'
);
// 2. Static replacement (calc-sun.png) in JS variable
mainContent = mainContent.replace(
/const sunSrc = `\/local\/community\/Sun-Position-Card\/images\/calc-sun\.png`;/g,
"const sunSrc = images['calc-sun.png'];"
);
// 3. Dynamic replacement for image variable
mainContent = mainContent.replace(
/const newSrc = `\/local\/community\/Sun-Position-Card\/images\/\$\{image\}`;/g,
'const newSrc = images[image];'
);
// 4. Replacement in HTML template string
mainContent = mainContent.replace(
/src="\/local\/community\/Sun-Position-Card\/images\/calc-sun\.png"/g,
'src="${images[\'calc-sun.png\']}"'
);
// 5. Combine everything
console.log('Writing output...');
const finalContent = `
/**
* Sun Position Card (Bundled)
* Generated by build.js
*/
${langsScript}
${imagesScript}
${editorContent}
${mainContent}
`;
fs.writeFileSync(OUTPUT_FILE, finalContent);
console.log(`Build complete: ${OUTPUT_FILE}`);