@bairock/lenz 0.0.16 → 0.0.18

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 (30) hide show
  1. package/README.md +149 -15
  2. package/dist/cli/commands/generate/crud.d.ts +3 -0
  3. package/dist/cli/commands/generate/crud.d.ts.map +1 -0
  4. package/dist/cli/commands/generate/crud.js +123 -0
  5. package/dist/cli/commands/generate/crud.js.map +1 -0
  6. package/dist/cli/commands/generate/index.d.ts +3 -0
  7. package/dist/cli/commands/generate/index.d.ts.map +1 -0
  8. package/dist/cli/commands/generate/index.js +8 -0
  9. package/dist/cli/commands/generate/index.js.map +1 -0
  10. package/dist/cli/commands/generate/orm.d.ts +3 -0
  11. package/dist/cli/commands/generate/orm.d.ts.map +1 -0
  12. package/dist/cli/commands/generate/orm.js +107 -0
  13. package/dist/cli/commands/generate/orm.js.map +1 -0
  14. package/dist/cli/index.js +1 -1
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/engine/CodeGenerator.d.ts +1 -0
  17. package/dist/engine/CodeGenerator.d.ts.map +1 -1
  18. package/dist/engine/CodeGenerator.js +3 -0
  19. package/dist/engine/CodeGenerator.js.map +1 -1
  20. package/dist/engine/generators/CrudModuleGenerator.d.ts +10 -0
  21. package/dist/engine/generators/CrudModuleGenerator.d.ts.map +1 -0
  22. package/dist/engine/generators/CrudModuleGenerator.js +141 -0
  23. package/dist/engine/generators/CrudModuleGenerator.js.map +1 -0
  24. package/dist/engine/generators/SDLInputTypesGenerator.d.ts +6 -0
  25. package/dist/engine/generators/SDLInputTypesGenerator.d.ts.map +1 -0
  26. package/dist/engine/generators/SDLInputTypesGenerator.js +763 -0
  27. package/dist/engine/generators/SDLInputTypesGenerator.js.map +1 -0
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/package.json +9 -3
@@ -0,0 +1,141 @@
1
+ // ===== Per-file generators =====
2
+ function genTypeDefsMutations(modelName) {
3
+ const lcName = modelName[0].toLowerCase() + modelName.slice(1);
4
+ return `import { gql } from 'graphql-tag'
5
+
6
+ export const ${lcName}MutationTypeDefs = gql\`
7
+ extend type Mutation {
8
+ create${modelName}(data: ${modelName}CreateInput!): ${modelName}!
9
+ update${modelName}(where: ${modelName}WhereUniqueInput!, data: ${modelName}UpdateInput!): ${modelName}!
10
+ delete${modelName}(where: ${modelName}WhereUniqueInput!): ${modelName}!
11
+ }
12
+ \`;
13
+ `;
14
+ }
15
+ function genTypeDefsQueries(modelName) {
16
+ const lcName = modelName[0].toLowerCase() + modelName.slice(1);
17
+ return `import { gql } from 'graphql-tag'
18
+
19
+ export const ${lcName}QueryTypeDefs = gql\`
20
+ extend type Query {
21
+ findUnique${modelName}(where: ${modelName}WhereUniqueInput!): ${modelName}
22
+ findFirst${modelName}(where: ${modelName}WhereInput, orderBy: [${modelName}OrderByWithRelationInput!], cursor: ${modelName}WhereUniqueInput, take: Int, skip: Int, distinct: [${modelName}ScalarFieldEnum!]): ${modelName}
23
+ findMany${modelName}(where: ${modelName}WhereInput, orderBy: [${modelName}OrderByWithRelationInput!], cursor: ${modelName}WhereUniqueInput, take: Int, skip: Int, distinct: [${modelName}ScalarFieldEnum!]): [${modelName}!]!
24
+ findMany${modelName}Count(where: ${modelName}WhereInput): Int!
25
+ }
26
+ \`;
27
+ `;
28
+ }
29
+ function genResolversMutations(modelName) {
30
+ const lcName = modelName[0].toLowerCase() + modelName.slice(1);
31
+ return `export const ${lcName}MutationResolvers = {
32
+ create${modelName}: (_parent, { data }, { lenz }) => {
33
+ return lenz.${lcName}.create({ data });
34
+ },
35
+ update${modelName}: (_parent, { where, data }, { lenz }) => {
36
+ return lenz.${lcName}.update({ where, data });
37
+ },
38
+ delete${modelName}: (_parent, { where }, { lenz }) => {
39
+ return lenz.${lcName}.delete({ where });
40
+ },
41
+ };
42
+ `;
43
+ }
44
+ function genResolversQueries(modelName) {
45
+ const lcName = modelName[0].toLowerCase() + modelName.slice(1);
46
+ return `export const ${lcName}QueryResolvers = {
47
+ findUnique${modelName}: (_parent, args, { lenz }) => {
48
+ return lenz.${lcName}.findUnique(args);
49
+ },
50
+ findFirst${modelName}: (_parent, args, { lenz }) => {
51
+ return lenz.${lcName}.findFirst(args);
52
+ },
53
+ findMany${modelName}: (_parent, args, { lenz }) => {
54
+ return lenz.${lcName}.findMany(args);
55
+ },
56
+ findMany${modelName}Count: (_parent, args, { lenz }) => {
57
+ return lenz.${lcName}.count(args);
58
+ },
59
+ };
60
+ `;
61
+ }
62
+ function genIndex(modelName) {
63
+ const lcName = modelName[0].toLowerCase() + modelName.slice(1);
64
+ return `import { ${lcName}MutationTypeDefs } from './typeDefs/mutations.js';
65
+ import { ${lcName}QueryTypeDefs } from './typeDefs/queries.js';
66
+ import { ${lcName}MutationResolvers } from './resolvers/mutations.js';
67
+ import { ${lcName}QueryResolvers } from './resolvers/queries.js';
68
+
69
+ export const ${lcName}TypeDefs = [${lcName}MutationTypeDefs, ${lcName}QueryTypeDefs];
70
+ export const ${lcName}Resolvers = {
71
+ Mutation: ${lcName}MutationResolvers,
72
+ Query: ${lcName}QueryResolvers,
73
+ };
74
+ `;
75
+ }
76
+ // ===== Main generator class =====
77
+ export class CrudModuleGenerator {
78
+ constructor(inputTypesPath = '../generated/lenz/client/inputTypes.js') {
79
+ this.inputTypesPath = inputTypesPath;
80
+ }
81
+ generate(models) {
82
+ const files = {};
83
+ const nonEmbedded = models.filter(m => !m.isEmbedded);
84
+ const names = nonEmbedded.map(m => m.name);
85
+ for (const model of nonEmbedded) {
86
+ const name = model.name;
87
+ files[`${name}/typeDefs/mutations.ts`] = genTypeDefsMutations(name);
88
+ files[`${name}/typeDefs/queries.ts`] = genTypeDefsQueries(name);
89
+ files[`${name}/resolvers/mutations.ts`] = genResolversMutations(name);
90
+ files[`${name}/resolvers/queries.ts`] = genResolversQueries(name);
91
+ files[`${name}/index.ts`] = genIndex(name);
92
+ }
93
+ // Generate barrel index.ts
94
+ files['index.ts'] = this.genBarrelIndex(names);
95
+ return files;
96
+ }
97
+ genBarrelIndex(modelNames) {
98
+ const lcNames = modelNames.map(n => n[0].toLowerCase() + n.slice(1));
99
+ const imports = lcNames.map(lc => `import { ${lc}TypeDefs, ${lc}Resolvers } from './${lc[0].toUpperCase() + lc.slice(1)}/index.js';`).join('\n');
100
+ const typeDefsSpread = lcNames.map(lc => `...${lc}TypeDefs`).join(', ');
101
+ const resolversList = lcNames.map(lc => `${lc}Resolvers`).join(', ');
102
+ return `// This file was auto-generated by Lenz. Do not edit manually.
103
+ // @generated
104
+
105
+ import { mergeTypeDefs, mergeResolvers } from '@graphql-tools/merge';
106
+ import { inputTypes } from '${this.inputTypesPath}';
107
+
108
+ ${imports}
109
+
110
+ export const typeDefs = mergeTypeDefs([inputTypes${typeDefsSpread ? `, ${typeDefsSpread}` : ''}]);
111
+ export const resolvers = mergeResolvers([${resolversList}]);
112
+ `;
113
+ }
114
+ /** Validate that all required SDL input types exist in the schema SDL string */
115
+ validate(models, schemaSDL) {
116
+ const missing = [];
117
+ for (const model of models) {
118
+ if (model.isEmbedded)
119
+ continue;
120
+ const name = model.name;
121
+ for (const typeName of [
122
+ `${name}WhereUniqueInput`,
123
+ `${name}WhereInput`,
124
+ `${name}OrderByWithRelationInput`,
125
+ `${name}ScalarFieldEnum`,
126
+ `${name}CreateInput`,
127
+ `${name}UpdateInput`,
128
+ ]) {
129
+ if (!schemaSDL.includes(`input ${typeName}`) && !schemaSDL.includes(`enum ${typeName}`)) {
130
+ missing.push(typeName);
131
+ }
132
+ }
133
+ }
134
+ if (missing.length > 0) {
135
+ throw new Error(`Missing required SDL input types for CRUD generation.\n` +
136
+ `These types are generated by \`lenz generate orm\` in the inputTypes.ts file.\n` +
137
+ `Missing: ${missing.join(', ')}`);
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=CrudModuleGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrudModuleGenerator.js","sourceRoot":"","sources":["../../../src/engine/generators/CrudModuleGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { GraphQLModel, GraphQLEnum } from '../GraphQLParser.js';
2
+ export declare class SDLInputTypesGenerator {
3
+ generateSDL(models: GraphQLModel[], enums: GraphQLEnum[]): string;
4
+ generateSDLOutput(models: GraphQLModel[], enums: GraphQLEnum[]): string;
5
+ }
6
+ //# sourceMappingURL=SDLInputTypesGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SDLInputTypesGenerator.d.ts","sourceRoot":"","sources":["../../../src/engine/generators/SDLInputTypesGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAwuBhE,qBAAa,sBAAsB;IAEjC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;IAkEjE,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;CAYxE"}