@zenstackhq/testtools 1.0.0-alpha.99 → 1.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -10
- package/package.template.json +2 -2
- package/schema.d.ts +26 -2
- package/schema.js +125 -30
- package/schema.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenstackhq/testtools",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-beta.10",
|
|
4
4
|
"description": "ZenStack Test Tools",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -11,17 +11,16 @@
|
|
|
11
11
|
"author": "",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@prisma/
|
|
15
|
-
"
|
|
16
|
-
"@prisma/internals": "^4.7.1",
|
|
17
|
-
"prisma": "~4.7.0",
|
|
14
|
+
"@prisma/generator-helper": "^5.0.0",
|
|
15
|
+
"json5": "^2.2.3",
|
|
18
16
|
"tmp": "^0.2.1",
|
|
19
|
-
"@zenstackhq/
|
|
20
|
-
"zenstack": "1.0.0-
|
|
21
|
-
"@zenstackhq/
|
|
17
|
+
"@zenstackhq/language": "1.0.0-beta.10",
|
|
18
|
+
"zenstack": "1.0.0-beta.10",
|
|
19
|
+
"@zenstackhq/sdk": "1.0.0-beta.10",
|
|
20
|
+
"@zenstackhq/runtime": "1.0.0-beta.10"
|
|
22
21
|
},
|
|
23
22
|
"devDependencies": {
|
|
24
|
-
"@types/node": "^18.
|
|
23
|
+
"@types/node": "^18.0.0",
|
|
25
24
|
"@types/tmp": "^0.2.3",
|
|
26
25
|
"copyfiles": "^2.4.1",
|
|
27
26
|
"rimraf": "^3.0.2",
|
|
@@ -30,7 +29,7 @@
|
|
|
30
29
|
"scripts": {
|
|
31
30
|
"clean": "rimraf dist",
|
|
32
31
|
"lint": "eslint src --ext ts",
|
|
33
|
-
"build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && copyfiles -u 1 src/package.template.json src/.npmrc.template dist",
|
|
32
|
+
"build": "pnpm lint && pnpm clean && tsc && copyfiles ./package.json ./LICENSE ./README.md dist && copyfiles -u 1 src/package.template.json src/.npmrc.template dist && pnpm pack dist --pack-destination '../../../.build'",
|
|
34
33
|
"watch": "tsc --watch"
|
|
35
34
|
}
|
|
36
35
|
}
|
package/package.template.json
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@prisma/client": "^4.0.0",
|
|
11
11
|
"@zenstackhq/runtime": "file:<root>/packages/runtime/dist",
|
|
12
|
-
"@zenstackhq/
|
|
12
|
+
"@zenstackhq/swr": "file:<root>/packages/plugins/swr/dist",
|
|
13
13
|
"@zenstackhq/trpc": "file:<root>/packages/plugins/trpc/dist",
|
|
14
14
|
"@zenstackhq/openapi": "file:<root>/packages/plugins/openapi/dist",
|
|
15
15
|
"prisma": "^4.0.0",
|
|
16
16
|
"typescript": "^4.9.3",
|
|
17
17
|
"zenstack": "file:<root>/packages/schema/dist",
|
|
18
|
-
"zod": "
|
|
18
|
+
"zod": "3.21.1"
|
|
19
19
|
}
|
|
20
20
|
}
|
package/schema.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import type { Model } from '@zenstackhq/language/ast';
|
|
3
3
|
import { type AuthUser, type DbOperations } from '@zenstackhq/runtime';
|
|
4
|
+
/**
|
|
5
|
+
* Use it to represent multiple files in a single string like this
|
|
6
|
+
`schema.zmodel
|
|
7
|
+
import "user"
|
|
8
|
+
${FILE_SPLITTER}user.zmodel
|
|
9
|
+
import "schema"
|
|
10
|
+
model User {
|
|
11
|
+
...
|
|
12
|
+
}`
|
|
13
|
+
*/
|
|
14
|
+
export declare const FILE_SPLITTER = "#FILE_SPLITTER#";
|
|
4
15
|
export type WeakDbOperations = {
|
|
5
16
|
[key in keyof DbOperations]: (...args: any[]) => Promise<any>;
|
|
6
17
|
};
|
|
@@ -16,22 +27,35 @@ export type WeakDbClientContract = Record<string, WeakDbOperations> & {
|
|
|
16
27
|
export declare function run(cmd: string, env?: Record<string, string>, cwd?: string): void;
|
|
17
28
|
export declare function getWorkspaceRoot(start: string): string | undefined;
|
|
18
29
|
export declare function getWorkspaceNpmCacheFolder(start: string): string;
|
|
19
|
-
export
|
|
30
|
+
export type SchemaLoadOptions = {
|
|
31
|
+
addPrelude?: boolean;
|
|
32
|
+
pushDb?: boolean;
|
|
33
|
+
fullZod?: boolean;
|
|
34
|
+
extraDependencies?: string[];
|
|
35
|
+
compile?: boolean;
|
|
36
|
+
customSchemaFilePath?: string;
|
|
37
|
+
logPrismaQuery?: boolean;
|
|
38
|
+
};
|
|
39
|
+
export declare function loadSchemaFromFile(schemaFile: string, options?: SchemaLoadOptions): Promise<{
|
|
20
40
|
projectDir: string;
|
|
21
41
|
prisma: any;
|
|
22
42
|
withPolicy: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
23
43
|
withOmit: () => WeakDbClientContract;
|
|
24
44
|
withPassword: () => WeakDbClientContract;
|
|
25
45
|
withPresets: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
46
|
+
policy: any;
|
|
47
|
+
modelMeta: any;
|
|
26
48
|
zodSchemas: any;
|
|
27
49
|
}>;
|
|
28
|
-
export declare function loadSchema(schema: string,
|
|
50
|
+
export declare function loadSchema(schema: string, options?: SchemaLoadOptions): Promise<{
|
|
29
51
|
projectDir: string;
|
|
30
52
|
prisma: any;
|
|
31
53
|
withPolicy: (user?: AuthUser) => WeakDbClientContract;
|
|
32
54
|
withOmit: () => WeakDbClientContract;
|
|
33
55
|
withPassword: () => WeakDbClientContract;
|
|
34
56
|
withPresets: (user?: AuthUser) => WeakDbClientContract;
|
|
57
|
+
policy: any;
|
|
58
|
+
modelMeta: any;
|
|
35
59
|
zodSchemas: any;
|
|
36
60
|
}>;
|
|
37
61
|
/**
|
package/schema.js
CHANGED
|
@@ -35,22 +35,36 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = void 0;
|
|
39
|
-
const internals_1 = require("@prisma/internals");
|
|
38
|
+
exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = exports.FILE_SPLITTER = void 0;
|
|
40
39
|
const runtime_1 = require("@zenstackhq/runtime");
|
|
40
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
41
41
|
const child_process_1 = require("child_process");
|
|
42
42
|
const fs = __importStar(require("fs"));
|
|
43
|
+
const json5_1 = __importDefault(require("json5"));
|
|
43
44
|
const path = __importStar(require("path"));
|
|
44
45
|
const tmp_1 = __importDefault(require("tmp"));
|
|
45
46
|
const cli_util_1 = require("zenstack/cli/cli-util");
|
|
46
47
|
const prisma_1 = __importDefault(require("zenstack/plugins/prisma"));
|
|
48
|
+
/**
|
|
49
|
+
* Use it to represent multiple files in a single string like this
|
|
50
|
+
`schema.zmodel
|
|
51
|
+
import "user"
|
|
52
|
+
${FILE_SPLITTER}user.zmodel
|
|
53
|
+
import "schema"
|
|
54
|
+
model User {
|
|
55
|
+
...
|
|
56
|
+
}`
|
|
57
|
+
*/
|
|
58
|
+
exports.FILE_SPLITTER = '#FILE_SPLITTER#';
|
|
47
59
|
function run(cmd, env, cwd) {
|
|
60
|
+
const start = Date.now();
|
|
48
61
|
(0, child_process_1.execSync)(cmd, {
|
|
49
62
|
stdio: 'pipe',
|
|
50
63
|
encoding: 'utf-8',
|
|
51
64
|
env: Object.assign(Object.assign(Object.assign({}, process.env), { DO_NOT_TRACK: '1' }), env),
|
|
52
65
|
cwd,
|
|
53
66
|
});
|
|
67
|
+
console.log('Execution took', Date.now() - start, 'ms', '-', cmd);
|
|
54
68
|
}
|
|
55
69
|
exports.run = run;
|
|
56
70
|
function normalizePath(p) {
|
|
@@ -85,71 +99,152 @@ generator js {
|
|
|
85
99
|
previewFeatures = ['clientExtensions']
|
|
86
100
|
}
|
|
87
101
|
|
|
88
|
-
plugin
|
|
89
|
-
provider = '@core/
|
|
90
|
-
|
|
102
|
+
plugin zod {
|
|
103
|
+
provider = '@core/zod'
|
|
104
|
+
modelOnly = true
|
|
105
|
+
}
|
|
106
|
+
`;
|
|
107
|
+
const MODEL_PRELUDE_FULL_ZOD = `
|
|
108
|
+
datasource db {
|
|
109
|
+
provider = 'sqlite'
|
|
110
|
+
url = 'file:./test.db'
|
|
91
111
|
}
|
|
92
112
|
|
|
93
|
-
|
|
94
|
-
provider = '
|
|
95
|
-
|
|
113
|
+
generator js {
|
|
114
|
+
provider = 'prisma-client-js'
|
|
115
|
+
previewFeatures = ['clientExtensions']
|
|
96
116
|
}
|
|
97
117
|
|
|
98
118
|
plugin zod {
|
|
99
119
|
provider = '@core/zod'
|
|
100
|
-
|
|
120
|
+
modelOnly = false
|
|
101
121
|
}
|
|
102
122
|
`;
|
|
103
|
-
|
|
123
|
+
const defaultOptions = {
|
|
124
|
+
addPrelude: true,
|
|
125
|
+
pushDb: true,
|
|
126
|
+
fullZod: false,
|
|
127
|
+
extraDependencies: [],
|
|
128
|
+
compile: false,
|
|
129
|
+
logPrismaQuery: false,
|
|
130
|
+
};
|
|
131
|
+
function loadSchemaFromFile(schemaFile, options) {
|
|
104
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
105
133
|
const content = fs.readFileSync(schemaFile, { encoding: 'utf-8' });
|
|
106
|
-
return loadSchema(content,
|
|
134
|
+
return loadSchema(content, options);
|
|
107
135
|
});
|
|
108
136
|
}
|
|
109
137
|
exports.loadSchemaFromFile = loadSchemaFromFile;
|
|
110
|
-
function loadSchema(schema,
|
|
138
|
+
function loadSchema(schema, options) {
|
|
139
|
+
var _a;
|
|
111
140
|
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
-
const
|
|
141
|
+
const opt = Object.assign(Object.assign({}, defaultOptions), options);
|
|
142
|
+
const { name: projectRoot } = tmp_1.default.dirSync({ unsafeCleanup: true });
|
|
113
143
|
const root = getWorkspaceRoot(__dirname);
|
|
114
144
|
if (!root) {
|
|
115
145
|
throw new Error('Could not find workspace root');
|
|
116
146
|
}
|
|
117
|
-
console.log('Workspace root:', root);
|
|
118
147
|
const pkgContent = fs.readFileSync(path.join(__dirname, 'package.template.json'), { encoding: 'utf-8' });
|
|
119
148
|
fs.writeFileSync(path.join(projectRoot, 'package.json'), pkgContent.replaceAll('<root>', root));
|
|
120
149
|
const npmrcContent = fs.readFileSync(path.join(__dirname, '.npmrc.template'), { encoding: 'utf-8' });
|
|
121
150
|
fs.writeFileSync(path.join(projectRoot, '.npmrc'), npmrcContent.replaceAll('<root>', root));
|
|
122
151
|
console.log('Workdir:', projectRoot);
|
|
123
152
|
process.chdir(projectRoot);
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
153
|
+
let zmodelPath = path.join(projectRoot, 'schema.zmodel');
|
|
154
|
+
const files = schema.split(exports.FILE_SPLITTER);
|
|
155
|
+
if (files.length > 1) {
|
|
156
|
+
// multiple files
|
|
157
|
+
files.forEach((file, index) => {
|
|
158
|
+
//first line is the file name
|
|
159
|
+
const firstLine = file.indexOf('\n');
|
|
160
|
+
const fileName = file.substring(0, firstLine).trim();
|
|
161
|
+
let fileContent = file.substring(firstLine + 1);
|
|
162
|
+
if (index === 0) {
|
|
163
|
+
// The first file is the main schema file
|
|
164
|
+
zmodelPath = path.join(projectRoot, fileName);
|
|
165
|
+
if (opt.addPrelude) {
|
|
166
|
+
// plugin need to be added after import statement
|
|
167
|
+
fileContent = `${fileContent}\n${opt.fullZod ? MODEL_PRELUDE_FULL_ZOD : MODEL_PRELUDE}`;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
fileContent = fileContent.replaceAll('$projectRoot', projectRoot);
|
|
171
|
+
const filePath = path.join(projectRoot, fileName);
|
|
172
|
+
fs.writeFileSync(filePath, fileContent);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
schema = schema.replaceAll('$projectRoot', projectRoot);
|
|
177
|
+
const content = opt.addPrelude ? `${opt.fullZod ? MODEL_PRELUDE_FULL_ZOD : MODEL_PRELUDE}\n${schema}` : schema;
|
|
178
|
+
if (opt.customSchemaFilePath) {
|
|
179
|
+
zmodelPath = path.join(projectRoot, opt.customSchemaFilePath);
|
|
180
|
+
fs.mkdirSync(path.dirname(zmodelPath), { recursive: true });
|
|
181
|
+
fs.writeFileSync(zmodelPath, content);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
fs.writeFileSync('schema.zmodel', content);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
127
187
|
run('npm install');
|
|
128
|
-
|
|
129
|
-
|
|
188
|
+
if (opt.customSchemaFilePath) {
|
|
189
|
+
run(`npx zenstack generate --schema ${zmodelPath} --no-dependency-check`, {
|
|
190
|
+
NODE_PATH: './node_modules',
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
run('npx zenstack generate --no-dependency-check', { NODE_PATH: './node_modules' });
|
|
195
|
+
}
|
|
196
|
+
if (opt.pushDb) {
|
|
130
197
|
run('npx prisma db push');
|
|
131
198
|
}
|
|
132
199
|
const PrismaClient = require(path.join(projectRoot, 'node_modules/.prisma/client')).PrismaClient;
|
|
133
200
|
const prisma = new PrismaClient({ log: ['info', 'warn', 'error'] });
|
|
134
|
-
extraDependencies.forEach((dep) => {
|
|
201
|
+
(_a = opt.extraDependencies) === null || _a === void 0 ? void 0 : _a.forEach((dep) => {
|
|
135
202
|
console.log(`Installing dependency ${dep}`);
|
|
136
203
|
run(`npm install ${dep}`);
|
|
137
204
|
});
|
|
138
|
-
if (compile) {
|
|
205
|
+
if (opt.compile) {
|
|
139
206
|
console.log('Compiling...');
|
|
140
207
|
run('npx tsc --init');
|
|
208
|
+
// add genetated '.zenstack/zod' folder to typescript's search path,
|
|
209
|
+
// so that it can be resolved from symbolic-linked files
|
|
210
|
+
const tsconfig = json5_1.default.parse(fs.readFileSync(path.join(projectRoot, './tsconfig.json'), 'utf-8'));
|
|
211
|
+
tsconfig.compilerOptions.paths = {
|
|
212
|
+
'.zenstack/zod/input': ['./node_modules/.zenstack/zod/input/index.d.ts'],
|
|
213
|
+
};
|
|
214
|
+
fs.writeFileSync(path.join(projectRoot, './tsconfig.json'), JSON.stringify(tsconfig, null, 2));
|
|
141
215
|
run('npx tsc --project tsconfig.json');
|
|
142
216
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
217
|
+
let policy;
|
|
218
|
+
let modelMeta;
|
|
219
|
+
let zodSchemas;
|
|
220
|
+
const outputPath = path.join(projectRoot, 'node_modules');
|
|
221
|
+
try {
|
|
222
|
+
policy = require(path.join(outputPath, '.zenstack/policy')).default;
|
|
223
|
+
}
|
|
224
|
+
catch (_b) {
|
|
225
|
+
/* noop */
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
modelMeta = require(path.join(outputPath, '.zenstack/model-meta')).default;
|
|
229
|
+
}
|
|
230
|
+
catch (_c) {
|
|
231
|
+
/* noop */
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
zodSchemas = require(path.join(outputPath, '.zenstack/zod'));
|
|
235
|
+
}
|
|
236
|
+
catch (_d) {
|
|
237
|
+
/* noop */
|
|
238
|
+
}
|
|
146
239
|
return {
|
|
147
240
|
projectDir: projectRoot,
|
|
148
241
|
prisma,
|
|
149
|
-
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, policy, modelMeta),
|
|
150
|
-
withOmit: () => (0, runtime_1.withOmit)(prisma, modelMeta),
|
|
151
|
-
withPassword: () => (0, runtime_1.withPassword)(prisma, modelMeta),
|
|
152
|
-
withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, policy, modelMeta),
|
|
242
|
+
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, { policy, modelMeta, zodSchemas, logPrismaQuery: opt.logPrismaQuery }),
|
|
243
|
+
withOmit: () => (0, runtime_1.withOmit)(prisma, { modelMeta }),
|
|
244
|
+
withPassword: () => (0, runtime_1.withPassword)(prisma, { modelMeta }),
|
|
245
|
+
withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, { policy, modelMeta, zodSchemas, logPrismaQuery: opt.logPrismaQuery }),
|
|
246
|
+
policy,
|
|
247
|
+
modelMeta,
|
|
153
248
|
zodSchemas,
|
|
154
249
|
};
|
|
155
250
|
});
|
|
@@ -172,9 +267,9 @@ function loadZModelAndDmmf(content) {
|
|
|
172
267
|
fs.writeFileSync(modelFile, `${prelude}\n${content}`);
|
|
173
268
|
const model = yield (0, cli_util_1.loadDocument)(modelFile);
|
|
174
269
|
const { name: prismaFile } = tmp_1.default.fileSync({ postfix: '.prisma' });
|
|
175
|
-
yield (0, prisma_1.default)(model, { schemaPath: modelFile, output: prismaFile, generateClient: false });
|
|
270
|
+
yield (0, prisma_1.default)(model, { schemaPath: modelFile, name: 'Prisma', output: prismaFile, generateClient: false });
|
|
176
271
|
const prismaContent = fs.readFileSync(prismaFile, { encoding: 'utf-8' });
|
|
177
|
-
const dmmf = yield (0,
|
|
272
|
+
const dmmf = yield (0, sdk_1.getDMMF)({ datamodel: prismaContent });
|
|
178
273
|
return { model, dmmf, modelFile };
|
|
179
274
|
});
|
|
180
275
|
}
|
package/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|