@zenstackhq/testtools 1.0.0-alpha.98 → 1.0.0-beta.1
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 +4 -4
- package/package.template.json +1 -1
- package/schema.d.ts +17 -2
- package/schema.js +73 -20
- 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.1",
|
|
4
4
|
"description": "ZenStack Test Tools",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"@prisma/internals": "^4.7.1",
|
|
17
17
|
"prisma": "~4.7.0",
|
|
18
18
|
"tmp": "^0.2.1",
|
|
19
|
-
"@zenstackhq/
|
|
20
|
-
"
|
|
21
|
-
"
|
|
19
|
+
"@zenstackhq/language": "1.0.0-beta.1",
|
|
20
|
+
"@zenstackhq/runtime": "1.0.0-beta.1",
|
|
21
|
+
"zenstack": "1.0.0-beta.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "^18.14.2",
|
package/package.template.json
CHANGED
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,26 @@ 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 declare function loadSchemaFromFile(schemaFile: string, addPrelude?: boolean, pushDb?: boolean): Promise<{
|
|
30
|
+
export declare function loadSchemaFromFile(schemaFile: string, addPrelude?: boolean, pushDb?: boolean, logPrismaQuery?: boolean): Promise<{
|
|
20
31
|
projectDir: string;
|
|
21
32
|
prisma: any;
|
|
22
33
|
withPolicy: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
23
34
|
withOmit: () => WeakDbClientContract;
|
|
24
35
|
withPassword: () => WeakDbClientContract;
|
|
25
36
|
withPresets: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
37
|
+
policy: any;
|
|
38
|
+
modelMeta: any;
|
|
26
39
|
zodSchemas: any;
|
|
27
40
|
}>;
|
|
28
|
-
export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?: boolean, extraDependencies?: string[], compile?: boolean): Promise<{
|
|
41
|
+
export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?: boolean, extraDependencies?: string[], compile?: boolean, customSchemaFilePath?: string, logPrismaQuery?: boolean): Promise<{
|
|
29
42
|
projectDir: string;
|
|
30
43
|
prisma: any;
|
|
31
44
|
withPolicy: (user?: AuthUser) => WeakDbClientContract;
|
|
32
45
|
withOmit: () => WeakDbClientContract;
|
|
33
46
|
withPassword: () => WeakDbClientContract;
|
|
34
47
|
withPresets: (user?: AuthUser) => WeakDbClientContract;
|
|
48
|
+
policy: any;
|
|
49
|
+
modelMeta: any;
|
|
35
50
|
zodSchemas: any;
|
|
36
51
|
}>;
|
|
37
52
|
/**
|
package/schema.js
CHANGED
|
@@ -35,7 +35,7 @@ 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;
|
|
38
|
+
exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = exports.FILE_SPLITTER = void 0;
|
|
39
39
|
const internals_1 = require("@prisma/internals");
|
|
40
40
|
const runtime_1 = require("@zenstackhq/runtime");
|
|
41
41
|
const child_process_1 = require("child_process");
|
|
@@ -44,6 +44,17 @@ const path = __importStar(require("path"));
|
|
|
44
44
|
const tmp_1 = __importDefault(require("tmp"));
|
|
45
45
|
const cli_util_1 = require("zenstack/cli/cli-util");
|
|
46
46
|
const prisma_1 = __importDefault(require("zenstack/plugins/prisma"));
|
|
47
|
+
/**
|
|
48
|
+
* Use it to represent multiple files in a single string like this
|
|
49
|
+
`schema.zmodel
|
|
50
|
+
import "user"
|
|
51
|
+
${FILE_SPLITTER}user.zmodel
|
|
52
|
+
import "schema"
|
|
53
|
+
model User {
|
|
54
|
+
...
|
|
55
|
+
}`
|
|
56
|
+
*/
|
|
57
|
+
exports.FILE_SPLITTER = '#FILE_SPLITTER#';
|
|
47
58
|
function run(cmd, env, cwd) {
|
|
48
59
|
(0, child_process_1.execSync)(cmd, {
|
|
49
60
|
stdio: 'pipe',
|
|
@@ -53,14 +64,17 @@ function run(cmd, env, cwd) {
|
|
|
53
64
|
});
|
|
54
65
|
}
|
|
55
66
|
exports.run = run;
|
|
67
|
+
function normalizePath(p) {
|
|
68
|
+
return p ? p.split(path.sep).join(path.posix.sep) : p;
|
|
69
|
+
}
|
|
56
70
|
function getWorkspaceRoot(start) {
|
|
57
|
-
let curr = start;
|
|
71
|
+
let curr = normalizePath(start);
|
|
58
72
|
while (curr && curr !== '/') {
|
|
59
73
|
if (fs.existsSync(path.join(curr, 'pnpm-workspace.yaml'))) {
|
|
60
74
|
return curr;
|
|
61
75
|
}
|
|
62
76
|
else {
|
|
63
|
-
curr = path.dirname(curr);
|
|
77
|
+
curr = normalizePath(path.dirname(curr));
|
|
64
78
|
}
|
|
65
79
|
}
|
|
66
80
|
return undefined;
|
|
@@ -97,32 +111,69 @@ plugin zod {
|
|
|
97
111
|
output = '.zenstack/zod'
|
|
98
112
|
}
|
|
99
113
|
`;
|
|
100
|
-
function loadSchemaFromFile(schemaFile, addPrelude = true, pushDb = true) {
|
|
114
|
+
function loadSchemaFromFile(schemaFile, addPrelude = true, pushDb = true, logPrismaQuery = false) {
|
|
101
115
|
return __awaiter(this, void 0, void 0, function* () {
|
|
102
116
|
const content = fs.readFileSync(schemaFile, { encoding: 'utf-8' });
|
|
103
|
-
return loadSchema(content, addPrelude, pushDb);
|
|
117
|
+
return loadSchema(content, addPrelude, pushDb, [], false, undefined, logPrismaQuery);
|
|
104
118
|
});
|
|
105
119
|
}
|
|
106
120
|
exports.loadSchemaFromFile = loadSchemaFromFile;
|
|
107
|
-
function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies = [], compile = false) {
|
|
121
|
+
function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies = [], compile = false, customSchemaFilePath, logPrismaQuery = false) {
|
|
108
122
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
const { name: projectRoot } = tmp_1.default.dirSync();
|
|
123
|
+
const { name: projectRoot } = tmp_1.default.dirSync({ unsafeCleanup: true });
|
|
110
124
|
const root = getWorkspaceRoot(__dirname);
|
|
111
125
|
if (!root) {
|
|
112
126
|
throw new Error('Could not find workspace root');
|
|
113
127
|
}
|
|
114
|
-
console.log('Workspace root:', root);
|
|
115
128
|
const pkgContent = fs.readFileSync(path.join(__dirname, 'package.template.json'), { encoding: 'utf-8' });
|
|
116
129
|
fs.writeFileSync(path.join(projectRoot, 'package.json'), pkgContent.replaceAll('<root>', root));
|
|
117
130
|
const npmrcContent = fs.readFileSync(path.join(__dirname, '.npmrc.template'), { encoding: 'utf-8' });
|
|
118
131
|
fs.writeFileSync(path.join(projectRoot, '.npmrc'), npmrcContent.replaceAll('<root>', root));
|
|
119
132
|
console.log('Workdir:', projectRoot);
|
|
120
133
|
process.chdir(projectRoot);
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
|
|
134
|
+
let zmodelPath = path.join(projectRoot, 'schema.zmodel');
|
|
135
|
+
const files = schema.split(exports.FILE_SPLITTER);
|
|
136
|
+
if (files.length > 1) {
|
|
137
|
+
// multiple files
|
|
138
|
+
files.forEach((file, index) => {
|
|
139
|
+
//first line is the file name
|
|
140
|
+
const firstLine = file.indexOf('\n');
|
|
141
|
+
const fileName = file.substring(0, firstLine).trim();
|
|
142
|
+
let fileContent = file.substring(firstLine + 1);
|
|
143
|
+
if (index === 0) {
|
|
144
|
+
// The first file is the main schema file
|
|
145
|
+
zmodelPath = path.join(projectRoot, fileName);
|
|
146
|
+
if (addPrelude) {
|
|
147
|
+
// plugin need to be added after import statement
|
|
148
|
+
fileContent = `${fileContent}\n${MODEL_PRELUDE}`;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
fileContent = fileContent.replaceAll('$projectRoot', projectRoot);
|
|
152
|
+
const filePath = path.join(projectRoot, fileName);
|
|
153
|
+
fs.writeFileSync(filePath, fileContent);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
schema = schema.replaceAll('$projectRoot', projectRoot);
|
|
158
|
+
const content = addPrelude ? `${MODEL_PRELUDE}\n${schema}` : schema;
|
|
159
|
+
if (customSchemaFilePath) {
|
|
160
|
+
zmodelPath = path.join(projectRoot, customSchemaFilePath);
|
|
161
|
+
fs.mkdirSync(path.dirname(zmodelPath), { recursive: true });
|
|
162
|
+
fs.writeFileSync(zmodelPath, content);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
fs.writeFileSync('schema.zmodel', content);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
124
168
|
run('npm install');
|
|
125
|
-
|
|
169
|
+
if (customSchemaFilePath) {
|
|
170
|
+
run(`npx zenstack generate --schema ${zmodelPath} --no-dependency-check`, {
|
|
171
|
+
NODE_PATH: './node_modules',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
run('npx zenstack generate --no-dependency-check', { NODE_PATH: './node_modules' });
|
|
176
|
+
}
|
|
126
177
|
if (pushDb) {
|
|
127
178
|
run('npx prisma db push');
|
|
128
179
|
}
|
|
@@ -137,16 +188,18 @@ function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies
|
|
|
137
188
|
run('npx tsc --init');
|
|
138
189
|
run('npx tsc --project tsconfig.json');
|
|
139
190
|
}
|
|
140
|
-
const policy = require(path.join(
|
|
141
|
-
const modelMeta = require(path.join(
|
|
142
|
-
const zodSchemas = require(path.join(
|
|
191
|
+
const policy = require(path.join(path.dirname(zmodelPath), '.zenstack/policy')).default;
|
|
192
|
+
const modelMeta = require(path.join(path.dirname(zmodelPath), '.zenstack/model-meta')).default;
|
|
193
|
+
const zodSchemas = require(path.join(path.dirname(zmodelPath), '.zenstack/zod'));
|
|
143
194
|
return {
|
|
144
195
|
projectDir: projectRoot,
|
|
145
196
|
prisma,
|
|
146
|
-
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, policy, modelMeta),
|
|
147
|
-
withOmit: () => (0, runtime_1.withOmit)(prisma, modelMeta),
|
|
148
|
-
withPassword: () => (0, runtime_1.withPassword)(prisma, modelMeta),
|
|
149
|
-
withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, policy, modelMeta),
|
|
197
|
+
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, { policy, modelMeta, logPrismaQuery }),
|
|
198
|
+
withOmit: () => (0, runtime_1.withOmit)(prisma, { modelMeta }),
|
|
199
|
+
withPassword: () => (0, runtime_1.withPassword)(prisma, { modelMeta }),
|
|
200
|
+
withPresets: (user) => (0, runtime_1.withPresets)(prisma, { user }, { policy, modelMeta, logPrismaQuery }),
|
|
201
|
+
policy,
|
|
202
|
+
modelMeta,
|
|
150
203
|
zodSchemas,
|
|
151
204
|
};
|
|
152
205
|
});
|
|
@@ -169,7 +222,7 @@ function loadZModelAndDmmf(content) {
|
|
|
169
222
|
fs.writeFileSync(modelFile, `${prelude}\n${content}`);
|
|
170
223
|
const model = yield (0, cli_util_1.loadDocument)(modelFile);
|
|
171
224
|
const { name: prismaFile } = tmp_1.default.fileSync({ postfix: '.prisma' });
|
|
172
|
-
yield (0, prisma_1.default)(model, { schemaPath: modelFile, output: prismaFile, generateClient: false });
|
|
225
|
+
yield (0, prisma_1.default)(model, { schemaPath: modelFile, name: 'Prisma', output: prismaFile, generateClient: false });
|
|
173
226
|
const prismaContent = fs.readFileSync(prismaFile, { encoding: 'utf-8' });
|
|
174
227
|
const dmmf = yield (0, internals_1.getDMMF)({ datamodel: prismaContent });
|
|
175
228
|
return { model, dmmf, modelFile };
|
package/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,iDAA4C;AAE5C,iDAAwH;AACxH,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAsB;AACtB,oDAAqD;AACrD,qEAAmD;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|