mirror of
https://github.com/LukeHagar/sveltesociety.dev.git
synced 2025-12-07 20:57:45 +00:00
* Add zod schemas for CI validation * Require npm field for components.json * Remove svelte-layout-resizable * Stricter Zod validation * Stricter repository field validation * Implement requested changes * Add back accidentally removed field * Move SvelteStore to templates.json * Update category and tags * Add script to get npm data * Add script to get publint data * Re-run updateNpm.js * Re-run updatePublint.js * Implement initial feedback * Use npm.json data * Update npm.js * Switch async/await to then/catch Co-authored-by: MacFJA <MacFJA@users.noreply.github.com> * Fix prettier * Run script * Re-run updateNpm * Also read tools.json * Add @types/node * Restructure npm.json output * Fix updatePublint.js * Display last update on components page * Add to weekly workflow * Clarify updating npm data * Update src/lib/utils/injectNpmData.ts Co-authored-by: MacFJA <MacFJA@users.noreply.github.com> * Smaller date font, add version * Improve error text * Fix property title * Move json to lib/data directory * Fix npm.json path * Also check tools.json * Add to automated PR * Add injectPublintData function * Update publint --------- Co-authored-by: MacFJA <MacFJA@users.noreply.github.com>
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
// @ts-check
|
|
// Source: https://github.com/bluwy/publint/blob/master/site/src/utils/worker.js
|
|
|
|
import { writeFileSync } from 'node:fs';
|
|
import { inflate } from 'pako';
|
|
import getNpmTarballUrl from 'get-npm-tarball-url';
|
|
import { componentsSchema, toolsSchema } from '../src/lib/schemas.js';
|
|
import components from '../src/routes/components/components.json' assert { type: 'json' };
|
|
import tools from '../src/routes/tools/tools.json' assert { type: 'json' };
|
|
import npm from '../src/lib/data/npm.json' assert { type: 'json' };
|
|
import { publint } from 'publint';
|
|
import { untar } from './untar.js';
|
|
import { createTarballVfs } from './tarball.js';
|
|
|
|
const dataWithoutVersions = [...componentsSchema.parse(components), ...toolsSchema.parse(tools)];
|
|
|
|
/** @param input {import('zod').infer<typeof toolsSchema>} */
|
|
const injectVersions = (input) => {
|
|
const output = [];
|
|
for (const item of input) {
|
|
/** @type {string} */
|
|
const version = npm[item.npm]?.version;
|
|
if (version) {
|
|
output.push({ ...item, version });
|
|
}
|
|
}
|
|
return output;
|
|
};
|
|
|
|
const dataWithVersions = injectVersions(dataWithoutVersions);
|
|
|
|
const output = await Promise.all(
|
|
dataWithVersions.map(async (pkg) => {
|
|
try {
|
|
return await processPackage(pkg);
|
|
} catch (error) {
|
|
console.log(error.message);
|
|
}
|
|
})
|
|
).then((values) => {
|
|
let versions = {};
|
|
for (const value of values) {
|
|
if (value) {
|
|
versions[value.name] = value.valid;
|
|
}
|
|
}
|
|
return versions;
|
|
});
|
|
|
|
writeFileSync('src/lib/data/publint.json', JSON.stringify(output));
|
|
|
|
/** @param pkg {ReturnType<typeof injectVersions>[0]} */
|
|
async function processPackage(pkg) {
|
|
const tarballUrl = getNpmTarballUrl(pkg.npm, pkg.version);
|
|
let resultBuffer;
|
|
try {
|
|
const result = await fetch(tarballUrl);
|
|
resultBuffer = await result.arrayBuffer();
|
|
} catch (e) {
|
|
postMessage({ type: 'error', data: 'Package not found' });
|
|
console.error(e);
|
|
}
|
|
let files;
|
|
try {
|
|
const tarBuffer = inflate(resultBuffer).buffer; // Handles gzip (gz)
|
|
files = untar(tarBuffer); // Handles tar (t)
|
|
} catch (e) {
|
|
postMessage({ type: 'error', data: 'Failed to unpack package' });
|
|
console.error(e);
|
|
return;
|
|
}
|
|
const vfs = createTarballVfs(files);
|
|
|
|
const pkgDir = files.length ? files[0].name.split('/')[0] : 'package';
|
|
const { messages } = await publint({ pkgDir, vfs, level: 'warning' });
|
|
return { name: pkg.npm, valid: messages.length === 0 };
|
|
}
|