@mars-stack/cli 8.0.2 → 8.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/template/e2e/README.md +2 -0
- package/template/package.json +6 -6
- package/template/prisma/generated/prisma/internal/class.ts +2 -2
- package/template/prisma/generated/prisma/internal/prismaNamespace.ts +4 -4
- package/template/prisma/generated/prisma/models/Account.ts +1 -1
- package/template/prisma/generated/prisma/models/File.ts +1 -1
- package/template/prisma/generated/prisma/models/Session.ts +1 -1
- package/template/prisma/generated/prisma/models/Subscription.ts +1 -1
- package/template/prisma/generated/prisma/models/User.ts +1 -1
- package/template/prisma/generated/prisma/models/VerificationToken.ts +1 -1
- package/template/scripts/playwright-web-server.mjs +2 -1
- package/template/src/app/(protected)/settings/page.tsx +6 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mars-stack/cli",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.4",
|
|
4
4
|
"description": "MARS CLI: scaffold, configure, and maintain SaaS apps",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@types/node": "^25.5.0",
|
|
52
52
|
"@types/prompts": "^2.4.0",
|
|
53
53
|
"tsup": "^8.0.0",
|
|
54
|
-
"typescript": "^
|
|
55
|
-
"vitest": "^4.1.
|
|
54
|
+
"typescript": "^6.0.2",
|
|
55
|
+
"vitest": "^4.1.2"
|
|
56
56
|
}
|
|
57
57
|
}
|
package/template/e2e/README.md
CHANGED
|
@@ -10,6 +10,8 @@ Browser-level tests for user-visible behaviour. Run: `yarn test:e2e` from the pr
|
|
|
10
10
|
|
|
11
11
|
Monorepo CI runs this on pull requests via the `template-e2e` job in `.github/workflows/ci.yml` (Postgres service + `E2E_USE_CI_SERVER=1` + `scripts/start-e2e-server.mjs`).
|
|
12
12
|
|
|
13
|
+
**Local default web server:** `playwright-web-server.mjs` runs `ensure-db`, then **`npx prisma db seed`**, then `yarn dev` — same seeded-user assumption as CI (`user@example.com` / `Password123!` from `scripts/seed.ts`). You no longer need a separate manual `yarn db:seed` before `yarn test:e2e` on a fresh scaffold.
|
|
14
|
+
|
|
13
15
|
## Kitchen-sink CLI catalog (MARS-041, Option A)
|
|
14
16
|
|
|
15
17
|
Full **`mars generate`** surface is exercised against a **materialized kitchen-sink fixture** (not the bare template tree):
|
package/template/package.json
CHANGED
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@mars-stack/core": "*",
|
|
32
32
|
"@mars-stack/ui": "*",
|
|
33
|
-
"@prisma/adapter-pg": "^7.
|
|
34
|
-
"@prisma/client": "^7.
|
|
33
|
+
"@prisma/adapter-pg": "^7.6.0",
|
|
34
|
+
"@prisma/client": "^7.6.0",
|
|
35
35
|
"dotenv": "^17.3.1",
|
|
36
36
|
"@react-email/components": "^1.0.10",
|
|
37
37
|
"@sendgrid/mail": "^8.1.0",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"react-dom": "^19.0.0",
|
|
48
48
|
"react-email": "^5.2.10",
|
|
49
49
|
"server-only": "^0.0.1",
|
|
50
|
-
"stripe": "^
|
|
50
|
+
"stripe": "^21.0.1",
|
|
51
51
|
"zod": "^4.3.6"
|
|
52
52
|
},
|
|
53
53
|
"prisma": {
|
|
@@ -71,10 +71,10 @@
|
|
|
71
71
|
"postcss": "^8.5.0",
|
|
72
72
|
"prettier": "^3.5.0",
|
|
73
73
|
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
74
|
-
"prisma": "^7.
|
|
74
|
+
"prisma": "^7.6.0",
|
|
75
75
|
"tailwindcss": "^4.0.0",
|
|
76
76
|
"tsx": "^4.0.0",
|
|
77
|
-
"typescript": "^
|
|
78
|
-
"vitest": "^4.1.
|
|
77
|
+
"typescript": "^6.0.2",
|
|
78
|
+
"vitest": "^4.1.2"
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -17,8 +17,8 @@ import type * as Prisma from "./prismaNamespace"
|
|
|
17
17
|
|
|
18
18
|
const config: runtime.GetPrismaClientConfig = {
|
|
19
19
|
"previewFeatures": [],
|
|
20
|
-
"clientVersion": "7.
|
|
21
|
-
"engineVersion": "
|
|
20
|
+
"clientVersion": "7.6.0",
|
|
21
|
+
"engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711",
|
|
22
22
|
"activeProvider": "postgresql",
|
|
23
23
|
"inlineSchema": "model User {\n id String @id @default(cuid())\n email String @unique\n name String?\n password String?\n role String @default(\"user\")\n emailVerified DateTime?\n image String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n failedLoginAttempts Int @default(0)\n lastFailedLogin DateTime?\n lockedUntil DateTime?\n\n termsAcceptedAt DateTime?\n privacyAcceptedAt DateTime?\n marketingOptIn Boolean @default(false)\n marketingOptInAt DateTime?\n\n accounts Account[]\n sessions Session[]\n files File[]\n subscription Subscription?\n\n @@index([email])\n @@index([role])\n}\n\nmodel Account {\n id String @id @default(cuid())\n userId String\n provider String\n providerAccountId String\n refreshToken String?\n accessToken String?\n expiresAt Int?\n tokenType String?\n scope String?\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n @@index([userId])\n}\n\nmodel Session {\n id String @id @default(cuid())\n userId String\n token String @unique\n expiresAt DateTime\n createdAt DateTime @default(now())\n ipAddress String?\n userAgent String?\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([token])\n @@index([expiresAt])\n}\n\nmodel VerificationToken {\n identifier String\n token String @unique\n expires DateTime\n\n @@unique([identifier, token])\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\nmodel File {\n id String @id @default(cuid())\n userId String\n filename String\n url String\n contentType String\n size Int\n access String @default(\"private\")\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n}\n\nmodel Subscription {\n id String @id @default(cuid())\n userId String @unique\n stripeCustomerId String @unique\n stripePriceId String?\n stripeSubscriptionId String? @unique\n status String @default(\"inactive\")\n currentPeriodEnd DateTime?\n cancelAtPeriodEnd Boolean @default(false)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([stripeCustomerId])\n @@index([stripeSubscriptionId])\n}\n",
|
|
24
24
|
"runtimeDataModel": {
|
|
@@ -80,12 +80,12 @@ export type PrismaVersion = {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
|
-
* Prisma Client JS version: 7.
|
|
84
|
-
* Query Engine version:
|
|
83
|
+
* Prisma Client JS version: 7.6.0
|
|
84
|
+
* Query Engine version: 75cbdc1eb7150937890ad5465d861175c6624711
|
|
85
85
|
*/
|
|
86
86
|
export const prismaVersion: PrismaVersion = {
|
|
87
|
-
client: "7.
|
|
88
|
-
engine: "
|
|
87
|
+
client: "7.6.0",
|
|
88
|
+
engine: "75cbdc1eb7150937890ad5465d861175c6624711"
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/**
|
|
@@ -220,7 +220,7 @@ export type AccountGroupByOutputType = {
|
|
|
220
220
|
_max: AccountMaxAggregateOutputType | null
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
type GetAccountGroupByPayload<T extends AccountGroupByArgs> = Prisma.PrismaPromise<
|
|
223
|
+
export type GetAccountGroupByPayload<T extends AccountGroupByArgs> = Prisma.PrismaPromise<
|
|
224
224
|
Array<
|
|
225
225
|
Prisma.PickEnumerable<AccountGroupByOutputType, T['by']> &
|
|
226
226
|
{
|
|
@@ -220,7 +220,7 @@ export type FileGroupByOutputType = {
|
|
|
220
220
|
_max: FileMaxAggregateOutputType | null
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
type GetFileGroupByPayload<T extends FileGroupByArgs> = Prisma.PrismaPromise<
|
|
223
|
+
export type GetFileGroupByPayload<T extends FileGroupByArgs> = Prisma.PrismaPromise<
|
|
224
224
|
Array<
|
|
225
225
|
Prisma.PickEnumerable<FileGroupByOutputType, T['by']> &
|
|
226
226
|
{
|
|
@@ -172,7 +172,7 @@ export type SessionGroupByOutputType = {
|
|
|
172
172
|
_max: SessionMaxAggregateOutputType | null
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
type GetSessionGroupByPayload<T extends SessionGroupByArgs> = Prisma.PrismaPromise<
|
|
175
|
+
export type GetSessionGroupByPayload<T extends SessionGroupByArgs> = Prisma.PrismaPromise<
|
|
176
176
|
Array<
|
|
177
177
|
Prisma.PickEnumerable<SessionGroupByOutputType, T['by']> &
|
|
178
178
|
{
|
|
@@ -193,7 +193,7 @@ export type SubscriptionGroupByOutputType = {
|
|
|
193
193
|
_max: SubscriptionMaxAggregateOutputType | null
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
type GetSubscriptionGroupByPayload<T extends SubscriptionGroupByArgs> = Prisma.PrismaPromise<
|
|
196
|
+
export type GetSubscriptionGroupByPayload<T extends SubscriptionGroupByArgs> = Prisma.PrismaPromise<
|
|
197
197
|
Array<
|
|
198
198
|
Prisma.PickEnumerable<SubscriptionGroupByOutputType, T['by']> &
|
|
199
199
|
{
|
|
@@ -269,7 +269,7 @@ export type UserGroupByOutputType = {
|
|
|
269
269
|
_max: UserMaxAggregateOutputType | null
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
-
type GetUserGroupByPayload<T extends UserGroupByArgs> = Prisma.PrismaPromise<
|
|
272
|
+
export type GetUserGroupByPayload<T extends UserGroupByArgs> = Prisma.PrismaPromise<
|
|
273
273
|
Array<
|
|
274
274
|
Prisma.PickEnumerable<UserGroupByOutputType, T['by']> &
|
|
275
275
|
{
|
|
@@ -144,7 +144,7 @@ export type VerificationTokenGroupByOutputType = {
|
|
|
144
144
|
_max: VerificationTokenMaxAggregateOutputType | null
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
type GetVerificationTokenGroupByPayload<T extends VerificationTokenGroupByArgs> = Prisma.PrismaPromise<
|
|
147
|
+
export type GetVerificationTokenGroupByPayload<T extends VerificationTokenGroupByArgs> = Prisma.PrismaPromise<
|
|
148
148
|
Array<
|
|
149
149
|
Prisma.PickEnumerable<VerificationTokenGroupByOutputType, T['by']> &
|
|
150
150
|
{
|
|
@@ -10,7 +10,8 @@ import { fileURLToPath } from 'node:url';
|
|
|
10
10
|
|
|
11
11
|
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/** Match CI `start-e2e-server.mjs`: seed so smoke tests find `user@example.com` without a manual `db:seed`. */
|
|
14
|
+
const child = spawn('sh', ['-c', 'node scripts/ensure-db.mjs && npx prisma db seed && yarn dev'], {
|
|
14
15
|
cwd: ROOT,
|
|
15
16
|
stdio: 'inherit',
|
|
16
17
|
shell: false,
|
|
@@ -77,10 +77,12 @@ export default function Settings() {
|
|
|
77
77
|
}
|
|
78
78
|
}, [user, fetchSessions]);
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (!nameInitialized && user?.name) {
|
|
82
|
+
setName(user.name);
|
|
83
|
+
setNameInitialized(true);
|
|
84
|
+
}
|
|
85
|
+
}, [nameInitialized, user?.name]);
|
|
84
86
|
|
|
85
87
|
if (authLoading) {
|
|
86
88
|
return (
|