diff --git a/package.json b/package.json index bb3130dac..8bf006dcc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/language/package.json b/packages/language/package.json index a42368789..c03d697c1 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "displayName": "ZenStack modeling language compiler", "description": "ZenStack modeling language compiler", "homepage": "https://zenstack.dev", diff --git a/packages/next/package.json b/packages/next/package.json index b09b102df..7aa6ce2a9 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/next", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "displayName": "ZenStack Next.js integration", "description": "ZenStack Next.js integration", "homepage": "https://zenstack.dev", diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json index 2582d54b5..74df12141 100644 --- a/packages/plugins/openapi/package.json +++ b/packages/plugins/openapi/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/openapi", "displayName": "ZenStack Plugin and Runtime for OpenAPI", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "ZenStack plugin and runtime supporting OpenAPI", "main": "index.js", "repository": { diff --git a/packages/plugins/react/package.json b/packages/plugins/react/package.json index 590701090..70ab3752d 100644 --- a/packages/plugins/react/package.json +++ b/packages/plugins/react/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/react", "displayName": "ZenStack plugin and runtime for ReactJS", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "ZenStack plugin and runtime for ReactJS", "main": "index.js", "repository": { diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index b05ad757b..2353f9d2e 100644 --- a/packages/plugins/trpc/package.json +++ b/packages/plugins/trpc/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/trpc", "displayName": "ZenStack plugin for tRPC", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 1ea863f6a..f6db14645 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/runtime/src/version.ts b/packages/runtime/src/version.ts index 9bf48c342..854e5eab6 100644 --- a/packages/runtime/src/version.ts +++ b/packages/runtime/src/version.ts @@ -4,6 +4,7 @@ export function getVersion() { return require('./package.json').version; } catch { try { + // dev environment return require('../package.json').version; } catch { return 'unknown'; diff --git a/packages/schema/package.json b/packages/schema/package.json index 08dbef509..7042054b7 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack Language Tools", "description": "A toolkit for building secure CRUD apps with Next.js + Typescript", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "author": { "name": "ZenStack Team" }, diff --git a/packages/schema/src/cli/cli-util.ts b/packages/schema/src/cli/cli-util.ts index fe8603357..73ccaeb38 100644 --- a/packages/schema/src/cli/cli-util.ts +++ b/packages/schema/src/cli/cli-util.ts @@ -157,7 +157,7 @@ export async function getPluginDocuments(services: ZModelServices, fileName: str ); } } catch { - console.warn(`Unable to load plugin from ${provider}, skipping`); + // noop } } } diff --git a/packages/schema/src/cli/plugin-runner.ts b/packages/schema/src/cli/plugin-runner.ts index 3cc375216..909dce993 100644 --- a/packages/schema/src/cli/plugin-runner.ts +++ b/packages/schema/src/cli/plugin-runner.ts @@ -9,6 +9,7 @@ import ora from 'ora'; import path from 'path'; import telemetry from '../telemetry'; import type { Context } from '../types'; +import { getVersion } from '../utils/version-utils'; import { config } from './config'; /** @@ -19,7 +20,7 @@ export class PluginRunner { * Runs a series of nested generators */ async run(context: Context): Promise { - const version = require('../package.json').version; + const version = getVersion(); console.log(colors.bold(`⌛️ ZenStack CLI v${version}, running plugins`)); const plugins: Array<{ diff --git a/packages/schema/src/res/starter.zmodel b/packages/schema/src/res/starter.zmodel index 75207fc1e..08c952610 100644 --- a/packages/schema/src/res/starter.zmodel +++ b/packages/schema/src/res/starter.zmodel @@ -7,7 +7,7 @@ */ datasource db { provider = 'sqlite' - url = 'file:./todo.db' + url = 'file:./dev.db' } generator client { diff --git a/packages/schema/src/utils/version-utils.ts b/packages/schema/src/utils/version-utils.ts index a0b783c3b..5ebc41bee 100644 --- a/packages/schema/src/utils/version-utils.ts +++ b/packages/schema/src/utils/version-utils.ts @@ -3,6 +3,7 @@ export function getVersion() { try { return require('../package.json').version; } catch { + // dev environment return require('../../package.json').version; } } diff --git a/packages/schema/tests/cli/command.test.ts b/packages/schema/tests/cli/command.test.ts index 73f735976..96ae9e17a 100644 --- a/packages/schema/tests/cli/command.test.ts +++ b/packages/schema/tests/cli/command.test.ts @@ -91,7 +91,6 @@ describe('CLI Command Tests', () => { expect(fs.readFileSync('schema.zmodel', 'utf-8')).toEqual(fs.readFileSync('prisma/my.prisma', 'utf-8')); }); - // eslint-disable-next-line jest/no-disabled-tests it('init project empty project', async () => { fs.writeFileSync('package.json', JSON.stringify({ name: 'my app', version: '1.0.0' })); createNpmrc(); diff --git a/packages/schema/tests/cli/plugins.test.ts b/packages/schema/tests/cli/plugins.test.ts new file mode 100644 index 000000000..8c864144f --- /dev/null +++ b/packages/schema/tests/cli/plugins.test.ts @@ -0,0 +1,87 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/// + +import { getWorkspaceNpmCacheFolder } from '@zenstackhq/testtools'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as tmp from 'tmp'; +import { createProgram } from '../../src/cli'; + +describe('CLI Plugins Tests', () => { + let projDir: string; + let origDir: string; + + beforeEach(() => { + origDir = process.cwd(); + const r = tmp.dirSync(); + projDir = r.name; + console.log(`Project dir: ${projDir}`); + process.chdir(projDir); + }); + + afterEach(() => { + // fs.rmSync(projDir, { recursive: true, force: true }); + process.chdir(origDir); + }); + + function createNpmrc() { + fs.writeFileSync('.npmrc', `cache=${getWorkspaceNpmCacheFolder(__dirname)}`); + } + + const plugins = [ + `plugin prisma { + provider = '@core/prisma' + output = 'prisma/my.prisma' + generateClient = true + }`, + `plugin meta { + provider = '@core/model-meta' + output = 'model-meta' + } + `, + `plugin policy { + provider = '@core/access-policy' + output = 'policy' + }`, + `plugin zod { + provider = '@core/zod' + output = 'zod' + }`, + `plugin react { + provider = '${path.join(__dirname, '../../../plugins/react/dist')}' + output = 'lib/default-hooks' + }`, + `plugin trpc { + provider = '${path.join(__dirname, '../../../plugins/trpc/dist')}' + output = 'lib/trpc' + }`, + `plugin openapi { + provider = '${path.join(__dirname, '../../../plugins/openapi/dist')}' + output = 'myapi.yaml' + specVersion = '3.0.0' + title = 'My Awesome API' + version = '1.0.0' + description = 'awesome api' + prefix = '/myapi' + securitySchemes = { + myBasic: { type: 'http', scheme: 'basic' }, + myBearer: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' }, + myApiKey: { type: 'apiKey', in: 'header', name: 'X-API-KEY' } + } + }`, + ]; + + it('all plugins', async () => { + fs.writeFileSync('package.json', JSON.stringify({ name: 'my app', version: '1.0.0' })); + createNpmrc(); + const program = createProgram(); + await program.parseAsync(['init', '--tag', 'latest'], { from: 'user' }); + + let schemaContent = fs.readFileSync('schema.zmodel', 'utf-8'); + for (const plugin of plugins) { + schemaContent += `\n${plugin}`; + } + fs.writeFileSync('schema.zmodel', schemaContent); + await program.parseAsync(['generate', '--no-dependency-check'], { from: 'user' }); + }); +}); diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 70ed02349..4dee33831 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/sdk/src/utils.ts b/packages/sdk/src/utils.ts index 638f27312..741e0fc99 100644 --- a/packages/sdk/src/utils.ts +++ b/packages/sdk/src/utils.ts @@ -34,7 +34,7 @@ export function getLiteral( expr: Expression | undefined ): T | undefined { if (!isLiteralExpr(expr)) { - return undefined; + return getObjectLiteral(expr); } return expr.value as T; } @@ -51,7 +51,7 @@ export function getLiteralArray< if (!arr) { return undefined; } - return arr.map((item) => getLiteral(item) ?? getObjectLiteral(item)); + return arr.map((item) => getLiteral(item)); } export function getObjectLiteral(expr: Expression | undefined): T | undefined { diff --git a/packages/server/package.json b/packages/server/package.json index 05086e784..61e2a94ee 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "displayName": "ZenStack Server-side Adapters", "description": "ZenStack server-side adapters", "homepage": "https://zenstack.dev", diff --git a/packages/testtools/package.json b/packages/testtools/package.json index 1966c35b6..7e6a8496d 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "description": "ZenStack Test Tools", "main": "index.js", "publishConfig": { diff --git a/tests/integration/test-run/package-lock.json b/tests/integration/test-run/package-lock.json index bede986e3..3ec600158 100644 --- a/tests/integration/test-run/package-lock.json +++ b/tests/integration/test-run/package-lock.json @@ -126,7 +126,7 @@ }, "../../../packages/runtime/dist": { "name": "@zenstackhq/runtime", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "license": "MIT", "dependencies": { "@types/bcryptjs": "^2.4.2", @@ -158,7 +158,7 @@ }, "../../../packages/schema/dist": { "name": "zenstack", - "version": "1.0.0-alpha.101", + "version": "1.0.0-alpha.102", "hasInstallScript": true, "license": "MIT", "dependencies": {