@zenstackhq/testtools 1.0.0-alpha.78 → 1.0.0-alpha.80
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 +7 -3
- package/schema.d.ts +15 -1
- package/schema.js +49 -14
- 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-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.80",
|
|
4
4
|
"description": "ZenStack Test Tools",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,14 +12,18 @@
|
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@prisma/client": "^4.7.0",
|
|
15
|
+
"@prisma/generator-helper": "^4.7.1",
|
|
16
|
+
"@prisma/internals": "^4.7.1",
|
|
17
|
+
"prisma": "~4.7.0",
|
|
15
18
|
"tmp": "^0.2.1",
|
|
16
|
-
"@zenstackhq/runtime": "1.0.0-alpha.
|
|
19
|
+
"@zenstackhq/runtime": "1.0.0-alpha.80",
|
|
20
|
+
"zenstack": "1.0.0-alpha.80",
|
|
21
|
+
"@zenstackhq/language": "1.0.0-alpha.80"
|
|
17
22
|
},
|
|
18
23
|
"devDependencies": {
|
|
19
24
|
"@types/node": "^18.14.2",
|
|
20
25
|
"@types/tmp": "^0.2.3",
|
|
21
26
|
"copyfiles": "^2.4.1",
|
|
22
|
-
"prisma": "~4.7.0",
|
|
23
27
|
"rimraf": "^3.0.2",
|
|
24
28
|
"typescript": "^4.9.5"
|
|
25
29
|
},
|
package/schema.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { DMMF } from '@prisma/generator-helper';
|
|
2
|
+
import type { Model } from '@zenstackhq/language/ast';
|
|
1
3
|
import { type AuthUser, type DbOperations } from '@zenstackhq/runtime';
|
|
2
4
|
export type WeakDbOperations = {
|
|
3
5
|
[key in keyof DbOperations]: (...args: any[]) => Promise<any>;
|
|
@@ -15,6 +17,7 @@ export declare function run(cmd: string, env?: Record<string, string>, cwd?: str
|
|
|
15
17
|
export declare function getWorkspaceRoot(start: string): string | undefined;
|
|
16
18
|
export declare function getWorkspaceNpmCacheFolder(start: string): string;
|
|
17
19
|
export declare function loadSchemaFromFile(schemaFile: string, addPrelude?: boolean, pushDb?: boolean): Promise<{
|
|
20
|
+
projectDir: string;
|
|
18
21
|
prisma: any;
|
|
19
22
|
withPolicy: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
20
23
|
withOmit: () => WeakDbClientContract;
|
|
@@ -22,7 +25,8 @@ export declare function loadSchemaFromFile(schemaFile: string, addPrelude?: bool
|
|
|
22
25
|
withPresets: (user?: AuthUser | undefined) => WeakDbClientContract;
|
|
23
26
|
zodSchemas: any;
|
|
24
27
|
}>;
|
|
25
|
-
export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?: boolean): Promise<{
|
|
28
|
+
export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?: boolean, extraDependencies?: string[], compile?: boolean): Promise<{
|
|
29
|
+
projectDir: string;
|
|
26
30
|
prisma: any;
|
|
27
31
|
withPolicy: (user?: AuthUser) => WeakDbClientContract;
|
|
28
32
|
withOmit: () => WeakDbClientContract;
|
|
@@ -30,3 +34,13 @@ export declare function loadSchema(schema: string, addPrelude?: boolean, pushDb?
|
|
|
30
34
|
withPresets: (user?: AuthUser) => WeakDbClientContract;
|
|
31
35
|
zodSchemas: any;
|
|
32
36
|
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Load ZModel and Prisma DMM from a string without creating a NPM project.
|
|
39
|
+
* @param content
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadZModelAndDmmf(content: string): Promise<{
|
|
43
|
+
model: Model;
|
|
44
|
+
dmmf: DMMF.Document;
|
|
45
|
+
modelFile: string;
|
|
46
|
+
}>;
|
package/schema.js
CHANGED
|
@@ -35,14 +35,15 @@ 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.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = void 0;
|
|
39
|
-
|
|
40
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
38
|
+
exports.loadZModelAndDmmf = exports.loadSchema = exports.loadSchemaFromFile = exports.getWorkspaceNpmCacheFolder = exports.getWorkspaceRoot = exports.run = void 0;
|
|
39
|
+
const internals_1 = require("@prisma/internals");
|
|
41
40
|
const runtime_1 = require("@zenstackhq/runtime");
|
|
42
41
|
const child_process_1 = require("child_process");
|
|
43
42
|
const fs = __importStar(require("fs"));
|
|
44
43
|
const path = __importStar(require("path"));
|
|
45
44
|
const tmp_1 = __importDefault(require("tmp"));
|
|
45
|
+
const cli_util_1 = require("zenstack/cli/cli-util");
|
|
46
|
+
const prisma_1 = __importDefault(require("zenstack/plugins/prisma"));
|
|
46
47
|
function run(cmd, env, cwd) {
|
|
47
48
|
(0, child_process_1.execSync)(cmd, {
|
|
48
49
|
stdio: 'pipe',
|
|
@@ -78,7 +79,6 @@ datasource db {
|
|
|
78
79
|
|
|
79
80
|
generator js {
|
|
80
81
|
provider = 'prisma-client-js'
|
|
81
|
-
output = '../.prisma'
|
|
82
82
|
previewFeatures = ['clientExtensions']
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -104,20 +104,21 @@ function loadSchemaFromFile(schemaFile, addPrelude = true, pushDb = true) {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
exports.loadSchemaFromFile = loadSchemaFromFile;
|
|
107
|
-
function loadSchema(schema, addPrelude = true, pushDb = true) {
|
|
107
|
+
function loadSchema(schema, addPrelude = true, pushDb = true, extraDependencies = [], compile = false) {
|
|
108
108
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
const { name:
|
|
109
|
+
const { name: projectRoot } = tmp_1.default.dirSync();
|
|
110
110
|
const root = getWorkspaceRoot(__dirname);
|
|
111
111
|
if (!root) {
|
|
112
112
|
throw new Error('Could not find workspace root');
|
|
113
113
|
}
|
|
114
114
|
console.log('Workspace root:', root);
|
|
115
115
|
const pkgContent = fs.readFileSync(path.join(__dirname, 'package.template.json'), { encoding: 'utf-8' });
|
|
116
|
-
fs.writeFileSync(path.join(
|
|
116
|
+
fs.writeFileSync(path.join(projectRoot, 'package.json'), pkgContent.replaceAll('<root>', root));
|
|
117
117
|
const npmrcContent = fs.readFileSync(path.join(__dirname, '.npmrc.template'), { encoding: 'utf-8' });
|
|
118
|
-
fs.writeFileSync(path.join(
|
|
119
|
-
console.log('Workdir:',
|
|
120
|
-
process.chdir(
|
|
118
|
+
fs.writeFileSync(path.join(projectRoot, '.npmrc'), npmrcContent.replaceAll('<root>', root));
|
|
119
|
+
console.log('Workdir:', projectRoot);
|
|
120
|
+
process.chdir(projectRoot);
|
|
121
|
+
schema = schema.replaceAll('$projectRoot', projectRoot);
|
|
121
122
|
const content = addPrelude ? `${MODEL_PRELUDE}\n${schema}` : schema;
|
|
122
123
|
fs.writeFileSync('schema.zmodel', content);
|
|
123
124
|
run('npm install');
|
|
@@ -125,12 +126,22 @@ function loadSchema(schema, addPrelude = true, pushDb = true) {
|
|
|
125
126
|
if (pushDb) {
|
|
126
127
|
run('npx prisma db push');
|
|
127
128
|
}
|
|
128
|
-
const PrismaClient = require(path.join(
|
|
129
|
+
const PrismaClient = require(path.join(projectRoot, 'node_modules/.prisma/client')).PrismaClient;
|
|
129
130
|
const prisma = new PrismaClient({ log: ['info', 'warn', 'error'] });
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
extraDependencies.forEach((dep) => {
|
|
132
|
+
console.log(`Installing dependency ${dep}`);
|
|
133
|
+
run(`npm install ${dep}`);
|
|
134
|
+
});
|
|
135
|
+
if (compile) {
|
|
136
|
+
console.log('Compiling...');
|
|
137
|
+
run('npx tsc --init');
|
|
138
|
+
run('npx tsc --project tsconfig.json');
|
|
139
|
+
}
|
|
140
|
+
const policy = require(path.join(projectRoot, '.zenstack/policy')).default;
|
|
141
|
+
const modelMeta = require(path.join(projectRoot, '.zenstack/model-meta')).default;
|
|
142
|
+
const zodSchemas = require(path.join(projectRoot, '.zenstack/zod')).default;
|
|
133
143
|
return {
|
|
144
|
+
projectDir: projectRoot,
|
|
134
145
|
prisma,
|
|
135
146
|
withPolicy: (user) => (0, runtime_1.withPolicy)(prisma, { user }, policy, modelMeta),
|
|
136
147
|
withOmit: () => (0, runtime_1.withOmit)(prisma, modelMeta),
|
|
@@ -141,4 +152,28 @@ function loadSchema(schema, addPrelude = true, pushDb = true) {
|
|
|
141
152
|
});
|
|
142
153
|
}
|
|
143
154
|
exports.loadSchema = loadSchema;
|
|
155
|
+
/**
|
|
156
|
+
* Load ZModel and Prisma DMM from a string without creating a NPM project.
|
|
157
|
+
* @param content
|
|
158
|
+
* @returns
|
|
159
|
+
*/
|
|
160
|
+
function loadZModelAndDmmf(content) {
|
|
161
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
const prelude = `
|
|
163
|
+
datasource db {
|
|
164
|
+
provider = 'postgresql'
|
|
165
|
+
url = env('DATABASE_URL')
|
|
166
|
+
}
|
|
167
|
+
`;
|
|
168
|
+
const { name: modelFile } = tmp_1.default.fileSync({ postfix: '.zmodel' });
|
|
169
|
+
fs.writeFileSync(modelFile, `${prelude}\n${content}`);
|
|
170
|
+
const model = yield (0, cli_util_1.loadDocument)(modelFile);
|
|
171
|
+
const { name: prismaFile } = tmp_1.default.fileSync({ postfix: '.prisma' });
|
|
172
|
+
yield (0, prisma_1.default)(model, { schemaPath: modelFile, output: prismaFile, generateClient: false });
|
|
173
|
+
const prismaContent = fs.readFileSync(prismaFile, { encoding: 'utf-8' });
|
|
174
|
+
const dmmf = yield (0, internals_1.getDMMF)({ datamodel: prismaContent });
|
|
175
|
+
return { model, dmmf, modelFile };
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
exports.loadZModelAndDmmf = loadZModelAndDmmf;
|
|
144
179
|
//# sourceMappingURL=schema.js.map
|
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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"}
|