You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-07-03 23:50:33 +02:00
Desktop: Add support for OCR (#8975)
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
import { execCommand } from '@joplin/utils';
|
||||
import { insertContentIntoFile, rootDir } from './tool-utils';
|
||||
import { remove } from 'fs-extra';
|
||||
|
||||
const sqlts = require('@rmp135/sql-ts').default;
|
||||
const fs = require('fs-extra');
|
||||
@ -38,84 +39,89 @@ const generateListRenderDependencyType = (tables: any[]) => {
|
||||
async function main() {
|
||||
// Run the CLI app once so as to generate the database file
|
||||
process.chdir(`${rootDir}/packages/app-cli`);
|
||||
await execCommand('yarn start version');
|
||||
const profileDir = `${__dirname}/__generateTypesProfile`;
|
||||
await execCommand(['yarn', 'start', '--profile', profileDir, 'version']);
|
||||
|
||||
const sqlTsConfig = {
|
||||
'client': 'sqlite3',
|
||||
'connection': {
|
||||
'filename': `${require('os').homedir()}/.config/joplindev/database.sqlite`,
|
||||
},
|
||||
'tableNameCasing': 'pascal',
|
||||
'singularTableNames': true,
|
||||
'useNullAsDefault': true, // To disable warning "sqlite does not support inserting default values"
|
||||
'excludedTables': [
|
||||
'main.notes_fts',
|
||||
'main.notes_fts_segments',
|
||||
'main.notes_fts_segdir',
|
||||
'main.notes_fts_docsize',
|
||||
'main.notes_fts_stat',
|
||||
'main.master_keys',
|
||||
],
|
||||
};
|
||||
try {
|
||||
const sqlTsConfig = {
|
||||
'client': 'sqlite3',
|
||||
'connection': {
|
||||
'filename': `${profileDir}/database.sqlite`,
|
||||
},
|
||||
'tableNameCasing': 'pascal',
|
||||
'singularTableNames': true,
|
||||
'useNullAsDefault': true, // To disable warning "sqlite does not support inserting default values"
|
||||
'excludedTables': [
|
||||
'main.notes_fts',
|
||||
'main.notes_fts_segments',
|
||||
'main.notes_fts_segdir',
|
||||
'main.notes_fts_docsize',
|
||||
'main.notes_fts_stat',
|
||||
'main.master_keys',
|
||||
],
|
||||
};
|
||||
|
||||
const definitions = await sqlts.toObject(sqlTsConfig);
|
||||
const definitions = await sqlts.toObject(sqlTsConfig);
|
||||
|
||||
definitions.tables = definitions.tables.map((t: any) => {
|
||||
t.columns.push({
|
||||
nullable: false,
|
||||
name: 'type_',
|
||||
type: 'int',
|
||||
optional: true,
|
||||
isEnum: false,
|
||||
propertyName: 'type_',
|
||||
propertyType: 'number',
|
||||
});
|
||||
|
||||
return t;
|
||||
});
|
||||
|
||||
definitions.tables = definitions.tables.map((table: any) => {
|
||||
table.columns = table.columns.map((column: any) => {
|
||||
return {
|
||||
...column,
|
||||
definitions.tables = definitions.tables.map((t: any) => {
|
||||
t.columns.push({
|
||||
nullable: false,
|
||||
name: 'type_',
|
||||
type: 'int',
|
||||
optional: true,
|
||||
};
|
||||
isEnum: false,
|
||||
propertyName: 'type_',
|
||||
propertyType: 'number',
|
||||
});
|
||||
|
||||
return t;
|
||||
});
|
||||
|
||||
return table;
|
||||
});
|
||||
definitions.tables = definitions.tables.map((table: any) => {
|
||||
table.columns = table.columns.map((column: any) => {
|
||||
return {
|
||||
...column,
|
||||
optional: true,
|
||||
};
|
||||
});
|
||||
|
||||
const tableStrings = [];
|
||||
for (const table of definitions.tables) {
|
||||
tableStrings.push(createRuntimeObject(table));
|
||||
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)}`;
|
||||
|
||||
const targetFile = `${rootDir}/packages/lib/services/database/types.ts`;
|
||||
console.info(`Writing type definitions to ${targetFile}...`);
|
||||
|
||||
const existingContent = (await fs.pathExists(targetFile)) ? await fs.readFile(targetFile, 'utf8') : '';
|
||||
const splitted = existingContent.split('// AUTO-GENERATED BY');
|
||||
const staticContent = splitted[0];
|
||||
|
||||
const runtimeContent = `export const databaseSchema: DatabaseTables = {\n${tableStrings.join('\n')}\n};`;
|
||||
|
||||
const listRendererDependency = `type ListRendererDatabaseDependency = ${generateListRenderDependencyType(definitions.tables)};`;
|
||||
const noteListTypeFilePath = `${rootDir}/packages/lib/services/plugins/api/noteListType.ts`;
|
||||
|
||||
await fs.writeFile(targetFile, `${staticContent}\n\n${header}\n\n${tsString}\n\n${runtimeContent}`, 'utf8');
|
||||
|
||||
console.info(`Writing ListRendererDatabaseDependency type to ${noteListTypeFilePath}...`);
|
||||
|
||||
await insertContentIntoFile(
|
||||
noteListTypeFilePath,
|
||||
'// AUTO-GENERATED by generate-database-type\n',
|
||||
'\n// AUTO-GENERATED by generate-database-type',
|
||||
listRendererDependency,
|
||||
);
|
||||
} finally {
|
||||
await remove(profileDir);
|
||||
}
|
||||
|
||||
const tsString = sqlts.fromObject(definitions, sqlTsConfig)
|
||||
.replace(/": /g, '"?: ');
|
||||
const header = `// AUTO-GENERATED BY ${__filename.substr(rootDir.length + 1)}`;
|
||||
|
||||
const targetFile = `${rootDir}/packages/lib/services/database/types.ts`;
|
||||
console.info(`Writing type definitions to ${targetFile}...`);
|
||||
|
||||
const existingContent = (await fs.pathExists(targetFile)) ? await fs.readFile(targetFile, 'utf8') : '';
|
||||
const splitted = existingContent.split('// AUTO-GENERATED BY');
|
||||
const staticContent = splitted[0];
|
||||
|
||||
const runtimeContent = `export const databaseSchema: DatabaseTables = {\n${tableStrings.join('\n')}\n};`;
|
||||
|
||||
const listRendererDependency = `type ListRendererDatabaseDependency = ${generateListRenderDependencyType(definitions.tables)};`;
|
||||
const noteListTypeFilePath = `${rootDir}/packages/lib/services/plugins/api/noteListType.ts`;
|
||||
|
||||
await fs.writeFile(targetFile, `${staticContent}\n\n${header}\n\n${tsString}\n\n${runtimeContent}`, 'utf8');
|
||||
|
||||
console.info(`Writing ListRendererDatabaseDependency type to ${noteListTypeFilePath}...`);
|
||||
|
||||
await insertContentIntoFile(
|
||||
noteListTypeFilePath,
|
||||
'// AUTO-GENERATED by generate-database-type\n',
|
||||
'\n// AUTO-GENERATED by generate-database-type',
|
||||
listRendererDependency,
|
||||
);
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
|
Reference in New Issue
Block a user