@accounter/server
Version:
Accounter GraphQL server
47 lines • 1.48 kB
JavaScript
import { GraphQLError, GraphQLScalarType, Kind } from 'graphql';
import { CountryCode } from '../../../shared/enums.js';
const COUNTRY_CODE_REGEX = new RegExp(`^(${Object.values(CountryCode).join('|')})$`, 'i');
const validate = (value, ast) => {
if (typeof value !== 'string') {
throw new GraphQLError(`Value is not string: ${value}`, ast
? {
nodes: ast,
}
: undefined);
}
if (!COUNTRY_CODE_REGEX.test(value)) {
throw new GraphQLError(`Value is not a valid country code: ${value}`, ast
? {
nodes: ast,
}
: undefined);
}
return value;
};
export const GraphQLCountryCode = new GraphQLScalarType({
name: 'CountryCode',
description: 'A country code as defined by ISO 3166-1 alpha-3',
serialize(value) {
return validate(value);
},
parseValue(value) {
return validate(value);
},
parseLiteral(ast) {
if (ast.kind !== Kind.STRING) {
throw new GraphQLError(`Can only validate strings as country codes but got a: ${ast.kind}`, {
nodes: [ast],
});
}
return validate(ast.value, ast);
},
extensions: {
codegenScalarType: 'string',
jsonSchema: {
title: 'CountryCode',
type: 'string',
pattern: COUNTRY_CODE_REGEX.source,
},
},
});
//# sourceMappingURL=country.resolver.js.map