From 15bbbf4f6377f9a51b6c5fb60f78bef269643691 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Thu, 7 Sep 2023 15:09:25 +0800 Subject: [PATCH] fix: add "exports" to generated package.json, make trpc code-gen compatible with vite --- package.json | 2 +- packages/language/package.json | 2 +- packages/plugins/openapi/package.json | 2 +- packages/plugins/swr/package.json | 2 +- packages/plugins/tanstack-query/package.json | 2 +- packages/plugins/trpc/package.json | 2 +- packages/plugins/trpc/src/generator.ts | 33 +++++++++------- packages/plugins/trpc/src/helpers.ts | 41 ++++++++++---------- packages/runtime/package.json | 2 +- packages/schema/package.json | 2 +- packages/schema/src/plugins/plugin-utils.ts | 12 +++++- packages/sdk/package.json | 2 +- packages/server/package.json | 2 +- packages/testtools/package.json | 2 +- 14 files changed, 61 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 5f1fa99e5..6a1d2d69e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/language/package.json b/packages/language/package.json index a6697b54c..44f3e3989 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "displayName": "ZenStack modeling language compiler", "description": "ZenStack modeling language compiler", "homepage": "https://zenstack.dev", diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json index 5ab874b25..8afe590da 100644 --- a/packages/plugins/openapi/package.json +++ b/packages/plugins/openapi/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/openapi", "displayName": "ZenStack Plugin and Runtime for OpenAPI", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "ZenStack plugin and runtime supporting OpenAPI", "main": "index.js", "repository": { diff --git a/packages/plugins/swr/package.json b/packages/plugins/swr/package.json index e2ebaedc8..0311eee85 100644 --- a/packages/plugins/swr/package.json +++ b/packages/plugins/swr/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/swr", "displayName": "ZenStack plugin for generating SWR hooks", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "ZenStack plugin for generating SWR hooks", "main": "index.js", "repository": { diff --git a/packages/plugins/tanstack-query/package.json b/packages/plugins/tanstack-query/package.json index 4c3a6cebb..e87656c8c 100644 --- a/packages/plugins/tanstack-query/package.json +++ b/packages/plugins/tanstack-query/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/tanstack-query", "displayName": "ZenStack plugin for generating tanstack-query hooks", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "ZenStack plugin for generating tanstack-query hooks", "main": "index.js", "exports": { diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index 57113be2a..b18897143 100644 --- a/packages/plugins/trpc/package.json +++ b/packages/plugins/trpc/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/trpc", "displayName": "ZenStack plugin for tRPC", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/plugins/trpc/src/generator.ts b/packages/plugins/trpc/src/generator.ts index 32cc64582..5ce930fe6 100644 --- a/packages/plugins/trpc/src/generator.ts +++ b/packages/plugins/trpc/src/generator.ts @@ -19,7 +19,7 @@ import { name } from '.'; import { generateHelperImport, generateProcedure, - generateRouterSchemaImports, + generateRouterSchemaImport, generateRouterTyping, generateRouterTypingImports, getInputSchemaByOpName, @@ -89,21 +89,22 @@ function createAppRouter( const prismaImport = getPrismaClientImportSpec(zmodel, path.dirname(indexFile)); appRouter.addImportDeclarations([ { - namedImports: ['type AnyRootConfig', 'type Procedure', 'type ProcedureParams', 'type ProcedureType'], + namedImports: [ + 'type AnyRouter', + 'type AnyRootConfig', + 'type CreateRouterInner', + 'type Procedure', + 'type ProcedureBuilder', + 'type ProcedureParams', + 'type ProcedureRouterRecord', + 'type ProcedureType', + ], moduleSpecifier: '@trpc/server', }, { namedImports: ['type PrismaClient', 'type Prisma'], moduleSpecifier: prismaImport, }, - { - namedImports: ['type createRouterFactory', 'AnyRouter'], - moduleSpecifier: '@trpc/server/dist/core/router', - }, - { - namedImports: ['type ProcedureBuilder'], - moduleSpecifier: '@trpc/server/dist/core/internals/procedureBuilder', - }, { defaultImport: 'z', moduleSpecifier: 'zod', isTypeOnly: true }, ]); @@ -113,10 +114,12 @@ function createAppRouter( export type BaseConfig = AnyRootConfig; - export type RouterFactory = ReturnType< - typeof createRouterFactory - >; - + export type RouterFactory = < + ProcRouterRecord extends ProcedureRouterRecord + >( + procedures: ProcRouterRecord + ) => CreateRouterInner; + ${ /** this is needed in order to prevent type errors between a procedure and a middleware-extended procedure */ '' } @@ -299,7 +302,7 @@ function generateModelCreateRouter( }, ]); - generateRouterSchemaImports(modelRouter, upperCaseFirst(model), zodSchemasImport); + generateRouterSchemaImport(modelRouter, zodSchemasImport); generateHelperImport(modelRouter); if (generateClientHelpers) { generateRouterTypingImports(modelRouter, zmodel); diff --git a/packages/plugins/trpc/src/helpers.ts b/packages/plugins/trpc/src/helpers.ts index c3a776556..1fbeb9efd 100644 --- a/packages/plugins/trpc/src/helpers.ts +++ b/packages/plugins/trpc/src/helpers.ts @@ -24,7 +24,7 @@ export function generateProcedure( )}.${prismaMethod}(input as any))) as ProcReturns< "query", Proc, - (typeof ${upperCaseFirst(modelName)}InputSchema)["${opType.replace('OrThrow', '')}"], + (typeof $Schema.${upperCaseFirst(modelName)}InputSchema)["${opType.replace('OrThrow', '')}"], ReturnType >, `); @@ -36,7 +36,7 @@ export function generateProcedure( )}.${prismaMethod}(input as any))) as ProcReturns< "mutation", Proc, - (typeof ${upperCaseFirst(modelName)}InputSchema)["${opType.replace('OrThrow', '')}"], + (typeof $Schema.${upperCaseFirst(modelName)}InputSchema)["${opType.replace('OrThrow', '')}"], ReturnType >, `); @@ -247,8 +247,8 @@ export function generateRouterTypingImports(sourceFile: SourceFile, model: Model } // eslint-disable-next-line @typescript-eslint/no-unused-vars -export function generateRouterSchemaImports(sourceFile: SourceFile, name: string, zodSchemasImport: string) { - sourceFile.addStatements(`import { ${name}InputSchema } from '${zodSchemasImport}/input';`); +export function generateRouterSchemaImport(sourceFile: SourceFile, zodSchemasImport: string) { + sourceFile.addStatements(`import $Schema from '${zodSchemasImport}/input';`); } export function generateHelperImport(sourceFile: SourceFile) { @@ -257,54 +257,55 @@ export function generateHelperImport(sourceFile: SourceFile) { export const getInputSchemaByOpName = (opName: string, modelName: string) => { let inputType; + const capModelName = upperCaseFirst(modelName); switch (opName) { case 'findUnique': - inputType = `${modelName}InputSchema.findUnique`; + inputType = `$Schema.${capModelName}InputSchema.findUnique`; break; case 'findFirst': - inputType = `${modelName}InputSchema.findFirst`; + inputType = `$Schema.${capModelName}InputSchema.findFirst`; break; case 'findMany': - inputType = `${modelName}InputSchema.findMany`; + inputType = `$Schema.${capModelName}InputSchema.findMany`; break; case 'findRaw': - inputType = `${modelName}InputSchema.findRawObject`; + inputType = `$Schema.${capModelName}InputSchema.findRawObject`; break; case 'createOne': - inputType = `${modelName}InputSchema.create`; + inputType = `$Schema.${capModelName}InputSchema.create`; break; case 'createMany': - inputType = `${modelName}InputSchema.createMany`; + inputType = `$Schema.${capModelName}InputSchema.createMany`; break; case 'deleteOne': - inputType = `${modelName}InputSchema.delete`; + inputType = `$Schema.${capModelName}InputSchema.delete`; break; case 'updateOne': - inputType = `${modelName}InputSchema.update`; + inputType = `$Schema.${capModelName}InputSchema.update`; break; case 'deleteMany': - inputType = `${modelName}InputSchema.deleteMany`; + inputType = `$Schema.${capModelName}InputSchema.deleteMany`; break; case 'updateMany': - inputType = `${modelName}InputSchema.updateMany`; + inputType = `$Schema.${capModelName}InputSchema.updateMany`; break; case 'upsertOne': - inputType = `${modelName}InputSchema.upsert`; + inputType = `$Schema.${capModelName}InputSchema.upsert`; break; case 'aggregate': - inputType = `${modelName}InputSchema.aggregate`; + inputType = `$Schema.${capModelName}InputSchema.aggregate`; break; case 'aggregateRaw': - inputType = `${modelName}InputSchema.aggregateRawObject`; + inputType = `$Schema.${capModelName}InputSchema.aggregateRawObject`; break; case 'groupBy': - inputType = `${modelName}InputSchema.groupBy`; + inputType = `$Schema.${capModelName}InputSchema.groupBy`; break; case 'count': - inputType = `${modelName}InputSchema.count`; + inputType = `$Schema.${capModelName}InputSchema.count`; break; default: - console.log('getInputTypeByOpName: ', { opName, modelName }); + break; } return inputType; }; diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 7589ac87e..dadbca61f 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/schema/package.json b/packages/schema/package.json index d285a3268..89058bef6 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack Language Tools", "description": "A toolkit for building secure CRUD apps with Next.js + Typescript", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "author": { "name": "ZenStack Team" }, diff --git a/packages/schema/src/plugins/plugin-utils.ts b/packages/schema/src/plugins/plugin-utils.ts index 9245eed3a..8371d67a0 100644 --- a/packages/schema/src/plugins/plugin-utils.ts +++ b/packages/schema/src/plugins/plugin-utils.ts @@ -27,8 +27,18 @@ export function getNodeModulesFolder(startPath?: string): string | undefined { export function ensureDefaultOutputFolder() { const output = getDefaultOutputFolder(); if (output && !fs.existsSync(output)) { + const pkgJson = { + name: '.zenstack', + version: '1.0.0', + exports: { + './zod': { + default: './zod/index.js', + types: './zod/index.d.ts', + }, + }, + }; fs.mkdirSync(output, { recursive: true }); - fs.writeFileSync(path.join(output, 'package.json'), JSON.stringify({ name: '.zenstack', version: '1.0.0' })); + fs.writeFileSync(path.join(output, 'package.json'), JSON.stringify(pkgJson, undefined, 4)); } } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 0054ca4ca..bd1525b19 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index ac8422a7f..ab664502a 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "displayName": "ZenStack Server-side Adapters", "description": "ZenStack server-side adapters", "homepage": "https://zenstack.dev", diff --git a/packages/testtools/package.json b/packages/testtools/package.json index 2672ba39c..1d28ed278 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "1.0.0-beta.21", + "version": "1.0.0-beta.22", "description": "ZenStack Test Tools", "main": "index.js", "publishConfig": {