Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,13 @@
|
||||
// Generated, do not edit. sha256:66149bd143afa432d9d09519581acf122a3b5d0a21975829b89df297fac236de
|
||||
export { secp256k1, schnorr } from '@noble/curves/secp256k1.js';
|
||||
export { sha256 } from '@noble/hashes/sha2.js';
|
||||
export { bytesToHex, hexToBytes, utf8ToBytes, concatBytes } from '@noble/hashes/utils.js';
|
||||
|
||||
export { chacha20 } from '@noble/ciphers/chacha.js';
|
||||
export { extract as hkdfExtract, expand as hkdfExpand } from '@noble/hashes/hkdf.js';
|
||||
export { hmac } from '@noble/hashes/hmac.js';
|
||||
export { base64 } from '@scure/base';
|
||||
|
||||
export { ripemd160 } from '@noble/hashes/legacy.js';
|
||||
export { HDKey } from '@scure/bip32';
|
||||
export { base58check, bech32, bech32m } from '@scure/base';
|
||||
@@ -0,0 +1,189 @@
|
||||
// Generated, do not edit. sha256:bd50331802703178a5561c2051cfa66fb4fdc608745b61d6cac1576e04cefdc9
|
||||
import { readFile, writeFile, mkdir, copyFile, rm, readdir } from 'node:fs/promises';
|
||||
import { join, resolve, dirname, basename } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
||||
const MODULES = join(ROOT, 'node_modules');
|
||||
const VENDOR = join(ROOT, 'client', 'vendor');
|
||||
|
||||
function fout(bericht) {
|
||||
console.error(`\n[vendor] ${bericht}\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
export function pinnedVersion(naam, pkgJson) {
|
||||
const alles = { ...((pkgJson && pkgJson.dependencies) || {}), ...((pkgJson && pkgJson.devDependencies) || {}) };
|
||||
const pin = alles[naam];
|
||||
return /^\d+\.\d+\.\d+$/.test(String(pin ?? '')) ? pin : null;
|
||||
}
|
||||
|
||||
export function pinMismatch(naam, installed, pkgJson) {
|
||||
const pin = pinnedVersion(naam, pkgJson);
|
||||
if (!pin || pin === installed) return null;
|
||||
return `${naam} staat op ${installed} in node_modules, maar package.json pint ${pin}.\n`
|
||||
+ ' Dat gebeurt na een `git pull` die package.json wijzigde: er is nog niets geinstalleerd.\n'
|
||||
+ ' Draai eerst: npm install';
|
||||
}
|
||||
|
||||
let projectPkg = null;
|
||||
async function pakketVersie(naam) {
|
||||
let versie;
|
||||
try {
|
||||
versie = JSON.parse(await readFile(join(MODULES, naam, 'package.json'), 'utf8')).version;
|
||||
} catch {
|
||||
fout(`${naam} niet gevonden in node_modules. Draai eerst: npm install`);
|
||||
}
|
||||
projectPkg ??= JSON.parse(await readFile(join(ROOT, 'package.json'), 'utf8'));
|
||||
const mis = pinMismatch(naam, versie, projectPkg);
|
||||
if (mis) fout(mis);
|
||||
return versie;
|
||||
}
|
||||
|
||||
async function vendorInter() {
|
||||
const naam = '@fontsource-variable/inter';
|
||||
const versie = await pakketVersie(naam);
|
||||
const bron = join(MODULES, naam);
|
||||
const doel = join(VENDOR, 'inter');
|
||||
await mkdir(join(doel, 'files'), { recursive: true });
|
||||
|
||||
let bestanden;
|
||||
try {
|
||||
bestanden = (await readdir(join(bron, 'files'))).filter(f => f.endsWith('-opsz-normal.woff2'));
|
||||
} catch {
|
||||
fout(`${naam}/files/ ontbreekt: pakket onvolledig of van vorm veranderd.`);
|
||||
}
|
||||
if (bestanden.length === 0) fout(`${naam}: geen *-opsz-normal.woff2 gevonden (andere pakketvorm?).`);
|
||||
for (const f of bestanden) await copyFile(join(bron, 'files', f), join(doel, 'files', f));
|
||||
|
||||
let css;
|
||||
try {
|
||||
css = await readFile(join(bron, 'opsz.css'), 'utf8');
|
||||
} catch {
|
||||
fout(`${naam}/opsz.css ontbreekt: pakket van vorm veranderd; CSS niet af te leiden.`);
|
||||
}
|
||||
const gekopieerd = new Set(bestanden);
|
||||
const blokken = css.split('@font-face').slice(1)
|
||||
.map(b => `@font-face${b.slice(0, b.indexOf('}') + 1)}`)
|
||||
.filter(b => {
|
||||
const m = b.match(/url\(\.\/files\/([^)]+)\)/);
|
||||
return m && gekopieerd.has(basename(m[1]));
|
||||
})
|
||||
.map(b => b.replace(/'Inter Variable'/g, `'Inter'`));
|
||||
|
||||
if (blokken.length !== bestanden.length) {
|
||||
fout(`Inter: ${bestanden.length} woff2 gekopieerd maar ${blokken.length} @font-face-blokken ` +
|
||||
`gevonden. Die twee horen gelijk te zijn; controleer de vorm van opsz.css.`);
|
||||
}
|
||||
|
||||
const kop = [
|
||||
'/* GEGENEREERD door scripts/vendor.mjs: niet met de hand bewerken.',
|
||||
` * Bron: ${naam} ${versie}, opsz.css (upright subsets).`,
|
||||
" * Aangepast: font-family 'Inter Variable' -> 'Inter'. Verder ongewijzigd.",
|
||||
' */',
|
||||
].join('\n');
|
||||
await writeFile(join(doel, 'inter.css'), `${kop}\n\n${blokken.join('\n\n')}\n`, 'utf8');
|
||||
|
||||
return `${naam} ${versie} → client/vendor/inter/ (${bestanden.length} subsets + inter.css)`;
|
||||
}
|
||||
|
||||
const CHART_LIBS = [
|
||||
{ pakket: 'chart.js', bestand: 'dist/chart.umd.js', doelmap: 'chartjs' },
|
||||
{ pakket: 'hammerjs', bestand: 'hammer.min.js', doelmap: 'hammerjs' },
|
||||
{ pakket: 'chartjs-plugin-zoom', bestand: 'dist/chartjs-plugin-zoom.min.js', doelmap: 'chartjs-plugin-zoom' },
|
||||
];
|
||||
|
||||
async function vendorChartLibs() {
|
||||
const regels = [];
|
||||
for (const { pakket, bestand, doelmap } of CHART_LIBS) {
|
||||
const versie = await pakketVersie(pakket);
|
||||
const naam = basename(bestand);
|
||||
const doel = join(VENDOR, doelmap);
|
||||
await mkdir(doel, { recursive: true });
|
||||
|
||||
let code;
|
||||
try {
|
||||
code = await readFile(join(MODULES, pakket, bestand), 'utf8');
|
||||
} catch {
|
||||
fout(`${pakket}/${bestand} ontbreekt: pakket onvolledig of van vorm veranderd.`);
|
||||
}
|
||||
const zonderMap = code.replace(/\r?\n\/\/# sourceMappingURL=[^\r\n]*\s*$/, '\n');
|
||||
if (/sourceMappingURL/.test(zonderMap)) {
|
||||
fout(`${pakket}: sourceMappingURL-verwijzing niet verwijderd: controleer de vorm van ${naam}.`);
|
||||
}
|
||||
await writeFile(join(doel, naam), zonderMap, 'utf8');
|
||||
regels.push(`${pakket} ${versie} → client/vendor/${doelmap}/${naam}`);
|
||||
}
|
||||
return regels;
|
||||
}
|
||||
|
||||
async function vendorCrypto() {
|
||||
const { build } = await import('esbuild');
|
||||
const versies = [];
|
||||
for (const p of ['@noble/curves', '@noble/hashes', '@noble/ciphers', '@scure/bip32', '@scure/base']) {
|
||||
versies.push(`${p} ${await pakketVersie(p)}`);
|
||||
}
|
||||
const esbuildVersie = await pakketVersie('esbuild');
|
||||
|
||||
const doel = join(VENDOR, 'crypto');
|
||||
await mkdir(doel, { recursive: true });
|
||||
const uit = join(doel, 'noble-scure.js');
|
||||
|
||||
try {
|
||||
await build({
|
||||
entryPoints: [join(ROOT, 'scripts', 'vendor-entries', 'crypto.js')],
|
||||
outfile: uit,
|
||||
bundle: true,
|
||||
format: 'esm',
|
||||
target: ['es2022'],
|
||||
minify: true,
|
||||
sourcemap: false,
|
||||
legalComments: 'none',
|
||||
logLevel: 'warning',
|
||||
});
|
||||
} catch (e) {
|
||||
fout(`esbuild kon de crypto-bundel niet bouwen: ${e.message}`);
|
||||
}
|
||||
|
||||
const code = await readFile(uit, 'utf8');
|
||||
const verwacht = ['secp256k1', 'schnorr', 'sha256', 'ripemd160', 'HDKey', 'base58check', 'bech32', 'bech32m',
|
||||
'bytesToHex', 'hexToBytes', 'utf8ToBytes', 'concatBytes',
|
||||
'chacha20', 'hkdfExtract', 'hkdfExpand', 'hmac', 'base64'];
|
||||
const exportRegel = code.match(/export\s*\{[^}]*\}/g)?.join(' ') ?? '';
|
||||
const missend = verwacht.filter(n => !new RegExp(`\\b${n}\\b`).test(exportRegel));
|
||||
if (missend.length) {
|
||||
fout(`crypto-bundel mist exports: ${missend.join(', ')}. Controleer scripts/vendor-entries/crypto.js.`);
|
||||
}
|
||||
|
||||
const kb = Math.round(code.length / 1024);
|
||||
return `${versies.join(' + ')} → client/vendor/crypto/noble-scure.js (${kb} KB, gebundeld met esbuild ${esbuildVersie})`;
|
||||
}
|
||||
|
||||
async function vendorQr() {
|
||||
const pakket = 'qrcode-generator';
|
||||
const versie = await pakketVersie(pakket);
|
||||
const doel = join(VENDOR, 'qrcode');
|
||||
await mkdir(doel, { recursive: true });
|
||||
let code;
|
||||
try {
|
||||
code = await readFile(join(MODULES, pakket, 'dist', 'qrcode.mjs'), 'utf8');
|
||||
} catch {
|
||||
fout(`${pakket}/dist/qrcode.mjs ontbreekt: pakket onvolledig of van vorm veranderd.`);
|
||||
}
|
||||
if (!/export default qrcode;/.test(code) || /^\s*import\s/m.test(code) || /sourceMappingURL/.test(code)) {
|
||||
fout(`${pakket}: dist/qrcode.mjs heeft niet de verwachte vorm (één default export, geen imports, geen sourcemap).`);
|
||||
}
|
||||
await writeFile(join(doel, 'qrcode.mjs'), code, 'utf8');
|
||||
return `${pakket} ${versie} → client/vendor/qrcode/qrcode.mjs`;
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await rm(VENDOR, { recursive: true, force: true });
|
||||
await mkdir(VENDOR, { recursive: true });
|
||||
|
||||
const regels = [await vendorInter(), ...(await vendorChartLibs()), await vendorCrypto(), await vendorQr()];
|
||||
console.log('[vendor] klaar:');
|
||||
for (const r of regels) console.log(` - ${r}`);
|
||||
}
|
||||
|
||||
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) await main();
|
||||
Reference in new issue
Block a user