feat(repo): add @tools/typeorm:tomg generator (single version)
This commit is contained in:
parent
6526a42f46
commit
be20999edf
@ -5,12 +5,6 @@
|
||||
"schema": "./src/generators/typeorm-model-generator/schema.json",
|
||||
"aliases": ["tomg"],
|
||||
"description": "Creates typeorm entities via typeorm-model-generator."
|
||||
},
|
||||
"typeorm-model-generator-scaffold": {
|
||||
"factory": "./src/generators/typeorm-model-generator-scaffold/typeorm-model-generator-scaffold",
|
||||
"schema": "./src/generators/typeorm-model-generator-scaffold/schema.json",
|
||||
"aliases": ["tomg-scaffold"],
|
||||
"description": "Scaffolds a project with typeorm-model-generator config files."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
export interface TomgGeneratorSchema {
|
||||
project: string;
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/schema",
|
||||
"$id": "typeorm-model-generator-scaffold",
|
||||
"title": "",
|
||||
"description": "Scaffolds a project with typeorm-model-generator config files.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project": {
|
||||
"description": "The project to scaffold.",
|
||||
"type": "string",
|
||||
"alias": "p",
|
||||
"x-prompt": "Which project to scaffold?",
|
||||
"x-dropdown": "projects"
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
import {
|
||||
formatFiles,
|
||||
generateFiles,
|
||||
joinPathFragments,
|
||||
OverwriteStrategy,
|
||||
readProjectConfiguration,
|
||||
Tree,
|
||||
} from '@nx/devkit';
|
||||
|
||||
import { TomgGeneratorSchema } from './schema';
|
||||
|
||||
export async function tomgScaffoldGenerator(
|
||||
tree: Tree,
|
||||
options: TomgGeneratorSchema
|
||||
) {
|
||||
const libraryRoot = readProjectConfiguration(tree, options.project).root;
|
||||
|
||||
generateFiles(
|
||||
tree,
|
||||
joinPathFragments(__dirname, './files'),
|
||||
libraryRoot,
|
||||
options,
|
||||
{ overwriteStrategy: OverwriteStrategy.KeepExisting }
|
||||
);
|
||||
|
||||
await formatFiles(tree);
|
||||
}
|
||||
|
||||
export default tomgScaffoldGenerator;
|
@ -1,22 +1,34 @@
|
||||
import {
|
||||
FileChange,
|
||||
formatFiles,
|
||||
generateFiles,
|
||||
joinPathFragments,
|
||||
OverwriteStrategy,
|
||||
readProjectConfiguration,
|
||||
Tree,
|
||||
workspaceRoot,
|
||||
} from '@nx/devkit';
|
||||
import execa from 'execa';
|
||||
import os from 'node:os';
|
||||
import fs from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import { mkdirSync, writeFileSync, chmodSync, rmSync } from 'node:fs';
|
||||
import { mkdtemp, rm } from 'node:fs/promises';
|
||||
import { dirname, join } from 'node:path';
|
||||
|
||||
import { TomgGeneratorSchema } from './schema';
|
||||
|
||||
export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
||||
const libraryRoot = readProjectConfiguration(tree, options.project).root;
|
||||
|
||||
const tmpDirPath = await fs.mkdtemp(path.join(os.tmpdir(), 'tomg-'));
|
||||
generateFiles(
|
||||
tree,
|
||||
joinPathFragments(__dirname, './files'),
|
||||
libraryRoot,
|
||||
options,
|
||||
{ overwriteStrategy: OverwriteStrategy.KeepExisting }
|
||||
);
|
||||
flushChanges(workspaceRoot, tree.listChanges());
|
||||
|
||||
const tmpDirPath = await mkdtemp(join(os.tmpdir(), 'tomg-'));
|
||||
const { stdout, stderr } = await execa(
|
||||
`typeorm-model-generator`,
|
||||
[
|
||||
@ -49,7 +61,7 @@ export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
||||
);
|
||||
|
||||
await formatFiles(tree);
|
||||
await fs.rm(tmpDirPath, { recursive: true, force: true });
|
||||
await rm(tmpDirPath, { recursive: true, force: true });
|
||||
|
||||
console.log();
|
||||
console.log('Generation complete.');
|
||||
@ -57,3 +69,19 @@ export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
||||
}
|
||||
|
||||
export default tomgGenerator;
|
||||
|
||||
function flushChanges(root: string, fileChanges: FileChange[]): void {
|
||||
fileChanges.forEach((f) => {
|
||||
const fpath = join(root, f.path);
|
||||
if (f.type === 'CREATE') {
|
||||
mkdirSync(dirname(fpath), { recursive: true });
|
||||
writeFileSync(fpath, f.content);
|
||||
if (f.options?.mode) chmodSync(fpath, f.options.mode);
|
||||
} else if (f.type === 'UPDATE') {
|
||||
writeFileSync(fpath, f.content);
|
||||
if (f.options?.mode) chmodSync(fpath, f.options.mode);
|
||||
} else if (f.type === 'DELETE') {
|
||||
rmSync(fpath, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user