Repository navigation
chore(deps): dependency maintenance 2026-11-04 - #31
Merged
Merged
Conversation
@10up/eslint-config, even at 5.0.0, peers on @babel/core 7 and airbnb, which stops at eslint 8. It blocked both Babel 8 and a supported eslint, and its airbnb 18 vs 19 peer clash made `npm ci` fail on main. Replace it with @eslint/js recommended, the same jsdoc rules, and eslint-plugin-prettier using the exact prettier options 10up applied, so formatting is unchanged. eslint-plugin-jsdoc stays on 63: 64+ needs Node 22.22. Code changes are only what the new rule set asked for: scope requestArgs in the zone settings commands (no-useless-assignment) and drop disable directives for rules that are no longer enabled.
chalk 4.1.0 -> 6.0.1, ora 4.1.1 -> 10.0.0, inquirer 7.3.3 -> 14.2.5, node-fetch 2.6.7 -> 3.3.2, fs-extra 9.1.0 -> 11.4.1, form-data 3.0.0 -> 4.0.6, yargs 15.4.1 -> 17.7.3, lodash 4.17.21 -> 4.18.1, cli-table3 0.6.0 -> 0.6.5, @babel/runtime 7.17.2 -> 7.29.10. chalk, ora, inquirer and node-fetch are now ESM-only and load through require(esm), available from Node 22.12. yargs stays on 17: 18 removes the global yargs.argv that Config and Cloudflare read for --useToken.
Babel 7 -> 8 (cli, core, preset-env, plugin-transform-runtime, register) and @babel/runtime 7 -> 8. Babel 8 no longer emits CommonJS by default and drops useBuiltIns/corejs, so .babelrc now sets modules: commonjs and a top-level node 22.18 target (Babel 8 itself needs ^22.18). core-js was only there for useBuiltIns: entry with no entry import, so it goes. mocha 9 -> 12 (fixes npm test on Node 26), chai 4 -> 6, sinon 9 -> 22, rimraf 3 -> 6, cross-env 7 -> 10.
Set engines.node to >=22.18 (Babel 8 needs it, and the ESM-only runtime deps need require(esm)) and match the README. CI tests the exact floor, 22.18.0, plus 26: a bare `22` resolves to the newest 22.x and would hide packages that need a later minor. Both workflows install with npm ci and use the current majors of actions/checkout and actions/setup-node.
Replace the .npmignore deny-list with a files whitelist, so new repo files (agent docs, configs, .github/) stay out of the package without another edit here. The package no longer ships .babelrc, .editorconfig or .github/.
always_use_https, devmode, minify and ssl had identical runCommand bodies apart from the setting id, the label, how --value is parsed and which part of the result is printed. Move that into utils/zone-setting-command.js and cover the set path, which the read-only smoke tests can't reach.
CLAUDE.md covers commands, the command tree, the name-to-ID lookups that shell out to `cf` on PATH, and the known Cloudflare API breakage. The /maintenance skill is the runbook that produced this branch.
Regenerate package-lock.json so transitive dependencies move to the newest versions their ranges allow (the earlier commits kept main's resolutions where they still fit), and move it to lockfile v3.
ivankristianto
force-pushed
the
chore-deps-2026-11-04
branch
from
November 4, 2026 04:24
bdc4f27 to
e15a917
Compare
# Conflicts: # package-lock.json
Merged
6 of 9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Every npm package is on its latest major, except yargs (held at 17) and eslint-plugin-jsdoc (held at 63, because 64+ needs Node 22.22). The supported Node floor moves from 10 to 22.18, which is what Babel 8 requires. CI now runs on exactly 22.18.0 and on 26, instead of 12. ESLint moves to a flat config:
@10up/eslint-configblocked both Babel 8 and any supported ESLint, so it's replaced. Prettier options are kept exactly, so formatting doesn't change.Closes: no linked issue. Supersedes #30.
Type of change
Changes
Commits, in order. Each one passes
npm ci,npm test,npm run lintand the--helpwalk on Node 22.18.0 by itself, checked commit by commit in a clean worktree.chore(lint): move to eslint 10 flat config: drops@10up/eslint-config(this also fixesnpm cion main) and includes the small code changes the new rules asked for. It touches only lint packages in the lockfile.chore(deps): update runtime dependencieschore(deps): update dev tooling: Babel 8 and the test stack.chore(ci): move node floor to 22.18, test on 22.18.0 and 26:engines, README, both workflows (npm ci, actions v7). CI pins the exact floor because a bare22resolves to the newest 22.x and would hide packages that need a later minor.chore(package): ship only lib, bin and docs: afileswhitelist replaces.npmignore.refactor(zones): share the settings subcommand handler: the fourzones settingscommands had identical bodies. That body now lives insrc/utils/zone-setting-command.js, with a unit test for the--valueset path.docs: add CLAUDE.md and maintenance skill: agent docs plus the/maintenanceskill that produced this PR.docs(github): add pull request templatechore(deps): refresh lockfile within ranges: moves transitive dependencies to the newest versions their ranges allow, and the lockfile to v3. It's its own commit so it can be reverted separately.This history was rebuilt after code review. The first version declared a 22.13 floor that Babel 8 and jsdoc 65 didn't meet, and it mixed in-range bumps into the lint commit.
Node and CI
engines, README)>=22.18build-and-test.ymlnpm install22.18.0,26,npm cinpm-publish.ymlnpm installnpm ciactions/checkoutactions/setup-node.npmignoredeny-listfiles:lib,bin,HOWTO.md,CHANGELOG.md(+ README, LICENSE)Runtime dependencies
require(esm). releasesprompt()API unchanged forinput/confirm. releasesAlready current: csv-writer.
Dev dependencies
eslint.config.js, so no format churn. 3.0 notesnpm teston Node 26. changeloguseBuiltIns: entry, which had no entry importAlready current: temp.
istanbulis unchanged; see Risk.Breaking changes reviewed
require()require(esm)(Node 22.12+), which the 22.18 floor covers. Every command was run on 22.18.0 and 26.13modules: "auto"no longer means CommonJS;useBuiltIns/corejsremoved; default targets changed; needs Node ^22.18.babelrcsetsmodules: "commonjs"and top-leveltargets.node: "22.18"; the floor moves to 22.18mainno-useless-assignmentin recommendedrequestArgsoutside the branch that used itdns importposts multipartrequestWithFormDataagainst a local HTTP server on main and on this branch: same content type, auth header and body@inquirer/coreconfig setup/add/delete/resetconfig setupandconfig addwithexpect: validation fires and the written config matchesmainHeld back
yargs.argv), whichConfig.getAuthTokenandCloudflare.convert*ToIdread, and goes ESM-firstuseTokeninto the class layer instead of readingyargs.argvVerification
npm ci(no legacy peer deps)npm testnpm run lintnpm audit --omit=devengines.nodevs 22.18.0npm pack --dry-runcontentslib/,bin/cf, README, LICENSE, CHANGELOG, HOWTO onlycf <cmd> --helpfor every commandcf config listagainst fixturemain(7 read-only commands plus 7zones settingsvariants)npm ci,npm test,npm run lint,--helpwalkSuperseded
@wordpress/eslint-pluginand reformatted 70 files. This PR keeps the formatting instead.Pre-existing failures on main
npm cifailed with ERESOLVE (@10up/eslint-config2.4 wanted airbnb 19, the repo pinned 18). Fixed here.npm testcrashed on Node 26 (mocha 9). Fixed here.cf firewall listandcf filters listreturnfirewallrules.api.deprecated/filters.api.deprecated. Cloudflare retired those APIs in favour of Rulesets, so both commands are broken for users regardless of this PR.cf user getreturns "Unauthorized" with the read-only test token (token scope, same onmain).npm run coverreferencesbabel-core/register, which isn't installed. Not touched.How to test
npm ci && npm test && npm run lintfor c in accounts config dns filters firewall ips rules user zones "zones settings"; do node bin/cf $c --help >/dev/null || echo "FAIL $c"; done(in zsh use${=c})PATH="$PWD/bin:$PATH" cf zones list,cf dns list <zone>andcf zones settings ssl <zone>. The second resolves the zone name through a childcf, sobin/has to be first in PATH.Risk and rollback
engines, and the ESM-only packages fail to load below 22.12. CHANGELOG says so under[next].lib/now targets Node 22.18 rather than ES5, and the package no longer ships repo dotfiles.zones settingscommands now share one handler. Get output is byte-identical tomain, and the unit test covers the set path. One small change: the spinner forssl --valuesays "Updating Zone ssl setting" where it used to say "SSL".istanbulis unmaintained and thecoverscript is broken; replacing coverage tooling is left for later.@eslint/jsrecommended plus the old jsdoc and Prettier rules), so some airbnb-only checks no longer run.Checklist
npm testpassesnpm run lintpassesnode bin/cf <command> --helploads for every command touchedCHANGELOG.mdupdated under## [next]for user-facing changes