UNPKG

@aws-amplify/graphql-schema-generator

Version:
62 lines 2.76 kB
"use strict"; 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