Files
AFFiNE-Mirror/packages/backend/server/scripts/genconfig.ts
T
DarkSky 0c7b20dc18 chore: migrate oxlint & oxfmt (#15464)
#### PR Dependency Tree


* **PR #15464** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Replaced the project’s formatting and linting workflow with Oxfmt and
Oxlint.
* Added shared formatting and linting configuration, editor integration,
and updated automated checks.
* Updated generated files, scripts, and lint guidance to use the new
tooling.

* **Style**
* Reformatted templates, source code, examples, and configuration files
for consistent readability.
  * No user-facing functionality or rendering behavior changed.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-10 23:51:28 +08:00

115 lines
3.0 KiB
TypeScript

/* oxlint-disable */
import '../src/prelude';
import '../src/app.module';
import fs from 'node:fs';
import { ProjectRoot } from '@affine-tools/utils/path';
import { Package } from '@affine-tools/utils/workspace';
import {
getDescriptors as getAllDescriptors,
ConfigDescriptor,
} from '../src/base/config/register';
const IGNORED_MODULES = new Set(['db', 'redis', 'graphql']);
function getDescriptors() {
return getAllDescriptors()
.filter(({ module }) => !IGNORED_MODULES.has(module))
.map(({ module, descriptors }) => ({
module,
descriptors: descriptors.filter(({ descriptor }) => !descriptor.internal),
}));
}
interface PropertySchema {
description: string;
type?: 'array' | 'boolean' | 'integer' | 'number' | 'object' | 'string';
default?: any;
}
function convertDescriptorToSchemaProperty(descriptor: ConfigDescriptor<any>) {
const property: PropertySchema = {
...descriptor.schema,
description:
descriptor.schema.description +
`\n@default ${JSON.stringify(descriptor.default)}` +
(descriptor.env ? `\n@environment \`${descriptor.env[0]}\`` : '') +
(descriptor.link ? `\n@link ${descriptor.link}` : ''),
default: descriptor.default,
};
return property;
}
function generateJsonSchema(outputPath: string) {
const schema = {
$schema: 'http://json-schema.org/draft-07/schema#',
title: 'AFFiNE Application Configuration',
type: 'object',
properties: {},
};
getDescriptors().forEach(({ module, descriptors }) => {
schema.properties[module] = {
type: 'object',
description: `Configuration for ${module} module`,
properties: {},
};
descriptors.forEach(({ key, descriptor }) => {
schema.properties[module].properties[key] =
convertDescriptorToSchemaProperty(descriptor);
});
});
fs.writeFileSync(outputPath, JSON.stringify(schema, null, 2));
console.log(`Config schema generated at: ${outputPath}`);
}
function generateAdminConfigJson(outputPath: string) {
const config = {};
getDescriptors().forEach(({ module, descriptors }) => {
const modulizedConfig = {};
config[module] = modulizedConfig;
descriptors.forEach(({ key, descriptor }) => {
let type: string;
switch (descriptor.schema?.type) {
case 'number':
type = 'Number';
break;
case 'boolean':
type = 'Boolean';
break;
case 'array':
type = 'Array';
break;
case 'object':
type = 'Object';
break;
default:
type = 'String';
}
modulizedConfig[key] = {
type,
desc: descriptor.desc,
link: descriptor.link,
env: descriptor.env?.[0],
};
});
});
fs.writeFileSync(outputPath, JSON.stringify(config, null, 2));
}
function main() {
generateJsonSchema(
ProjectRoot.join('.docker', 'selfhost', 'schema.json').toString()
);
generateAdminConfigJson(
new Package('@affine/admin').join('src/config.json').toString()
);
}
main();