feat: integrate PDF Tools with toolbox portal
This commit is contained in:
64
scripts/generate-toolbox-manifest.mjs
Normal file
64
scripts/generate-toolbox-manifest.mjs
Normal file
@@ -0,0 +1,64 @@
|
||||
import { readFile, writeFile } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import process from 'node:process';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { parseToolboxApp } from '@add-ideas/toolbox-contract';
|
||||
import { format } from 'prettier';
|
||||
|
||||
const projectRoot = path.resolve(
|
||||
path.dirname(fileURLToPath(import.meta.url)),
|
||||
'..'
|
||||
);
|
||||
const packageJsonPath = path.join(projectRoot, 'package.json');
|
||||
const definitionPath = path.join(
|
||||
projectRoot,
|
||||
'src',
|
||||
'toolboxApp.definition.json'
|
||||
);
|
||||
const versionSourcePath = path.join(projectRoot, 'src', 'version.ts');
|
||||
const manifestPath = path.join(projectRoot, 'public', 'toolbox-app.json');
|
||||
|
||||
const [packageJson, definition, versionSource] = await Promise.all([
|
||||
readJson(packageJsonPath),
|
||||
readJson(definitionPath),
|
||||
readFile(versionSourcePath, 'utf8'),
|
||||
]);
|
||||
|
||||
const sourceVersion = versionSource.match(
|
||||
/APP_VERSION\s*=\s*['"]([^'"]+)['"]/
|
||||
)?.[1];
|
||||
|
||||
if (!sourceVersion) {
|
||||
throw new Error('Could not read APP_VERSION from src/version.ts.');
|
||||
}
|
||||
|
||||
if (sourceVersion !== packageJson.version) {
|
||||
throw new Error(
|
||||
`Version mismatch: package.json is ${packageJson.version}, while src/version.ts is ${sourceVersion}.`
|
||||
);
|
||||
}
|
||||
|
||||
const manifest = {
|
||||
$schema:
|
||||
'https://git.add-ideas.de/zemion/toolbox-sdk/raw/branch/main/schemas/toolbox-app.v1.schema.json',
|
||||
schemaVersion: 1,
|
||||
...definition,
|
||||
version: packageJson.version,
|
||||
};
|
||||
parseToolboxApp(manifest);
|
||||
const output = await format(JSON.stringify(manifest), { parser: 'json' });
|
||||
|
||||
if (process.argv.includes('--check')) {
|
||||
const existing = await readFile(manifestPath, 'utf8').catch(() => '');
|
||||
if (existing !== output) {
|
||||
throw new Error(
|
||||
'public/toolbox-app.json is out of date. Run npm run manifest:generate.'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
await writeFile(manifestPath, output);
|
||||
}
|
||||
|
||||
async function readJson(filePath) {
|
||||
return JSON.parse(await readFile(filePath, 'utf8'));
|
||||
}
|
||||
Reference in New Issue
Block a user