Wegwichtel/scripts/vendor-sync.js
2026-06-16 10:31:41 +02:00

59 lines
2.2 KiB
JavaScript

import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
const versions = Object.freeze({ jquery: '4.0.0', jqueryUi: '1.14.2' });
const files = [
{
source: 'node_modules/jquery/dist/jquery.min.js',
destination: `public/vendor/jquery/jquery-${versions.jquery}.min.js`,
marker: `jQuery v${versions.jquery}`
},
{
source: 'node_modules/jquery/LICENSE.txt',
destination: 'public/vendor/jquery/LICENSE.txt',
marker: 'OpenJS Foundation'
},
{
source: 'node_modules/jquery-ui/dist/jquery-ui.min.js',
destination: `public/vendor/jquery-ui/jquery-ui-${versions.jqueryUi}.min.js`,
marker: `jQuery UI - v${versions.jqueryUi}`
},
{
source: 'node_modules/jquery-ui/dist/themes/base/jquery-ui.min.css',
destination: `public/vendor/jquery-ui/jquery-ui-${versions.jqueryUi}.min.css`,
marker: `jQuery UI - v${versions.jqueryUi}`
},
{
source: 'node_modules/jquery-ui/LICENSE.txt',
destination: 'public/vendor/jquery-ui/LICENSE.txt',
marker: 'OpenJS Foundation'
}
];
async function copyVerifiedFile(file) {
const source = path.join(root, file.source);
const destination = path.join(root, file.destination);
const content = await fs.readFile(source);
if (!content.toString('utf8', 0, Math.min(content.length, 4096)).includes(file.marker)) {
throw new Error(`Unerwarteter Inhalt in ${file.source}`);
}
await fs.mkdir(path.dirname(destination), { recursive: true });
await fs.writeFile(destination, content);
console.log(`Vendor-Datei synchronisiert: ${file.destination}`);
}
for (const file of files) await copyVerifiedFile(file);
const sourceImages = path.join(root, 'node_modules/jquery-ui/dist/themes/base/images');
const destinationImages = path.join(root, 'public/vendor/jquery-ui/images');
await fs.rm(destinationImages, { recursive: true, force: true });
await fs.mkdir(destinationImages, { recursive: true });
for (const entry of await fs.readdir(sourceImages, { withFileTypes: true })) {
if (!entry.isFile()) continue;
await fs.copyFile(path.join(sourceImages, entry.name), path.join(destinationImages, entry.name));
}
console.log('jQuery-UI-Themebilder synchronisiert.');