Skip to content
This repository has been archived by the owner on Jan 9, 2023. It is now read-only.

Commit

Permalink
fix: add better error handling on ddoc bin
Browse files Browse the repository at this point in the history
  • Loading branch information
fox1t committed Mar 4, 2020
1 parent 9c7e36c commit 6fa252a
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 11 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ yarn.lock
.coveralls.yml

#misc
db/**
db/*
!db/config.json
!db/designs
.env
17 changes: 13 additions & 4 deletions bin/ddoc.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@ const typescript_1 = __importDefault(require("typescript"));
const require_from_string_1 = __importDefault(require("require-from-string"));
const glob_1 = __importDefault(require("glob"));
const mkdirp_1 = __importDefault(require("mkdirp"));
const chalk_1 = __importDefault(require("chalk"));
const stat = util_1.promisify(fs_1.default.stat);
const readFile = util_1.promisify(fs_1.default.readFile);
const writeFile = util_1.promisify(fs_1.default.writeFile);
const unlink = util_1.promisify(fs_1.default.unlink);
const glob = util_1.promisify(glob_1.default);
async function deleteOldDdocs(dest) {
const oldDdocs = await glob(path_1.default.join(dest, '**/*.json'));
return Promise.all(oldDdocs.map(file => unlink(file)));
}
const prog = sade_1.default('ddoc');
prog.version('0.1.0');
prog
Expand Down Expand Up @@ -47,14 +53,16 @@ prog
}
console.log(`> src directory is ${src}`);
await mkdirp_1.default(dest);
await deleteOldDdocs(dest);
console.log(`> destination directory is ${dest}`);
const errors = [];
await Promise.all(ddocs.map(async (srcPath) => {
try {
const sourceFile = (await readFile(srcPath)).toString();
const output = typescript_1.default.transpileModule(sourceFile, tsconfig);
const ddoc = require_from_string_1.default(output.outputText);
const filename = path_1.default.basename(srcPath, '.ts');
await writeFile(path_1.default.join(src, `${filename}.js`), output.outputText);
const ddoc = require_from_string_1.default(output.outputText);
const stringifiedDesign = JSON.stringify(ddoc, (_, val) => {
if (typeof val === 'function') {
return val.toString();
Expand All @@ -63,13 +71,14 @@ prog
}, 1);
await writeFile(path_1.default.join(dest, `${filename}.json`), stringifiedDesign);
}
catch (err) {
errors.push(err);
catch (error) {
errors.push({ file: srcPath, error });
}
}));
if (errors.length > 0) {
errors.forEach(err => {
console.error(err);
var _a;
console.log(`\n${chalk_1.default.red('ddoc error')} - ${chalk_1.default.cyan(err.file)}${(_a = err.error.stack) === null || _a === void 0 ? void 0 : _a.toString()}\n`);
});
throw new Error(`Compilation failed. Resolve errors in your code and try again.`);
}
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"url": "https://github.com/HospitalRun/hospitalrun-server.git"
},
"scripts": {
"ddoc": "npm run build:bin && node bin/ddoc",
"ddoc": "node bin/ddoc",
"commit": "npx git-cz",
"build": "npm run clean && tsc -p ./tsconfig.json && npm run build:designs",
"build:designs": "tsc -p ./src/db/tsconfig.json",
Expand Down Expand Up @@ -56,6 +56,7 @@
"@types/sade": "~1.6.0",
"@typescript-eslint/eslint-plugin": "~2.21.0",
"@typescript-eslint/parser": "~2.21.0",
"chalk": "~3.0.0",
"commitizen": "~4.0.3",
"commitlint-config-cz": "~0.13.0",
"coveralls": "~3.0.9",
Expand Down
23 changes: 18 additions & 5 deletions src/bin/ddoc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,19 @@ import ts from 'typescript'
import requireFromString from 'require-from-string'
import originalGlob from 'glob'
import mkdirp from 'mkdirp'
import chalk from 'chalk'

const stat = promisify(fs.stat)
const readFile = promisify(fs.readFile)
const writeFile = promisify(fs.writeFile)
const unlink = promisify(fs.unlink)
const glob = promisify(originalGlob)

async function deleteOldDdocs(dest: string) {
const oldDdocs = await glob(path.join(dest, '**/*.json'))
return Promise.all(oldDdocs.map(file => unlink(file)))
}

const prog = sade('ddoc')

prog.version('0.1.0')
Expand Down Expand Up @@ -52,16 +59,18 @@ prog

console.log(`> src directory is ${src}`)
await mkdirp(dest)
await deleteOldDdocs(dest)
console.log(`> destination directory is ${dest}`)

const errors: Error[] = []
const errors: { file: string; error: Error }[] = []
await Promise.all(
ddocs.map(async srcPath => {
try {
const sourceFile = (await readFile(srcPath)).toString()
const output = ts.transpileModule(sourceFile, tsconfig)
const ddoc = requireFromString(output.outputText)
const filename = path.basename(srcPath, '.ts')
await writeFile(path.join(src, `${filename}.js`), output.outputText)
const ddoc = requireFromString(output.outputText)
const stringifiedDesign = JSON.stringify(
ddoc,
(_, val) => {
Expand All @@ -73,14 +82,18 @@ prog
1,
)
await writeFile(path.join(dest, `${filename}.json`), stringifiedDesign)
} catch (err) {
errors.push(err)
} catch (error) {
errors.push({ file: srcPath, error })
}
}),
)
if (errors.length > 0) {
errors.forEach(err => {
console.error(err)
console.log(
`\n${chalk.red('ddoc error')} - ${chalk.cyan(
err.file,
)}${err.error.stack?.toString()}\n`,
)
})
throw new Error(`Compilation failed. Resolve errors in your code and try again.`)
}
Expand Down

0 comments on commit 6fa252a

Please sign in to comment.