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",
|
"schema": "./src/generators/typeorm-model-generator/schema.json",
|
||||||
"aliases": ["tomg"],
|
"aliases": ["tomg"],
|
||||||
"description": "Creates typeorm entities via typeorm-model-generator."
|
"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 {
|
import {
|
||||||
|
FileChange,
|
||||||
formatFiles,
|
formatFiles,
|
||||||
generateFiles,
|
generateFiles,
|
||||||
joinPathFragments,
|
joinPathFragments,
|
||||||
OverwriteStrategy,
|
OverwriteStrategy,
|
||||||
readProjectConfiguration,
|
readProjectConfiguration,
|
||||||
Tree,
|
Tree,
|
||||||
|
workspaceRoot,
|
||||||
} from '@nx/devkit';
|
} from '@nx/devkit';
|
||||||
import execa from 'execa';
|
import execa from 'execa';
|
||||||
import os from 'node:os';
|
import os from 'node:os';
|
||||||
import fs from 'node:fs/promises';
|
import { mkdirSync, writeFileSync, chmodSync, rmSync } from 'node:fs';
|
||||||
import path from 'node:path';
|
import { mkdtemp, rm } from 'node:fs/promises';
|
||||||
|
import { dirname, join } from 'node:path';
|
||||||
|
|
||||||
import { TomgGeneratorSchema } from './schema';
|
import { TomgGeneratorSchema } from './schema';
|
||||||
|
|
||||||
export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
||||||
const libraryRoot = readProjectConfiguration(tree, options.project).root;
|
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(
|
const { stdout, stderr } = await execa(
|
||||||
`typeorm-model-generator`,
|
`typeorm-model-generator`,
|
||||||
[
|
[
|
||||||
@ -49,7 +61,7 @@ export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await formatFiles(tree);
|
await formatFiles(tree);
|
||||||
await fs.rm(tmpDirPath, { recursive: true, force: true });
|
await rm(tmpDirPath, { recursive: true, force: true });
|
||||||
|
|
||||||
console.log();
|
console.log();
|
||||||
console.log('Generation complete.');
|
console.log('Generation complete.');
|
||||||
@ -57,3 +69,19 @@ export async function tomgGenerator(tree: Tree, options: TomgGeneratorSchema) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default tomgGenerator;
|
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