zenstack 0.5.0 → 0.6.0-pre.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.
Files changed (62) hide show
  1. package/{LICENSE.md → LICENSE} +0 -0
  2. package/bin/cli +1 -1
  3. package/package.json +18 -13
  4. package/bin/post-install.js +0 -0
  5. package/bundle/asset/logo-256-bg.png +0 -0
  6. package/bundle/asset/logo-dark-256.png +0 -0
  7. package/bundle/asset/logo-light-256.png +0 -0
  8. package/bundle/cli/index.js +0 -6952
  9. package/bundle/extension.js +0 -39
  10. package/bundle/language-server/main.js +0 -6208
  11. package/bundle/res/package.template.json +0 -9
  12. package/bundle/res/prism-zmodel.js +0 -22
  13. package/bundle/res/stdlib.zmodel +0 -218
  14. package/bundle/res/tsconfig.template.json +0 -17
  15. package/src/cli/cli-error.ts +0 -4
  16. package/src/cli/cli-util.ts +0 -214
  17. package/src/cli/index.ts +0 -246
  18. package/src/extension.ts +0 -76
  19. package/src/generator/ast-utils.ts +0 -18
  20. package/src/generator/constants.ts +0 -6
  21. package/src/generator/field-constraint/index.ts +0 -304
  22. package/src/generator/index.ts +0 -86
  23. package/src/generator/prisma/expression-writer.ts +0 -360
  24. package/src/generator/prisma/index.ts +0 -44
  25. package/src/generator/prisma/prisma-builder.ts +0 -370
  26. package/src/generator/prisma/query-guard-generator.ts +0 -249
  27. package/src/generator/prisma/schema-generator.ts +0 -313
  28. package/src/generator/prisma/typescript-expression-transformer.ts +0 -108
  29. package/src/generator/react-hooks/index.ts +0 -273
  30. package/src/generator/service/index.ts +0 -113
  31. package/src/generator/tsc/index.ts +0 -59
  32. package/src/generator/types.ts +0 -20
  33. package/src/global.d.ts +0 -3
  34. package/src/language-server/constants.ts +0 -29
  35. package/src/language-server/generated/ast.ts +0 -643
  36. package/src/language-server/generated/grammar.ts +0 -2492
  37. package/src/language-server/generated/module.ts +0 -24
  38. package/src/language-server/langium-ext.d.ts +0 -22
  39. package/src/language-server/main.ts +0 -13
  40. package/src/language-server/types.ts +0 -25
  41. package/src/language-server/utils.ts +0 -21
  42. package/src/language-server/validator/attribute-validator.ts +0 -11
  43. package/src/language-server/validator/datamodel-validator.ts +0 -426
  44. package/src/language-server/validator/datasource-validator.ts +0 -102
  45. package/src/language-server/validator/enum-validator.ts +0 -14
  46. package/src/language-server/validator/expression-validator.ts +0 -48
  47. package/src/language-server/validator/schema-validator.ts +0 -31
  48. package/src/language-server/validator/utils.ts +0 -158
  49. package/src/language-server/validator/zmodel-validator.ts +0 -91
  50. package/src/language-server/zmodel-linker.ts +0 -453
  51. package/src/language-server/zmodel-module.ts +0 -131
  52. package/src/language-server/zmodel-scope.ts +0 -45
  53. package/src/language-server/zmodel-workspace-manager.ts +0 -23
  54. package/src/language-server/zmodel.langium +0 -207
  55. package/src/res/package.template.json +0 -9
  56. package/src/res/prism-zmodel.js +0 -22
  57. package/src/res/stdlib.zmodel +0 -218
  58. package/src/res/tsconfig.template.json +0 -17
  59. package/src/telemetry.ts +0 -119
  60. package/src/utils/exec-utils.ts +0 -8
  61. package/src/utils/indent-string.ts +0 -9
  62. package/src/utils/pkg-utils.ts +0 -63
