diff --git a/packages/language/package.json b/packages/language/package.json index 50758ce23..b6e146450 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -9,7 +9,7 @@ "generate": "langium generate && npx ts-node script/generate-plist.ts", "watch": "concurrently \"langium generate --watch\" \"tsc --watch\"", "lint": "eslint src --ext ts", - "build": "pnpm lint --max-warnings=0 && pnpm clean && pnpm generate && tsc && copyfiles -F ./README.md ./LICENSE ./package.json 'syntaxes/**/*' dist && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && pnpm generate && tsc && copyfiles -F ./README.md ./LICENSE ./package.json 'syntaxes/**/*' dist && pnpm pack dist --pack-destination ../../../.build", "prepublishOnly": "pnpm build" }, "publishConfig": { diff --git a/packages/misc/redwood/package.json b/packages/misc/redwood/package.json index d95ef1925..207173636 100644 --- a/packages/misc/redwood/package.json +++ b/packages/misc/redwood/package.json @@ -9,7 +9,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && pnpm pack dist --pack-destination '../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && pnpm pack dist --pack-destination ../../../.build", "watch": "tsc --watch", "lint": "eslint src --ext ts", "prepublishOnly": "pnpm build" diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json index 3db67dead..a8b6f1d49 100644 --- a/packages/plugins/openapi/package.json +++ b/packages/plugins/openapi/package.json @@ -14,7 +14,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE dist && copyfiles -u 1 ./src/plugin.zmodel dist && pnpm pack dist --pack-destination '../../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE dist && copyfiles -u 1 ./src/plugin.zmodel dist && pnpm pack dist --pack-destination ../../../../.build", "watch": "tsc --watch", "lint": "eslint src --ext ts", "test": "jest", diff --git a/packages/plugins/openapi/tests/openapi-restful.test.ts b/packages/plugins/openapi/tests/openapi-restful.test.ts index fb01e390e..9e84ad047 100644 --- a/packages/plugins/openapi/tests/openapi-restful.test.ts +++ b/packages/plugins/openapi/tests/openapi-restful.test.ts @@ -4,7 +4,7 @@ import OpenAPIParser from '@readme/openapi-parser'; import { getLiteral, getObjectLiteral } from '@zenstackhq/sdk'; import { Model, Plugin, isPlugin } from '@zenstackhq/sdk/ast'; -import { loadZModelAndDmmf } from '@zenstackhq/testtools'; +import { loadZModelAndDmmf, normalizePath } from '@zenstackhq/testtools'; import fs from 'fs'; import path from 'path'; import * as tmp from 'tmp'; @@ -16,7 +16,7 @@ describe('Open API Plugin RESTful Tests', () => { for (const specVersion of ['3.0.0', '3.1.0']) { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' specVersion = '${specVersion}' } @@ -114,7 +114,7 @@ model Bar { it('options', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' specVersion = '3.0.0' title = 'My Awesome API' version = '1.0.0' @@ -151,7 +151,7 @@ model User { it('security schemes valid', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'http', scheme: 'basic' }, myBearer: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' }, @@ -198,7 +198,7 @@ model Post { it('security model level override', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'http', scheme: 'basic' } } @@ -230,7 +230,7 @@ model User { it('security schemes invalid', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'invalid', scheme: 'basic' } } @@ -251,7 +251,7 @@ model User { it('ignored model used as relation', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' } model User { @@ -284,7 +284,7 @@ model Post { for (const specVersion of ['3.0.0', '3.1.0']) { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' specVersion = '${specVersion}' } diff --git a/packages/plugins/openapi/tests/openapi-rpc.test.ts b/packages/plugins/openapi/tests/openapi-rpc.test.ts index c0cb74ab6..8e8e3a6ac 100644 --- a/packages/plugins/openapi/tests/openapi-rpc.test.ts +++ b/packages/plugins/openapi/tests/openapi-rpc.test.ts @@ -4,7 +4,7 @@ import OpenAPIParser from '@readme/openapi-parser'; import { getLiteral, getObjectLiteral } from '@zenstackhq/sdk'; import { Model, Plugin, isPlugin } from '@zenstackhq/sdk/ast'; -import { loadZModelAndDmmf } from '@zenstackhq/testtools'; +import { loadZModelAndDmmf, normalizePath } from '@zenstackhq/testtools'; import fs from 'fs'; import path from 'path'; import * as tmp from 'tmp'; @@ -16,7 +16,7 @@ describe('Open API Plugin RPC Tests', () => { for (const specVersion of ['3.0.0', '3.1.0']) { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' specVersion = '${specVersion}' } @@ -127,7 +127,7 @@ model Bar { it('options', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' specVersion = '3.0.0' title = 'My Awesome API' version = '1.0.0' @@ -164,7 +164,7 @@ model User { it('security schemes valid', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'http', scheme: 'basic' }, myBearer: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' }, @@ -198,7 +198,7 @@ model User { it('security schemes invalid', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'invalid', scheme: 'basic' } } @@ -219,7 +219,7 @@ model User { it('security model level override', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'http', scheme: 'basic' } } @@ -247,7 +247,7 @@ model User { it('security operation level override', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'http', scheme: 'basic' } } @@ -280,7 +280,7 @@ model User { it('security inferred', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' securitySchemes = { myBasic: { type: 'http', scheme: 'basic' } } @@ -306,7 +306,7 @@ model User { it('v3.1.0 fields', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' summary = 'awesome api' } @@ -330,7 +330,7 @@ model User { it('ignored model used as relation', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' } model User { @@ -362,7 +362,7 @@ model Post { for (const specVersion of ['3.0.0', '3.1.0']) { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' specVersion = '${specVersion}' } @@ -408,7 +408,7 @@ generator js { } plugin openapi { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' } enum role { diff --git a/packages/plugins/swr/package.json b/packages/plugins/swr/package.json index 0d1fb7147..376ad2e3b 100644 --- a/packages/plugins/swr/package.json +++ b/packages/plugins/swr/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && tsup-node --config ./tsup.config.ts && copyfiles ./package.json ./README.md ./LICENSE dist && pnpm pack dist --pack-destination '../../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && tsup-node --config ./tsup.config.ts && copyfiles ./package.json ./README.md ./LICENSE dist && pnpm pack dist --pack-destination ../../../../.build", "watch": "concurrently \"tsc --watch\" \"tsup-node --config ./tsup.config.ts --watch\"", "lint": "eslint src --ext ts", "test": "jest", diff --git a/packages/plugins/swr/tests/swr.test.ts b/packages/plugins/swr/tests/swr.test.ts index 9d198269b..d12c3b37b 100644 --- a/packages/plugins/swr/tests/swr.test.ts +++ b/packages/plugins/swr/tests/swr.test.ts @@ -1,6 +1,6 @@ /// -import { loadSchema } from '@zenstackhq/testtools'; +import { loadSchema, normalizePath } from '@zenstackhq/testtools'; import path from 'path'; describe('SWR Plugin Tests', () => { @@ -50,7 +50,7 @@ model Foo { await loadSchema( ` plugin swr { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' } @@ -60,7 +60,7 @@ ${sharedModel} provider: 'postgresql', pushDb: false, extraDependencies: [ - `${path.join(__dirname, '../dist')}`, + `${normalizePath(path.join(__dirname, '../dist'))}`, 'react@18.2.0', '@types/react@18.2.0', 'swr@^2', diff --git a/packages/plugins/tanstack-query/package.json b/packages/plugins/tanstack-query/package.json index 8d034e8f4..69c3f5fda 100644 --- a/packages/plugins/tanstack-query/package.json +++ b/packages/plugins/tanstack-query/package.json @@ -66,7 +66,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && tsup-node --config ./tsup.config.ts && tsup-node --config ./tsup-v5.config.ts && node scripts/postbuild && copyfiles ./package.json ./README.md ./LICENSE dist && pnpm pack dist --pack-destination '../../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && tsup-node --config ./tsup.config.ts && tsup-node --config ./tsup-v5.config.ts && node scripts/postbuild && copyfiles ./package.json ./README.md ./LICENSE dist && pnpm pack dist --pack-destination ../../../../.build", "watch": "concurrently \"tsc --watch\" \"tsup-node --config ./tsup.config.ts --watch\" \"tsup-node --config ./tsup-v5.config.ts --watch\"", "lint": "eslint src --ext ts", "test": "jest", diff --git a/packages/plugins/tanstack-query/tests/plugin.test.ts b/packages/plugins/tanstack-query/tests/plugin.test.ts index 38370d38a..824174ba5 100644 --- a/packages/plugins/tanstack-query/tests/plugin.test.ts +++ b/packages/plugins/tanstack-query/tests/plugin.test.ts @@ -1,6 +1,6 @@ /// -import { loadSchema } from '@zenstackhq/testtools'; +import { loadSchema, normalizePath } from '@zenstackhq/testtools'; import path from 'path'; describe('Tanstack Query Plugin Tests', () => { @@ -50,7 +50,7 @@ model Foo { await loadSchema( ` plugin tanstack { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' target = 'react' } @@ -71,7 +71,7 @@ ${sharedModel} await loadSchema( ` plugin tanstack { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' target = 'react' version = 'v5' @@ -93,7 +93,7 @@ ${sharedModel} await loadSchema( ` plugin tanstack { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' target = 'vue' } @@ -114,7 +114,7 @@ ${sharedModel} await loadSchema( ` plugin tanstack { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' target = 'vue' version = 'v5' @@ -136,7 +136,7 @@ ${sharedModel} await loadSchema( ` plugin tanstack { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' target = 'svelte' } @@ -157,7 +157,7 @@ ${sharedModel} await loadSchema( ` plugin tanstack { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/hooks' target = 'svelte' version = 'v5' diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index ad76965c2..b0a5a28c9 100644 --- a/packages/plugins/trpc/package.json +++ b/packages/plugins/trpc/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf dist", - "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE 'res/**/*' dist && pnpm pack dist --pack-destination '../../../../.build'", + "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc && copyfiles ./package.json ./README.md ./LICENSE 'res/**/*' dist && pnpm pack dist --pack-destination ../../../../.build", "watch": "tsc --watch", "lint": "eslint src --ext ts", "test": "jest", diff --git a/packages/plugins/trpc/tests/trpc.test.ts b/packages/plugins/trpc/tests/trpc.test.ts index ca4a9c14d..4c79c740a 100644 --- a/packages/plugins/trpc/tests/trpc.test.ts +++ b/packages/plugins/trpc/tests/trpc.test.ts @@ -1,6 +1,6 @@ /// -import { loadSchema } from '@zenstackhq/testtools'; +import { loadSchema, normalizePath } from '@zenstackhq/testtools'; import fs from 'fs'; import path from 'path'; @@ -19,7 +19,7 @@ describe('tRPC Plugin Tests', () => { await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/trpc' } @@ -67,7 +67,7 @@ model Foo { const { projectDir } = await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = './trpc' } @@ -110,7 +110,7 @@ model Foo { const { projectDir } = await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = './trpc' } @@ -141,7 +141,7 @@ model Post { const { projectDir } = await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = './trpc' generateModelActions = 'findMany,findUnique,update' } @@ -171,7 +171,7 @@ model Post { const { projectDir } = await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = './trpc' generateModelActions = ['findMany', 'findUnique', 'update'] } @@ -220,7 +220,7 @@ model Post { await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/trpc' generateClientHelpers = 'react' } @@ -245,7 +245,7 @@ model Post { await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/trpc' generateClientHelpers = 'next' } @@ -265,7 +265,7 @@ model Post { await loadSchema( ` plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/trpc' } @@ -304,7 +304,7 @@ generator js { } plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/trpc' generateModels = ['Post'] generateModelActions = ['findMany', 'update'] @@ -375,7 +375,7 @@ plugin zod { } plugin trpc { - provider = '${path.resolve(__dirname, '../dist')}' + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' output = '$projectRoot/trpc' generateModels = ['Post'] generateModelActions = ['findMany', 'update'] diff --git a/packages/testtools/src/schema.ts b/packages/testtools/src/schema.ts index 88ffa9ba8..5fef95299 100644 --- a/packages/testtools/src/schema.ts +++ b/packages/testtools/src/schema.ts @@ -54,7 +54,7 @@ export function installPackage(pkg: string, dev = false) { run(`npm install ${dev ? '-D' : ''} --no-audit --no-fund ${pkg}`); } -function normalizePath(p: string) { +export function normalizePath(p: string) { return p ? p.split(path.sep).join(path.posix.sep) : p; } @@ -174,6 +174,9 @@ export async function loadSchema(schema: string, options?: SchemaLoadOptions) { const files = schema.split(FILE_SPLITTER); + // Use this one to replace $projectRoot placeholder in the schema file + const normalizedProjectRoot = normalizePath(projectRoot); + if (files.length > 1) { // multiple files files.forEach((file, index) => { @@ -190,12 +193,12 @@ export async function loadSchema(schema: string, options?: SchemaLoadOptions) { } } - fileContent = fileContent.replaceAll('$projectRoot', projectRoot); + fileContent = fileContent.replaceAll('$projectRoot', normalizedProjectRoot); const filePath = path.join(projectRoot, fileName); fs.writeFileSync(filePath, fileContent); }); } else { - schema = schema.replaceAll('$projectRoot', projectRoot); + schema = schema.replaceAll('$projectRoot', normalizedProjectRoot); const content = opt.addPrelude ? `${makePrelude(opt)}\n${schema}` : schema; if (opt.customSchemaFilePath) { zmodelPath = path.join(projectRoot, opt.customSchemaFilePath);