sasat 0.18.5 → 0.19.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 (276) hide show
  1. package/lib/cli/commands/generate.js +2 -4
  2. package/lib/cli/commands/migrate.js +2 -4
  3. package/lib/db/sql/createTable/createTableParser.js +7 -6
  4. package/lib/db/sql/createTable/createTableSerializer.js +3 -3
  5. package/lib/db/sql/sqlCreater.js +1 -1
  6. package/lib/generatorv2/codegen/gql/generateTypeDefs.d.ts +3 -0
  7. package/lib/generatorv2/codegen/gql/generateTypeDefs.js +102 -0
  8. package/lib/generatorv2/codegen/gql/gqlString.d.ts +16 -0
  9. package/lib/generatorv2/codegen/gql/gqlString.js +43 -0
  10. package/lib/generatorv2/codegen/gql/typeDefinition.d.ts +9 -0
  11. package/lib/generatorv2/codegen/gql/typeDefinition.js +13 -0
  12. package/lib/generatorv2/codegen/names.d.ts +4 -0
  13. package/lib/generatorv2/codegen/names.js +10 -0
  14. package/lib/generatorv2/codegen/ts/generateAutoGeneratedDatasource.d.ts +4 -0
  15. package/lib/generatorv2/codegen/ts/generateAutoGeneratedDatasource.js +123 -0
  16. package/lib/generatorv2/codegen/ts/generateContext.d.ts +3 -0
  17. package/lib/generatorv2/codegen/ts/generateContext.js +8 -0
  18. package/lib/generatorv2/codegen/ts/generateDatasource.d.ts +3 -0
  19. package/lib/generatorv2/codegen/ts/generateDatasource.js +10 -0
  20. package/lib/generatorv2/codegen/ts/generateEntity.d.ts +3 -0
  21. package/lib/generatorv2/codegen/ts/generateEntity.js +29 -0
  22. package/lib/generatorv2/codegen/ts/generateFields.d.ts +3 -0
  23. package/lib/generatorv2/codegen/ts/generateFields.js +19 -0
  24. package/lib/generatorv2/codegen/ts/generateMutationResolver.d.ts +3 -0
  25. package/lib/generatorv2/codegen/ts/generateMutationResolver.js +116 -0
  26. package/lib/generatorv2/codegen/ts/generateQueryResolver.d.ts +3 -0
  27. package/lib/generatorv2/codegen/ts/generateQueryResolver.js +73 -0
  28. package/lib/generatorv2/codegen/ts/generateRelationMap.d.ts +3 -0
  29. package/lib/generatorv2/codegen/ts/generateRelationMap.js +126 -0
  30. package/lib/generatorv2/codegen/ts/generateResolver.d.ts +3 -0
  31. package/lib/generatorv2/codegen/ts/generateResolver.js +38 -0
  32. package/lib/generatorv2/codegen/ts/generateSubscription.d.ts +3 -0
  33. package/lib/generatorv2/codegen/ts/generateSubscription.js +49 -0
  34. package/lib/generatorv2/codegen/ts/scripts/fieldToProperty.d.ts +3 -0
  35. package/lib/generatorv2/codegen/ts/scripts/fieldToProperty.js +6 -0
  36. package/lib/generatorv2/codegen/ts/scripts/getEntityTypeRefs.d.ts +7 -0
  37. package/lib/generatorv2/codegen/ts/scripts/getEntityTypeRefs.js +50 -0
  38. package/lib/generatorv2/codegen/ts/scripts/makeDatasource.d.ts +4 -0
  39. package/lib/generatorv2/codegen/ts/scripts/makeDatasource.js +7 -0
  40. package/lib/generatorv2/codegen/ts/scripts/sqlValueToTsExpression.d.ts +3 -0
  41. package/lib/generatorv2/codegen/ts/scripts/sqlValueToTsExpression.js +10 -0
  42. package/lib/generatorv2/codegen/ts/staticFiles.d.ts +2 -0
  43. package/lib/{generator → generatorv2/codegen}/ts/staticFiles.js +4 -3
  44. package/lib/generatorv2/codegen/tscodegen_v2.d.ts +20 -0
  45. package/lib/generatorv2/codegen/tscodegen_v2.js +38 -0
  46. package/lib/{generator/controller.d.ts → generatorv2/codegen_v2.d.ts} +6 -6
  47. package/lib/{generator/controller.js → generatorv2/codegen_v2.js} +24 -23
  48. package/lib/generatorv2/directory.d.ts +5 -0
  49. package/lib/generatorv2/directory.js +25 -0
  50. package/lib/generatorv2/nodes/ConditionNode.d.ts +23 -0
  51. package/lib/{generator/generator.js → generatorv2/nodes/ConditionNode.js} +0 -0
  52. package/lib/generatorv2/nodes/contextNode.d.ts +5 -0
  53. package/lib/generatorv2/nodes/contextNode.js +1 -0
  54. package/lib/{parser/node → generatorv2/nodes}/entityName.d.ts +2 -8
  55. package/lib/generatorv2/nodes/entityName.js +48 -0
  56. package/lib/generatorv2/nodes/entityNode.d.ts +88 -0
  57. package/lib/generatorv2/nodes/entityNode.js +168 -0
  58. package/lib/generatorv2/nodes/mutationNode.d.ts +18 -0
  59. package/lib/generatorv2/nodes/mutationNode.js +1 -0
  60. package/lib/generatorv2/nodes/queryNode.d.ts +13 -0
  61. package/lib/generatorv2/nodes/queryNode.js +1 -0
  62. package/lib/generatorv2/nodes/rootNode.d.ts +12 -0
  63. package/lib/generatorv2/nodes/rootNode.js +1 -0
  64. package/lib/generatorv2/nodes/subscriptionNode.d.ts +19 -0
  65. package/lib/generatorv2/nodes/subscriptionNode.js +1 -0
  66. package/lib/generatorv2/nodes/typeNode.d.ts +15 -0
  67. package/lib/generatorv2/nodes/typeNode.js +1 -0
  68. package/lib/generatorv2/parse.d.ts +3 -0
  69. package/lib/generatorv2/parse.js +14 -0
  70. package/lib/generatorv2/parser/makeContextNodes.d.ts +3 -0
  71. package/lib/generatorv2/parser/makeContextNodes.js +8 -0
  72. package/lib/generatorv2/parser/makeEntityNodes.d.ts +3 -0
  73. package/lib/generatorv2/parser/makeEntityNodes.js +8 -0
  74. package/lib/generatorv2/parser/makeMutationNodes.d.ts +3 -0
  75. package/lib/generatorv2/parser/makeMutationNodes.js +110 -0
  76. package/lib/generatorv2/parser/makeQueryNodes.d.ts +3 -0
  77. package/lib/generatorv2/parser/makeQueryNodes.js +68 -0
  78. package/lib/generatorv2/parser/makeSubscriptionNode.d.ts +3 -0
  79. package/lib/generatorv2/parser/makeSubscriptionNode.js +61 -0
  80. package/lib/{generator/gql → generatorv2/scripts}/columnToGqlType.d.ts +1 -1
  81. package/lib/{generator/gql → generatorv2/scripts}/columnToGqlType.js +1 -1
  82. package/lib/{generator/gql/types.d.ts → generatorv2/scripts/gqlTypes.d.ts} +0 -0
  83. package/lib/{generator/gql/types.js → generatorv2/scripts/gqlTypes.js} +0 -0
  84. package/lib/index.d.ts +6 -2
  85. package/lib/index.js +1 -0
  86. package/lib/migration/creators/tableCreator.d.ts +3 -0
  87. package/lib/migration/creators/tableCreator.js +4 -0
  88. package/lib/migration/data/virtualRelation.d.ts +10 -0
  89. package/lib/migration/data/virtualRelation.js +1 -0
  90. package/lib/migration/dataStore.d.ts +3 -1
  91. package/lib/migration/dataStore.js +4 -3
  92. package/lib/migration/front/tableMigrator.d.ts +1 -0
  93. package/lib/migration/front/tableMigrator.js +9 -6
  94. package/lib/migration/serializable/column.d.ts +3 -1
  95. package/lib/migration/serializable/column.js +8 -2
  96. package/lib/migration/serializable/table.d.ts +7 -2
  97. package/lib/migration/serializable/table.js +14 -7
  98. package/lib/migration/serialized/serializedColumn.d.ts +4 -2
  99. package/lib/migration/serialized/serializedColumn.js +1 -1
  100. package/lib/migration/serialized/serializedStore.d.ts +2 -0
  101. package/lib/runtime/createTypeDef.d.ts +4 -1
  102. package/lib/runtime/createTypeDef.js +20 -11
  103. package/lib/runtime/dsl/factory.d.ts +4 -1
  104. package/lib/runtime/dsl/factory.js +12 -2
  105. package/lib/runtime/dsl/mutation/mutation.d.ts +1 -1
  106. package/lib/runtime/dsl/mutation/mutation.js +3 -6
  107. package/lib/runtime/dsl/query/createQueryResolveInfo.d.ts +4 -4
  108. package/lib/runtime/dsl/query/query.d.ts +7 -2
  109. package/lib/runtime/dsl/query/sql/hydrate.js +3 -3
  110. package/lib/runtime/dsl/query/sql/nodeToSql.js +5 -5
  111. package/lib/runtime/dsl/replaceAliases.js +8 -5
  112. package/lib/runtime/field.d.ts +1 -1
  113. package/lib/runtime/gqlResolveInfoToField.d.ts +1 -1
  114. package/lib/runtime/makeResolver.d.ts +10 -0
  115. package/lib/runtime/makeResolver.js +8 -0
  116. package/lib/runtime/resolverMiddleware.d.ts +2 -0
  117. package/lib/runtime/resolverMiddleware.js +1 -0
  118. package/lib/runtime/sasatDBDatasource.d.ts +6 -5
  119. package/lib/runtime/sasatDBDatasource.js +4 -4
  120. package/lib/runtime/sql/runQuery.js +2 -1
  121. package/lib/{generator/ts/code → tsg}/abstruct/exportableDeclaration.d.ts +0 -0
  122. package/lib/{generator/ts/code → tsg}/abstruct/exportableDeclaration.js +0 -0
  123. package/lib/{generator/ts/code → tsg}/abstruct/statement.d.ts +0 -0
  124. package/lib/{generator/ts/code → tsg}/abstruct/statement.js +0 -0
  125. package/lib/{generator/ts/code → tsg}/abstruct/tsCode.d.ts +0 -0
  126. package/lib/{generator/ts/code → tsg}/abstruct/tsCode.js +0 -0
  127. package/lib/{generator/ts/code → tsg}/accessors.d.ts +0 -0
  128. package/lib/{generator/ts/code → tsg}/accessors.js +0 -0
  129. package/lib/{generator/ts/code → tsg}/factory.d.ts +16 -14
  130. package/lib/{generator/ts/code → tsg}/factory.js +2 -0
  131. package/lib/{generator/ts → tsg}/file.d.ts +3 -3
  132. package/lib/{generator/ts → tsg}/file.js +2 -2
  133. package/lib/{generator/ts/code → tsg}/importDeclaration.d.ts +0 -0
  134. package/lib/{generator/ts/code → tsg}/importDeclaration.js +1 -1
  135. package/lib/tsg/index.d.ts +31 -0
  136. package/lib/tsg/index.js +30 -0
  137. package/lib/{generator/ts/code → tsg}/node/block.d.ts +0 -0
  138. package/lib/{generator/ts/code → tsg}/node/block.js +0 -0
  139. package/lib/{generator/ts/code → tsg}/node/class.d.ts +0 -0
  140. package/lib/{generator/ts/code → tsg}/node/class.js +0 -0
  141. package/lib/{generator/ts/code → tsg}/node/enumDeclaration.d.ts +0 -0
  142. package/lib/{generator/ts/code → tsg}/node/enumDeclaration.js +0 -0
  143. package/lib/{generator/ts/code → tsg}/node/enumMember.d.ts +0 -0
  144. package/lib/{generator/ts/code → tsg}/node/enumMember.js +0 -0
  145. package/lib/{generator/ts/code → tsg}/node/expressionStatement.d.ts +0 -0
  146. package/lib/{generator/ts/code → tsg}/node/expressionStatement.js +0 -0
  147. package/lib/{generator/ts/code → tsg}/node/expressions.d.ts +2 -0
  148. package/lib/{generator/ts/code → tsg}/node/expressions.js +10 -1
  149. package/lib/{generator/ts/code → tsg}/node/extendsClause.d.ts +0 -0
  150. package/lib/{generator/ts/code → tsg}/node/extendsClause.js +0 -0
  151. package/lib/{generator/ts/code → tsg}/node/ifStatement.d.ts +0 -0
  152. package/lib/{generator/ts/code → tsg}/node/ifStatement.js +0 -0
  153. package/lib/{generator/ts/code → tsg}/node/implementsClause.d.ts +0 -0
  154. package/lib/{generator/ts/code → tsg}/node/implementsClause.js +0 -0
  155. package/lib/{generator/ts/code → tsg}/node/interface.d.ts +0 -0
  156. package/lib/{generator/ts/code → tsg}/node/interface.js +0 -0
  157. package/lib/{generator/ts/code → tsg}/node/methodDeclaration.d.ts +0 -0
  158. package/lib/{generator/ts/code → tsg}/node/methodDeclaration.js +0 -0
  159. package/lib/{generator/ts/code → tsg}/node/modifier/methodModifiers.d.ts +0 -0
  160. package/lib/{generator/ts/code → tsg}/node/modifier/methodModifiers.js +0 -0
  161. package/lib/{generator/ts/code → tsg}/node/modifier/modifiers.d.ts +0 -0
  162. package/lib/{generator/ts/code → tsg}/node/modifier/modifiers.js +0 -0
  163. package/lib/{generator/ts/code → tsg}/node/modifier/propertyModifiers.d.ts +0 -0
  164. package/lib/{generator/ts/code → tsg}/node/modifier/propertyModifiers.js +0 -0
  165. package/lib/{generator/ts/code → tsg}/node/parameter.d.ts +0 -0
  166. package/lib/{generator/ts/code → tsg}/node/parameter.js +0 -0
  167. package/lib/{generator/ts/code → tsg}/node/propertyAssignment.d.ts +0 -0
  168. package/lib/{generator/ts/code → tsg}/node/propertyAssignment.js +0 -0
  169. package/lib/{generator/ts/code → tsg}/node/propertyDeclaration.d.ts +0 -0
  170. package/lib/{generator/ts/code → tsg}/node/propertyDeclaration.js +0 -0
  171. package/lib/{generator/ts/code → tsg}/node/propertySignature.d.ts +0 -0
  172. package/lib/{generator/ts/code → tsg}/node/propertySignature.js +0 -0
  173. package/lib/{generator/ts/code → tsg}/node/rawCodeStatement.d.ts +0 -0
  174. package/lib/{generator/ts/code → tsg}/node/rawCodeStatement.js +0 -0
  175. package/lib/{generator/ts/code → tsg}/node/returnStatement.d.ts +0 -0
  176. package/lib/{generator/ts/code → tsg}/node/returnStatement.js +0 -0
  177. package/lib/{generator/ts/code → tsg}/node/spreadAssignment.d.ts +0 -0
  178. package/lib/{generator/ts/code → tsg}/node/spreadAssignment.js +0 -0
  179. package/lib/tsg/node/throwStatement.d.ts +7 -0
  180. package/lib/tsg/node/throwStatement.js +11 -0
  181. package/lib/{generator/ts/code → tsg}/node/type/arrayType.d.ts +0 -0
  182. package/lib/{generator/ts/code → tsg}/node/type/arrayType.js +0 -0
  183. package/lib/{generator/ts/code → tsg}/node/type/intersectionType.d.ts +0 -0
  184. package/lib/{generator/ts/code → tsg}/node/type/intersectionType.js +0 -0
  185. package/lib/{generator/ts/code → tsg}/node/type/type.d.ts +0 -0
  186. package/lib/{generator/ts/code → tsg}/node/type/type.js +0 -0
  187. package/lib/{generator/ts/code → tsg}/node/type/typeAliasDeclaration.d.ts +0 -0
  188. package/lib/{generator/ts/code → tsg}/node/type/typeAliasDeclaration.js +0 -0
  189. package/lib/{generator/ts/code → tsg}/node/type/typeKeyword.d.ts +0 -0
  190. package/lib/{generator/ts/code → tsg}/node/type/typeKeyword.js +0 -0
  191. package/lib/{generator/ts/code → tsg}/node/type/typeLiteral.d.ts +0 -0
  192. package/lib/{generator/ts/code → tsg}/node/type/typeLiteral.js +0 -0
  193. package/lib/{generator/ts/code → tsg}/node/type/typeReference.d.ts +0 -0
  194. package/lib/{generator/ts/code → tsg}/node/type/typeReference.js +0 -0
  195. package/lib/{generator/ts/code → tsg}/node/type/unionType.d.ts +1 -1
  196. package/lib/{generator/ts/code → tsg}/node/type/unionType.js +1 -1
  197. package/lib/{generator/ts/code → tsg}/node/variableDeclaration.d.ts +0 -0
  198. package/lib/{generator/ts/code → tsg}/node/variableDeclaration.js +0 -0
  199. package/lib/{generator/ts/code → tsg}/tsUtil.d.ts +0 -0
  200. package/lib/{generator/ts/code → tsg}/tsUtil.js +0 -0
  201. package/lib/{generator/ts → tsg}/tsValueString.d.ts +0 -0
  202. package/lib/{generator/ts → tsg}/tsValueString.js +1 -2
  203. package/lib/util/type.d.ts +1 -0
  204. package/lib/util/type.js +1 -1
  205. package/package.json +18 -23
  206. package/lib/constants/directory.d.ts +0 -20
  207. package/lib/constants/directory.js +0 -34
  208. package/lib/constants/interfaceConstants.d.ts +0 -5
  209. package/lib/constants/interfaceConstants.js +0 -5
  210. package/lib/db/connectors/mariadb/client.d.ts +0 -8
  211. package/lib/db/connectors/mariadb/client.js +0 -24
  212. package/lib/db/connectors/mariadb/transaction.d.ts +0 -9
  213. package/lib/db/connectors/mariadb/transaction.js +0 -20
  214. package/lib/generator/generator.d.ts +0 -21
  215. package/lib/generator/ts/db/generatedRepositoryGenerator.d.ts +0 -11
  216. package/lib/generator/ts/db/generatedRepositoryGenerator.js +0 -134
  217. package/lib/generator/ts/db/repositoryGenerator.d.ts +0 -5
  218. package/lib/generator/ts/db/repositoryGenerator.js +0 -13
  219. package/lib/generator/ts/entityGenerator.d.ts +0 -10
  220. package/lib/generator/ts/entityGenerator.js +0 -30
  221. package/lib/generator/ts/fieldGenerator.d.ts +0 -6
  222. package/lib/generator/ts/fieldGenerator.js +0 -25
  223. package/lib/generator/ts/generator.d.ts +0 -18
  224. package/lib/generator/ts/generator.js +0 -56
  225. package/lib/generator/ts/gql/contextGenerator.d.ts +0 -5
  226. package/lib/generator/ts/gql/contextGenerator.js +0 -10
  227. package/lib/generator/ts/gql/mutationGenerator.d.ts +0 -16
  228. package/lib/generator/ts/gql/mutationGenerator.js +0 -151
  229. package/lib/generator/ts/gql/queryGenerator.d.ts +0 -9
  230. package/lib/generator/ts/gql/queryGenerator.js +0 -87
  231. package/lib/generator/ts/gql/resolverGenerator.d.ts +0 -8
  232. package/lib/generator/ts/gql/resolverGenerator.js +0 -64
  233. package/lib/generator/ts/gql/subscriptionGenerator.d.ts +0 -9
  234. package/lib/generator/ts/gql/subscriptionGenerator.js +0 -65
  235. package/lib/generator/ts/gql/typeDefGenerator.d.ts +0 -11
  236. package/lib/generator/ts/gql/typeDefGenerator.js +0 -71
  237. package/lib/generator/ts/relationMapGenerator.d.ts +0 -10
  238. package/lib/generator/ts/relationMapGenerator.js +0 -77
  239. package/lib/generator/ts/staticFiles.d.ts +0 -2
  240. package/lib/parser/node/entityName.js +0 -71
  241. package/lib/parser/node/entityNode.d.ts +0 -24
  242. package/lib/parser/node/entityNode.js +0 -47
  243. package/lib/parser/node/fieldNode.d.ts +0 -25
  244. package/lib/parser/node/fieldNode.js +0 -43
  245. package/lib/parser/node/findMethod.d.ts +0 -10
  246. package/lib/parser/node/findMethod.js +0 -12
  247. package/lib/parser/node/gql/contextNode.d.ts +0 -6
  248. package/lib/parser/node/gql/contextNode.js +0 -6
  249. package/lib/parser/node/gql/contextParamNode.d.ts +0 -5
  250. package/lib/parser/node/gql/contextParamNode.js +0 -6
  251. package/lib/parser/node/gql/mutationNode.d.ts +0 -44
  252. package/lib/parser/node/gql/mutationNode.js +0 -74
  253. package/lib/parser/node/gql/queryNode.d.ts +0 -13
  254. package/lib/parser/node/gql/queryNode.js +0 -14
  255. package/lib/parser/node/gql/subscriptionFilterNode.d.ts +0 -6
  256. package/lib/parser/node/gql/subscriptionFilterNode.js +0 -6
  257. package/lib/parser/node/gql/typeDefNode.d.ts +0 -9
  258. package/lib/parser/node/gql/typeDefNode.js +0 -24
  259. package/lib/parser/node/parameterNode.d.ts +0 -8
  260. package/lib/parser/node/parameterNode.js +0 -14
  261. package/lib/parser/node/relationNode.d.ts +0 -32
  262. package/lib/parser/node/relationNode.js +0 -39
  263. package/lib/parser/node/repositoryNode.d.ts +0 -23
  264. package/lib/parser/node/repositoryNode.js +0 -60
  265. package/lib/parser/node/rootNode.d.ts +0 -20
  266. package/lib/parser/node/rootNode.js +0 -28
  267. package/lib/parser/node/typeNode.d.ts +0 -20
  268. package/lib/parser/node/typeNode.js +0 -48
  269. package/lib/parser/nodeFactory/contextNodeFactory.d.ts +0 -5
  270. package/lib/parser/nodeFactory/contextNodeFactory.js +0 -12
  271. package/lib/parser/nodeFactory/mutationNodeFactory.d.ts +0 -7
  272. package/lib/parser/nodeFactory/mutationNodeFactory.js +0 -38
  273. package/lib/parser/nodeFactory/queryNodeFactory.d.ts +0 -8
  274. package/lib/parser/nodeFactory/queryNodeFactory.js +0 -28
  275. package/lib/parser/parser.d.ts +0 -5
  276. package/lib/parser/parser.js +0 -10
