From 5173d513964ed26e16b57683999195802ca51f6f Mon Sep 17 00:00:00 2001 From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Date: Sun, 31 May 2026 08:26:54 +0100 Subject: [PATCH] =?UTF-8?q?feat(deno):=20migrate=20flat-mate=20workspace?= =?UTF-8?q?=20=E2=86=92=20deno.json=20(3/4=20manifests;=20apps/mobile=20Cl?= =?UTF-8?q?ass=20C=20deferred,=20standards#253=20longtail)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Workspace-style migration covering 3 of 4 npm manifests. The fourth (`apps/mobile/package.json`) is Class C — Expo / React Native / Metro bundler ecosystem cannot run under Deno, so the npm manifest remains as a host-required carve-out (parallel to the VSCode-extension class). ## Migrated - **`/deno.json`** (was root `package.json`) — Deno workspace with `apps/web` + `packages/shared` members, plus `tasks` for `dev:api` (Deno-native), `dev:web` (delegates to apps/web workspace), and `check` (deno check + lint + node --check → deno check). `dev:mobile` task emits a Class C documentation message instead of orchestrating. - **`apps/web/deno.json`** (was `apps/web/package.json`) — Class B with `imports` for react/react-dom/vite/@vitejs/plugin-react via `npm:` specifiers; tasks via `deno run -A --node-modules-dir=auto npm:vite@^8.0.7 …`. - **`packages/shared/deno.json`** (was `packages/shared/package.json`) — Class A; pure JS barrel-export package with no scripts, just `name` + `version` + `license` + `exports`. ## Deferred (Class C) - **`apps/mobile/package.json`** — Expo SDK + React Native + Metro bundler require Node + npm/yarn/pnpm. Deno cannot run `expo start`, Metro is fundamentally npm-rooted. Same Class C pattern as VSCode extensions (host requires npm). Tracked as Class C carve-out candidate for hypatia rule extension (per-repo follow-up). ## Test plan - [ ] `deno task dev:api` runs the Deno-native API server (unchanged) - [ ] `deno task dev:web` chains to apps/web deno task dev (vite) - [ ] `deno task check` validates apps/api + packages/shared - [ ] apps/mobile still works with npm (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) --- apps/web/deno.json | 18 ++++++++++++++++++ apps/web/package.json | 21 --------------------- deno.json | 28 ++++++++++++++++++++++++++++ package.json | 21 --------------------- packages/shared/deno.json | 7 +++++++ packages/shared/package.json | 7 ------- 6 files changed, 53 insertions(+), 49 deletions(-) create mode 100644 apps/web/deno.json delete mode 100644 apps/web/package.json create mode 100644 deno.json delete mode 100644 package.json create mode 100644 packages/shared/deno.json delete mode 100644 packages/shared/package.json diff --git a/apps/web/deno.json b/apps/web/deno.json new file mode 100644 index 0000000..a3529d2 --- /dev/null +++ b/apps/web/deno.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@flat-mate/web", + "version": "0.1.0", + "license": "MPL-2.0", + "tasks": { + "dev": "deno run -A --node-modules-dir=auto npm:vite@^8.0.7", + "build": "deno run -A --node-modules-dir=auto npm:vite@^8.0.7 build", + "preview": "deno run -A --node-modules-dir=auto npm:vite@^8.0.7 preview" + }, + "imports": { + "react": "npm:react@^18.3.1", + "react-dom": "npm:react-dom@^18.3.1", + "@vitejs/plugin-react": "npm:@vitejs/plugin-react@^4.4.1", + "vite": "npm:vite@^8.0.7" + }, + "nodeModulesDir": "auto" +} diff --git a/apps/web/package.json b/apps/web/package.json deleted file mode 100644 index 17654c1..0000000 --- a/apps/web/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@flat-mate/web", - "version": "0.1.0", - "private": true, - "license": "MPL-2.0", - "author": "Jonathan D.A. Jewell ", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "react": "^18.3.1", - "react-dom": "^18.3.1" - }, - "devDependencies": { - "@vitejs/plugin-react": "^4.4.1", - "vite": "^8.0.7" - } -} diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..151f94c --- /dev/null +++ b/deno.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@hyperpolymath/flat-mate", + "version": "0.1.0", + "license": "MPL-2.0", + "workspace": [ + "./apps/web", + "./packages/shared" + ], + "tasks": { + "dev:api": "deno run --watch=apps/api --allow-net --allow-env apps/api/main.ts", + "dev:web": "deno task --cwd apps/web dev", + "dev:mobile": "echo 'apps/mobile is an Expo project; run `cd apps/mobile && npm install && npm run start` (Expo CLI requires Node — see Class C carve-out in README)'", + "build:web": "deno task --cwd apps/web build", + "check": "deno check apps/api/main.ts && deno lint apps/api && deno check packages/shared/src/domain.js" + }, + "fmt": { + "useTabs": false, + "lineWidth": 100, + "indentWidth": 2, + "singleQuote": false + }, + "lint": { + "rules": { + "tags": ["recommended"] + } + } +} diff --git a/package.json b/package.json deleted file mode 100644 index 3ff0ef0..0000000 --- a/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "flat-mate", - "version": "0.1.0", - "private": true, - "license": "MPL-2.0", - "author": "Jonathan D.A. Jewell ", - "workspaces": [ - "apps/web", - "apps/mobile", - "packages/*" - ], - "scripts": { - "dev:api": "deno run --watch=apps/api --allow-net --allow-env apps/api/main.ts", - "dev:web": "npm run dev --workspace @flat-mate/web", - "dev:mobile": "npm run start --workspace @flat-mate/mobile", - "check": "deno check apps/api/main.ts && deno lint apps/api && node --check packages/shared/src/domain.js" - }, - "engines": { - "node": ">=20.0.0" - } -} diff --git a/packages/shared/deno.json b/packages/shared/deno.json new file mode 100644 index 0000000..dff0937 --- /dev/null +++ b/packages/shared/deno.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json", + "name": "@flat-mate/shared", + "version": "0.1.0", + "license": "MPL-2.0", + "exports": "./src/index.js" +} diff --git a/packages/shared/package.json b/packages/shared/package.json deleted file mode 100644 index f19451f..0000000 --- a/packages/shared/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@flat-mate/shared", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "src/index.js" -}