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.
- package/lib/cli/commands/generate.js +2 -4
- package/lib/cli/commands/migrate.js +2 -4
- package/lib/db/sql/createTable/createTableParser.js +7 -6
- package/lib/db/sql/createTable/createTableSerializer.js +3 -3
- package/lib/db/sql/sqlCreater.js +1 -1
- package/lib/generatorv2/codegen/gql/generateTypeDefs.d.ts +3 -0
- package/lib/generatorv2/codegen/gql/generateTypeDefs.js +102 -0
- package/lib/generatorv2/codegen/gql/gqlString.d.ts +16 -0
- package/lib/generatorv2/codegen/gql/gqlString.js +43 -0
- package/lib/generatorv2/codegen/gql/typeDefinition.d.ts +9 -0
- package/lib/generatorv2/codegen/gql/typeDefinition.js +13 -0
- package/lib/generatorv2/codegen/names.d.ts +4 -0
- package/lib/generatorv2/codegen/names.js +10 -0
- package/lib/generatorv2/codegen/ts/generateAutoGeneratedDatasource.d.ts +4 -0
- package/lib/generatorv2/codegen/ts/generateAutoGeneratedDatasource.js +123 -0
- package/lib/generatorv2/codegen/ts/generateContext.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateContext.js +8 -0
- package/lib/generatorv2/codegen/ts/generateDatasource.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateDatasource.js +10 -0
- package/lib/generatorv2/codegen/ts/generateEntity.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateEntity.js +29 -0
- package/lib/generatorv2/codegen/ts/generateFields.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateFields.js +19 -0
- package/lib/generatorv2/codegen/ts/generateMutationResolver.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateMutationResolver.js +116 -0
- package/lib/generatorv2/codegen/ts/generateQueryResolver.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateQueryResolver.js +73 -0
- package/lib/generatorv2/codegen/ts/generateRelationMap.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateRelationMap.js +126 -0
- package/lib/generatorv2/codegen/ts/generateResolver.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateResolver.js +38 -0
- package/lib/generatorv2/codegen/ts/generateSubscription.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/generateSubscription.js +49 -0
- package/lib/generatorv2/codegen/ts/scripts/fieldToProperty.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/scripts/fieldToProperty.js +6 -0
- package/lib/generatorv2/codegen/ts/scripts/getEntityTypeRefs.d.ts +7 -0
- package/lib/generatorv2/codegen/ts/scripts/getEntityTypeRefs.js +50 -0
- package/lib/generatorv2/codegen/ts/scripts/makeDatasource.d.ts +4 -0
- package/lib/generatorv2/codegen/ts/scripts/makeDatasource.js +7 -0
- package/lib/generatorv2/codegen/ts/scripts/sqlValueToTsExpression.d.ts +3 -0
- package/lib/generatorv2/codegen/ts/scripts/sqlValueToTsExpression.js +10 -0
- package/lib/generatorv2/codegen/ts/staticFiles.d.ts +2 -0
- package/lib/{generator → generatorv2/codegen}/ts/staticFiles.js +4 -3
- package/lib/generatorv2/codegen/tscodegen_v2.d.ts +20 -0
- package/lib/generatorv2/codegen/tscodegen_v2.js +38 -0
- package/lib/{generator/controller.d.ts → generatorv2/codegen_v2.d.ts} +6 -6
- package/lib/{generator/controller.js → generatorv2/codegen_v2.js} +24 -23
- package/lib/generatorv2/directory.d.ts +5 -0
- package/lib/generatorv2/directory.js +25 -0
- package/lib/generatorv2/nodes/ConditionNode.d.ts +23 -0
- package/lib/{generator/generator.js → generatorv2/nodes/ConditionNode.js} +0 -0
- package/lib/generatorv2/nodes/contextNode.d.ts +5 -0
- package/lib/generatorv2/nodes/contextNode.js +1 -0
- package/lib/{parser/node → generatorv2/nodes}/entityName.d.ts +2 -8
- package/lib/generatorv2/nodes/entityName.js +48 -0
- package/lib/generatorv2/nodes/entityNode.d.ts +88 -0
- package/lib/generatorv2/nodes/entityNode.js +168 -0
- package/lib/generatorv2/nodes/mutationNode.d.ts +18 -0
- package/lib/generatorv2/nodes/mutationNode.js +1 -0
- package/lib/generatorv2/nodes/queryNode.d.ts +13 -0
- package/lib/generatorv2/nodes/queryNode.js +1 -0
- package/lib/generatorv2/nodes/rootNode.d.ts +12 -0
- package/lib/generatorv2/nodes/rootNode.js +1 -0
- package/lib/generatorv2/nodes/subscriptionNode.d.ts +19 -0
- package/lib/generatorv2/nodes/subscriptionNode.js +1 -0
- package/lib/generatorv2/nodes/typeNode.d.ts +15 -0
- package/lib/generatorv2/nodes/typeNode.js +1 -0
- package/lib/generatorv2/parse.d.ts +3 -0
- package/lib/generatorv2/parse.js +14 -0
- package/lib/generatorv2/parser/makeContextNodes.d.ts +3 -0
- package/lib/generatorv2/parser/makeContextNodes.js +8 -0
- package/lib/generatorv2/parser/makeEntityNodes.d.ts +3 -0
- package/lib/generatorv2/parser/makeEntityNodes.js +8 -0
- package/lib/generatorv2/parser/makeMutationNodes.d.ts +3 -0
- package/lib/generatorv2/parser/makeMutationNodes.js +110 -0
- package/lib/generatorv2/parser/makeQueryNodes.d.ts +3 -0
- package/lib/generatorv2/parser/makeQueryNodes.js +68 -0
- package/lib/generatorv2/parser/makeSubscriptionNode.d.ts +3 -0
- package/lib/generatorv2/parser/makeSubscriptionNode.js +61 -0
- package/lib/{generator/gql → generatorv2/scripts}/columnToGqlType.d.ts +1 -1
- package/lib/{generator/gql → generatorv2/scripts}/columnToGqlType.js +1 -1
- package/lib/{generator/gql/types.d.ts → generatorv2/scripts/gqlTypes.d.ts} +0 -0
- package/lib/{generator/gql/types.js → generatorv2/scripts/gqlTypes.js} +0 -0
- package/lib/index.d.ts +6 -2
- package/lib/index.js +1 -0
- package/lib/migration/creators/tableCreator.d.ts +3 -0
- package/lib/migration/creators/tableCreator.js +4 -0
- package/lib/migration/data/virtualRelation.d.ts +10 -0
- package/lib/migration/data/virtualRelation.js +1 -0
- package/lib/migration/dataStore.d.ts +3 -1
- package/lib/migration/dataStore.js +4 -3
- package/lib/migration/front/tableMigrator.d.ts +1 -0
- package/lib/migration/front/tableMigrator.js +9 -6
- package/lib/migration/serializable/column.d.ts +3 -1
- package/lib/migration/serializable/column.js +8 -2
- package/lib/migration/serializable/table.d.ts +7 -2
- package/lib/migration/serializable/table.js +14 -7
- package/lib/migration/serialized/serializedColumn.d.ts +4 -2
- package/lib/migration/serialized/serializedColumn.js +1 -1
- package/lib/migration/serialized/serializedStore.d.ts +2 -0
- package/lib/runtime/createTypeDef.d.ts +4 -1
- package/lib/runtime/createTypeDef.js +20 -11
- package/lib/runtime/dsl/factory.d.ts +4 -1
- package/lib/runtime/dsl/factory.js +12 -2
- package/lib/runtime/dsl/mutation/mutation.d.ts +1 -1
- package/lib/runtime/dsl/mutation/mutation.js +3 -6
- package/lib/runtime/dsl/query/createQueryResolveInfo.d.ts +4 -4
- package/lib/runtime/dsl/query/query.d.ts +7 -2
- package/lib/runtime/dsl/query/sql/hydrate.js +3 -3
- package/lib/runtime/dsl/query/sql/nodeToSql.js +5 -5
- package/lib/runtime/dsl/replaceAliases.js +8 -5
- package/lib/runtime/field.d.ts +1 -1
- package/lib/runtime/gqlResolveInfoToField.d.ts +1 -1
- package/lib/runtime/makeResolver.d.ts +10 -0
- package/lib/runtime/makeResolver.js +8 -0
- package/lib/runtime/resolverMiddleware.d.ts +2 -0
- package/lib/runtime/resolverMiddleware.js +1 -0
- package/lib/runtime/sasatDBDatasource.d.ts +6 -5
- package/lib/runtime/sasatDBDatasource.js +4 -4
- package/lib/runtime/sql/runQuery.js +2 -1
- package/lib/{generator/ts/code → tsg}/abstruct/exportableDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/abstruct/exportableDeclaration.js +0 -0
- package/lib/{generator/ts/code → tsg}/abstruct/statement.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/abstruct/statement.js +0 -0
- package/lib/{generator/ts/code → tsg}/abstruct/tsCode.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/abstruct/tsCode.js +0 -0
- package/lib/{generator/ts/code → tsg}/accessors.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/accessors.js +0 -0
- package/lib/{generator/ts/code → tsg}/factory.d.ts +16 -14
- package/lib/{generator/ts/code → tsg}/factory.js +2 -0
- package/lib/{generator/ts → tsg}/file.d.ts +3 -3
- package/lib/{generator/ts → tsg}/file.js +2 -2
- package/lib/{generator/ts/code → tsg}/importDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/importDeclaration.js +1 -1
- package/lib/tsg/index.d.ts +31 -0
- package/lib/tsg/index.js +30 -0
- package/lib/{generator/ts/code → tsg}/node/block.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/block.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/class.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/class.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/enumDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/enumDeclaration.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/enumMember.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/enumMember.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/expressionStatement.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/expressionStatement.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/expressions.d.ts +2 -0
- package/lib/{generator/ts/code → tsg}/node/expressions.js +10 -1
- package/lib/{generator/ts/code → tsg}/node/extendsClause.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/extendsClause.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/ifStatement.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/ifStatement.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/implementsClause.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/implementsClause.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/interface.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/interface.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/methodDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/methodDeclaration.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/modifier/methodModifiers.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/modifier/methodModifiers.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/modifier/modifiers.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/modifier/modifiers.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/modifier/propertyModifiers.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/modifier/propertyModifiers.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/parameter.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/parameter.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/propertyAssignment.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/propertyAssignment.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/propertyDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/propertyDeclaration.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/propertySignature.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/propertySignature.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/rawCodeStatement.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/rawCodeStatement.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/returnStatement.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/returnStatement.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/spreadAssignment.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/spreadAssignment.js +0 -0
- package/lib/tsg/node/throwStatement.d.ts +7 -0
- package/lib/tsg/node/throwStatement.js +11 -0
- package/lib/{generator/ts/code → tsg}/node/type/arrayType.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/arrayType.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/intersectionType.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/intersectionType.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/type.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/type.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeAliasDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeAliasDeclaration.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeKeyword.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeKeyword.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeLiteral.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeLiteral.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeReference.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/typeReference.js +0 -0
- package/lib/{generator/ts/code → tsg}/node/type/unionType.d.ts +1 -1
- package/lib/{generator/ts/code → tsg}/node/type/unionType.js +1 -1
- package/lib/{generator/ts/code → tsg}/node/variableDeclaration.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/node/variableDeclaration.js +0 -0
- package/lib/{generator/ts/code → tsg}/tsUtil.d.ts +0 -0
- package/lib/{generator/ts/code → tsg}/tsUtil.js +0 -0
- package/lib/{generator/ts → tsg}/tsValueString.d.ts +0 -0
- package/lib/{generator/ts → tsg}/tsValueString.js +1 -2
- package/lib/util/type.d.ts +1 -0
- package/lib/util/type.js +1 -1
- package/package.json +18 -23
- package/lib/constants/directory.d.ts +0 -20
- package/lib/constants/directory.js +0 -34
- package/lib/constants/interfaceConstants.d.ts +0 -5
- package/lib/constants/interfaceConstants.js +0 -5
- package/lib/db/connectors/mariadb/client.d.ts +0 -8
- package/lib/db/connectors/mariadb/client.js +0 -24
- package/lib/db/connectors/mariadb/transaction.d.ts +0 -9
- package/lib/db/connectors/mariadb/transaction.js +0 -20
- package/lib/generator/generator.d.ts +0 -21
- package/lib/generator/ts/db/generatedRepositoryGenerator.d.ts +0 -11
- package/lib/generator/ts/db/generatedRepositoryGenerator.js +0 -134
- package/lib/generator/ts/db/repositoryGenerator.d.ts +0 -5
- package/lib/generator/ts/db/repositoryGenerator.js +0 -13
- package/lib/generator/ts/entityGenerator.d.ts +0 -10
- package/lib/generator/ts/entityGenerator.js +0 -30
- package/lib/generator/ts/fieldGenerator.d.ts +0 -6
- package/lib/generator/ts/fieldGenerator.js +0 -25
- package/lib/generator/ts/generator.d.ts +0 -18
- package/lib/generator/ts/generator.js +0 -56
- package/lib/generator/ts/gql/contextGenerator.d.ts +0 -5
- package/lib/generator/ts/gql/contextGenerator.js +0 -10
- package/lib/generator/ts/gql/mutationGenerator.d.ts +0 -16
- package/lib/generator/ts/gql/mutationGenerator.js +0 -151
- package/lib/generator/ts/gql/queryGenerator.d.ts +0 -9
- package/lib/generator/ts/gql/queryGenerator.js +0 -87
- package/lib/generator/ts/gql/resolverGenerator.d.ts +0 -8
- package/lib/generator/ts/gql/resolverGenerator.js +0 -64
- package/lib/generator/ts/gql/subscriptionGenerator.d.ts +0 -9
- package/lib/generator/ts/gql/subscriptionGenerator.js +0 -65
- package/lib/generator/ts/gql/typeDefGenerator.d.ts +0 -11
- package/lib/generator/ts/gql/typeDefGenerator.js +0 -71
- package/lib/generator/ts/relationMapGenerator.d.ts +0 -10
- package/lib/generator/ts/relationMapGenerator.js +0 -77
- package/lib/generator/ts/staticFiles.d.ts +0 -2
- package/lib/parser/node/entityName.js +0 -71
- package/lib/parser/node/entityNode.d.ts +0 -24
- package/lib/parser/node/entityNode.js +0 -47
- package/lib/parser/node/fieldNode.d.ts +0 -25
- package/lib/parser/node/fieldNode.js +0 -43
- package/lib/parser/node/findMethod.d.ts +0 -10
- package/lib/parser/node/findMethod.js +0 -12
- package/lib/parser/node/gql/contextNode.d.ts +0 -6
- package/lib/parser/node/gql/contextNode.js +0 -6
- package/lib/parser/node/gql/contextParamNode.d.ts +0 -5
- package/lib/parser/node/gql/contextParamNode.js +0 -6
- package/lib/parser/node/gql/mutationNode.d.ts +0 -44
- package/lib/parser/node/gql/mutationNode.js +0 -74
- package/lib/parser/node/gql/queryNode.d.ts +0 -13
- package/lib/parser/node/gql/queryNode.js +0 -14
- package/lib/parser/node/gql/subscriptionFilterNode.d.ts +0 -6
- package/lib/parser/node/gql/subscriptionFilterNode.js +0 -6
- package/lib/parser/node/gql/typeDefNode.d.ts +0 -9
- package/lib/parser/node/gql/typeDefNode.js +0 -24
- package/lib/parser/node/parameterNode.d.ts +0 -8
- package/lib/parser/node/parameterNode.js +0 -14
- package/lib/parser/node/relationNode.d.ts +0 -32
- package/lib/parser/node/relationNode.js +0 -39
- package/lib/parser/node/repositoryNode.d.ts +0 -23
- package/lib/parser/node/repositoryNode.js +0 -60
- package/lib/parser/node/rootNode.d.ts +0 -20
- package/lib/parser/node/rootNode.js +0 -28
- package/lib/parser/node/typeNode.d.ts +0 -20
- package/lib/parser/node/typeNode.js +0 -48
- package/lib/parser/nodeFactory/contextNodeFactory.d.ts +0 -5
- package/lib/parser/nodeFactory/contextNodeFactory.js +0 -12
- package/lib/parser/nodeFactory/mutationNodeFactory.d.ts +0 -7
- package/lib/parser/nodeFactory/mutationNodeFactory.js +0 -38
- package/lib/parser/nodeFactory/queryNodeFactory.d.ts +0 -8
- package/lib/parser/nodeFactory/queryNodeFactory.js +0 -28
- package/lib/parser/parser.d.ts +0 -5
- 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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
package/lib/db/sql/sqlCreater.js
CHANGED
|
@@ -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.
|
|
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,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,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,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,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,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
|
+
};
|