diff --git a/README.md b/README.md index 35ec28f9a..6f5b0ae56 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,8 @@ NOTE: `BigInt` is also available under the alias `Long`. NOTE: `UUID` is also available under the alias `GUID`. +NOTE: `Duration` is also available under the alias `ISO8601Duration`. + Alternatively, use the default import and ES6's spread operator syntax: ```javascript diff --git a/package.json b/package.json index a411e057a..b1c5e9f51 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "graphql-scalars", - "version": "1.5.0", + "version": "1.6.0", "description": "A collection of scalar types not included in base GraphQL.", "repository": { "type": "git", diff --git a/src/index.ts b/src/index.ts index 45749bfd2..b55d4b357 100644 --- a/src/index.ts +++ b/src/index.ts @@ -50,6 +50,7 @@ import { GraphQLObjectID, GraphQLVoid, } from './scalars'; +import { GraphQLDuration } from './scalars/iso-date/Duration'; export { Date as DateTypeDefinition, @@ -109,6 +110,7 @@ export { GraphQLDateTime as DateTimeResolver, GraphQLTimestamp as TimestampResolver, GraphQLUtcOffset as UtcOffsetResolver, + GraphQLDuration as DurationResolver, GraphQLISO8601Duration as ISO8601DurationResolver, GraphQLLocalDate as LocalDateResolver, GraphQLLocalTime as LocalTimeResolver, @@ -160,6 +162,7 @@ export const resolvers = { DateTime: GraphQLDateTime, Timestamp: GraphQLTimestamp, UtcOffset: GraphQLUtcOffset, + Duration: GraphQLDuration, ISO8601Duration: GraphQLISO8601Duration, LocalDate: GraphQLLocalDate, LocalTime: GraphQLLocalTime, @@ -209,6 +212,7 @@ export { Date as DateMock, Time as TimeMock, DateTime as DateTimeMock, + Duration as DurationMock, ISO8601Duration as ISO8601DurationMock, Timestamp as TimestampMock, UtcOffset as UtcOffsetMock, @@ -266,6 +270,7 @@ export { GraphQLDateTime, GraphQLTimestamp, GraphQLUtcOffset, + GraphQLDuration, GraphQLISO8601Duration, GraphQLLocalDate, GraphQLLocalTime, diff --git a/src/mocks.ts b/src/mocks.ts index 47b9c9ce7..bda1f5d43 100644 --- a/src/mocks.ts +++ b/src/mocks.ts @@ -5,7 +5,7 @@ export const Time = () => '10:15:30Z'; export const DateTime = () => '2007-12-03T10:15:30Z'; export const Timestamp = () => 1592577642; export const UtcOffset = () => '+03:00'; -export const ISO8601Duration = () => 'P3Y6M4DT12H30M5S'; +export const Duration = () => 'P3Y6M4DT12H30M5S'; export const LocalDate = () => '2020-07-19'; export const LocalTime = () => '08:45:59'; export const LocalEndTime = () => '24:00:00'; @@ -100,4 +100,5 @@ export { BigIntMock as Long, BigIntMock as BigInt, ByteMock as Byte, + Duration as ISO8601Duration, }; diff --git a/src/scalars/iso-date/Duration.ts b/src/scalars/iso-date/Duration.ts index 8ca749bca..7c2e49a8b 100644 --- a/src/scalars/iso-date/Duration.ts +++ b/src/scalars/iso-date/Duration.ts @@ -1,4 +1,9 @@ -import { GraphQLError, GraphQLScalarType, Kind } from 'graphql'; +import { + GraphQLError, + GraphQLScalarType, + GraphQLScalarTypeConfig, + Kind, +} from 'graphql'; export type ISO8601Duration = string; // original implementation @@ -9,8 +14,11 @@ export type ISO8601Duration = string; // negative and positive durations allowed, commas and decimal points valid for fractions const ISO_DURATION = /^(-|\+)?P(?!$)((-|\+)?\d+(?:(\.|,)\d+)?Y)?((-|\+)?\d+(?:(\.|,)\d+)?M)?((-|\+)?\d+(?:(\.|,)\d+)?W)?((-|\+)?\d+(?:(\.|,)\d+)?D)?(T(?=(-|\+)?\d)((-|\+)?\d+(?:(\.|,)\d+)?H)?((-|\+)?\d+(?:(\.|,)\d+)?M)?((-|\+)?\d+(?:(\.|,)\d+)?S)?)?$/; -export const GraphQLISO8601Duration = /*#__PURE__*/ new GraphQLScalarType({ - name: 'ISO8601Duration', +export const GraphQLDurationConfig: GraphQLScalarTypeConfig< + string, + string +> = /*#__PURE__*/ { + name: 'Duration', description: ` A string representing a duration conforming to the ISO8601 standard, such as: P1W1DT13H23M34S @@ -66,4 +74,14 @@ export const GraphQLISO8601Duration = /*#__PURE__*/ new GraphQLScalarType({ return ast.value; }, +}; + +export const GraphQLISO8601Duration = /*#__PURE__*/ new GraphQLScalarType({ + ...GraphQLDurationConfig, + name: 'ISO8601Duration', +}); + +export const GraphQLDuration = /*#__PURE__*/ new GraphQLScalarType({ + ...GraphQLDurationConfig, + name: 'Duration', }); diff --git a/src/typeDefs.ts b/src/typeDefs.ts index 8c22f19a0..19c1d04a1 100644 --- a/src/typeDefs.ts +++ b/src/typeDefs.ts @@ -5,6 +5,7 @@ export const Time = 'scalar Time'; export const Timestamp = 'scalar Timestamp'; export const DateTime = 'scalar DateTime'; export const UtcOffset = 'scalar UtcOffset'; +export const Duration = 'scalar Duration'; export const ISO8601Duration = 'scalar ISO8601Duration'; export const LocalDate = 'scalar LocalDate'; export const LocalTime = 'scalar LocalTime';