diff --git a/package.json b/package.json index 5d00c9db1..d27a7a01d 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "", "scripts": { "build": "pnpm -r build", - "test": "pnpm -r run test --silent", - "test-ci": "pnpm -r run test --silent", + "test": "ZENSTACK_TEST=1 pnpm -r run test --silent", + "test-ci": "ZENSTACK_TEST=1 pnpm -r run test --silent", "lint": "pnpm -r lint", "publish-all": "pnpm --filter \"./packages/**\" -r publish --access public", "publish-preview": "pnpm --filter \"./packages/**\" -r publish --registry http://localhost:4873" diff --git a/packages/runtime/src/enhancements/model-meta.ts b/packages/runtime/src/enhancements/model-meta.ts index 53fed4702..8109bbacc 100644 --- a/packages/runtime/src/enhancements/model-meta.ts +++ b/packages/runtime/src/enhancements/model-meta.ts @@ -1,20 +1,24 @@ /* eslint-disable @typescript-eslint/no-var-requires */ import { lowerCaseFirst } from 'lower-case-first'; -import { ModelMeta } from './types'; import path from 'path'; +import { ModelMeta } from './types'; /** * Load model meta from standard location. */ export function getDefaultModelMeta(): ModelMeta { try { - if (process.env.NODE_ENV === 'test') { - // handling the case when running as tests, resolve relative to CWD - return require(path.join(process.cwd(), 'node_modules', '.zenstack', 'model-meta')).default; - } else { - return require('.zenstack/model-meta').default; - } + // normal load + return require('.zenstack/model-meta').default; } catch { + if (process.env.ZENSTACK_TEST === '1') { + try { + // special handling for running as tests, try resolving relative to CWD + return require(path.join(process.cwd(), 'node_modules', '.zenstack', 'model-meta')).default; + } catch { + throw new Error('Model meta cannot be loaded. Please make sure "zenstack generate" has been run.'); + } + } throw new Error('Model meta cannot be loaded. Please make sure "zenstack generate" has been run.'); } } diff --git a/packages/runtime/src/enhancements/policy/index.ts b/packages/runtime/src/enhancements/policy/index.ts index 59c4fb453..1fbe249f1 100644 --- a/packages/runtime/src/enhancements/policy/index.ts +++ b/packages/runtime/src/enhancements/policy/index.ts @@ -1,5 +1,7 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable @typescript-eslint/no-explicit-any */ +import path from 'path'; import { AuthUser, DbClientContract } from '../../types'; import { getDefaultModelMeta } from '../model-meta'; import { makeProxy } from '../proxy'; @@ -74,9 +76,18 @@ export function withPolicy( function getDefaultPolicy(): PolicyDef { try { - // eslint-disable-next-line @typescript-eslint/no-var-requires return require('.zenstack/policy').default; } catch { + if (process.env.ZENSTACK_TEST === '1') { + try { + // special handling for running as tests, try resolving relative to CWD + return require(path.join(process.cwd(), 'node_modules', '.zenstack', 'policy')).default; + } catch { + throw new Error( + 'Policy definition cannot be loaded from default location. Please make sure "zenstack generate" has been run.' + ); + } + } throw new Error( 'Policy definition cannot be loaded from default location. Please make sure "zenstack generate" has been run.' ); @@ -88,6 +99,14 @@ function getDefaultZodSchemas(): ZodSchemas | undefined { // eslint-disable-next-line @typescript-eslint/no-var-requires return require('.zenstack/zod'); } catch { + if (process.env.ZENSTACK_TEST === '1') { + try { + // special handling for running as tests, try resolving relative to CWD + return require(path.join(process.cwd(), 'node_modules', '.zenstack', 'zod')); + } catch { + return undefined; + } + } return undefined; } }