From 714efb26084cb0c50f1322deaf82c9d226e5042c Mon Sep 17 00:00:00 2001 From: laurenhitchon Date: Mon, 27 Jul 2026 13:56:10 +1000 Subject: [PATCH 1/5] chore(packages): extract @nswds/eslint-config to its own repo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove packages/eslint-config. It now lives at digitalnsw/nswds-eslint-config. The package could never be published from here: this repo is `"private": true` at the root and deliberately comments out @semantic-release/npm, so it releases a changelog and a GitHub release but never touches npm. That is why it sat at 0.0.0 with zero adopters while all 12 Next.js repos kept hand-maintaining their own eslint.config.mjs — the "single source of truth" had no way to reach a consumer. The new repo mirrors the nswds-tokens release setup: semantic-release with @semantic-release/npm, publishing via OIDC trusted publishing rather than a long-lived NPM_TOKEN, and a CI smoke test that lints a JSX file through the real ESLint API so the ESLint 10 getFilename regression cannot come back silently. Keeping the copy here would have let the two drift, and the stale one is the one people would find first via the docs. Update docs/config-single-source-of-truth.md: record the new home, note that adopting repos drop both their local config body and their @eslint/compat fixupConfigRules wrapper (the shim lives in the package now), and flag that @nswds/prettier-config is still here and still unpublishable for exactly the same reason. --- docs/config-single-source-of-truth.md | 39 +++++++++++------ packages/eslint-config/README.md | 63 --------------------------- packages/eslint-config/index.mjs | 51 ---------------------- packages/eslint-config/package.json | 24 ---------- 4 files changed, 25 insertions(+), 152 deletions(-) delete mode 100644 packages/eslint-config/README.md delete mode 100644 packages/eslint-config/index.mjs delete mode 100644 packages/eslint-config/package.json diff --git a/docs/config-single-source-of-truth.md b/docs/config-single-source-of-truth.md index e83a1e4..87aac63 100644 --- a/docs/config-single-source-of-truth.md +++ b/docs/config-single-source-of-truth.md @@ -27,17 +27,23 @@ For files that are (or should be) byte-identical everywhere. For config that every repo needs but each may extend. Copying a file can't express "shared base + local override"; an npm package can. -| Package | Replaces | Consumer usage | -|---------|----------|----------------| -| `@nswds/eslint-config` | per-repo `eslint.config.mjs` | `export default [...nswds, globalIgnores([...repo-specific])]` | -| `@nswds/prettier-config` | per-repo `.prettierrc` | `"prettier": "@nswds/prettier-config"` in `package.json` | - -Both live in `packages/` here. **Publishing is not yet wired up** — nswds-devops -is private and has `@semantic-release/npm` disabled. Enabling it needs: - -1. An npm org/scope (`@nswds`) publish token as a repo secret, and -2. A release/publish path for `packages/*` (workspaces + `@semantic-release/npm`, - or a dedicated publish workflow). +| Package | Replaces | Consumer usage | Home | +|---------|----------|----------------|------| +| `@nswds/eslint-config` | per-repo `eslint.config.mjs` | `export default [...nswds, globalIgnores([...repo-specific])]` | [digitalnsw/nswds-eslint-config](https://github.com/digitalnsw/nswds-eslint-config) | +| `@nswds/prettier-config` | per-repo `.prettierrc` | `"prettier": "@nswds/prettier-config"` in `package.json` | `packages/` here | + +`@nswds/eslint-config` **has moved out of this repo** into +[digitalnsw/nswds-eslint-config](https://github.com/digitalnsw/nswds-eslint-config). +It could never be published from here: nswds-devops is `"private": true` at the +root and deliberately comments out `@semantic-release/npm`, so it releases a +changelog and GitHub release but never touches npm. That is why the package sat +at `0.0.0` with zero adopters while all 12 Next.js repos kept hand-maintaining +their own `eslint.config.mjs`. Its own repo mirrors the nswds-tokens release +setup — semantic-release + `@semantic-release/npm` + OIDC trusted publishing, so +there is no `NPM_TOKEN` to rotate. + +`@nswds/prettier-config` still lives in `packages/` and is still unpublishable +for the same reason. It needs the same extraction before Phase 3 can complete. 3. A deliberate license decision: the packages currently declare `ISC` to match the repo root, but the repo has no `LICENSE` file. Before publishing, confirm the intended license for `@nswds/*` and add a `LICENSE` file accordingly. @@ -74,9 +80,14 @@ several repos already carry, and includes `*.err`. 2. **Phase 2 — `.nvmrc` / `.npmrc`:** verify the two Node-22 repos, then add `repo-files/.nvmrc` and `repo-files/.npmrc` to the sync map (handling the nswds-ui `.npmrc` variant). Merging fans out `chore(ci):` PRs. -3. **Phase 3 — packages:** wire up publishing, publish `@nswds/eslint-config` - and `@nswds/prettier-config`, then migrate repos one group at a time - (Renovate keeps them current after). +3. **Phase 3 — packages:** `@nswds/eslint-config` is extracted to its own repo + with publishing wired up; it needs a one-time manual first publish before + OIDC trusted publishing can take over (npm cannot bind a trusted publisher to + a package name that has never been published). `@nswds/prettier-config` still + needs the same extraction. Then migrate repos one group at a time — each + adopting repo drops its local `eslint.config.mjs` body *and* the + `@eslint/compat` `fixupConfigRules` wrapper, since the shim now lives inside + the package. Renovate keeps them current after. 4. **Phase 4 — ignore files:** roll out the `.gitignore` / `.prettierignore` base via the chosen Mechanism-C approach. diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md deleted file mode 100644 index dc5f25f..0000000 --- a/packages/eslint-config/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# @nswds/eslint-config - -Shared ESLint **flat** config for the NSW Design System fleet — the single -source of truth for what was previously a hand-maintained `eslint.config.mjs` in -every repo. Next.js `core-web-vitals` + `typescript`, with Prettier enforced as -an ESLint rule and `no-console` restricted to `warn`/`error`. - -## Adopt in a repo - -Install the package and its peers: - -```bash -npm i -D @nswds/eslint-config eslint eslint-config-next \ - eslint-config-prettier eslint-plugin-prettier @eslint/compat -``` - -Then reduce the repo's `eslint.config.mjs` to the shared config plus any -repo-specific ignores/overrides: - -```js -// eslint.config.mjs -import { defineConfig, globalIgnores } from 'eslint/config' -import nswds from '@nswds/eslint-config' - -export default defineConfig([ - ...nswds, - // repo-specific ignores (build artifacts this repo generates): - globalIgnores(['src/lib/blocks/generated.ts']), -]) -``` - -A repo with nothing extra just does `export default [...nswds]`. - -### Per-repo rule overrides - -Append a config object after `...nswds`. Example — a repo whose build scripts -are CLIs that legitimately print to stdout: - -```js -export default defineConfig([ - ...nswds, - { files: ['scripts/**/*.mjs'], rules: { 'no-console': 'off' } }, -]) -``` - -## Notes - -- `baseIgnores` is exported if a repo needs to reference or extend the ignore - list directly. -- Repos still on the older array-style config (`const config = [...]`) or a - hand-rolled `@eslint/compat` `fixupConfigRules` shim (nswds-email) should - migrate to the spread form above during rollout. The shim is now applied - inside this package, so adopting repos delete their local wrapper — they do - not need to call `fixupConfigRules` themselves. -- **ESLint 10 compatibility.** This config wraps the `eslint-config-next` - presets in `fixupConfigRules`, because ESLint 10 removed - `context.getFilename()` and eslint-plugin-react (transitive via - eslint-config-next, incl. 16.2.11) still calls it during React-version - detection — without the shim every lint run dies with - `TypeError: contextOrFilename.getFilename is not a function`. Verified - identical output on ESLint 9.39.5 and 10.8.0, so the wrapper is safe to carry - while the fleet is mid-upgrade. Remove it once eslint-config-next ships an - ESLint-10-compatible eslint-plugin-react (vercel/next.js#89764). diff --git a/packages/eslint-config/index.mjs b/packages/eslint-config/index.mjs deleted file mode 100644 index 8429e6d..0000000 --- a/packages/eslint-config/index.mjs +++ /dev/null @@ -1,51 +0,0 @@ -import { defineConfig, globalIgnores } from 'eslint/config' -import { fixupConfigRules } from '@eslint/compat' - -import nextVitals from 'eslint-config-next/core-web-vitals' -import nextTs from 'eslint-config-next/typescript' - -import eslintConfigPrettier from 'eslint-config-prettier/flat' -import eslintPluginPrettier from 'eslint-plugin-prettier' - -// The default ignore set. Consumers that need extra ignores should NOT edit -// this — they add their own `globalIgnores([...])` after spreading the config. -export const baseIgnores = [ - // Default ignores of eslint-config-next: - '.next/**', - 'out/**', - 'build/**', - 'next-env.d.ts', - 'node_modules/**', - '**/dist/**', - // Fleet additions: - '.github/workflows/**', -] - -// The shared base config: Next.js core-web-vitals + TypeScript, with Prettier -// enforced as an ESLint rule and console output restricted to warn/error. -// -// The eslint-config-next presets are wrapped in `fixupConfigRules` because -// ESLint 10 removed `context.getFilename()`, which eslint-plugin-react (pulled -// in transitively by eslint-config-next, incl. 16.2.11) still calls from its -// React-version *detection* path — every lint run then dies with -// `TypeError: contextOrFilename.getFilename is not a function` before checking -// a single file. The shim re-attaches the removed accessors, so the presets run -// unchanged on both ESLint 9 and 10. Drop the wrapper once eslint-config-next -// ships an ESLint-10-compatible eslint-plugin-react (vercel/next.js#89764). -const nswdsEslintConfig = defineConfig([ - ...fixupConfigRules(nextVitals), - ...fixupConfigRules(nextTs), - eslintConfigPrettier, - { - plugins: { - prettier: eslintPluginPrettier, - }, - rules: { - 'prettier/prettier': 'error', - 'no-console': ['error', { allow: ['warn', 'error'] }], - }, - }, - globalIgnores(baseIgnores), -]) - -export default nswdsEslintConfig diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json deleted file mode 100644 index 8f41b25..0000000 --- a/packages/eslint-config/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@nswds/eslint-config", - "version": "0.0.0", - "description": "Shared ESLint flat config for the NSW Design System fleet (Next.js + Prettier).", - "license": "ISC", - "type": "module", - "main": "index.mjs", - "exports": { - ".": "./index.mjs" - }, - "files": [ - "index.mjs" - ], - "publishConfig": { - "access": "restricted" - }, - "peerDependencies": { - "@eslint/compat": ">=1.2", - "eslint": ">=9", - "eslint-config-next": ">=15", - "eslint-config-prettier": ">=10", - "eslint-plugin-prettier": ">=5" - } -} From ea9bde1b60240894dbbb9c74f71d1996fb918a16 Mon Sep 17 00:00:00 2001 From: laurenhitchon Date: Mon, 27 Jul 2026 14:03:07 +1000 Subject: [PATCH 2/5] chore(packages): extract @nswds/prettier-config to its own repo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove packages/prettier-config. It now lives at digitalnsw/nswds-prettier-config. With this, packages/ is empty and gone. Same reason as @nswds/eslint-config in the previous commit: this repo is `"private": true` at the root and comments out @semantic-release/npm, so it can never publish. The package sat at 0.0.0 with no adopters while repos kept copy-pasting a .prettierrc. publishConfig moves from restricted to public, matching @nswds/tokens and @nswds/eslint-config — restricted needs a paid npm org plan plus registry auth in every consumer's CI, which none of them have. Update docs/config-single-source-of-truth.md: record both new homes, collapse the two now-identical explanations into one, rewrite Phase 3 to describe the actual remaining work (one-time manual first publish, then trusted-publisher config, then per-repo migration), and resolve the stale "decide a licence before publishing" item — both repos ship ISC, matching what the packages already declared, though that differs from @nswds/tokens (MPL-2.0) and is worth a deliberate call. --- docs/config-single-source-of-truth.md | 57 +++++++++++++++------------ packages/prettier-config/README.md | 44 --------------------- packages/prettier-config/index.json | 8 ---- packages/prettier-config/package.json | 19 --------- 4 files changed, 32 insertions(+), 96 deletions(-) delete mode 100644 packages/prettier-config/README.md delete mode 100644 packages/prettier-config/index.json delete mode 100644 packages/prettier-config/package.json diff --git a/docs/config-single-source-of-truth.md b/docs/config-single-source-of-truth.md index 87aac63..b989a4b 100644 --- a/docs/config-single-source-of-truth.md +++ b/docs/config-single-source-of-truth.md @@ -30,23 +30,28 @@ express "shared base + local override"; an npm package can. | Package | Replaces | Consumer usage | Home | |---------|----------|----------------|------| | `@nswds/eslint-config` | per-repo `eslint.config.mjs` | `export default [...nswds, globalIgnores([...repo-specific])]` | [digitalnsw/nswds-eslint-config](https://github.com/digitalnsw/nswds-eslint-config) | -| `@nswds/prettier-config` | per-repo `.prettierrc` | `"prettier": "@nswds/prettier-config"` in `package.json` | `packages/` here | - -`@nswds/eslint-config` **has moved out of this repo** into -[digitalnsw/nswds-eslint-config](https://github.com/digitalnsw/nswds-eslint-config). -It could never be published from here: nswds-devops is `"private": true` at the -root and deliberately comments out `@semantic-release/npm`, so it releases a -changelog and GitHub release but never touches npm. That is why the package sat -at `0.0.0` with zero adopters while all 12 Next.js repos kept hand-maintaining -their own `eslint.config.mjs`. Its own repo mirrors the nswds-tokens release -setup — semantic-release + `@semantic-release/npm` + OIDC trusted publishing, so -there is no `NPM_TOKEN` to rotate. - -`@nswds/prettier-config` still lives in `packages/` and is still unpublishable -for the same reason. It needs the same extraction before Phase 3 can complete. -3. A deliberate license decision: the packages currently declare `ISC` to match - the repo root, but the repo has no `LICENSE` file. Before publishing, confirm - the intended license for `@nswds/*` and add a `LICENSE` file accordingly. +| `@nswds/prettier-config` | per-repo `.prettierrc` | `"prettier": "@nswds/prettier-config"` in `package.json` | [digitalnsw/nswds-prettier-config](https://github.com/digitalnsw/nswds-prettier-config) | + +**Both packages have moved out of this repo**, and `packages/` is gone. Neither +could ever be published from here: nswds-devops is `"private": true` at the root +and deliberately comments out `@semantic-release/npm`, so it releases a changelog +and GitHub release but never touches npm. That is why both sat at `0.0.0` with no +adopters — a "single source of truth" that cannot reach a consumer isn't one. + +Each now has its own repo mirroring the nswds-tokens release setup: +semantic-release + `@semantic-release/npm` + OIDC trusted publishing, so there is +no `NPM_TOKEN` to rotate or leak. Both publish `access: "public"`, matching +`@nswds/tokens`; `restricted` would have needed a paid npm org plan plus registry +auth in every consumer's CI, which none of them have. + +Both carry a CI test that guards their specific silent-failure mode — the ESLint +config lints a real JSX file (the ESLint 10 `getFilename` crash), and the +Prettier config resolves every option through Prettier's own support info (typo'd +keys are ignored rather than rejected). +Both new repos ship an `ISC` `LICENSE` file, carrying over the licence the +packages already declared. Note this differs from `@nswds/tokens`, which is +MPL-2.0 — worth a deliberate call on whether `@nswds/*` should be consistent +before the packages get wide adoption. Until then the packages are the reviewed source of truth but not installable. @@ -80,14 +85,16 @@ several repos already carry, and includes `*.err`. 2. **Phase 2 — `.nvmrc` / `.npmrc`:** verify the two Node-22 repos, then add `repo-files/.nvmrc` and `repo-files/.npmrc` to the sync map (handling the nswds-ui `.npmrc` variant). Merging fans out `chore(ci):` PRs. -3. **Phase 3 — packages:** `@nswds/eslint-config` is extracted to its own repo - with publishing wired up; it needs a one-time manual first publish before - OIDC trusted publishing can take over (npm cannot bind a trusted publisher to - a package name that has never been published). `@nswds/prettier-config` still - needs the same extraction. Then migrate repos one group at a time — each - adopting repo drops its local `eslint.config.mjs` body *and* the - `@eslint/compat` `fixupConfigRules` wrapper, since the shim now lives inside - the package. Renovate keeps them current after. +3. **Phase 3 — packages:** both packages are extracted to their own repos with + publishing wired up. Each still needs a **one-time manual first publish** + (`npm publish --access public`) before OIDC trusted publishing can take over — + npm cannot bind a trusted publisher to a package name that has never been + published. After that first publish, configure the trusted publisher on + npmjs.com against the repo and `release.yml`, and every merge to `main` + publishes itself. Then migrate repos one group at a time: each adopting repo + drops its local `eslint.config.mjs` body *and* its `@eslint/compat` + `fixupConfigRules` wrapper (the shim lives in the package now), and replaces + `.prettierrc` with the `"prettier"` key. Renovate keeps them current after. 4. **Phase 4 — ignore files:** roll out the `.gitignore` / `.prettierignore` base via the chosen Mechanism-C approach. diff --git a/packages/prettier-config/README.md b/packages/prettier-config/README.md deleted file mode 100644 index 158b2d8..0000000 --- a/packages/prettier-config/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# @nswds/prettier-config - -Shared Prettier config for the NSW Design System fleet — the single source of -truth for the formatting options that were previously copy-pasted into a -`.prettierrc` in every repo. - -## Adopt in a repo - -Install it, then reference it by name from `package.json` (delete the repo's -old `.prettierrc`): - -```jsonc -// package.json -{ - "prettier": "@nswds/prettier-config" -} -``` - -That's the whole config for a plain repo. No local `.prettierrc` needed. - -## Repos that use Tailwind - -The base config deliberately omits the Tailwind plugin block, because -`tailwindStylesheet` is an app-specific path (`./src/app/globals.css` in the -Next.js apps) that doesn't exist in non-app repos. Tailwind repos extend the -base in a local `.prettierrc.mjs` instead of the `package.json` key: - -```js -// .prettierrc.mjs -// The package exports JSON, so the import needs a JSON import attribute. -import base from '@nswds/prettier-config' with { type: 'json' } - -export default { - ...base, - plugins: ['prettier-plugin-organize-imports', 'prettier-plugin-tailwindcss'], - tailwindFunctions: ['clsx'], - tailwindStylesheet: './src/app/globals.css', -} -``` - -## Changing the shared options - -Edit `index.json` here, bump the version, publish. Consumers pick it up on their -next `npm update` (Renovate will open the bump PRs). diff --git a/packages/prettier-config/index.json b/packages/prettier-config/index.json deleted file mode 100644 index a88445b..0000000 --- a/packages/prettier-config/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "singleQuote": true, - "semi": false, - "tabWidth": 2, - "jsxSingleQuote": true, - "trailingComma": "all", - "printWidth": 100 -} diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json deleted file mode 100644 index 63484e9..0000000 --- a/packages/prettier-config/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@nswds/prettier-config", - "version": "0.0.0", - "description": "Shared Prettier configuration for the NSW Design System fleet.", - "license": "ISC", - "main": "index.json", - "exports": { - ".": "./index.json" - }, - "files": [ - "index.json" - ], - "publishConfig": { - "access": "restricted" - }, - "peerDependencies": { - "prettier": ">=3" - } -} From 3141999d6b0a49a278d45bceaa5dc183a296260a Mon Sep 17 00:00:00 2001 From: laurenhitchon Date: Mon, 27 Jul 2026 14:08:52 +1000 Subject: [PATCH 3/5] docs(packages): record the MPL-2.0 relicense MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both extracted packages are now MPL-2.0, matching @nswds/tokens, so the whole @nswds/* scope is consistent. Replaces the note flagging the ISC mismatch as an open decision — it has been made and applied in both repos ahead of first publish, so no prior distribution under ISC needs reconciling. --- docs/config-single-source-of-truth.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/config-single-source-of-truth.md b/docs/config-single-source-of-truth.md index b989a4b..477af27 100644 --- a/docs/config-single-source-of-truth.md +++ b/docs/config-single-source-of-truth.md @@ -48,10 +48,10 @@ Both carry a CI test that guards their specific silent-failure mode — the ESLi config lints a real JSX file (the ESLint 10 `getFilename` crash), and the Prettier config resolves every option through Prettier's own support info (typo'd keys are ignored rather than rejected). -Both new repos ship an `ISC` `LICENSE` file, carrying over the licence the -packages already declared. Note this differs from `@nswds/tokens`, which is -MPL-2.0 — worth a deliberate call on whether `@nswds/*` should be consistent -before the packages get wide adoption. +Both new repos are **MPL-2.0**, matching `@nswds/tokens`, so the whole `@nswds/*` +scope is consistent. The packages previously declared `ISC` — inherited from this +repo's root rather than chosen for a published package. Relicensed before either +was published, so there is no prior distribution under ISC to reconcile. Until then the packages are the reviewed source of truth but not installable. From c156a983cf80352d3688865a4cb6981df32383d7 Mon Sep 17 00:00:00 2001 From: laurenhitchon Date: Mon, 27 Jul 2026 14:19:46 +1000 Subject: [PATCH 4/5] docs(packages): drop two fragments orphaned by the extraction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removing the "Enabling it needs: 1... 2..." block left item 3 behind. It does not render as a list at all: CommonMark only lets an ordered list interrupt a paragraph when it starts at 1, so with no blank line before it the `3.` was swallowed into the preceding paragraph as lazy continuation and rendered as a stray literal "3." mid-sentence (confirmed against GitHub's own markdown renderer). Its content was also stale — it asked for a licence decision and a LICENSE file, both of which now exist: the extracted repos are MPL-2.0 with the same LICENSE as nswds-tokens. So it is deleted rather than reformatted into a list. The trailing "Until then the packages are the reviewed source of truth but not installable" went with it. "Until then" pointed at that removed list, so it no longer had an antecedent, and the claim is false now that the packages live in their own repos. --- docs/config-single-source-of-truth.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/config-single-source-of-truth.md b/docs/config-single-source-of-truth.md index 87aac63..4e8dfb7 100644 --- a/docs/config-single-source-of-truth.md +++ b/docs/config-single-source-of-truth.md @@ -44,11 +44,6 @@ there is no `NPM_TOKEN` to rotate. `@nswds/prettier-config` still lives in `packages/` and is still unpublishable for the same reason. It needs the same extraction before Phase 3 can complete. -3. A deliberate license decision: the packages currently declare `ISC` to match - the repo root, but the repo has no `LICENSE` file. Before publishing, confirm - the intended license for `@nswds/*` and add a `LICENSE` file accordingly. - -Until then the packages are the reviewed source of truth but not installable. ## Mechanism C — base + repo-specific tail (`.gitignore`, `.prettierignore`) From ea09e88698cff47ba54b00d02499ba1c5c1958eb Mon Sep 17 00:00:00 2001 From: laurenhitchon Date: Mon, 27 Jul 2026 14:41:08 +1000 Subject: [PATCH 5/5] docs(packages): make the eslint-config usage snippet valid JavaScript MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `globalIgnores([...repo-specific])` parses, but the hyphen makes it a subtraction: it evaluates to `[...(repo - specific)]` and throws `TypeError: (repo - specific) is not iterable`. The leading `...` was doing double duty as both a spread and an "and your stuff here" ellipsis, and only the second reading works. Use `globalIgnores(['repo-specific/**'])` instead. It evaluates, and it shows the shape the API actually takes — an array of glob strings, as in the package README's `globalIgnores(['src/lib/blocks/generated.ts'])` — rather than a placeholder that reads like an identifier. The snippet predates this branch; only the Home column was added to that row here. Fixing it while the row is already being touched. --- docs/config-single-source-of-truth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config-single-source-of-truth.md b/docs/config-single-source-of-truth.md index 4e8dfb7..30e7c1d 100644 --- a/docs/config-single-source-of-truth.md +++ b/docs/config-single-source-of-truth.md @@ -29,7 +29,7 @@ express "shared base + local override"; an npm package can. | Package | Replaces | Consumer usage | Home | |---------|----------|----------------|------| -| `@nswds/eslint-config` | per-repo `eslint.config.mjs` | `export default [...nswds, globalIgnores([...repo-specific])]` | [digitalnsw/nswds-eslint-config](https://github.com/digitalnsw/nswds-eslint-config) | +| `@nswds/eslint-config` | per-repo `eslint.config.mjs` | `export default [...nswds, globalIgnores(['repo-specific/**'])]` | [digitalnsw/nswds-eslint-config](https://github.com/digitalnsw/nswds-eslint-config) | | `@nswds/prettier-config` | per-repo `.prettierrc` | `"prettier": "@nswds/prettier-config"` in `package.json` | `packages/` here | `@nswds/eslint-config` **has moved out of this repo** into