diff --git a/app/javascript/packages/build-sass/CHANGELOG.md b/app/javascript/packages/build-sass/CHANGELOG.md index 1779cd56b61..fc30d6f8bfb 100644 --- a/app/javascript/packages/build-sass/CHANGELOG.md +++ b/app/javascript/packages/build-sass/CHANGELOG.md @@ -1,8 +1,10 @@ -## Unreleased +## 1.3.0 ### Improvements - Adds support for ".scss" file extension, as an alternative to the current ".css.scss" support. In both cases, the output files use the basename with a ".css" extension. +- Creates the `--out-dir` directory if it does not exist already. +- Outputs any error that occurs during build, not just Sass compilation errors. ## 1.2.0 diff --git a/app/javascript/packages/build-sass/cli.js b/app/javascript/packages/build-sass/cli.js index c8bf23f2072..90fbe4f7786 100755 --- a/app/javascript/packages/build-sass/cli.js +++ b/app/javascript/packages/build-sass/cli.js @@ -2,6 +2,7 @@ /* eslint-disable no-console */ +import { mkdir } from 'node:fs/promises'; import { watch } from 'chokidar'; import { fileURLToPath } from 'url'; import { parseArgs } from '@pkgjs/parseargs'; // Note: Use native util.parseArgs after Node v18 @@ -80,6 +81,9 @@ function build(files) { ); } -build(fileArgs).catch(() => { - process.exitCode = 1; -}); +mkdir(outDir, { recursive: true }) + .then(() => build(fileArgs)) + .catch((error) => { + console.error(error); + process.exitCode = 1; + }); diff --git a/app/javascript/packages/build-sass/cli.spec.js b/app/javascript/packages/build-sass/cli.spec.js new file mode 100644 index 00000000000..a4a47896483 --- /dev/null +++ b/app/javascript/packages/build-sass/cli.spec.js @@ -0,0 +1,21 @@ +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { promisify } from 'node:util'; +import { stat } from 'node:fs/promises'; +import { exec as execCallback } from 'node:child_process'; + +const exec = promisify(execCallback); +const cwd = dirname(fileURLToPath(import.meta.url)); + +describe('cli', () => { + context('with missing output directory', () => { + it('creates the output directory', async () => { + await exec( + './cli.js fixtures/missing-out-dir/in.css.scss --out-dir=fixtures/missing-out-dir/out', + { cwd }, + ); + + await stat(join(cwd, 'fixtures/missing-out-dir/in.css.scss')); + }); + }); +}); diff --git a/app/javascript/packages/build-sass/fixtures/missing-out-dir/.gitignore b/app/javascript/packages/build-sass/fixtures/missing-out-dir/.gitignore new file mode 100644 index 00000000000..1fcb1529f8e --- /dev/null +++ b/app/javascript/packages/build-sass/fixtures/missing-out-dir/.gitignore @@ -0,0 +1 @@ +out diff --git a/app/javascript/packages/build-sass/fixtures/missing-out-dir/in.css.scss b/app/javascript/packages/build-sass/fixtures/missing-out-dir/in.css.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/javascript/packages/build-sass/package.json b/app/javascript/packages/build-sass/package.json index ab70347aa9c..477410a7ea2 100644 --- a/app/javascript/packages/build-sass/package.json +++ b/app/javascript/packages/build-sass/package.json @@ -1,6 +1,6 @@ { "name": "@18f/identity-build-sass", - "version": "1.2.0", + "version": "1.3.0", "private": false, "description": "Stylesheet compilation utility with reasonable defaults and fast performance.", "type": "module",