@@ -1,5 +1,3 @@
1
- import { Parser } from '../../parser/parser.js';
2
- import { CodeGenerateController } from '../../generator/controller.js';
3
1
  import { Console } from '../console.js';
4
2
  import { DataStoreHandler } from '../../migration/dataStore.js';
5
3
  import { writeCurrentSchema } from '../../util/fsUtil.js';
@@ -7,6 +5,7 @@ import { createCurrentMigrationDataStore } from '../../migration/exec/createCurr
7
5
  import { compileMigrationFiles } from '../../migration/exec/migrationFileCompiler.js';
8
6
  import { config } from '../../config/config.js';
9
7
  import { getMigrationFileNames } from '../../migration/exec/getMigrationFiles.js';
8
+ import { CodeGen_v2 } from '../../generatorv2/codegen_v2.js';
10
9
  export const generate = async () => {
11
10
  try {
12
11
  await compileMigrationFiles();
@@ -16,8 +15,7 @@ export const generate = async () => {
16
15
  const store = (await createCurrentMigrationDataStore(targetFile)).serialize();
17
16
  const storeHandler = new DataStoreHandler(store);
18
17
  writeCurrentSchema(store);
19
- const ir = new Parser().parse(storeHandler);
20
- await new CodeGenerateController(ir).generate();
18
+ await new CodeGen_v2(storeHandler).generate();
21
19
  Console.success(`code generated. DIR: ${config().migration.out}\nmigration target: ${targetFile}`);
22
20
  }
23
21
  catch (e) {
@@ -1,10 +1,9 @@
1
1
  import { MigrationController } from '../../migration/controller.js';
2
2
  import { Console } from '../console.js';
3
- import { Parser } from '../../parser/parser.js';
4
- import { CodeGenerateController } from '../../generator/controller.js';
5
3
  import { DataStoreHandler } from '../../migration/dataStore.js';
6
4
  import { writeCurrentSchema } from '../../util/fsUtil.js';
7
5
  import { getDbClient } from '../../db/getDbClient.js';
6
+ import { CodeGen_v2 } from '../../generatorv2/codegen_v2.js';
8
7
  export const migrate = async (options) => {
9
8
  let current;
10
9
  try {
@@ -14,8 +13,7 @@ export const migrate = async (options) => {
14
13
  if (options.generateFiles) {
15
14
  const storeHandler = new DataStoreHandler(result.store);
16
15
  writeCurrentSchema(result.store);
17
- const ir = new Parser().parse(storeHandler);
18
- await new CodeGenerateController(ir).generate();
16
+ await new CodeGen_v2(storeHandler).generate();
19
17
  }
20
18
  }
21
19
  catch (e) {
@@ -1,8 +1,8 @@
1
1
  import { TokenKind } from './lexer/lexer.js';
2
2
  import { camelize } from '../../../util/stringUtil.js';
3
- import { columnTypeToGqlPrimitive } from '../../../generator/gql/columnToGqlType.js';
4
- import { GqlPrimitive } from '../../../generator/gql/types.js';
5
3
  import { getDefaultGqlOption } from '../../../migration/data/GQLOption.js';
4
+ import { columnTypeToGqlPrimitive } from '../../../generatorv2/scripts/columnToGqlType.js';
5
+ import { GqlPrimitive } from '../../../generatorv2/scripts/gqlTypes.js';
6
6
  const splitArray = (array, callback) => {
7
7
  const indexes = [];
8
8
  array.forEach((it, i) => {
@@ -57,6 +57,7 @@ export class CreateTableParser {
57
57
  uniqueKeys: [],
58
58
  indexes: [],
59
59
  gqlOption: getDefaultGqlOption(),
60
+ virtualRelations: [],
60
61
  };
61
62
  }
62
63
  resolveParen() {
@@ -142,7 +143,7 @@ export class CreateTableParser {
142
143
  onUpdateCurrentTimeStamp: isOnUpdate(),
143
144
  };
144
145
  if (column.default === '.nan' || Number.isNaN(column.default)) {
145
- console.log(column);
146
+ console.error(column);
146
147
  }
147
148
  this.result.columns.push(column);
148
149
  if (tokens.some(it => it.kind === 'PRIMARY')) {
@@ -203,10 +204,10 @@ export class CreateTableParser {
203
204
  const isColumnUnique = this.result.uniqueKeys
204
205
  .filter(it => it.length === 1)
205
206
  .find(it => it[0] === columnName);
206
- const sameTableRefs = this.result.columns.filter(it => it.hasReference && it.reference.targetTable === targetTable);
207
+ const sameTableRefs = this.result.columns.filter(it => it.hasReference && it.reference.parentTable === targetTable);
207
208
  const reference = {
208
- targetTable,
209
- targetColumn,
209
+ parentTable: targetTable,
210
+ parentColumn: targetColumn,
210
211
  columnName,
211
212
  relation: isColumnUnique ? 'OneOrZero' : 'Many',
212
213
  relationName: sameTableRefs.length !== 0
@@ -70,12 +70,12 @@ const startStrMap = [
70
70
  const isColumnUnique = table.uniqueKeys
71
71
  .filter(it => it.length === 1)
72
72
  .find(it => it[0] === columnName);
73
- const sameTableRefs = table.columns.filter(it => it.hasReference && it.reference.targetTable === targetTable);
73
+ const sameTableRefs = table.columns.filter(it => it.hasReference && it.reference.parentTable === targetTable);
74
74
  const onUpdate = tokens.findIndex(it => it.kind === TokenKind.Keyword && it.value === 'ON UPDATE');
75
75
  const onDelete = tokens.findIndex(it => it.kind === TokenKind.Keyword && it.value === 'ON DELETE');
76
76
  const reference = {
77
- targetTable,
78
- targetColumn,
77
+ parentTable: targetTable,
78
+ parentColumn: targetColumn,
79
79
  columnName,
80
80
  relation: isColumnUnique ? 'OneOrZero' : 'Many',
81
81
  relationName: sameTableRefs.length !== 0
@@ -11,6 +11,6 @@ export const SqlCreator = {
11
11
  const onDelete = reference.onDelete
12
12
  ? ' ON DELETE ' + reference.onDelete
13
13
  : '';
14
- return `ALTER TABLE ${tableName} ADD CONSTRAINT '${constraintName}' FOREIGN KEY (${reference.columnName}) REFERENCES ${reference.targetTable}(${reference.targetColumn})${onUpdate}${onDelete}`;
14
+ return `ALTER TABLE ${tableName} ADD CONSTRAINT '${constraintName}' FOREIGN KEY (${reference.columnName}) REFERENCES ${reference.parentTable}(${reference.parentColumn})${onUpdate}${onDelete}`;
15
15
  },
16
16
  };
@@ -0,0 +1,3 @@
1
+ import { TsFile } from '../../../tsg/index.js';
2
+ import { RootNode } from '../../nodes/rootNode.js';
3
+ export declare const generateTypeDefs: (root: RootNode) => TsFile;
@@ -0,0 +1,102 @@
1
+ import { TsFile, tsg } from '../../../tsg/index.js';
2
+ import { nonNullableFilter } from '../../../util/type.js';
3
+ import { GQLString, makeGQLType } from './gqlString.js';
4
+ import { typeFieldDefinitionToTsg } from './typeDefinition.js';
5
+ import { EntityName } from '../../nodes/entityName.js';
6
+ export const generateTypeDefs = (root) => {
7
+ const types = [
8
+ ...root.entities.map(makeEntityType),
9
+ makeQuery(root.queries),
10
+ makeMutation(root.mutations),
11
+ makeSubscription(root.subscriptions.filter(it => it.gqlEnabled)),
12
+ ].filter(nonNullableFilter);
13
+ const inputs = [
14
+ tsg.propertyAssign('PagingOption', tsg.object(tsg.propertyAssign('numberOfItem', typeFieldDefinitionToTsg({ return: 'Int!' })), tsg.propertyAssign('offset', typeFieldDefinitionToTsg({ return: 'Int' })), tsg.propertyAssign('order', typeFieldDefinitionToTsg({ return: 'String' })), tsg.propertyAssign('asc', typeFieldDefinitionToTsg({ return: 'Boolean' })))),
15
+ ...root.entities.map(makeCreateInput),
16
+ ...root.entities.map(makeUpdateInput),
17
+ ].filter(nonNullableFilter);
18
+ return new TsFile(tsg
19
+ .variable('const', tsg.identifier('typeDefs'), tsg.object(...types))
20
+ .export(), tsg
21
+ .variable('const', tsg.identifier('inputs'), tsg.object(...inputs))
22
+ .export()).disableEsLint();
23
+ };
24
+ const makeEntityType = (node) => {
25
+ if (!node.gqlEnabled)
26
+ return null;
27
+ return tsg.propertyAssign(node.name.name, tsg.object(...node.fields
28
+ .filter(it => it.isGQLOpen)
29
+ .map(it => {
30
+ return tsg.propertyAssign(it.fieldName, typeFieldDefinitionToTsg({
31
+ return: makeGQLType(it.gqlType, it.isNullable, it.isArray),
32
+ }));
33
+ }), ...node.references
34
+ .filter(it => it.isGQLOpen)
35
+ .map(it => {
36
+ return tsg.propertyAssign(it.fieldName, typeFieldDefinitionToTsg({
37
+ return: makeGQLType(EntityName.fromTableName(it.parentTableName).name, it.isNullable, it.isArray),
38
+ }));
39
+ }), ...node.referencedBy
40
+ .filter(it => it.isGQLOpen)
41
+ .map(it => {
42
+ return tsg.propertyAssign(it.fieldName, typeFieldDefinitionToTsg({
43
+ return: makeGQLType(EntityName.fromTableName(it.childTable).name, it.isNullable, it.isArray),
44
+ }));
45
+ })));
46
+ };
47
+ const makeInput = (inputName, fields) => {
48
+ return tsg.propertyAssign(inputName, tsg.object(...fields
49
+ .filter(it => it.isGQLOpen)
50
+ .map(it => tsg.propertyAssign(it.fieldName, typeFieldDefinitionToTsg({
51
+ return: makeGQLType(it.gqlType, it.isNullable, it.isArray),
52
+ })))));
53
+ };
54
+ const makeCreateInput = (node) => {
55
+ if (!node.gqlEnabled || !node.creatable.gqlEnabled)
56
+ return null;
57
+ return makeInput(node.name.createInputName(), node.creatable.fields);
58
+ };
59
+ const makeUpdateInput = (node) => {
60
+ if (!node.gqlEnabled || !node.updateInput.gqlEnabled)
61
+ return null;
62
+ return makeInput(node.name.updateInputName(), node.updateInput.fields);
63
+ };
64
+ const makeQuery = (queries) => {
65
+ if (queries.length === 0)
66
+ return null;
67
+ return tsg.propertyAssign('Query', tsg.object(...queries.map(query => {
68
+ return tsg.propertyAssign(query.queryName, typeFieldDefinitionToTsg({
69
+ return: GQLString.type(query.returnType),
70
+ args: query.args.map(arg => ({
71
+ name: arg.name,
72
+ type: GQLString.type(arg.type),
73
+ })),
74
+ }));
75
+ })));
76
+ };
77
+ const makeMutation = (mutations) => {
78
+ if (mutations.length === 0)
79
+ return null;
80
+ return tsg.propertyAssign('Mutation', tsg.object(...mutations.map(mutation => {
81
+ return tsg.propertyAssign(mutation.mutationName, typeFieldDefinitionToTsg({
82
+ return: GQLString.type(mutation.returnType),
83
+ args: mutation.args.map(arg => ({
84
+ name: arg.name,
85
+ type: GQLString.type(arg.type),
86
+ })),
87
+ }));
88
+ })));
89
+ };
90
+ const makeSubscription = (subscriptions) => {
91
+ if (subscriptions.length === 0)
92
+ return null;
93
+ return tsg.propertyAssign('Subscription', tsg.object(...subscriptions.map(subscription => {
94
+ return tsg.propertyAssign(subscription.subscriptionName, typeFieldDefinitionToTsg({
95
+ return: GQLString.type(subscription.returnType),
96
+ args: subscription.args.map(arg => ({
97
+ name: arg.name,
98
+ type: GQLString.type(arg.type),
99
+ })),
100
+ }));
101
+ })));
102
+ };
@@ -0,0 +1,16 @@
1
+ import { ArgNode, TypeNode } from '../../nodes/typeNode.js';
2
+ import { FieldNode, ReferencedNode, ReferenceNode } from '../../nodes/entityNode.js';
3
+ import { MutationNode } from '../../nodes/mutationNode.js';
4
+ import { SubscriptionNode } from '../../nodes/subscriptionNode.js';
5
+ import { QueryNode } from '../../nodes/queryNode.js';
6
+ export declare const GQLString: {
7
+ args: (args: ArgNode[]) => string;
8
+ field: (field: FieldNode) => string;
9
+ referenceField: (ref: ReferenceNode) => string;
10
+ referencedField: (ref: ReferencedNode) => string;
11
+ query: (node: QueryNode) => string;
12
+ mutation: (node: MutationNode) => string;
13
+ subscription: (node: SubscriptionNode) => string;
14
+ type: (node: TypeNode) => string;
15
+ };
16
+ export declare const makeGQLType: (typeName: string, isNullable: boolean, isArray: boolean) => string;
@@ -0,0 +1,43 @@
1
+ import { EntityName } from '../../nodes/entityName.js';
2
+ export const GQLString = {
3
+ args: (args) => {
4
+ if (args.length === 0)
5
+ return '';
6
+ return `(${args
7
+ .map(arg => `${arg.name}: ${GQLString.type(arg.type)}`)
8
+ .join(',')})`;
9
+ },
10
+ field: (field) => {
11
+ return `${field.fieldName}: ${fieldGqlType(field)}`;
12
+ },
13
+ referenceField: (ref) => {
14
+ return `${ref.fieldName}: ${makeGQLType(EntityName.fromTableName(ref.parentTableName).name, ref.isNullable, ref.isArray)}`;
15
+ },
16
+ referencedField: (ref) => {
17
+ return `${ref.fieldName}: ${makeGQLType(EntityName.fromTableName(ref.childTable).name, ref.isNullable, ref.isArray)}`;
18
+ },
19
+ query: (node) => {
20
+ return `${node.queryName}${GQLString.args(node.args)}: ${GQLString.type(node.returnType)}`;
21
+ },
22
+ mutation: (node) => {
23
+ return `${node.mutationName}${GQLString.args(node.args)}: ${GQLString.type(node.returnType)}`;
24
+ },
25
+ subscription: (node) => {
26
+ return `${node.subscriptionName}${GQLString.args(node.args)}: ${GQLString.type(node.returnType)}`;
27
+ },
28
+ type: (node) => {
29
+ const type = node.nullable ? node.typeName : node.typeName + '!';
30
+ if (node.array)
31
+ return `[${type}]!`;
32
+ return type;
33
+ },
34
+ };
35
+ const fieldGqlType = (field) => {
36
+ return makeGQLType(field.gqlType, field.isNullable, field.isArray);
37
+ };
38
+ export const makeGQLType = (typeName, isNullable, isArray) => {
39
+ const type = isNullable ? typeName : typeName + '!';
40
+ if (isArray)
41
+ return `[${type}]!`;
42
+ return type;
43
+ };
@@ -0,0 +1,9 @@
1
+ import { ObjectLiteral } from '../../../tsg/index.js';
2
+ export declare type TypeFieldDefinition = {
3
+ return: string;
4
+ args?: {
5
+ name: string;
6
+ type: string;
7
+ }[];
8
+ };
9
+ export declare const typeFieldDefinitionToTsg: (def: TypeFieldDefinition) => ObjectLiteral;
@@ -0,0 +1,13 @@
1
+ import { tsg } from '../../../tsg/index.js';
2
+ import { nonNullableFilter } from '../../../util/type.js';
3
+ export const typeFieldDefinitionToTsg = (def) => {
4
+ const properties = [
5
+ tsg.propertyAssign('return', tsg.string(def.return)),
6
+ def.args
7
+ ? tsg.propertyAssign('args', tsg.array(def.args.map(it => {
8
+ return tsg.object(tsg.propertyAssign('name', tsg.string(it.name)), tsg.propertyAssign('type', tsg.string(it.type)));
9
+ })))
10
+ : null,
11
+ ];
12
+ return tsg.object(...properties.filter(nonNullableFilter));
13
+ };
@@ -0,0 +1,4 @@
1
+ import { EntityName } from '../nodes/entityName.js';
2
+ import { MutationType } from '../nodes/mutationNode.js';
3
+ export declare const publishFunctionName: (entityName: EntityName, type: MutationType) => string;
4
+ export declare const makeFindQueryName: (keys: string[]) => string;
@@ -0,0 +1,10 @@
1
+ import { capitalizeFirstLetter } from '../../util/stringUtil.js';
2
+ const map = {
3
+ create: 'Created',
4
+ update: 'Updated',
5
+ delete: 'Deleted',
6
+ };
7
+ export const publishFunctionName = (entityName, type) => {
8
+ return `publish${entityName}${map[type]}`;
9
+ };
10
+ export const makeFindQueryName = (keys) => 'findBy' + keys.map(capitalizeFirstLetter).join('And');
@@ -0,0 +1,4 @@
1
+ import { TsFile } from '../../../tsg/index.js';
2
+ import { EntityNode } from '../../nodes/entityNode.js';
3
+ export declare const generateAutoGeneratedDatasource: (node: EntityNode) => TsFile;
4
+ export declare const makeClassProperties: (node: EntityNode) => import("../../../tsg/index.js").PropertyDeclaration[];
@@ -0,0 +1,123 @@
1
+ import { KeywordTypeNode, TsFile, tsg } from '../../../tsg/index.js';
2
+ import { makeContextTypeRef, makeTypeRef, } from './scripts/getEntityTypeRefs.js';
3
+ import { Directory } from '../../directory.js';
4
+ import { sqlValueToTsExpression } from './scripts/sqlValueToTsExpression.js';
5
+ import { columnTypeToTsType } from '../../../migration/column/columnTypes.js';
6
+ const DIR = 'GENERATED_DS';
7
+ export const generateAutoGeneratedDatasource = (node) => {
8
+ return new TsFile(tsg.typeAlias('QueryResult', tsg.intersectionType(makeTypeRef(node.name, 'withRelation', DIR).partial(), makeTypeRef(node.name, 'identifiable', DIR))), tsg
9
+ .class(node.name.generatedDataSourceName())
10
+ .export()
11
+ .abstract()
12
+ .extends(tsg
13
+ .extends(tsg.typeRef('BaseDBDataSource', [
14
+ makeTypeRef(node.name, 'entity', DIR),
15
+ makeTypeRef(node.name, 'identifiable', DIR),
16
+ makeTypeRef(node.name, 'creatable', DIR),
17
+ makeTypeRef(node.name, 'updatable', DIR),
18
+ makeTypeRef(node.name, 'fields', DIR),
19
+ tsg.typeRef('QueryResult'),
20
+ ]))
21
+ .addImport(['BaseDBDataSource'], Directory.resolve(DIR, 'BASE', 'baseDBDataSource')))
22
+ .addProperty(...makeClassProperties(node))
23
+ .addMethod(makeDefaultValueMethod(node), ...makeFindMethods(node))).disableEsLint();
24
+ };
25
+ export const makeClassProperties = (node) => {
26
+ const ai = node.fields.find(it => it.isAutoIncrement);
27
+ return [
28
+ tsg
29
+ .propertyDeclaration('tableName', KeywordTypeNode.string, false)
30
+ .modifiers(tsg.propertyModifiers().readonly())
31
+ .initializer(tsg.string(node.tableName)),
32
+ tsg
33
+ .propertyDeclaration('fields', tsg.arrayType(KeywordTypeNode.string), false)
34
+ .modifiers(tsg.propertyModifiers().readonly())
35
+ .initializer(tsg.array(node.fields.map(it => tsg.string(it.fieldName)))),
36
+ tsg
37
+ .propertyDeclaration('primaryKeys', tsg.arrayType(KeywordTypeNode.string), false)
38
+ .modifiers(tsg.propertyModifiers().readonly().protected())
39
+ .initializer(tsg.array(node.identifyKeys.map(it => tsg.string(it)))),
40
+ tsg
41
+ .propertyDeclaration('identifyFields', tsg.arrayType(KeywordTypeNode.string), false)
42
+ .modifiers(tsg.propertyModifiers().readonly().protected())
43
+ .initializer(tsg.array(node.identifyKeys
44
+ .map(it => node.fields.find(f => it === f.columnName).fieldName)
45
+ .map(tsg.string))),
46
+ tsg
47
+ .propertyDeclaration('autoIncrementColumn', tsg.unionType(KeywordTypeNode.string, KeywordTypeNode.undefined), true)
48
+ .modifiers(tsg.propertyModifiers().readonly().protected())
49
+ .initializer(ai ? tsg.string(ai.fieldName) : tsg.identifier('undefined')),
50
+ ];
51
+ };
52
+ const fieldToExpression = (node) => {
53
+ if (node.column.defaultCurrentTimeStamp) {
54
+ return tsg
55
+ .identifier('getCurrentDateTimeString')
56
+ .addImport(['getCurrentDateTimeString'], 'sasat')
57
+ .call();
58
+ }
59
+ return sqlValueToTsExpression(node.column.default);
60
+ };
61
+ const makeDefaultValueMethod = (node) => {
62
+ const columns = node.fields.filter(it => it.column.defaultCurrentTimeStamp || it.column.default !== undefined);
63
+ const properties = columns.map(it => {
64
+ return tsg.propertyAssign(it.fieldName, fieldToExpression(it));
65
+ });
66
+ const body = tsg.return(tsg.object(...properties));
67
+ return tsg
68
+ .method('getDefaultValueString', [], columns.length !== 0
69
+ ? tsg.typeRef(node.name.name).pick(...columns.map(it => it.fieldName))
70
+ : tsg.typeRef('Record<string, never>'), [body])
71
+ .modifiers(tsg.methodModifiers().protected());
72
+ };
73
+ const makeFindMethods = (node) => {
74
+ const qExpr = tsg.identifier('QExpr').importFrom('sasat');
75
+ return node.findMethods.map(it => {
76
+ const bve = it.params.flatMap(it => {
77
+ if (!it.entity)
78
+ return qExpr
79
+ .property('conditions')
80
+ .property('eq')
81
+ .call(qExpr
82
+ .property('field')
83
+ .call(tsg.identifier('tableName'), tsg.string(it.columnName.toString())), qExpr
84
+ .property('value')
85
+ .call(tsg.identifier(it.fieldName.toString())));
86
+ return it.fields.map(field => {
87
+ return qExpr
88
+ .property('conditions')
89
+ .property('eq')
90
+ .call(qExpr
91
+ .property('field')
92
+ .call(tsg.identifier('tableName'), tsg.string(field.columnName)), qExpr
93
+ .property('value')
94
+ .call(tsg.identifier(it.name).property(field.fieldName)));
95
+ });
96
+ });
97
+ const body = [
98
+ tsg.variable('const', 'tableName', tsg.identifier('fields?.tableAlias || "t0"')),
99
+ tsg.return(tsg.identifier(it.isArray ? 'this.find' : 'this.first').call(tsg.identifier('fields'), tsg.object().addProperties(tsg.spreadAssign(tsg.identifier('options')), tsg.propertyAssign('where', qExpr
100
+ .property('conditions')
101
+ .property('and')
102
+ .call(...bve, tsg.identifier('options?').property('where')))), tsg.identifier('context'))),
103
+ ];
104
+ const returnType = tsg.typeRef('QueryResult');
105
+ return tsg.method(it.name, [
106
+ ...it.params.map(it => tsg.parameter(it.entity ? it.name.toString() : it.fieldName, it.entity
107
+ ? makeTypeRef(it.entityName, 'identifiable', 'GENERATED_DS')
108
+ : tsg.typeRef(columnTypeToTsType(it.dbtype)))),
109
+ tsg.parameter(`fields?`, makeTypeRef(node.name, 'fields', DIR)),
110
+ tsg.parameter('options?', it.isArray
111
+ ? tsg.typeRef('QueryOptions').importFrom('sasat')
112
+ : tsg.typeRef('Omit', [
113
+ tsg.typeRef('QueryOptions').importFrom('sasat'),
114
+ tsg.typeRef('"offset" | "limit" | "sort"'),
115
+ ])),
116
+ tsg.parameter('context?', makeContextTypeRef(DIR)),
117
+ ], tsg.typeRef('Promise', [
118
+ it.isArray
119
+ ? tsg.arrayType(returnType)
120
+ : tsg.unionType(returnType, tsg.typeRef('null')),
121
+ ]), body);
122
+ });
123
+ };
@@ -0,0 +1,3 @@
1
+ import { RootNode } from '../../nodes/rootNode.js';
2
+ import { TsFile } from '../../../tsg/index.js';
3
+ export declare const generateContext: (root: RootNode) => TsFile;
@@ -0,0 +1,8 @@
1
+ import { TsFile, tsg } from '../../../tsg/index.js';
2
+ import { columnTypeToTsType } from '../../../migration/column/columnTypes.js';
3
+ export const generateContext = (root) => {
4
+ return new TsFile(tsg
5
+ .interface('BaseGQLContext')
6
+ .addProperties(root.contexts.map(it => tsg.propertySignature(it.name, tsg.typeRef(columnTypeToTsType(it.dbtype)))))
7
+ .export()).disableEsLint();
8
+ };
@@ -0,0 +1,3 @@
1
+ import { EntityNode } from '../../nodes/entityNode.js';
2
+ import { TsFile } from '../../../tsg/index.js';
3
+ export declare const generateDatasource: (node: EntityNode) => TsFile;
@@ -0,0 +1,10 @@
1
+ import { TsFile, tsg } from '../../../tsg/index.js';
2
+ import { Directory } from '../../directory.js';
3
+ export const generateDatasource = (node) => {
4
+ return new TsFile(tsg
5
+ .class(node.name.dataSourceName())
6
+ .extends(tsg.extends(tsg
7
+ .typeRef(node.name.generatedDataSourceName())
8
+ .importFrom(Directory.resolve('DATA_SOURCES', 'GENERATED_DS', node.name.name))))
9
+ .export());
10
+ };
@@ -0,0 +1,3 @@
1
+ import { TsFile } from '../../../tsg/index.js';
2
+ import { EntityNode } from '../../nodes/entityNode.js';
3
+ export declare const generateEntityFile: (node: EntityNode) => TsFile;
@@ -0,0 +1,29 @@
1
+ import { tsg, TsFile } from '../../../tsg/index.js';
2
+ import { fieldToPropertySignature } from './scripts/fieldToProperty.js';
3
+ export const generateEntityFile = (node) => {
4
+ return new TsFile(generateEntity(node), generateCreatable(node), generateUpdatable(node), generateIdentifiable(node)).disableEsLint();
5
+ };
6
+ const generateEntity = (node) => {
7
+ return tsg
8
+ .typeAlias(node.name.name, tsg.typeLiteral(node.fields.map(fieldToPropertySignature)))
9
+ .export();
10
+ };
11
+ const generateCreatable = (node) => {
12
+ return tsg
13
+ .typeAlias(node.name.creatableInterface(), node.creatable.fields.length === 0
14
+ ? tsg.typeRef('Record<string, never>')
15
+ : tsg.typeLiteral(node.creatable.fields.map(fieldToPropertySignature)))
16
+ .export();
17
+ };
18
+ const generateUpdatable = (node) => {
19
+ return tsg
20
+ .typeAlias(node.name.updatable(), node.updateInput.fields.length === 0
21
+ ? tsg.typeRef('Record<string, never>')
22
+ : tsg.typeLiteral(node.updateInput.fields.map(fieldToPropertySignature)))
23
+ .export();
24
+ };
25
+ const generateIdentifiable = (node) => {
26
+ return tsg
27
+ .typeAlias(node.name.identifiableInterfaceName(), tsg.typeLiteral(node.fields.filter(it => it.isPrimary).map(fieldToPropertySignature)))
28
+ .export();
29
+ };
@@ -0,0 +1,3 @@
1
+ import { RootNode } from '../../nodes/rootNode.js';
2
+ import { TsFile } from '../../../tsg/index.js';
3
+ export declare const generateFields: (root: RootNode) => TsFile;
@@ -0,0 +1,19 @@
1
+ import { TsFile, tsg } from '../../../tsg/index.js';
2
+ import { makeTypeRef } from './scripts/getEntityTypeRefs.js';
3
+ import { EntityName } from '../../nodes/entityName.js';
4
+ export const generateFields = (root) => {
5
+ return new TsFile(...root.entities.map(it => tsg
6
+ .typeAlias(it.name.fieldsTypeName(), tsg
7
+ .typeRef('Fields', [
8
+ makeTypeRef(it.name, 'entity', 'GENERATED'),
9
+ makeTypeLiteral(it),
10
+ ])
11
+ .importFrom('sasat'))
12
+ .export())).disableEsLint();
13
+ };
14
+ const makeTypeLiteral = (entity) => {
15
+ return tsg.typeLiteral([
16
+ ...entity.references.map(it => tsg.propertySignature(`${it.fieldName}?`, tsg.typeRef(EntityName.fromTableName(it.parentTableName).fieldsTypeName()))),
17
+ ...entity.referencedBy.map(it => tsg.propertySignature(`${it.fieldName}?`, tsg.typeRef(EntityName.fromTableName(it.childTable).fieldsTypeName()))),
18
+ ]);
19
+ };
@@ -0,0 +1,3 @@
1
+ import { RootNode } from '../../nodes/rootNode.js';
2
+ import { TsFile } from '../../../tsg/index.js';
3
+ export declare const generateMutationResolver: (root: RootNode) => TsFile;