Bootstraps from Shopify's official shopify-app-template-remix (cloned directly rather than via `shopify app init`, which requires an interactive Partner login unavailable in this session): - Prisma (SQLite dev / Postgres-ready) with baseline Session model + migration - Vitest configured for unit tests, Playwright configured for E2E - Redis client + BullMQ worker skeleton (app/lib/redis.server.ts, jobs/worker.ts) - shopify.app.toml: minimal scopes, GDPR + orders webhooks wired (stub handlers), app proxy config for the future storefront widget - Stripped template-repo-only meta files (CLA, issue templates, demo product page) and replaced CI with a lint+typecheck+test workflow - Bumped @shopify/shopify-app-session-storage-prisma to resolve a duplicate @shopify/shopify-api install that broke typecheck - Dropped the Jest-only ESLint config (template default) since the project standardizes on Vitest per IMPLEMENTATION_PLAN.md Verified: npm install, lint, typecheck, unit tests, prisma migrate dev, and npm run build all pass on Node 22 LTS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
90 lines
2.6 KiB
JSON
90 lines
2.6 KiB
JSON
{
|
|
"name": "delivery-datetime-app",
|
|
"private": true,
|
|
"scripts": {
|
|
"build": "remix vite:build",
|
|
"dev": "shopify app dev",
|
|
"config:link": "shopify app config link",
|
|
"generate": "shopify app generate",
|
|
"deploy": "shopify app deploy",
|
|
"config:use": "shopify app config use",
|
|
"env": "shopify app env",
|
|
"start": "remix-serve ./build/server/index.js",
|
|
"docker-start": "npm run setup && npm run start",
|
|
"setup": "prisma generate && prisma migrate deploy",
|
|
"lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest",
|
|
"test:e2e": "playwright test",
|
|
"worker": "tsx jobs/worker.ts",
|
|
"shopify": "shopify",
|
|
"prisma": "prisma",
|
|
"graphql-codegen": "graphql-codegen",
|
|
"vite": "vite"
|
|
},
|
|
"type": "module",
|
|
"engines": {
|
|
"node": ">=20.19 <22 || >=22.12"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/client": "^6.2.1",
|
|
"@remix-run/dev": "^2.16.1",
|
|
"@remix-run/fs-routes": "^2.16.1",
|
|
"@remix-run/node": "^2.16.1",
|
|
"@remix-run/react": "^2.16.1",
|
|
"@remix-run/serve": "^2.16.1",
|
|
"@shopify/app-bridge-react": "^4.1.6",
|
|
"@shopify/polaris": "^12.0.0",
|
|
"@shopify/shopify-app-remix": "^4.1.0",
|
|
"@shopify/shopify-app-session-storage-prisma": "^9.0.1",
|
|
"bullmq": "^5.34.0",
|
|
"ioredis": "^5.4.2",
|
|
"isbot": "^5.1.0",
|
|
"luxon": "^3.5.0",
|
|
"prisma": "^6.2.1",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0",
|
|
"vite-tsconfig-paths": "^5.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.49.1",
|
|
"@remix-run/eslint-config": "^2.16.1",
|
|
"@remix-run/route-config": "^2.16.1",
|
|
"@shopify/api-codegen-preset": "^1.1.1",
|
|
"@types/eslint": "^9.6.1",
|
|
"@types/luxon": "^3.4.2",
|
|
"@types/node": "^22.2.0",
|
|
"@types/react": "^18.2.31",
|
|
"@types/react-dom": "^18.2.14",
|
|
"eslint": "^8.42.0",
|
|
"eslint-config-prettier": "^10.0.1",
|
|
"prettier": "^3.2.4",
|
|
"tsx": "^4.19.2",
|
|
"typescript": "^5.2.2",
|
|
"vite": "^6.2.2",
|
|
"vitest": "^2.1.8"
|
|
},
|
|
"workspaces": {
|
|
"packages": [
|
|
"extensions/*"
|
|
]
|
|
},
|
|
"trustedDependencies": [
|
|
"@shopify/plugin-cloudflare"
|
|
],
|
|
"resolutions": {
|
|
"@graphql-tools/url-loader": "8.0.16",
|
|
"@graphql-codegen/client-preset": "4.7.0",
|
|
"@graphql-codegen/typescript-operations": "4.5.0",
|
|
"minimatch": "9.0.5",
|
|
"vite": "^6.2.2"
|
|
},
|
|
"overrides": {
|
|
"@graphql-tools/url-loader": "8.0.16",
|
|
"@graphql-codegen/client-preset": "4.7.0",
|
|
"@graphql-codegen/typescript-operations": "4.5.0",
|
|
"minimatch": "9.0.5",
|
|
"vite": "^6.2.2"
|
|
}
|
|
}
|