export async function generateTypescript (columns: IColumn[], dir: string) { const DIR = resolve(dir); await removeAsync(DIR); await ensureDirAsync(DIR); const schemas = mapSchemas(columns); // tslint:disable-next-line:forin for (const schema in schemas) { const schemaDir = resolve(DIR, schema); let outputInterfaces = ''; // tslint:disable-next-line:forin for (const table in schemas[schema]) { const interfaceName = normalizeTableName(table); const interfaceContent = schemas[schema][table].map(col => col.type).join('\n'); outputInterfaces += ` export interface ${ interfaceName } { ${ interfaceContent } } `; } await ensureDirAsync(schemaDir); await writeTypescriptFile(join(schemaDir, INDEX), outputInterfaces); } await writeTypescriptFile(join(DIR, INDEX), ` ${ Object.keys(schemas).map(schema => ` import * as ${ schema } from './${ schema }'; export { ${ schema } }; ` ).join('') } `); }
promptToAddAssets().then(addAssets => { if (!addAssets) { return; } const paths = getPaths(); return fs.ensureDirAsync(paths.vscodeFolder).then(() => { return Promise.all([ addTasksJsonIfNecessary(info.DotNet, paths, operations), addLaunchJsonIfNecessary(info.DotNet, paths, operations) ]); }); });
async function writeTypescriptFile (filename: string, output: string) { const result = await processString('', output.trim(), { replace: false, verify: false, tsconfig: false, tslint: false, editorconfig: false, tsfmt: true, tsconfigFile: null, tslintFile: null, tsfmtFile: null, vscode: false, vscodeFile: null }); await ensureDirAsync(dirname(filename)); await writeFileAsync(filename, result.dest, { encoding: 'utf-8' }); }