UNPKG

@aws-amplify/appsync-modelgen-plugin

Version:
296 lines 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.preset = exports.presetSync = void 0; const graphql_1 = require("graphql"); const path_1 = require("path"); const scalars_1 = require("./scalars"); const java_config_1 = require("./configs/java-config"); const graphql_transformer_common_1 = require("graphql-transformer-common"); const APPSYNC_DATA_STORE_CODEGEN_TARGETS = ['java', 'swift', 'javascript', 'typescript', 'dart', 'introspection']; const generateJavaPreset = (options, models, manyToManyJoinModels) => { const config = []; const modelFolder = options.config.overrideOutputDir ? [options.config.overrideOutputDir] : [options.baseOutputDir, ...java_config_1.GENERATED_PACKAGE_NAME.split('.')]; const generateAPILazyModels = options.config.generateModelsForLazyLoadAndCustomSelectionSet && !options.config.isDataStoreEnabled; config.push({ ...options, filename: (0, path_1.join)(...modelFolder, `${java_config_1.LOADER_CLASS_NAME}.java`), config: { ...options.config, scalars: { ...scalars_1.JAVA_SCALAR_MAP, ...options.config.scalars }, generate: 'loader', }, }); models.forEach(model => { var _a; const modelName = model.name.value; config.push({ ...options, filename: (0, path_1.join)(...modelFolder, `${modelName}.java`), config: { ...options.config, scalars: { ...scalars_1.JAVA_SCALAR_MAP, ...options.config.scalars }, selectedType: modelName, }, }); if (generateAPILazyModels) { if ((_a = model === null || model === void 0 ? void 0 : model.directives) === null || _a === void 0 ? void 0 : _a.find((directive) => { var _a; return ((_a = directive === null || directive === void 0 ? void 0 : directive.name) === null || _a === void 0 ? void 0 : _a.value) === 'model'; })) { config.push({ ...options, filename: (0, path_1.join)(...modelFolder, `${modelName}Path.java`), config: { ...options.config, scalars: { ...scalars_1.JAVA_SCALAR_MAP, ...options.config.scalars }, generate: 'metadata', selectedType: modelName, }, }); } } }); if (generateAPILazyModels) { manyToManyJoinModels.forEach(joinModel => { config.push({ ...options, filename: (0, path_1.join)(...modelFolder, `${joinModel.name.value}Path.java`), config: { ...options.config, scalars: { ...scalars_1.JAVA_SCALAR_MAP, ...options.config.scalars }, generate: 'metadata', selectedType: joinModel.name.value, }, }); }); } ; return config; }; const generateSwiftPreset = (options, models) => { const config = []; const modelFolder = options.config.overrideOutputDir ? options.config.overrideOutputDir : options.baseOutputDir; models.forEach(model => { const modelName = model.name.value; config.push({ ...options, filename: (0, path_1.join)(modelFolder, `${modelName}.swift`), config: { ...options.config, scalars: { ...scalars_1.SWIFT_SCALAR_MAP, ...options.config.scalars }, generate: 'code', selectedType: modelName, }, }); if (model.kind !== graphql_1.Kind.ENUM_TYPE_DEFINITION) { config.push({ ...options, filename: (0, path_1.join)(modelFolder, `${modelName}+Schema.swift`), config: { ...options.config, target: 'swift', scalars: { ...scalars_1.SWIFT_SCALAR_MAP, ...options.config.scalars }, generate: 'metadata', selectedType: modelName, }, }); } }); config.push({ ...options, filename: (0, path_1.join)(modelFolder, `AmplifyModels.swift`), config: { ...options.config, scalars: { ...scalars_1.SWIFT_SCALAR_MAP, ...options.config.scalars }, target: 'swift', generate: 'loader', }, }); return config; }; const generateTypeScriptPreset = (options, models) => { const config = []; const modelFolder = options.config.overrideOutputDir ? options.config.overrideOutputDir : (0, path_1.join)(options.baseOutputDir); config.push({ ...options, filename: (0, path_1.join)(modelFolder, 'index.ts'), config: { ...options.config, scalars: { ...scalars_1.TYPESCRIPT_SCALAR_MAP, ...options.config.scalars }, metadata: false, }, }); config.push({ ...options, filename: (0, path_1.join)(modelFolder, 'schema.ts'), config: { ...options.config, scalars: { ...scalars_1.TYPESCRIPT_SCALAR_MAP, ...options.config.scalars }, target: 'metadata', metadataTarget: 'typescript', }, }); return config; }; const generateJavasScriptPreset = (options, models) => { const config = []; const modelFolder = options.config.overrideOutputDir ? options.config.overrideOutputDir : (0, path_1.join)(options.baseOutputDir); config.push({ ...options, filename: (0, path_1.join)(modelFolder, 'index.js'), config: { ...options.config, scalars: { ...scalars_1.TYPESCRIPT_SCALAR_MAP, ...options.config.scalars }, metadata: false, }, }); config.push({ ...options, filename: (0, path_1.join)(modelFolder, 'index.d.ts'), config: { ...options.config, scalars: { ...scalars_1.TYPESCRIPT_SCALAR_MAP, ...options.config.scalars }, metadata: false, isDeclaration: true, }, }); config.push({ ...options, filename: (0, path_1.join)(modelFolder, 'schema.js'), config: { ...options.config, scalars: { ...scalars_1.TYPESCRIPT_SCALAR_MAP, ...options.config.scalars }, target: 'metadata', metadataTarget: 'javascript', }, }); config.push({ ...options, filename: (0, path_1.join)(modelFolder, 'schema.d.ts'), config: { ...options.config, scalars: { ...scalars_1.TYPESCRIPT_SCALAR_MAP, ...options.config.scalars }, target: 'metadata', metadataTarget: 'typeDeclaration', }, }); return config; }; const generateDartPreset = (options, models) => { var _a; const config = []; const modelFolder = (_a = options.config.overrideOutputDir) !== null && _a !== void 0 ? _a : options.baseOutputDir; models.forEach(model => { const modelName = model.name.value; config.push({ ...options, filename: (0, path_1.join)(modelFolder, `${modelName}.dart`), config: { ...options.config, scalars: { ...scalars_1.DART_SCALAR_MAP, ...options.config.scalars }, selectedType: modelName, }, }); }); config.push({ ...options, filename: (0, path_1.join)(modelFolder, `ModelProvider.dart`), config: { ...options.config, scalars: { ...scalars_1.DART_SCALAR_MAP, ...options.config.scalars }, generate: 'loader', }, }); return config; }; const generateManyToManyModelStubs = (options) => { let models = new Array(); let manyToManySet = new Set(); options.schema.definitions.forEach(def => { var _a; if (def.kind === 'ObjectTypeDefinition') { (_a = def === null || def === void 0 ? void 0 : def.fields) === null || _a === void 0 ? void 0 : _a.forEach(field => { var _a; (_a = field === null || field === void 0 ? void 0 : field.directives) === null || _a === void 0 ? void 0 : _a.forEach(dir => { var _a, _b; if (((_a = dir === null || dir === void 0 ? void 0 : dir.name) === null || _a === void 0 ? void 0 : _a.value) === 'manyToMany') { (_b = dir === null || dir === void 0 ? void 0 : dir.arguments) === null || _b === void 0 ? void 0 : _b.forEach(arg => { if (arg.name.value === 'relationName' && arg.value.kind === 'StringValue') { manyToManySet.add((0, graphql_transformer_common_1.graphqlName)((0, graphql_transformer_common_1.toUpper)(arg.value.value))); } }); } }); }); } }); manyToManySet.forEach(modelName => { models.push({ kind: 'ObjectTypeDefinition', name: { kind: 'Name', value: modelName, }, }); }); return models; }; const generateIntrospectionPreset = (options, models) => { const config = []; config.push({ ...options, filename: (0, path_1.join)(options.config.overrideOutputDir, 'model-introspection.json'), config: { ...options.config, scalars: { ...scalars_1.METADATA_SCALAR_MAP, ...options.config.scalars }, target: 'introspection', }, }); return config; }; const buildGenerations = (options) => { const codeGenTarget = options.config.target; const typesToSkip = ['Query', 'Mutation', 'Subscription']; const models = options.schema.definitions.filter(t => (t.kind === 'ObjectTypeDefinition' && !typesToSkip.includes(t.name.value)) || (t.kind === 'EnumTypeDefinition' && !t.name.value.startsWith('__'))); const manyToManyModels = generateManyToManyModelStubs(options); if (options.config.usePipelinedTransformer || options.config.transformerVersion === 2) { models.push(...manyToManyModels); } switch (codeGenTarget) { case 'java': return generateJavaPreset(options, models, manyToManyModels); case 'swift': return generateSwiftPreset(options, models); case 'javascript': return generateJavasScriptPreset(options, models); case 'typescript': return generateTypeScriptPreset(options, models); case 'dart': return generateDartPreset(options, models); case 'introspection': return generateIntrospectionPreset(options, models); default: throw new Error(`amplify-codegen-appsync-model-plugin not support language target ${codeGenTarget}. Supported codegen targets are ${APPSYNC_DATA_STORE_CODEGEN_TARGETS.join(', ')}`); } }; exports.presetSync = { buildGeneratesSection: (options) => { const { cache, pluginMap, ...otherOptions } = options; return buildGenerations(otherOptions).map((config) => ({ pluginMap, cache, ...config, })); } }; exports.preset = { buildGeneratesSection: (options) => { const { cache, pluginMap, ...otherOptions } = options; return buildGenerations(otherOptions).map((config) => ({ pluginMap, cache, ...config, })); } }; //# sourceMappingURL=preset.js.map