From d7f67577c5f6bb9d3a014d3c4b554c6efc71ad6f Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:38:58 +0800 Subject: [PATCH 1/2] fix: use superjson for serialization/deserialization for better compatibility of types --- package.json | 2 +- packages/next-auth/package.json | 2 +- packages/runtime/package.json | 7 +- packages/runtime/src/handler/data/crud.ts | 13 ++- packages/runtime/src/handler/data/handler.ts | 49 ++++++-- .../runtime/src/handler/data/policy-utils.ts | 45 +------- packages/runtime/src/request.ts | 105 +++++++----------- packages/runtime/src/serialization-utils.ts | 21 ++++ packages/schema/package.json | 2 +- pnpm-lock.yaml | 25 +++++ samples/todo/.babelrc | 4 + tests/integration/package.json | 4 +- tests/integration/tests/type-coverage.test.ts | 36 +----- tests/integration/tests/utils.ts | 52 +++++++-- 14 files changed, 202 insertions(+), 165 deletions(-) create mode 100644 packages/runtime/src/serialization-utils.ts create mode 100644 samples/todo/.babelrc diff --git a/package.json b/package.json index ffadd92c4..0ab484684 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "0.4.1", + "version": "0.4.2", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/next-auth/package.json b/packages/next-auth/package.json index f2985eb60..36cf089bd 100644 --- a/packages/next-auth/package.json +++ b/packages/next-auth/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/next-auth", "displayName": "ZenStack next-auth integration library", - "version": "0.4.1", + "version": "0.4.2", "description": "ZenStack adapter for integrating with next-auth", "repository": { "type": "git", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index e049f633f..c621e9d3a 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "0.4.1", + "version": "0.4.2", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", @@ -20,14 +20,15 @@ "linkDirectory": true }, "dependencies": { + "@types/bcryptjs": "^2.4.2", + "bcryptjs": "^2.4.3", "colors": "1.4.0", "cuid": "^2.1.8", "decimal.js": "^10.4.2", "deepcopy": "^2.1.0", + "superjson": "^1.11.0", "swr": "^1.3.0", "tslib": "^2.4.1", - "@types/bcryptjs": "^2.4.2", - "bcryptjs": "^2.4.3", "zod": "^3.19.1", "zod-validation-error": "^0.2.1" }, diff --git a/packages/runtime/src/handler/data/crud.ts b/packages/runtime/src/handler/data/crud.ts index 4d6a6a7d7..a2a999785 100644 --- a/packages/runtime/src/handler/data/crud.ts +++ b/packages/runtime/src/handler/data/crud.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import cuid from 'cuid'; +import superjson from 'superjson'; import { TRANSACTION_FIELD_NAME } from '../../constants'; import { DbClientContract, @@ -122,7 +123,9 @@ export class CRUD { // conduct the create this.service.verbose( - `Conducting create: ${model}:\n${JSON.stringify(args)}` + `Conducting create: ${model}:\n${superjson.stringify( + args + )}` ); const createResult = (await tx[model].create(args)) as { id: string; @@ -245,7 +248,9 @@ export class CRUD { // conduct the update this.service.verbose( - `Conducting update: ${model}:\n${JSON.stringify(args)}` + `Conducting update: ${model}:\n${superjson.stringify( + args + )}` ); await tx[model].update(args); @@ -356,7 +361,9 @@ export class CRUD { // conduct the deletion this.service.verbose( - `Conducting delete ${model}:\n${JSON.stringify(args)}` + `Conducting delete ${model}:\n${superjson.stringify( + args + )}` ); await tx[model].delete(args); diff --git a/packages/runtime/src/handler/data/handler.ts b/packages/runtime/src/handler/data/handler.ts index baab57bd5..7c8c8caf9 100644 --- a/packages/runtime/src/handler/data/handler.ts +++ b/packages/runtime/src/handler/data/handler.ts @@ -1,14 +1,18 @@ import { NextApiRequest, NextApiResponse } from 'next'; +import superjson from 'superjson'; import { RequestHandlerOptions } from '../../request-handler'; +import { registerSerializers } from '../../serialization-utils'; import { DbClientContract, QueryContext, ServerErrorCode, Service, } from '../../types'; -import { RequestHandler, CRUDError } from '../types'; +import { CRUDError, RequestHandler } from '../types'; import { CRUD } from './crud'; +registerSerializers(); + /** * Request handler for /data endpoint which processes data CRUD requests. */ @@ -36,7 +40,9 @@ export default class DataHandler this.service.verbose(`Data request: ${method} ${path}`); if (req.body) { - this.service.verbose(`Request body: ${JSON.stringify(req.body)}`); + this.service.verbose( + `Request body: ${superjson.stringify(req.body)}` + ); } try { @@ -100,6 +106,18 @@ export default class DataHandler } } + private marshal(value: unknown) { + return JSON.parse(superjson.stringify(value)); + } + + private unmarshal(value: unknown) { + if (typeof value === 'string') { + return superjson.parse(value); + } else { + return superjson.parse(JSON.stringify(value)); + } + } + private async get( req: NextApiRequest, res: NextApiResponse, @@ -108,7 +126,7 @@ export default class DataHandler context: QueryContext ) { // parse additional query args from "q" parameter - const args = req.query.q ? JSON.parse(req.query.q as string) : {}; + const args = req.query.q ? this.unmarshal(req.query.q as string) : {}; if (id) { // GET /:id, make sure "id" is injected @@ -116,11 +134,11 @@ export default class DataHandler if (!result) { throw new CRUDError(ServerErrorCode.ENTITY_NOT_FOUND); } - res.status(200).send(result); + res.status(200).send(this.marshal(result)); } else { // GET /, get list const result = await this.crud.find(model, args, context); - res.status(200).send(result); + res.status(200).send(this.marshal(result)); } } @@ -130,8 +148,12 @@ export default class DataHandler model: string, context: QueryContext ) { - const result = await this.crud.create(model, req.body, context); - res.status(201).send(result); + const result = await this.crud.create( + model, + this.unmarshal(req.body), + context + ); + res.status(201).send(this.marshal(result)); } private async put( @@ -148,8 +170,13 @@ export default class DataHandler ); } - const result = await this.crud.update(model, id, req.body, context); - res.status(200).send(result); + const result = await this.crud.update( + model, + id, + this.unmarshal(req.body), + context + ); + res.status(200).send(this.marshal(result)); } private async del( @@ -166,8 +193,8 @@ export default class DataHandler ); } - const args = req.query.q ? JSON.parse(req.query.q as string) : {}; + const args = req.query.q ? this.unmarshal(req.query.q as string) : {}; const result = await this.crud.del(model, id, args, context); - res.status(200).send(result); + res.status(200).send(this.marshal(result)); } } diff --git a/packages/runtime/src/handler/data/policy-utils.ts b/packages/runtime/src/handler/data/policy-utils.ts index 6cd6e120e..a982aeb2c 100644 --- a/packages/runtime/src/handler/data/policy-utils.ts +++ b/packages/runtime/src/handler/data/policy-utils.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { hashSync } from 'bcryptjs'; import deepcopy from 'deepcopy'; +import superjson from 'superjson'; import { DEFAULT_PASSWORD_SALT_LENGTH, GUARD_FIELD_NAME, @@ -15,7 +16,7 @@ import { ServerErrorCode, Service, } from '../../types'; -import { PrismaWriteActionType, CRUDError } from '../types'; +import { CRUDError, PrismaWriteActionType } from '../types'; import { NestedWriteVisitor } from './nested-write-vistor'; //#region General helpers @@ -103,7 +104,7 @@ export async function readWithCheck( await injectNestedReadConditions(model, args, service, context); service.verbose( - `Reading with validation for ${model}: ${JSON.stringify(args)}` + `Reading with validation for ${model}: ${superjson.stringify(args)}` ); const result = await db[model].findMany(args); @@ -187,40 +188,6 @@ async function postProcessForRead( if (await shouldOmit(service, model, field)) { delete entityData[field]; } - - const fieldValue = entityData[field]; - - if (typeof fieldValue === 'bigint') { - // serialize BigInt with typing info - entityData[field] = { - type: 'BigInt', - data: fieldValue.toString(), - }; - } - - if (fieldValue instanceof Date) { - // serialize Date with typing info - entityData[field] = { - type: 'Date', - data: fieldValue.toISOString(), - }; - } - - if (typeof fieldValue === 'object') { - const fieldInfo = await service.resolveField(model, field); - if (fieldInfo?.type === 'Decimal') { - // serialize Decimal with typing info - entityData[field] = { - type: 'Decimal', - data: fieldValue.toString(), - }; - } else if (fieldInfo?.type === 'Bytes') { - entityData[field] = { - type: 'Bytes', - data: Array.from(fieldValue as Buffer), - }; - } - } } const injectTarget = args.select ?? args.include; @@ -462,15 +429,15 @@ async function checkPolicyForSelectionPath( const query = buildChainedSelectQuery(id, selectionPath); service.verbose( - `Query for selection path: model ${model}, path ${JSON.stringify( + `Query for selection path: model ${model}, path ${superjson.stringify( selectionPath - )}, query ${JSON.stringify(query)}` + )}, query ${superjson.stringify(query)}` ); const r = await db[model].findUnique(query); // collect ids at the end of the path const ids: string[] = collectTerminalEntityIds(selectionPath, r); - service.verbose(`Collected leaf ids: ${JSON.stringify(ids)}`); + service.verbose(`Collected leaf ids: ${superjson.stringify(ids)}`); if (ids.length === 0) { return; diff --git a/packages/runtime/src/request.ts b/packages/runtime/src/request.ts index b5984beb4..ec9d9c99d 100644 --- a/packages/runtime/src/request.ts +++ b/packages/runtime/src/request.ts @@ -1,71 +1,15 @@ -import Decimal from 'decimal.js'; +import superjson from 'superjson'; import useSWR, { useSWRConfig } from 'swr'; import type { MutatorCallback, MutatorOptions, SWRResponse, } from 'swr/dist/types'; +import { registerSerializers } from './serialization-utils'; import { RequestOptions } from './types'; -type BufferShape = { type: 'Buffer'; data: number[] }; -function isBuffer(value: unknown): value is BufferShape { - return ( - !!value && - (value as BufferShape).type === 'Buffer' && - Array.isArray((value as BufferShape).data) - ); -} - -type BigIntShape = { type: 'BigInt'; data: string }; -function isBigInt(value: unknown): value is BigIntShape { - return ( - !!value && - (value as BigIntShape).type === 'BigInt' && - typeof (value as BigIntShape).data === 'string' - ); -} - -type DateShape = { type: 'Date'; data: string }; -function isDate(value: unknown): value is BigIntShape { - return ( - !!value && - (value as DateShape).type === 'Date' && - typeof (value as DateShape).data === 'string' - ); -} - -type DecmalShape = { type: 'Decimal'; data: string }; -function isDecimal(value: unknown): value is DecmalShape { - return ( - !!value && - (value as DecmalShape).type === 'Decimal' && - typeof (value as DateShape).data === 'string' - ); -} - -const dataReviver = (key: string, value: unknown) => { - // Buffer - if (isBuffer(value)) { - return Buffer.from(value.data); - } - - // BigInt - if (isBigInt(value)) { - return BigInt(value.data); - } - - // Date - if (isDate(value)) { - return new Date(value.data); - } - - // Decimal - if (isDecimal(value)) { - return new Decimal(value.data); - } - - return value; -}; +// register superjson custom serializers +registerSerializers(); const fetcher = async (url: string, options?: RequestInit) => { const res = await fetch(url, options); @@ -79,24 +23,32 @@ const fetcher = async (url: string, options?: RequestInit) => { } const textResult = await res.text(); - console.log; try { - return JSON.parse(textResult, dataReviver); + return unmarshal(textResult); } catch (err) { console.error(`Unable to deserialize data:`, textResult); throw err; } }; +function marshal(value: unknown) { + return superjson.stringify(value); +} + +function unmarshal(value: string) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return superjson.parse(value); +} + function makeUrl(url: string, args: unknown) { - return args ? url + `?q=${encodeURIComponent(JSON.stringify(args))}` : url; + return args ? url + `?q=${encodeURIComponent(marshal(args))}` : url; } /** * Makes a GET request with SWR. * * @param url The request URL. - * @param args The request args object, which will be JSON-stringified and appended as "?q=" parameter + * @param args The request args object, which will be superjson-stringified and appended as "?q=" parameter * @returns SWR response */ // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -111,6 +63,13 @@ export function get( }); } +/** + * Makes a POST request. + * + * @param url The request URL. + * @param data The request data. + * @param mutate Mutator for invalidating cache. + */ export async function post( url: string, data: Data, @@ -121,12 +80,19 @@ export async function post( headers: { 'content-type': 'application/json', }, - body: JSON.stringify(data), + body: marshal(data), }); mutate(url, true); return r; } +/** + * Makes a PUT request. + * + * @param url The request URL. + * @param data The request data. + * @param mutate Mutator for invalidating cache. + */ export async function put( url: string, data: Data, @@ -137,12 +103,19 @@ export async function put( headers: { 'content-type': 'application/json', }, - body: JSON.stringify(data), + body: marshal(data), }); mutate(url, true); return r; } +/** + * Makes a DELETE request. + * + * @param url The request URL. + * @param args The request args object, which will be superjson-stringified and appended as "?q=" parameter + * @param mutate Mutator for invalidating cache. + */ export async function del( url: string, args: unknown, diff --git a/packages/runtime/src/serialization-utils.ts b/packages/runtime/src/serialization-utils.ts new file mode 100644 index 000000000..15442900b --- /dev/null +++ b/packages/runtime/src/serialization-utils.ts @@ -0,0 +1,21 @@ +import Decimal from 'decimal.js'; +import superjson from 'superjson'; + +export function registerSerializers() { + superjson.registerCustom( + { + isApplicable: (v): v is Buffer => Buffer.isBuffer(v), + serialize: (v) => JSON.stringify(v.toJSON().data), + deserialize: (v) => Buffer.from(JSON.parse(v)), + }, + 'Buffer' + ); + superjson.registerCustom( + { + isApplicable: (v): v is Decimal => Decimal.isDecimal(v), + serialize: (v) => v.toJSON(), + deserialize: (v) => new Decimal(v), + }, + 'decimal.js' + ); +} diff --git a/packages/schema/package.json b/packages/schema/package.json index 472ce3af4..109cc9e72 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": "0.4.1", + "version": "0.4.2", "author": { "name": "ZenStack Team" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 492c056d1..df222095e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,6 +42,7 @@ importers: react: ^17.0.2 || ^18 react-dom: ^17.0.2 || ^18 rimraf: ^3.0.2 + superjson: ^1.11.0 swr: ^1.3.0 tslib: ^2.4.1 typescript: ^4.9.3 @@ -57,6 +58,7 @@ importers: next: 12.3.1_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 + superjson: 1.11.0 swr: 1.3.0_react@18.2.0 tslib: 2.4.1 zod: 3.19.1 @@ -173,10 +175,12 @@ importers: '@types/supertest': ^2.0.12 '@types/tmp': ^0.2.3 bcryptjs: ^2.4.3 + decimal.js: ^10.4.2 jest: ^29.0.3 jest-fetch-mock: ^3.0.3 next: ^12.3.1 sleep-promise: ^9.1.0 + superjson: ^1.11.0 supertest: ^6.3.0 tmp: ^0.2.1 ts-jest: ^29.0.1 @@ -185,7 +189,9 @@ importers: dependencies: '@types/node': 14.18.29 bcryptjs: 2.4.3 + decimal.js: 10.4.2 sleep-promise: 9.1.0 + superjson: 1.11.0 devDependencies: '@types/bcryptjs': 2.4.2 '@types/jest': 29.0.3 @@ -3045,6 +3051,13 @@ packages: resolution: {integrity: sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==} dev: true + /copy-anything/3.0.3: + resolution: {integrity: sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.8 + dev: false + /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true @@ -4515,6 +4528,11 @@ packages: call-bind: 1.0.2 dev: true + /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==} engines: {node: '>=0.10.0'} @@ -7163,6 +7181,13 @@ packages: - supports-color dev: true + /superjson/1.11.0: + resolution: {integrity: sha512-6PfAg1FKhqkwWvPb2uXhH4MkMttdc17eJ91+Aoz4s1XUEDZFmLfFx/xVA3wgkPxAGy5dpozgGdK6V/n20Wj9yg==} + engines: {node: '>=10'} + dependencies: + copy-anything: 3.0.3 + dev: false + /supertest/6.3.0: resolution: {integrity: sha512-QgWju1cNoacP81Rv88NKkQ4oXTzGg0eNZtOoxp1ROpbS4OHY/eK5b8meShuFtdni161o5X0VQvgo7ErVyKK+Ow==} engines: {node: '>=6.4.0'} diff --git a/samples/todo/.babelrc b/samples/todo/.babelrc new file mode 100644 index 000000000..262425043 --- /dev/null +++ b/samples/todo/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["next/babel"], + "plugins": ["superjson-next"] +} diff --git a/tests/integration/package.json b/tests/integration/package.json index 6ee5aab3b..b1c4a83de 100644 --- a/tests/integration/package.json +++ b/tests/integration/package.json @@ -26,6 +26,8 @@ "dependencies": { "@types/node": "^14.18.29", "bcryptjs": "^2.4.3", - "sleep-promise": "^9.1.0" + "decimal.js": "^10.4.2", + "sleep-promise": "^9.1.0", + "superjson": "^1.11.0" } } diff --git a/tests/integration/tests/type-coverage.test.ts b/tests/integration/tests/type-coverage.test.ts index c26783776..df879ba96 100644 --- a/tests/integration/tests/type-coverage.test.ts +++ b/tests/integration/tests/type-coverage.test.ts @@ -1,5 +1,6 @@ import path from 'path'; import { makeClient, run, setup } from './utils'; +import { Decimal } from 'decimal.js'; describe('Type Coverage Tests', () => { let origDir: string; @@ -18,13 +19,14 @@ describe('Type Coverage Tests', () => { }); it('all types', async () => { + const date = new Date(); const data = { string: 'string', int: 100, - bigInt: 9007199254740991, - date: new Date(), + bigInt: BigInt(9007199254740991), + date, float: 1.23, - decimal: 1.2345, + decimal: new Decimal(1.2345), boolean: true, bytes: Buffer.from('hello'), }; @@ -35,33 +37,7 @@ describe('Type Coverage Tests', () => { }) .expect(201) .expect((resp) => { - expect(resp.body.bigInt).toEqual( - expect.objectContaining({ - type: 'BigInt', - data: data.bigInt.toString(), - }) - ); - - expect(resp.body.date).toEqual( - expect.objectContaining({ - type: 'Date', - data: data.date.toISOString(), - }) - ); - - expect(resp.body.decimal).toEqual( - expect.objectContaining({ - type: 'Decimal', - data: data.decimal.toString(), - }) - ); - - expect(resp.body.bytes).toEqual( - expect.objectContaining({ - type: 'Bytes', - data: Array.from(data.bytes), - }) - ); + expect(resp.body).toEqual(expect.objectContaining(data)); }); }); }); diff --git a/tests/integration/tests/utils.ts b/tests/integration/tests/utils.ts index 4dcb399d2..685d5d747 100644 --- a/tests/integration/tests/utils.ts +++ b/tests/integration/tests/utils.ts @@ -1,4 +1,3 @@ -import * as tmp from 'tmp'; import { execSync } from 'child_process'; import * as path from 'path'; import * as fs from 'fs'; @@ -7,6 +6,8 @@ import { apiResolver } from 'next/dist/server/api-utils/node'; import request from 'supertest'; import { NextApiHandler } from 'next/types'; import supertest from 'supertest'; +import superjson from 'superjson'; +import { registerSerializers } from '../../../packages/runtime/src/serialization-utils'; export function run(cmd: string) { execSync(cmd, { @@ -17,6 +18,8 @@ export function run(cmd: string) { } export async function setup(schemaFile: string) { + registerSerializers(); + const origDir = path.resolve('.'); const workDir = path.resolve('tests/test-run'); @@ -86,7 +89,7 @@ export function makeClient(apiPath: string, userId?: string, queryArgs?: any) { const query = { path: pathParts, - ...(queryArgs ? { q: JSON.stringify(queryArgs) } : {}), + ...(queryArgs ? { q: superjson.stringify(queryArgs) } : {}), }; const testClient = (handler: NextApiHandler) => request( @@ -108,16 +111,30 @@ export function makeClient(apiPath: string, userId?: string, queryArgs?: any) { const handler = require(path.resolve('handler.js')); const client = testClient(handler); + // proxy test and superjson marshal post data + const proxyTest = (test: supertest.Test) => { + // return test; + return new Proxy(test, { + get(target: supertest.Test, prop: string | symbol, receiver: any) { + if (prop === 'send') { + return (data: any) => { + return target.send( + JSON.parse(superjson.stringify(data)) + ); + }; + } else { + return Reflect.get(target, prop, receiver); + } + }, + }); + }; + const proxied = new Proxy(client, { get( target: supertest.SuperTest, prop: string | symbol, receiver: any ) { - if (userId === undefined) { - return Reflect.get(target, prop, receiver); - } - switch (prop) { case 'get': case 'post': @@ -125,11 +142,28 @@ export function makeClient(apiPath: string, userId?: string, queryArgs?: any) { case 'del': case 'delete': return (url: string) => { + const test = target[prop](url) as supertest.Test; + // use userId cookie to simulate a logged in user - return target[prop](url).set('Cookie', [ - `userId=${userId}`, - ]); + if (userId) { + test.set('Cookie', [`userId=${userId}`]); + } + + test.expect((resp) => { + if ( + (resp.status === 200 || resp.status === 201) && + resp.body + ) { + // unmarshal response + resp.body = superjson.parse( + JSON.stringify(resp.body) + ); + } + }); + + return proxyTest(test); }; + default: return Reflect.get(target, prop, receiver); } From 77bc93f5a62bdebab9a03b20ed34b4709122d2f8 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:43:01 +0800 Subject: [PATCH 2/2] bump sample version --- samples/todo/.babelrc | 2 + samples/todo/package-lock.json | 783 +++++++++++++++++++++++++++++++-- samples/todo/package.json | 9 +- 3 files changed, 750 insertions(+), 44 deletions(-) diff --git a/samples/todo/.babelrc b/samples/todo/.babelrc index 262425043..cfeaef173 100644 --- a/samples/todo/.babelrc +++ b/samples/todo/.babelrc @@ -1,4 +1,6 @@ { "presets": ["next/babel"], + // "superjson-next" plugin uses superjson for serialization between getServerSideProps and client, + // so that types like Date and BigInt are properly handled "plugins": ["superjson-next"] } diff --git a/samples/todo/package-lock.json b/samples/todo/package-lock.json index 9667e6717..c3460dcbf 100644 --- a/samples/todo/package-lock.json +++ b/samples/todo/package-lock.json @@ -1,17 +1,18 @@ { "name": "todo", - "version": "0.4.1", + "version": "0.4.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "todo", - "version": "0.4.1", + "version": "0.4.2", "dependencies": { "@heroicons/react": "^2.0.12", "@prisma/client": "^4.7.0", - "@zenstackhq/next-auth": "^0.4.1", - "@zenstackhq/runtime": "^0.4.1", + "@zenstackhq/next-auth": "^0.4.2", + "@zenstackhq/runtime": "^0.4.2", + "babel-plugin-superjson-next": "^0.4.5", "bcryptjs": "^2.4.3", "daisyui": "^2.31.0", "moment": "^2.29.4", @@ -34,7 +35,7 @@ "postcss": "^8.4.16", "tailwindcss": "^3.1.8", "typescript": "^4.6.2", - "zenstack": "^0.4.1" + "zenstack": "^0.4.2" } }, "../../packages/runtime": { @@ -76,11 +77,29 @@ "@babel/highlight": "^7.10.4" } }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -194,6 +213,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@chevrotain/types": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-9.1.0.tgz", @@ -760,12 +792,12 @@ } }, "node_modules/@zenstackhq/next-auth": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@zenstackhq/next-auth/-/next-auth-0.4.1.tgz", - "integrity": "sha512-BbBydqrwgMfVnAaK16i6S6sxi5ovu2l+2JJvG8gCeap02+yQdKE7+iUvYvDRZCsU3dpILyPaBW7j1FuKTnPzdA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@zenstackhq/next-auth/-/next-auth-0.4.2.tgz", + "integrity": "sha512-YNcuYltjgI/c1tWv6ZY7ispm3haIiN6nWce/+xf0LRlV0ILCGkXb1ZfKDmxbXzw/427+1ex9kfR0BUlsh9PT5g==", "dependencies": { "@next-auth/prisma-adapter": "^1.0.5", - "@zenstackhq/runtime": "0.4.1", + "@zenstackhq/runtime": "0.4.2", "bcryptjs": "^2.4.3" }, "peerDependencies": { @@ -773,9 +805,9 @@ } }, "node_modules/@zenstackhq/runtime": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.4.1.tgz", - "integrity": "sha512-jOOlHin15vet3cP2lEedRsnelXdcAhZ/WmfuwT1UpgPisHzkVZMJTPmRacxWaL5uMWhJZ0cDUVaKcEQpFwGLdA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.4.2.tgz", + "integrity": "sha512-xxqLQJ2pOKmmkSVIo/CTJn2CoraHs8eHrsaHtpcl8co+fxGQIFrFsTVUi6R5/4GSzWm8JgZGM5K8c6ufdLzmRg==", "dependencies": { "@types/bcryptjs": "^2.4.2", "bcryptjs": "^2.4.3", @@ -783,6 +815,7 @@ "cuid": "^2.1.8", "decimal.js": "^10.4.2", "deepcopy": "^2.1.0", + "superjson": "^1.11.0", "swr": "^1.3.0", "tslib": "^2.4.1", "zod": "^3.19.1", @@ -1067,12 +1100,49 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, + "node_modules/babel-plugin-superjson-next": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-superjson-next/-/babel-plugin-superjson-next-0.4.5.tgz", + "integrity": "sha512-k7S99Qpsbi3OSdlCMXEiklzxepM6QbYEIUsrjgSkpx+ksT0iNfdY2r1kCzBK2UjG8fLN6NZEKpDA8XpG2pbDSA==", + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/types": "^7.13.17", + "hoist-non-react-statics": "^3.3.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "next": ">=9.0.0", + "superjson": "1.x" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -1086,6 +1156,17 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1134,6 +1215,30 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1273,6 +1378,42 @@ "fsevents": "~2.3.2" } }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -1366,6 +1507,20 @@ "node": ">= 0.6" } }, + "node_modules/copy-anything": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.3.tgz", + "integrity": "sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/core-js-pure": { "version": "3.25.5", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", @@ -1461,9 +1616,9 @@ } }, "node_modules/decimal.js": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", - "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "node_modules/deep-is": { "version": "0.1.4", @@ -1479,6 +1634,18 @@ "type-detect": "^4.0.8" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -2479,6 +2646,14 @@ "tslib": "^2.0.3" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -2492,6 +2667,26 @@ "node": ">= 6" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -2666,6 +2861,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -2759,6 +2966,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -2771,6 +2990,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-what": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.8.tgz", + "integrity": "sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2903,6 +3133,34 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -2954,6 +3212,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3318,6 +3585,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openid-client": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.2.1.tgz", @@ -3349,6 +3631,68 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "dependencies": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -3738,8 +4082,7 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-toastify": { "version": "9.0.8", @@ -3761,6 +4104,20 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3846,6 +4203,22 @@ "node": ">=4" } }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3892,6 +4265,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -3975,6 +4368,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -4039,6 +4438,15 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4158,6 +4566,17 @@ } } }, + "node_modules/superjson": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.11.0.tgz", + "integrity": "sha512-6PfAg1FKhqkwWvPb2uXhH4MkMttdc17eJ91+Aoz4s1XUEDZFmLfFx/xVA3wgkPxAGy5dpozgGdK6V/n20Wj9yg==", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4291,6 +4710,14 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4552,6 +4979,15 @@ "integrity": "sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==", "dev": true }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/when": { "version": "3.7.8", "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", @@ -4626,13 +5062,13 @@ } }, "node_modules/zenstack": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.4.1.tgz", - "integrity": "sha512-Z55ViVb8JWCpo0fVEN/PnEuTFX/mgnw6WMPq/ddWU30lMfcnZhS37msTC/ZzQxLssKvwB2cMA86cmbK8to+JrA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.4.2.tgz", + "integrity": "sha512-Mv7z76hUGZuVFWhUsQv22Mvsj7TjK0TzvrqZmFIhG6SyhHDrOqOW9Xh5yf0SlWXPniVem/eCaRnYNsZVKoYP0g==", "dev": true, "hasInstallScript": true, "dependencies": { - "@zenstackhq/runtime": "0.4.1", + "@zenstackhq/runtime": "0.4.2", "async-exit-hook": "^2.0.1", "change-case": "^4.1.2", "chevrotain": "^9.1.0", @@ -4642,6 +5078,7 @@ "langium": "^0.5.0", "mixpanel": "^0.17.0", "node-machine-id": "^1.1.12", + "ora": "^6.1.2", "pluralize": "^8.0.0", "prisma": "~4.7.0", "promisify": "^0.0.3", @@ -4703,11 +5140,23 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/highlight": { "version": "7.18.6", @@ -4796,6 +5245,16 @@ "regenerator-runtime": "^0.13.4" } }, + "@babel/types": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, "@chevrotain/types": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-9.1.0.tgz", @@ -5157,19 +5616,19 @@ } }, "@zenstackhq/next-auth": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@zenstackhq/next-auth/-/next-auth-0.4.1.tgz", - "integrity": "sha512-BbBydqrwgMfVnAaK16i6S6sxi5ovu2l+2JJvG8gCeap02+yQdKE7+iUvYvDRZCsU3dpILyPaBW7j1FuKTnPzdA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@zenstackhq/next-auth/-/next-auth-0.4.2.tgz", + "integrity": "sha512-YNcuYltjgI/c1tWv6ZY7ispm3haIiN6nWce/+xf0LRlV0ILCGkXb1ZfKDmxbXzw/427+1ex9kfR0BUlsh9PT5g==", "requires": { "@next-auth/prisma-adapter": "^1.0.5", - "@zenstackhq/runtime": "0.4.1", + "@zenstackhq/runtime": "0.4.2", "bcryptjs": "^2.4.3" } }, "@zenstackhq/runtime": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.4.1.tgz", - "integrity": "sha512-jOOlHin15vet3cP2lEedRsnelXdcAhZ/WmfuwT1UpgPisHzkVZMJTPmRacxWaL5uMWhJZ0cDUVaKcEQpFwGLdA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@zenstackhq/runtime/-/runtime-0.4.2.tgz", + "integrity": "sha512-xxqLQJ2pOKmmkSVIo/CTJn2CoraHs8eHrsaHtpcl8co+fxGQIFrFsTVUi6R5/4GSzWm8JgZGM5K8c6ufdLzmRg==", "requires": { "@types/bcryptjs": "^2.4.2", "bcryptjs": "^2.4.3", @@ -5177,6 +5636,7 @@ "cuid": "^2.1.8", "decimal.js": "^10.4.2", "deepcopy": "^2.1.0", + "superjson": "^1.11.0", "swr": "^1.3.0", "tslib": "^2.4.1", "zod": "^3.19.1", @@ -5371,12 +5831,28 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, + "babel-plugin-superjson-next": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-superjson-next/-/babel-plugin-superjson-next-0.4.5.tgz", + "integrity": "sha512-k7S99Qpsbi3OSdlCMXEiklzxepM6QbYEIUsrjgSkpx+ksT0iNfdY2r1kCzBK2UjG8fLN6NZEKpDA8XpG2pbDSA==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/types": "^7.13.17", + "hoist-non-react-statics": "^3.3.2" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -5387,6 +5863,17 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5416,6 +5903,16 @@ "update-browserslist-db": "^1.0.9" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -5519,6 +6016,27 @@ "readdirp": "~3.6.0" } }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, "clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -5594,6 +6112,14 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, + "copy-anything": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.3.tgz", + "integrity": "sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==", + "requires": { + "is-what": "^4.1.8" + } + }, "core-js-pure": { "version": "3.25.5", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", @@ -5663,9 +6189,9 @@ } }, "decimal.js": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", - "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "deep-is": { "version": "0.1.4", @@ -5681,6 +6207,15 @@ "type-detect": "^4.0.8" } }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -6441,6 +6976,14 @@ "tslib": "^2.0.3" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -6451,6 +6994,12 @@ "debug": "4" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -6574,6 +7123,12 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -6631,6 +7186,12 @@ "has-symbols": "^1.0.2" } }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -6640,6 +7201,11 @@ "call-bind": "^1.0.2" } }, + "is-what": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.8.tgz", + "integrity": "sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6751,6 +7317,24 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "dependencies": { + "chalk": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", + "dev": true + } + } + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -6790,6 +7374,12 @@ "picomatch": "^2.3.1" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7028,6 +7618,15 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "openid-client": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.2.1.tgz", @@ -7053,6 +7652,46 @@ "word-wrap": "^1.2.3" } }, + "ora": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", + "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", + "dev": true, + "requires": { + "bl": "^5.0.0", + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "chalk": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", + "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -7303,8 +7942,7 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-toastify": { "version": "9.0.8", @@ -7322,6 +7960,17 @@ "pify": "^2.3.0" } }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7380,6 +8029,16 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -7402,6 +8061,12 @@ "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -7467,6 +8132,12 @@ "object-inspect": "^1.9.0" } }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -7519,6 +8190,15 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7603,6 +8283,14 @@ "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", "requires": {} }, + "superjson": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.11.0.tgz", + "integrity": "sha512-6PfAg1FKhqkwWvPb2uXhH4MkMttdc17eJ91+Aoz4s1XUEDZFmLfFx/xVA3wgkPxAGy5dpozgGdK6V/n20Wj9yg==", + "requires": { + "copy-anything": "^3.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7706,6 +8394,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7908,6 +8601,15 @@ "integrity": "sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==", "dev": true }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "when": { "version": "3.7.8", "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", @@ -7964,12 +8666,12 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "zenstack": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.4.1.tgz", - "integrity": "sha512-Z55ViVb8JWCpo0fVEN/PnEuTFX/mgnw6WMPq/ddWU30lMfcnZhS37msTC/ZzQxLssKvwB2cMA86cmbK8to+JrA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/zenstack/-/zenstack-0.4.2.tgz", + "integrity": "sha512-Mv7z76hUGZuVFWhUsQv22Mvsj7TjK0TzvrqZmFIhG6SyhHDrOqOW9Xh5yf0SlWXPniVem/eCaRnYNsZVKoYP0g==", "dev": true, "requires": { - "@zenstackhq/runtime": "0.4.1", + "@zenstackhq/runtime": "0.4.2", "async-exit-hook": "^2.0.1", "change-case": "^4.1.2", "chevrotain": "^9.1.0", @@ -7979,6 +8681,7 @@ "langium": "^0.5.0", "mixpanel": "^0.17.0", "node-machine-id": "^1.1.12", + "ora": "^6.1.2", "pluralize": "^8.0.0", "prisma": "~4.7.0", "promisify": "^0.0.3", diff --git a/samples/todo/package.json b/samples/todo/package.json index 0f84cd9ae..32830be5b 100644 --- a/samples/todo/package.json +++ b/samples/todo/package.json @@ -1,6 +1,6 @@ { "name": "todo", - "version": "0.4.1", + "version": "0.4.2", "private": true, "scripts": { "dev": "next dev", @@ -21,8 +21,9 @@ "dependencies": { "@heroicons/react": "^2.0.12", "@prisma/client": "^4.7.0", - "@zenstackhq/next-auth": "^0.4.1", - "@zenstackhq/runtime": "^0.4.1", + "@zenstackhq/next-auth": "^0.4.2", + "@zenstackhq/runtime": "^0.4.2", + "babel-plugin-superjson-next": "^0.4.5", "bcryptjs": "^2.4.3", "daisyui": "^2.31.0", "moment": "^2.29.4", @@ -45,6 +46,6 @@ "postcss": "^8.4.16", "tailwindcss": "^3.1.8", "typescript": "^4.6.2", - "zenstack": "^0.4.1" + "zenstack": "^0.4.2" } }