diff --git a/.scripts/patch-cjs-package.sh b/.scripts/patch-cjs-package.sh new file mode 100644 index 0000000..f161ba9 --- /dev/null +++ b/.scripts/patch-cjs-package.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +cat >build/cjs/package.json </lib/'], preset: 'ts-jest', testEnvironment: 'node', testPathIgnorePatterns: ['/node_modules/', '/build/', 'test-utils.test.ts'], + transform: { + '^.+\\.(mt|t|cj|j)s$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, }; diff --git a/lib/EasyDirectiveVisitor.test.ts b/lib/EasyDirectiveVisitor.test.ts index cc93416..8dade64 100644 --- a/lib/EasyDirectiveVisitor.test.ts +++ b/lib/EasyDirectiveVisitor.test.ts @@ -10,10 +10,10 @@ import { GraphQLBoolean, } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; -import print from './utils/printer'; -import EasyDirectiveVisitor from './EasyDirectiveVisitor'; +import print from './utils/printer.js'; +import EasyDirectiveVisitor from './EasyDirectiveVisitor.js'; describe('EasyDirectiveVisitor', (): void => { const minimalTypeDef = gql` diff --git a/lib/EasyDirectiveVisitor.ts b/lib/EasyDirectiveVisitor.ts index b93ace4..8fb9a3d 100644 --- a/lib/EasyDirectiveVisitor.ts +++ b/lib/EasyDirectiveVisitor.ts @@ -22,7 +22,7 @@ import { print, printType, } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; export type ReadonlyGraphQLDirectiveConfigWithoutName = Readonly<{ [P in keyof Omit]: Readonly< diff --git a/lib/ValidateDirectiveVisitor.test.ts b/lib/ValidateDirectiveVisitor.test.ts index f6f7620..870e017 100644 --- a/lib/ValidateDirectiveVisitor.test.ts +++ b/lib/ValidateDirectiveVisitor.test.ts @@ -14,23 +14,23 @@ import { GraphQLList, GraphQLNonNull, } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import print from './utils/printer'; +import print from './utils/printer.js'; import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; -import { ValidateDirectiveVisitorNonTyped } from './ValidateDirectiveVisitor'; +} from './ValidateDirectiveVisitor.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; +import { ValidateDirectiveVisitorNonTyped } from './ValidateDirectiveVisitor.js'; import { validationDirectivePolicyArgs, validationDirectionEnumTypeDefs, -} from './test-utils.test'; +} from './test-utils.test.js'; -import capitalize from './capitalize'; -import ValidationError from './errors/ValidationError'; +import capitalize from './capitalize.js'; +import ValidationError from './errors/ValidationError.js'; interface ValidationErrorsResolverInfo extends GraphQLResolveInfo { validationErrors?: ValidationError[]; diff --git a/lib/ValidateDirectiveVisitor.ts b/lib/ValidateDirectiveVisitor.ts index ea441fb..26c0690 100644 --- a/lib/ValidateDirectiveVisitor.ts +++ b/lib/ValidateDirectiveVisitor.ts @@ -28,10 +28,10 @@ import { getDirective, inspect } from '@graphql-tools/utils'; import EasyDirectiveVisitor, { getDirectiveDeclaration, -} from './EasyDirectiveVisitor'; +} from './EasyDirectiveVisitor.js'; -import capitalize from './capitalize'; -import ValidationError from './errors/ValidationError'; +import capitalize from './capitalize.js'; +import ValidationError from './errors/ValidationError.js'; export enum ValidateDirectivePolicy { RESOLVER = 'RESOLVER', diff --git a/lib/auth.test.ts b/lib/auth.test.ts index 2803088..3a4ccbc 100644 --- a/lib/auth.test.ts +++ b/lib/auth.test.ts @@ -1,12 +1,12 @@ import type { GraphQLResolveInfo } from 'graphql'; import { graphql } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; -import print from './utils/printer'; +import print from './utils/printer.js'; -import authDirective, { authDirectiveMapper } from './auth'; -import AuthenticationError from './errors/AuthenticationError'; +import authDirective, { authDirectiveMapper } from './auth.js'; +import AuthenticationError from './errors/AuthenticationError.js'; describe('@auth()', (): void => { const name = 'auth'; diff --git a/lib/auth.ts b/lib/auth.ts index aeb6fe3..d47e858 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -10,9 +10,9 @@ import type { import { getDirective } from '@graphql-tools/utils'; -import EasyDirectiveVisitor from './EasyDirectiveVisitor'; -import AuthenticationError from './errors/AuthenticationError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import EasyDirectiveVisitor from './EasyDirectiveVisitor.js'; +import AuthenticationError from './errors/AuthenticationError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; type ResolverArgs = Parameters< GraphQLFieldResolver diff --git a/lib/cleanupPattern.test.ts b/lib/cleanupPattern.test.ts index a11434c..71d5b7a 100644 --- a/lib/cleanupPattern.test.ts +++ b/lib/cleanupPattern.test.ts @@ -1,17 +1,20 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; import cleanupPattern, { cleanupPatternDirectiveMapper, -} from './cleanupPattern'; -import capitalize from './capitalize'; +} from './cleanupPattern.js'; +import capitalize from './capitalize.js'; -import type { CreateSchemaConfig, ExpectedTestResult } from './test-utils.test'; +import type { + CreateSchemaConfig, + ExpectedTestResult, +} from './test-utils.test.js'; import { testEasyDirective, validationDirectivePolicyArgs, -} from './test-utils.test'; +} from './test-utils.test.js'; type RootValue = { arrayTest?: (string | null)[] | null; diff --git a/lib/cleanupPattern.ts b/lib/cleanupPattern.ts index 1d9bcb4..7f4f3da 100644 --- a/lib/cleanupPattern.ts +++ b/lib/cleanupPattern.ts @@ -1,10 +1,10 @@ import { GraphQLNonNull, GraphQLString } from 'graphql'; -import type { ValidateFunction } from './ValidateDirectiveVisitor'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import type { PatternDirectiveArgs } from './patternCommon'; -import createPatternHandler, { defaultArgs } from './patternCommon'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import type { ValidateFunction } from './ValidateDirectiveVisitor.js'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import type { PatternDirectiveArgs } from './patternCommon.js'; +import createPatternHandler, { defaultArgs } from './patternCommon.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; type CleanUpPatternArgs = PatternDirectiveArgs & { replaceWith: string }; diff --git a/lib/createSchemaMapperForVisitor.ts b/lib/createSchemaMapperForVisitor.ts index b6e49b7..6062438 100644 --- a/lib/createSchemaMapperForVisitor.ts +++ b/lib/createSchemaMapperForVisitor.ts @@ -2,7 +2,7 @@ import { getDirective, MapperKind, mapSchema } from '@graphql-tools/utils'; import type { GraphQLSchema } from 'graphql'; import { isObjectType } from 'graphql'; -import type EasyDirectiveVisitor from './EasyDirectiveVisitor'; +import type EasyDirectiveVisitor from './EasyDirectiveVisitor.js'; export type SchemaMapperFunction = (schema: GraphQLSchema) => GraphQLSchema; diff --git a/lib/createValidateDirectiveVisitor.test.ts b/lib/createValidateDirectiveVisitor.test.ts index ebb8b0c..9cc1ab9 100644 --- a/lib/createValidateDirectiveVisitor.test.ts +++ b/lib/createValidateDirectiveVisitor.test.ts @@ -1,10 +1,10 @@ import { graphql, GraphQLBoolean, GraphQLObjectType } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import ValidateDirectiveVisitor from './ValidateDirectiveVisitor'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import ValidateDirectiveVisitor from './ValidateDirectiveVisitor.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; describe('createValidateDirectiveVisitor', (): void => { const validate = jest.fn((x: unknown): unknown => diff --git a/lib/createValidateDirectiveVisitor.ts b/lib/createValidateDirectiveVisitor.ts index a5eb1cc..f9b9b11 100644 --- a/lib/createValidateDirectiveVisitor.ts +++ b/lib/createValidateDirectiveVisitor.ts @@ -1,9 +1,9 @@ import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import { ValidateDirectiveVisitorNonTyped } from './ValidateDirectiveVisitor'; -import validateArrayOrValue from './validateArrayOrValue'; +} from './ValidateDirectiveVisitor.js'; +import { ValidateDirectiveVisitorNonTyped } from './ValidateDirectiveVisitor.js'; +import validateArrayOrValue from './validateArrayOrValue.js'; export type CreateValidate = ( args: TArgs, diff --git a/lib/foreignNodeId.test.ts b/lib/foreignNodeId.test.ts index 0bcbf48..cfed79b 100644 --- a/lib/foreignNodeId.test.ts +++ b/lib/foreignNodeId.test.ts @@ -1,19 +1,19 @@ import { graphql } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; -import print from './utils/printer'; -import type { ToNodeId } from './foreignNodeId'; +import print from './utils/printer.js'; +import type { ToNodeId } from './foreignNodeId.js'; import { ForeignNodeIdDirectiveNonTyped, foreignNodeIdDirectiveMapper, -} from './foreignNodeId'; +} from './foreignNodeId.js'; import { validationDirectivePolicyArgs, validationDirectionEnumTypeDefs, -} from './test-utils.test'; -import capitalize from './capitalize'; -import ValidationError from './errors/ValidationError'; +} from './test-utils.test.js'; +import capitalize from './capitalize.js'; +import ValidationError from './errors/ValidationError.js'; describe('@foreignNodeId()', (): void => { const toNodeId = (typenane: string, id: string): string => diff --git a/lib/foreignNodeId.ts b/lib/foreignNodeId.ts index dd353f1..5072e95 100644 --- a/lib/foreignNodeId.ts +++ b/lib/foreignNodeId.ts @@ -3,11 +3,11 @@ import { DirectiveLocation, GraphQLNonNull, GraphQLString } from 'graphql'; import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import { ValidateDirectiveVisitorNonTyped } from './ValidateDirectiveVisitor'; -import validateArrayOrValue from './validateArrayOrValue'; -import ValidationError from './errors/ValidationError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +} from './ValidateDirectiveVisitor.js'; +import { ValidateDirectiveVisitorNonTyped } from './ValidateDirectiveVisitor.js'; +import validateArrayOrValue from './validateArrayOrValue.js'; +import ValidationError from './errors/ValidationError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; export type ToNodeId = ( id: string, diff --git a/lib/hasPermissions.test.ts b/lib/hasPermissions.test.ts index dd1c099..a26c485 100644 --- a/lib/hasPermissions.test.ts +++ b/lib/hasPermissions.test.ts @@ -6,10 +6,10 @@ import { GraphQLError, } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; -import print from './utils/printer'; -import type { MissingPermissionsResolverInfo } from './hasPermissions'; +import print from './utils/printer.js'; +import type { MissingPermissionsResolverInfo } from './hasPermissions.js'; import { debugFilterMissingPermissions, debugGetErrorMessage, @@ -18,12 +18,12 @@ import { prodGetErrorMessage, getDefaultValue, hasPermissionsDirectiveMapper, -} from './hasPermissions'; +} from './hasPermissions.js'; -import EasyDirectiveVisitor from './EasyDirectiveVisitor'; -import ValidateDirectiveVisitor from './ValidateDirectiveVisitor'; -import ForbiddenError from './errors/ForbiddenError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import EasyDirectiveVisitor from './EasyDirectiveVisitor.js'; +import ValidateDirectiveVisitor from './ValidateDirectiveVisitor.js'; +import ForbiddenError from './errors/ForbiddenError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; describe('@hasPermissions()', (): void => { const name = 'hasPermissions'; diff --git a/lib/hasPermissions.ts b/lib/hasPermissions.ts index 73e6909..6205fb6 100644 --- a/lib/hasPermissions.ts +++ b/lib/hasPermissions.ts @@ -18,15 +18,15 @@ import { import isEqual from 'lodash.isequal'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; -import EasyDirectiveVisitor from './EasyDirectiveVisitor'; -import ForbiddenError from './errors/ForbiddenError'; +import EasyDirectiveVisitor from './EasyDirectiveVisitor.js'; +import ForbiddenError from './errors/ForbiddenError.js'; -import type { ValidateFunction } from './ValidateDirectiveVisitor'; +import type { ValidateFunction } from './ValidateDirectiveVisitor.js'; import ValidateDirectiveVisitor, { ValidateDirectivePolicy, -} from './ValidateDirectiveVisitor'; +} from './ValidateDirectiveVisitor.js'; const isDebug = !!( process && diff --git a/lib/index.ts b/lib/index.ts index 27a6297..abe4e87 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,41 +1,49 @@ // helper classes -export { default as EasyDirectiveVisitor } from './EasyDirectiveVisitor'; +export { default as EasyDirectiveVisitor } from './EasyDirectiveVisitor.js'; export { default as ValidateDirectiveVisitor, ValidateDirectiveVisitorNonTyped, -} from './ValidateDirectiveVisitor'; +} from './ValidateDirectiveVisitor.js'; // helper functions -export { default as createValidateDirectiveVisitor } from './createValidateDirectiveVisitor'; -export { default as validateArrayOrValue } from './validateArrayOrValue'; +export { default as createValidateDirectiveVisitor } from './createValidateDirectiveVisitor.js'; +export { default as validateArrayOrValue } from './validateArrayOrValue.js'; // validation directives export { default as auth, AuthDirectiveVisitorNonTyped as v3Auth, authDirectiveMapper, -} from './auth'; +} from './auth.js'; export { default as hasPermissions, HasPermissionsDirectiveVisitorNonTyped as v3HasPermissions, hasPermissionsDirectiveMapper, -} from './hasPermissions'; -export { default as listLength, listLengthDirectiveMapper } from './listLength'; -export { default as pattern, patternDirectiveMapper } from './pattern'; -export { default as range, rangeDirectiveMapper } from './range'; +} from './hasPermissions.js'; +export { + default as listLength, + listLengthDirectiveMapper, +} from './listLength.js'; +export { default as pattern, patternDirectiveMapper } from './pattern.js'; +export { default as range, rangeDirectiveMapper } from './range.js'; export { default as stringLength, stringLengthDirectiveMapper, -} from './stringLength'; -export { default as selfNodeId, selfNodeIdDirectiveMapper } from './selfNodeId'; +} from './stringLength.js'; +export { + default as selfNodeId, + selfNodeIdDirectiveMapper, +} from './selfNodeId.js'; export { default as foreignNodeId, ForeignNodeIdDirectiveNonTyped as v3ForeignNodeId, foreignNodeIdDirectiveMapper, -} from './foreignNodeId'; +} from './foreignNodeId.js'; export { default as cleanupPattern, cleanupPatternDirectiveMapper, -} from './cleanupPattern'; -export { default as trim, trimDirectiveMapper } from './trim'; -export type { MissingPermissionsResolverInfo } from './hasPermissions'; +} from './cleanupPattern.js'; +export { default as trim, trimDirectiveMapper } from './trim.js'; +export type { MissingPermissionsResolverInfo } from './hasPermissions.js'; + +export { default as applyDirectiveMappersToSchema } from './utils/applyDirectiveMappersToSchema.js'; diff --git a/lib/listLength.test.ts b/lib/listLength.test.ts index 1f5d1f7..8272294 100644 --- a/lib/listLength.test.ts +++ b/lib/listLength.test.ts @@ -1,16 +1,19 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import ListLength, { listLengthDirectiveMapper } from './listLength'; -import capitalize from './capitalize'; +import ListLength, { listLengthDirectiveMapper } from './listLength.js'; +import capitalize from './capitalize.js'; -import type { CreateSchemaConfig, ExpectedTestResult } from './test-utils.test'; +import type { + CreateSchemaConfig, + ExpectedTestResult, +} from './test-utils.test.js'; import { testEasyDirective, validationDirectivePolicyArgs, -} from './test-utils.test'; -import ValidationError from './errors/ValidationError'; +} from './test-utils.test.js'; +import ValidationError from './errors/ValidationError.js'; type RootValue = { test?: (string | null)[] | null; diff --git a/lib/listLength.ts b/lib/listLength.ts index db902a4..eba1174 100644 --- a/lib/listLength.ts +++ b/lib/listLength.ts @@ -3,10 +3,10 @@ import { GraphQLFloat } from 'graphql'; import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import ValidationError from './errors/ValidationError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +} from './ValidateDirectiveVisitor.js'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import ValidationError from './errors/ValidationError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; const createValidateMinMax = (min: number, max: number): ValidateFunction => { if (min < 0) throw new RangeError('@listLength(min) must be at least 0'); diff --git a/lib/multipleDirectives.test.ts b/lib/multipleDirectives.test.ts index 3c809d6..6e5497d 100644 --- a/lib/multipleDirectives.test.ts +++ b/lib/multipleDirectives.test.ts @@ -1,11 +1,11 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; import { buildSubgraphSchema } from '@apollo/subgraph'; -import range from './range'; -import listLength from './listLength'; -import ValidateDirectiveVisitor from './ValidateDirectiveVisitor'; +import range from './range.js'; +import listLength from './listLength.js'; +import ValidateDirectiveVisitor from './ValidateDirectiveVisitor.js'; interface MyType { int: number; diff --git a/lib/pattern.test.ts b/lib/pattern.test.ts index dbfc4a0..1201add 100644 --- a/lib/pattern.test.ts +++ b/lib/pattern.test.ts @@ -1,18 +1,21 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; import type { IResolvers } from '@graphql-tools/utils'; -import pattern, { patternDirectiveMapper } from './pattern'; -import capitalize from './capitalize'; +import pattern, { patternDirectiveMapper } from './pattern.js'; +import capitalize from './capitalize.js'; -import type { CreateSchemaConfig, ExpectedTestResult } from './test-utils.test'; +import type { + CreateSchemaConfig, + ExpectedTestResult, +} from './test-utils.test.js'; import { testEasyDirective, validationDirectivePolicyArgs, -} from './test-utils.test'; -import ValidationError from './errors/ValidationError'; +} from './test-utils.test.js'; +import ValidationError from './errors/ValidationError.js'; type RootValue = { arrayTest?: (string | null)[] | null; diff --git a/lib/pattern.ts b/lib/pattern.ts index 70fd980..6dd54cd 100644 --- a/lib/pattern.ts +++ b/lib/pattern.ts @@ -1,9 +1,9 @@ -import type { ValidateFunction } from './ValidateDirectiveVisitor'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import type { PatternDirectiveArgs } from './patternCommon'; -import createPatternHandler, { defaultArgs } from './patternCommon'; -import ValidationError from './errors/ValidationError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import type { ValidateFunction } from './ValidateDirectiveVisitor.js'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import type { PatternDirectiveArgs } from './patternCommon.js'; +import createPatternHandler, { defaultArgs } from './patternCommon.js'; +import ValidationError from './errors/ValidationError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; const createValidate = ({ regexp, diff --git a/lib/patternCommon.ts b/lib/patternCommon.ts index 9ccf3e9..30da4bc 100644 --- a/lib/patternCommon.ts +++ b/lib/patternCommon.ts @@ -1,11 +1,11 @@ import { GraphQLNonNull, GraphQLString } from 'graphql'; -import ValidationError from './errors/ValidationError'; +import ValidationError from './errors/ValidationError.js'; import type { ValidationDirectiveArgs, ValidateFunction, -} from './ValidateDirectiveVisitor'; +} from './ValidateDirectiveVisitor.js'; export type PatternDirectiveArgs = { regexp: string; diff --git a/lib/range.test.ts b/lib/range.test.ts index e1c1acb..d47093a 100644 --- a/lib/range.test.ts +++ b/lib/range.test.ts @@ -1,16 +1,19 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import range, { rangeDirectiveMapper } from './range'; -import capitalize from './capitalize'; +import range, { rangeDirectiveMapper } from './range.js'; +import capitalize from './capitalize.js'; -import type { CreateSchemaConfig, ExpectedTestResult } from './test-utils.test'; +import type { + CreateSchemaConfig, + ExpectedTestResult, +} from './test-utils.test.js'; import { testEasyDirective, validationDirectivePolicyArgs, -} from './test-utils.test'; -import ValidationError from './errors/ValidationError'; +} from './test-utils.test.js'; +import ValidationError from './errors/ValidationError.js'; type RootValue = { arrayTest?: (number | null)[] | null; diff --git a/lib/range.ts b/lib/range.ts index e69ef7d..dc09082 100644 --- a/lib/range.ts +++ b/lib/range.ts @@ -3,10 +3,10 @@ import { GraphQLFloat } from 'graphql'; import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import ValidationError from './errors/ValidationError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +} from './ValidateDirectiveVisitor.js'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import ValidationError from './errors/ValidationError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; const createValidateMinMax = (min: number, max: number): ValidateFunction => { if (max < min) diff --git a/lib/selfNodeId.test.ts b/lib/selfNodeId.test.ts index 8d40633..6171c10 100644 --- a/lib/selfNodeId.test.ts +++ b/lib/selfNodeId.test.ts @@ -1,15 +1,15 @@ import { graphql } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import print from './utils/printer'; +import print from './utils/printer.js'; import { validationDirectivePolicyArgs, validationDirectionEnumTypeDefs, -} from './test-utils.test'; -import SelfNodeId, { selfNodeIdDirectiveMapper } from './selfNodeId'; -import capitalize from './capitalize'; -import ValidationError from './errors/ValidationError'; +} from './test-utils.test.js'; +import SelfNodeId, { selfNodeIdDirectiveMapper } from './selfNodeId.js'; +import capitalize from './capitalize.js'; +import ValidationError from './errors/ValidationError.js'; const toNodeId = (name: string, id: string): string => Buffer.from(`${name}:${id}`).toString('base64'); diff --git a/lib/selfNodeId.ts b/lib/selfNodeId.ts index 6c4bd73..02e2722 100644 --- a/lib/selfNodeId.ts +++ b/lib/selfNodeId.ts @@ -1,16 +1,16 @@ import type { GraphQLObjectType, GraphQLInterfaceType } from 'graphql'; import { DirectiveLocation } from 'graphql'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; -import ValidationError from './errors/ValidationError'; +import ValidationError from './errors/ValidationError.js'; -import type { ValidateFunction } from './ValidateDirectiveVisitor'; -import type ValidateDirectiveVisitor from './ValidateDirectiveVisitor'; +import type { ValidateFunction } from './ValidateDirectiveVisitor.js'; +import type ValidateDirectiveVisitor from './ValidateDirectiveVisitor.js'; import { setFieldResolveToApplyOriginalResolveAndThenValidateResult, ValidateDirectiveVisitorNonTyped, -} from './ValidateDirectiveVisitor'; +} from './ValidateDirectiveVisitor.js'; type ToNodeId = (entityName: string, id: string) => string | null; diff --git a/lib/stringLength.test.ts b/lib/stringLength.test.ts index e68cb2f..8049cec 100644 --- a/lib/stringLength.test.ts +++ b/lib/stringLength.test.ts @@ -1,16 +1,19 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import stringLength, { stringLengthDirectiveMapper } from './stringLength'; -import capitalize from './capitalize'; +import stringLength, { stringLengthDirectiveMapper } from './stringLength.js'; +import capitalize from './capitalize.js'; -import type { CreateSchemaConfig, ExpectedTestResult } from './test-utils.test'; +import type { + CreateSchemaConfig, + ExpectedTestResult, +} from './test-utils.test.js'; import { testEasyDirective, validationDirectivePolicyArgs, -} from './test-utils.test'; -import ValidationError from './errors/ValidationError'; +} from './test-utils.test.js'; +import ValidationError from './errors/ValidationError.js'; type RootValue = { arrayTest?: (string | null)[] | null; diff --git a/lib/stringLength.ts b/lib/stringLength.ts index b20d44e..566129a 100644 --- a/lib/stringLength.ts +++ b/lib/stringLength.ts @@ -3,10 +3,10 @@ import { GraphQLFloat } from 'graphql'; import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import ValidationError from './errors/ValidationError'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +} from './ValidateDirectiveVisitor.js'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import ValidationError from './errors/ValidationError.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; const createValidateMinMax = (min: number, max: number): ValidateFunction => { if (min < 0) throw new RangeError('@stringLength(min) must be at least 0'); diff --git a/lib/test-utils.test.ts b/lib/test-utils.test.ts index 7240115..1d9a866 100644 --- a/lib/test-utils.test.ts +++ b/lib/test-utils.test.ts @@ -1,11 +1,10 @@ -import type { GraphQLSchema } from 'graphql'; +import type { GraphQLSchema, ExecutionResult } from 'graphql'; import { graphql } from 'graphql'; -import type { ExecutionResult } from 'graphql/execution/execute'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; -import print from './utils/printer'; -import type EasyDirectiveVisitor from './EasyDirectiveVisitor'; -import capitalize from './capitalize'; +import print from './utils/printer.js'; +import type EasyDirectiveVisitor from './EasyDirectiveVisitor.js'; +import capitalize from './capitalize.js'; export const minimalTypeDef = gql` type T { diff --git a/lib/trim.test.ts b/lib/trim.test.ts index 06c9a30..2cbb647 100644 --- a/lib/trim.test.ts +++ b/lib/trim.test.ts @@ -1,5 +1,5 @@ import type { GraphQLSchema } from 'graphql'; -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import { makeExecutableSchema } from '@graphql-tools/schema'; import Trim, { @@ -8,20 +8,20 @@ import Trim, { trimDirectiveSchemaEnumName, TrimMode, trimDirectiveMapper, -} from './trim'; -import capitalize from './capitalize'; +} from './trim.js'; +import capitalize from './capitalize.js'; import type { CreateSchemaConfig, ExpectedTestResult, TestCase, -} from './test-utils.test'; +} from './test-utils.test.js'; import { testEasyDirective, validationDirectionEnumTypeDefs, validationDirectivePolicyArgs, -} from './test-utils.test'; -import { ValidateDirectivePolicy } from './ValidateDirectiveVisitor'; +} from './test-utils.test.js'; +import { ValidateDirectivePolicy } from './ValidateDirectiveVisitor.js'; type RootValue = { arrayTest?: (string | null)[] | null; diff --git a/lib/trim.ts b/lib/trim.ts index 8c6d07e..19ff3e3 100644 --- a/lib/trim.ts +++ b/lib/trim.ts @@ -3,11 +3,11 @@ import { GraphQLEnumType, GraphQLNonNull } from 'graphql'; import type { ValidateFunction, ValidationDirectiveArgs, -} from './ValidateDirectiveVisitor'; -import createValidateDirectiveVisitor from './createValidateDirectiveVisitor'; -import neverAssertion from './utils/neverAssertion'; -import createPatternHandler from './patternCommon'; -import createSchemaMapperForVisitor from './createSchemaMapperForVisitor'; +} from './ValidateDirectiveVisitor.js'; +import createValidateDirectiveVisitor from './createValidateDirectiveVisitor.js'; +import neverAssertion from './utils/neverAssertion.js'; +import createPatternHandler from './patternCommon.js'; +import createSchemaMapperForVisitor from './createSchemaMapperForVisitor.js'; export enum TrimMode { TRIM_ALL = 'TRIM_ALL', diff --git a/lib/utils/applyDirectiveMappersToSchema.ts b/lib/utils/applyDirectiveMappersToSchema.ts index 2715fea..a02a284 100644 --- a/lib/utils/applyDirectiveMappersToSchema.ts +++ b/lib/utils/applyDirectiveMappersToSchema.ts @@ -1,6 +1,6 @@ import type { GraphQLSchema } from 'graphql'; -import type { SchemaMapperFunction } from 'lib/createSchemaMapperForVisitor'; +import type { SchemaMapperFunction } from '../createSchemaMapperForVisitor.js'; const applyDirectiveMappersToSchema = ( mappersToApply: SchemaMapperFunction[], diff --git a/lib/utils/printer.ts b/lib/utils/printer.ts index c260793..af8023e 100644 --- a/lib/utils/printer.ts +++ b/lib/utils/printer.ts @@ -1,5 +1,5 @@ import type { ASTNode } from 'graphql'; -import { print as defaultPrinter } from 'graphql/language/printer'; +import { print as defaultPrinter } from 'graphql'; const print = (ast: ASTNode): string => `${defaultPrinter(ast)}\n`; diff --git a/lib/validateArrayOrValue.test.ts b/lib/validateArrayOrValue.test.ts index 3f9dc0e..27f6ebf 100644 --- a/lib/validateArrayOrValue.test.ts +++ b/lib/validateArrayOrValue.test.ts @@ -5,7 +5,7 @@ import { GraphQLObjectType, } from 'graphql'; -import validateArrayOrValue from './validateArrayOrValue'; +import validateArrayOrValue from './validateArrayOrValue.js'; describe('validateArrayOrValue', (): void => { const passThru = (x: T): T => x; diff --git a/lib/validateArrayOrValue.ts b/lib/validateArrayOrValue.ts index 0f40c79..c00181b 100644 --- a/lib/validateArrayOrValue.ts +++ b/lib/validateArrayOrValue.ts @@ -5,7 +5,7 @@ import type { } from 'graphql'; import { GraphQLList, GraphQLNonNull } from 'graphql'; -import type { ValidateFunction } from './ValidateDirectiveVisitor'; +import type { ValidateFunction } from './ValidateDirectiveVisitor.js'; const getListItemType = ( type: GraphQLNamedType | GraphQLInputType | GraphQLOutputType, diff --git a/lib/validateThrow.test.ts b/lib/validateThrow.test.ts index 6fa392e..169ca92 100644 --- a/lib/validateThrow.test.ts +++ b/lib/validateThrow.test.ts @@ -1,10 +1,10 @@ -import gql from 'graphql-tag'; +import { gql } from 'graphql-tag'; import type { GraphQLResolveInfo } from 'graphql'; import { graphql, GraphQLError } from 'graphql'; import { makeExecutableSchema } from '@graphql-tools/schema'; -import print from './utils/printer'; -import range, { rangeDirectiveMapper } from './range'; +import print from './utils/printer.js'; +import range, { rangeDirectiveMapper } from './range.js'; interface ArgsTestResolverCtx { shouldCallResolver: boolean; diff --git a/package.json b/package.json index 1cf89a1..e510e2f 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,6 @@ "name": "@profusion/apollo-validation-directives", "version": "3.0.0", "description": "GraphQL directives to implement field validations in Apollo Server", - "main": "./build/lib/index.js", - "types": "./build/lib/index.d.ts", "author": "Gustavo Sverzut Barbieri ", "license": "MIT", "repository": "https://github.com/profusion/apollo-validation-directives", @@ -13,6 +11,19 @@ "jest --bail --findRelatedTests" ] }, + "files": [ + "build" + ], + "type": "module", + "types": "./build/types/index.d.ts", + "main": "./build/cjs/index.js", + "exports": { + ".": { + "types": "./build/types/index.d.ts", + "import": "./build/esm/index.js", + "require": "./build/cjs/index.js" + } + }, "scripts": { "example:value-validation": "ts-node examples/value-validation-directives.ts", "example:access-control": "ts-node examples/access-control-directives.ts", @@ -21,10 +32,12 @@ "check-types": "tsc --noEmit", "run-lint": "eslint --max-warnings=0 --ext .ts lib examples", "lint": "run-s check-types run-lint", - "build": "tsc", + "build:cjs": "tsc -p tsconfig.cjs.json", + "build:esm": "tsc", + "build": "run-p build:* && sh ./.scripts/patch-cjs-package.sh", "test": "jest", "prepare": "husky install", - "prepublishOnly": "tsc" + "prepublishOnly": "yarn run build" }, "resolutions": { "@types/express": "^4.17.7", @@ -58,7 +71,7 @@ "prettier": "^3.0.3", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^4.7.4" + "typescript": "^5.2.2" }, "peerDependencies": { "apollo-server-errors": "^3.3.1", diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..31bd07f --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": false, + "declarationDir": null, + "module": "commonjs", + "moduleResolution": "Node", + "outDir": "build/cjs" + }, +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 8d3c814..b1e6260 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { - "target": "ES2015", - "moduleResolution": "node", - "module": "CommonJS", + "target": "ES2019", + "moduleResolution": "Node16", + "module": "Node16", "lib": ["es2017", "es7", "es6"], "allowJs": true, "strict": true, @@ -18,14 +18,15 @@ "experimentalDecorators": true, "strictPropertyInitialization": false, "declaration": true, + "declarationDir": "./build/types", "baseUrl": ".", - "outDir": "./build" + "outDir": "./build/esm" }, "include": [ "lib", - "examples", ], "exclude": [ + "examples", "node_modules", "build" ] diff --git a/yarn.lock b/yarn.lock index 6965af0..90ed898 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6777,11 +6777,16 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^4.6.4, typescript@^4.7.4: +typescript@^4.6.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typescript@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"