From 8d955d7b52e397891eb197e3f99352a49d0f0e4b Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Sun, 31 May 2026 08:29:41 +0100 Subject: [PATCH] feat(deno): migrate accessibility-everywhere tools/ to Deno (7/8 manifests; browser-extension Class C deferred, standards#253 longtail) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Workspace-style migration covering 7 of 8 npm manifests. The eighth (tools/browser-extension/package.json) is Class C — browser-extension packaging requires the npm-published `archiver` library at build time and the extension itself loads `axe.min.js` from a Node-resolved path. Same Class C pattern as VSCode extensions / Office add-ins (host-required npm scaffolding). ## Migrated ### Root (workspace coordination) - /deno.json: extend the existing minimal config with `workspace` field (6 ReScript tool members) + `tasks` orchestrating setup/build/test/docker. browser-extension task documents the Class C deferral instead of attempting orchestration. ### tools/safe-dom/ (B) - ReScript core library wrapping the DOM with safer types. - Tasks: build/clean/dev via `deno run -A --node-modules-dir=auto npm:rescript@^12.0.0`. - Imports: rescript@^12 + @rescript/core@^1.6. ### tools/cli/ (B) - ReScript CLI using commander + chalk + ora + cli-table3 + fs-extra. - All deps mapped via npm: specifiers. ### tools/github-action/ (B) - ReScript GitHub Action using @actions/core + @actions/github. - Standard GH Actions toolkit, npm: specifiers. ### tools/monitoring-api/ (B) - ReScript Express server with helmet/cors/rate-limit/compression/joi. - 9 npm: specifiers; serve task uses `deno run --allow-net --allow-read --allow-env`. ### tools/stale/packages/core/ (B) - ReScript core for accessibility-everywhere-stale subsystem (ArangoDB). - Pinned to rescript@^11.1 to preserve the version in package.json (not upgrading mid-migration). - arangojs + dotenv via npm:. ### tools/stale/packages/scanner/ (B) - ReScript accessibility scanner with axe-core + playwright + puppeteer. - Pinned to rescript@^11.1 + axe-core@^4.8 + playwright@^1.40 + puppeteer@^24. ## Deferred (Class C — host-required) - tools/browser-extension/package.json — depends on `archiver` (npm-only zip lib) for chrome/firefox packaging; `axe.min.js` is copy-source-pathed from node_modules at build time. Class C pattern (host requires npm). Not migrated; tracked as Class C carve-out candidate for hypatia rule extension (per-repo follow-up). ## Test plan - [ ] `deno task build` builds cli + safe-dom + scanner via rescript - [ ] `deno task build:browser-extension` emits documentation message - [ ] tools/browser-extension/package.json scripts unchanged Per per-repo follow-up tracker for standards#253 (campaign closed 2026-05-31, longtail tracked in project_estate_npm_to_deno_2026_05_28.md). Refs hyperpolymath/standards#253. Co-Authored-By: Claude Opus 4.7 (1M context) --- deno.json | 31 +++++++++++++++++-- package.json | 36 ----------------------- tools/cli/deno.json | 21 +++++++++++++ tools/cli/package.json | 27 ----------------- tools/github-action/deno.json | 18 ++++++++++++ tools/github-action/package.json | 20 ------------- tools/monitoring-api/deno.json | 25 ++++++++++++++++ tools/monitoring-api/package.json | 27 ----------------- tools/safe-dom/deno.json | 16 ++++++++++ tools/safe-dom/package.json | 17 ----------- tools/stale/packages/core/deno.json | 18 ++++++++++++ tools/stale/packages/core/package.json | 20 ------------- tools/stale/packages/scanner/deno.json | 19 ++++++++++++ tools/stale/packages/scanner/package.json | 22 -------------- 14 files changed, 146 insertions(+), 171 deletions(-) delete mode 100644 package.json create mode 100644 tools/cli/deno.json delete mode 100644 tools/cli/package.json create mode 100644 tools/github-action/deno.json delete mode 100644 tools/github-action/package.json create mode 100644 tools/monitoring-api/deno.json delete mode 100644 tools/monitoring-api/package.json create mode 100644 tools/safe-dom/deno.json delete mode 100644 tools/safe-dom/package.json create mode 100644 tools/stale/packages/core/deno.json delete mode 100644 tools/stale/packages/core/package.json create mode 100644 tools/stale/packages/scanner/deno.json delete mode 100644 tools/stale/packages/scanner/package.json diff --git a/deno.json b/deno.json index 4ba1e97..23e2972 100644 --- a/deno.json +++ b/deno.json @@ -1,9 +1,36 @@ { + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@hyperpolymath/accessibility-everywhere", + "version": "1.0.0", + "license": "MIT", + "workspace": [ + "./tools/cli", + "./tools/github-action", + "./tools/monitoring-api", + "./tools/safe-dom", + "./tools/stale/packages/core", + "./tools/stale/packages/scanner" + ], "tasks": { + "setup": "deno run --allow-read --allow-write --allow-net --allow-env scripts/setup-arangodb.js", "dev": "deno run --watch mod.ts", + "build": "deno task build:cli && deno task build:safe-dom && deno task build:scanner", + "build:cli": "deno task --cwd tools/cli build", + "build:safe-dom": "deno task --cwd tools/safe-dom build", + "build:scanner": "deno task --cwd tools/stale/packages/scanner build", + "build:browser-extension": "echo 'tools/browser-extension is a Class C browser-extension package (host requires the npm-published archiver). Use the existing scripts in tools/browser-extension/.'", "test": "deno test", "lint": "deno lint", - "fmt": "deno fmt" + "fmt": "deno fmt", + "docker:build": "docker compose build", + "docker:up": "docker compose up -d", + "docker:down": "docker compose down" }, - "compilerOptions": { "strict": true } + "compilerOptions": { "strict": true }, + "fmt": { + "useTabs": false, + "lineWidth": 100, + "indentWidth": 2, + "singleQuote": false + } } diff --git a/package.json b/package.json deleted file mode 100644 index e8c8e63..0000000 --- a/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "accessibility-everywhere", - "version": "1.0.0", - "description": "Comprehensive platform to make web accessibility a search engine ranking factor", - "private": true, - "workspaces": [ - "packages/*", - "tools/*", - "tools/stale/packages/*", - "tools/stale/packages/stale/components/*" - ], - "scripts": { - "setup": "npm install && npm run setup:db", - "setup:db": "node scripts/setup-arangodb.js", - "dev": "npm run dev --workspaces --if-present", - "build": "npm run build --workspaces --if-present", - "test": "npm run test --workspaces --if-present", - "docker:build": "docker-compose build", - "docker:up": "docker-compose up -d", - "docker:down": "docker-compose down" - }, - "keywords": [ - "accessibility", - "a11y", - "wcag", - "aria", - "web-standards", - "search-ranking" - ], - "author": "Accessibility Everywhere Initiative", - "license": "MIT", - "devDependencies": { - "concurrently": "^8.2.2", - "prettier": "^3.1.0" - } -} diff --git a/tools/cli/deno.json b/tools/cli/deno.json new file mode 100644 index 0000000..1ab966d --- /dev/null +++ b/tools/cli/deno.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@accessibility-everywhere/cli", + "version": "1.0.0", + "license": "MIT", + "tasks": { + "build": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0", + "clean": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 clean", + "dev": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 -w" + }, + "imports": { + "rescript": "npm:rescript@^12.0.0", + "@rescript/core": "npm:@rescript/core@^1.6.0", + "commander": "npm:commander@^11.0.0", + "chalk": "npm:chalk@^5.0.0", + "ora": "npm:ora@^7.0.0", + "cli-table3": "npm:cli-table3@^0.6.0", + "fs-extra": "npm:fs-extra@^11.0.0" + }, + "nodeModulesDir": "auto" +} diff --git a/tools/cli/package.json b/tools/cli/package.json deleted file mode 100644 index 4c2236a..0000000 --- a/tools/cli/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@accessibility-everywhere/cli", - "version": "1.0.0", - "description": "Command-line tool for accessibility scanning", - "main": "src/Cli.mjs", - "type": "module", - "bin": { - "a11y-scan": "src/Cli.mjs", - "accessibility-scan": "src/Cli.mjs" - }, - "scripts": { - "build": "rescript build", - "dev": "rescript build -w", - "clean": "rescript clean" - }, - "dependencies": { - "commander": "^11.1.0", - "chalk": "^5.3.0", - "ora": "^7.0.1", - "cli-table3": "^0.6.3", - "fs-extra": "^11.2.0" - }, - "devDependencies": { - "rescript": "^11.1.0", - "@rescript/core": "^1.5.0" - } -} diff --git a/tools/github-action/deno.json b/tools/github-action/deno.json new file mode 100644 index 0000000..0ba2b3b --- /dev/null +++ b/tools/github-action/deno.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@accessibility-everywhere/github-action", + "version": "1.0.0", + "license": "MIT", + "tasks": { + "build": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0", + "clean": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 clean", + "dev": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 -w" + }, + "imports": { + "rescript": "npm:rescript@^12.0.0", + "@rescript/core": "npm:@rescript/core@^1.6.0", + "@actions/core": "npm:@actions/core@^1.10.0", + "@actions/github": "npm:@actions/github@^6.0.0" + }, + "nodeModulesDir": "auto" +} diff --git a/tools/github-action/package.json b/tools/github-action/package.json deleted file mode 100644 index 021326a..0000000 --- a/tools/github-action/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@accessibility-everywhere/github-action", - "version": "1.0.0", - "description": "GitHub Action for automated accessibility testing", - "main": "src/Action.mjs", - "type": "module", - "scripts": { - "build": "rescript build", - "dev": "rescript build -w", - "clean": "rescript clean" - }, - "dependencies": { - "@actions/core": "^1.10.1", - "@actions/github": "^6.0.0" - }, - "devDependencies": { - "rescript": "^11.1.0", - "@rescript/core": "^1.5.0" - } -} diff --git a/tools/monitoring-api/deno.json b/tools/monitoring-api/deno.json new file mode 100644 index 0000000..dfa610c --- /dev/null +++ b/tools/monitoring-api/deno.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@accessibility-everywhere/monitoring-api", + "version": "1.0.0", + "license": "MIT", + "tasks": { + "build": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0", + "clean": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 clean", + "dev": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 -w", + "start": "deno run --allow-net --allow-read --allow-env src/Index.mjs" + }, + "imports": { + "rescript": "npm:rescript@^12.0.0", + "@rescript/core": "npm:@rescript/core@^1.6.0", + "express": "npm:express@^4.18.0", + "cors": "npm:cors@^2.8.0", + "helmet": "npm:helmet@^7.0.0", + "express-rate-limit": "npm:express-rate-limit@^7.0.0", + "compression": "npm:compression@^1.7.0", + "dotenv": "npm:dotenv@^16.0.0", + "joi": "npm:joi@^17.0.0", + "uuid": "npm:uuid@^9.0.0" + }, + "nodeModulesDir": "auto" +} diff --git a/tools/monitoring-api/package.json b/tools/monitoring-api/package.json deleted file mode 100644 index 0cd4d25..0000000 --- a/tools/monitoring-api/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@accessibility-everywhere/monitoring-api", - "version": "1.0.0", - "description": "Monitoring API for accessibility violation reporting and analytics", - "main": "src/Server.mjs", - "type": "module", - "scripts": { - "build": "rescript build", - "dev": "rescript build -w", - "start": "node src/Server.mjs", - "clean": "rescript clean" - }, - "dependencies": { - "express": "^4.18.2", - "cors": "^2.8.5", - "helmet": "^7.1.0", - "express-rate-limit": "^7.1.5", - "compression": "^1.7.4", - "dotenv": "^16.3.1", - "joi": "^17.11.0", - "uuid": "^14.0.0" - }, - "devDependencies": { - "rescript": "^11.1.0", - "@rescript/core": "^1.5.0" - } -} diff --git a/tools/safe-dom/deno.json b/tools/safe-dom/deno.json new file mode 100644 index 0000000..60663fb --- /dev/null +++ b/tools/safe-dom/deno.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@accessibility-everywhere/safe-dom", + "version": "1.0.0", + "license": "MIT", + "tasks": { + "build": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0", + "clean": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 clean", + "dev": "deno run -A --node-modules-dir=auto npm:rescript@^12.0.0 -w" + }, + "imports": { + "rescript": "npm:rescript@^12.0.0", + "@rescript/core": "npm:@rescript/core@^1.6.0" + }, + "nodeModulesDir": "auto" +} diff --git a/tools/safe-dom/package.json b/tools/safe-dom/package.json deleted file mode 100644 index a0fdf03..0000000 --- a/tools/safe-dom/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@accessibility-everywhere/safe-dom", - "version": "0.1.0", - "description": "Minimal SafeDOM mounting primitives with proven-input wrappers", - "main": "src/SafeDOM.mjs", - "module": "src/SafeDOM.mjs", - "type": "module", - "scripts": { - "build": "rescript build", - "dev": "rescript build -w", - "clean": "rescript clean" - }, - "devDependencies": { - "rescript": "^11.1.0", - "@rescript/core": "^1.5.0" - } -} diff --git a/tools/stale/packages/core/deno.json b/tools/stale/packages/core/deno.json new file mode 100644 index 0000000..0a34cb1 --- /dev/null +++ b/tools/stale/packages/core/deno.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@accessibility-everywhere/core", + "version": "1.0.0", + "license": "MIT", + "tasks": { + "build": "deno run -A --node-modules-dir=auto npm:rescript@^11.1.0", + "clean": "deno run -A --node-modules-dir=auto npm:rescript@^11.1.0 clean", + "dev": "deno run -A --node-modules-dir=auto npm:rescript@^11.1.0 -w" + }, + "imports": { + "rescript": "npm:rescript@^11.1.0", + "@rescript/core": "npm:@rescript/core@^1.5.0", + "arangojs": "npm:arangojs@^10.3.0", + "dotenv": "npm:dotenv@^16.0.0" + }, + "nodeModulesDir": "auto" +} diff --git a/tools/stale/packages/core/package.json b/tools/stale/packages/core/package.json deleted file mode 100644 index c44b8a0..0000000 --- a/tools/stale/packages/core/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@accessibility-everywhere/core", - "version": "1.0.0", - "description": "Core functionality for accessibility scanning and database operations", - "main": "src/Index.mjs", - "type": "module", - "scripts": { - "build": "rescript build", - "dev": "rescript build -w", - "clean": "rescript clean" - }, - "dependencies": { - "arangojs": "^10.3.0", - "dotenv": "^16.3.1" - }, - "devDependencies": { - "rescript": "^11.1.0", - "@rescript/core": "^1.5.0" - } -} diff --git a/tools/stale/packages/scanner/deno.json b/tools/stale/packages/scanner/deno.json new file mode 100644 index 0000000..69e3793 --- /dev/null +++ b/tools/stale/packages/scanner/deno.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@accessibility-everywhere/scanner", + "version": "1.0.0", + "license": "MIT", + "tasks": { + "build": "deno run -A --node-modules-dir=auto npm:rescript@^11.1.0", + "clean": "deno run -A --node-modules-dir=auto npm:rescript@^11.1.0 clean", + "dev": "deno run -A --node-modules-dir=auto npm:rescript@^11.1.0 -w" + }, + "imports": { + "rescript": "npm:rescript@^11.1.0", + "@rescript/core": "npm:@rescript/core@^1.5.0", + "axe-core": "npm:axe-core@^4.8.0", + "playwright": "npm:playwright@^1.40.0", + "puppeteer": "npm:puppeteer@^24.0.0" + }, + "nodeModulesDir": "auto" +} diff --git a/tools/stale/packages/scanner/package.json b/tools/stale/packages/scanner/package.json deleted file mode 100644 index f4f30e7..0000000 --- a/tools/stale/packages/scanner/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@accessibility-everywhere/scanner", - "version": "1.0.0", - "description": "Accessibility scanner using axe-core for WCAG compliance checking", - "main": "src/Index.mjs", - "module": "src/Index.mjs", - "type": "module", - "scripts": { - "build": "rescript build", - "dev": "rescript build -w", - "clean": "rescript clean" - }, - "dependencies": { - "axe-core": "^4.8.2", - "playwright": "^1.40.0", - "puppeteer": "^24.31.0" - }, - "devDependencies": { - "rescript": "^11.1.0", - "@rescript/core": "^1.5.0" - } -}