@aws-amplify/graphql-schema-generator
Version:
Amplify GraphQL schema generator
62 lines • 2.76 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypescriptDataSchemaGenerator = void 0;
const crypto_1 = require("crypto");
const datasource_adapter_1 = require("../datasource-adapter");
const schema_representation_1 = require("../schema-representation");
const utils_1 = require("../utils");
const generate_ts_schema_1 = require("./generate-ts-schema");
class TypescriptDataSchemaGenerator {
}
exports.TypescriptDataSchemaGenerator = TypescriptDataSchemaGenerator;
_a = TypescriptDataSchemaGenerator;
TypescriptDataSchemaGenerator.generate = async (config) => {
const schema = await TypescriptDataSchemaGenerator.buildSchema(config);
return (0, generate_ts_schema_1.generateTypescriptDataSchema)(schema, {
secretNames: {
connectionUri: config.connectionUriSecretName,
sslCertificate: config.sslCertificateSecretName,
},
vpcConfig: await (0, utils_1.getHostVpc)(config.host),
identifier: TypescriptDataSchemaGenerator.createIdentifier(config),
});
};
TypescriptDataSchemaGenerator.getAdapter = (config) => {
switch (config.engine) {
case 'mysql':
return new datasource_adapter_1.MySQLDataSourceAdapter(config);
case 'postgresql':
return new datasource_adapter_1.PostgresDataSourceAdapter(config);
}
throw new Error('Only MySQL and Postgres Data Sources are supported');
};
TypescriptDataSchemaGenerator.getDBEngineType = (config) => {
switch (config.engine) {
case 'mysql':
return 'MySQL';
case 'postgresql':
return 'Postgres';
}
throw new Error('Only MySQL and Postgres Data Sources are supported');
};
TypescriptDataSchemaGenerator.buildSchema = async (config) => {
const adapter = TypescriptDataSchemaGenerator.getAdapter(config);
await adapter.initialize();
const schema = new schema_representation_1.Schema(new schema_representation_1.Engine(TypescriptDataSchemaGenerator.getDBEngineType(config)));
const models = adapter.getModels();
adapter.cleanup();
models.forEach((m) => schema.addModel(m));
return schema;
};
TypescriptDataSchemaGenerator.createIdentifier = (config) => {
const { host, database, engine, port } = config;
const identifierString = host.concat(engine, database, port.toString());
const identifierHash = (0, crypto_1.createHash)('md5').update(identifierString).digest('base64');
const identifier = `ID${TypescriptDataSchemaGenerator.removeNonAlphaNumericChars(identifierHash)}`;
return identifier;
};
TypescriptDataSchemaGenerator.removeNonAlphaNumericChars = (str) => {
return str.split(/[^A-Za-z0-9]*/).join('');
};
//# sourceMappingURL=ts-schema-generator.js.map