@vendure/core
Version:
A modern, headless ecommerce framework
71 lines • 4.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFinalVendureSchema = getFinalVendureSchema;
exports.buildSchemaFromVendureConfig = buildSchemaFromVendureConfig;
exports.isUsingDefaultEntityIdStrategy = isUsingDefaultEntityIdStrategy;
const shared_utils_1 = require("@vendure/common/lib/shared-utils");
const index_1 = require("graphql/index");
const path_1 = __importDefault(require("path"));
const index_2 = require("../../config/index");
const plugin_metadata_1 = require("../../plugin/plugin-metadata");
const generate_active_order_types_1 = require("./generate-active-order-types");
const generate_auth_types_1 = require("./generate-auth-types");
const generate_error_code_enum_1 = require("./generate-error-code-enum");
const generate_list_options_1 = require("./generate-list-options");
const generate_permissions_1 = require("./generate-permissions");
const graphql_custom_fields_1 = require("./graphql-custom-fields");
async function getFinalVendureSchema(options) {
const { config, typePaths, typesLoader, apiType } = options;
// Paths must be normalized to use forward-slash separators.
// See https://github.com/nestjs/graphql/issues/336
const normalizedPaths = typePaths.map(p => p.split(path_1.default.sep).join('/'));
const typeDefs = await typesLoader.mergeTypesByPaths(normalizedPaths);
let schema = (0, index_1.buildSchema)(typeDefs);
schema = buildSchemaFromVendureConfig(schema, config, apiType);
if (options.output === 'sdl') {
return (0, index_1.printSchema)(schema);
}
else {
return schema;
}
}
function buildSchemaFromVendureConfig(schema, config, apiType) {
const authStrategies = apiType === 'shop'
? config.authOptions.shopAuthenticationStrategy
: config.authOptions.adminAuthenticationStrategy;
const customFields = config.customFields;
schema = extendSchemaWithPluginApiExtensions(schema, config.plugins, apiType);
schema = (0, generate_list_options_1.generateListOptions)(schema);
schema = (0, graphql_custom_fields_1.addGraphQLCustomFields)(schema, customFields, apiType === 'shop');
schema = (0, graphql_custom_fields_1.addOrderLineCustomFieldsInput)(schema, customFields.OrderLine || [], apiType === 'shop');
schema = (0, graphql_custom_fields_1.addModifyOrderCustomFields)(schema, customFields.Order || []);
schema = (0, graphql_custom_fields_1.addShippingMethodQuoteCustomFields)(schema, customFields.ShippingMethod || []);
schema = (0, graphql_custom_fields_1.addPaymentMethodQuoteCustomFields)(schema, customFields.PaymentMethod || []);
schema = (0, generate_auth_types_1.generateAuthenticationTypes)(schema, authStrategies);
schema = (0, generate_error_code_enum_1.generateErrorCodeEnum)(schema);
if (apiType === 'admin') {
schema = (0, graphql_custom_fields_1.addServerConfigCustomFields)(schema, customFields);
schema = (0, graphql_custom_fields_1.addActiveAdministratorCustomFields)(schema, customFields.Administrator);
}
if (apiType === 'shop') {
schema = (0, graphql_custom_fields_1.addRegisterCustomerCustomFieldsInput)(schema, customFields.Customer || []);
schema = (0, generate_active_order_types_1.generateActiveOrderTypes)(schema, config.orderOptions.activeOrderStrategy);
}
schema = (0, generate_permissions_1.generatePermissionEnum)(schema, config.authOptions.customPermissions);
return schema;
}
function extendSchemaWithPluginApiExtensions(schema, plugins, apiType) {
(0, plugin_metadata_1.getPluginAPIExtensions)(plugins, apiType)
.map(e => (typeof e.schema === 'function' ? e.schema(schema) : e.schema))
.filter(shared_utils_1.notNullOrUndefined)
.forEach(documentNode => (schema = (0, index_1.extendSchema)(schema, documentNode)));
return schema;
}
function isUsingDefaultEntityIdStrategy(entityIdStrategy) {
return (entityIdStrategy.constructor === index_2.AutoIncrementIdStrategy ||
entityIdStrategy.constructor === index_2.UuidIdStrategy);
}
//# sourceMappingURL=get-final-vendure-schema.js.map