From 8920b28b6efcb7756757e6ac8001428fdd988157 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Wed, 28 Jun 2023 22:37:19 +0800 Subject: [PATCH 1/3] chore: remove deprecated next package --- packages/next/.eslintrc.json | 14 -- packages/next/LICENSE | 1 - packages/next/README.md | 7 - packages/next/jest.config.ts | 29 --- packages/next/package.json | 44 ---- packages/next/src/index.ts | 1 - packages/next/src/request-handler.ts | 204 ---------------- packages/next/tests/request-handler.test.ts | 222 ------------------ packages/next/tsconfig.json | 22 -- pnpm-lock.yaml | 121 +++++----- tests/integration/package.json | 2 +- .../nextjs/test-project/package-lock.json | 9 + .../tests/nextjs/test-project/package.json | 1 + .../test-project/pages/api/model/[...path].ts | 4 +- 14 files changed, 81 insertions(+), 600 deletions(-) delete mode 100644 packages/next/.eslintrc.json delete mode 120000 packages/next/LICENSE delete mode 100644 packages/next/README.md delete mode 100644 packages/next/jest.config.ts delete mode 100644 packages/next/package.json delete mode 100644 packages/next/src/index.ts delete mode 100644 packages/next/src/request-handler.ts delete mode 100644 packages/next/tests/request-handler.test.ts delete mode 100644 packages/next/tsconfig.json diff --git a/packages/next/.eslintrc.json b/packages/next/.eslintrc.json deleted file mode 100644 index 0a913e874..000000000 --- a/packages/next/.eslintrc.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ] -} diff --git a/packages/next/LICENSE b/packages/next/LICENSE deleted file mode 120000 index 30cff7403..000000000 --- a/packages/next/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE \ No newline at end of file diff --git a/packages/next/README.md b/packages/next/README.md deleted file mode 100644 index 1447c7630..000000000 --- a/packages/next/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# ZenStack Next.js Library - -**This package is deprecated. Please use `@zenstackhq/server` package instead.** - -This package is the runtime library for integrating ZenStack with Next.js. - -Visit [Homepage](https://zenstack.dev) for more details. diff --git a/packages/next/jest.config.ts b/packages/next/jest.config.ts deleted file mode 100644 index 917cf52f6..000000000 --- a/packages/next/jest.config.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * For a detailed explanation regarding each configuration property and type check, visit: - * https://jestjs.io/docs/configuration - */ - -export default { - // Automatically clear mock calls, instances, contexts and results before every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // The directory where Jest should output its coverage files - coverageDirectory: 'tests/coverage', - - // An array of regexp pattern strings used to skip coverage collection - coveragePathIgnorePatterns: ['/node_modules/', '/tests/'], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: 'v8', - - // A list of reporter names that Jest uses when writing coverage reports - coverageReporters: ['json', 'text', 'lcov', 'clover'], - - // A map from regular expressions to paths to transformers - transform: { '^.+\\.tsx?$': 'ts-jest' }, - - testTimeout: 300000, -}; diff --git a/packages/next/package.json b/packages/next/package.json deleted file mode 100644 index e4b08d0b0..000000000 --- a/packages/next/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "@zenstackhq/next", - "version": "1.0.0-beta.2", - "displayName": "ZenStack Next.js integration", - "description": "ZenStack Next.js integration", - "homepage": "https://zenstack.dev", - "scripts": { - "clean": "rimraf dist", - "build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE dist", - "watch": "tsc --watch", - "lint": "eslint src --ext ts", - "test": "jest", - "prepublishOnly": "pnpm build", - "publish-dev": "pnpm publish --tag dev" - }, - "publishConfig": { - "directory": "dist", - "linkDirectory": true - }, - "keywords": [], - "author": "", - "license": "MIT", - "peerDependencies": { - "next": "^12.3.1 || ^13" - }, - "dependencies": { - "@zenstackhq/runtime": "workspace:*", - "tmp": "^0.2.1" - }, - "devDependencies": { - "@types/jest": "^29.5.0", - "@types/react": "^18.0.26", - "@types/supertest": "^2.0.12", - "@zenstackhq/testtools": "workspace:*", - "copyfiles": "^2.4.1", - "jest": "^29.5.0", - "react": "^17.0.2 || ^18", - "rimraf": "^3.0.2", - "superjson": "^1.11.0", - "supertest": "^6.3.3", - "ts-jest": "^29.0.5", - "typescript": "^4.9.4" - } -} diff --git a/packages/next/src/index.ts b/packages/next/src/index.ts deleted file mode 100644 index 8394dd8a0..000000000 --- a/packages/next/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './request-handler'; diff --git a/packages/next/src/request-handler.ts b/packages/next/src/request-handler.ts deleted file mode 100644 index 8e0d17bd8..000000000 --- a/packages/next/src/request-handler.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { - DbClientContract, - DbOperations, - isPrismaClientKnownRequestError, - isPrismaClientUnknownRequestError, - isPrismaClientValidationError, -} from '@zenstackhq/runtime'; -import { NextApiRequest, NextApiResponse } from 'next'; -import superjson from 'superjson'; - -type LoggerMethod = (code: string | undefined, message: string) => void; - -/** - * Logger config. - */ -export type LoggerConfig = { - debug?: LoggerMethod; - info?: LoggerMethod; - warn?: LoggerMethod; - error?: LoggerMethod; -}; - -/** - * Options for initializing a Next.js API endpoint request handler. - * @see requestHandler - */ -export type RequestHandlerOptions = { - /** - * Callback method for getting a Prisma instance for the given request/response pair. - */ - getPrisma: (req: NextApiRequest, res: NextApiResponse) => Promise | unknown; - - /** - * Logger configuration. By default log to console. Set to null to turn off logging. - */ - logger?: LoggerConfig | null; - - /** - * Whether to use superjson for serialization/deserialization. Defaults to true. - */ - useSuperJson?: boolean; -}; - -/** - * Creates a Next.js API endpoint request handler which encapsulates Prisma CRUD operations. - * - * @param options Options for initialization - * @returns An API endpoint request handler - */ -export function requestHandler( - options: RequestHandlerOptions -): (req: NextApiRequest, res: NextApiResponse) => Promise { - return async (req: NextApiRequest, res: NextApiResponse) => { - let prisma = options.getPrisma(req, res); - if (prisma instanceof Promise) { - prisma = await prisma; - } - if (!prisma) { - res.status(500).send({ - error: 'unable to get prisma from request context', - }); - return; - } - return handleRequest(req, res, prisma as DbClientContract, options); - }; -} - -function logError(options: RequestHandlerOptions, code: string | undefined, message: string) { - if (options.logger === undefined) { - console.error(`zenstack-next error: ${code ? '[' + code + ']' : ''} ${message}`); - } else if (options.logger?.error) { - options.logger.error(code, message); - } -} - -async function handleRequest( - req: NextApiRequest, - res: NextApiResponse, - prisma: DbClientContract, - options: RequestHandlerOptions -): Promise { - const [model, op] = req.query.path as string[]; - - const dbOp = op as keyof DbOperations; - let args: unknown; - let resCode = 200; - - switch (dbOp) { - case 'create': - case 'createMany': - case 'upsert': - if (req.method !== 'POST') { - res.status(400).send({ error: 'invalid http method' }); - return; - } - args = unmarshal(req.body, options.useSuperJson); - // TODO: upsert's status code should be conditional - resCode = 201; - break; - - case 'findFirst': - case 'findUnique': - case 'findMany': - case 'aggregate': - case 'groupBy': - case 'count': - if (req.method !== 'GET') { - res.status(400).send({ error: 'invalid http method' }); - return; - } - args = req.query.q ? unmarshal(req.query.q as string, options.useSuperJson) : {}; - break; - - case 'update': - case 'updateMany': - if (req.method !== 'PUT' && req.method !== 'PATCH') { - res.status(400).send({ error: 'invalid http method' }); - return; - } - args = unmarshal(req.body, options.useSuperJson); - break; - - case 'delete': - case 'deleteMany': - if (req.method !== 'DELETE') { - res.status(400).send({ error: 'invalid http method' }); - return; - } - args = req.query.q ? unmarshal(req.query.q as string, options.useSuperJson) : {}; - break; - - default: - res.status(400).send({ error: `unknown method name: ${op}` }); - return; - } - - try { - if (!prisma[model]) { - res.status(400).send({ error: `unknown model name: ${model}` }); - return; - } - const result = await prisma[model][dbOp](args); - res.status(resCode).send(marshal(result, options.useSuperJson)); - } catch (err) { - if (isPrismaClientKnownRequestError(err)) { - logError(options, err.code, err.message); - if (err.code === 'P2004') { - // rejected by policy - res.status(403).send({ - prisma: true, - rejectedByPolicy: true, - code: err.code, - message: err.message, - reason: err.meta?.reason, - }); - } else { - res.status(400).send({ - prisma: true, - code: err.code, - message: err.message, - reason: err.meta?.reason, - }); - } - } else if (isPrismaClientUnknownRequestError(err) || isPrismaClientValidationError(err)) { - logError(options, undefined, err.message); - res.status(400).send({ - prisma: true, - message: err.message, - }); - } else { - const _err = err as Error; - logError(options, undefined, _err.message + (_err.stack ? '\n' + _err.stack : '')); - res.status(500).send({ - message: (err as Error).message, - }); - } - } -} - -function marshal(value: unknown, useSuperJson = true) { - return useSuperJson ? JSON.parse(superjson.stringify(value)) : value; -} - -function unmarshal(value: unknown, useSuperJson = true) { - if (!value) { - return value; - } - - if (useSuperJson) { - if (typeof value === 'string') { - return superjson.parse(value); - } else { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const json = (value as any).json; - if (json && typeof json === 'object') { - return superjson.parse(JSON.stringify(value)); - } else { - return value; - } - } - } else { - return value; - } -} diff --git a/packages/next/tests/request-handler.test.ts b/packages/next/tests/request-handler.test.ts deleted file mode 100644 index fb56fecc7..000000000 --- a/packages/next/tests/request-handler.test.ts +++ /dev/null @@ -1,222 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { loadSchema } from '@zenstackhq/testtools'; -import { createServer, RequestListener } from 'http'; -import { apiResolver } from 'next/dist/server/api-utils/node'; -import superjson from 'superjson'; -import request from 'supertest'; -import { requestHandler, RequestHandlerOptions } from '../src/'; - -function makeTestClient(apiPath: string, options: RequestHandlerOptions, queryArgs?: unknown) { - const pathParts = apiPath.split('/').filter((p) => p); - - const query = { - path: pathParts, - ...(queryArgs ? { q: superjson.stringify(queryArgs) } : {}), - }; - - const handler = requestHandler(options); - - const listener: RequestListener = (req, res) => { - return apiResolver( - req, - res, - query, - handler, - { - previewModeEncryptionKey: '', - previewModeId: '', - previewModeSigningKey: '', - }, - false - ); - }; - - return request(createServer(listener)); -} - -describe('request handler tests', () => { - let origDir: string; - - beforeEach(() => { - origDir = process.cwd(); - }); - - afterEach(() => { - process.chdir(origDir); - }); - - it('simple crud', async () => { - const model = ` -model M { - id String @id @default(cuid()) - value Int -} - `; - - const { prisma } = await loadSchema(model); - - await makeTestClient('/m/create', { getPrisma: () => prisma }) - .post('/') - .send({ data: { id: '1', value: 1 } }) - .expect(201) - .expect((resp) => { - expect(resp.body.json.value).toBe(1); - }); - - await makeTestClient('/m/findUnique', { getPrisma: () => prisma }, { where: { id: '1' } }) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json.value).toBe(1); - }); - - await makeTestClient('/m/findFirst', { getPrisma: () => prisma }, { where: { id: '1' } }) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json.value).toBe(1); - }); - - await makeTestClient('/m/findMany', { getPrisma: () => prisma }, {}) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json).toHaveLength(1); - }); - - await makeTestClient('/m/update', { getPrisma: () => prisma }) - .put('/') - .send({ where: { id: '1' }, data: { value: 2 } }) - .expect(200) - .expect((resp) => { - expect(resp.body.json.value).toBe(2); - }); - - await makeTestClient('/m/updateMany', { getPrisma: () => prisma }) - .put('/') - .send({ data: { value: 4 } }) - .expect(200) - .expect((resp) => { - expect(resp.body.json.count).toBe(1); - }); - - await makeTestClient('/m/upsert', { getPrisma: () => prisma }) - .post('/') - .send({ where: { id: '2' }, create: { id: '2', value: 2 }, update: { value: 3 } }) - .expect(201) - .expect((resp) => { - expect(resp.body.json.value).toBe(2); - }); - - await makeTestClient('/m/upsert', { getPrisma: () => prisma }) - .post('/') - .send({ where: { id: '2' }, create: { id: '2', value: 2 }, update: { value: 3 } }) - .expect(201) - .expect((resp) => { - expect(resp.body.json.value).toBe(3); - }); - - await makeTestClient('/m/count', { getPrisma: () => prisma }, { where: { id: '1' } }) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json).toBe(1); - }); - - await makeTestClient('/m/count', { getPrisma: () => prisma }, {}) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json).toBe(2); - }); - - await makeTestClient('/m/aggregate', { getPrisma: () => prisma }, { _sum: { value: true } }) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json._sum.value).toBe(7); - }); - - await makeTestClient('/m/groupBy', { getPrisma: () => prisma }, { by: ['id'], _sum: { value: true } }) - .get('/') - .expect(200) - .expect((resp) => { - const data = resp.body.json; - expect(data).toHaveLength(2); - expect(data.find((item: any) => item.id === '1')._sum.value).toBe(4); - expect(data.find((item: any) => item.id === '2')._sum.value).toBe(3); - }); - - await makeTestClient('/m/delete', { getPrisma: () => prisma }, { where: { id: '1' } }) - .del('/') - .expect(200); - expect(await prisma.m.count()).toBe(1); - - await makeTestClient('/m/deleteMany', { getPrisma: () => prisma }, {}) - .del('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json.count).toBe(1); - }); - expect(await prisma.m.count()).toBe(0); - }); - - it('access policy crud', async () => { - const model = ` -model M { - id String @id @default(cuid()) - value Int - - @@allow('create', true) - @@allow('read', value > 0) - @@allow('update', future().value > 1) - @@allow('delete', value > 2) -} - `; - - const { withPresets } = await loadSchema(model); - - await makeTestClient('/m/create', { getPrisma: () => withPresets() }) - .post('/m/create') - .send({ data: { value: 0 } }) - .expect(403) - .expect((resp) => { - expect(resp.body.reason).toBe('RESULT_NOT_READABLE'); - }); - - await makeTestClient('/m/create', { getPrisma: () => withPresets() }) - .post('/') - .send({ data: { id: '1', value: 1 } }) - .expect(201); - - await makeTestClient('/m/findMany', { getPrisma: () => withPresets() }) - .get('/') - .expect(200) - .expect((resp) => { - expect(resp.body.json).toHaveLength(1); - }); - - await makeTestClient('/m/update', { getPrisma: () => withPresets() }) - .put('/') - .send({ where: { id: '1' }, data: { value: 0 } }) - .expect(403); - - await makeTestClient('/m/update', { getPrisma: () => withPresets() }) - .put('/') - .send({ where: { id: '1' }, data: { value: 2 } }) - .expect(200); - - await makeTestClient('/m/delete', { getPrisma: () => withPresets() }, { where: { id: '1' } }) - .del('/') - .expect(403); - - await makeTestClient('/m/update', { getPrisma: () => withPresets() }) - .put('/') - .send({ where: { id: '1' }, data: { value: 3 } }) - .expect(200); - - await makeTestClient('/m/delete', { getPrisma: () => withPresets() }, { where: { id: '1' } }) - .del('/') - .expect(200); - }); -}); diff --git a/packages/next/tsconfig.json b/packages/next/tsconfig.json deleted file mode 100644 index f6dff1942..000000000 --- a/packages/next/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "CommonJS", - "lib": ["ESNext", "DOM"], - "sourceMap": true, - "outDir": "dist", - "strict": true, - "noUnusedLocals": true, - "noImplicitReturns": true, - "moduleResolution": "node", - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "declaration": true, - "resolveJsonModule": true, - "strictPropertyInitialization": false, - "paths": {} - }, - "include": ["src/**/*.ts"], - "exclude": ["dist", "node_modules"] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 478d78972..4f113d342 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,56 +35,6 @@ importers: version: 4.9.4 publishDirectory: dist - packages/next: - dependencies: - '@zenstackhq/runtime': - specifier: workspace:* - version: link:../runtime/dist - next: - specifier: ^12.3.1 || ^13 - version: 12.3.1(@babel/core@7.20.5)(react-dom@18.2.0)(react@18.2.0) - tmp: - specifier: ^0.2.1 - version: 0.2.1 - devDependencies: - '@types/jest': - specifier: ^29.5.0 - version: 29.5.0 - '@types/react': - specifier: ^18.0.26 - version: 18.0.26 - '@types/supertest': - specifier: ^2.0.12 - version: 2.0.12 - '@zenstackhq/testtools': - specifier: workspace:* - version: link:../testtools/dist - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 - jest: - specifier: ^29.5.0 - version: 29.5.0(@types/node@14.18.29)(ts-node@10.9.1) - react: - specifier: ^17.0.2 || ^18 - version: 18.2.0 - rimraf: - specifier: ^3.0.2 - version: 3.0.2 - superjson: - specifier: ^1.11.0 - version: 1.11.0 - supertest: - specifier: ^6.3.3 - version: 6.3.3 - ts-jest: - specifier: ^29.0.5 - version: 29.0.5(@babel/core@7.20.5)(jest@29.5.0)(typescript@4.9.4) - typescript: - specifier: ^4.9.4 - version: 4.9.4 - publishDirectory: dist - packages/plugins/openapi: dependencies: '@prisma/generator-helper': @@ -871,12 +821,12 @@ importers: '@types/uuid': specifier: ^8.3.4 version: 8.3.4 - '@zenstackhq/next': - specifier: workspace:* - version: link:../../packages/next/dist '@zenstackhq/runtime': specifier: workspace:* version: link:../../packages/runtime/dist + '@zenstackhq/server': + specifier: workspace:* + version: link:../../packages/server/dist '@zenstackhq/swr': specifier: workspace:* version: link:../../packages/plugins/swr/dist @@ -931,6 +881,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 + dev: true /@apidevtools/openapi-schemas@2.1.0: resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} @@ -950,6 +901,7 @@ packages: /@babel/compat-data@7.20.5: resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} engines: {node: '>=6.9.0'} + dev: true /@babel/core@7.20.5: resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} @@ -972,6 +924,7 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true /@babel/generator@7.20.5: resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==} @@ -980,6 +933,7 @@ packages: '@babel/types': 7.20.5 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 + dev: true /@babel/helper-compilation-targets@7.20.0(@babel/core@7.20.5): resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} @@ -992,10 +946,12 @@ packages: '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 semver: 6.3.0 + dev: true /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-function-name@7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} @@ -1003,18 +959,21 @@ packages: dependencies: '@babel/template': 7.18.10 '@babel/types': 7.20.5 + dev: true /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 + dev: true /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 + dev: true /@babel/helper-module-transforms@7.20.2: resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} @@ -1030,6 +989,7 @@ packages: '@babel/types': 7.20.5 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-plugin-utils@7.19.0: resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} @@ -1046,16 +1006,19 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 + dev: true /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.5 + dev: true /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} @@ -1064,6 +1027,7 @@ packages: /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} + dev: true /@babel/helpers@7.20.6: resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==} @@ -1074,6 +1038,7 @@ packages: '@babel/types': 7.20.5 transitivePeerDependencies: - supports-color + dev: true /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} @@ -1089,6 +1054,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.20.5 + dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -1233,6 +1199,7 @@ packages: '@babel/code-frame': 7.18.6 '@babel/parser': 7.20.5 '@babel/types': 7.20.5 + dev: true /@babel/traverse@7.20.5: resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} @@ -1250,6 +1217,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/types@7.20.5: resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} @@ -1258,6 +1226,7 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + dev: true /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2069,6 +2038,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} @@ -2077,23 +2047,28 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.17 + dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -2128,6 +2103,7 @@ packages: /@next/env@12.3.1: resolution: {integrity: sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==} + dev: true /@next/env@13.4.5: resolution: {integrity: sha512-SG/gKH6eij4vwQy87b/3mbpQ1X3x2vUdnpwq6/qL2IQWjtq58EY/UuNAp9CoEZoC9sI4L9AD1r+73Z9r4d3uug==} @@ -2143,6 +2119,7 @@ packages: cpu: [arm] os: [android] requiresBuild: true + dev: true optional: true /@next/swc-android-arm64@12.3.1: @@ -2151,6 +2128,7 @@ packages: cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true /@next/swc-darwin-arm64@12.3.1: @@ -2159,6 +2137,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@next/swc-darwin-arm64@13.4.5: @@ -2185,6 +2164,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@next/swc-darwin-x64@13.4.5: @@ -2211,6 +2191,7 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true /@next/swc-linux-arm-gnueabihf@12.3.1: @@ -2219,6 +2200,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@next/swc-linux-arm64-gnu@12.3.1: @@ -2227,6 +2209,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@next/swc-linux-arm64-gnu@13.4.5: @@ -2253,6 +2236,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@next/swc-linux-arm64-musl@13.4.5: @@ -2279,6 +2263,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@next/swc-linux-x64-gnu@13.4.5: @@ -2305,6 +2290,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@next/swc-linux-x64-musl@13.4.5: @@ -2331,6 +2317,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@next/swc-win32-arm64-msvc@13.4.5: @@ -2357,6 +2344,7 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true /@next/swc-win32-ia32-msvc@13.4.5: @@ -2383,6 +2371,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@next/swc-win32-x64-msvc@13.4.5: @@ -3942,6 +3931,7 @@ packages: electron-to-chromium: 1.4.284 node-releases: 2.0.6 update-browserslist-db: 1.0.10(browserslist@4.21.4) + dev: true /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -4036,6 +4026,7 @@ packages: /caniuse-lite@1.0.30001439: resolution: {integrity: sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==} + dev: true /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -4409,6 +4400,7 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -4432,6 +4424,7 @@ packages: engines: {node: '>=12.13'} dependencies: is-what: 4.1.8 + dev: false /copyfiles@2.4.1: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} @@ -4772,6 +4765,7 @@ packages: /electron-to-chromium@1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: true /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -5126,6 +5120,7 @@ packages: /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + dev: true /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -5858,6 +5853,7 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} @@ -5964,6 +5960,7 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /globals@13.17.0: resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} @@ -6432,6 +6429,7 @@ packages: /is-what@4.1.8: resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} engines: {node: '>=12.13'} + dev: false /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -7117,6 +7115,7 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -7151,6 +7150,7 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + dev: true /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -7340,6 +7340,7 @@ packages: hasBin: true dependencies: js-tokens: 4.0.0 + dev: true /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} @@ -7595,6 +7596,7 @@ packages: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true /napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} @@ -7661,6 +7663,7 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + dev: true /next@13.4.5(@babel/core@7.20.5)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pfNsRLVM9e5Y1/z02VakJRfD6hMQkr24FaN2xc9GbcZDBxoOgiNAViSg5cXwlWCoMhtm4U315D7XYhgOr96Q3Q==} @@ -7790,6 +7793,7 @@ packages: /node-releases@2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true /noms@0.0.0: resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} @@ -8077,6 +8081,7 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -8151,6 +8156,7 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /postcss@8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} @@ -8371,6 +8377,7 @@ packages: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 + dev: true /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -8393,6 +8400,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 + dev: true /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -8691,6 +8699,7 @@ packages: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 + dev: true /secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} @@ -8884,6 +8893,7 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: true /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -9097,6 +9107,7 @@ packages: dependencies: '@babel/core': 7.20.5 react: 18.2.0 + dev: true /styled-jsx@5.1.1(@babel/core@7.20.5)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} @@ -9139,6 +9150,7 @@ packages: engines: {node: '>=10'} dependencies: copy-anything: 3.0.3 + dev: false /superjson@1.12.1: resolution: {integrity: sha512-HMTj43zvwW5bD+JCZCvFf4DkZQCmiLTen4C+W1Xogj0SPOpnhxsriogM04QmBVGH5b3kcIIOr6FqQ/aoIDx7TQ==} @@ -9356,6 +9368,7 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -9837,6 +9850,7 @@ packages: browserslist: 4.21.4 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -9870,6 +9884,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 18.2.0 + dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} diff --git a/tests/integration/package.json b/tests/integration/package.json index 9136099ed..52221a2b4 100644 --- a/tests/integration/package.json +++ b/tests/integration/package.json @@ -17,7 +17,7 @@ "@types/supertest": "^2.0.12", "@types/tmp": "^0.2.3", "@types/uuid": "^8.3.4", - "@zenstackhq/next": "workspace:*", + "@zenstackhq/server": "workspace:*", "@zenstackhq/swr": "workspace:*", "@zenstackhq/runtime": "workspace:*", "@zenstackhq/trpc": "workspace:*", diff --git a/tests/integration/tests/nextjs/test-project/package-lock.json b/tests/integration/tests/nextjs/test-project/package-lock.json index 5300d2e62..6a0cb3e1d 100644 --- a/tests/integration/tests/nextjs/test-project/package-lock.json +++ b/tests/integration/tests/nextjs/test-project/package-lock.json @@ -13,6 +13,7 @@ "@types/react": "18.0.27", "@types/react-dom": "18.0.10", "@zenstackhq/runtime": "../../../../../../packages/runtime/dist", + "@zenstackhq/server": "../../../../../../packages/server/dist", "next": "13.1.4", "react": "18.2.0", "react-dom": "18.2.0", @@ -24,6 +25,7 @@ } }, "../../../../../../packages/runtime/dist": {}, + "../../../../../../packages/server/dist": {}, "node_modules/@next/env": { "version": "13.1.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.4.tgz", @@ -301,6 +303,10 @@ "resolved": "../../../../../../packages/runtime/dist", "link": true }, + "node_modules/@zenstackhq/server": { + "resolved": "../../../../../../packages/server/dist", + "link": true + }, "node_modules/caniuse-lite": { "version": "1.0.30001446", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz", @@ -694,6 +700,9 @@ "@zenstackhq/runtime": { "version": "file:../../../../../../packages/runtime/dist" }, + "@zenstackhq/server": { + "version": "file:../../../../../../packages/server/dist" + }, "caniuse-lite": { "version": "1.0.30001446", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz", diff --git a/tests/integration/tests/nextjs/test-project/package.json b/tests/integration/tests/nextjs/test-project/package.json index b0f618b2f..18388eca0 100644 --- a/tests/integration/tests/nextjs/test-project/package.json +++ b/tests/integration/tests/nextjs/test-project/package.json @@ -14,6 +14,7 @@ "@types/react": "18.0.27", "@types/react-dom": "18.0.10", "@zenstackhq/runtime": "../../../../../../packages/runtime/dist", + "@zenstackhq/server": "../../../../../../packages/server/dist", "next": "13.1.4", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/tests/integration/tests/nextjs/test-project/pages/api/model/[...path].ts b/tests/integration/tests/nextjs/test-project/pages/api/model/[...path].ts index 2cc7bf38d..809fbbf90 100644 --- a/tests/integration/tests/nextjs/test-project/pages/api/model/[...path].ts +++ b/tests/integration/tests/nextjs/test-project/pages/api/model/[...path].ts @@ -1,7 +1,7 @@ -import { requestHandler } from '@zenstackhq/next'; +import { NextRequestHandler } from '@zenstackhq/server/next'; import { withPresets } from '@zenstackhq/runtime'; import { prisma } from '../../../server/db'; -export default requestHandler({ +export default NextRequestHandler({ getPrisma: (req, res) => withPresets(prisma, { user: { id: 'user1' } }), }); From 2f415e4798c7e90df38a4a8edc85d951764ba9c0 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Wed, 28 Jun 2023 22:41:27 +0800 Subject: [PATCH 2/3] update --- .../tests/trpc/test-project/pages/api/model/[...path].ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/tests/trpc/test-project/pages/api/model/[...path].ts b/tests/integration/tests/trpc/test-project/pages/api/model/[...path].ts index 2cc7bf38d..809fbbf90 100644 --- a/tests/integration/tests/trpc/test-project/pages/api/model/[...path].ts +++ b/tests/integration/tests/trpc/test-project/pages/api/model/[...path].ts @@ -1,7 +1,7 @@ -import { requestHandler } from '@zenstackhq/next'; +import { NextRequestHandler } from '@zenstackhq/server/next'; import { withPresets } from '@zenstackhq/runtime'; import { prisma } from '../../../server/db'; -export default requestHandler({ +export default NextRequestHandler({ getPrisma: (req, res) => withPresets(prisma, { user: { id: 'user1' } }), }); From d60db20bcfb526ea03b25208388c646d6f26fb3d Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Fri, 30 Jun 2023 15:29:11 +0800 Subject: [PATCH 3/3] update lock file --- pnpm-lock.yaml | 145 ++++++++----------------------------------------- 1 file changed, 22 insertions(+), 123 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f9648b5b..f2c9a0dc2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,56 +35,6 @@ importers: version: 4.9.4 publishDirectory: dist - packages/next: - dependencies: - '@zenstackhq/runtime': - specifier: workspace:* - version: link:../runtime/dist - next: - specifier: ^12.3.1 || ^13 - version: 12.3.1(@babel/core@7.22.5)(react-dom@18.2.0)(react@17.0.2) - tmp: - specifier: ^0.2.1 - version: 0.2.1 - devDependencies: - '@types/jest': - specifier: ^29.5.0 - version: 29.5.0 - '@types/react': - specifier: ^18.0.26 - version: 18.0.26 - '@types/supertest': - specifier: ^2.0.12 - version: 2.0.12 - '@zenstackhq/testtools': - specifier: workspace:* - version: link:../testtools/dist - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 - jest: - specifier: ^29.5.0 - version: 29.5.0(@types/node@14.18.29)(ts-node@10.9.1) - react: - specifier: ^17.0.2 || ^18 - version: 17.0.2 - rimraf: - specifier: ^3.0.2 - version: 3.0.2 - superjson: - specifier: ^1.11.0 - version: 1.11.0 - supertest: - specifier: ^6.3.3 - version: 6.3.3 - ts-jest: - specifier: ^29.0.5 - version: 29.0.5(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.4) - typescript: - specifier: ^4.9.4 - version: 4.9.4 - publishDirectory: dist - packages/plugins/openapi: dependencies: '@prisma/generator-helper': @@ -945,6 +895,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 + dev: true /@apidevtools/openapi-schemas@2.1.0: resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} @@ -1024,18 +975,21 @@ packages: dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-module-transforms@7.22.5: resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} @@ -1063,12 +1017,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-split-export-declaration@7.22.5: resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} @@ -1109,6 +1065,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.22.5 + dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -1253,6 +1210,7 @@ packages: '@babel/code-frame': 7.22.5 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 + dev: true /@babel/traverse@7.22.5: resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} @@ -2043,6 +2001,7 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 + dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -2065,6 +2024,7 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} @@ -2793,6 +2753,7 @@ packages: resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} dependencies: tslib: 2.6.0 + dev: true /@swc/helpers@0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} @@ -4130,6 +4091,7 @@ packages: electron-to-chromium: 1.4.442 node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) + dev: true /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -4224,6 +4186,7 @@ packages: /caniuse-lite@1.0.30001509: resolution: {integrity: sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==} + dev: true /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -4625,6 +4588,7 @@ packages: engines: {node: '>=12.13'} dependencies: is-what: 4.1.15 + dev: false /copyfiles@2.4.1: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} @@ -4980,6 +4944,7 @@ packages: /electron-to-chromium@1.4.442: resolution: {integrity: sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==} + dev: true /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -7281,7 +7246,6 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: true /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -7505,6 +7469,7 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -7764,51 +7729,6 @@ packages: resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} engines: {node: '>=10'} - /next@12.3.1(@babel/core@7.22.5)(react-dom@18.2.0)(react@17.0.2): - resolution: {integrity: sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==} - engines: {node: '>=12.22.0'} - hasBin: true - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^6.0.0 || ^7.0.0 - react: ^17.0.2 || ^18.0.0-0 - react-dom: ^17.0.2 || ^18.0.0-0 - sass: ^1.3.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - dependencies: - '@next/env': 12.3.1 - '@swc/helpers': 0.4.11 - caniuse-lite: 1.0.30001509 - postcss: 8.4.14 - react: 17.0.2 - react-dom: 18.2.0(react@17.0.2) - styled-jsx: 5.0.7(@babel/core@7.22.5)(react@17.0.2) - use-sync-external-store: 1.2.0(react@17.0.2) - optionalDependencies: - '@next/swc-android-arm-eabi': 12.3.1 - '@next/swc-android-arm64': 12.3.1 - '@next/swc-darwin-arm64': 12.3.1 - '@next/swc-darwin-x64': 12.3.1 - '@next/swc-freebsd-x64': 12.3.1 - '@next/swc-linux-arm-gnueabihf': 12.3.1 - '@next/swc-linux-arm64-gnu': 12.3.1 - '@next/swc-linux-arm64-musl': 12.3.1 - '@next/swc-linux-x64-gnu': 12.3.1 - '@next/swc-linux-x64-musl': 12.3.1 - '@next/swc-win32-arm64-msvc': 12.3.1 - '@next/swc-win32-ia32-msvc': 12.3.1 - '@next/swc-win32-x64-msvc': 12.3.1 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /next@12.3.1(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==} engines: {node: '>=12.22.0'} @@ -8005,6 +7925,7 @@ packages: /node-releases@2.0.12: resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + dev: true /noms@0.0.0: resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} @@ -8040,6 +7961,7 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: true /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -8626,16 +8548,6 @@ packages: scheduler: 0.20.2 dev: true - /react-dom@18.2.0(react@17.0.2): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 17.0.2 - scheduler: 0.23.0 - dev: false - /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -8668,6 +8580,7 @@ packages: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 + dev: true /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} @@ -9398,23 +9311,6 @@ packages: acorn: 8.9.0 dev: true - /styled-jsx@5.0.7(@babel/core@7.22.5)(react@17.0.2): - resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - '@babel/core': 7.22.5 - react: 17.0.2 - dev: false - /styled-jsx@5.0.7(@babel/core@7.22.5)(react@18.2.0): resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} engines: {node: '>= 12.0.0'} @@ -9473,6 +9369,7 @@ packages: engines: {node: '>=10'} dependencies: copy-anything: 3.0.5 + dev: false /supertest@6.3.3: resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} @@ -10224,6 +10121,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 17.0.2 + dev: true /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} @@ -10608,6 +10506,7 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}