zenstack 1.0.0 → 1.0.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/LICENSE +1 -1
- package/README.md +194 -1
- package/bin/cli +3 -0
- package/bin/post-install.js +24 -0
- package/cli/actions/generate.d.ts +13 -0
- package/cli/actions/generate.js +71 -0
- package/cli/actions/generate.js.map +1 -0
- package/cli/actions/index.d.ts +3 -0
- package/cli/actions/index.js +20 -0
- package/cli/actions/index.js.map +1 -0
- package/cli/actions/info.d.ts +4 -0
- package/cli/actions/info.js +63 -0
- package/cli/actions/info.js.map +1 -0
- package/cli/actions/init.d.ts +12 -0
- package/cli/actions/init.js +83 -0
- package/cli/actions/init.js.map +1 -0
- package/cli/cli-error.d.ts +5 -0
- package/cli/cli-error.js +10 -0
- package/cli/cli-error.js.map +1 -0
- package/cli/cli-util.d.ts +21 -0
- package/cli/cli-util.js +211 -0
- package/cli/cli-util.js.map +1 -0
- package/cli/config.d.ts +10 -0
- package/cli/config.js +62 -0
- package/cli/config.js.map +1 -0
- package/cli/index.d.ts +7 -0
- package/cli/index.js +128 -0
- package/cli/index.js.map +1 -0
- package/cli/plugin-runner.d.ts +24 -0
- package/cli/plugin-runner.js +229 -0
- package/cli/plugin-runner.js.map +1 -0
- package/constants.d.ts +1 -0
- package/constants.js +6 -0
- package/constants.js.map +1 -0
- package/language-server/constants.d.ts +22 -0
- package/language-server/constants.js +27 -0
- package/language-server/constants.js.map +1 -0
- package/language-server/main.d.ts +1 -0
- package/language-server/main.js +13 -0
- package/language-server/main.js.map +1 -0
- package/language-server/types.d.ts +10 -0
- package/language-server/types.js +3 -0
- package/language-server/types.js.map +1 -0
- package/language-server/utils.d.ts +5 -0
- package/language-server/utils.js +22 -0
- package/language-server/utils.js.map +1 -0
- package/language-server/validator/attribute-application-validator.d.ts +15 -0
- package/language-server/validator/attribute-application-validator.js +246 -0
- package/language-server/validator/attribute-application-validator.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +9 -0
- package/language-server/validator/attribute-validator.js +14 -0
- package/language-server/validator/attribute-validator.js.map +1 -0
- package/language-server/validator/datamodel-validator.d.ts +22 -0
- package/language-server/validator/datamodel-validator.js +329 -0
- package/language-server/validator/datamodel-validator.js.map +1 -0
- package/language-server/validator/datasource-validator.d.ts +12 -0
- package/language-server/validator/datasource-validator.js +66 -0
- package/language-server/validator/datasource-validator.js.map +1 -0
- package/language-server/validator/enum-validator.d.ts +11 -0
- package/language-server/validator/enum-validator.js +25 -0
- package/language-server/validator/enum-validator.js.map +1 -0
- package/language-server/validator/expression-validator.d.ts +10 -0
- package/language-server/validator/expression-validator.js +135 -0
- package/language-server/validator/expression-validator.js.map +1 -0
- package/language-server/validator/function-decl-validator.d.ts +9 -0
- package/language-server/validator/function-decl-validator.js +13 -0
- package/language-server/validator/function-decl-validator.js.map +1 -0
- package/language-server/validator/function-invocation-validator.d.ts +11 -0
- package/language-server/validator/function-invocation-validator.js +135 -0
- package/language-server/validator/function-invocation-validator.js.map +1 -0
- package/language-server/validator/schema-validator.d.ts +13 -0
- package/language-server/validator/schema-validator.js +49 -0
- package/language-server/validator/schema-validator.js.map +1 -0
- package/language-server/validator/utils.d.ts +24 -0
- package/language-server/validator/utils.js +154 -0
- package/language-server/validator/utils.js.map +1 -0
- package/language-server/validator/zmodel-validator.d.ts +25 -0
- package/language-server/validator/zmodel-validator.js +83 -0
- package/language-server/validator/zmodel-validator.js.map +1 -0
- package/language-server/zmodel-code-action.d.ts +15 -0
- package/language-server/zmodel-code-action.js +118 -0
- package/language-server/zmodel-code-action.js.map +1 -0
- package/language-server/zmodel-definition.d.ts +7 -0
- package/language-server/zmodel-definition.js +31 -0
- package/language-server/zmodel-definition.js.map +1 -0
- package/language-server/zmodel-formatter.d.ts +9 -0
- package/language-server/zmodel-formatter.js +76 -0
- package/language-server/zmodel-formatter.js.map +1 -0
- package/language-server/zmodel-linker.d.ts +32 -0
- package/language-server/zmodel-linker.js +447 -0
- package/language-server/zmodel-linker.js.map +1 -0
- package/language-server/zmodel-module.d.ts +41 -0
- package/language-server/zmodel-module.js +83 -0
- package/language-server/zmodel-module.js.map +1 -0
- package/language-server/zmodel-scope.d.ts +16 -0
- package/language-server/zmodel-scope.js +100 -0
- package/language-server/zmodel-scope.js.map +1 -0
- package/language-server/zmodel-workspace-manager.d.ts +12 -0
- package/language-server/zmodel-workspace-manager.js +138 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -0
- package/package.json +140 -8
- package/plugins/access-policy/expression-writer.d.ts +46 -0
- package/plugins/access-policy/expression-writer.js +580 -0
- package/plugins/access-policy/expression-writer.js.map +1 -0
- package/plugins/access-policy/index.d.ts +4 -0
- package/plugins/access-policy/index.js +22 -0
- package/plugins/access-policy/index.js.map +1 -0
- package/plugins/access-policy/policy-guard-generator.d.ts +22 -0
- package/plugins/access-policy/policy-guard-generator.js +634 -0
- package/plugins/access-policy/policy-guard-generator.js.map +1 -0
- package/plugins/model-meta/index.d.ts +4 -0
- package/plugins/model-meta/index.js +232 -0
- package/plugins/model-meta/index.js.map +1 -0
- package/plugins/plugin-utils.d.ts +17 -0
- package/plugins/plugin-utils.js +80 -0
- package/plugins/plugin-utils.js.map +1 -0
- package/plugins/prisma/indent-string.d.ts +4 -0
- package/plugins/prisma/indent-string.js +12 -0
- package/plugins/prisma/indent-string.js.map +1 -0
- package/plugins/prisma/index.d.ts +4 -0
- package/plugins/prisma/index.js +22 -0
- package/plugins/prisma/index.js.map +1 -0
- package/plugins/prisma/prisma-builder.d.ts +145 -0
- package/plugins/prisma/prisma-builder.js +358 -0
- package/plugins/prisma/prisma-builder.js.map +1 -0
- package/plugins/prisma/schema-generator.d.ts +29 -0
- package/plugins/prisma/schema-generator.js +336 -0
- package/plugins/prisma/schema-generator.js.map +1 -0
- package/plugins/prisma/zmodel-code-generator.d.ts +30 -0
- package/plugins/prisma/zmodel-code-generator.js +124 -0
- package/plugins/prisma/zmodel-code-generator.js.map +1 -0
- package/plugins/zod/generator.d.ts +4 -0
- package/plugins/zod/generator.js +254 -0
- package/plugins/zod/generator.js.map +1 -0
- package/plugins/zod/index.d.ts +4 -0
- package/plugins/zod/index.js +24 -0
- package/plugins/zod/index.js.map +1 -0
- package/plugins/zod/transformer.d.ts +68 -0
- package/plugins/zod/transformer.js +554 -0
- package/plugins/zod/transformer.js.map +1 -0
- package/plugins/zod/types.d.ts +25 -0
- package/plugins/zod/types.js +3 -0
- package/plugins/zod/types.js.map +1 -0
- package/plugins/zod/utils/removeDir.d.ts +1 -0
- package/plugins/zod/utils/removeDir.js +30 -0
- package/plugins/zod/utils/removeDir.js.map +1 -0
- package/plugins/zod/utils/schema-gen.d.ts +3 -0
- package/plugins/zod/utils/schema-gen.js +188 -0
- package/plugins/zod/utils/schema-gen.js.map +1 -0
- package/res/prism-zmodel.js +20 -0
- package/res/starter.zmodel +51 -0
- package/res/stdlib.zmodel +506 -0
- package/telemetry.d.ts +21 -0
- package/telemetry.js +129 -0
- package/telemetry.js.map +1 -0
- package/utils/ast-utils.d.ts +13 -0
- package/utils/ast-utils.js +136 -0
- package/utils/ast-utils.js.map +1 -0
- package/utils/exec-utils.d.ts +6 -0
- package/utils/exec-utils.js +13 -0
- package/utils/exec-utils.js.map +1 -0
- package/utils/pkg-utils.d.ts +3 -0
- package/utils/pkg-utils.js +64 -0
- package/utils/pkg-utils.js.map +1 -0
- package/utils/typescript-expression-transformer.d.ts +54 -0
- package/utils/typescript-expression-transformer.js +326 -0
- package/utils/typescript-expression-transformer.js.map +1 -0
- package/utils/version-utils.d.ts +1 -0
- package/utils/version-utils.js +20 -0
- package/utils/version-utils.js.map +1 -0
- package/.vscode/extensions.json +0 -7
- package/.vscode/launch.json +0 -49
- package/.vscode/settings.json +0 -4
- package/packages/internal/jest.config.ts +0 -32
- package/packages/internal/package.json +0 -42
- package/packages/internal/src/constants.ts +0 -1
- package/packages/internal/src/handler/data/guard-utils.ts +0 -7
- package/packages/internal/src/handler/data/handler.ts +0 -415
- package/packages/internal/src/handler/data/query-processor.ts +0 -504
- package/packages/internal/src/handler/index.ts +0 -1
- package/packages/internal/src/handler/types.ts +0 -20
- package/packages/internal/src/index.ts +0 -3
- package/packages/internal/src/request-handler.ts +0 -27
- package/packages/internal/src/request.ts +0 -101
- package/packages/internal/src/types.ts +0 -40
- package/packages/internal/tests/query-processor.test.ts +0 -172
- package/packages/internal/tsconfig.json +0 -21
- package/packages/runtime/auth.d.ts +0 -1
- package/packages/runtime/auth.js +0 -3
- package/packages/runtime/hooks.d.ts +0 -10
- package/packages/runtime/hooks.js +0 -3
- package/packages/runtime/index.d.ts +0 -3
- package/packages/runtime/index.js +0 -1
- package/packages/runtime/package-lock.json +0 -512
- package/packages/runtime/package.json +0 -16
- package/packages/runtime/server.d.ts +0 -1
- package/packages/runtime/server.js +0 -3
- package/packages/runtime/types.d.ts +0 -1
- package/packages/runtime/types.js +0 -3
- package/packages/schema/.eslintrc.json +0 -13
- package/packages/schema/.vscodeignore +0 -4
- package/packages/schema/asset/logo-dark.png +0 -0
- package/packages/schema/asset/logo-light.png +0 -0
- package/packages/schema/bin/cli +0 -3
- package/packages/schema/jest.config.ts +0 -32
- package/packages/schema/langium-config.json +0 -14
- package/packages/schema/langium-quickstart.md +0 -41
- package/packages/schema/language-configuration.json +0 -30
- package/packages/schema/package.json +0 -96
- package/packages/schema/src/cli/cli-util.ts +0 -80
- package/packages/schema/src/cli/index.ts +0 -64
- package/packages/schema/src/extension.ts +0 -76
- package/packages/schema/src/generator/constants.ts +0 -5
- package/packages/schema/src/generator/index.ts +0 -92
- package/packages/schema/src/generator/next-auth/index.ts +0 -197
- package/packages/schema/src/generator/package.template.json +0 -9
- package/packages/schema/src/generator/prisma/expression-writer.ts +0 -352
- package/packages/schema/src/generator/prisma/index.ts +0 -32
- package/packages/schema/src/generator/prisma/plain-expression-builder.ts +0 -91
- package/packages/schema/src/generator/prisma/prisma-builder.ts +0 -366
- package/packages/schema/src/generator/prisma/query-gard-generator.ts +0 -208
- package/packages/schema/src/generator/prisma/schema-generator.ts +0 -300
- package/packages/schema/src/generator/react-hooks/index.ts +0 -181
- package/packages/schema/src/generator/service/index.ts +0 -107
- package/packages/schema/src/generator/tsconfig.template.json +0 -17
- package/packages/schema/src/generator/types.ts +0 -17
- package/packages/schema/src/generator/utils.ts +0 -9
- package/packages/schema/src/language-server/generated/ast.ts +0 -603
- package/packages/schema/src/language-server/generated/grammar.ts +0 -2190
- package/packages/schema/src/language-server/generated/module.ts +0 -24
- package/packages/schema/src/language-server/main.ts +0 -12
- package/packages/schema/src/language-server/stdlib.zmodel +0 -22
- package/packages/schema/src/language-server/types.ts +0 -9
- package/packages/schema/src/language-server/zmodel-index.ts +0 -33
- package/packages/schema/src/language-server/zmodel-linker.ts +0 -409
- package/packages/schema/src/language-server/zmodel-module.ts +0 -90
- package/packages/schema/src/language-server/zmodel-scope.ts +0 -21
- package/packages/schema/src/language-server/zmodel-validator.ts +0 -35
- package/packages/schema/src/language-server/zmodel.langium +0 -186
- package/packages/schema/src/utils/exec-utils.ts +0 -5
- package/packages/schema/src/utils/indent-string.ts +0 -6
- package/packages/schema/syntaxes/zmodel.json +0 -57
- package/packages/schema/syntaxes/zmodel.tmLanguage.json +0 -57
- package/packages/schema/tests/generator/expression-writer.test.ts +0 -676
- package/packages/schema/tests/generator/prisma-builder.test.ts +0 -138
- package/packages/schema/tests/schema/parser.test.ts +0 -423
- package/packages/schema/tests/schema/sample-todo.test.ts +0 -14
- package/packages/schema/tests/utils.ts +0 -38
- package/packages/schema/tsconfig.json +0 -23
- package/pnpm-workspace.yaml +0 -3
- package/samples/todo/.env +0 -2
- package/samples/todo/.eslintrc.json +0 -3
- package/samples/todo/.vscode/launch.json +0 -11
- package/samples/todo/README.md +0 -34
- package/samples/todo/components/AuthGuard.tsx +0 -17
- package/samples/todo/components/Avatar.tsx +0 -22
- package/samples/todo/components/BreadCrumb.tsx +0 -44
- package/samples/todo/components/ManageMembers.tsx +0 -134
- package/samples/todo/components/NavBar.tsx +0 -57
- package/samples/todo/components/SpaceMembers.tsx +0 -76
- package/samples/todo/components/Spaces.tsx +0 -28
- package/samples/todo/components/TimeInfo.tsx +0 -17
- package/samples/todo/components/Todo.tsx +0 -72
- package/samples/todo/components/TodoList.tsx +0 -77
- package/samples/todo/lib/context.ts +0 -31
- package/samples/todo/next.config.js +0 -10
- package/samples/todo/package-lock.json +0 -7527
- package/samples/todo/package.json +0 -45
- package/samples/todo/pages/_app.tsx +0 -50
- package/samples/todo/pages/api/auth/[...nextauth].ts +0 -83
- package/samples/todo/pages/api/zenstack/[...path].ts +0 -16
- package/samples/todo/pages/create-space.tsx +0 -114
- package/samples/todo/pages/index.tsx +0 -32
- package/samples/todo/pages/space/[slug]/[listId]/index.tsx +0 -88
- package/samples/todo/pages/space/[slug]/index.tsx +0 -169
- package/samples/todo/postcss.config.js +0 -6
- package/samples/todo/public/avatar.jpg +0 -0
- package/samples/todo/public/favicon.ico +0 -0
- package/samples/todo/public/logo.png +0 -0
- package/samples/todo/public/vercel.svg +0 -4
- package/samples/todo/styles/globals.css +0 -7
- package/samples/todo/tailwind.config.js +0 -11
- package/samples/todo/tsconfig.json +0 -28
- package/samples/todo/types/next-auth.d.ts +0 -14
- package/samples/todo/types/next.d.ts +0 -16
- package/samples/todo/zenstack/migrations/20221014084317_init/migration.sql +0 -153
- package/samples/todo/zenstack/migrations/20221020094651_upate_cli/migration.sql +0 -23
- package/samples/todo/zenstack/migrations/migration_lock.toml +0 -3
- package/samples/todo/zenstack/schema.prisma +0 -126
- package/samples/todo/zenstack/schema.zmodel +0 -161
- package/tests/integration/jest.config.ts +0 -16
- package/tests/integration/package-lock.json +0 -1081
- package/tests/integration/package.json +0 -27
- package/tests/integration/tests/operation-coverate.test.ts +0 -563
- package/tests/integration/tests/operations.zmodel +0 -69
- package/tests/integration/tests/todo-e2e.test.ts +0 -577
- package/tests/integration/tests/todo.zmodel +0 -123
- package/tests/integration/tests/tsconfig.template.json +0 -10
- package/tests/integration/tests/utils.ts +0 -133
- package/tests/integration/tsconfig.json +0 -10
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ZModelScopeProvider = exports.ZModelScopeComputation = void 0;
|
|
13
|
+
const ast_1 = require("@zenstackhq/language/ast");
|
|
14
|
+
const langium_1 = require("langium");
|
|
15
|
+
const ast_utils_1 = require("../utils/ast-utils");
|
|
16
|
+
const constants_1 = require("./constants");
|
|
17
|
+
/**
|
|
18
|
+
* Custom Langium ScopeComputation implementation which adds enum fields into global scope
|
|
19
|
+
*/
|
|
20
|
+
class ZModelScopeComputation extends langium_1.DefaultScopeComputation {
|
|
21
|
+
constructor(services) {
|
|
22
|
+
super(services);
|
|
23
|
+
this.services = services;
|
|
24
|
+
}
|
|
25
|
+
computeExports(document, cancelToken) {
|
|
26
|
+
const _super = Object.create(null, {
|
|
27
|
+
computeExports: { get: () => super.computeExports }
|
|
28
|
+
});
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
const result = yield _super.computeExports.call(this, document, cancelToken);
|
|
31
|
+
// add enum fields so they can be globally resolved across modules
|
|
32
|
+
for (const node of (0, langium_1.streamAllContents)(document.parseResult.value)) {
|
|
33
|
+
if (cancelToken) {
|
|
34
|
+
yield (0, langium_1.interruptAndCheck)(cancelToken);
|
|
35
|
+
}
|
|
36
|
+
if ((0, ast_1.isEnumField)(node)) {
|
|
37
|
+
const desc = this.services.workspace.AstNodeDescriptionProvider.createDescription(node, node.name, document);
|
|
38
|
+
result.push(desc);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
computeLocalScopes(document, cancelToken) {
|
|
45
|
+
const result = super.computeLocalScopes(document, cancelToken);
|
|
46
|
+
//the $resolvedFields would be used in Linking stage for all the documents
|
|
47
|
+
//so we need to set it at the end of the scope computation
|
|
48
|
+
this.resolveBaseModels(document);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
resolveBaseModels(document) {
|
|
52
|
+
const model = document.parseResult.value;
|
|
53
|
+
model.declarations.forEach((decl) => {
|
|
54
|
+
if (decl.$type === 'DataModel') {
|
|
55
|
+
const dataModel = decl;
|
|
56
|
+
dataModel.$resolvedFields = [...dataModel.fields];
|
|
57
|
+
dataModel.superTypes.forEach((superType) => {
|
|
58
|
+
const superTypeDecl = superType.ref;
|
|
59
|
+
if (superTypeDecl) {
|
|
60
|
+
superTypeDecl.fields.forEach((field) => {
|
|
61
|
+
const cloneField = Object.assign({}, field);
|
|
62
|
+
cloneField.$isInherited = true;
|
|
63
|
+
const mutable = cloneField;
|
|
64
|
+
// update container
|
|
65
|
+
mutable.$container = dataModel;
|
|
66
|
+
dataModel.$resolvedFields.push(cloneField);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.ZModelScopeComputation = ZModelScopeComputation;
|
|
75
|
+
class ZModelScopeProvider extends langium_1.DefaultScopeProvider {
|
|
76
|
+
constructor(services) {
|
|
77
|
+
super(services);
|
|
78
|
+
}
|
|
79
|
+
getGlobalScope(referenceType, context) {
|
|
80
|
+
const model = (0, langium_1.getContainerOfType)(context.container, ast_1.isModel);
|
|
81
|
+
if (!model) {
|
|
82
|
+
return langium_1.EMPTY_SCOPE;
|
|
83
|
+
}
|
|
84
|
+
const importedUris = (0, langium_1.stream)(model.imports).map(ast_utils_1.resolveImportUri).nonNullable();
|
|
85
|
+
const importedElements = this.indexManager.allElements(referenceType).filter((des) => {
|
|
86
|
+
var _a;
|
|
87
|
+
// allow current document
|
|
88
|
+
return (0, langium_1.equalURI)(des.documentUri, (_a = model.$document) === null || _a === void 0 ? void 0 : _a.uri) ||
|
|
89
|
+
// allow stdlib
|
|
90
|
+
des.documentUri.path.endsWith(constants_1.STD_LIB_MODULE_NAME) ||
|
|
91
|
+
// allow plugin models
|
|
92
|
+
des.documentUri.path.endsWith(constants_1.PLUGIN_MODULE_NAME) ||
|
|
93
|
+
// allow imported documents
|
|
94
|
+
importedUris.some((importedUri) => (des.documentUri, importedUri));
|
|
95
|
+
});
|
|
96
|
+
return new langium_1.StreamScope(importedElements);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.ZModelScopeProvider = ZModelScopeProvider;
|
|
100
|
+
//# sourceMappingURL=zmodel-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zmodel-scope.js","sourceRoot":"","sources":["../../src/language-server/zmodel-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DefaultWorkspaceManager, LangiumDocument } from 'langium';
|
|
2
|
+
import { CancellationToken, WorkspaceFolder } from 'vscode-languageserver';
|
|
3
|
+
import { URI } from 'vscode-uri';
|
|
4
|
+
/**
|
|
5
|
+
* Custom Langium WorkspaceManager implementation which automatically loads stdlib.zmodel
|
|
6
|
+
*/
|
|
7
|
+
export default class ZModelWorkspaceManager extends DefaultWorkspaceManager {
|
|
8
|
+
pluginModels: Set<string>;
|
|
9
|
+
protected loadAdditionalDocuments(_folders: WorkspaceFolder[], _collector: (document: LangiumDocument) => void): Promise<void>;
|
|
10
|
+
initializeWorkspace(folders: WorkspaceFolder[], cancelToken?: CancellationToken): Promise<void>;
|
|
11
|
+
protected loadPluginModels(workspaceFolder: WorkspaceFolder, folderPath: URI, pluginModels: Set<string>, collector: (document: LangiumDocument) => void): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const ast_1 = require("@zenstackhq/language/ast");
|
|
16
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
17
|
+
const langium_1 = require("langium");
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
20
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
21
|
+
const constants_1 = require("./constants");
|
|
22
|
+
/**
|
|
23
|
+
* Custom Langium WorkspaceManager implementation which automatically loads stdlib.zmodel
|
|
24
|
+
*/
|
|
25
|
+
class ZModelWorkspaceManager extends langium_1.DefaultWorkspaceManager {
|
|
26
|
+
constructor() {
|
|
27
|
+
super(...arguments);
|
|
28
|
+
this.pluginModels = new Set();
|
|
29
|
+
}
|
|
30
|
+
loadAdditionalDocuments(_folders, _collector) {
|
|
31
|
+
const _super = Object.create(null, {
|
|
32
|
+
loadAdditionalDocuments: { get: () => super.loadAdditionalDocuments }
|
|
33
|
+
});
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
yield _super.loadAdditionalDocuments.call(this, _folders, _collector);
|
|
36
|
+
const stdLibUri = vscode_uri_1.URI.file(path_1.default.join(__dirname, '../res', constants_1.STD_LIB_MODULE_NAME));
|
|
37
|
+
console.log(`Adding stdlib document from ${stdLibUri}`);
|
|
38
|
+
const stdlib = this.langiumDocuments.getOrCreateDocument(stdLibUri);
|
|
39
|
+
_collector(stdlib);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
initializeWorkspace(folders, cancelToken = vscode_languageserver_1.CancellationToken.None) {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
const fileExtensions = this.serviceRegistry.all.flatMap((e) => e.LanguageMetaData.fileExtensions);
|
|
45
|
+
const documents = [];
|
|
46
|
+
const collector = (document) => {
|
|
47
|
+
documents.push(document);
|
|
48
|
+
if (!this.langiumDocuments.hasDocument(document.uri)) {
|
|
49
|
+
this.langiumDocuments.addDocument(document);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
yield this.loadAdditionalDocuments(folders, collector);
|
|
53
|
+
yield Promise.all(folders
|
|
54
|
+
.map((wf) => [wf, this.getRootFolder(wf)])
|
|
55
|
+
.map((entry) => __awaiter(this, void 0, void 0, function* () { return this.traverseFolder(...entry, fileExtensions, collector); })));
|
|
56
|
+
// find plugin models
|
|
57
|
+
documents.forEach((doc) => {
|
|
58
|
+
const parsed = doc.parseResult.value;
|
|
59
|
+
parsed.declarations.forEach((decl) => {
|
|
60
|
+
if ((0, ast_1.isPlugin)(decl)) {
|
|
61
|
+
const providerField = decl.fields.find((f) => f.name === 'provider');
|
|
62
|
+
if (providerField) {
|
|
63
|
+
const provider = (0, sdk_1.getLiteral)(providerField.value);
|
|
64
|
+
if (provider) {
|
|
65
|
+
this.pluginModels.add(provider);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
if (this.pluginModels.size > 0) {
|
|
72
|
+
console.log(`Used plugin documents: ${Array.from(this.pluginModels)}`);
|
|
73
|
+
// the loaded plugin models would be removed from the set
|
|
74
|
+
const unLoadedPluginModels = new Set(this.pluginModels);
|
|
75
|
+
yield Promise.all(folders
|
|
76
|
+
.map((wf) => [wf, this.getRootFolder(wf)])
|
|
77
|
+
.map((entry) => __awaiter(this, void 0, void 0, function* () { return this.loadPluginModels(...entry, unLoadedPluginModels, collector); })));
|
|
78
|
+
if (unLoadedPluginModels.size > 0) {
|
|
79
|
+
console.warn(`The following plugin documents could not be loaded: ${Array.from(unLoadedPluginModels)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Only after creating all documents do we check whether we need to cancel the initialization
|
|
83
|
+
// The document builder will later pick up on all unprocessed documents
|
|
84
|
+
yield (0, langium_1.interruptAndCheck)(cancelToken);
|
|
85
|
+
yield this.documentBuilder.build(documents, undefined, cancelToken);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
loadPluginModels(workspaceFolder, folderPath, pluginModels, collector) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
const content = yield (yield this.fileSystemProvider.readDirectory(folderPath)).sort((a, b) => {
|
|
91
|
+
// make sure the node_moudules folder is always the first one to be checked
|
|
92
|
+
// so it could be early exited if the plugin is found
|
|
93
|
+
if (a.isDirectory && b.isDirectory) {
|
|
94
|
+
const aName = vscode_uri_1.Utils.basename(a.uri);
|
|
95
|
+
if (aName === 'node_modules') {
|
|
96
|
+
return -1;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return 1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
for (const entry of content) {
|
|
107
|
+
if (entry.isDirectory) {
|
|
108
|
+
const name = vscode_uri_1.Utils.basename(entry.uri);
|
|
109
|
+
if (name === 'node_modules') {
|
|
110
|
+
for (const plugin of Array.from(pluginModels)) {
|
|
111
|
+
const path = vscode_uri_1.Utils.joinPath(entry.uri, plugin, constants_1.PLUGIN_MODULE_NAME);
|
|
112
|
+
try {
|
|
113
|
+
this.fileSystemProvider.readFileSync(path);
|
|
114
|
+
const document = this.langiumDocuments.getOrCreateDocument(path);
|
|
115
|
+
collector(document);
|
|
116
|
+
console.log(`Adding plugin document from ${path.path}`);
|
|
117
|
+
pluginModels.delete(plugin);
|
|
118
|
+
// early exit if all plugins are loaded
|
|
119
|
+
if (pluginModels.size === 0) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (_a) {
|
|
124
|
+
// no-op. The module might be found in another node_modules folder
|
|
125
|
+
// will show the warning message eventually if not found
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
yield this.loadPluginModels(workspaceFolder, entry.uri, pluginModels, collector);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.default = ZModelWorkspaceManager;
|
|
138
|
+
//# sourceMappingURL=zmodel-workspace-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zmodel-workspace-manager.js","sourceRoot":"","sources":["../../src/language-server/zmodel-workspace-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,145 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zenstack",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"author":
|
|
8
|
-
|
|
3
|
+
"publisher": "zenstack",
|
|
4
|
+
"displayName": "ZenStack Language Tools",
|
|
5
|
+
"description": "A toolkit for building secure CRUD apps with Next.js + Typescript",
|
|
6
|
+
"version": "1.0.1",
|
|
7
|
+
"author": {
|
|
8
|
+
"name": "ZenStack Team"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://zenstack.dev",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"fullstack",
|
|
14
|
+
"react",
|
|
15
|
+
"typescript",
|
|
16
|
+
"data modeling"
|
|
17
|
+
],
|
|
18
|
+
"preview": false,
|
|
19
|
+
"icon": "asset/logo-256-bg.png",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/zenstackhq/zenstack"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"directory": "dist",
|
|
26
|
+
"linkDirectory": true
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"vscode": "^1.56.0"
|
|
30
|
+
},
|
|
31
|
+
"categories": [
|
|
32
|
+
"Programming Languages"
|
|
33
|
+
],
|
|
34
|
+
"contributes": {
|
|
35
|
+
"languages": [
|
|
36
|
+
{
|
|
37
|
+
"id": "zmodel",
|
|
38
|
+
"aliases": [
|
|
39
|
+
"ZenStack Model",
|
|
40
|
+
"zmodel"
|
|
41
|
+
],
|
|
42
|
+
"extensions": [
|
|
43
|
+
".zmodel"
|
|
44
|
+
],
|
|
45
|
+
"configuration": "./language-configuration.json",
|
|
46
|
+
"icon": {
|
|
47
|
+
"light": "./asset/logo-light-256.png",
|
|
48
|
+
"dark": "./asset/logo-dark-256.png"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"grammars": [
|
|
53
|
+
{
|
|
54
|
+
"language": "zmodel",
|
|
55
|
+
"scopeName": "source.zmodel",
|
|
56
|
+
"path": "./syntaxes/zmodel.tmLanguage.json"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"activationEvents": [
|
|
61
|
+
"onLanguage:zmodel"
|
|
62
|
+
],
|
|
63
|
+
"bin": {
|
|
64
|
+
"zenstack": "bin/cli"
|
|
65
|
+
},
|
|
66
|
+
"main": "./bundle/extension.js",
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@paralleldrive/cuid2": "^2.2.0",
|
|
69
|
+
"@prisma/generator-helper": "^5.0.0",
|
|
70
|
+
"async-exit-hook": "^2.0.1",
|
|
71
|
+
"change-case": "^4.1.2",
|
|
72
|
+
"colors": "1.4.0",
|
|
73
|
+
"commander": "^8.3.0",
|
|
74
|
+
"get-latest-version": "^5.0.1",
|
|
75
|
+
"langium": "1.2.0",
|
|
76
|
+
"lower-case-first": "^2.0.2",
|
|
77
|
+
"mixpanel": "^0.17.0",
|
|
78
|
+
"node-machine-id": "^1.1.12",
|
|
79
|
+
"ora": "^5.4.1",
|
|
80
|
+
"pluralize": "^8.0.0",
|
|
81
|
+
"promisify": "^0.0.3",
|
|
82
|
+
"semver": "^7.3.8",
|
|
83
|
+
"sleep-promise": "^9.1.0",
|
|
84
|
+
"strip-color": "^0.1.0",
|
|
85
|
+
"tiny-invariant": "^1.3.1",
|
|
86
|
+
"ts-morph": "^16.0.0",
|
|
87
|
+
"ts-pattern": "^4.3.0",
|
|
88
|
+
"upper-case-first": "^2.0.2",
|
|
89
|
+
"uuid": "^9.0.0",
|
|
90
|
+
"vscode-jsonrpc": "^8.0.2",
|
|
91
|
+
"vscode-languageclient": "^8.0.2",
|
|
92
|
+
"vscode-languageserver": "^8.0.2",
|
|
93
|
+
"vscode-languageserver-textdocument": "^1.0.7",
|
|
94
|
+
"vscode-uri": "^3.0.6",
|
|
95
|
+
"zod": "3.21.1",
|
|
96
|
+
"zod-validation-error": "^0.2.1",
|
|
97
|
+
"@zenstackhq/language": "1.0.0",
|
|
98
|
+
"@zenstackhq/sdk": "1.0.0"
|
|
99
|
+
},
|
|
100
|
+
"devDependencies": {
|
|
101
|
+
"@prisma/client": "^4.8.0",
|
|
102
|
+
"@types/async-exit-hook": "^2.0.0",
|
|
103
|
+
"@types/jest": "^29.5.0",
|
|
104
|
+
"@types/node": "^18.0.0",
|
|
105
|
+
"@types/pluralize": "^0.0.29",
|
|
106
|
+
"@types/semver": "^7.3.13",
|
|
107
|
+
"@types/strip-color": "^0.1.0",
|
|
108
|
+
"@types/tmp": "^0.2.3",
|
|
109
|
+
"@types/uuid": "^8.3.4",
|
|
110
|
+
"@types/vscode": "^1.56.0",
|
|
111
|
+
"@typescript-eslint/eslint-plugin": "^5.42.0",
|
|
112
|
+
"@typescript-eslint/parser": "^5.42.0",
|
|
113
|
+
"@vscode/vsce": "^2.19.0",
|
|
114
|
+
"concurrently": "^7.4.0",
|
|
115
|
+
"copyfiles": "^2.4.1",
|
|
116
|
+
"dotenv": "^16.0.3",
|
|
117
|
+
"esbuild": "^0.15.12",
|
|
118
|
+
"eslint": "^8.27.0",
|
|
119
|
+
"eslint-plugin-jest": "^27.1.7",
|
|
120
|
+
"jest": "^29.5.0",
|
|
121
|
+
"prisma": "^4.8.0",
|
|
122
|
+
"renamer": "^4.0.0",
|
|
123
|
+
"rimraf": "^3.0.2",
|
|
124
|
+
"tmp": "^0.2.1",
|
|
125
|
+
"ts-jest": "^29.0.3",
|
|
126
|
+
"ts-node": "^10.9.1",
|
|
127
|
+
"tsc-alias": "^1.7.0",
|
|
128
|
+
"typescript": "^4.8.4",
|
|
129
|
+
"vitest": "^0.29.7",
|
|
130
|
+
"@zenstackhq/runtime": "1.0.0"
|
|
131
|
+
},
|
|
9
132
|
"scripts": {
|
|
10
|
-
"
|
|
11
|
-
"
|
|
133
|
+
"vscode:publish": "vsce publish --no-dependencies",
|
|
134
|
+
"vscode:prepublish": "pnpm bundle",
|
|
135
|
+
"vscode:package": "vsce package --no-dependencies",
|
|
136
|
+
"clean": "rimraf bundle dist",
|
|
137
|
+
"build": "pnpm clean && pnpm lint && tsc && copyfiles -F \"bin/*\" dist && copyfiles ./README-global.md ./LICENSE ./package.json dist && renamer --replace \"README.md\" dist/README-global.md && copyfiles -u 1 \"src/res/*\" dist && node build/post-build.js && pnpm pack dist --pack-destination '../../../.build'",
|
|
138
|
+
"bundle": "pnpm clean && pnpm lint && node build/bundle.js --minify",
|
|
139
|
+
"watch": "tsc --watch",
|
|
140
|
+
"lint": "eslint src tests --ext ts",
|
|
141
|
+
"test": "ZENSTACK_TEST=1 jest",
|
|
142
|
+
"publish-dev": "pnpm publish --registry http://localhost:4873",
|
|
143
|
+
"postinstall": "node bin/post-install.js"
|
|
12
144
|
}
|
|
13
145
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Expression } from '@zenstackhq/language/ast';
|
|
2
|
+
import { CodeBlockWriter } from 'ts-morph';
|
|
3
|
+
export declare const TRUE = "{ AND: [] }";
|
|
4
|
+
export declare const FALSE = "{ OR: [] }";
|
|
5
|
+
/**
|
|
6
|
+
* Utility for writing ZModel expression as Prisma query argument objects into a ts-morph writer
|
|
7
|
+
*/
|
|
8
|
+
export declare class ExpressionWriter {
|
|
9
|
+
private readonly writer;
|
|
10
|
+
private readonly isPostGuard;
|
|
11
|
+
private readonly plainExprBuilder;
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new ExpressionWriter
|
|
14
|
+
*
|
|
15
|
+
* @param isPostGuard indicates if we're writing for post-update conditions
|
|
16
|
+
*/
|
|
17
|
+
constructor(writer: CodeBlockWriter, isPostGuard?: boolean);
|
|
18
|
+
/**
|
|
19
|
+
* Writes the given ZModel expression.
|
|
20
|
+
*/
|
|
21
|
+
write(expr: Expression): void;
|
|
22
|
+
private writeReference;
|
|
23
|
+
private writeMemberAccess;
|
|
24
|
+
private writeExprList;
|
|
25
|
+
private writeBinary;
|
|
26
|
+
private writeIn;
|
|
27
|
+
private writeCollectionPredicate;
|
|
28
|
+
private isFieldAccess;
|
|
29
|
+
private guard;
|
|
30
|
+
private plain;
|
|
31
|
+
private writeComparison;
|
|
32
|
+
private requireIdFields;
|
|
33
|
+
private equivalentRefs;
|
|
34
|
+
private writeFieldReference;
|
|
35
|
+
private isAuthOrAuthMemberAccess;
|
|
36
|
+
private writeOperator;
|
|
37
|
+
private writeFieldCondition;
|
|
38
|
+
private block;
|
|
39
|
+
private isModelTyped;
|
|
40
|
+
private mapOperator;
|
|
41
|
+
private negateOperator;
|
|
42
|
+
private writeLogical;
|
|
43
|
+
private writeUnary;
|
|
44
|
+
private writeLiteral;
|
|
45
|
+
private writeInvocation;
|
|
46
|
+
}
|