Skip to content

Commit 778526d

Browse files
authored
Merge pull request #406 from zenstackhq/dev
merge dev to main (v3.0.0-beta.23)
2 parents 54fb434 + 9e3964d commit 778526d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+4501
-445
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zenstack-v3",
3-
"version": "3.0.0-beta.22",
3+
"version": "3.0.0-beta.23",
44
"description": "ZenStack",
55
"packageManager": "[email protected]",
66
"scripts": {

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publisher": "zenstack",
44
"displayName": "ZenStack CLI",
55
"description": "FullStack database toolkit with built-in access control and automatic API generation.",
6-
"version": "3.0.0-beta.22",
6+
"version": "3.0.0-beta.23",
77
"type": "module",
88
"author": {
99
"name": "ZenStack Team"

packages/cli/src/actions/action-utils.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@ export function getSchemaFile(file?: string) {
1919
if (!fs.existsSync(pkgJsonConfig.schema)) {
2020
throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);
2121
}
22-
return pkgJsonConfig.schema;
22+
if (fs.statSync(pkgJsonConfig.schema).isDirectory()) {
23+
const schemaPath = path.join(pkgJsonConfig.schema, 'schema.zmodel');
24+
if (!fs.existsSync(schemaPath)) {
25+
throw new CliError(`Schema file not found: ${schemaPath}`);
26+
}
27+
return schemaPath;
28+
} else {
29+
return pkgJsonConfig.schema;
30+
}
2331
}
2432

2533
if (fs.existsSync('./zenstack/schema.zmodel')) {

packages/cli/src/actions/db.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import fs from 'node:fs';
2-
import { execPackage } from '../utils/exec-utils';
2+
import { execPrisma } from '../utils/exec-utils';
33
import { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';
44

55
type Options = {
@@ -27,15 +27,15 @@ async function runPush(options: Options) {
2727
try {
2828
// run prisma db push
2929
const cmd = [
30-
'prisma db push',
30+
'db push',
3131
` --schema "${prismaSchemaFile}"`,
3232
options.acceptDataLoss ? ' --accept-data-loss' : '',
3333
options.forceReset ? ' --force-reset' : '',
3434
' --skip-generate',
3535
].join('');
3636

3737
try {
38-
await execPackage(cmd);
38+
execPrisma(cmd);
3939
} catch (err) {
4040
handleSubProcessError(err);
4141
}

packages/cli/src/actions/migrate.ts

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'node:fs';
22
import path from 'node:path';
33
import { CliError } from '../cli-error';
4-
import { execPackage } from '../utils/exec-utils';
4+
import { execPrisma } from '../utils/exec-utils';
55
import { generateTempPrismaSchema, getSchemaFile } from './action-utils';
66

77
type CommonOptions = {
@@ -64,69 +64,65 @@ export async function run(command: string, options: CommonOptions) {
6464
}
6565
}
6666

67-
async function runDev(prismaSchemaFile: string, options: DevOptions) {
67+
function runDev(prismaSchemaFile: string, options: DevOptions) {
6868
try {
6969
const cmd = [
70-
'prisma migrate dev',
70+
'migrate dev',
7171
` --schema "${prismaSchemaFile}"`,
7272
' --skip-generate',
73-
options.name ? ` --name ${options.name}` : '',
73+
options.name ? ` --name "${options.name}"` : '',
7474
options.createOnly ? ' --create-only' : '',
7575
].join('');
76-
77-
await execPackage(cmd);
76+
execPrisma(cmd);
7877
} catch (err) {
7978
handleSubProcessError(err);
8079
}
8180
}
8281

83-
async function runReset(prismaSchemaFile: string, options: ResetOptions) {
82+
function runReset(prismaSchemaFile: string, options: ResetOptions) {
8483
try {
8584
const cmd = [
86-
'prisma migrate reset',
85+
'migrate reset',
8786
` --schema "${prismaSchemaFile}"`,
8887
' --skip-generate',
8988
options.force ? ' --force' : '',
9089
].join('');
91-
92-
await execPackage(cmd);
90+
execPrisma(cmd);
9391
} catch (err) {
9492
handleSubProcessError(err);
9593
}
9694
}
9795

98-
async function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {
96+
function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {
9997
try {
100-
const cmd = ['prisma migrate deploy', ` --schema "${prismaSchemaFile}"`].join('');
101-
102-
await execPackage(cmd);
98+
const cmd = ['migrate deploy', ` --schema "${prismaSchemaFile}"`].join('');
99+
execPrisma(cmd);
103100
} catch (err) {
104101
handleSubProcessError(err);
105102
}
106103
}
107104

108-
async function runStatus(prismaSchemaFile: string, _options: StatusOptions) {
105+
function runStatus(prismaSchemaFile: string, _options: StatusOptions) {
109106
try {
110-
await execPackage(`prisma migrate status --schema "${prismaSchemaFile}"`);
107+
execPrisma(`migrate status --schema "${prismaSchemaFile}"`);
111108
} catch (err) {
112109
handleSubProcessError(err);
113110
}
114111
}
115112

116-
async function runResolve(prismaSchemaFile: string, options: ResolveOptions) {
113+
function runResolve(prismaSchemaFile: string, options: ResolveOptions) {
117114
if (!options.applied && !options.rolledBack) {
118115
throw new CliError('Either --applied or --rolled-back option must be provided');
119116
}
120117

121118
try {
122119
const cmd = [
123-
'prisma migrate resolve',
120+
'migrate resolve',
124121
` --schema "${prismaSchemaFile}"`,
125-
options.applied ? ` --applied ${options.applied}` : '',
126-
options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',
122+
options.applied ? ` --applied "${options.applied}"` : '',
123+
options.rolledBack ? ` --rolled-back "${options.rolledBack}"` : '',
127124
].join('');
128-
129-
await execPackage(cmd);
125+
execPrisma(cmd);
130126
} catch (err) {
131127
handleSubProcessError(err);
132128
}

packages/cli/src/utils/exec-utils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { execSync as _exec, type ExecSyncOptions } from 'child_process';
2+
import { fileURLToPath } from 'url';
23

34
/**
45
* Utility for executing command synchronously and prints outputs on current console
@@ -24,3 +25,18 @@ export function execPackage(
2425
const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';
2526
execSync(`${packageManager} ${cmd}`, options);
2627
}
28+
29+
/**
30+
* Utility for running prisma commands
31+
*/
32+
export function execPrisma(args: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }) {
33+
let prismaPath: string;
34+
if (typeof import.meta.resolve === 'function') {
35+
// esm
36+
prismaPath = fileURLToPath(import.meta.resolve('prisma/build/index.js'));
37+
} else {
38+
// cjs
39+
prismaPath = require.resolve('prisma/build/index.js');
40+
}
41+
execSync(`node ${prismaPath} ${args}`, options);
42+
}

packages/cli/test/generate.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,21 @@ describe('CLI generate command test', () => {
4545
expect(fs.existsSync(path.join(workDir, 'bar/schema.ts'))).toBe(true);
4646
});
4747

48+
it('should respect package.json schema dir config', () => {
49+
const workDir = createProject(model);
50+
fs.mkdirSync(path.join(workDir, 'foo'));
51+
fs.renameSync(path.join(workDir, 'zenstack/schema.zmodel'), path.join(workDir, 'foo/schema.zmodel'));
52+
fs.rmdirSync(path.join(workDir, 'zenstack'));
53+
const pkgJson = JSON.parse(fs.readFileSync(path.join(workDir, 'package.json'), 'utf8'));
54+
pkgJson.zenstack = {
55+
schema: './foo',
56+
output: './bar',
57+
};
58+
fs.writeFileSync(path.join(workDir, 'package.json'), JSON.stringify(pkgJson, null, 2));
59+
runCli('generate', workDir);
60+
expect(fs.existsSync(path.join(workDir, 'bar/schema.ts'))).toBe(true);
61+
});
62+
4863
it('should respect lite option', () => {
4964
const workDir = createProject(model);
5065
runCli('generate --lite', workDir);

packages/cli/test/migrate.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ model User {
99
}
1010
`;
1111

12-
// skip due to timeout in CI
13-
describe.skip('CLI migrate commands test', () => {
12+
describe('CLI migrate commands test', () => {
1413
it('should generate a database with migrate dev', () => {
1514
const workDir = createProject(model);
1615
runCli('migrate dev --name init', workDir);

packages/clients/tanstack-query/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/tanstack-query",
3-
"version": "3.0.0-beta.22",
3+
"version": "3.0.0-beta.23",
44
"description": "TanStack Query Client for consuming ZenStack v3's CRUD service",
55
"main": "index.js",
66
"type": "module",

packages/clients/tanstack-query/src/react.ts

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -145,108 +145,108 @@ export type ModelQueryHooks<Schema extends SchemaDef, Model extends GetModels<Sc
145145
Schema,
146146
Model,
147147
{
148-
useFindUnique<T extends FindUniqueArgs<Schema, Model, true>>(
148+
useFindUnique<T extends FindUniqueArgs<Schema, Model>>(
149149
args: SelectSubset<T, FindUniqueArgs<Schema, Model>>,
150150
options?: ModelQueryOptions<SimplifiedModelResult<Schema, Model, T> | null>,
151151
): ModelQueryResult<SimplifiedModelResult<Schema, Model, T> | null>;
152152

153-
useSuspenseFindUnique<T extends FindUniqueArgs<Schema, Model, true>>(
153+
useSuspenseFindUnique<T extends FindUniqueArgs<Schema, Model>>(
154154
args: SelectSubset<T, FindUniqueArgs<Schema, Model>>,
155155
options?: ModelSuspenseQueryOptions<SimplifiedModelResult<Schema, Model, T> | null>,
156156
): ModelSuspenseQueryResult<SimplifiedModelResult<Schema, Model, T> | null>;
157157

158-
useFindFirst<T extends FindFirstArgs<Schema, Model, true>>(
158+
useFindFirst<T extends FindFirstArgs<Schema, Model>>(
159159
args?: SelectSubset<T, FindFirstArgs<Schema, Model>>,
160160
options?: ModelQueryOptions<SimplifiedModelResult<Schema, Model, T> | null>,
161161
): ModelQueryResult<SimplifiedModelResult<Schema, Model, T> | null>;
162162

163-
useSuspenseFindFirst<T extends FindFirstArgs<Schema, Model, true>>(
163+
useSuspenseFindFirst<T extends FindFirstArgs<Schema, Model>>(
164164
args?: SelectSubset<T, FindFirstArgs<Schema, Model>>,
165165
options?: ModelSuspenseQueryOptions<SimplifiedModelResult<Schema, Model, T> | null>,
166166
): ModelSuspenseQueryResult<SimplifiedModelResult<Schema, Model, T> | null>;
167167

168-
useFindMany<T extends FindManyArgs<Schema, Model, true>>(
168+
useFindMany<T extends FindManyArgs<Schema, Model>>(
169169
args?: SelectSubset<T, FindManyArgs<Schema, Model>>,
170170
options?: ModelQueryOptions<SimplifiedModelResult<Schema, Model, T>[]>,
171171
): ModelQueryResult<SimplifiedModelResult<Schema, Model, T>[]>;
172172

173-
useSuspenseFindMany<T extends FindManyArgs<Schema, Model, true>>(
173+
useSuspenseFindMany<T extends FindManyArgs<Schema, Model>>(
174174
args?: SelectSubset<T, FindManyArgs<Schema, Model>>,
175175
options?: ModelSuspenseQueryOptions<SimplifiedModelResult<Schema, Model, T>[]>,
176176
): ModelSuspenseQueryResult<SimplifiedModelResult<Schema, Model, T>[]>;
177177

178-
useInfiniteFindMany<T extends FindManyArgs<Schema, Model, true>>(
178+
useInfiniteFindMany<T extends FindManyArgs<Schema, Model>>(
179179
args?: SelectSubset<T, FindManyArgs<Schema, Model>>,
180180
options?: ModelInfiniteQueryOptions<SimplifiedModelResult<Schema, Model, T>[]>,
181181
): ModelInfiniteQueryResult<InfiniteData<SimplifiedModelResult<Schema, Model, T>[]>>;
182182

183-
useSuspenseInfiniteFindMany<T extends FindManyArgs<Schema, Model, true>>(
183+
useSuspenseInfiniteFindMany<T extends FindManyArgs<Schema, Model>>(
184184
args?: SelectSubset<T, FindManyArgs<Schema, Model>>,
185185
options?: ModelSuspenseInfiniteQueryOptions<SimplifiedModelResult<Schema, Model, T>[]>,
186186
): ModelSuspenseInfiniteQueryResult<InfiniteData<SimplifiedModelResult<Schema, Model, T>[]>>;
187187

188-
useCreate<T extends CreateArgs<Schema, Model, true>>(
188+
useCreate<T extends CreateArgs<Schema, Model>>(
189189
options?: ModelMutationOptions<SimplifiedModelResult<Schema, Model, T>, T>,
190190
): ModelMutationModelResult<Schema, Model, T>;
191191

192-
useCreateMany<T extends CreateManyArgs<Schema, Model, true>>(
192+
useCreateMany<T extends CreateManyArgs<Schema, Model>>(
193193
options?: ModelMutationOptions<BatchResult, T>,
194194
): ModelMutationResult<BatchResult, T>;
195195

196-
useCreateManyAndReturn<T extends CreateManyAndReturnArgs<Schema, Model, true>>(
196+
useCreateManyAndReturn<T extends CreateManyAndReturnArgs<Schema, Model>>(
197197
options?: ModelMutationOptions<SimplifiedModelResult<Schema, Model, T>[], T>,
198198
): ModelMutationModelResult<Schema, Model, T, true>;
199199

200-
useUpdate<T extends UpdateArgs<Schema, Model, true>>(
200+
useUpdate<T extends UpdateArgs<Schema, Model>>(
201201
options?: ModelMutationOptions<SimplifiedModelResult<Schema, Model, T>, T>,
202202
): ModelMutationModelResult<Schema, Model, T>;
203203

204-
useUpdateMany<T extends UpdateManyArgs<Schema, Model, true>>(
204+
useUpdateMany<T extends UpdateManyArgs<Schema, Model>>(
205205
options?: ModelMutationOptions<BatchResult, T>,
206206
): ModelMutationResult<BatchResult, T>;
207207

208-
useUpdateManyAndReturn<T extends UpdateManyAndReturnArgs<Schema, Model, true>>(
208+
useUpdateManyAndReturn<T extends UpdateManyAndReturnArgs<Schema, Model>>(
209209
options?: ModelMutationOptions<SimplifiedModelResult<Schema, Model, T>[], T>,
210210
): ModelMutationModelResult<Schema, Model, T, true>;
211211

212-
useUpsert<T extends UpsertArgs<Schema, Model, true>>(
212+
useUpsert<T extends UpsertArgs<Schema, Model>>(
213213
options?: ModelMutationOptions<SimplifiedModelResult<Schema, Model, T>, T>,
214214
): ModelMutationModelResult<Schema, Model, T>;
215215

216-
useDelete<T extends DeleteArgs<Schema, Model, true>>(
216+
useDelete<T extends DeleteArgs<Schema, Model>>(
217217
options?: ModelMutationOptions<SimplifiedModelResult<Schema, Model, T>, T>,
218218
): ModelMutationModelResult<Schema, Model, T>;
219219

220-
useDeleteMany<T extends DeleteManyArgs<Schema, Model, true>>(
220+
useDeleteMany<T extends DeleteManyArgs<Schema, Model>>(
221221
options?: ModelMutationOptions<BatchResult, T>,
222222
): ModelMutationResult<BatchResult, T>;
223223

224-
useCount<T extends CountArgs<Schema, Model, true>>(
224+
useCount<T extends CountArgs<Schema, Model>>(
225225
args?: Subset<T, CountArgs<Schema, Model>>,
226226
options?: ModelQueryOptions<CountResult<Schema, Model, T>>,
227227
): ModelQueryResult<CountResult<Schema, Model, T>>;
228228

229-
useSuspenseCount<T extends CountArgs<Schema, Model, true>>(
229+
useSuspenseCount<T extends CountArgs<Schema, Model>>(
230230
args?: Subset<T, CountArgs<Schema, Model>>,
231231
options?: ModelSuspenseQueryOptions<CountResult<Schema, Model, T>>,
232232
): ModelSuspenseQueryResult<CountResult<Schema, Model, T>>;
233233

234-
useAggregate<T extends AggregateArgs<Schema, Model, true>>(
234+
useAggregate<T extends AggregateArgs<Schema, Model>>(
235235
args: Subset<T, AggregateArgs<Schema, Model>>,
236236
options?: ModelQueryOptions<AggregateResult<Schema, Model, T>>,
237237
): ModelQueryResult<AggregateResult<Schema, Model, T>>;
238238

239-
useSuspenseAggregate<T extends AggregateArgs<Schema, Model, true>>(
239+
useSuspenseAggregate<T extends AggregateArgs<Schema, Model>>(
240240
args: Subset<T, AggregateArgs<Schema, Model>>,
241241
options?: ModelSuspenseQueryOptions<AggregateResult<Schema, Model, T>>,
242242
): ModelSuspenseQueryResult<AggregateResult<Schema, Model, T>>;
243243

244-
useGroupBy<T extends GroupByArgs<Schema, Model, true>>(
244+
useGroupBy<T extends GroupByArgs<Schema, Model>>(
245245
args: Subset<T, GroupByArgs<Schema, Model>>,
246246
options?: ModelQueryOptions<GroupByResult<Schema, Model, T>>,
247247
): ModelQueryResult<GroupByResult<Schema, Model, T>>;
248248

249-
useSuspenseGroupBy<T extends GroupByArgs<Schema, Model, true>>(
249+
useSuspenseGroupBy<T extends GroupByArgs<Schema, Model>>(
250250
args: Subset<T, GroupByArgs<Schema, Model>>,
251251
options?: ModelSuspenseQueryOptions<GroupByResult<Schema, Model, T>>,
252252
): ModelSuspenseQueryResult<GroupByResult<Schema, Model, T>>;

0 commit comments

Comments
 (0)