From 28596ed262a3594c7281e7e7417c253c92388a24 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Wed, 22 Nov 2023 09:24:32 -0500 Subject: [PATCH 1/2] build-sass: Use native Node.js parseArgs utility changelog: Internal, Packages, Replace third-party dependency with native equivalent --- app/javascript/packages/build-sass/CHANGELOG.md | 6 ++++++ app/javascript/packages/build-sass/cli.js | 7 +++---- app/javascript/packages/build-sass/package.json | 4 +++- yarn.lock | 5 ----- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/javascript/packages/build-sass/CHANGELOG.md b/app/javascript/packages/build-sass/CHANGELOG.md index 7cd6c81234f..f011da1f5a7 100644 --- a/app/javascript/packages/build-sass/CHANGELOG.md +++ b/app/javascript/packages/build-sass/CHANGELOG.md @@ -1,3 +1,9 @@ +## Unreleased + +### Breaking Changes + +- Requires Node.js v18 or newer + ## 2.0.0 ### Breaking Changes diff --git a/app/javascript/packages/build-sass/cli.js b/app/javascript/packages/build-sass/cli.js index c97ca735d60..bdd88e4ce8d 100755 --- a/app/javascript/packages/build-sass/cli.js +++ b/app/javascript/packages/build-sass/cli.js @@ -3,9 +3,9 @@ /* eslint-disable no-console */ import { mkdir } from 'node:fs/promises'; +import { parseArgs } from 'node:util'; import { watch } from 'chokidar'; import { fileURLToPath } from 'url'; -import { parseArgs } from '@pkgjs/parseargs'; // Note: Use native util.parseArgs after Node v18 import { buildFile } from './index.js'; import getDefaultLoadPaths from './get-default-load-paths.js'; import getErrorSassStackPaths from './get-error-sass-stack-paths.js'; @@ -26,9 +26,8 @@ const { values: flags, positionals: fileArgs } = parseArgs({ }, }); -const isWatching = flags.watch; -const outDir = flags['out-dir']; -const loadPaths = [...flags['load-path'], ...getDefaultLoadPaths()]; +const { watch: isWatching, 'out-dir': outDir, 'load-path': loadPaths = [] } = flags; +loadPaths.push(...getDefaultLoadPaths()); /** @type {BuildOptions & SyncSassOptions} */ const options = { outDir, loadPaths, optimize: isProduction }; diff --git a/app/javascript/packages/build-sass/package.json b/app/javascript/packages/build-sass/package.json index ca08fdd9e11..f70d1b41d28 100644 --- a/app/javascript/packages/build-sass/package.json +++ b/app/javascript/packages/build-sass/package.json @@ -4,6 +4,9 @@ "private": false, "description": "Stylesheet compilation utility with reasonable defaults and fast performance.", "type": "module", + "engines": { + "node": ">= 18" + }, "bin": { "build-sass": "./cli.js" }, @@ -25,7 +28,6 @@ "homepage": "https://github.com/18f/identity-idp", "dependencies": { "@aduth/is-dependency": "^1.0.0", - "@pkgjs/parseargs": "^0.11.0", "browserslist": "^4.22.1", "chokidar": "^3.5.3", "lightningcss": "^1.22.0", diff --git a/yarn.lock b/yarn.lock index a77727f7c3e..a2c67b3e729 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1216,11 +1216,6 @@ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@pkgr/utils@^2.3.1": version "2.4.2" resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" From 26c5172dabbd086eb72c135c208dd87008efcb2f Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Mon, 27 Nov 2023 08:24:10 -0500 Subject: [PATCH 2/2] Fix type error on potentially undefined outDir --- app/javascript/packages/build-sass/cli.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/packages/build-sass/cli.js b/app/javascript/packages/build-sass/cli.js index bdd88e4ce8d..34cc6ecb7b1 100755 --- a/app/javascript/packages/build-sass/cli.js +++ b/app/javascript/packages/build-sass/cli.js @@ -29,6 +29,10 @@ const { values: flags, positionals: fileArgs } = parseArgs({ const { watch: isWatching, 'out-dir': outDir, 'load-path': loadPaths = [] } = flags; loadPaths.push(...getDefaultLoadPaths()); +if (!outDir) { + throw new TypeError('Output directory must be provided using the `--out-dir` option.'); +} + /** @type {BuildOptions & SyncSassOptions} */ const options = { outDir, loadPaths, optimize: isProduction };