@aws-amplify/appsync-modelgen-plugin
Version:
73 lines • 4.24 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppSyncModelJavascriptVisitor = void 0;
const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
const appsync_typescript_visitor_1 = require("./appsync-typescript-visitor");
const change_case_1 = require("change-case");
class AppSyncModelJavascriptVisitor extends appsync_typescript_visitor_1.AppSyncModelTypeScriptVisitor {
constructor(schema, rawConfig, additionalConfig, defaultScalars = visitor_plugin_common_1.DEFAULT_SCALARS) {
super(schema, rawConfig, additionalConfig, defaultScalars);
this._parsedConfig.isDeclaration = rawConfig.isDeclaration || false;
}
generate() {
const shouldUseModelNameFieldInHasManyAndBelongsTo = false;
const shouldImputeKeyForUniDirectionalHasMany = true;
const shouldUseFieldsInAssociatedWithInHasOne = true;
this.processDirectives(shouldUseModelNameFieldInHasManyAndBelongsTo, shouldImputeKeyForUniDirectionalHasMany, shouldUseFieldsInAssociatedWithInHasOne);
if (this._parsedConfig.isDeclaration) {
const enumDeclarations = Object.values(this.enumMap)
.map(enumObj => this.generateEnumDeclarations(enumObj, true))
.join('\n\n');
const modelDeclarations = Object.values(this.modelMap)
.map(typeObj => this.generateModelDeclaration(typeObj, true))
.join('\n\n');
const nonModelDeclarations = Object.values(this.nonModelMap)
.map(typeObj => this.generateModelDeclaration(typeObj, true, false))
.join('\n\n');
const imports = this.generateImports();
if (!this.isCustomPKEnabled()) {
const modelMetaData = Object.values(this.modelMap)
.map(typeObj => this.generateModelMetaData(typeObj))
.join('\n\n');
return [imports, enumDeclarations, nonModelDeclarations, modelMetaData, modelDeclarations].filter(b => b).join('\n\n');
}
return [imports, enumDeclarations, nonModelDeclarations, modelDeclarations].join('\n\n');
}
else {
const imports = this.generateImportsJavaScriptImplementation();
const enumDeclarations = Object.values(this.enumMap)
.map((e) => this.generateEnumObject(e))
.join('\n\n');
const modelInitialization = this.generateModelInitialization([...Object.values(this.modelMap), ...Object.values(this.nonModelMap)], false);
const modelExports = this.generateExports([
...Object.values(this.modelMap),
...Object.values(this.enumMap),
...Object.values(this.nonModelMap),
]);
return [imports, enumDeclarations, modelInitialization, modelExports].join('\n\n');
}
}
generateEnumObject(enumObj, exportEnum = false) {
const enumName = (0, change_case_1.pascalCase)(this.getEnumName(enumObj));
const header = [exportEnum ? 'export' : null, 'const', enumName].filter(h => h).join(' ');
return `${header} = ${JSON.stringify(enumObj.values, null, 2)};`;
}
generateImportsJavaScriptImplementation() {
return ['// @ts-check', "import { initSchema } from '@aws-amplify/datastore';", "import { schema } from './schema';"].join('\n');
}
generateModelTypeDeclarationName(model) {
return `${this.getModelName(model)}`;
}
generateImports() {
const baseImportComponents = Array.from(this.BASE_DATASTORE_IMPORT);
const baseImport = `import { ${baseImportComponents.join(', ')} } from "@aws-amplify/datastore";`;
if (this.TS_IGNORE_DATASTORE_IMPORT.size) {
const tsIgnoreImportComponents = Array.from(this.TS_IGNORE_DATASTORE_IMPORT);
const tsIgnoreImport = `// @ts-ignore\nimport { ${tsIgnoreImportComponents.join(', ')} } from "@aws-amplify/datastore";`;
return [baseImport, tsIgnoreImport].join('\n');
}
return baseImport;
}
}
exports.AppSyncModelJavascriptVisitor = AppSyncModelJavascriptVisitor;
//# sourceMappingURL=appsync-javascript-visitor.js.map