@@ -1,113 +0,0 @@
1
- import { DataModel, isDataModel } from '@lang/generated/ast';
2
- import { camelCase } from 'change-case';
3
- import * as path from 'path';
4
- import { Project } from 'ts-morph';
5
- import { RUNTIME_PACKAGE } from '../constants';
6
- import { Context, Generator } from '../types';
7
-
8
- /**
9
- * Generates ZenStack service code
10
- */
11
- export default class ServiceGenerator implements Generator {
12
- get name() {
13
- return 'service';
14
- }
15
-
16
- get startMessage() {
17
- return 'Generating ZenStack service...';
18
- }
19
-
20
- get successMessage() {
21
- return 'Successfully generated ZenStack service';
22
- }
23
-
24
- async generate(context: Context) {
25
- const project = new Project();
26
- const sf = project.createSourceFile(
27
- path.join(context.generatedCodeDir, 'src/index.ts'),
28
- undefined,
29
- { overwrite: true }
30
- );
31
-
32
- const models = context.schema.declarations.filter((d): d is DataModel =>
33
- isDataModel(d)
34
- );
35
-
36
- sf.addStatements([
37
- `import { Prisma as P, PrismaClient } from "../.prisma";`,
38
- `import { DefaultService } from "${RUNTIME_PACKAGE}/lib/service";`,
39
- `import { CRUD } from "${RUNTIME_PACKAGE}/lib/handler/data/crud";`,
40
- `import type { QueryContext } from "${RUNTIME_PACKAGE}/lib/types";`,
41
- `import type { ${models
42
- .map((m) => m.name)
43
- .join(', ')} } from "../.prisma";`,
44
- ]);
45
-
46
- const cls = sf.addClass({
47
- name: 'ZenStackService',
48
- isExported: true,
49
- extends: 'DefaultService<PrismaClient>',
50
- });
51
-
52
- cls.addProperty({
53
- name: 'private crud',
54
- initializer: `new CRUD<PrismaClient>(this)`,
55
- });
56
-
57
- cls.addMethod({
58
- name: 'initializePrisma',
59
- }).setBodyText(`
60
- const logConfig = (this.config.log || [])
61
- .filter(item => typeof item === 'string' ? ['info', 'warn', 'error', 'query'].includes(item): ['info', 'warn', 'error', 'query'].includes(item.level));
62
- return new PrismaClient({log: logConfig as any });
63
- `);
64
-
65
- cls.addMethod({
66
- name: 'loadGuardModule',
67
- isAsync: true,
68
- }).setBodyText(`
69
- return import('./query/guard');
70
- `);
71
-
72
- cls.addMethod({
73
- name: 'loadFieldConstraintModule',
74
- isAsync: true,
75
- }).setBodyText(`
76
- return import('./field-constraint');
77
- `);
78
-
79
- // server-side CRUD operations per model
80
- for (const model of models) {
81
- cls.addGetAccessor({
82
- name: camelCase(model.name),
83
- }).setBodyText(`
84
- return {
85
- get: <T extends P.${model.name}FindFirstArgs>(context: QueryContext, id: string, args?: P.SelectSubset<T, P.Subset<P.${model.name}FindFirstArgs, 'select' | 'include'>>) =>
86
- this.crud.get('${model.name}', id, args, context) as Promise<P.CheckSelect<T, ${model.name}, P.${model.name}GetPayload<T>> | undefined>,
87
- find: <T extends P.${model.name}FindManyArgs>(context: QueryContext, args?: P.SelectSubset<T, P.${model.name}FindManyArgs>) =>
88
- this.crud.find('${model.name}', args, context) as Promise<P.CheckSelect<T, Array<${model.name}>, Array<P.${model.name}GetPayload<T>>>>,
89
- create: <T extends P.${model.name}CreateArgs>(context: QueryContext, args: P.${model.name}CreateArgs) =>
90
- this.crud.create('${model.name}', args, context) as Promise<P.CheckSelect<T, ${model.name}, P.${model.name}GetPayload<T>>>,
91
- update: <T extends Omit<P.${model.name}UpdateArgs, 'where'>>(context: QueryContext, id: string, args: Omit<P.${model.name}UpdateArgs, 'where'>) =>
92
- this.crud.update('${model.name}', id, args, context) as Promise<P.CheckSelect<T, ${model.name}, P.${model.name}GetPayload<T>>>,
93
- del: <T extends Omit<P.${model.name}DeleteArgs, 'where'>>(context: QueryContext, id: string, args?: Omit<P.${model.name}DeleteArgs, 'where'>) =>
94
- this.crud.del('${model.name}', id, args, context) as Promise<P.CheckSelect<T, ${model.name}, P.${model.name}GetPayload<T>>>,
95
- }
96
- `);
97
- }
98
-
99
- // Recommended by Prisma for Next.js
100
- // https://www.prisma.io/docs/guides/database/troubleshooting-orm/help-articles/nextjs-prisma-client-dev-practices#problem
101
- sf.addStatements([
102
- 'declare global { var zenstackService: ZenStackService | undefined}',
103
- 'const service = global.zenstackService || new ZenStackService();',
104
- 'export default service;',
105
- `if (process.env.NODE_ENV !== 'production') global.zenstackService = service;`,
106
- ]);
107
-
108
- sf.formatText();
109
- await project.save();
110
-
111
- return [];
112
- }
113
- }
@@ -1,59 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-var-requires */
2
- import * as fs from 'fs';
3
- import path from 'path';
4
- import { execSync } from '../../utils/exec-utils';
5
- import { Context, Generator, GeneratorError } from '../types';
6
-
7
- export class TypescriptCompilation implements Generator {
8
- get name(): string {
9
- return 'tsc';
10
- }
11
-
12
- get startMessage() {
13
- return 'Transpiling generated code...';
14
- }
15
-
16
- get successMessage() {
17
- return 'Successfully transpiled all generated code';
18
- }
19
-
20
- async generate(context: Context) {
21
- // generate package.json
22
- const packageJson = require(path.join(
23
- __dirname,
24
- '../res',
25
- 'package.template.json'
26
- ));
27
-
28
- fs.writeFileSync(
29
- path.join(context.generatedCodeDir, 'package.json'),
30
- JSON.stringify(packageJson, undefined, 4)
31
- );
32
-
33
- // compile ts sources
34
- const tsConfig = require(path.join(
35
- __dirname,
36
- '../res',
37
- 'tsconfig.template.json'
38
- ));
39
- fs.writeFileSync(
40
- path.join(context.generatedCodeDir, 'tsconfig.json'),
41
- JSON.stringify(tsConfig, undefined, 4)
42
- );
43
-
44
- try {
45
- execSync(
46
- `npx tsc -p "${path.join(
47
- context.generatedCodeDir,
48
- 'tsconfig.json'
49
- )}"`
50
- );
51
- } catch {
52
- throw new GeneratorError(
53
- 'Something went wrong, generated runtime code failed to compile...\nPlease check errors above.'
54
- );
55
- }
56
-
57
- return [];
58
- }
59
- }
@@ -1,20 +0,0 @@
1
- import { Model } from '@lang/generated/ast';
2
-
3
- export interface Context {
4
- schema: Model;
5
- outDir: string;
6
- generatedCodeDir: string;
7
- }
8
-
9
- export interface Generator {
10
- get name(): string;
11
- get startMessage(): string;
12
- get successMessage(): string;
13
- generate(context: Context): Promise<string[]>;
14
- }
15
-
16
- export class GeneratorError extends Error {
17
- constructor(message: string) {
18
- super(message);
19
- }
20
- }
package/src/global.d.ts DELETED
@@ -1,3 +0,0 @@
1
- declare module 'env' {
2
- export const TELEMETRY_TRACKING_TOKEN: string;
3
- }
@@ -1,29 +0,0 @@
1
- /**
2
- * Supported Prisma db providers
3
- */
4
- export const SUPPORTED_PROVIDERS = [
5
- 'sqlite',
6
- 'postgresql',
7
- 'mysql',
8
- 'sqlserver',
9
- 'cockroachdb',
10
- ];
11
-
12
- /**
13
- * All scalar types
14
- */
15
- export const SCALAR_TYPES = [
16
- 'String',
17
- 'Int',
18
- 'Float',
19
- 'Decimal',
20
- 'BigInt',
21
- 'Boolean',
22
- 'Bytes',
23
- 'DateTime',
24
- ];
25
-
26
- /**
27
- * Name of standard library module
28
- */
29
- export const STD_LIB_MODULE_NAME = 'stdlib.zmodel';