You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-12-17 23:27:48 +02:00
refactor
This commit is contained in:
@@ -4,6 +4,37 @@ import { rootDir } from './tool-utils';
|
||||
const sqlts = require('@rmp135/sql-ts').default;
|
||||
const fs = require('fs-extra');
|
||||
|
||||
function createRuntimeObject(table: any) {
|
||||
const colStrings = [];
|
||||
for (const col of table.columns) {
|
||||
const name = col.propertyName;
|
||||
const type = col.propertyType;
|
||||
colStrings.push(`\t\t${name}: { type: '${type}' },`);
|
||||
}
|
||||
|
||||
return `\t${table.name}: {\n${colStrings.join('\n')}\n\t},`;
|
||||
}
|
||||
|
||||
const stringToSingular = (word: string) => {
|
||||
if (word.endsWith('s')) return word.substring(0, word.length - 1);
|
||||
return word;
|
||||
};
|
||||
|
||||
const generateItemRenderDependencyType = (tables: any[]) => {
|
||||
const output: string[] = [];
|
||||
|
||||
for (const table of tables) {
|
||||
if (!['notes', 'folders'].includes(table.name)) continue;
|
||||
|
||||
for (const col of table.columns) {
|
||||
const name = col.propertyName;
|
||||
output.push(`'${stringToSingular(table.name)}.${name}'`);
|
||||
}
|
||||
}
|
||||
|
||||
return output.join(' | ');
|
||||
};
|
||||
|
||||
async function main() {
|
||||
// Run the CLI app once so as to generate the database file
|
||||
process.chdir(`${rootDir}/packages/app-cli`);
|
||||
@@ -54,6 +85,11 @@ async function main() {
|
||||
return table;
|
||||
});
|
||||
|
||||
const tableStrings = [];
|
||||
for (const table of definitions.tables) {
|
||||
tableStrings.push(createRuntimeObject(table));
|
||||
}
|
||||
|
||||
const tsString = sqlts.fromObject(definitions, sqlTsConfig)
|
||||
.replace(/": /g, '"?: ');
|
||||
const header = `// AUTO-GENERATED BY ${__filename.substr(rootDir.length + 1)}`;
|
||||
@@ -65,7 +101,11 @@ async function main() {
|
||||
const splitted = existingContent.split('// AUTO-GENERATED BY');
|
||||
const staticContent = splitted[0];
|
||||
|
||||
await fs.writeFile(targetFile, `${staticContent}\n\n${header}\n\n${tsString}`, 'utf8');
|
||||
const runtimeContent = `export const databaseSchema: DatabaseTables = {\n${tableStrings.join('\n')}\n};`;
|
||||
|
||||
const itemRendererDependency = `export type ItemRendererDatabaseDependency = ${generateItemRenderDependencyType(definitions.tables)};`;
|
||||
|
||||
await fs.writeFile(targetFile, `${staticContent}\n\n${header}\n\n${tsString}\n\n${runtimeContent}\n\n${itemRendererDependency}`, 'utf8');
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
|
||||
Reference in New Issue
Block a user