@aws-amplify/appsync-modelgen-plugin
Version:
296 lines • 11.7 kB
JavaScript
;
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