From 8ce64dd3b519cc03463dd05a070ff2e30657b8b5 Mon Sep 17 00:00:00 2001 From: Anthony Martin Date: Thu, 16 Dec 2021 19:03:31 +0000 Subject: [PATCH] Use fs/promises instead of promisify --- generator/cmd/generateall.ts | 4 ++-- generator/cmd/generateonboardedreport.ts | 2 +- generator/cmd/generatesingle.ts | 2 +- generator/cmd/listbasepaths.ts | 2 +- generator/cmd/listresources.ts | 6 +----- generator/generate.ts | 2 +- generator/git.ts | 9 +++------ generator/specs.ts | 14 ++++++-------- generator/utils.ts | 24 +++++++----------------- tools/server.ts | 5 +---- tools/tests.ts | 4 +--- 11 files changed, 25 insertions(+), 49 deletions(-) diff --git a/generator/cmd/generateall.ts b/generator/cmd/generateall.ts index b41241d348..2ed1d3649e 100644 --- a/generator/cmd/generateall.ts +++ b/generator/cmd/generateall.ts @@ -64,7 +64,7 @@ executeSynchronous(async () => { for (const basePath of basePaths) { try { - const readme = await validateAndReturnReadmePath(localPath, basePath); + const readme = validateAndReturnReadmePath(localPath, basePath); const namespaces = keys(await getApiVersionsByNamespace(readme)); let filteredAutoGenList = findOrGenerateAutogenEntries(basePath, namespaces) .filter(x => x.disabledForAutogen !== true); @@ -88,7 +88,7 @@ executeSynchronous(async () => { path: ['schemas'] } as Package; try { - const readme = await validateAndReturnReadmePath(localPath, autoGenConfig.readmeFile || autoGenConfig.basePath); + const readme = validateAndReturnReadmePath(localPath, autoGenConfig.readmeFile || autoGenConfig.basePath); pkg.packageName = getPackageString(readme); const newConfigs = await generateSchemas(readme, autoGenConfig); diff --git a/generator/cmd/generateonboardedreport.ts b/generator/cmd/generateonboardedreport.ts index 6217356628..f5cdf53c7f 100644 --- a/generator/cmd/generateonboardedreport.ts +++ b/generator/cmd/generateonboardedreport.ts @@ -14,7 +14,7 @@ executeSynchronous(async () => { const allBasePaths = []; for (const basePath of basePaths) { - const readme = await validateAndReturnReadmePath(constants.specsRepoPath, basePath); + const readme = validateAndReturnReadmePath(constants.specsRepoPath, basePath); const namespaces = keys(await getApiVersionsByNamespace(readme)); const autogenlistEntries = findOrGenerateAutogenEntries(basePath, namespaces); diff --git a/generator/cmd/generatesingle.ts b/generator/cmd/generatesingle.ts index e145a35f37..b503add8dd 100644 --- a/generator/cmd/generatesingle.ts +++ b/generator/cmd/generatesingle.ts @@ -28,7 +28,7 @@ executeSynchronous(async () => { let readme = ''; try { - readme = await validateAndReturnReadmePath(localPath, basePath); + readme = validateAndReturnReadmePath(localPath, basePath); } catch { throw new Error(`Unable to find a readme under '${basePath}'. Please try running 'npm run list-basepaths' to find the list of valid paths.`); } diff --git a/generator/cmd/listbasepaths.ts b/generator/cmd/listbasepaths.ts index ed22bbd198..f4a1f3e1ce 100644 --- a/generator/cmd/listbasepaths.ts +++ b/generator/cmd/listbasepaths.ts @@ -12,7 +12,7 @@ executeSynchronous(async () => { const basePaths = await cloneAndGenerateBasePaths(constants.specsRepoPath, constants.specsRepoUri, constants.specsRepoCommitHash); for (const basePath of basePaths) { - const readme = await validateAndReturnReadmePath(constants.specsRepoPath, basePath); + const readme = validateAndReturnReadmePath(constants.specsRepoPath, basePath); const namespaces = keys(await getApiVersionsByNamespace(readme)); const autogenlistEntries = findOrGenerateAutogenEntries(basePath, namespaces); diff --git a/generator/cmd/listresources.ts b/generator/cmd/listresources.ts index 026e782e85..0aa3c93224 100644 --- a/generator/cmd/listresources.ts +++ b/generator/cmd/listresources.ts @@ -1,8 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import path from 'path'; -import fs from 'fs'; -import { promisify } from 'util'; +import { readFile, writeFile } from 'fs/promises'; import * as constants from '../constants'; import { lowerCaseCompare, executeSynchronous } from '../utils'; @@ -26,9 +25,6 @@ const rootSchemaPaths = [ 'https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json', ]; -const readFile = promisify(fs.readFile); -const writeFile = promisify(fs.writeFile); - async function readSchema(schemaUri: string) { if (!schemaUri.toLowerCase().startsWith(constants.schemasBaseUri.toLowerCase() + '/')) { throw new Error(`Invalid schema Uri ${schemaUri}`); diff --git a/generator/generate.ts b/generator/generate.ts index aeeeb735b4..39d3a7765a 100644 --- a/generator/generate.ts +++ b/generator/generate.ts @@ -103,7 +103,7 @@ async function handleGeneratedSchema(readme: string, schemaPath: string, autoGen async function execAutoRest(tmpFolder: string, params: string[]) { await executeCmd(__dirname, `${__dirname}/node_modules/.bin/${autorestBinary}`, params); - if (!await fileExists(tmpFolder)) { + if (!fileExists(tmpFolder)) { return []; } diff --git a/generator/git.ts b/generator/git.ts index fa0f949917..efda3dff7a 100644 --- a/generator/git.ts +++ b/generator/git.ts @@ -1,14 +1,11 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { executeCmd, rmdirRecursive } from './utils'; -import fs from 'fs'; -import { promisify } from 'util'; - -const mkdir = promisify(fs.mkdir); -const exists = promisify(fs.exists); +import { existsSync } from 'fs'; +import { mkdir } from 'fs/promises'; export async function resetGitDirectory(localPath: string, includeGc: boolean) { - if (await exists(localPath)) { + if (existsSync(localPath)) { await executeCmd(localPath, 'git', ['reset', '-q', '.']); await executeCmd(localPath, 'git', ['checkout', '-q', '--', '.']); await executeCmd(localPath, 'git', ['clean', '-q', '-fd']); diff --git a/generator/specs.ts b/generator/specs.ts index 5a674eff74..2b219bd7c4 100644 --- a/generator/specs.ts +++ b/generator/specs.ts @@ -1,16 +1,14 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import path from 'path'; -import fs from 'fs'; -import { promisify } from 'util'; import { cloneGitRepo } from './git'; import { findRecursive, lowerCaseEquals } from './utils'; import { ReadmeTag, AutoGenConfig, CodeBlock } from './models'; import * as constants from './constants' import * as cm from '@ts-common/commonmark-to-markdown' import * as yaml from 'js-yaml' - -const exists = promisify(fs.exists); +import { existsSync } from 'fs'; +import { readFile, writeFile } from 'fs/promises'; export async function resolveAbsolutePath(localPath: string) { if (path.isAbsolute(localPath)) { @@ -19,7 +17,7 @@ export async function resolveAbsolutePath(localPath: string) { return path.resolve(constants.generatorRoot, localPath); } -export async function validateAndReturnReadmePath(localPath: string, basePath: string) { +export function validateAndReturnReadmePath(localPath: string, basePath: string) { let readme = ''; if (basePath.toLowerCase().endsWith('readme.md')) { readme = path.resolve(localPath, basePath); @@ -27,7 +25,7 @@ export async function validateAndReturnReadmePath(localPath: string, basePath: s readme = path.resolve(localPath, 'specification', basePath, 'readme.md') } - if (!await exists(readme)) { + if (!existsSync(readme)) { throw new Error(`Unable to find readme '${readme}' in specs repo`); } @@ -79,7 +77,7 @@ function isExcludedBasePath(basePath: string) { } export async function prepareReadme(readme: string, autoGenConfig?: AutoGenConfig) { - const content = fs.readFileSync(readme).toString(); + const content = (await readFile(readme)).toString(); const markdownEx = cm.parse(content); const fileSet = new Set(); for (const node of cm.iterate(markdownEx.markDown)) { @@ -125,7 +123,7 @@ export async function prepareReadme(readme: string, autoGenConfig?: AutoGenConfi const schemaReadme = readme.replace(/\.md$/i, '.azureresourceschema.md'); - fs.writeFileSync(schemaReadme, schemaReadmeContent); + await writeFile(schemaReadme, schemaReadmeContent); } function compositeSchemaReadme(readmeTag: ReadmeTag): string { diff --git a/generator/utils.ts b/generator/utils.ts index 9f926438df..92b82999d4 100644 --- a/generator/utils.ts +++ b/generator/utils.ts @@ -2,20 +2,10 @@ // Licensed under the MIT License. import { spawn } from 'child_process'; import path from 'path'; -import fs from 'fs'; -import { promisify } from 'util'; import chalk from 'chalk'; import { series } from 'async'; - -const readdir = promisify(fs.readdir); -const stat = promisify(fs.stat); -const unlink = promisify(fs.unlink); -const rmdir = promisify(fs.rmdir); -const exists = promisify(fs.exists); -const readFile = promisify(fs.readFile); -const writeFile = promisify(fs.writeFile); -const mkdir = promisify(fs.mkdir); - +import { existsSync } from 'fs'; +import { readdir, stat, unlink, rmdir, readFile, writeFile, mkdir } from 'fs/promises'; export function executeCmd(cwd: string, cmd: string, args: string[]) : Promise { return new Promise((resolve, reject) => { @@ -90,7 +80,7 @@ export async function findRecursive(basePath: string, filter: (name: string) => } export async function rmdirRecursive(basePath: string) { - if (!await exists(basePath)) { + if (!existsSync(basePath)) { return; } @@ -184,19 +174,19 @@ export async function writeJsonFile(filePath: string, json: any) { } export async function safeMkdir(filePath: string) { - if (!await exists(filePath)) { + if (!existsSync(filePath)) { await mkdir(filePath, { recursive: true }); } } export async function safeUnlink(filePath: string) { - if (await exists(filePath)) { + if (existsSync(filePath)) { await unlink(filePath); } } -export async function fileExists(filePath: string) { - return await exists(filePath); +export function fileExists(filePath: string) { + return existsSync(filePath); } export function executeSynchronous(asyncFunc: () => Promise) { diff --git a/tools/server.ts b/tools/server.ts index 3679c2d07e..7b04940cab 100644 --- a/tools/server.ts +++ b/tools/server.ts @@ -2,11 +2,8 @@ // Licensed under the MIT License. import express = require('express'); -import { promisify } from 'util'; import { hostname } from 'os'; -import fs from 'fs'; - -const readFile = promisify(fs.readFile); +import { readFile } from 'fs/promises'; const app = express(); const port = 3000; diff --git a/tools/tests.ts b/tools/tests.ts index 4ee04c9711..704d57ec36 100644 --- a/tools/tests.ts +++ b/tools/tests.ts @@ -5,7 +5,7 @@ import Ajv from 'ajv'; import * as url from 'url'; import path from 'path'; import fs from 'fs'; -import { promisify } from 'util'; +import { readFile } from 'fs/promises'; import { getLanguageService } from 'vscode-json-languageservice'; import { TextDocument } from 'vscode-languageserver-types'; import draft4MetaSchema from 'ajv/lib/refs/json-schema-draft-04.json'; @@ -13,8 +13,6 @@ import * as schemaTestsRunner from './schemaTestsRunner'; import 'mocha'; import { findCycle } from './cycleCheck'; -const readFile = promisify(fs.readFile); - const schemasFolder = __dirname + '/../schemas/'; const schemaTestsFolder = __dirname + '/../tests/'; const testSchemasFolder = __dirname + '/schemas/';