diff --git a/packages/apollo/lib/constants/index.ts b/packages/apollo/lib/constants/index.ts index 39d160e13..5837eac29 100644 --- a/packages/apollo/lib/constants/index.ts +++ b/packages/apollo/lib/constants/index.ts @@ -1 +1 @@ -export * from './apollo.constants'; +export * from './apollo.constants.js'; diff --git a/packages/apollo/lib/decorators/index.ts b/packages/apollo/lib/decorators/index.ts index 5b4037b27..c78e29886 100644 --- a/packages/apollo/lib/decorators/index.ts +++ b/packages/apollo/lib/decorators/index.ts @@ -1 +1 @@ -export * from './plugin.decorator'; +export * from './plugin.decorator.js'; diff --git a/packages/apollo/lib/decorators/plugin.decorator.ts b/packages/apollo/lib/decorators/plugin.decorator.ts index 39785f296..198e80ae3 100644 --- a/packages/apollo/lib/decorators/plugin.decorator.ts +++ b/packages/apollo/lib/decorators/plugin.decorator.ts @@ -1,5 +1,5 @@ import { SetMetadata } from '@nestjs/common'; -import { PLUGIN_METADATA } from '../constants'; +import { PLUGIN_METADATA } from '../constants/index.js'; /** * Decorator that marks a class as an Apollo plugin. diff --git a/packages/apollo/lib/drivers/apollo-base.driver.ts b/packages/apollo/lib/drivers/apollo-base.driver.ts index 93f97d719..2e54b6e8a 100644 --- a/packages/apollo/lib/drivers/apollo-base.driver.ts +++ b/packages/apollo/lib/drivers/apollo-base.driver.ts @@ -1,5 +1,4 @@ import { ApolloServer, type BaseContext } from '@apollo/server'; -import { ApolloServerPluginLandingPageGraphQLPlayground } from '@apollo/server-plugin-landing-page-graphql-playground'; import { ApolloServerErrorCode, unwrapResolverError, @@ -7,15 +6,15 @@ import { import { ApolloServerPluginLandingPageDisabled } from '@apollo/server/plugin/disabled'; import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; import { HttpStatus } from '@nestjs/common'; -import { loadPackage } from '@nestjs/common/utils/load-package.util'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { loadPackage } from '@nestjs/common/utils/load-package.util.js'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { AbstractGraphQLDriver } from '@nestjs/graphql'; import { GraphQLError, GraphQLFormattedError } from 'graphql'; import omit from 'lodash.omit'; -import { GraphiQLPlaygroundPlugin } from '../graphiql/graphiql-playground.plugin'; -import { GraphiQLOptions } from '../graphiql/interfaces/graphiql-options.interface'; -import { ApolloDriverConfig } from '../interfaces'; -import { createAsyncIterator } from '../utils/async-iterator.util'; +import { GraphiQLPlaygroundPlugin } from '../graphiql/graphiql-playground.plugin.js'; +import { GraphiQLOptions } from '../graphiql/interfaces/graphiql-options.interface.js'; +import { ApolloDriverConfig } from '../interfaces/index.js'; +import { createAsyncIterator } from '../utils/async-iterator.util.js'; const apolloPredefinedExceptions: Partial> = { [HttpStatus.BAD_REQUEST]: ApolloServerErrorCode.BAD_REQUEST, @@ -57,7 +56,14 @@ export abstract class ApolloBaseDriver< stopOnTerminationSignals: false, }; - if (options.graphiql) { + const useGraphiQL = + options.graphiql || + options.playground === true || + (options.graphiql === undefined && + options.playground === undefined && + process.env.NODE_ENV !== 'production'); + + if (useGraphiQL) { const graphiQlPlaygroundOpts: GraphiQLOptions = typeof options.graphiql === 'object' ? options.graphiql : {}; graphiQlPlaygroundOpts.url ??= options.path; @@ -66,21 +72,6 @@ export abstract class ApolloBaseDriver< ...defaults, plugins: [new GraphiQLPlaygroundPlugin(graphiQlPlaygroundOpts)], }; - } else if ( - (options.playground === undefined && - process.env.NODE_ENV !== 'production') || - options.playground - ) { - const playgroundOptions = - typeof options.playground === 'object' ? options.playground : undefined; - defaults = { - ...defaults, - plugins: [ - ApolloServerPluginLandingPageGraphQLPlayground( - playgroundOptions, - ) as any, - ], - }; } else if ( (options.playground === undefined && process.env.NODE_ENV === 'production') || @@ -101,6 +92,7 @@ export abstract class ApolloBaseDriver< defaults.plugins || [], ); + this.normalizeSubscriptionsPath(options); this.wrapContextResolver(options); this.wrapFormatErrorFn(options); @@ -113,6 +105,22 @@ export abstract class ApolloBaseDriver< return options; } + private normalizeSubscriptionsPath(options: T) { + const subscriptions = (options as ApolloDriverConfig).subscriptions; + if (!subscriptions) { + return; + } + for (const protocol of [ + 'graphql-ws', + 'subscriptions-transport-ws', + ] as const) { + const config = subscriptions[protocol]; + if (config && typeof config === 'object' && config.path) { + config.path = this.applyGlobalPrefix(config.path, options); + } + } + } + public subscriptionWithFilter( instanceRef: unknown, filterFn: ( @@ -134,7 +142,7 @@ export abstract class ApolloBaseDriver< options: T, { preStartHook }: { preStartHook?: () => void } = {}, ) { - const { expressMiddleware } = loadPackage( + const { expressMiddleware } = await loadPackage( '@as-integrations/express5', 'GraphQLModule', () => require('@as-integrations/express5'), @@ -144,7 +152,7 @@ export abstract class ApolloBaseDriver< const httpAdapter = this.httpAdapterHost.httpAdapter; - // Workaround: GraphQL playground requires body to be present + // Workaround: the landing page requires body to be present // otherwise, it shows the "req.body is not set; this probably means you forgot to set up the json middleware before the Apollo Server middleware." error. // The latest version of "body-parser" does not set the body if there is no payload. // @see https://github.com/nestjs/graphql/issues/3451 @@ -187,11 +195,10 @@ export abstract class ApolloBaseDriver< options: T, { preStartHook }: { preStartHook?: () => void } = {}, ) { - const { fastifyApolloDrainPlugin, fastifyApolloHandler } = loadPackage( - '@as-integrations/fastify', - 'GraphQLModule', - () => require('@as-integrations/fastify'), - ); + const { fastifyApolloDrainPlugin, fastifyApolloHandler } = + await loadPackage('@as-integrations/fastify', 'GraphQLModule', () => + require('@as-integrations/fastify'), + ); const httpAdapter = this.httpAdapterHost.httpAdapter; const app = httpAdapter.getInstance(); diff --git a/packages/apollo/lib/drivers/apollo-federation.driver.ts b/packages/apollo/lib/drivers/apollo-federation.driver.ts index 74a199dbb..c9a44ac52 100644 --- a/packages/apollo/lib/drivers/apollo-federation.driver.ts +++ b/packages/apollo/lib/drivers/apollo-federation.driver.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { loadPackage } from '@nestjs/common/utils/load-package.util'; +import { loadPackage } from '@nestjs/common/utils/load-package.util.js'; import { ModulesContainer } from '@nestjs/core'; import { extend, @@ -8,9 +8,9 @@ import { SubscriptionConfig, } from '@nestjs/graphql'; import { GraphQLSchema } from 'graphql'; -import { ApolloDriverConfig } from '../interfaces'; -import { PluginsExplorerService } from '../services/plugins-explorer.service'; -import { ApolloBaseDriver } from './apollo-base.driver'; +import { ApolloDriverConfig } from '../interfaces/index.js'; +import { PluginsExplorerService } from '../services/plugins-explorer.service.js'; +import { ApolloBaseDriver } from './apollo-base.driver.js'; /** * @publicApi @@ -35,7 +35,7 @@ export class ApolloFederationDriver extends ApolloBaseDriver { ); if (options.definitions && options.definitions.path) { - const { printSubgraphSchema } = loadPackage( + const { printSubgraphSchema } = await loadPackage( '@apollo/subgraph', 'ApolloFederation', () => require('@apollo/subgraph'), @@ -50,7 +50,7 @@ export class ApolloFederationDriver extends ApolloBaseDriver { if (options.installSubscriptionHandlers || options.subscriptions) { const subscriptionsOptions: SubscriptionConfig = - options.subscriptions || { 'subscriptions-transport-ws': {} }; + options.subscriptions || { 'graphql-ws': {} }; this._subscriptionService = new GqlSubscriptionService( { schema: options.schema!, diff --git a/packages/apollo/lib/drivers/apollo-gateway.driver.ts b/packages/apollo/lib/drivers/apollo-gateway.driver.ts index 35e8f37ce..5fb9b72e4 100644 --- a/packages/apollo/lib/drivers/apollo-gateway.driver.ts +++ b/packages/apollo/lib/drivers/apollo-gateway.driver.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { loadPackage } from '@nestjs/common/utils/load-package.util'; +import { loadPackage } from '@nestjs/common/utils/load-package.util.js'; import { ModulesContainer } from '@nestjs/core'; import { extend } from '@nestjs/graphql'; import { GraphQLSchema } from 'graphql'; -import { ApolloGatewayDriverConfig } from '../interfaces'; -import { PluginsExplorerService } from '../services/plugins-explorer.service'; -import { ApolloBaseDriver } from './apollo-base.driver'; +import { ApolloGatewayDriverConfig } from '../interfaces/index.js'; +import { PluginsExplorerService } from '../services/plugins-explorer.service.js'; +import { ApolloBaseDriver } from './apollo-base.driver.js'; /** * @publicApi @@ -26,7 +26,7 @@ export class ApolloGatewayDriver extends ApolloBaseDriver require('@apollo/gateway'), diff --git a/packages/apollo/lib/drivers/apollo.driver.ts b/packages/apollo/lib/drivers/apollo.driver.ts index 7b8d38cb8..c7e861959 100644 --- a/packages/apollo/lib/drivers/apollo.driver.ts +++ b/packages/apollo/lib/drivers/apollo.driver.ts @@ -6,9 +6,9 @@ import { SubscriptionConfig, } from '@nestjs/graphql'; import { printSchema } from 'graphql'; -import { ApolloDriverConfig } from '../interfaces'; -import { PluginsExplorerService } from '../services/plugins-explorer.service'; -import { ApolloBaseDriver } from './apollo-base.driver'; +import { ApolloDriverConfig } from '../interfaces/index.js'; +import { PluginsExplorerService } from '../services/plugins-explorer.service.js'; +import { ApolloBaseDriver } from './apollo-base.driver.js'; /** * @publicApi @@ -40,7 +40,7 @@ export class ApolloDriver extends ApolloBaseDriver { if (options.installSubscriptionHandlers || options.subscriptions) { const subscriptionsOptions: SubscriptionConfig = - options.subscriptions || { 'subscriptions-transport-ws': {} }; + options.subscriptions || { 'graphql-ws': {} }; this._subscriptionService = new GqlSubscriptionService( { schema: options.schema!, diff --git a/packages/apollo/lib/drivers/index.ts b/packages/apollo/lib/drivers/index.ts index dabd13a07..afe144fd5 100644 --- a/packages/apollo/lib/drivers/index.ts +++ b/packages/apollo/lib/drivers/index.ts @@ -1,3 +1,3 @@ -export * from './apollo-federation.driver'; -export * from './apollo-gateway.driver'; -export * from './apollo.driver'; +export * from './apollo-federation.driver.js'; +export * from './apollo-gateway.driver.js'; +export * from './apollo.driver.js'; diff --git a/packages/apollo/lib/errors/index.ts b/packages/apollo/lib/errors/index.ts index b567f996e..4c931cd5f 100644 --- a/packages/apollo/lib/errors/index.ts +++ b/packages/apollo/lib/errors/index.ts @@ -1,4 +1,4 @@ -export * from './authentication.error'; -export * from './forbidden.error'; -export * from './user-input.error'; -export * from './validation.error'; +export * from './authentication.error.js'; +export * from './forbidden.error.js'; +export * from './user-input.error.js'; +export * from './validation.error.js'; diff --git a/packages/apollo/lib/graphiql/graphiql-html.factory.ts b/packages/apollo/lib/graphiql/graphiql-html.factory.ts index e855cb3e3..f6200b647 100644 --- a/packages/apollo/lib/graphiql/graphiql-html.factory.ts +++ b/packages/apollo/lib/graphiql/graphiql-html.factory.ts @@ -1,4 +1,4 @@ -import { GraphiQLOptions } from './interfaces/graphiql-options.interface'; +import { GraphiQLOptions } from './interfaces/graphiql-options.interface.js'; export class GraphiQLHTMLFactory { create(options: GraphiQLOptions): string { diff --git a/packages/apollo/lib/graphiql/graphiql-playground.plugin.ts b/packages/apollo/lib/graphiql/graphiql-playground.plugin.ts index a8571f904..4f587dc8a 100644 --- a/packages/apollo/lib/graphiql/graphiql-playground.plugin.ts +++ b/packages/apollo/lib/graphiql/graphiql-playground.plugin.ts @@ -1,6 +1,6 @@ import { ApolloServerPlugin } from '@apollo/server'; -import { GraphiQLHTMLFactory } from './graphiql-html.factory'; -import { GraphiQLOptions } from './interfaces/graphiql-options.interface'; +import { GraphiQLHTMLFactory } from './graphiql-html.factory.js'; +import { GraphiQLOptions } from './interfaces/graphiql-options.interface.js'; export class GraphiQLPlaygroundPlugin implements ApolloServerPlugin { private readonly graphiqlHTMLFactory = new GraphiQLHTMLFactory(); diff --git a/packages/apollo/lib/index.ts b/packages/apollo/lib/index.ts index 2dd973779..42bdd9323 100644 --- a/packages/apollo/lib/index.ts +++ b/packages/apollo/lib/index.ts @@ -1,6 +1,6 @@ -export * from './decorators'; -export * from './drivers'; -export * from './errors'; -export * from './interfaces'; -export * from './utils'; -export * from './services'; +export * from './decorators/index.js'; +export * from './drivers/index.js'; +export * from './errors/index.js'; +export * from './interfaces/index.js'; +export * from './utils/index.js'; +export * from './services/index.js'; diff --git a/packages/apollo/lib/interfaces/apollo-driver-config.interface.ts b/packages/apollo/lib/interfaces/apollo-driver-config.interface.ts index 5db1ab741..53745e3b2 100644 --- a/packages/apollo/lib/interfaces/apollo-driver-config.interface.ts +++ b/packages/apollo/lib/interfaces/apollo-driver-config.interface.ts @@ -1,12 +1,11 @@ import { ApolloServerOptionsWithTypeDefs } from '@apollo/server'; -import { ApolloServerPluginLandingPageGraphQLPlaygroundOptions } from '@apollo/server-plugin-landing-page-graphql-playground'; import { GqlModuleAsyncOptions, GqlModuleOptions, GqlOptionsFactory, SubscriptionConfig, } from '@nestjs/graphql'; -import { GraphiQLOptions } from '../graphiql/interfaces/graphiql-options.interface'; +import { GraphiQLOptions } from '../graphiql/interfaces/graphiql-options.interface.js'; /** * @publicApi @@ -29,7 +28,7 @@ export interface ApolloDriverConfig ServerRegistration, GqlModuleOptions { /** - * If enabled, "subscriptions-transport-ws" will be automatically registered. + * If enabled, graphql-ws will be automatically registered. */ installSubscriptionHandlers?: boolean; @@ -39,13 +38,14 @@ export interface ApolloDriverConfig subscriptions?: SubscriptionConfig; /** - * GraphQL playground options. - * The built-in playground is deprecated and will be replaced with GraphiQL in the future. + * Deprecated boolean alias for GraphiQL. + * Set to `true` to enable GraphiQL, or `false` to disable the landing page. */ - playground?: boolean | ApolloServerPluginLandingPageGraphQLPlaygroundOptions; + playground?: boolean; /** * GraphiQL options, or a boolean to enable GraphiQL with default options. + * GraphiQL is enabled by default in non-production when neither landing page option is configured. */ graphiql?: boolean | GraphiQLOptions; diff --git a/packages/apollo/lib/interfaces/apollo-federation-driver-config.interface.ts b/packages/apollo/lib/interfaces/apollo-federation-driver-config.interface.ts index 36388fe0a..d82d847aa 100644 --- a/packages/apollo/lib/interfaces/apollo-federation-driver-config.interface.ts +++ b/packages/apollo/lib/interfaces/apollo-federation-driver-config.interface.ts @@ -2,7 +2,7 @@ import { ApolloDriverAsyncConfig, ApolloDriverConfig, ApolloDriverConfigFactory, -} from './apollo-driver-config.interface'; +} from './apollo-driver-config.interface.js'; export type ApolloFederationDriverConfig = ApolloDriverConfig; export type ApolloFederationDriverConfigFactory = ApolloDriverConfigFactory; diff --git a/packages/apollo/lib/interfaces/apollo-gateway-driver-config.interface.ts b/packages/apollo/lib/interfaces/apollo-gateway-driver-config.interface.ts index 6dd1da7c9..a825d869d 100644 --- a/packages/apollo/lib/interfaces/apollo-gateway-driver-config.interface.ts +++ b/packages/apollo/lib/interfaces/apollo-gateway-driver-config.interface.ts @@ -6,7 +6,7 @@ import { GraphQLDriver, } from '@nestjs/graphql'; import { GraphQLSchema } from 'graphql'; -import { ApolloDriverConfig } from './apollo-driver-config.interface'; +import { ApolloDriverConfig } from './apollo-driver-config.interface.js'; /** * @publicApi diff --git a/packages/apollo/lib/interfaces/index.ts b/packages/apollo/lib/interfaces/index.ts index 8ef7e0ee4..0cc62c598 100644 --- a/packages/apollo/lib/interfaces/index.ts +++ b/packages/apollo/lib/interfaces/index.ts @@ -1,3 +1,3 @@ -export * from './apollo-driver-config.interface'; -export * from './apollo-federation-driver-config.interface'; -export * from './apollo-gateway-driver-config.interface'; +export * from './apollo-driver-config.interface.js'; +export * from './apollo-federation-driver-config.interface.js'; +export * from './apollo-gateway-driver-config.interface.js'; diff --git a/packages/apollo/lib/services/index.ts b/packages/apollo/lib/services/index.ts index 41d90a16c..822eaefe2 100644 --- a/packages/apollo/lib/services/index.ts +++ b/packages/apollo/lib/services/index.ts @@ -1 +1 @@ -export * from './plugins-explorer.service'; +export * from './plugins-explorer.service.js'; diff --git a/packages/apollo/lib/services/plugins-explorer.service.ts b/packages/apollo/lib/services/plugins-explorer.service.ts index d1c31b10e..34f3cdd57 100644 --- a/packages/apollo/lib/services/plugins-explorer.service.ts +++ b/packages/apollo/lib/services/plugins-explorer.service.ts @@ -1,7 +1,7 @@ -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { ModulesContainer } from '@nestjs/core/injector/modules-container'; +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; +import { ModulesContainer } from '@nestjs/core/injector/modules-container.js'; import { BaseExplorerService, GqlModuleOptions } from '@nestjs/graphql'; -import { PLUGIN_METADATA } from '../constants'; +import { PLUGIN_METADATA } from '../constants/index.js'; export class PluginsExplorerService extends BaseExplorerService { constructor(private readonly modulesContainer: ModulesContainer) { diff --git a/packages/apollo/lib/utils/get-apollo-server.ts b/packages/apollo/lib/utils/get-apollo-server.ts index b91288a19..05bfcbb1d 100644 --- a/packages/apollo/lib/utils/get-apollo-server.ts +++ b/packages/apollo/lib/utils/get-apollo-server.ts @@ -1,7 +1,7 @@ import { ApolloServer, type BaseContext } from '@apollo/server'; import { INestApplicationContext } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriver } from '..'; +import { ApolloDriver } from '../index.js'; type GetApolloServer = ( app: INestApplicationContext, diff --git a/packages/apollo/lib/utils/index.ts b/packages/apollo/lib/utils/index.ts index a13631c99..ce99fc150 100644 --- a/packages/apollo/lib/utils/index.ts +++ b/packages/apollo/lib/utils/index.ts @@ -1 +1 @@ -export * from './get-apollo-server'; +export * from './get-apollo-server.js'; diff --git a/packages/apollo/package.json b/packages/apollo/package.json index b202f1ec9..f2b8167cb 100644 --- a/packages/apollo/package.json +++ b/packages/apollo/package.json @@ -4,6 +4,7 @@ "description": "Nest - modern, fast, powerful node.js web framework (@apollo)", "author": "Kamil Mysliwiec", "license": "MIT", + "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -37,17 +38,15 @@ "@apollo/subgraph": "2.11.2", "@as-integrations/express5": "^1.1.2", "@as-integrations/fastify": "3.1.0", - "@nestjs/common": "11.1.19", - "@nestjs/core": "11.1.19", - "@nestjs/platform-express": "11.1.19", - "@nestjs/platform-fastify": "11.1.19", - "@nestjs/testing": "11.1.19", + "@nestjs/common": "next", + "@nestjs/core": "next", + "@nestjs/platform-express": "next", + "@nestjs/platform-fastify": "next", + "@nestjs/testing": "next", "apollo-cache-inmemory": "1.6.6", - "apollo-client": "2.6.10", - "apollo-link-ws": "1.0.20" + "apollo-client": "2.6.10" }, "dependencies": { - "@apollo/server-plugin-landing-page-graphql-playground": "4.0.1", "iterall": "1.3.0", "lodash.omit": "4.18.0", "tslib": "2.8.1" @@ -57,8 +56,8 @@ "@apollo/server": "^5.0.0", "@apollo/subgraph": "^2.0.0", "@as-integrations/fastify": "^2.1.1 || ^3.0.0", - "@nestjs/common": "^11.0.1", - "@nestjs/core": "^11.0.1", + "@nestjs/common": "next", + "@nestjs/core": "next", "@nestjs/graphql": "^13.0.0", "graphql": "^16.10.0" }, diff --git a/packages/apollo/tests/code-first-duplicate-resolvers/app.module.ts b/packages/apollo/tests/code-first-duplicate-resolvers/app.module.ts index 4a36edc45..594b057fa 100644 --- a/packages/apollo/tests/code-first-duplicate-resolvers/app.module.ts +++ b/packages/apollo/tests/code-first-duplicate-resolvers/app.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriver } from '../../lib'; -import { ModuleAModule } from './module-a/module-a.module'; -import { ModuleBModule } from './module-b/module-b.module'; -import { QueryResolver } from './query.resolver'; +import { ApolloDriver } from '../../lib/index.js'; +import { ModuleAModule } from './module-a/module-a.module.js'; +import { ModuleBModule } from './module-b/module-b.module.js'; +import { QueryResolver } from './query.resolver.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts b/packages/apollo/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts index a81c95d08..b67caeb6c 100644 --- a/packages/apollo/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts +++ b/packages/apollo/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/apollo/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts b/packages/apollo/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts index 22c8abf76..6211f8cef 100644 --- a/packages/apollo/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts +++ b/packages/apollo/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/apollo/tests/code-first-extensions/app.module.ts b/packages/apollo/tests/code-first-extensions/app.module.ts new file mode 100644 index 000000000..8ec281b59 --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/app.module.ts @@ -0,0 +1,19 @@ +import { GraphQLModule } from '@nestjs/graphql'; +import { ApolloDriver, ApolloDriverConfig } from '../../lib/index.js'; +import { UserModule } from './user/user.module.js'; +import { Module } from '@nestjs/common'; + +/** + * Main application module for the code-first extensions example. + */ +@Module({ + imports: [ + GraphQLModule.forRoot({ + driver: ApolloDriver, + autoSchemaFile: true, + playground: false, + }), + UserModule, + ], +}) +export class AppModule {} diff --git a/packages/apollo/tests/code-first-extensions/user/create-user.input.ts b/packages/apollo/tests/code-first-extensions/user/create-user.input.ts new file mode 100644 index 000000000..0d934e59d --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/user/create-user.input.ts @@ -0,0 +1,9 @@ +import { Extensions, Field, InputType } from '@nestjs/graphql'; + +@InputType() +@Extensions({ exampleExtension: 'exampleValue' }) +export class CreateUserInput { + @Extensions({ fieldLevelExtension: 123 }) + @Field() + name!: string; +} diff --git a/packages/apollo/tests/code-first-extensions/user/user-status.dto.ts b/packages/apollo/tests/code-first-extensions/user/user-status.dto.ts new file mode 100644 index 000000000..7ea2de94b --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/user/user-status.dto.ts @@ -0,0 +1,11 @@ +import { ID, Field, ObjectType, Extensions } from '@nestjs/graphql'; + +@ObjectType() +export class Status { + @Field(() => ID) + id!: string; + + @Field() + @Extensions({ isPublic: true }) + code!: string; +} diff --git a/packages/apollo/tests/code-first-extensions/user/user.dto.ts b/packages/apollo/tests/code-first-extensions/user/user.dto.ts new file mode 100644 index 000000000..a6dc73684 --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/user/user.dto.ts @@ -0,0 +1,15 @@ +import { Extensions, Field, ID, ObjectType } from '@nestjs/graphql'; +import { Status } from './user-status.dto.js'; + +@ObjectType() +export class User { + @Field(() => ID) + id!: string; + + @Field() + name!: string; + + @Extensions({ isPublic: true }) + @Field(() => Status, { nullable: true, description: 'DTO Description' }) + status?: Status; +} diff --git a/packages/apollo/tests/code-first-extensions/user/user.module.ts b/packages/apollo/tests/code-first-extensions/user/user.module.ts new file mode 100644 index 000000000..71a06e881 --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/user/user.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { UserResolver } from './user.resolver.js'; +import { UserService } from './user.service.js'; + +@Module({ + providers: [UserResolver, UserService], +}) +export class UserModule {} diff --git a/packages/apollo/tests/code-first-extensions/user/user.resolver.ts b/packages/apollo/tests/code-first-extensions/user/user.resolver.ts new file mode 100644 index 000000000..3e49d8943 --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/user/user.resolver.ts @@ -0,0 +1,38 @@ +import { + Args, + Mutation, + Parent, + Query, + ResolveField, + Resolver, +} from '@nestjs/graphql'; +import { User } from './user.dto.js'; +import { UserService } from './user.service.js'; +import { CreateUserInput } from './create-user.input.js'; +import { Status } from './user-status.dto.js'; + +@Resolver(() => User) +export class UserResolver { + constructor(private readonly userService: UserService) {} + + @Query(() => [User], { name: 'users' }) + findAll(): User[] { + return this.userService.findAll(); + } + + @Mutation(() => User) + createUser(@Args('createUserInput') createUserInput: CreateUserInput): User { + return this.userService.create(createUserInput); + } + + @ResolveField('status', undefined, { + nullable: true, + description: 'Resolve Field Description', + }) + getStatus(@Parent() user: User): Status { + return { + id: 'status-id', + code: 'ACTIVE', + }; + } +} diff --git a/packages/apollo/tests/code-first-extensions/user/user.service.ts b/packages/apollo/tests/code-first-extensions/user/user.service.ts new file mode 100644 index 000000000..ff1a3d6d2 --- /dev/null +++ b/packages/apollo/tests/code-first-extensions/user/user.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { User } from './user.dto.js'; +import { CreateUserInput } from './create-user.input.js'; + +@Injectable() +export class UserService { + private users: User[] = []; + private idCounter = 1; + + findAll(): User[] { + return this.users; + } + + findOne(id: string): User | undefined { + return this.users.find((user) => user.id === id); + } + + create(createUserInput: CreateUserInput): User { + const user: User = { + id: String(this.idCounter++), + name: createUserInput.name, + }; + this.users.push(user); + return user; + } +} diff --git a/packages/apollo/tests/code-first-federation/app.module.ts b/packages/apollo/tests/code-first-federation/app.module.ts index d6a65b523..9eebf6c53 100644 --- a/packages/apollo/tests/code-first-federation/app.module.ts +++ b/packages/apollo/tests/code-first-federation/app.module.ts @@ -1,13 +1,13 @@ import { ApolloServerPluginInlineTraceDisabled } from '@apollo/server/plugin/disabled'; import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloFederationDriver } from '../../lib/drivers'; -import { PostModule } from './post/post.module'; -import { RecipeModule } from './recipe/recipe.module'; -import { User } from './user/user.entity'; -import { UserModule } from './user/user.module'; -import { HumanModule } from './human/human.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloFederationDriver } from '../../lib/drivers/index.js'; +import { PostModule } from './post/post.module.js'; +import { RecipeModule } from './recipe/recipe.module.js'; +import { User } from './user/user.entity.js'; +import { UserModule } from './user/user.module.js'; +import { HumanModule } from './human/human.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/code-first-federation/caching.module.ts b/packages/apollo/tests/code-first-federation/caching.module.ts index 16b4c716c..fe60dbd78 100644 --- a/packages/apollo/tests/code-first-federation/caching.module.ts +++ b/packages/apollo/tests/code-first-federation/caching.module.ts @@ -9,12 +9,12 @@ import { GraphQLEnumType, GraphQLInt, } from 'graphql'; -import { ApolloFederationDriverConfig } from '../../lib'; -import { ApolloFederationDriver } from '../../lib/drivers'; -import { PostModule } from './post/post.module'; -import { RecipeModule } from './recipe/recipe.module'; -import { User } from './user/user.entity'; -import { UserModule } from './user/user.module'; +import { ApolloFederationDriverConfig } from '../../lib/index.js'; +import { ApolloFederationDriver } from '../../lib/drivers/index.js'; +import { PostModule } from './post/post.module.js'; +import { RecipeModule } from './recipe/recipe.module.js'; +import { User } from './user/user.entity.js'; +import { UserModule } from './user/user.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/code-first-federation/federation-auto-schema-file.module.ts b/packages/apollo/tests/code-first-federation/federation-auto-schema-file.module.ts new file mode 100644 index 000000000..90146a715 --- /dev/null +++ b/packages/apollo/tests/code-first-federation/federation-auto-schema-file.module.ts @@ -0,0 +1,30 @@ +import { ApolloServerPluginInlineTraceDisabled } from '@apollo/server/plugin/disabled'; +import { Module } from '@nestjs/common'; +import { GraphQLModule } from '@nestjs/graphql'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloFederationDriver } from '../../lib/drivers/index.js'; +import { HumanModule } from './human/human.module.js'; +import { PostModule } from './post/post.module.js'; +import { RecipeModule } from './recipe/recipe.module.js'; +import { User } from './user/user.entity.js'; +import { UserModule } from './user/user.module.js'; + +@Module({ + imports: [ + UserModule, + PostModule, + RecipeModule, + HumanModule, + GraphQLModule.forRoot({ + inheritResolversFromInterfaces: true, + driver: ApolloFederationDriver, + includeStacktraceInErrorResponses: false, + autoSchemaFile: 'federation-schema.graphql', + buildSchemaOptions: { + orphanedTypes: [User], + }, + plugins: [ApolloServerPluginInlineTraceDisabled()], + }), + ], +}) +export class FederationAutoSchemaFileModule {} diff --git a/packages/apollo/tests/code-first-federation/human/human.entity.ts b/packages/apollo/tests/code-first-federation/human/human.entity.ts index 90128e85d..922659d85 100644 --- a/packages/apollo/tests/code-first-federation/human/human.entity.ts +++ b/packages/apollo/tests/code-first-federation/human/human.entity.ts @@ -1,5 +1,5 @@ import { ObjectType } from '@nestjs/graphql'; -import { Character } from './character.entity'; +import { Character } from './character.entity.js'; @ObjectType({ implements: () => [Character], diff --git a/packages/apollo/tests/code-first-federation/human/human.module.ts b/packages/apollo/tests/code-first-federation/human/human.module.ts index 28a1ed091..7051f9c4b 100644 --- a/packages/apollo/tests/code-first-federation/human/human.module.ts +++ b/packages/apollo/tests/code-first-federation/human/human.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { HumanResolver } from './human.resolver'; +import { HumanResolver } from './human.resolver.js'; @Module({ providers: [HumanResolver], diff --git a/packages/apollo/tests/code-first-federation/human/human.resolver.ts b/packages/apollo/tests/code-first-federation/human/human.resolver.ts index 63f814ac9..38a5e1f9e 100644 --- a/packages/apollo/tests/code-first-federation/human/human.resolver.ts +++ b/packages/apollo/tests/code-first-federation/human/human.resolver.ts @@ -1,6 +1,6 @@ import { Query, Resolver, ResolveField } from '@nestjs/graphql'; -import { Human } from './human.entity'; -import { Character } from './character.entity'; +import { Human } from './human.entity.js'; +import { Character } from './character.entity.js'; @Resolver(() => Character) export class HumanResolver { diff --git a/packages/apollo/tests/code-first-federation/main.ts b/packages/apollo/tests/code-first-federation/main.ts index c04a543a1..1d78de2e8 100644 --- a/packages/apollo/tests/code-first-federation/main.ts +++ b/packages/apollo/tests/code-first-federation/main.ts @@ -1,6 +1,6 @@ import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { ApplicationModule } from './app.module'; +import { ApplicationModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule); diff --git a/packages/apollo/tests/code-first-federation/post/post.module.ts b/packages/apollo/tests/code-first-federation/post/post.module.ts index 1cba92ef0..9ffb29e35 100644 --- a/packages/apollo/tests/code-first-federation/post/post.module.ts +++ b/packages/apollo/tests/code-first-federation/post/post.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { PostService } from './post.service'; -import { PostResolver } from './post.resolver'; +import { PostService } from './post.service.js'; +import { PostResolver } from './post.resolver.js'; @Module({ providers: [PostService, PostResolver], diff --git a/packages/apollo/tests/code-first-federation/post/post.resolver.ts b/packages/apollo/tests/code-first-federation/post/post.resolver.ts index 34060c3c5..c9a8996b5 100644 --- a/packages/apollo/tests/code-first-federation/post/post.resolver.ts +++ b/packages/apollo/tests/code-first-federation/post/post.resolver.ts @@ -1,8 +1,8 @@ import { Args, Query, Resolver, ResolveReference } from '@nestjs/graphql'; -import { FederationSearchResultUnion } from '../unions/search-result.union'; -import { User } from '../user/user.entity'; -import { Post } from './post.entity'; -import { PostService } from './post.service'; +import { FederationSearchResultUnion } from '../unions/search-result.union.js'; +import { User } from '../user/user.entity.js'; +import { Post } from './post.entity.js'; +import { PostService } from './post.service.js'; @Resolver((of) => Post) export class PostResolver { diff --git a/packages/apollo/tests/code-first-federation/post/post.service.ts b/packages/apollo/tests/code-first-federation/post/post.service.ts index c3de8a5fa..70e5967ba 100644 --- a/packages/apollo/tests/code-first-federation/post/post.service.ts +++ b/packages/apollo/tests/code-first-federation/post/post.service.ts @@ -1,4 +1,4 @@ -import { Post } from './post.entity'; +import { Post } from './post.entity.js'; import { Injectable } from '@nestjs/common'; const data = [ diff --git a/packages/apollo/tests/code-first-federation/recipe/irecipe.resolver.ts b/packages/apollo/tests/code-first-federation/recipe/irecipe.resolver.ts index 93f3ef54f..b764e9054 100644 --- a/packages/apollo/tests/code-first-federation/recipe/irecipe.resolver.ts +++ b/packages/apollo/tests/code-first-federation/recipe/irecipe.resolver.ts @@ -1,5 +1,5 @@ import { Query, Resolver } from '@nestjs/graphql'; -import { IRecipe } from './recipe'; +import { IRecipe } from './recipe.js'; @Resolver((of) => IRecipe) export class IRecipeResolver { diff --git a/packages/apollo/tests/code-first-federation/recipe/recipe.module.ts b/packages/apollo/tests/code-first-federation/recipe/recipe.module.ts index 4a7ab7da9..6564eb70d 100644 --- a/packages/apollo/tests/code-first-federation/recipe/recipe.module.ts +++ b/packages/apollo/tests/code-first-federation/recipe/recipe.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { IRecipeResolver } from './irecipe.resolver'; +import { IRecipeResolver } from './irecipe.resolver.js'; @Module({ providers: [IRecipeResolver], diff --git a/packages/apollo/tests/code-first-federation/unions/search-result.union.ts b/packages/apollo/tests/code-first-federation/unions/search-result.union.ts index 47431722a..d93f84bad 100644 --- a/packages/apollo/tests/code-first-federation/unions/search-result.union.ts +++ b/packages/apollo/tests/code-first-federation/unions/search-result.union.ts @@ -1,6 +1,6 @@ -import { createUnionType } from '@nestjs/graphql/type-factories'; -import { Post } from '../post/post.entity'; -import { User } from '../user/user.entity'; +import { createUnionType } from '@nestjs/graphql/type-factories/index.js'; +import { Post } from '../post/post.entity.js'; +import { User } from '../user/user.entity.js'; export const FederationSearchResultUnion = createUnionType({ name: 'FederationSearchResultUnion', diff --git a/packages/apollo/tests/code-first-federation/user/user.entity.ts b/packages/apollo/tests/code-first-federation/user/user.entity.ts index 1229b6aeb..744f022a9 100644 --- a/packages/apollo/tests/code-first-federation/user/user.entity.ts +++ b/packages/apollo/tests/code-first-federation/user/user.entity.ts @@ -1,5 +1,5 @@ import { Directive, Field, ID, ObjectType } from '@nestjs/graphql'; -import { Post } from '../post/post.entity'; +import { Post } from '../post/post.entity.js'; @ObjectType() @Directive('@extends') diff --git a/packages/apollo/tests/code-first-federation/user/user.module.ts b/packages/apollo/tests/code-first-federation/user/user.module.ts index 502eb79af..5560581a8 100644 --- a/packages/apollo/tests/code-first-federation/user/user.module.ts +++ b/packages/apollo/tests/code-first-federation/user/user.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; -import { PostModule } from '../post/post.module'; +import { UserResolver } from './user.resolver.js'; +import { PostModule } from '../post/post.module.js'; @Module({ providers: [UserResolver], diff --git a/packages/apollo/tests/code-first-federation/user/user.resolver.ts b/packages/apollo/tests/code-first-federation/user/user.resolver.ts index 1c049ae57..938db1fc7 100644 --- a/packages/apollo/tests/code-first-federation/user/user.resolver.ts +++ b/packages/apollo/tests/code-first-federation/user/user.resolver.ts @@ -1,6 +1,6 @@ import { Parent, ResolveField, Resolver } from '@nestjs/graphql'; -import { PostService } from '../post/post.service'; -import { User } from './user.entity'; +import { PostService } from '../post/post.service.js'; +import { User } from './user.entity.js'; @Resolver((of) => User) export class UserResolver { diff --git a/packages/apollo/tests/code-first-register-in/products/product.model.ts b/packages/apollo/tests/code-first-register-in/products/product.model.ts index 658a73407..f37745280 100644 --- a/packages/apollo/tests/code-first-register-in/products/product.model.ts +++ b/packages/apollo/tests/code-first-register-in/products/product.model.ts @@ -1,5 +1,5 @@ import { Field, ID, ObjectType } from '@nestjs/graphql'; -import { ProductsModule } from './products.module'; +import { ProductsModule } from './products.module.js'; @ObjectType({ registerIn: () => ProductsModule }) export class Product { diff --git a/packages/apollo/tests/code-first-register-in/products/products.module.ts b/packages/apollo/tests/code-first-register-in/products/products.module.ts index e74a4192a..aa815a618 100644 --- a/packages/apollo/tests/code-first-register-in/products/products.module.ts +++ b/packages/apollo/tests/code-first-register-in/products/products.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ProductsResolver } from './products.resolver'; +import { ProductsResolver } from './products.resolver.js'; @Module({ providers: [ProductsResolver], diff --git a/packages/apollo/tests/code-first-register-in/products/products.resolver.ts b/packages/apollo/tests/code-first-register-in/products/products.resolver.ts index c0861d9c0..303e7a08b 100644 --- a/packages/apollo/tests/code-first-register-in/products/products.resolver.ts +++ b/packages/apollo/tests/code-first-register-in/products/products.resolver.ts @@ -1,5 +1,5 @@ import { Query, Resolver } from '@nestjs/graphql'; -import { Product } from './product.model'; +import { Product } from './product.model.js'; @Resolver((of) => Product) export class ProductsResolver { diff --git a/packages/apollo/tests/code-first-register-in/users/create-user.input.ts b/packages/apollo/tests/code-first-register-in/users/create-user.input.ts index aae253a30..2e71a3ff6 100644 --- a/packages/apollo/tests/code-first-register-in/users/create-user.input.ts +++ b/packages/apollo/tests/code-first-register-in/users/create-user.input.ts @@ -1,5 +1,5 @@ import { Field, InputType } from '@nestjs/graphql'; -import { UsersModule } from './users.module'; +import { UsersModule } from './users.module.js'; @InputType({ registerIn: () => UsersModule }) export class CreateUserInput { diff --git a/packages/apollo/tests/code-first-register-in/users/user.model.ts b/packages/apollo/tests/code-first-register-in/users/user.model.ts index 042704cc4..2669fb20f 100644 --- a/packages/apollo/tests/code-first-register-in/users/user.model.ts +++ b/packages/apollo/tests/code-first-register-in/users/user.model.ts @@ -1,6 +1,6 @@ import { Field, ID, ObjectType } from '@nestjs/graphql'; -import { AppInfo } from '../shared/app-info.model'; -import { UsersModule } from './users.module'; +import { AppInfo } from '../shared/app-info.model.js'; +import { UsersModule } from './users.module.js'; @ObjectType({ registerIn: () => UsersModule }) export class User { diff --git a/packages/apollo/tests/code-first-register-in/users/users.module.ts b/packages/apollo/tests/code-first-register-in/users/users.module.ts index 94cba58f0..20c89b79d 100644 --- a/packages/apollo/tests/code-first-register-in/users/users.module.ts +++ b/packages/apollo/tests/code-first-register-in/users/users.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UsersResolver } from './users.resolver'; +import { UsersResolver } from './users.resolver.js'; @Module({ providers: [UsersResolver], diff --git a/packages/apollo/tests/code-first-register-in/users/users.resolver.ts b/packages/apollo/tests/code-first-register-in/users/users.resolver.ts index 3f9e5515a..f0232e31e 100644 --- a/packages/apollo/tests/code-first-register-in/users/users.resolver.ts +++ b/packages/apollo/tests/code-first-register-in/users/users.resolver.ts @@ -1,6 +1,6 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; -import { CreateUserInput } from './create-user.input'; -import { User } from './user.model'; +import { CreateUserInput } from './create-user.input.js'; +import { User } from './user.model.js'; @Resolver((of) => User) export class UsersResolver { diff --git a/packages/apollo/tests/code-first/app.module.ts b/packages/apollo/tests/code-first/app.module.ts index 17d8ee18c..86d560629 100644 --- a/packages/apollo/tests/code-first/app.module.ts +++ b/packages/apollo/tests/code-first/app.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { DirectionsModule } from './directions/directions.module'; -import { RecipesModule } from './recipes/recipes.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { DirectionsModule } from './directions/directions.module.js'; +import { RecipesModule } from './recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/code-first/cats/cats.module.ts b/packages/apollo/tests/code-first/cats/cats.module.ts index 7826c4ae0..cb796553b 100644 --- a/packages/apollo/tests/code-first/cats/cats.module.ts +++ b/packages/apollo/tests/code-first/cats/cats.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { CatsResolver } from './cats.resolver'; +import { CatsResolver } from './cats.resolver.js'; @Module({}) export class CatsModule { diff --git a/packages/apollo/tests/code-first/directions/directions.module.ts b/packages/apollo/tests/code-first/directions/directions.module.ts index 06331a8e1..b4502a61c 100644 --- a/packages/apollo/tests/code-first/directions/directions.module.ts +++ b/packages/apollo/tests/code-first/directions/directions.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { DirectionsResolver } from './directions.resolver'; +import { DirectionsResolver } from './directions.resolver.js'; @Module({ providers: [DirectionsResolver], diff --git a/packages/apollo/tests/code-first/directions/directions.resolver.ts b/packages/apollo/tests/code-first/directions/directions.resolver.ts index 1fd55cc37..c6fda8ea0 100644 --- a/packages/apollo/tests/code-first/directions/directions.resolver.ts +++ b/packages/apollo/tests/code-first/directions/directions.resolver.ts @@ -1,5 +1,5 @@ import { Args, Query, Resolver } from '@nestjs/graphql'; -import { Direction } from '../enums/direction.enum'; +import { Direction } from '../enums/direction.enum.js'; @Resolver() export class DirectionsResolver { diff --git a/packages/apollo/tests/code-first/main.ts b/packages/apollo/tests/code-first/main.ts index c04a543a1..1d78de2e8 100644 --- a/packages/apollo/tests/code-first/main.ts +++ b/packages/apollo/tests/code-first/main.ts @@ -1,6 +1,6 @@ import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { ApplicationModule } from './app.module'; +import { ApplicationModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule); diff --git a/packages/apollo/tests/code-first/other/abstract.resolver.ts b/packages/apollo/tests/code-first/other/abstract.resolver.ts index 9e3dc4b84..aadeda089 100644 --- a/packages/apollo/tests/code-first/other/abstract.resolver.ts +++ b/packages/apollo/tests/code-first/other/abstract.resolver.ts @@ -1,6 +1,6 @@ import { Args, Query, Resolver } from '@nestjs/graphql'; -import { RecipesArgs } from '../recipes/dto/recipes.args'; -import { Recipe } from '../recipes/models/recipe'; +import { RecipesArgs } from '../recipes/dto/recipes.args.js'; +import { Recipe } from '../recipes/models/recipe.js'; @Resolver(() => Recipe, { isAbstract: true }) export class AbstractResolver { diff --git a/packages/apollo/tests/code-first/recipes/ingredients.resolver.ts b/packages/apollo/tests/code-first/recipes/ingredients.resolver.ts index 1c1890c4b..90aecf910 100644 --- a/packages/apollo/tests/code-first/recipes/ingredients.resolver.ts +++ b/packages/apollo/tests/code-first/recipes/ingredients.resolver.ts @@ -1,5 +1,5 @@ import { ID, ResolveField, Resolver, Parent } from '@nestjs/graphql'; -import { Ingredient } from './models/ingredient'; +import { Ingredient } from './models/ingredient.js'; @Resolver((of) => Ingredient) export class IngredientsResolver { diff --git a/packages/apollo/tests/code-first/recipes/irecipes.resolver.ts b/packages/apollo/tests/code-first/recipes/irecipes.resolver.ts index 7f13ee1c1..d7388569d 100644 --- a/packages/apollo/tests/code-first/recipes/irecipes.resolver.ts +++ b/packages/apollo/tests/code-first/recipes/irecipes.resolver.ts @@ -1,5 +1,5 @@ import { Args, ResolveField, Resolver } from '@nestjs/graphql'; -import { IRecipe } from './models/recipe'; +import { IRecipe } from './models/recipe.js'; @Resolver((of) => IRecipe) export class IRecipesResolver { diff --git a/packages/apollo/tests/code-first/recipes/models/recipe.ts b/packages/apollo/tests/code-first/recipes/models/recipe.ts index eb4ac643b..eeb16dcb0 100644 --- a/packages/apollo/tests/code-first/recipes/models/recipe.ts +++ b/packages/apollo/tests/code-first/recipes/models/recipe.ts @@ -6,7 +6,7 @@ import { NextFn, ObjectType, } from '@nestjs/graphql'; -import { METADATA_FACTORY_NAME } from '@nestjs/graphql/plugin/plugin-constants'; +import { METADATA_FACTORY_NAME } from '@nestjs/graphql/plugin/plugin-constants.js'; @InterfaceType() export abstract class Base { @Field((type) => ID) diff --git a/packages/apollo/tests/code-first/recipes/recipes.module.ts b/packages/apollo/tests/code-first/recipes/recipes.module.ts index cb236e149..b6c9a9bed 100644 --- a/packages/apollo/tests/code-first/recipes/recipes.module.ts +++ b/packages/apollo/tests/code-first/recipes/recipes.module.ts @@ -1,11 +1,11 @@ import { Module } from '@nestjs/common'; import { APP_FILTER } from '@nestjs/core'; -import { UnauthorizedFilter } from '../common/filters/unauthorized.filter'; -import { DateScalar } from '../common/scalars/date.scalar'; -import { IngredientsResolver } from './ingredients.resolver'; -import { IRecipesResolver } from './irecipes.resolver'; -import { RecipesResolver } from './recipes.resolver'; -import { RecipesService } from './recipes.service'; +import { UnauthorizedFilter } from '../common/filters/unauthorized.filter.js'; +import { DateScalar } from '../common/scalars/date.scalar.js'; +import { IngredientsResolver } from './ingredients.resolver.js'; +import { IRecipesResolver } from './irecipes.resolver.js'; +import { RecipesResolver } from './recipes.resolver.js'; +import { RecipesService } from './recipes.service.js'; @Module({ providers: [ diff --git a/packages/apollo/tests/code-first/recipes/recipes.resolver.ts b/packages/apollo/tests/code-first/recipes/recipes.resolver.ts index 4f159592c..5f1b9ba71 100644 --- a/packages/apollo/tests/code-first/recipes/recipes.resolver.ts +++ b/packages/apollo/tests/code-first/recipes/recipes.resolver.ts @@ -9,15 +9,15 @@ import { Subscription, } from '@nestjs/graphql'; import { PubSub } from 'graphql-subscriptions'; -import { AuthGuard } from '../common/guards/auth.guard'; -import { FilterRecipesCountArgs } from './dto/filter-recipes-count.args'; -import { NewRecipeInput } from './dto/new-recipe.input'; -import { RecipesArgs } from './dto/recipes.args'; -import { Category } from './models/category'; -import { Ingredient } from './models/ingredient'; -import { IRecipe, Recipe } from './models/recipe'; -import { RecipesService } from './recipes.service'; -import { SearchResultUnion } from './unions/search-result.union'; +import { AuthGuard } from '../common/guards/auth.guard.js'; +import { FilterRecipesCountArgs } from './dto/filter-recipes-count.args.js'; +import { NewRecipeInput } from './dto/new-recipe.input.js'; +import { RecipesArgs } from './dto/recipes.args.js'; +import { Category } from './models/category.js'; +import { Ingredient } from './models/ingredient.js'; +import { IRecipe, Recipe } from './models/recipe.js'; +import { RecipesService } from './recipes.service.js'; +import { SearchResultUnion } from './unions/search-result.union.js'; const pubSub = new PubSub(); diff --git a/packages/apollo/tests/code-first/recipes/recipes.service.ts b/packages/apollo/tests/code-first/recipes/recipes.service.ts index ec91515b6..e1c27a225 100644 --- a/packages/apollo/tests/code-first/recipes/recipes.service.ts +++ b/packages/apollo/tests/code-first/recipes/recipes.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; -import { NewRecipeInput } from './dto/new-recipe.input'; -import { RecipesArgs } from './dto/recipes.args'; -import { Recipe } from './models/recipe'; +import { NewRecipeInput } from './dto/new-recipe.input.js'; +import { RecipesArgs } from './dto/recipes.args.js'; +import { Recipe } from './models/recipe.js'; @Injectable() export class RecipesService { diff --git a/packages/apollo/tests/code-first/recipes/unions/search-result.union.ts b/packages/apollo/tests/code-first/recipes/unions/search-result.union.ts index e681cab52..b6832da10 100644 --- a/packages/apollo/tests/code-first/recipes/unions/search-result.union.ts +++ b/packages/apollo/tests/code-first/recipes/unions/search-result.union.ts @@ -1,6 +1,6 @@ import { createUnionType } from '@nestjs/graphql'; -import { Ingredient } from '../models/ingredient'; -import { Recipe } from '../models/recipe'; +import { Ingredient } from '../models/ingredient.js'; +import { Recipe } from '../models/recipe.js'; export const SearchResultUnion = createUnionType({ name: 'SearchResultUnion', diff --git a/packages/apollo/tests/duplicate-resolvers/app.module.ts b/packages/apollo/tests/duplicate-resolvers/app.module.ts index cba478c5b..59f918951 100644 --- a/packages/apollo/tests/duplicate-resolvers/app.module.ts +++ b/packages/apollo/tests/duplicate-resolvers/app.module.ts @@ -1,15 +1,15 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriver } from '../../lib'; -import { ModuleAModule } from './module-a/module-a.module'; -import { ModuleBModule } from './module-b/module-b.module'; +import { ApolloDriver } from '../../lib/index.js'; +import { ModuleAModule } from './module-a/module-a.module.js'; +import { ModuleBModule } from './module-b/module-b.module.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: ApolloDriver, - typePaths: [join(__dirname, '*.graphql')], + typePaths: [join(import.meta.dirname, '*.graphql')], }), ModuleAModule, ModuleBModule, diff --git a/packages/apollo/tests/duplicate-resolvers/module-a/module-a.module.ts b/packages/apollo/tests/duplicate-resolvers/module-a/module-a.module.ts index a81c95d08..b67caeb6c 100644 --- a/packages/apollo/tests/duplicate-resolvers/module-a/module-a.module.ts +++ b/packages/apollo/tests/duplicate-resolvers/module-a/module-a.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/apollo/tests/duplicate-resolvers/module-b/module-b.module.ts b/packages/apollo/tests/duplicate-resolvers/module-b/module-b.module.ts index 22c8abf76..6211f8cef 100644 --- a/packages/apollo/tests/duplicate-resolvers/module-b/module-b.module.ts +++ b/packages/apollo/tests/duplicate-resolvers/module-b/module-b.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/apollo/tests/e2e/__snapshots__/serialized-graph.spec.ts.snap b/packages/apollo/tests/e2e/__snapshots__/serialized-graph.spec.ts.snap index c9b4acaf4..ed1af1c46 100644 --- a/packages/apollo/tests/e2e/__snapshots__/serialized-graph.spec.ts.snap +++ b/packages/apollo/tests/e2e/__snapshots__/serialized-graph.spec.ts.snap @@ -886,7 +886,8 @@ exports[`Serialized graph > should generate a post-initialization graph and matc "transient": false, "exported": false, "token": "AuthGuard", - "subtype": "guard" + "subtype": "guard", + "initTime": 0 } }, "-1682923264": { @@ -2015,6 +2016,22 @@ exports[`Serialized graph > should generate a post-initialization graph and matc }, "id": "2086827720" }, + "-658225180": { + "source": "327064966", + "target": "1977125601", + "metadata": { + "type": "class-to-class", + "sourceModuleName": "RecipesModule", + "sourceClassName": "RecipesResolver", + "targetClassName": "RecipesService", + "sourceClassToken": "RecipesResolver", + "targetClassToken": "RecipesService", + "targetModuleName": "RecipesModule", + "keyOrIndex": 0, + "injectionType": "constructor" + }, + "id": "-658225180" + }, "-1796955647": { "source": "-1046435906", "target": "-973488942", @@ -2097,22 +2114,6 @@ exports[`Serialized graph > should generate a post-initialization graph and matc }, "id": "-1036206953" }, - "-658225180": { - "source": "327064966", - "target": "1977125601", - "metadata": { - "type": "class-to-class", - "sourceModuleName": "RecipesModule", - "sourceClassName": "RecipesResolver", - "targetClassName": "RecipesService", - "sourceClassToken": "RecipesResolver", - "targetClassToken": "RecipesService", - "targetModuleName": "RecipesModule", - "keyOrIndex": 0, - "injectionType": "constructor" - }, - "id": "-658225180" - }, "-1301730010": { "source": "-1399120880", "target": "-325525981", diff --git a/packages/apollo/tests/e2e/code-first-extensions.spec.ts b/packages/apollo/tests/e2e/code-first-extensions.spec.ts new file mode 100644 index 000000000..21afde8f2 --- /dev/null +++ b/packages/apollo/tests/e2e/code-first-extensions.spec.ts @@ -0,0 +1,34 @@ +import { INestApplication } from '@nestjs/common'; +import { GraphQLSchemaHost } from '@nestjs/graphql'; +import { Test } from '@nestjs/testing'; +import { GraphQLObjectType } from 'graphql'; +import { AppModule } from '../code-first-extensions/app.module.js'; + +describe('Code-first extensions', () => { + let app: INestApplication; + + beforeAll(async () => { + const moduleRef = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleRef.createNestApplication(); + await app.init(); + }); + + afterAll(async () => { + await app.close(); + }); + + it('adds extensions to resolved field', async () => { + const { schema } = app.get(GraphQLSchemaHost); + const userObject = schema.getType('User') as GraphQLObjectType; + expect(userObject, 'User type not found in schema').toBeTruthy(); + const statusField = userObject.getFields().status; + expect(statusField, 'status field not found in User type').toBeTruthy(); + + const extensions = statusField.extensions; + + expect(extensions.isPublic).toBe(true); + }); +}); diff --git a/packages/apollo/tests/e2e/code-first-federation-caching.spec.ts b/packages/apollo/tests/e2e/code-first-federation-caching.spec.ts index 3cb532049..2e478ab34 100644 --- a/packages/apollo/tests/e2e/code-first-federation-caching.spec.ts +++ b/packages/apollo/tests/e2e/code-first-federation-caching.spec.ts @@ -5,7 +5,7 @@ import { GraphQLSchemaBuilderModule, GraphQLSchemaFactory, } from '@nestjs/graphql'; -import { GRAPHQL_SDL_FILE_HEADER } from '@nestjs/graphql/graphql.constants'; +import { GRAPHQL_SDL_FILE_HEADER } from '@nestjs/graphql/graphql.constants.js'; import { Test } from '@nestjs/testing'; import { DirectiveLocation, @@ -19,14 +19,14 @@ import { printSchema, } from 'graphql'; import { gql } from 'graphql-tag'; -import { ApolloFederationDriver } from '../../lib'; -import { CachingApplicationModule } from '../code-first-federation/caching.module'; -import { Post } from '../code-first-federation/post/post.entity'; -import { PostResolver } from '../code-first-federation/post/post.resolver'; -import { PostService } from '../code-first-federation/post/post.service'; -import { IRecipeResolver } from '../code-first-federation/recipe/irecipe.resolver'; -import { UserResolver } from '../code-first-federation/user/user.resolver'; -import { printedSchemaSnapshot } from '../utils/printed-schema-with-cache-control.snapshot'; +import { ApolloFederationDriver } from '../../lib/index.js'; +import { CachingApplicationModule } from '../code-first-federation/caching.module.js'; +import { Post } from '../code-first-federation/post/post.entity.js'; +import { PostResolver } from '../code-first-federation/post/post.resolver.js'; +import { PostService } from '../code-first-federation/post/post.service.js'; +import { IRecipeResolver } from '../code-first-federation/recipe/irecipe.resolver.js'; +import { UserResolver } from '../code-first-federation/user/user.resolver.js'; +import { printedSchemaSnapshot } from '../utils/printed-schema-with-cache-control.snapshot.js'; describe.skip('Code-first - Federation with caching', () => { describe('generated schema', () => { diff --git a/packages/apollo/tests/e2e/code-first-federation.spec.ts b/packages/apollo/tests/e2e/code-first-federation.spec.ts index 5ebe1725d..099c99b0f 100644 --- a/packages/apollo/tests/e2e/code-first-federation.spec.ts +++ b/packages/apollo/tests/e2e/code-first-federation.spec.ts @@ -3,9 +3,9 @@ import { INestApplication } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { gql } from 'graphql-tag'; -import { ApolloFederationDriver } from '../../lib'; -import { ApplicationModule } from '../code-first-federation/app.module'; -import { expectSingleResult } from '../utils/assertion-utils'; +import { ApolloFederationDriver } from '../../lib/index.js'; +import { ApplicationModule } from '../code-first-federation/app.module.js'; +import { expectSingleResult } from '../utils/assertion-utils.js'; describe('Code-first - Federation', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/code-first-inheritance.spec.ts b/packages/apollo/tests/e2e/code-first-inheritance.spec.ts index 83d1816f0..f369d2abf 100644 --- a/packages/apollo/tests/e2e/code-first-inheritance.spec.ts +++ b/packages/apollo/tests/e2e/code-first-inheritance.spec.ts @@ -12,8 +12,8 @@ import { } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { gql } from 'graphql-tag'; -import { ApolloDriver, ApolloDriverConfig } from '../../lib'; -import { expectSingleResult } from '../utils/assertion-utils'; +import { ApolloDriver, ApolloDriverConfig } from '../../lib/index.js'; +import { expectSingleResult } from '../utils/assertion-utils.js'; @InputType() class MyArgs { diff --git a/packages/apollo/tests/e2e/code-first-register-in.spec.ts b/packages/apollo/tests/e2e/code-first-register-in.spec.ts index 340ac01b5..300b82ee6 100644 --- a/packages/apollo/tests/e2e/code-first-register-in.spec.ts +++ b/packages/apollo/tests/e2e/code-first-register-in.spec.ts @@ -3,10 +3,10 @@ import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { ApolloServer } from '@apollo/server'; import { gql } from 'graphql-tag'; -import { ApolloDriver, ApolloDriverConfig } from '../../lib'; -import { ProductsModule } from '../code-first-register-in/products/products.module'; -import { UsersModule } from '../code-first-register-in/users/users.module'; -import { expectSingleResult } from '../utils/assertion-utils'; +import { ApolloDriver, ApolloDriverConfig } from '../../lib/index.js'; +import { ProductsModule } from '../code-first-register-in/products/products.module.js'; +import { UsersModule } from '../code-first-register-in/users/users.module.js'; +import { expectSingleResult } from '../utils/assertion-utils.js'; const buildApp = async (include?: Function[]) => { const moduleRef = await Test.createTestingModule({ diff --git a/packages/apollo/tests/e2e/code-first-schema.spec.ts b/packages/apollo/tests/e2e/code-first-schema.spec.ts index 589355e0a..2713cff55 100644 --- a/packages/apollo/tests/e2e/code-first-schema.spec.ts +++ b/packages/apollo/tests/e2e/code-first-schema.spec.ts @@ -2,7 +2,7 @@ import { GraphQLSchemaBuilderModule, GraphQLSchemaFactory, } from '@nestjs/graphql'; -import { GRAPHQL_SDL_FILE_HEADER } from '@nestjs/graphql/graphql.constants'; +import { GRAPHQL_SDL_FILE_HEADER } from '@nestjs/graphql/graphql.constants.js'; import { Test } from '@nestjs/testing'; import { GraphQLSchema, @@ -13,15 +13,15 @@ import { graphql, printSchema, } from 'graphql'; -import { DirectionsResolver } from '../code-first/directions/directions.resolver'; -import { SampleOrphanedEnum } from '../code-first/enums/sample-orphaned.enum'; -import { AbstractResolver } from '../code-first/other/abstract.resolver'; -import { SampleOrphanedType } from '../code-first/other/sample-orphaned.type'; -import { SampleScalar } from '../code-first/other/sample-scalar'; -import { IngredientsResolver } from '../code-first/recipes/ingredients.resolver'; -import { IRecipesResolver } from '../code-first/recipes/irecipes.resolver'; -import { Recipe } from '../code-first/recipes/models/recipe'; -import { RecipesResolver } from '../code-first/recipes/recipes.resolver'; +import { DirectionsResolver } from '../code-first/directions/directions.resolver.js'; +import { SampleOrphanedEnum } from '../code-first/enums/sample-orphaned.enum.js'; +import { AbstractResolver } from '../code-first/other/abstract.resolver.js'; +import { SampleOrphanedType } from '../code-first/other/sample-orphaned.type.js'; +import { SampleScalar } from '../code-first/other/sample-scalar.js'; +import { IngredientsResolver } from '../code-first/recipes/ingredients.resolver.js'; +import { IRecipesResolver } from '../code-first/recipes/irecipes.resolver.js'; +import { Recipe } from '../code-first/recipes/models/recipe.js'; +import { RecipesResolver } from '../code-first/recipes/recipes.resolver.js'; import { getMutation, getMutationByName, @@ -29,8 +29,8 @@ import { getQueryByName, getSubscription, getSubscriptionByName, -} from '../utils/introspection-schema.utils'; -import { printedSchemaSnapshot } from '../utils/printed-schema.snapshot'; +} from '../utils/introspection-schema.utils.js'; +import { printedSchemaSnapshot } from '../utils/printed-schema.snapshot.js'; describe('Code-first - schema factory', () => { let schemaFactory: GraphQLSchemaFactory; @@ -60,9 +60,17 @@ describe('Code-first - schema factory', () => { { orphanedTypes: [SampleOrphanedType, SampleOrphanedEnum] }, ); - introspectionSchema = await ( - await graphql({ schema, source: getIntrospectionQuery() }) - ).data.__schema; + const introspectionResult = await graphql({ + schema, + source: getIntrospectionQuery(), + }); + + if (!introspectionResult.data?.__schema) { + throw new Error('Missing introspection schema data'); + } + + introspectionSchema = introspectionResult.data + .__schema as IntrospectionSchema; }); it('should be valid', async () => { expect(schema).toBeInstanceOf(GraphQLSchema); diff --git a/packages/apollo/tests/e2e/code-first.spec.ts b/packages/apollo/tests/e2e/code-first.spec.ts index 4eaee8d68..7a7cf22d3 100644 --- a/packages/apollo/tests/e2e/code-first.spec.ts +++ b/packages/apollo/tests/e2e/code-first.spec.ts @@ -3,9 +3,9 @@ import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { ApolloServer } from '@apollo/server'; import { gql } from 'graphql-tag'; -import { ApolloDriver } from '../../lib'; -import { ApplicationModule } from '../code-first/app.module'; -import { expectSingleResult } from '../utils/assertion-utils'; +import { ApolloDriver } from '../../lib/index.js'; +import { ApplicationModule } from '../code-first/app.module.js'; +import { expectSingleResult } from '../utils/assertion-utils.js'; describe('Code-first', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/custom-context.spec.ts b/packages/apollo/tests/e2e/custom-context.spec.ts index 023b2d008..f3c821fba 100644 --- a/packages/apollo/tests/e2e/custom-context.spec.ts +++ b/packages/apollo/tests/e2e/custom-context.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { ExpressAdapter } from '@nestjs/platform-express'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { CustomContextModule } from '../graphql/custom-context/custom-context.module'; +import { CustomContextModule } from '../graphql/custom-context/custom-context.module.js'; import { FastifyAdapter } from '@nestjs/platform-fastify'; describe('GraphQL (custom context)', () => { diff --git a/packages/apollo/tests/e2e/duplicate-resolvers.spec.ts b/packages/apollo/tests/e2e/duplicate-resolvers.spec.ts index 0e1f2082b..9e30716fc 100644 --- a/packages/apollo/tests/e2e/duplicate-resolvers.spec.ts +++ b/packages/apollo/tests/e2e/duplicate-resolvers.spec.ts @@ -1,16 +1,16 @@ +import { ApolloServer } from '@apollo/server'; import { INestApplication } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; -import { ApolloServerBase } from 'apollo-server-core'; import { gql } from 'graphql-tag'; -import { ApolloDriver } from '../../lib'; -import { AppModule as CodeFirstModule } from '../code-first-duplicate-resolvers/app.module'; -import { AppModule as SchemaFirstModule } from '../duplicate-resolvers/app.module'; -import { expectSingleResult } from '../utils/assertion-utils'; +import { ApolloDriver } from '../../lib/index.js'; +import { AppModule as CodeFirstModule } from '../code-first-duplicate-resolvers/app.module.js'; +import { AppModule as SchemaFirstModule } from '../duplicate-resolvers/app.module.js'; +import { expectSingleResult } from '../utils/assertion-utils.js'; describe('Duplicate resolvers', () => { let app: INestApplication; - let apolloClient: ApolloServerBase; + let apolloClient: ApolloServer; describe('code-first', () => { beforeEach(async () => { diff --git a/packages/apollo/tests/e2e/enum-union-directives.spec.ts b/packages/apollo/tests/e2e/enum-union-directives.spec.ts index 5a5b57ec5..b25fccf76 100644 --- a/packages/apollo/tests/e2e/enum-union-directives.spec.ts +++ b/packages/apollo/tests/e2e/enum-union-directives.spec.ts @@ -18,7 +18,7 @@ import { gql } from 'graphql-tag'; import { ApolloFederationDriver, ApolloFederationDriverConfig, -} from '../../lib'; +} from '../../lib/index.js'; enum Visibility { PUBLIC = 'PUBLIC', diff --git a/packages/apollo/tests/e2e/federation-auto-schema-file.spec.ts b/packages/apollo/tests/e2e/federation-auto-schema-file.spec.ts new file mode 100644 index 000000000..967a28a05 --- /dev/null +++ b/packages/apollo/tests/e2e/federation-auto-schema-file.spec.ts @@ -0,0 +1,45 @@ +import { INestApplication } from '@nestjs/common'; +import { FileSystemHelper } from '@nestjs/graphql/schema-builder/helpers/file-system.helper.js'; +import { Test } from '@nestjs/testing'; +import { FederationAutoSchemaFileModule } from '../code-first-federation/federation-auto-schema-file.module.js'; + +describe('Federation - autoSchemaFile generation (issue #3722)', () => { + let app: INestApplication; + + const writeFileMock = vi.fn().mockImplementation(() => Promise.resolve()); + + beforeEach(async () => { + writeFileMock.mockClear(); + + const module = await Test.createTestingModule({ + imports: [FederationAutoSchemaFileModule], + }) + .overrideProvider(FileSystemHelper) + .useValue({ writeFile: writeFileMock }) + .compile(); + + app = module.createNestApplication(); + await app.init(); + }); + + it('should write the federated SDL file once with the configured filename', () => { + expect(writeFileMock).toHaveBeenCalledTimes(1); + expect(writeFileMock.mock.calls[0][0]).toBe('federation-schema.graphql'); + }); + + it('should preserve federation directives (@key, @external, @extends) in the generated SDL', () => { + const fileContent: string = writeFileMock.mock.calls[0][1]; + + // Object types decorated with @Directive('@key(...)') must keep the directive + // when emitted via autoSchemaFile. Before the fix, graphql's printSchema stripped + // these federation directives entirely. + expect(fileContent).toMatch(/type\s+Post[^{]*@key\(fields:\s*"id"\)/); + expect(fileContent).toMatch(/type\s+User[^{]*@key\(fields:\s*"id"\)/); + expect(fileContent).toMatch(/type\s+User[^{]*@extends/); + expect(fileContent).toMatch(/@external/); + }); + + afterEach(async () => { + await app.close(); + }); +}); diff --git a/packages/apollo/tests/e2e/federation-timestamp-scalar.spec.ts b/packages/apollo/tests/e2e/federation-timestamp-scalar.spec.ts index f7a78059d..5f8abc924 100644 --- a/packages/apollo/tests/e2e/federation-timestamp-scalar.spec.ts +++ b/packages/apollo/tests/e2e/federation-timestamp-scalar.spec.ts @@ -15,7 +15,7 @@ import { gql } from 'graphql-tag'; import { ApolloFederationDriver, ApolloFederationDriverConfig, -} from '../../lib'; +} from '../../lib/index.js'; @ObjectType() class Reading { diff --git a/packages/apollo/tests/e2e/generated-definitions.spec.ts b/packages/apollo/tests/e2e/generated-definitions.spec.ts index 22f9701ab..9a74384f0 100644 --- a/packages/apollo/tests/e2e/generated-definitions.spec.ts +++ b/packages/apollo/tests/e2e/generated-definitions.spec.ts @@ -7,12 +7,12 @@ import { Test } from '@nestjs/testing'; import * as fs from 'fs'; import * as path from 'path'; import * as util from 'util'; -import { ApplicationModule } from '../code-first/app.module'; +import { ApplicationModule } from '../code-first/app.module.js'; const readFile = util.promisify(fs.readFile); const generatedDefinitions = (fileName) => - path.join(__dirname, '..', 'generated-definitions', fileName); + path.join(import.meta.dirname, '..', 'generated-definitions', fileName); describe('Generated Definitions', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/global-prefix-fastify.spec.ts b/packages/apollo/tests/e2e/global-prefix-fastify.spec.ts index 6925b6d64..3f0066f9b 100644 --- a/packages/apollo/tests/e2e/global-prefix-fastify.spec.ts +++ b/packages/apollo/tests/e2e/global-prefix-fastify.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { GlobalPrefixModule } from '../graphql/global-prefix.module'; +import { GlobalPrefixModule } from '../graphql/global-prefix.module.js'; describe('GraphQL Fastify (global prefix)', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/global-prefix.spec.ts b/packages/apollo/tests/e2e/global-prefix.spec.ts index 5c881a827..a6eb84b56 100644 --- a/packages/apollo/tests/e2e/global-prefix.spec.ts +++ b/packages/apollo/tests/e2e/global-prefix.spec.ts @@ -3,9 +3,9 @@ import { NestFactory } from '@nestjs/core'; import { ExpressAdapter } from '@nestjs/platform-express'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { GlobalPrefixAsyncOptionsClassModule } from '../graphql/global-prefix-async-options-class.module'; -import { GlobalPrefixAsyncOptionsModule } from '../graphql/global-prefix-async-options.module'; -import { GlobalPrefixModule } from '../graphql/global-prefix.module'; +import { GlobalPrefixAsyncOptionsClassModule } from '../graphql/global-prefix-async-options-class.module.js'; +import { GlobalPrefixAsyncOptionsModule } from '../graphql/global-prefix-async-options.module.js'; +import { GlobalPrefixModule } from '../graphql/global-prefix.module.js'; describe('GraphQL (global prefix)', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphiql-playground.spec.ts b/packages/apollo/tests/e2e/graphiql-playground.spec.ts index 51f7f374a..b281e009c 100644 --- a/packages/apollo/tests/e2e/graphiql-playground.spec.ts +++ b/packages/apollo/tests/e2e/graphiql-playground.spec.ts @@ -1,11 +1,57 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { GraphiQLPlaygroundModule } from '../graphql/graphiql-playground.module'; +import { GraphiQLPlaygroundModule } from '../graphql/graphiql-playground.module.js'; describe('GraphiQL Playground', () => { let app: INestApplication; + describe('when no landing page option is configured', () => { + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [GraphiQLPlaygroundModule.withDefaults()], + }).compile(); + + app = module.createNestApplication(); + await app.init(); + }); + + it(`should render GraphiQL Playground by default`, async () => { + const res = await request(app.getHttpServer()) + .get('/graphql') + .set('Accept', 'text/html') + .expect(200); + expect(res.text).toContain('GraphiQL'); + }); + + afterEach(async () => { + await app.close(); + }); + }); + + describe('when "playground" is true', () => { + beforeEach(async () => { + const module = await Test.createTestingModule({ + imports: [GraphiQLPlaygroundModule.withPlaygroundEnabled()], + }).compile(); + + app = module.createNestApplication(); + await app.init(); + }); + + it(`should render GraphiQL Playground as a migration alias`, async () => { + const res = await request(app.getHttpServer()) + .get('/graphql') + .set('Accept', 'text/html') + .expect(200); + expect(res.text).toContain('GraphiQL'); + }); + + afterEach(async () => { + await app.close(); + }); + }); + describe('when "graphiql" is true', () => { beforeEach(async () => { const module = await Test.createTestingModule({ diff --git a/packages/apollo/tests/e2e/graphql-async-class.spec.ts b/packages/apollo/tests/e2e/graphql-async-class.spec.ts index c172181a2..71abed161 100644 --- a/packages/apollo/tests/e2e/graphql-async-class.spec.ts +++ b/packages/apollo/tests/e2e/graphql-async-class.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import request from 'supertest'; -import { AsyncClassApplicationModule } from '../graphql/async-options-class.module'; +import { AsyncClassApplicationModule } from '../graphql/async-options-class.module.js'; describe('GraphQL (async class)', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-async-existing.spec.ts b/packages/apollo/tests/e2e/graphql-async-existing.spec.ts index 977aa30b4..6c509126d 100644 --- a/packages/apollo/tests/e2e/graphql-async-existing.spec.ts +++ b/packages/apollo/tests/e2e/graphql-async-existing.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import request from 'supertest'; -import { AsyncExistingApplicationModule } from '../graphql/async-options-existing.module'; +import { AsyncExistingApplicationModule } from '../graphql/async-options-existing.module.js'; describe('GraphQL (async existing)', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-async.spec.ts b/packages/apollo/tests/e2e/graphql-async.spec.ts index 40bf2e60c..61ec8f776 100644 --- a/packages/apollo/tests/e2e/graphql-async.spec.ts +++ b/packages/apollo/tests/e2e/graphql-async.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import request from 'supertest'; -import { AsyncApplicationModule } from '../graphql/async-options.module'; +import { AsyncApplicationModule } from '../graphql/async-options.module.js'; describe('GraphQL (async configuration)', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-fastify.spec.ts b/packages/apollo/tests/e2e/graphql-fastify.spec.ts index 0493ba15c..189ae9a81 100644 --- a/packages/apollo/tests/e2e/graphql-fastify.spec.ts +++ b/packages/apollo/tests/e2e/graphql-fastify.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApplicationModule } from '../graphql/app.module'; +import { ApplicationModule } from '../graphql/app.module.js'; import { FastifyAdapter } from '@nestjs/platform-fastify'; describe('GraphQL with fastify', () => { diff --git a/packages/apollo/tests/e2e/graphql-federation-async-class.spec.ts b/packages/apollo/tests/e2e/graphql-federation-async-class.spec.ts index 57c364f1f..6e5a0ff01 100644 --- a/packages/apollo/tests/e2e/graphql-federation-async-class.spec.ts +++ b/packages/apollo/tests/e2e/graphql-federation-async-class.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/users-service/federation-users.async-class.module'; +import { AppModule } from '../graphql-federation/users-service/federation-users.async-class.module.js'; describe('GraphQL Federation async-class', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-federation-async-existing.spec.ts b/packages/apollo/tests/e2e/graphql-federation-async-existing.spec.ts index 3204d5208..9b7421df2 100644 --- a/packages/apollo/tests/e2e/graphql-federation-async-existing.spec.ts +++ b/packages/apollo/tests/e2e/graphql-federation-async-existing.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/users-service/federation-users.async-existing.module'; +import { AppModule } from '../graphql-federation/users-service/federation-users.async-existing.module.js'; describe('GraphQL Federation Async', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-federation-async.spec.ts b/packages/apollo/tests/e2e/graphql-federation-async.spec.ts index 3b4bb671c..8521b4fd8 100644 --- a/packages/apollo/tests/e2e/graphql-federation-async.spec.ts +++ b/packages/apollo/tests/e2e/graphql-federation-async.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/users-service/federation-users.async.module'; +import { AppModule } from '../graphql-federation/users-service/federation-users.async.module.js'; describe('GraphQL Federation Async', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-federation-fastify.spec.ts b/packages/apollo/tests/e2e/graphql-federation-fastify.spec.ts index c22213e73..32fdfa323 100644 --- a/packages/apollo/tests/e2e/graphql-federation-fastify.spec.ts +++ b/packages/apollo/tests/e2e/graphql-federation-fastify.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/posts-service/federation-posts.module'; +import { AppModule } from '../graphql-federation/posts-service/federation-posts.module.js'; import { FastifyAdapter } from '@nestjs/platform-fastify'; describe('GraphQL federation with fastify', () => { diff --git a/packages/apollo/tests/e2e/graphql-federation-schema-host.spec.ts b/packages/apollo/tests/e2e/graphql-federation-schema-host.spec.ts index 97b05958a..d1b98f1c4 100644 --- a/packages/apollo/tests/e2e/graphql-federation-schema-host.spec.ts +++ b/packages/apollo/tests/e2e/graphql-federation-schema-host.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { GraphQLSchemaHost } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { GraphQLSchema } from 'graphql'; -import { AppModule } from '../graphql-federation/posts-service/federation-posts.module'; +import { AppModule } from '../graphql-federation/posts-service/federation-posts.module.js'; describe('GraphQL federation GraphQLSchemaHost using', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-federation.spec.ts b/packages/apollo/tests/e2e/graphql-federation.spec.ts index 70f282cbc..c9fdd334f 100644 --- a/packages/apollo/tests/e2e/graphql-federation.spec.ts +++ b/packages/apollo/tests/e2e/graphql-federation.spec.ts @@ -1,8 +1,8 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; describe('GraphQL Federation', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-gateway-async-class.spec.ts b/packages/apollo/tests/e2e/graphql-gateway-async-class.spec.ts index 50f34f475..2d9ef91fb 100644 --- a/packages/apollo/tests/e2e/graphql-gateway-async-class.spec.ts +++ b/packages/apollo/tests/e2e/graphql-gateway-async-class.spec.ts @@ -5,11 +5,11 @@ import request from 'supertest'; import { ApolloGatewayDriverConfig, ApolloGatewayDriverConfigFactory, -} from '../../lib'; -import { ApolloGatewayDriver } from '../../lib/drivers'; -import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +} from '../../lib/index.js'; +import { ApolloGatewayDriver } from '../../lib/drivers/index.js'; +import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; let usersPort: number; let postsPort: number; diff --git a/packages/apollo/tests/e2e/graphql-gateway-async-existing.spec.ts b/packages/apollo/tests/e2e/graphql-gateway-async-existing.spec.ts index 0bff077c4..5afc78437 100644 --- a/packages/apollo/tests/e2e/graphql-gateway-async-existing.spec.ts +++ b/packages/apollo/tests/e2e/graphql-gateway-async-existing.spec.ts @@ -5,11 +5,11 @@ import request from 'supertest'; import { ApolloGatewayDriverConfig, ApolloGatewayDriverConfigFactory, -} from '../../lib'; -import { ApolloGatewayDriver } from '../../lib/drivers'; -import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +} from '../../lib/index.js'; +import { ApolloGatewayDriver } from '../../lib/drivers/index.js'; +import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; let usersPort: number; let postsPort: number; @@ -65,7 +65,7 @@ describe('GraphQL gateway async-existing', () => { gatewayApp = gatewayModule.createNestApplication(); await gatewayApp.init(); - }); + }, 20000); it(`should run lookup across boundaries`, () => { return request(gatewayApp.getHttpServer()) diff --git a/packages/apollo/tests/e2e/graphql-gateway-async.spec.ts b/packages/apollo/tests/e2e/graphql-gateway-async.spec.ts index 7a5bce77d..383890eb1 100644 --- a/packages/apollo/tests/e2e/graphql-gateway-async.spec.ts +++ b/packages/apollo/tests/e2e/graphql-gateway-async.spec.ts @@ -2,11 +2,11 @@ import { INestApplication } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApolloGatewayDriver } from '../../lib/drivers'; -import { ApolloGatewayDriverConfig } from '../../lib/interfaces'; -import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { ApolloGatewayDriver } from '../../lib/drivers/index.js'; +import { ApolloGatewayDriverConfig } from '../../lib/interfaces/index.js'; +import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; describe('GraphQL Gateway async', () => { let postsApp: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-gateway-fastify.spec.ts b/packages/apollo/tests/e2e/graphql-gateway-fastify.spec.ts index ad4789acd..150f1502f 100644 --- a/packages/apollo/tests/e2e/graphql-gateway-fastify.spec.ts +++ b/packages/apollo/tests/e2e/graphql-gateway-fastify.spec.ts @@ -3,10 +3,10 @@ import { GraphQLModule } from '@nestjs/graphql'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApolloGatewayDriver } from '../../lib/drivers'; -import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { ApolloGatewayDriver } from '../../lib/drivers/index.js'; +import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; describe('GraphQL Gateway with fastify', () => { let postsApp: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-gateway-transform-schema.spec.ts b/packages/apollo/tests/e2e/graphql-gateway-transform-schema.spec.ts index ddfb603b5..f69bebfed 100644 --- a/packages/apollo/tests/e2e/graphql-gateway-transform-schema.spec.ts +++ b/packages/apollo/tests/e2e/graphql-gateway-transform-schema.spec.ts @@ -3,10 +3,10 @@ import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { GraphQLSchema } from 'graphql'; import request from 'supertest'; -import { ApolloGatewayDriver } from '../../lib/drivers'; -import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { ApolloGatewayDriver } from '../../lib/drivers/index.js'; +import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; describe('GraphQL Gateway transformSchema', () => { let postsApp: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-gateway.spec.ts b/packages/apollo/tests/e2e/graphql-gateway.spec.ts index c93daa539..752d384b0 100644 --- a/packages/apollo/tests/e2e/graphql-gateway.spec.ts +++ b/packages/apollo/tests/e2e/graphql-gateway.spec.ts @@ -2,10 +2,10 @@ import { INestApplication } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApolloGatewayDriver } from '../../lib/drivers'; -import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { ApolloGatewayDriver } from '../../lib/drivers/index.js'; +import { getSupergraphSdl } from '../graphql-federation/gateway/supergraph-sdl.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; describe('GraphQL Gateway', () => { let postsApp: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-request-scoped.spec.ts b/packages/apollo/tests/e2e/graphql-request-scoped.spec.ts index 1cb0dd1a4..df2245261 100644 --- a/packages/apollo/tests/e2e/graphql-request-scoped.spec.ts +++ b/packages/apollo/tests/e2e/graphql-request-scoped.spec.ts @@ -3,9 +3,9 @@ import { GraphQLModule } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { join } from 'path'; import request from 'supertest'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsRequestScopedService } from '../graphql/cats/cats-request-scoped.service'; -import { CatsModule } from '../graphql/cats/cats.module'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsRequestScopedService } from '../graphql/cats/cats-request-scoped.service.js'; +import { CatsModule } from '../graphql/cats/cats.module.js'; describe('GraphQL request scoped', () => { let app: INestApplication; @@ -16,7 +16,9 @@ describe('GraphQL request scoped', () => { CatsModule.enableRequestScope(), GraphQLModule.forRoot({ driver: ApolloDriver, - typePaths: [join(__dirname, '..', 'graphql', '**', '*.graphql')], + typePaths: [ + join(import.meta.dirname, '..', 'graphql', '**', '*.graphql'), + ], }), ], }).compile(); diff --git a/packages/apollo/tests/e2e/graphql-sort-auto-schema.spec.ts b/packages/apollo/tests/e2e/graphql-sort-auto-schema.spec.ts index 26dc31de3..2137edc15 100644 --- a/packages/apollo/tests/e2e/graphql-sort-auto-schema.spec.ts +++ b/packages/apollo/tests/e2e/graphql-sort-auto-schema.spec.ts @@ -3,17 +3,18 @@ import { GraphQLSchemaHost } from '@nestjs/graphql'; import { GRAPHQL_SDL_FILE_HEADER, GRAPHQL_SDL_FILE_END, -} from '@nestjs/graphql/graphql.constants'; -import { FileSystemHelper } from '@nestjs/graphql/schema-builder/helpers/file-system.helper'; +} from '@nestjs/graphql/graphql.constants.js'; +import { FileSystemHelper } from '@nestjs/graphql/schema-builder/helpers/file-system.helper.js'; import { Test } from '@nestjs/testing'; import { GraphQLSchema, printSchema } from 'graphql'; -import { SortAutoSchemaModule } from '../graphql/sort-auto-schema.module'; -import { sortedPrintedSchemaSnapshot } from '../utils/printed-schema.snapshot'; +import { type Mock, vi } from 'vitest'; +import { SortAutoSchemaModule } from '../graphql/sort-auto-schema.module.js'; +import { sortedPrintedSchemaSnapshot } from '../utils/printed-schema.snapshot.js'; describe('GraphQL sort autoSchemaFile and new line at the end of the schema', () => { let app: INestApplication; let schema: GraphQLSchema; - let writeFileMock: vi.Mock; + let writeFileMock: Mock; beforeEach(async () => { writeFileMock = vi.fn().mockImplementation(() => Promise.resolve()); diff --git a/packages/apollo/tests/e2e/graphql-sort-schema.spec.ts b/packages/apollo/tests/e2e/graphql-sort-schema.spec.ts index 2eef2eb28..682a0dee7 100644 --- a/packages/apollo/tests/e2e/graphql-sort-schema.spec.ts +++ b/packages/apollo/tests/e2e/graphql-sort-schema.spec.ts @@ -1,9 +1,9 @@ import { INestApplication } from '@nestjs/common'; import { GraphQLSchemaHost } from '@nestjs/graphql'; -import { GRAPHQL_SDL_FILE_HEADER } from '@nestjs/graphql/graphql.constants'; +import { GRAPHQL_SDL_FILE_HEADER } from '@nestjs/graphql/graphql.constants.js'; import { Test } from '@nestjs/testing'; import { GraphQLSchema, printSchema } from 'graphql'; -import { SortSchemaModule } from '../graphql/sort-schema.module'; +import { SortSchemaModule } from '../graphql/sort-schema.module.js'; describe('GraphQL sort schema', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql-transform-auto-schema-file.spec.ts b/packages/apollo/tests/e2e/graphql-transform-auto-schema-file.spec.ts index b07597d14..b0db2b359 100644 --- a/packages/apollo/tests/e2e/graphql-transform-auto-schema-file.spec.ts +++ b/packages/apollo/tests/e2e/graphql-transform-auto-schema-file.spec.ts @@ -1,8 +1,8 @@ import { INestApplication } from '@nestjs/common'; -import { FileSystemHelper } from '@nestjs/graphql/schema-builder/helpers/file-system.helper'; +import { FileSystemHelper } from '@nestjs/graphql/schema-builder/helpers/file-system.helper.js'; import { Test } from '@nestjs/testing'; -import { TransformAutoSchemaFileModule } from '../graphql/transform-auto-schema-file.module'; -import { sortedPrintedSchemaSnapshot } from '../utils/printed-schema.snapshot'; +import { TransformAutoSchemaFileModule } from '../graphql/transform-auto-schema-file.module.js'; +import { sortedPrintedSchemaSnapshot } from '../utils/printed-schema.snapshot.js'; describe('GraphQL with transformAutoSchemaFile', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/graphql.spec.ts b/packages/apollo/tests/e2e/graphql.spec.ts index e764c35cf..1caa4df35 100644 --- a/packages/apollo/tests/e2e/graphql.spec.ts +++ b/packages/apollo/tests/e2e/graphql.spec.ts @@ -1,9 +1,9 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApplicationModule } from '../graphql/app.module'; +import { ApplicationModule } from '../graphql/app.module.js'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloFederationDriver } from '../../lib'; +import { ApolloFederationDriver } from '../../lib/index.js'; describe('GraphQL', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/guards-filters.spec.ts b/packages/apollo/tests/e2e/guards-filters.spec.ts index a6278eea0..288a47627 100644 --- a/packages/apollo/tests/e2e/guards-filters.spec.ts +++ b/packages/apollo/tests/e2e/guards-filters.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApplicationModule } from '../code-first/app.module'; +import { ApplicationModule } from '../code-first/app.module.js'; describe('GraphQL - Guards', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/issue-2940-http-error-status.spec.ts b/packages/apollo/tests/e2e/issue-2940-http-error-status.spec.ts index 9bce82e86..2a8831117 100644 --- a/packages/apollo/tests/e2e/issue-2940-http-error-status.spec.ts +++ b/packages/apollo/tests/e2e/issue-2940-http-error-status.spec.ts @@ -3,7 +3,7 @@ import { GraphQLModule, Query, Resolver } from '@nestjs/graphql'; import { Test } from '@nestjs/testing'; import { GraphQLError } from 'graphql'; import request from 'supertest'; -import { ApolloDriver, ApolloDriverConfig } from '../../lib'; +import { ApolloDriver, ApolloDriverConfig } from '../../lib/index.js'; @Resolver() class IssueResolver { diff --git a/packages/apollo/tests/e2e/pipes.spec.ts b/packages/apollo/tests/e2e/pipes.spec.ts index 744c09460..529257766 100644 --- a/packages/apollo/tests/e2e/pipes.spec.ts +++ b/packages/apollo/tests/e2e/pipes.spec.ts @@ -1,7 +1,7 @@ import { INestApplication, ValidationPipe } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApplicationModule } from '../code-first/app.module'; +import { ApplicationModule } from '../code-first/app.module.js'; describe('GraphQL - Pipes', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/request-scoped.spec.ts b/packages/apollo/tests/e2e/request-scoped.spec.ts index ea3463dea..5268bd2b3 100644 --- a/packages/apollo/tests/e2e/request-scoped.spec.ts +++ b/packages/apollo/tests/e2e/request-scoped.spec.ts @@ -1,11 +1,11 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { Guard } from '../graphql/hello/guards/request-scoped.guard'; -import { HelloModule } from '../graphql/hello/hello.module'; -import { HelloResolver } from '../graphql/hello/hello.resolver'; -import { Interceptor } from '../graphql/hello/interceptors/logging.interceptor'; -import { UsersService } from '../graphql/hello/users/users.service'; +import { Guard } from '../graphql/hello/guards/request-scoped.guard.js'; +import { HelloModule } from '../graphql/hello/hello.module.js'; +import { HelloResolver } from '../graphql/hello/hello.resolver.js'; +import { Interceptor } from '../graphql/hello/interceptors/logging.interceptor.js'; +import { UsersService } from '../graphql/hello/users/users.service.js'; class Meta { static COUNTER = 0; diff --git a/packages/apollo/tests/e2e/resolver-registration-methods.spec.ts b/packages/apollo/tests/e2e/resolver-registration-methods.spec.ts index fc0abee90..991286564 100644 --- a/packages/apollo/tests/e2e/resolver-registration-methods.spec.ts +++ b/packages/apollo/tests/e2e/resolver-registration-methods.spec.ts @@ -1,8 +1,8 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApplicationModule } from '../code-first/app.module'; -import { CatsModule } from '../code-first/cats/cats.module'; +import { ApplicationModule } from '../code-first/app.module.js'; +import { CatsModule } from '../code-first/cats/cats.module.js'; describe('GraphQL - Resolver registration methods', () => { let app: INestApplication; diff --git a/packages/apollo/tests/e2e/serialized-graph.spec.ts b/packages/apollo/tests/e2e/serialized-graph.spec.ts index 83110f4e4..9d8975282 100644 --- a/packages/apollo/tests/e2e/serialized-graph.spec.ts +++ b/packages/apollo/tests/e2e/serialized-graph.spec.ts @@ -1,8 +1,8 @@ import { ValidationPipe } from '@nestjs/common'; -import { Injector } from '@nestjs/core/injector/injector'; -import { SerializedGraph } from '@nestjs/core/inspector/serialized-graph'; +import { Injector } from '@nestjs/core/injector/injector.js'; +import { SerializedGraph } from '@nestjs/core/inspector/serialized-graph.js'; import { Test, TestingModule } from '@nestjs/testing'; -import { ApplicationModule } from '../code-first/app.module'; +import { ApplicationModule } from '../code-first/app.module.js'; describe('Serialized graph', () => { let testingModule: TestingModule; diff --git a/packages/apollo/tests/e2e/subscription-global-prefix.spec.ts b/packages/apollo/tests/e2e/subscription-global-prefix.spec.ts new file mode 100644 index 000000000..16a288603 --- /dev/null +++ b/packages/apollo/tests/e2e/subscription-global-prefix.spec.ts @@ -0,0 +1,90 @@ +import { ApplicationConfig, HttpAdapterHost } from '@nestjs/core'; +import { GraphQLFactory } from '@nestjs/graphql'; +import { Test } from '@nestjs/testing'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { ApolloDriverConfig } from '../../lib/interfaces/index.js'; + +describe('Subscription path with global prefix', () => { + async function createDriver(prefix: string) { + const applicationConfig = new ApplicationConfig(); + applicationConfig.setGlobalPrefix(prefix); + + const moduleRef = await Test.createTestingModule({ + providers: [ + ApolloDriver, + { provide: ApplicationConfig, useValue: applicationConfig }, + { provide: HttpAdapterHost, useValue: {} }, + { provide: GraphQLFactory, useValue: {} }, + ], + }).compile(); + + return moduleRef.get(ApolloDriver); + } + + it('prefixes the http endpoint when useGlobalPrefix is true', async () => { + const driver = await createDriver('api'); + const merged = await driver.mergeDefaultOptions({ + useGlobalPrefix: true, + } as ApolloDriverConfig); + + expect(merged.path).toBe('/api/graphql'); + }); + + it('prefixes a custom subscription path when useGlobalPrefix is true', async () => { + const driver = await createDriver('api'); + const merged = await driver.mergeDefaultOptions({ + useGlobalPrefix: true, + subscriptions: { + 'graphql-ws': { path: '/graphql' }, + 'subscriptions-transport-ws': { path: '/graphql' }, + }, + } as ApolloDriverConfig); + + expect(merged.subscriptions?.['graphql-ws']).toMatchObject({ + path: '/api/graphql', + }); + expect(merged.subscriptions?.['subscriptions-transport-ws']).toMatchObject({ + path: '/api/graphql', + }); + }); + + it('prefixes a non-default subscription path when useGlobalPrefix is true', async () => { + const driver = await createDriver('api'); + const merged = await driver.mergeDefaultOptions({ + useGlobalPrefix: true, + subscriptions: { + 'graphql-ws': { path: '/subscriptions' }, + }, + } as ApolloDriverConfig); + + expect(merged.subscriptions?.['graphql-ws']).toMatchObject({ + path: '/api/subscriptions', + }); + }); + + it('leaves subscription path untouched when useGlobalPrefix is false', async () => { + const driver = await createDriver('api'); + const merged = await driver.mergeDefaultOptions({ + useGlobalPrefix: false, + subscriptions: { + 'graphql-ws': { path: '/graphql' }, + }, + } as ApolloDriverConfig); + + expect(merged.subscriptions?.['graphql-ws']).toMatchObject({ + path: '/graphql', + }); + }); + + it('does not touch boolean subscription protocol shorthand', async () => { + const driver = await createDriver('api'); + const merged = await driver.mergeDefaultOptions({ + useGlobalPrefix: true, + subscriptions: { + 'graphql-ws': true, + }, + } as ApolloDriverConfig); + + expect(merged.subscriptions?.['graphql-ws']).toBe(true); + }); +}); diff --git a/packages/apollo/tests/graphql-federation/gateway/config/config.module.ts b/packages/apollo/tests/graphql-federation/gateway/config/config.module.ts index eaa505c84..bf41826bb 100644 --- a/packages/apollo/tests/graphql-federation/gateway/config/config.module.ts +++ b/packages/apollo/tests/graphql-federation/gateway/config/config.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigService } from './config.service'; +import { ConfigService } from './config.service.js'; @Module({ providers: [ConfigService], diff --git a/packages/apollo/tests/graphql-federation/gateway/config/config.service.ts b/packages/apollo/tests/graphql-federation/gateway/config/config.service.ts index 10663379c..537055968 100644 --- a/packages/apollo/tests/graphql-federation/gateway/config/config.service.ts +++ b/packages/apollo/tests/graphql-federation/gateway/config/config.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@nestjs/common'; import { ApolloGatewayDriverConfig, ApolloGatewayDriverConfigFactory, -} from '../../../../lib'; -import { supergraphSdl } from '../supergraph-sdl'; +} from '../../../../lib/index.js'; +import { supergraphSdl } from '../supergraph-sdl.js'; @Injectable() export class ConfigService implements ApolloGatewayDriverConfigFactory { diff --git a/packages/apollo/tests/graphql-federation/gateway/gateway-async-class.module.ts b/packages/apollo/tests/graphql-federation/gateway/gateway-async-class.module.ts index 945a1483e..90daf1d1c 100644 --- a/packages/apollo/tests/graphql-federation/gateway/gateway-async-class.module.ts +++ b/packages/apollo/tests/graphql-federation/gateway/gateway-async-class.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloGatewayDriverConfig } from '../../../lib'; -import { ApolloGatewayDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; +import { ApolloGatewayDriverConfig } from '../../../lib/index.js'; +import { ApolloGatewayDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/gateway/gateway-async-existing.module.ts b/packages/apollo/tests/graphql-federation/gateway/gateway-async-existing.module.ts index 056498dbe..e3752277e 100644 --- a/packages/apollo/tests/graphql-federation/gateway/gateway-async-existing.module.ts +++ b/packages/apollo/tests/graphql-federation/gateway/gateway-async-existing.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloGatewayDriverConfig } from '../../../lib'; -import { ApolloGatewayDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; +import { ApolloGatewayDriverConfig } from '../../../lib/index.js'; +import { ApolloGatewayDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/gateway/gateway-async.module.ts b/packages/apollo/tests/graphql-federation/gateway/gateway-async.module.ts index 6fad88ff1..e19865a47 100644 --- a/packages/apollo/tests/graphql-federation/gateway/gateway-async.module.ts +++ b/packages/apollo/tests/graphql-federation/gateway/gateway-async.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloGatewayDriver } from '../../../lib/drivers'; -import { ApolloGatewayDriverConfig } from '../../../lib/interfaces'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; +import { ApolloGatewayDriver } from '../../../lib/drivers/index.js'; +import { ApolloGatewayDriverConfig } from '../../../lib/interfaces/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/gateway/gateway.module.ts b/packages/apollo/tests/graphql-federation/gateway/gateway.module.ts index a1cfb5d98..37fc6d6fa 100644 --- a/packages/apollo/tests/graphql-federation/gateway/gateway.module.ts +++ b/packages/apollo/tests/graphql-federation/gateway/gateway.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloGatewayDriver } from '../../../lib/drivers'; -import { supergraphSdl } from './supergraph-sdl'; +import { ApolloGatewayDriver } from '../../../lib/drivers/index.js'; +import { supergraphSdl } from './supergraph-sdl.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/posts-service/federation-posts.module.ts b/packages/apollo/tests/graphql-federation/posts-service/federation-posts.module.ts index 8a6f11c40..5d5989088 100644 --- a/packages/apollo/tests/graphql-federation/posts-service/federation-posts.module.ts +++ b/packages/apollo/tests/graphql-federation/posts-service/federation-posts.module.ts @@ -2,16 +2,16 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { ApolloServerPluginInlineTraceDisabled } from '@apollo/server/plugin/disabled'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../../lib'; -import { ApolloFederationDriver } from '../../../lib/drivers'; -import { PostsModule } from './posts/posts.module'; -import { upperDirectiveTransformer } from './posts/upper.directive'; +import { ApolloDriverConfig } from '../../../lib/index.js'; +import { ApolloFederationDriver } from '../../../lib/drivers/index.js'; +import { PostsModule } from './posts/posts.module.js'; +import { upperDirectiveTransformer } from './posts/upper.directive.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: ApolloFederationDriver, - typePaths: [join(__dirname, '**/*.graphql')], + typePaths: [join(import.meta.dirname, '**/*.graphql')], transformSchema: (schema) => upperDirectiveTransformer(schema, 'upper'), plugins: [ApolloServerPluginInlineTraceDisabled()], }), diff --git a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.interfaces.ts b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.interfaces.ts index e740fe6e1..951ddabcb 100644 --- a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.interfaces.ts +++ b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.interfaces.ts @@ -1,4 +1,4 @@ -import { PostType } from './post-type.enum'; +import { PostType } from './post-type.enum.js'; export interface Post { id: string; diff --git a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.module.ts b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.module.ts index 3747ab33a..015598d1e 100644 --- a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.module.ts +++ b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; -import { PostsResolvers } from './posts.resolvers'; -import { UsersResolvers } from './users.resolvers'; -import { PostsService } from './posts.service'; -import { DateScalar } from './date.scalar'; +import { PostsResolvers } from './posts.resolvers.js'; +import { UsersResolvers } from './users.resolvers.js'; +import { PostsService } from './posts.service.js'; +import { DateScalar } from './date.scalar.js'; @Module({ providers: [PostsResolvers, PostsService, UsersResolvers, DateScalar], diff --git a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.resolvers.ts b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.resolvers.ts index ef3a5fdd7..cca6eb826 100644 --- a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.resolvers.ts +++ b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.resolvers.ts @@ -6,9 +6,9 @@ import { ResolveField, Resolver, } from '@nestjs/graphql'; -import { PostType } from './post-type.enum'; -import { Post } from './posts.interfaces'; -import { PostsService } from './posts.service'; +import { PostType } from './post-type.enum.js'; +import { Post } from './posts.interfaces.js'; +import { PostsService } from './posts.service.js'; @Resolver('Post') export class PostsResolvers { constructor(private readonly postsService: PostsService) {} diff --git a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.service.ts b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.service.ts index 47b3d699f..c1b15e579 100644 --- a/packages/apollo/tests/graphql-federation/posts-service/posts/posts.service.ts +++ b/packages/apollo/tests/graphql-federation/posts-service/posts/posts.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { Post } from './posts.interfaces'; -import { PostType } from './post-type.enum'; +import { Post } from './posts.interfaces.js'; +import { PostType } from './post-type.enum.js'; @Injectable() export class PostsService { diff --git a/packages/apollo/tests/graphql-federation/posts-service/posts/users.resolvers.ts b/packages/apollo/tests/graphql-federation/posts-service/posts/users.resolvers.ts index 31e3c2990..cf3a5024d 100644 --- a/packages/apollo/tests/graphql-federation/posts-service/posts/users.resolvers.ts +++ b/packages/apollo/tests/graphql-federation/posts-service/posts/users.resolvers.ts @@ -1,5 +1,5 @@ import { ResolveField, Resolver } from '@nestjs/graphql'; -import { PostsService } from './posts.service'; +import { PostsService } from './posts.service.js'; @Resolver('User') export class UsersResolvers { constructor(private readonly postsService: PostsService) {} diff --git a/packages/apollo/tests/graphql-federation/users-service/config/config.module.ts b/packages/apollo/tests/graphql-federation/users-service/config/config.module.ts index eaa505c84..bf41826bb 100644 --- a/packages/apollo/tests/graphql-federation/users-service/config/config.module.ts +++ b/packages/apollo/tests/graphql-federation/users-service/config/config.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigService } from './config.service'; +import { ConfigService } from './config.service.js'; @Module({ providers: [ConfigService], diff --git a/packages/apollo/tests/graphql-federation/users-service/config/config.service.ts b/packages/apollo/tests/graphql-federation/users-service/config/config.service.ts index 62227c5ec..0351d5883 100644 --- a/packages/apollo/tests/graphql-federation/users-service/config/config.service.ts +++ b/packages/apollo/tests/graphql-federation/users-service/config/config.service.ts @@ -1,13 +1,16 @@ import { Injectable } from '@nestjs/common'; import { ApolloServerPluginInlineTraceDisabled } from '@apollo/server/plugin/disabled'; import { join } from 'path'; -import { ApolloDriverConfig, ApolloDriverConfigFactory } from '../../../../lib'; +import { + ApolloDriverConfig, + ApolloDriverConfigFactory, +} from '../../../../lib/index.js'; @Injectable() export class ConfigService implements ApolloDriverConfigFactory { public createGqlOptions(): Partial { return { - typePaths: [join(__dirname, '../**/*.graphql')], + typePaths: [join(import.meta.dirname, '../**/*.graphql')], plugins: [ApolloServerPluginInlineTraceDisabled()], }; } diff --git a/packages/apollo/tests/graphql-federation/users-service/federation-users.async-class.module.ts b/packages/apollo/tests/graphql-federation/users-service/federation-users.async-class.module.ts index e12e7142e..1cd65e66a 100644 --- a/packages/apollo/tests/graphql-federation/users-service/federation-users.async-class.module.ts +++ b/packages/apollo/tests/graphql-federation/users-service/federation-users.async-class.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloFederationDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; -import { UsersModule } from './users/users.module'; +import { ApolloFederationDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/users-service/federation-users.async-existing.module.ts b/packages/apollo/tests/graphql-federation/users-service/federation-users.async-existing.module.ts index 895348e58..5aab69395 100644 --- a/packages/apollo/tests/graphql-federation/users-service/federation-users.async-existing.module.ts +++ b/packages/apollo/tests/graphql-federation/users-service/federation-users.async-existing.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloFederationDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; -import { UsersModule } from './users/users.module'; +import { ApolloFederationDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/users-service/federation-users.async.module.ts b/packages/apollo/tests/graphql-federation/users-service/federation-users.async.module.ts index d9f0f6037..626b6c9dc 100644 --- a/packages/apollo/tests/graphql-federation/users-service/federation-users.async.module.ts +++ b/packages/apollo/tests/graphql-federation/users-service/federation-users.async.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloFederationDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; -import { UsersModule } from './users/users.module'; +import { ApolloFederationDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql-federation/users-service/federation-users.module.ts b/packages/apollo/tests/graphql-federation/users-service/federation-users.module.ts index 6872d4d6b..f35d7050d 100644 --- a/packages/apollo/tests/graphql-federation/users-service/federation-users.module.ts +++ b/packages/apollo/tests/graphql-federation/users-service/federation-users.module.ts @@ -2,15 +2,15 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { ApolloServerPluginInlineTraceDisabled } from '@apollo/server/plugin/disabled'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../../lib'; -import { ApolloFederationDriver } from '../../../lib/drivers'; -import { UsersModule } from './users/users.module'; +import { ApolloDriverConfig } from '../../../lib/index.js'; +import { ApolloFederationDriver } from '../../../lib/drivers/index.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: ApolloFederationDriver, - typePaths: [join(__dirname, '**/*.graphql')], + typePaths: [join(import.meta.dirname, '**/*.graphql')], plugins: [ApolloServerPluginInlineTraceDisabled()], }), UsersModule, diff --git a/packages/apollo/tests/graphql-federation/users-service/users/users.module.ts b/packages/apollo/tests/graphql-federation/users-service/users/users.module.ts index d71042e83..7f52481fd 100644 --- a/packages/apollo/tests/graphql-federation/users-service/users/users.module.ts +++ b/packages/apollo/tests/graphql-federation/users-service/users/users.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { UsersResolvers } from './users.resolvers'; -import { UsersService } from './users.service'; +import { UsersResolvers } from './users.resolvers.js'; +import { UsersService } from './users.service.js'; @Module({ providers: [UsersResolvers, UsersService], diff --git a/packages/apollo/tests/graphql-federation/users-service/users/users.resolvers.ts b/packages/apollo/tests/graphql-federation/users-service/users/users.resolvers.ts index 07f1c8306..bd799cb03 100644 --- a/packages/apollo/tests/graphql-federation/users-service/users/users.resolvers.ts +++ b/packages/apollo/tests/graphql-federation/users-service/users/users.resolvers.ts @@ -1,5 +1,5 @@ import { Args, Query, Resolver, ResolveReference } from '@nestjs/graphql'; -import { UsersService } from './users.service'; +import { UsersService } from './users.service.js'; @Resolver('User') export class UsersResolvers { constructor(private readonly usersService: UsersService) {} diff --git a/packages/apollo/tests/graphql-federation/users-service/users/users.service.ts b/packages/apollo/tests/graphql-federation/users-service/users/users.service.ts index 9fc49b9ae..abb51122d 100644 --- a/packages/apollo/tests/graphql-federation/users-service/users/users.service.ts +++ b/packages/apollo/tests/graphql-federation/users-service/users/users.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { User } from './users.interfaces'; +import { User } from './users.interfaces.js'; @Injectable() export class UsersService { diff --git a/packages/apollo/tests/graphql/app.module.ts b/packages/apollo/tests/graphql/app.module.ts index bb2f5ff54..c63b3ec7e 100644 --- a/packages/apollo/tests/graphql/app.module.ts +++ b/packages/apollo/tests/graphql/app.module.ts @@ -1,16 +1,16 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ CatsModule, GraphQLModule.forRoot({ driver: ApolloDriver, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }), ], }) diff --git a/packages/apollo/tests/graphql/async-options-class.module.ts b/packages/apollo/tests/graphql/async-options-class.module.ts index 7e0f11a15..41ca040fb 100644 --- a/packages/apollo/tests/graphql/async-options-class.module.ts +++ b/packages/apollo/tests/graphql/async-options-class.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { GqlOptionsFactory, GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; class ConfigService implements GqlOptionsFactory { createGqlOptions(): ApolloDriverConfig { return { - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }; } } diff --git a/packages/apollo/tests/graphql/async-options-existing.module.ts b/packages/apollo/tests/graphql/async-options-existing.module.ts index 79f49ea74..26ccd6dba 100644 --- a/packages/apollo/tests/graphql/async-options-existing.module.ts +++ b/packages/apollo/tests/graphql/async-options-existing.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; -import { ConfigModule } from './config.module'; -import { ConfigService } from './config.service'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; +import { ConfigModule } from './config.module.js'; +import { ConfigService } from './config.service.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql/async-options.module.ts b/packages/apollo/tests/graphql/async-options.module.ts index a56c9e9ff..2642df559 100644 --- a/packages/apollo/tests/graphql/async-options.module.ts +++ b/packages/apollo/tests/graphql/async-options.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ @@ -11,7 +11,7 @@ import { CatsModule } from './cats/cats.module'; GraphQLModule.forRootAsync({ driver: ApolloDriver, useFactory: async () => ({ - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }), }), ], diff --git a/packages/apollo/tests/graphql/cats/cats-request-scoped.service.ts b/packages/apollo/tests/graphql/cats/cats-request-scoped.service.ts index e4faf7f76..b3fafbf46 100644 --- a/packages/apollo/tests/graphql/cats/cats-request-scoped.service.ts +++ b/packages/apollo/tests/graphql/cats/cats-request-scoped.service.ts @@ -1,5 +1,5 @@ import { Injectable, Scope } from '@nestjs/common'; -import { Cat } from './interfaces/cat.interface'; +import { Cat } from './interfaces/cat.interface.js'; @Injectable({ scope: Scope.REQUEST }) export class CatsRequestScopedService { diff --git a/packages/apollo/tests/graphql/cats/cats.module.ts b/packages/apollo/tests/graphql/cats/cats.module.ts index b2fa3f9a9..572fa38c2 100644 --- a/packages/apollo/tests/graphql/cats/cats.module.ts +++ b/packages/apollo/tests/graphql/cats/cats.module.ts @@ -1,7 +1,7 @@ import { DynamicModule, Module, Scope } from '@nestjs/common'; -import { CatsRequestScopedService } from './cats-request-scoped.service'; -import { CatsResolvers } from './cats.resolvers'; -import { CatsService } from './cats.service'; +import { CatsRequestScopedService } from './cats-request-scoped.service.js'; +import { CatsResolvers } from './cats.resolvers.js'; +import { CatsService } from './cats.service.js'; @Module({ providers: [CatsService, CatsResolvers], diff --git a/packages/apollo/tests/graphql/cats/cats.resolvers.ts b/packages/apollo/tests/graphql/cats/cats.resolvers.ts index 1761d6b1e..48e6972d9 100644 --- a/packages/apollo/tests/graphql/cats/cats.resolvers.ts +++ b/packages/apollo/tests/graphql/cats/cats.resolvers.ts @@ -8,9 +8,9 @@ import { Subscription, } from '@nestjs/graphql'; import { PubSub } from 'graphql-subscriptions'; -import { CatsGuard } from './cats.guard'; -import { CatsService } from './cats.service'; -import { Cat } from './interfaces/cat.interface'; +import { CatsGuard } from './cats.guard.js'; +import { CatsService } from './cats.service.js'; +import { Cat } from './interfaces/cat.interface.js'; const pubSub = new PubSub(); diff --git a/packages/apollo/tests/graphql/cats/cats.service.ts b/packages/apollo/tests/graphql/cats/cats.service.ts index 54172e4e9..6ad697e4b 100644 --- a/packages/apollo/tests/graphql/cats/cats.service.ts +++ b/packages/apollo/tests/graphql/cats/cats.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { Cat } from './interfaces/cat.interface'; +import { Cat } from './interfaces/cat.interface.js'; @Injectable() export class CatsService { diff --git a/packages/apollo/tests/graphql/common/scalars/date.scalar.ts b/packages/apollo/tests/graphql/common/scalars/date.scalar.ts index 09f4b8d6a..3f39f0394 100644 --- a/packages/apollo/tests/graphql/common/scalars/date.scalar.ts +++ b/packages/apollo/tests/graphql/common/scalars/date.scalar.ts @@ -1,5 +1,5 @@ import { Kind } from 'graphql'; -import { Scalar } from '../../../../lib'; +import { Scalar } from '@nestjs/graphql'; @Scalar('Date') export class DateScalar { diff --git a/packages/apollo/tests/graphql/config.module.ts b/packages/apollo/tests/graphql/config.module.ts index eaa505c84..bf41826bb 100644 --- a/packages/apollo/tests/graphql/config.module.ts +++ b/packages/apollo/tests/graphql/config.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigService } from './config.service'; +import { ConfigService } from './config.service.js'; @Module({ providers: [ConfigService], diff --git a/packages/apollo/tests/graphql/config.service.ts b/packages/apollo/tests/graphql/config.service.ts index a0bc5b3e4..cd7866bc4 100644 --- a/packages/apollo/tests/graphql/config.service.ts +++ b/packages/apollo/tests/graphql/config.service.ts @@ -3,13 +3,13 @@ import { join } from 'path'; import { ApolloDriverConfig, ApolloDriverConfigFactory, -} from '../../lib/interfaces'; +} from '../../lib/interfaces/index.js'; @Injectable() export class ConfigService implements ApolloDriverConfigFactory { createGqlOptions(): ApolloDriverConfig { return { - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }; } } diff --git a/packages/apollo/tests/graphql/custom-context/custom-context.module.ts b/packages/apollo/tests/graphql/custom-context/custom-context.module.ts index 62cf05852..2a2ffd2d9 100644 --- a/packages/apollo/tests/graphql/custom-context/custom-context.module.ts +++ b/packages/apollo/tests/graphql/custom-context/custom-context.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriverConfig } from '../../../lib'; -import { ApolloDriver } from '../../../lib/drivers'; -import { CustomContextResolver } from './custom-context.resolver'; +import { ApolloDriverConfig } from '../../../lib/index.js'; +import { ApolloDriver } from '../../../lib/drivers/index.js'; +import { CustomContextResolver } from './custom-context.resolver.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql/global-prefix-async-options-class.module.ts b/packages/apollo/tests/graphql/global-prefix-async-options-class.module.ts index 7a0f15e34..e158c5ed6 100644 --- a/packages/apollo/tests/graphql/global-prefix-async-options-class.module.ts +++ b/packages/apollo/tests/graphql/global-prefix-async-options-class.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { GqlOptionsFactory, GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; class ConfigService implements GqlOptionsFactory { createGqlOptions(): ApolloDriverConfig { return { - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], useGlobalPrefix: true, }; } diff --git a/packages/apollo/tests/graphql/global-prefix-async-options.module.ts b/packages/apollo/tests/graphql/global-prefix-async-options.module.ts index 68c6c17d8..2b1948fa8 100644 --- a/packages/apollo/tests/graphql/global-prefix-async-options.module.ts +++ b/packages/apollo/tests/graphql/global-prefix-async-options.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ @@ -11,7 +11,7 @@ import { CatsModule } from './cats/cats.module'; GraphQLModule.forRootAsync({ driver: ApolloDriver, useFactory: async () => ({ - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], useGlobalPrefix: true, }), }), diff --git a/packages/apollo/tests/graphql/global-prefix.module.ts b/packages/apollo/tests/graphql/global-prefix.module.ts index ea1a6be07..1d63afcc3 100644 --- a/packages/apollo/tests/graphql/global-prefix.module.ts +++ b/packages/apollo/tests/graphql/global-prefix.module.ts @@ -1,16 +1,16 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ CatsModule, GraphQLModule.forRoot({ driver: ApolloDriver, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], useGlobalPrefix: true, }), ], diff --git a/packages/apollo/tests/graphql/graphiql-playground.module.ts b/packages/apollo/tests/graphql/graphiql-playground.module.ts index 582cd7700..644f3ee0d 100644 --- a/packages/apollo/tests/graphql/graphiql-playground.module.ts +++ b/packages/apollo/tests/graphql/graphiql-playground.module.ts @@ -1,15 +1,42 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriverConfig } from '../../lib'; -import { ApolloDriver } from '../../lib/drivers'; -import { GraphiQLOptions } from '../../lib/graphiql/interfaces/graphiql-options.interface'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriverConfig } from '../../lib/index.js'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { GraphiQLOptions } from '../../lib/graphiql/interfaces/graphiql-options.interface.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [CatsModule], }) export class GraphiQLPlaygroundModule { + static withDefaults() { + return { + module: GraphiQLPlaygroundModule, + imports: [ + GraphQLModule.forRoot({ + driver: ApolloDriver, + csrfPrevention: false, + typePaths: [join(import.meta.dirname, '**', '*.graphql')], + }), + ], + }; + } + + static withPlaygroundEnabled() { + return { + module: GraphiQLPlaygroundModule, + imports: [ + GraphQLModule.forRoot({ + driver: ApolloDriver, + csrfPrevention: false, + playground: true, + typePaths: [join(import.meta.dirname, '**', '*.graphql')], + }), + ], + }; + } + static withEnabled() { return { module: GraphiQLPlaygroundModule, @@ -18,7 +45,7 @@ export class GraphiQLPlaygroundModule { driver: ApolloDriver, csrfPrevention: false, graphiql: true, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }), ], }; @@ -31,7 +58,7 @@ export class GraphiQLPlaygroundModule { GraphQLModule.forRoot({ driver: ApolloDriver, csrfPrevention: false, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], graphiql: options, }), ], diff --git a/packages/apollo/tests/graphql/hello/hello.module.ts b/packages/apollo/tests/graphql/hello/hello.module.ts index d29dcb75d..6edc20131 100644 --- a/packages/apollo/tests/graphql/hello/hello.module.ts +++ b/packages/apollo/tests/graphql/hello/hello.module.ts @@ -1,16 +1,16 @@ import { DynamicModule, Inject, Module, Provider, Scope } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriver } from '../../../lib/drivers'; -import { HelloResolver } from './hello.resolver'; -import { HelloService } from './hello.service'; -import { UsersService } from './users/users.service'; +import { ApolloDriver } from '../../../lib/drivers/index.js'; +import { HelloResolver } from './hello.resolver.js'; +import { HelloService } from './hello.service.js'; +import { UsersService } from './users/users.service.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: ApolloDriver, - typePaths: [join(__dirname, '*.graphql')], + typePaths: [join(import.meta.dirname, '*.graphql')], }), ], providers: [ diff --git a/packages/apollo/tests/graphql/hello/hello.resolver.ts b/packages/apollo/tests/graphql/hello/hello.resolver.ts index 47bc9b1e8..9b64ed025 100644 --- a/packages/apollo/tests/graphql/hello/hello.resolver.ts +++ b/packages/apollo/tests/graphql/hello/hello.resolver.ts @@ -1,9 +1,9 @@ import { UseGuards, UseInterceptors } from '@nestjs/common'; import { Query, Resolver } from '@nestjs/graphql'; -import { Guard } from './guards/request-scoped.guard'; -import { HelloService } from './hello.service'; -import { Interceptor } from './interceptors/logging.interceptor'; -import { UsersService } from './users/users.service'; +import { Guard } from './guards/request-scoped.guard.js'; +import { HelloService } from './hello.service.js'; +import { Interceptor } from './interceptors/logging.interceptor.js'; +import { UsersService } from './users/users.service.js'; @Resolver() export class HelloResolver { diff --git a/packages/apollo/tests/graphql/hello/users/user-by-id.pipe.ts b/packages/apollo/tests/graphql/hello/users/user-by-id.pipe.ts index ff5695c11..07f43f38a 100644 --- a/packages/apollo/tests/graphql/hello/users/user-by-id.pipe.ts +++ b/packages/apollo/tests/graphql/hello/users/user-by-id.pipe.ts @@ -4,7 +4,7 @@ import { Injectable, PipeTransform, } from '@nestjs/common'; -import { UsersService } from './users.service'; +import { UsersService } from './users.service.js'; @Injectable() export class UserByIdPipe implements PipeTransform { diff --git a/packages/apollo/tests/graphql/main.ts b/packages/apollo/tests/graphql/main.ts index afb93ba07..fa3417e80 100644 --- a/packages/apollo/tests/graphql/main.ts +++ b/packages/apollo/tests/graphql/main.ts @@ -1,5 +1,5 @@ import { NestFactory } from '@nestjs/core'; -import { ApplicationModule } from './app.module'; +import { ApplicationModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule); diff --git a/packages/apollo/tests/graphql/sort-auto-schema.module.ts b/packages/apollo/tests/graphql/sort-auto-schema.module.ts index caf73b47a..82130785e 100644 --- a/packages/apollo/tests/graphql/sort-auto-schema.module.ts +++ b/packages/apollo/tests/graphql/sort-auto-schema.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriver } from '../../lib/drivers'; -import { DirectionsModule } from '../code-first/directions/directions.module'; -import { RecipesModule } from '../code-first/recipes/recipes.module'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { DirectionsModule } from '../code-first/directions/directions.module.js'; +import { RecipesModule } from '../code-first/recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/graphql/sort-schema.module.ts b/packages/apollo/tests/graphql/sort-schema.module.ts index bef79694f..27a73acbb 100644 --- a/packages/apollo/tests/graphql/sort-schema.module.ts +++ b/packages/apollo/tests/graphql/sort-schema.module.ts @@ -1,15 +1,15 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { ApolloDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ CatsModule, GraphQLModule.forRoot({ driver: ApolloDriver, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], sortSchema: true, }), ], diff --git a/packages/apollo/tests/graphql/transform-auto-schema-file.module.ts b/packages/apollo/tests/graphql/transform-auto-schema-file.module.ts index 63931344a..e94ff36d3 100644 --- a/packages/apollo/tests/graphql/transform-auto-schema-file.module.ts +++ b/packages/apollo/tests/graphql/transform-auto-schema-file.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { GraphQLSchema, lexicographicSortSchema } from 'graphql'; -import { ApolloDriver } from '../../lib/drivers'; -import { DirectionsModule } from '../code-first/directions/directions.module'; -import { RecipesModule } from '../code-first/recipes/recipes.module'; +import { ApolloDriver } from '../../lib/drivers/index.js'; +import { DirectionsModule } from '../code-first/directions/directions.module.js'; +import { RecipesModule } from '../code-first/recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/apollo/tests/subscriptions/app/app.module.ts b/packages/apollo/tests/subscriptions/app/app.module.ts index 14641476a..77017d60b 100644 --- a/packages/apollo/tests/subscriptions/app/app.module.ts +++ b/packages/apollo/tests/subscriptions/app/app.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; -import { DynamicModule } from '@nestjs/common/interfaces'; +import { DynamicModule } from '@nestjs/common/interfaces/index.js'; import { GraphQLModule } from '@nestjs/graphql'; -import { GqlModuleOptions } from '@nestjs/graphql/interfaces/gql-module-options.interface'; -import { ApolloDriverConfig } from '../../../lib'; -import { ApolloDriver } from '../../../lib/drivers'; -import { NotificationModule } from './notification.module'; +import { GqlModuleOptions } from '@nestjs/graphql/interfaces/gql-module-options.interface.js'; +import { ApolloDriverConfig } from '../../../lib/index.js'; +import { ApolloDriver } from '../../../lib/drivers/index.js'; +import { NotificationModule } from './notification.module.js'; export type AppModuleConfig = { context?: GqlModuleOptions['context']; diff --git a/packages/apollo/tests/subscriptions/app/notification.module.ts b/packages/apollo/tests/subscriptions/app/notification.module.ts index d4e9cb205..d74a50642 100644 --- a/packages/apollo/tests/subscriptions/app/notification.module.ts +++ b/packages/apollo/tests/subscriptions/app/notification.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { NotificationResolver } from './notification.resolver'; +import { NotificationResolver } from './notification.resolver.js'; @Module({ providers: [NotificationResolver], diff --git a/packages/apollo/tests/subscriptions/app/notification.resolver.ts b/packages/apollo/tests/subscriptions/app/notification.resolver.ts index 89516953b..63116bff4 100644 --- a/packages/apollo/tests/subscriptions/app/notification.resolver.ts +++ b/packages/apollo/tests/subscriptions/app/notification.resolver.ts @@ -1,8 +1,8 @@ import { Logger, UseGuards } from '@nestjs/common'; import { Args, Query, Resolver, Subscription } from '@nestjs/graphql'; import { PubSub } from 'graphql-subscriptions'; -import { AuthGuard } from './auth.guard'; -import { Notification } from './notification'; +import { AuthGuard } from './auth.guard.js'; +import { Notification } from './notification.js'; export const pubSub = new PubSub(); diff --git a/packages/apollo/tests/subscriptions/async-iterator.spec.ts b/packages/apollo/tests/subscriptions/async-iterator.spec.ts index 0f1d9326d..75fa03599 100644 --- a/packages/apollo/tests/subscriptions/async-iterator.spec.ts +++ b/packages/apollo/tests/subscriptions/async-iterator.spec.ts @@ -7,7 +7,7 @@ import { runInNewContext } from 'vm'; import { AsyncIterator, createAsyncIterator, -} from '../../lib/utils/async-iterator.util'; +} from '../../lib/utils/async-iterator.util.js'; setFlagsFromString('--expose_gc'); const gc = runInNewContext('gc'); diff --git a/packages/apollo/tests/subscriptions/compat.spec.ts b/packages/apollo/tests/subscriptions/compat.spec.ts deleted file mode 100644 index 95637d629..000000000 --- a/packages/apollo/tests/subscriptions/compat.spec.ts +++ /dev/null @@ -1,190 +0,0 @@ -import { INestApplication } from '@nestjs/common'; -import { Test } from '@nestjs/testing'; -import { InMemoryCache } from 'apollo-cache-inmemory'; -import ApolloClient from 'apollo-client'; -import { WebSocketLink } from 'apollo-link-ws'; -import { gql } from 'graphql-tag'; -import { Client, createClient } from 'graphql-ws'; -import { SubscriptionClient } from 'subscriptions-transport-ws'; -import ws from 'ws'; -import { AppModule } from './app/app.module'; -import { pubSub } from './app/notification.resolver'; -import { GraphQLWsLink } from './utils/graphql-ws.link'; - -const subscriptionQuery = gql` - subscription TestSubscription($id: String!) { - newNotification(id: $id) { - id - message - } - } -`; - -describe('Use graphql-ws + subscriptions-transport-ws', () => { - let app: INestApplication; - let wsClient: Client; - let subWsClient: SubscriptionClient; - let port: number; - - let gqlWsOnConnect = vi.fn(); - let subTransWsOnConnect = vi.fn(); - - beforeEach(async () => { - const module = await Test.createTestingModule({ - imports: [ - AppModule.forRoot({ - context: (context) => { - const { authorization } = context?.connectionParams ?? {}; - if (authorization) { - return { user: authorization.split('Bearer ')[1] }; - } else { - return context?.connection?.context ?? {}; - } - }, - subscriptions: { - 'graphql-ws': { - onConnect: gqlWsOnConnect, - }, - 'subscriptions-transport-ws': { - onConnect: subTransWsOnConnect, - }, - }, - }), - ], - }).compile(); - - app = module.createNestApplication(); - await app.init(); - await app.listen(0); - port = app.getHttpServer().address().port; - }); - - it('graphql-ws receives subscriptions', async () => { - await new Promise((resolve, reject) => { - gqlWsOnConnect.mockReturnValue(true); - - wsClient = createClient({ - url: `ws://localhost:${port}/graphql`, - webSocketImpl: ws, - connectionParams: { - authorization: 'Bearer test', - }, - retryAttempts: 0, - }); - - wsClient.on('connected', () => { - // timeout needed to allow the subscription to be established - setTimeout(() => { - pubSub.publish('newNotification', { - newNotification: { - id: '1', - recipient: 'test', - message: 'Hello graphql-ws', - }, - }); - }, 100); - }); - - const apolloClient = new ApolloClient({ - link: new GraphQLWsLink(wsClient), - cache: new InMemoryCache(), - }); - - apolloClient - .subscribe({ - query: subscriptionQuery, - variables: { - id: '1', - }, - }) - .subscribe({ - next(value: any) { - try { - expect(value.data.newNotification.id).toEqual('1'); - expect(value.data.newNotification.message).toEqual( - 'Hello graphql-ws', - ); - expect(gqlWsOnConnect).toHaveBeenCalledTimes(1); - expect(subTransWsOnConnect).not.toHaveBeenCalled(); - resolve(); - } catch (e) { - reject(e); - } - }, - complete() {}, - error(error: unknown) { - reject(error); - }, - }); - }); - }); - - it('subscriptions-transport-ws receives subscriptions', async () => { - await new Promise((resolve, reject) => { - subTransWsOnConnect.mockReturnValue({ - user: 'test', - }); - - subWsClient = new SubscriptionClient( - `ws://localhost:${port}/graphql`, - { - connectionParams: { - authorization: 'Bearer test', - }, - }, - ws, - ); - - subWsClient.on('connected', () => { - pubSub.publish('newNotification', { - newNotification: { - id: '1', - recipient: 'test', - message: 'Hello subscriptions-transport-ws', - }, - }); - }); - - const apolloClient = new ApolloClient({ - link: new WebSocketLink(subWsClient), - cache: new InMemoryCache(), - }); - - apolloClient - .subscribe({ - query: subscriptionQuery, - variables: { - id: '1', - }, - }) - .subscribe({ - next(value: any) { - try { - expect(value.data.newNotification.id).toEqual('1'); - expect(value.data.newNotification.message).toEqual( - 'Hello subscriptions-transport-ws', - ); - expect(subTransWsOnConnect).toHaveBeenCalledTimes(1); - expect(gqlWsOnConnect).not.toHaveBeenCalled(); - resolve(); - } catch (e) { - reject(e); - } - }, - complete() {}, - error(error: unknown) { - reject(error); - }, - }); - }); - }); - - afterEach(async () => { - try { - await wsClient?.dispose(); - } catch {} - subWsClient?.close(); - await app.close(); - vi.clearAllMocks(); - }); -}); diff --git a/packages/apollo/tests/subscriptions/federation-app/federation-app.module.ts b/packages/apollo/tests/subscriptions/federation-app/federation-app.module.ts index 264d65254..a089c4707 100644 --- a/packages/apollo/tests/subscriptions/federation-app/federation-app.module.ts +++ b/packages/apollo/tests/subscriptions/federation-app/federation-app.module.ts @@ -1,8 +1,8 @@ import { DynamicModule, Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { ApolloDriverConfig } from '../../../lib'; -import { ApolloFederationDriver } from '../../../lib/drivers'; -import { NotificationModule } from './notification.module'; +import { ApolloDriverConfig } from '../../../lib/index.js'; +import { ApolloFederationDriver } from '../../../lib/drivers/index.js'; +import { NotificationModule } from './notification.module.js'; export type FederationAppModuleConfig = { subscriptions?: ApolloDriverConfig['subscriptions']; diff --git a/packages/apollo/tests/subscriptions/federation-app/notification.module.ts b/packages/apollo/tests/subscriptions/federation-app/notification.module.ts index d4e9cb205..d74a50642 100644 --- a/packages/apollo/tests/subscriptions/federation-app/notification.module.ts +++ b/packages/apollo/tests/subscriptions/federation-app/notification.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { NotificationResolver } from './notification.resolver'; +import { NotificationResolver } from './notification.resolver.js'; @Module({ providers: [NotificationResolver], diff --git a/packages/apollo/tests/subscriptions/federation-app/notification.resolver.ts b/packages/apollo/tests/subscriptions/federation-app/notification.resolver.ts index e44c35a5c..8c799e18f 100644 --- a/packages/apollo/tests/subscriptions/federation-app/notification.resolver.ts +++ b/packages/apollo/tests/subscriptions/federation-app/notification.resolver.ts @@ -1,6 +1,6 @@ import { Args, Query, Resolver, Subscription } from '@nestjs/graphql'; import { PubSub } from 'graphql-subscriptions'; -import { Notification } from './notification'; +import { Notification } from './notification.js'; export const pubSub = new PubSub(); diff --git a/packages/apollo/tests/subscriptions/federation-graphql-ws.spec.ts b/packages/apollo/tests/subscriptions/federation-graphql-ws.spec.ts index 19ac11a63..441ea2948 100644 --- a/packages/apollo/tests/subscriptions/federation-graphql-ws.spec.ts +++ b/packages/apollo/tests/subscriptions/federation-graphql-ws.spec.ts @@ -1,14 +1,18 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import { InMemoryCache } from 'apollo-cache-inmemory'; -import ApolloClient from 'apollo-client'; +import ApolloClientPackage from 'apollo-client'; import { gql } from 'graphql-tag'; import { Client, createClient } from 'graphql-ws'; import request from 'supertest'; import ws from 'ws'; -import { FederationAppModule } from './federation-app/federation-app.module'; -import { pubSub } from './federation-app/notification.resolver'; -import { GraphQLWsLink } from './utils/graphql-ws.link'; +import { FederationAppModule } from './federation-app/federation-app.module.js'; +import { pubSub } from './federation-app/notification.resolver.js'; +import { GraphQLWsLink } from './utils/graphql-ws.link.js'; + +const ApolloClient = ApolloClientPackage as unknown as new ( + ...args: any[] +) => any; const subscriptionQuery = gql` subscription FederatedSubscription($id: String!, $recipient: String!) { diff --git a/packages/apollo/tests/subscriptions/graphql-ws.spec.ts b/packages/apollo/tests/subscriptions/graphql-ws.spec.ts index 9fbc10680..b388889ca 100644 --- a/packages/apollo/tests/subscriptions/graphql-ws.spec.ts +++ b/packages/apollo/tests/subscriptions/graphql-ws.spec.ts @@ -1,14 +1,18 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import { InMemoryCache } from 'apollo-cache-inmemory'; -import ApolloClient, { ApolloError } from 'apollo-client'; +import ApolloClientPackage, { ApolloError } from 'apollo-client'; import { gql } from 'graphql-tag'; import { Client, Context, createClient } from 'graphql-ws'; import ws from 'ws'; -import { AppModule } from './app/app.module'; -import { pubSub } from './app/notification.resolver'; -import { GraphQLWsLink } from './utils/graphql-ws.link'; -import { MalformedTokenException } from './utils/malformed-token.exception'; +import { AppModule } from './app/app.module.js'; +import { pubSub } from './app/notification.resolver.js'; +import { GraphQLWsLink } from './utils/graphql-ws.link.js'; +import { MalformedTokenException } from './utils/malformed-token.exception.js'; + +const ApolloClient = ApolloClientPackage as unknown as new ( + ...args: any[] +) => any; const subscriptionQuery = gql` subscription TestSubscription($id: String!) { @@ -40,10 +44,11 @@ describe('graphql-ws protocol', () => { 'graphql-ws': { onConnect: (context: Context) => { if (!context.connectionParams.authorization) { - return context.extra.socket.close( - 4000, - 'Missing authorization', - ); + return ( + context.extra as { + socket: { close: (code: number, reason: string) => void }; + } + ).socket.close(4000, 'Missing authorization'); } const authorization = context.connectionParams .authorization as string; diff --git a/packages/apollo/tests/subscriptions/subscription-transport-ws.spec.ts b/packages/apollo/tests/subscriptions/subscription-transport-ws.spec.ts deleted file mode 100644 index e3546798e..000000000 --- a/packages/apollo/tests/subscriptions/subscription-transport-ws.spec.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { INestApplication } from '@nestjs/common'; -import { Test } from '@nestjs/testing'; -import { InMemoryCache } from 'apollo-cache-inmemory'; -import ApolloClient, { ApolloError } from 'apollo-client'; -import { WebSocketLink } from 'apollo-link-ws'; -import { gql } from 'graphql-tag'; -import { SubscriptionClient } from 'subscriptions-transport-ws'; -import ws from 'ws'; -import { AppModule } from './app/app.module'; -import { pubSub } from './app/notification.resolver'; - -const subscriptionQuery = gql` - subscription TestSubscription($id: String!) { - newNotification(id: $id) { - id - message - } - } -`; - -describe('subscriptions-transport-ws protocol', () => { - let app: INestApplication; - let wsClient: SubscriptionClient; - let port: number; - - beforeEach(async () => { - const module = await Test.createTestingModule({ - imports: [ - AppModule.forRoot({ - context: ({ connection }) => { - return connection?.context ?? {}; - }, - subscriptions: { - 'subscriptions-transport-ws': { - onConnect: (connectionParams) => { - if (!connectionParams.authorization) { - throw new Error('Missing authorization header'); - } - const { authorization } = connectionParams; - if (!authorization.startsWith('Bearer ')) { - throw new Error('Malformed authorization token'); - } - return { user: authorization.split('Bearer ')[1] }; - }, - }, - }, - }), - ], - }).compile(); - - app = module.createNestApplication(); - await app.init(); - await app.listen(0); - port = app.getHttpServer().address().port; - }); - - it('should receive an error if missing token', async () => { - await new Promise((resolve, reject) => { - wsClient = new SubscriptionClient( - `ws://localhost:${port}/graphql`, - { - connectionCallback: (errors) => { - try { - const error = errors as unknown as Error; - expect(error.message).toEqual('Missing authorization header'); - resolve(); - } catch (e) { - reject(e); - } - }, - connectionParams: {}, - }, - ws, - ); - - const apolloClient = new ApolloClient({ - link: new WebSocketLink(wsClient), - cache: new InMemoryCache(), - }); - - apolloClient - .subscribe({ - query: subscriptionQuery, - variables: { - id: '1', - }, - }) - .subscribe({ - next() {}, - complete() {}, - error() {}, - }); - }); - }); - - it('should receive an error if token is malformed', async () => { - await new Promise((resolve, reject) => { - wsClient = new SubscriptionClient( - `ws://localhost:${port}/graphql`, - { - connectionCallback: (errors) => { - try { - const error = errors as unknown as Error; - expect(error.message).toEqual('Malformed authorization token'); - resolve(); - } catch (e) { - reject(e); - } - }, - connectionParams: { - authorization: 'wrong token', - }, - }, - ws, - ); - - const apolloClient = new ApolloClient({ - link: new WebSocketLink(wsClient), - cache: new InMemoryCache(), - }); - - apolloClient - .subscribe({ - query: subscriptionQuery, - variables: { - id: '1', - }, - }) - .subscribe({ - next() {}, - complete() {}, - error() {}, - }); - }); - }); - - it('should fail to connect if no authorization is provided', async () => { - await new Promise((resolve, reject) => { - wsClient = new SubscriptionClient( - `ws://localhost:${port}/graphql`, - { - connectionParams: { - authorization: 'Bearer notest', - }, - }, - ws, - ); - - const apolloClient = new ApolloClient({ - link: new WebSocketLink(wsClient), - cache: new InMemoryCache(), - }); - - apolloClient - .subscribe({ - query: subscriptionQuery, - variables: { - id: '1', - }, - }) - .subscribe({ - next() {}, - complete() {}, - error(error: unknown) { - try { - expect(error).toBeInstanceOf(ApolloError); - expect((error as ApolloError).graphQLErrors[0].message).toEqual( - 'Forbidden resource', - ); - expect((error as ApolloError).graphQLErrors[0].path[0]).toEqual( - 'newNotification', - ); - resolve(); - } catch (e) { - reject(e); - } - }, - }); - }); - }); - - it('should receive subscriptions', async () => { - await new Promise((resolve, reject) => { - wsClient = new SubscriptionClient( - `ws://localhost:${port}/graphql`, - { - connectionParams: { - authorization: 'Bearer test', - }, - }, - ws, - ); - - wsClient.on('connected', () => { - pubSub.publish('newNotification', { - newNotification: { - id: '2', - recipient: 'test', - message: 'wrong message!', - }, - }); - pubSub.publish('newNotification', { - newNotification: { - id: '1', - recipient: 'someone-else', - message: 'wrong message!', - }, - }); - pubSub.publish('newNotification', { - newNotification: { - id: '1', - recipient: 'test', - message: 'Hello subscriptions-transport-ws', - }, - }); - }); - - const apolloClient = new ApolloClient({ - link: new WebSocketLink(wsClient), - cache: new InMemoryCache(), - }); - - apolloClient - .subscribe({ - query: subscriptionQuery, - variables: { - id: '1', - }, - }) - .subscribe({ - next(value: any) { - try { - expect(value.data.newNotification.id).toEqual('1'); - expect(value.data.newNotification.message).toEqual( - 'Hello subscriptions-transport-ws', - ); - resolve(); - } catch (e) { - reject(e); - } - }, - complete() {}, - error(error: unknown) { - reject(error); - }, - }); - }); - }); - - afterEach(async () => { - await wsClient.close(); - await app.close(); - }); -}); diff --git a/packages/apollo/tsconfig.build.json b/packages/apollo/tsconfig.build.json index 594b6b606..d39c18d5e 100644 --- a/packages/apollo/tsconfig.build.json +++ b/packages/apollo/tsconfig.build.json @@ -3,6 +3,8 @@ "compilerOptions": { "outDir": "./dist", "rootDir": "./lib", + "module": "NodeNext", + "moduleResolution": "NodeNext", "paths": { "@nestjs/graphql": ["../graphql/lib"], "@nestjs/graphql/*": ["../graphql/lib/*"], diff --git a/packages/apollo/tsconfig.spec.json b/packages/apollo/tsconfig.spec.json index 4bc2bd57f..d0447a569 100644 --- a/packages/apollo/tsconfig.spec.json +++ b/packages/apollo/tsconfig.spec.json @@ -1,6 +1,8 @@ { "extends": "./tsconfig.json", "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "./dist/tests", "types": ["vitest/globals", "node"], "rootDir": ".", diff --git a/packages/apollo/vitest.config.mts b/packages/apollo/vitest.config.mts index 9513cd71b..a3df0a389 100644 --- a/packages/apollo/vitest.config.mts +++ b/packages/apollo/vitest.config.mts @@ -6,12 +6,12 @@ export default defineConfig({ alias: [ { find: /^@nestjs\/graphql(\/.*)?$/, - replacement: path.resolve(__dirname, '../graphql/lib') + '$1', + replacement: path.resolve(import.meta.dirname, '../graphql/lib') + '$1', }, { find: 'graphql', replacement: path.resolve( - __dirname, + import.meta.dirname, '../../node_modules/graphql/index.js', ), }, diff --git a/packages/graphql/lib/decorators/args-type.decorator.ts b/packages/graphql/lib/decorators/args-type.decorator.ts index 8e18beba2..cc62f5a6c 100644 --- a/packages/graphql/lib/decorators/args-type.decorator.ts +++ b/packages/graphql/lib/decorators/args-type.decorator.ts @@ -1,8 +1,8 @@ -import { ClassType } from '../enums/class-type.enum'; -import { RegisterInOption } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util'; +import { ClassType } from '../enums/class-type.enum.js'; +import { RegisterInOption } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util.js'; /** * Interface defining options that can be passed to `@ArgsType()` decorator. diff --git a/packages/graphql/lib/decorators/args.decorator.ts b/packages/graphql/lib/decorators/args.decorator.ts index 118ad866b..5a61b8f97 100644 --- a/packages/graphql/lib/decorators/args.decorator.ts +++ b/packages/graphql/lib/decorators/args.decorator.ts @@ -3,15 +3,15 @@ import { isFunction, isObject, isString, -} from '@nestjs/common/utils/shared.utils'; +} from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { BaseTypeOptions } from '../interfaces'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { isPipe } from '../utils/is-pipe.util'; -import { reflectTypeFromMetadata } from '../utils/reflection.utilts'; -import { addPipesMetadata } from './param.utils'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { BaseTypeOptions } from '../interfaces/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { isPipe } from '../utils/is-pipe.util.js'; +import { reflectTypeFromMetadata } from '../utils/reflection.utilts.js'; +import { addPipesMetadata } from './param.utils.js'; /** * Interface defining options that can be passed to `@Args()` decorator. diff --git a/packages/graphql/lib/decorators/context.decorator.ts b/packages/graphql/lib/decorators/context.decorator.ts index f51759b93..61cd90baf 100644 --- a/packages/graphql/lib/decorators/context.decorator.ts +++ b/packages/graphql/lib/decorators/context.decorator.ts @@ -1,7 +1,7 @@ import { PipeTransform, Type } from '@nestjs/common'; import 'reflect-metadata'; -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { createGqlPipesParamDecorator } from './param.utils'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { createGqlPipesParamDecorator } from './param.utils.js'; /** * Resolver method parameter decorator. Extracts the `Context` diff --git a/packages/graphql/lib/decorators/directive.decorator.ts b/packages/graphql/lib/decorators/directive.decorator.ts index 9ab49ae85..dd7338c50 100644 --- a/packages/graphql/lib/decorators/directive.decorator.ts +++ b/packages/graphql/lib/decorators/directive.decorator.ts @@ -1,7 +1,7 @@ import { parse } from 'graphql'; -import { DirectiveParsingError } from '../schema-builder/errors/directive-parsing.error'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; +import { DirectiveParsingError } from '../schema-builder/errors/directive-parsing.error.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; /** * Adds one or more directives to a field, type, or handler. Passing an array diff --git a/packages/graphql/lib/decorators/extensions.decorator.ts b/packages/graphql/lib/decorators/extensions.decorator.ts index 44792a6e7..7ded05053 100644 --- a/packages/graphql/lib/decorators/extensions.decorator.ts +++ b/packages/graphql/lib/decorators/extensions.decorator.ts @@ -1,5 +1,5 @@ -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; /** * Adds arbitrary data accessible through the "extensions" property to specified field, type, or handler. diff --git a/packages/graphql/lib/decorators/field.decorator.ts b/packages/graphql/lib/decorators/field.decorator.ts index d1d50d67e..5af02b41c 100644 --- a/packages/graphql/lib/decorators/field.decorator.ts +++ b/packages/graphql/lib/decorators/field.decorator.ts @@ -6,17 +6,17 @@ */ import { Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; -import { Complexity, FieldMiddleware } from '../interfaces'; -import { BaseTypeOptions } from '../interfaces/base-type-options.interface'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; +import { Complexity, FieldMiddleware } from '../interfaces/index.js'; +import { BaseTypeOptions } from '../interfaces/base-type-options.interface.js'; import { GqlTypeReference, ReturnTypeFunc, ReturnTypeFuncValue, -} from '../interfaces/return-type-func.interface'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { reflectTypeFromMetadata } from '../utils/reflection.utilts'; +} from '../interfaces/return-type-func.interface.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { reflectTypeFromMetadata } from '../utils/reflection.utilts.js'; /** * Interface defining options that can be passed to `@Field()` decorator. @@ -49,8 +49,8 @@ export type FieldOptions = BaseTypeOptions & { type FieldOptionsExtractor = T extends [GqlTypeReference] ? FieldOptions : T extends GqlTypeReference - ? FieldOptions

- : never; + ? FieldOptions

+ : never; /** * @Field() decorator is used to mark a specific class property as a GraphQL field. diff --git a/packages/graphql/lib/decorators/index.ts b/packages/graphql/lib/decorators/index.ts index 8b9b85819..b2852ef1f 100644 --- a/packages/graphql/lib/decorators/index.ts +++ b/packages/graphql/lib/decorators/index.ts @@ -1,21 +1,21 @@ -export * from './args-type.decorator'; -export * from './args.decorator'; -export * from './context.decorator'; -export * from './directive.decorator'; -export * from './extensions.decorator'; -export * from './field.decorator'; -export * from './hide-field.decorator'; -export * from './info.decorator'; -export * from './input-type.decorator'; -export * from './interface-type.decorator'; -export * from './mutation.decorator'; -export * from './object-type.decorator'; -export * from './parent.decorator'; -export * from './query.decorator'; -export * from './resolve-field.decorator'; -export * from './resolve-property.decorator'; -export * from './resolve-reference.decorator'; -export * from './resolver.decorator'; -export * from './root.decorator'; -export * from './scalar.decorator'; -export * from './subscription.decorator'; +export * from './args-type.decorator.js'; +export * from './args.decorator.js'; +export * from './context.decorator.js'; +export * from './directive.decorator.js'; +export * from './extensions.decorator.js'; +export * from './field.decorator.js'; +export * from './hide-field.decorator.js'; +export * from './info.decorator.js'; +export * from './input-type.decorator.js'; +export * from './interface-type.decorator.js'; +export * from './mutation.decorator.js'; +export * from './object-type.decorator.js'; +export * from './parent.decorator.js'; +export * from './query.decorator.js'; +export * from './resolve-field.decorator.js'; +export * from './resolve-property.decorator.js'; +export * from './resolve-reference.decorator.js'; +export * from './resolver.decorator.js'; +export * from './root.decorator.js'; +export * from './scalar.decorator.js'; +export * from './subscription.decorator.js'; diff --git a/packages/graphql/lib/decorators/info.decorator.ts b/packages/graphql/lib/decorators/info.decorator.ts index 5654a3ddd..3da5beb9e 100644 --- a/packages/graphql/lib/decorators/info.decorator.ts +++ b/packages/graphql/lib/decorators/info.decorator.ts @@ -1,7 +1,7 @@ import { PipeTransform, Type } from '@nestjs/common'; import 'reflect-metadata'; -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { createGqlPipesParamDecorator } from './param.utils'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { createGqlPipesParamDecorator } from './param.utils.js'; /** * Resolver method parameter decorator. Extracts the `Info` diff --git a/packages/graphql/lib/decorators/input-type.decorator.ts b/packages/graphql/lib/decorators/input-type.decorator.ts index ab8f48534..bb82158b7 100644 --- a/packages/graphql/lib/decorators/input-type.decorator.ts +++ b/packages/graphql/lib/decorators/input-type.decorator.ts @@ -5,12 +5,12 @@ * To avoid numerous breaking changes, the public API is backward-compatible and may resemble "type-graphql". */ -import { isString } from '@nestjs/common/utils/shared.utils'; -import { ClassType } from '../enums/class-type.enum'; -import { RegisterInOption } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; +import { ClassType } from '../enums/class-type.enum.js'; +import { RegisterInOption } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util.js'; /** * Interface defining options that can be passed to `@InputType()` decorator. diff --git a/packages/graphql/lib/decorators/interface-type.decorator.ts b/packages/graphql/lib/decorators/interface-type.decorator.ts index d7bc4552a..b24beabcf 100644 --- a/packages/graphql/lib/decorators/interface-type.decorator.ts +++ b/packages/graphql/lib/decorators/interface-type.decorator.ts @@ -5,13 +5,13 @@ * To avoid numerous breaking changes, the public API is backward-compatible and may resemble "type-graphql". */ -import { isString } from '@nestjs/common/utils/shared.utils'; -import { ClassType } from '../enums/class-type.enum'; -import { ResolveTypeFn } from '../interfaces'; -import { RegisterInOption } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; +import { ClassType } from '../enums/class-type.enum.js'; +import { ResolveTypeFn } from '../interfaces/index.js'; +import { RegisterInOption } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util.js'; /** * Interface defining options that can be passed to `@InterfaceType()` decorator. diff --git a/packages/graphql/lib/decorators/mutation.decorator.ts b/packages/graphql/lib/decorators/mutation.decorator.ts index 729f155bd..0a50efd0d 100644 --- a/packages/graphql/lib/decorators/mutation.decorator.ts +++ b/packages/graphql/lib/decorators/mutation.decorator.ts @@ -1,16 +1,16 @@ import { Type } from '@nestjs/common'; -import { isString } from '@nestjs/common/utils/shared.utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { Resolver } from '../enums/resolver.enum'; -import { Complexity } from '../interfaces'; -import { BaseTypeOptions } from '../interfaces/base-type-options.interface'; -import { ReturnTypeFunc } from '../interfaces/return-type-func.interface'; -import { UndefinedReturnTypeError } from '../schema-builder/errors/undefined-return-type.error'; -import { ResolverTypeMetadata } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { reflectTypeFromMetadata } from '../utils/reflection.utilts'; -import { addResolverMetadata } from './resolvers.utils'; +import { Resolver } from '../enums/resolver.enum.js'; +import { Complexity } from '../interfaces/index.js'; +import { BaseTypeOptions } from '../interfaces/base-type-options.interface.js'; +import { ReturnTypeFunc } from '../interfaces/return-type-func.interface.js'; +import { UndefinedReturnTypeError } from '../schema-builder/errors/undefined-return-type.error.js'; +import { ResolverTypeMetadata } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { reflectTypeFromMetadata } from '../utils/reflection.utilts.js'; +import { addResolverMetadata } from './resolvers.utils.js'; /** * Interface defining options that can be passed to `@Mutation()` decorator. diff --git a/packages/graphql/lib/decorators/object-type.decorator.ts b/packages/graphql/lib/decorators/object-type.decorator.ts index 83b68ceb6..ea68c2cf4 100644 --- a/packages/graphql/lib/decorators/object-type.decorator.ts +++ b/packages/graphql/lib/decorators/object-type.decorator.ts @@ -5,12 +5,12 @@ * To avoid numerous breaking changes, the public API is backward-compatible and may resemble "type-graphql". */ -import { isString } from '@nestjs/common/utils/shared.utils'; -import { ClassType } from '../enums/class-type.enum'; -import { RegisterInOption } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; +import { ClassType } from '../enums/class-type.enum.js'; +import { RegisterInOption } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { addClassTypeMetadata } from '../utils/add-class-type-metadata.util.js'; /** * Interface defining options that can be passed to `@ObjectType()` decorator @@ -88,7 +88,7 @@ export function ObjectType( name: name || target.name, target, description: parentType?.inheritDescription - ? (options.description ?? parentType?.description) + ? options.description ?? parentType?.description : options.description, interfaces: options.implements, isAbstract: options.isAbstract, diff --git a/packages/graphql/lib/decorators/param.utils.ts b/packages/graphql/lib/decorators/param.utils.ts index 9874e202f..644e2791e 100644 --- a/packages/graphql/lib/decorators/param.utils.ts +++ b/packages/graphql/lib/decorators/param.utils.ts @@ -1,8 +1,8 @@ import { PipeTransform, Type } from '@nestjs/common'; -import { isNil, isString } from '@nestjs/common/utils/shared.utils'; +import { isNil, isString } from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { PARAM_ARGS_METADATA } from '../graphql.constants'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { PARAM_ARGS_METADATA } from '../graphql.constants.js'; export type ParamData = object | string | number; export type ParamsMetadata = Record< diff --git a/packages/graphql/lib/decorators/parent.decorator.ts b/packages/graphql/lib/decorators/parent.decorator.ts index 32ce801bc..0b9246714 100644 --- a/packages/graphql/lib/decorators/parent.decorator.ts +++ b/packages/graphql/lib/decorators/parent.decorator.ts @@ -1,5 +1,5 @@ -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { createGqlParamDecorator } from './param.utils'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { createGqlParamDecorator } from './param.utils.js'; /** * Resolver method parameter decorator. Extracts the parent/root diff --git a/packages/graphql/lib/decorators/query.decorator.ts b/packages/graphql/lib/decorators/query.decorator.ts index dfa1dfa06..e4880e36c 100644 --- a/packages/graphql/lib/decorators/query.decorator.ts +++ b/packages/graphql/lib/decorators/query.decorator.ts @@ -1,16 +1,16 @@ import { Type } from '@nestjs/common'; -import { isString } from '@nestjs/common/utils/shared.utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { Resolver } from '../enums/resolver.enum'; -import { Complexity } from '../interfaces'; -import { BaseTypeOptions } from '../interfaces/base-type-options.interface'; -import { ReturnTypeFunc } from '../interfaces/return-type-func.interface'; -import { UndefinedReturnTypeError } from '../schema-builder/errors/undefined-return-type.error'; -import { ResolverTypeMetadata } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { reflectTypeFromMetadata } from '../utils/reflection.utilts'; -import { addResolverMetadata } from './resolvers.utils'; +import { Resolver } from '../enums/resolver.enum.js'; +import { Complexity } from '../interfaces/index.js'; +import { BaseTypeOptions } from '../interfaces/base-type-options.interface.js'; +import { ReturnTypeFunc } from '../interfaces/return-type-func.interface.js'; +import { UndefinedReturnTypeError } from '../schema-builder/errors/undefined-return-type.error.js'; +import { ResolverTypeMetadata } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { reflectTypeFromMetadata } from '../utils/reflection.utilts.js'; +import { addResolverMetadata } from './resolvers.utils.js'; /** * Interface defining options that can be passed to `@Query()` decorator. diff --git a/packages/graphql/lib/decorators/resolve-field.decorator.ts b/packages/graphql/lib/decorators/resolve-field.decorator.ts index 831d71648..6020d5023 100644 --- a/packages/graphql/lib/decorators/resolve-field.decorator.ts +++ b/packages/graphql/lib/decorators/resolve-field.decorator.ts @@ -3,22 +3,22 @@ import { isFunction, isObject, isString, -} from '@nestjs/common/utils/shared.utils'; +} from '@nestjs/common/utils/shared.utils.js'; import { FIELD_RESOLVER_MIDDLEWARE_METADATA, RESOLVER_NAME_METADATA, RESOLVER_PROPERTY_METADATA, -} from '../graphql.constants'; -import { Complexity, FieldMiddleware } from '../interfaces'; -import { BaseTypeOptions } from '../interfaces/base-type-options.interface'; +} from '../graphql.constants.js'; +import { Complexity, FieldMiddleware } from '../interfaces/index.js'; +import { BaseTypeOptions } from '../interfaces/base-type-options.interface.js'; import { GqlTypeReference, ReturnTypeFunc, -} from '../interfaces/return-type-func.interface'; -import { TypeOptions } from '../interfaces/type-options.interface'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { reflectTypeFromMetadata } from '../utils/reflection.utilts'; +} from '../interfaces/return-type-func.interface.js'; +import { TypeOptions } from '../interfaces/type-options.interface.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { reflectTypeFromMetadata } from '../utils/reflection.utilts.js'; /** * Interface defining options that can be passed to `@ResolveField()` decorator. @@ -53,10 +53,25 @@ export type ResolveFieldOptions = BaseTypeOptions & { * * @publicApi */ +export function ResolveField(options?: ResolveFieldOptions): MethodDecorator; +/** + * Property resolver (method) Decorator. + * + * @publicApi + */ export function ResolveField( typeFunc?: ReturnTypeFunc, options?: ResolveFieldOptions, ): MethodDecorator; +/** + * Property resolver (method) Decorator. + * + * @publicApi + */ +export function ResolveField( + propertyName?: string, + options?: ResolveFieldOptions, +): MethodDecorator; /** * Property resolver (method) Decorator. * @@ -73,7 +88,7 @@ export function ResolveField( * @publicApi */ export function ResolveField( - propertyNameOrFunc?: string | ReturnTypeFunc, + propertyNameOrFunc?: string | ReturnTypeFunc | ResolveFieldOptions, typeFuncOrOptions?: ReturnTypeFunc | ResolveFieldOptions, resolveFieldOptions?: ResolveFieldOptions, ): MethodDecorator { diff --git a/packages/graphql/lib/decorators/resolve-property.decorator.ts b/packages/graphql/lib/decorators/resolve-property.decorator.ts index aa7af4022..6ec96c385 100644 --- a/packages/graphql/lib/decorators/resolve-property.decorator.ts +++ b/packages/graphql/lib/decorators/resolve-property.decorator.ts @@ -1,6 +1,9 @@ import { Logger } from '@nestjs/common'; -import { ReturnTypeFunc } from '../interfaces/return-type-func.interface'; -import { ResolveField, ResolveFieldOptions } from './resolve-field.decorator'; +import { ReturnTypeFunc } from '../interfaces/return-type-func.interface.js'; +import { + ResolveField, + ResolveFieldOptions, +} from './resolve-field.decorator.js'; const logger = new Logger('GraphQLModule'); diff --git a/packages/graphql/lib/decorators/resolve-reference.decorator.ts b/packages/graphql/lib/decorators/resolve-reference.decorator.ts index 233a5374c..ee9b6dc1f 100644 --- a/packages/graphql/lib/decorators/resolve-reference.decorator.ts +++ b/packages/graphql/lib/decorators/resolve-reference.decorator.ts @@ -1,5 +1,5 @@ import { SetMetadata } from '@nestjs/common'; -import { RESOLVER_REFERENCE_METADATA } from '../graphql.constants'; +import { RESOLVER_REFERENCE_METADATA } from '../graphql.constants.js'; /** * Property reference resolver (method) Decorator. diff --git a/packages/graphql/lib/decorators/resolver.decorator.ts b/packages/graphql/lib/decorators/resolver.decorator.ts index 33d740d03..721dec52c 100644 --- a/packages/graphql/lib/decorators/resolver.decorator.ts +++ b/packages/graphql/lib/decorators/resolver.decorator.ts @@ -1,15 +1,15 @@ import { SetMetadata, Type } from '@nestjs/common'; -import { ENTRY_PROVIDER_WATERMARK } from '@nestjs/common/constants'; -import { isFunction, isString } from '@nestjs/common/utils/shared.utils'; +import { ENTRY_PROVIDER_WATERMARK } from '@nestjs/common/constants.js'; +import { isFunction, isString } from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; import { addResolverMetadata, getClassName, getClassOrUndefined, getResolverTypeFn, -} from './resolvers.utils'; +} from './resolvers.utils.js'; export type ResolverTypeFn = (of?: void) => Function; diff --git a/packages/graphql/lib/decorators/resolvers.utils.ts b/packages/graphql/lib/decorators/resolvers.utils.ts index ac44bac1e..18e25bbf1 100644 --- a/packages/graphql/lib/decorators/resolvers.utils.ts +++ b/packages/graphql/lib/decorators/resolvers.utils.ts @@ -1,12 +1,12 @@ import { SetMetadata, Type } from '@nestjs/common'; -import { isFunction, isString } from '@nestjs/common/utils/shared.utils'; -import { Resolver } from '../enums/resolver.enum'; +import { isFunction, isString } from '@nestjs/common/utils/shared.utils.js'; +import { Resolver } from '../enums/resolver.enum.js'; import { RESOLVER_NAME_METADATA, RESOLVER_TYPE_METADATA, -} from '../graphql.constants'; -import { UndefinedResolverTypeError } from '../schema-builder/errors/undefined-resolver-type.error'; -import { ResolverTypeFn } from './resolver.decorator'; +} from '../graphql.constants.js'; +import { UndefinedResolverTypeError } from '../schema-builder/errors/undefined-resolver-type.error.js'; +import { ResolverTypeFn } from './resolver.decorator.js'; export function addResolverMetadata( resolver: Resolver | string | undefined, @@ -45,8 +45,8 @@ export function getClassOrUndefined(typeOrFunc: Function | Type) { return isConstructor(typeOrFunc) ? typeOrFunc : isFunction(typeOrFunc) - ? (typeOrFunc as Function)() - : undefined; + ? (typeOrFunc as Function)() + : undefined; } function isConstructor(obj: any) { diff --git a/packages/graphql/lib/decorators/root.decorator.ts b/packages/graphql/lib/decorators/root.decorator.ts index b6dbc23ab..d9e705225 100644 --- a/packages/graphql/lib/decorators/root.decorator.ts +++ b/packages/graphql/lib/decorators/root.decorator.ts @@ -1,5 +1,5 @@ -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { createGqlParamDecorator } from './param.utils'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { createGqlParamDecorator } from './param.utils.js'; /** * Resolver method parameter decorator. Extracts the parent/root diff --git a/packages/graphql/lib/decorators/scalar.decorator.ts b/packages/graphql/lib/decorators/scalar.decorator.ts index 40dc2f577..05a1475e6 100644 --- a/packages/graphql/lib/decorators/scalar.decorator.ts +++ b/packages/graphql/lib/decorators/scalar.decorator.ts @@ -2,8 +2,8 @@ import { SetMetadata } from '@nestjs/common'; import { SCALAR_NAME_METADATA, SCALAR_TYPE_METADATA, -} from '../graphql.constants'; -import { ReturnTypeFunc } from '../interfaces/return-type-func.interface'; +} from '../graphql.constants.js'; +import { ReturnTypeFunc } from '../interfaces/return-type-func.interface.js'; /** * Decorator that marks a class as a GraphQL scalar. diff --git a/packages/graphql/lib/decorators/subscription.decorator.ts b/packages/graphql/lib/decorators/subscription.decorator.ts index e67f5d10a..82a973968 100644 --- a/packages/graphql/lib/decorators/subscription.decorator.ts +++ b/packages/graphql/lib/decorators/subscription.decorator.ts @@ -1,15 +1,15 @@ import { SetMetadata, Type } from '@nestjs/common'; -import { isString } from '@nestjs/common/utils/shared.utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; import 'reflect-metadata'; -import { Resolver } from '../enums/resolver.enum'; -import { SUBSCRIPTION_OPTIONS_METADATA } from '../graphql.constants'; -import { BaseTypeOptions, ReturnTypeFunc } from '../interfaces'; -import { UndefinedReturnTypeError } from '../schema-builder/errors/undefined-return-type.error'; -import { ResolverTypeMetadata } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; -import { reflectTypeFromMetadata } from '../utils/reflection.utilts'; -import { addResolverMetadata } from './resolvers.utils'; +import { Resolver } from '../enums/resolver.enum.js'; +import { SUBSCRIPTION_OPTIONS_METADATA } from '../graphql.constants.js'; +import { BaseTypeOptions, ReturnTypeFunc } from '../interfaces/index.js'; +import { UndefinedReturnTypeError } from '../schema-builder/errors/undefined-return-type.error.js'; +import { ResolverTypeMetadata } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; +import { reflectTypeFromMetadata } from '../utils/reflection.utilts.js'; +import { addResolverMetadata } from './resolvers.utils.js'; /** * Interface defining options that can be passed to `@Subscription()` decorator. diff --git a/packages/graphql/lib/drivers/abstract-graphql.driver.ts b/packages/graphql/lib/drivers/abstract-graphql.driver.ts index 2c161e727..87797d7ee 100644 --- a/packages/graphql/lib/drivers/abstract-graphql.driver.ts +++ b/packages/graphql/lib/drivers/abstract-graphql.driver.ts @@ -1,9 +1,9 @@ import { Inject } from '@nestjs/common'; import { ApplicationConfig, HttpAdapterHost } from '@nestjs/core'; import { GraphQLSchema } from 'graphql'; -import { GraphQLFactory } from '../graphql.factory'; -import { GqlModuleOptions, GraphQLDriver } from '../interfaces'; -import { normalizeRoutePath } from '../utils'; +import { GraphQLFactory } from '../graphql.factory.js'; +import { GqlModuleOptions, GraphQLDriver } from '../interfaces/index.js'; +import { normalizeRoutePath } from '../utils/index.js'; /** * @publicApi @@ -57,11 +57,15 @@ export abstract class AbstractGraphQLDriver< } protected getNormalizedPath(options: TOptions): string { + return this.applyGlobalPrefix(options.path, options); + } + + protected applyGlobalPrefix(path: string, options: TOptions): string { const prefix = this.applicationConfig?.getGlobalPrefix() ?? ''; const useGlobalPrefix = prefix && options.useGlobalPrefix; - const gqlOptionsPath = normalizeRoutePath(options.path); + const normalizedPath = normalizeRoutePath(path); return useGlobalPrefix - ? normalizeRoutePath(prefix) + gqlOptionsPath - : gqlOptionsPath; + ? normalizeRoutePath(prefix) + normalizedPath + : normalizedPath; } } diff --git a/packages/graphql/lib/drivers/index.ts b/packages/graphql/lib/drivers/index.ts index 1eeeb7734..f35eb49d0 100644 --- a/packages/graphql/lib/drivers/index.ts +++ b/packages/graphql/lib/drivers/index.ts @@ -1 +1 @@ -export * from './abstract-graphql.driver'; +export * from './abstract-graphql.driver.js'; diff --git a/packages/graphql/lib/extra/graphql-model-shim.ts b/packages/graphql/lib/extra/graphql-model-shim.ts index 6b176852a..077276a02 100644 --- a/packages/graphql/lib/extra/graphql-model-shim.ts +++ b/packages/graphql/lib/extra/graphql-model-shim.ts @@ -11,8 +11,8 @@ import { InterfaceTypeOptions, ObjectTypeOptions, ReturnTypeFunc, -} from '..'; -import * as typeFactories from '../type-factories'; +} from '../index.js'; +import * as typeFactories from '../type-factories/index.js'; // If the conditional export cannot be leveraged (older bundler, custom setup), // the shim can still be aliased manually, for example with webpack: diff --git a/packages/graphql/lib/factories/params.factory.ts b/packages/graphql/lib/factories/params.factory.ts index d9e29dff6..41ea4deaa 100644 --- a/packages/graphql/lib/factories/params.factory.ts +++ b/packages/graphql/lib/factories/params.factory.ts @@ -1,7 +1,7 @@ import { ParamData } from '@nestjs/common'; -import { ParamsFactory } from '@nestjs/core/helpers/external-context-creator'; -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { normalizeResolverArgs } from '../utils/normalize-resolver-args'; +import { ParamsFactory } from '@nestjs/core/helpers/external-context-creator.js'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { normalizeResolverArgs } from '../utils/normalize-resolver-args.js'; /** * @publicApi diff --git a/packages/graphql/lib/federation/graphql-federation-definitions.factory.ts b/packages/graphql/lib/federation/graphql-federation-definitions.factory.ts index 0e2bd088d..bf55b1159 100644 --- a/packages/graphql/lib/federation/graphql-federation-definitions.factory.ts +++ b/packages/graphql/lib/federation/graphql-federation-definitions.factory.ts @@ -1,9 +1,9 @@ -import { loadPackage } from '@nestjs/common/utils/load-package.util'; -import { gql } from 'graphql-tag'; -import { DefinitionsGeneratorOptions } from '../graphql-ast.explorer'; -import { GraphQLDefinitionsFactory } from '../graphql-definitions.factory'; -import { extend } from '../utils'; import { mergeTypeDefs } from '@graphql-tools/merge'; +import { loadPackage } from '@nestjs/common/utils/load-package.util.js'; +import { gql } from 'graphql-tag'; +import { DefinitionsGeneratorOptions } from '../graphql-ast.explorer.js'; +import { GraphQLDefinitionsFactory } from '../graphql-definitions.factory.js'; +import { extend } from '../utils/index.js'; /** * @publicApi @@ -20,12 +20,10 @@ export class GraphQLFederationDefinitionsFactory extends GraphQLDefinitionsFacto const typePathDefs = await this.gqlTypesLoader.mergeTypesByPaths(typePaths); const mergedTypeDefs = extend(typePathDefs, typeDefs); - const { buildSubgraphSchema }: typeof import('@apollo/subgraph') = - loadPackage('@apollo/subgraph', 'ApolloFederation', () => - require('@apollo/subgraph'), - ); - - const { printSubgraphSchema } = loadPackage( + const { + buildSubgraphSchema, + printSubgraphSchema, + }: typeof import('@apollo/subgraph') = await loadPackage( '@apollo/subgraph', 'ApolloFederation', () => require('@apollo/subgraph'), diff --git a/packages/graphql/lib/federation/graphql-federation.factory.ts b/packages/graphql/lib/federation/graphql-federation.factory.ts index bfa08faa1..ecea8fb19 100644 --- a/packages/graphql/lib/federation/graphql-federation.factory.ts +++ b/packages/graphql/lib/federation/graphql-federation.factory.ts @@ -1,8 +1,11 @@ import { mergeSchemas, addResolversToSchema } from '@graphql-tools/schema'; import { printSchemaWithDirectives } from '@graphql-tools/utils'; import { Injectable } from '@nestjs/common'; -import { loadPackage } from '@nestjs/common/utils/load-package.util'; -import { isString } from '@nestjs/common/utils/shared.utils'; +import { + loadPackage, + loadPackageSync, +} from '@nestjs/common/utils/load-package.util.js'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLAbstractType, GraphQLField, @@ -23,19 +26,21 @@ import { specifiedDirectives, } from 'graphql'; import { gql } from 'graphql-tag'; -import { forEach, isEmpty } from 'lodash'; -import { GraphQLSchemaBuilder } from '../graphql-schema.builder'; +import { GraphQLSchemaBuilder } from '../graphql-schema.builder.js'; import { AutoSchemaFileValue, BuildFederatedSchemaOptions, FederationConfig, FederationVersion, GqlModuleOptions, -} from '../interfaces'; -import { ResolversExplorerService, ScalarsExplorerService } from '../services'; -import { extend } from '../utils'; -import { transformSchema } from '../utils/transform-schema.util'; -import { TypeDefsDecoratorFactory } from './type-defs-decorator.factory'; +} from '../interfaces/index.js'; +import { + ResolversExplorerService, + ScalarsExplorerService, +} from '../services/index.js'; +import { extend } from '../utils/index.js'; +import { transformSchema } from '../utils/transform-schema.util.js'; +import { TypeDefsDecoratorFactory } from './type-defs-decorator.factory.js'; const DEFAULT_FEDERATION_VERSION: FederationVersion = 1; @@ -66,18 +71,20 @@ export class GraphQLFederationFactory { options, buildFederatedSchema, ); - } else if (isEmpty(options.typeDefs)) { + } else if (this.isEmptyValue(options.typeDefs)) { schema = options.schema; } else { - schema = this.buildSchemaFromTypeDefs(options); + schema = await this.buildSchemaFromTypeDefs(options); } return await transformSchema(schema); } - private buildSchemaFromTypeDefs(options: T) { + private async buildSchemaFromTypeDefs( + options: T, + ) { const { buildSubgraphSchema }: typeof import('@apollo/subgraph') = - loadPackage('@apollo/subgraph', 'ApolloFederation', () => + await loadPackage('@apollo/subgraph', 'ApolloFederation', () => require('@apollo/subgraph'), ); @@ -103,13 +110,15 @@ export class GraphQLFederationFactory { options: BuildFederatedSchemaOptions, ) => GraphQLSchema, ): Promise { - const apolloSubgraph = loadPackage( + const apolloSubgraph = await loadPackage( '@apollo/subgraph', 'ApolloFederation', () => require('@apollo/subgraph'), ); const apolloSubgraphVersion = ( - await import('@apollo/subgraph/package.json') + (await import('@apollo/subgraph/package.json')).default as { + version: string; + } ).version; const apolloSubgraphMajorVersion = Number( @@ -203,14 +212,16 @@ export class GraphQLFederationFactory { return type; } const fields = type.getFields(); - forEach(fields, (value: GraphQLInputField, key: string) => { - const field = autoGeneratedInputType.getFields()[key]; - if (!field) { - return; - } - value.extensions = field.extensions; - value.astNode = field.astNode; - }); + Object.entries(fields).forEach( + ([key, value]: [string, GraphQLInputField]) => { + const field = autoGeneratedInputType.getFields()[key]; + if (!field) { + return; + } + value.extensions = field.extensions; + value.astNode = field.astNode; + }, + ); type.extensions = autoGeneratedInputType.extensions; return type; } else if (isObjectType(type)) { @@ -222,9 +233,8 @@ export class GraphQLFederationFactory { return type; } const fields = type.getFields(); - forEach( - fields, - (value: GraphQLField, key: string) => { + Object.entries(fields).forEach( + ([key, value]: [string, GraphQLField]) => { const field = autoGeneratedObjectType.getFields()[key]; if (!field) { return; @@ -360,6 +370,7 @@ export class GraphQLFederationFactory { }, options.sortSchema, options.transformAutoSchemaFile && options.transformSchema, + await this.getFederationSchemaPrinter(), ); } catch (err) { if (err && err.details) { @@ -369,6 +380,27 @@ export class GraphQLFederationFactory { } } + private async getFederationSchemaPrinter(): Promise< + (schema: GraphQLSchema) => string + > { + const apolloSubgraph = await loadPackage( + '@apollo/subgraph', + 'ApolloFederation', + () => require('@apollo/subgraph'), + ); + const apolloSubgraphVersion = ( + (await import('@apollo/subgraph/package.json')).default as { + version: string; + } + ).version; + const apolloSubgraphMajorVersion = Number( + apolloSubgraphVersion.split('.')[0], + ); + return apolloSubgraphMajorVersion >= 2 + ? (schema) => printSchemaWithDirectives(schema) + : apolloSubgraph.printSubgraphSchema; + } + private getFederationVersionAndConfig( autoSchemaFile: AutoSchemaFileValue, ): [FederationVersion, FederationConfig?] { @@ -386,9 +418,19 @@ export class GraphQLFederationFactory { private loadFederationDirectives() { const { federationDirectives, directivesWithNoDefinitionNeeded } = - loadPackage('@apollo/subgraph/dist/directives', 'SchemaBuilder', () => + loadPackageSync('@apollo/subgraph/dist/directives', 'SchemaBuilder', () => require('@apollo/subgraph/dist/directives'), ); return federationDirectives ?? directivesWithNoDefinitionNeeded; } + + private isEmptyValue(value: unknown) { + if (value == null) { + return true; + } + if (Array.isArray(value) || typeof value === 'string') { + return value.length === 0; + } + return false; + } } diff --git a/packages/graphql/lib/federation/index.ts b/packages/graphql/lib/federation/index.ts index 3edc12513..dce993ece 100644 --- a/packages/graphql/lib/federation/index.ts +++ b/packages/graphql/lib/federation/index.ts @@ -1,2 +1,2 @@ -export * from './graphql-federation-definitions.factory'; -export * from './graphql-federation.factory'; +export * from './graphql-federation-definitions.factory.js'; +export * from './graphql-federation.factory.js'; diff --git a/packages/graphql/lib/federation/type-defs-decorator.factory.ts b/packages/graphql/lib/federation/type-defs-decorator.factory.ts index 8b998a2f2..011036ff7 100644 --- a/packages/graphql/lib/federation/type-defs-decorator.factory.ts +++ b/packages/graphql/lib/federation/type-defs-decorator.factory.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; -import { FederationConfig, FederationVersion } from '../interfaces'; -import { TypeDefsFederation2Decorator } from './type-defs-federation2.decorator'; +import { FederationConfig, FederationVersion } from '../interfaces/index.js'; +import { TypeDefsFederation2Decorator } from './type-defs-federation2.decorator.js'; export interface TypeDefsDecorator { decorate(typeDefs: string, options: T): string; diff --git a/packages/graphql/lib/federation/type-defs-federation2.decorator.ts b/packages/graphql/lib/federation/type-defs-federation2.decorator.ts index 71a8b5b47..1da60d406 100644 --- a/packages/graphql/lib/federation/type-defs-federation2.decorator.ts +++ b/packages/graphql/lib/federation/type-defs-federation2.decorator.ts @@ -1,6 +1,6 @@ -import { isString } from '@nestjs/common/utils/shared.utils'; -import { Federation2Config } from '../interfaces'; -import { stringifyWithoutQuotes } from '../utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; +import { Federation2Config } from '../interfaces/index.js'; +import { stringifyWithoutQuotes } from '../utils/index.js'; /** * @publicApi diff --git a/packages/graphql/lib/graphql-ast.explorer.ts b/packages/graphql/lib/graphql-ast.explorer.ts index ddb52dde3..fd440d84f 100644 --- a/packages/graphql/lib/graphql-ast.explorer.ts +++ b/packages/graphql/lib/graphql-ast.explorer.ts @@ -1,4 +1,5 @@ import { Injectable } from '@nestjs/common'; +import { upperFirst } from 'es-toolkit'; import { DocumentNode, EnumTypeDefinitionNode, @@ -20,7 +21,6 @@ import { UnionTypeDefinitionNode, UnionTypeExtensionNode, } from 'graphql'; -import { get, map, sortBy, upperFirst } from 'lodash'; import type { ClassDeclarationStructure, EnumDeclarationStructure, @@ -34,10 +34,18 @@ import type { SourceFile, TypeAliasDeclarationStructure, } from 'ts-morph'; -import { DEFINITIONS_FILE_HEADER } from './graphql.constants'; +import { DEFINITIONS_FILE_HEADER } from './graphql.constants.js'; let tsMorphLib: typeof import('ts-morph') | undefined; +function getNodeName(node: any): string | undefined { + return node?.name?.value; +} + +function getNestedTypeNode(node: any): TypeNode | undefined { + return node?.type; +} + export interface DefinitionsGeneratorOptions { /** * If true, the additional "__typename" field is generated for every object type. @@ -120,7 +128,9 @@ export class GraphQLAstExplorer { }); let { definitions } = documentNode; - definitions = sortBy(definitions, ['kind', 'name']); + definitions = [...definitions].sort((left, right) => + left.kind.localeCompare(right.kind), + ); const fileStructure = tsFile.getStructure(); @@ -200,7 +210,7 @@ export class GraphQLAstExplorer { .filter(Boolean) .map((item) => { const tempOperationName = item.operation; - const typeName = get(item, 'type.name.value'); + const typeName = getNodeName(item.type); const interfaceName = typeName || tempOperationName; return { name: interfaceName, @@ -228,7 +238,7 @@ export class GraphQLAstExplorer { mode: 'class' | 'interface', options: DefinitionsGeneratorOptions, ): ClassDeclarationStructure | InterfaceDeclarationStructure { - const parentName = get(item, 'name.value'); + const parentName = getNodeName(item); if (!parentName) { return; } @@ -252,12 +262,12 @@ export class GraphQLAstExplorer { methods: [], }; - const interfaces = get(item, 'interfaces'); - if (interfaces) { + const interfaces = 'interfaces' in item ? item.interfaces ?? [] : []; + if (interfaces.length > 0) { if (mode === 'class') { (parentStructure as ClassDeclarationStructure).implements = interfaces .map((element) => { - const interfaceName = get(element, 'name.value'); + const interfaceName = getNodeName(element); return interfaceName ? this.getTransformedTypeName(interfaceName, options) : null; @@ -266,7 +276,7 @@ export class GraphQLAstExplorer { } else { parentStructure.extends = interfaces .map((element) => { - const interfaceName = get(element, 'name.value'); + const interfaceName = getNodeName(element); return interfaceName ? this.getTransformedTypeName(interfaceName, options) : null; @@ -319,7 +329,7 @@ export class GraphQLAstExplorer { options: DefinitionsGeneratorOptions, ): OptionalKind & OptionalKind { - const propertyName = get(item, 'name.value'); + const propertyName = getNodeName(item); if (!propertyName) { return undefined; } @@ -336,8 +346,7 @@ export class GraphQLAstExplorer { return { name: propertyName, type: this.addSymbolIfRoot(type), - hasQuestionToken: - !required || (item as FieldDefinitionNode).arguments?.length > 0, + hasQuestionToken: !required, }; } @@ -347,7 +356,7 @@ export class GraphQLAstExplorer { options: DefinitionsGeneratorOptions, ): OptionalKind & OptionalKind { - const propertyName = get(item, 'name.value'); + const propertyName = getNodeName(item); if (!propertyName) { return; } @@ -381,12 +390,15 @@ export class GraphQLAstExplorer { const isArray = type.kind === 'ListType'; if (isArray) { - const arrayType = get(type, 'type'); + const arrayType = getNestedTypeNode(type); + if (!arrayType) { + return 'unknown'; + } return required ? `${stringifyType(arrayType)}[]` : `Nullable<${stringifyType(arrayType)}[]>`; } - const typeName = this.addSymbolIfRoot(get(type, 'name.value')); + const typeName = this.addSymbolIfRoot(getNodeName(type) ?? 'unknown'); return required ? this.getType(typeName, options) : `Nullable<${this.getType(typeName, options)}>`; @@ -405,8 +417,9 @@ export class GraphQLAstExplorer { } { const isNonNullType = type.kind === 'NonNullType'; if (isNonNullType) { + const nestedType = getNestedTypeNode(type); return { - type: this.unwrapTypeIfNonNull(get(type, 'type')).type, + type: nestedType ? this.unwrapTypeIfNonNull(nestedType).type : type, required: isNonNullType, }; } @@ -442,25 +455,31 @@ export class GraphQLAstExplorer { if (!inputs) { return []; } - return inputs.map((element) => { - const { name, required } = this.getFieldTypeDefinition( - element.type, - options, - ); - return { - name: get(element, 'name.value'), - type: name, - hasQuestionToken: !required, - kind: tsMorphLib.StructureKind.Parameter, - }; - }); + return inputs + .map((element) => { + const { name, required } = this.getFieldTypeDefinition( + element.type, + options, + ); + const elementName = getNodeName(element); + if (!elementName) { + return undefined; + } + return { + name: elementName, + type: name, + hasQuestionToken: !required, + kind: tsMorphLib.StructureKind.Parameter, + }; + }) + .filter(Boolean) as ParameterDeclarationStructure[]; } toScalarDefinitionStructure( item: ScalarTypeDefinitionNode | ScalarTypeExtensionNode, options: DefinitionsGeneratorOptions, ): TypeAliasDeclarationStructure { - const name = get(item, 'name.value'); + const name = getNodeName(item); if (!name || name === 'Date') { return undefined; } @@ -483,16 +502,14 @@ export class GraphQLAstExplorer { item: EnumTypeDefinitionNode | EnumTypeExtensionNode, options: DefinitionsGeneratorOptions, ): TypeAliasDeclarationStructure | EnumDeclarationStructure { - const name = get(item, 'name.value'); + const name = getNodeName(item); if (!name) { return undefined; } const transformedName = this.getTransformedTypeName(name, options); if (options.enumsAsTypes) { - const values = item.values.map( - (value) => `"${get(value, 'name.value')}"`, - ); + const values = item.values.map((value) => `"${getNodeName(value)}"`); return { kind: tsMorphLib.StructureKind.TypeAlias, name: transformedName, @@ -500,9 +517,9 @@ export class GraphQLAstExplorer { isExported: true, }; } - const members = map(item.values, (value) => ({ - name: get(value, 'name.value'), - value: get(value, 'name.value'), + const members = item.values.map((value) => ({ + name: getNodeName(value), + value: getNodeName(value), })); return { kind: tsMorphLib.StructureKind.Enum, @@ -516,16 +533,18 @@ export class GraphQLAstExplorer { item: UnionTypeDefinitionNode | UnionTypeExtensionNode, options: DefinitionsGeneratorOptions, ): TypeAliasDeclarationStructure { - const name = get(item, 'name.value'); + const name = getNodeName(item); if (!name) { return undefined; } const transformedName = this.getTransformedTypeName(name, options); - const types: string[] = map(item.types, (value) => { - const typeName = get(value, 'name.value'); - return typeName ? this.getTransformedTypeName(typeName, options) : null; - }).filter(Boolean); + const types: string[] = item.types + .map((value) => { + const typeName = getNodeName(value); + return typeName ? this.getTransformedTypeName(typeName, options) : null; + }) + .filter(Boolean) as string[]; return { kind: tsMorphLib.StructureKind.TypeAlias, diff --git a/packages/graphql/lib/graphql-definitions.factory.ts b/packages/graphql/lib/graphql-definitions.factory.ts index e4190181a..c82c9a6ef 100644 --- a/packages/graphql/lib/graphql-definitions.factory.ts +++ b/packages/graphql/lib/graphql-definitions.factory.ts @@ -1,15 +1,15 @@ import { makeExecutableSchema } from '@graphql-tools/schema'; -import { isEmpty } from '@nestjs/common/utils/shared.utils'; +import { isEmpty } from '@nestjs/common/utils/shared.utils.js'; import chokidar from 'chokidar'; -import { glob } from 'fast-glob'; +import glob from 'fast-glob'; import { printSchema } from 'graphql'; import { gql } from 'graphql-tag'; import { DefinitionsGeneratorOptions, GraphQLAstExplorer, -} from './graphql-ast.explorer'; -import { GraphQLTypesLoader } from './graphql-types.loader'; -import { extend, removeTempField } from './utils'; +} from './graphql-ast.explorer.js'; +import { GraphQLTypesLoader } from './graphql-types.loader.js'; +import { extend, removeTempField } from './utils/index.js'; export type GenerateOptions = DefinitionsGeneratorOptions & { typePaths: string[]; diff --git a/packages/graphql/lib/graphql-schema.builder.ts b/packages/graphql/lib/graphql-schema.builder.ts index db9daa69d..4ee8e399a 100644 --- a/packages/graphql/lib/graphql-schema.builder.ts +++ b/packages/graphql/lib/graphql-schema.builder.ts @@ -1,17 +1,17 @@ import { Injectable } from '@nestjs/common'; -import { isString } from '@nestjs/common/utils/shared.utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLSchema, lexicographicSortSchema, printSchema } from 'graphql'; import { resolve } from 'path'; import { GRAPHQL_SDL_FILE_HEADER, GRAPHQL_SDL_FILE_END, -} from './graphql.constants'; -import { AutoSchemaFileValue, GqlModuleOptions } from './interfaces'; -import { BuildSchemaOptions } from './interfaces/build-schema-options.interface'; -import { GraphQLSchemaFactory } from './schema-builder/graphql-schema.factory'; -import { FileSystemHelper } from './schema-builder/helpers/file-system.helper'; -import { ScalarsExplorerService } from './services'; -import { getPathForAutoSchemaFile } from './utils'; +} from './graphql.constants.js'; +import { AutoSchemaFileValue, GqlModuleOptions } from './interfaces/index.js'; +import { BuildSchemaOptions } from './interfaces/build-schema-options.interface.js'; +import { GraphQLSchemaFactory } from './schema-builder/graphql-schema.factory.js'; +import { FileSystemHelper } from './schema-builder/helpers/file-system.helper.js'; +import { ScalarsExplorerService } from './services/index.js'; +import { getPathForAutoSchemaFile } from './utils/index.js'; @Injectable() export class GraphQLSchemaBuilder { @@ -66,6 +66,7 @@ export class GraphQLSchemaBuilder { transformSchema?: ( schema: GraphQLSchema, ) => GraphQLSchema | Promise, + printSchemaFn?: (schema: GraphQLSchema) => string, ): Promise { const schema = await this.gqlSchemaFactory.create(resolvers, options); const filename = getPathForAutoSchemaFile(autoSchemaFile); @@ -74,13 +75,11 @@ export class GraphQLSchemaBuilder { const transformedSchema = transformSchema ? await transformSchema(schema) : schema; - let fileContent = - GRAPHQL_SDL_FILE_HEADER + - printSchema( - sortSchema - ? lexicographicSortSchema(transformedSchema) - : transformedSchema, - ); + const finalSchema = sortSchema + ? lexicographicSortSchema(transformedSchema) + : transformedSchema; + const print = printSchemaFn ?? printSchema; + let fileContent = GRAPHQL_SDL_FILE_HEADER + print(finalSchema); if (options.addNewlineAtEnd) { fileContent = fileContent.concat(GRAPHQL_SDL_FILE_END); diff --git a/packages/graphql/lib/graphql-types.loader.ts b/packages/graphql/lib/graphql-types.loader.ts index 56543b2fb..e8f790ca5 100644 --- a/packages/graphql/lib/graphql-types.loader.ts +++ b/packages/graphql/lib/graphql-types.loader.ts @@ -1,8 +1,8 @@ import { mergeTypeDefs } from '@graphql-tools/merge'; import { Injectable } from '@nestjs/common'; +import { flatten } from 'es-toolkit'; import glob from 'fast-glob'; import * as fs from 'fs'; -import { flatten } from 'lodash'; import * as util from 'util'; const normalize = require('normalize-path'); diff --git a/packages/graphql/lib/graphql.factory.ts b/packages/graphql/lib/graphql.factory.ts index 793eb34a0..e7423a88f 100644 --- a/packages/graphql/lib/graphql.factory.ts +++ b/packages/graphql/lib/graphql.factory.ts @@ -11,15 +11,17 @@ import { printSchema, } from 'graphql'; import { gql } from 'graphql-tag'; -import { forEach, isEmpty } from 'lodash'; import { DefinitionsGeneratorOptions, GraphQLAstExplorer, -} from './graphql-ast.explorer'; -import { GraphQLSchemaBuilder } from './graphql-schema.builder'; -import { GqlModuleOptions } from './interfaces'; -import { ResolversExplorerService, ScalarsExplorerService } from './services'; -import { extend, removeTempField } from './utils'; +} from './graphql-ast.explorer.js'; +import { GraphQLSchemaBuilder } from './graphql-schema.builder.js'; +import { GqlModuleOptions } from './interfaces/index.js'; +import { + ResolversExplorerService, + ScalarsExplorerService, +} from './services/index.js'; +import { extend, removeTempField } from './utils/index.js'; @Injectable() export class GraphQLFactory { @@ -81,7 +83,7 @@ export class GraphQLFactory { schema = options.sortSchema ? lexicographicSortSchema(schema) : schema; return schema; } - if (isEmpty(options.typeDefs)) { + if (this.isEmptyValue(options.typeDefs)) { const schema = await transformSchema(options.schema); return schema; } @@ -122,16 +124,18 @@ export class GraphQLFactory { const executableSchemaFields = executableSchemaConfig[key].getFields(); const schemaFields = schemaConfig[key].getFields(); - forEach(executableSchemaFields, (value, resolverName) => { - if (schemaFields[resolverName]) { - schemaFields[resolverName].resolve = - executableSchemaFields[resolverName].resolve; - schemaFields[resolverName].subscribe = - executableSchemaFields[resolverName].subscribe; - } else { - schemaFields[resolverName] = executableSchemaFields[resolverName]; - } - }); + Object.entries(executableSchemaFields).forEach( + ([resolverName, value]) => { + if (schemaFields[resolverName]) { + schemaFields[resolverName].resolve = + executableSchemaFields[resolverName].resolve; + schemaFields[resolverName].subscribe = + executableSchemaFields[resolverName].subscribe; + } else { + schemaFields[resolverName] = value; + } + }, + ); }); const getAutoGeneratedTypeByName = (name: string): GraphQLObjectType => @@ -159,9 +163,8 @@ export class GraphQLFactory { (type) => type.name === interfaceRef.name, ) as GraphQLObjectType; - forEach( - interfaceRef.getFields(), - (value: GraphQLField, key: string) => { + Object.entries(interfaceRef.getFields()).forEach( + ([key]: [string, GraphQLField]) => { const fieldInExecutableSchema = interfaceInExecutableSchema.getFields()[key]; if (!fieldInExecutableSchema) { @@ -178,9 +181,8 @@ export class GraphQLFactory { }); } - forEach( - fields, - (value: GraphQLField, key: string) => { + Object.entries(fields).forEach( + ([key, value]: [string, GraphQLField]) => { if (!value.resolve) { return; } @@ -197,7 +199,7 @@ export class GraphQLFactory { typeDefs: string | string[], options: GqlModuleOptions, ) { - if (isEmpty(typeDefs) || !options.definitions) { + if (this.isEmptyValue(typeDefs) || !options.definitions) { return; } const definitionsGeneratorOptions: DefinitionsGeneratorOptions = { @@ -226,4 +228,14 @@ export class GraphQLFactory { await tsFile.save(); } } + + private isEmptyValue(value: unknown) { + if (value == null) { + return true; + } + if (Array.isArray(value) || typeof value === 'string') { + return value.length === 0; + } + return false; + } } diff --git a/packages/graphql/lib/graphql.module.ts b/packages/graphql/lib/graphql.module.ts index 1ae6d1566..d03506064 100644 --- a/packages/graphql/lib/graphql.module.ts +++ b/packages/graphql/lib/graphql.module.ts @@ -5,29 +5,35 @@ import { OnModuleDestroy, OnModuleInit, Provider, -} from '@nestjs/common/interfaces'; +} from '@nestjs/common/interfaces/index.js'; import { HttpAdapterHost } from '@nestjs/core'; -import { ROUTE_MAPPED_MESSAGE } from '@nestjs/core/helpers/messages'; -import { InitializeOnPreviewAllowlist } from '@nestjs/core/inspector'; -import { MetadataScanner } from '@nestjs/core/metadata-scanner'; -import { AbstractGraphQLDriver } from './drivers/abstract-graphql.driver'; -import { GraphQLFederationFactory } from './federation/graphql-federation.factory'; -import { TypeDefsDecoratorFactory } from './federation/type-defs-decorator.factory'; -import { GraphQLAstExplorer } from './graphql-ast.explorer'; -import { GraphQLSchemaBuilder } from './graphql-schema.builder'; -import { GraphQLSchemaHost } from './graphql-schema.host'; -import { GraphQLTypesLoader } from './graphql-types.loader'; -import { GRAPHQL_MODULE_ID, GRAPHQL_MODULE_OPTIONS } from './graphql.constants'; -import { GraphQLFactory } from './graphql.factory'; +import { ROUTE_MAPPED_MESSAGE } from '@nestjs/core/helpers/messages.js'; +import { InitializeOnPreviewAllowlist } from '@nestjs/core/inspector/index.js'; +import { MetadataScanner } from '@nestjs/core/metadata-scanner.js'; +import { AbstractGraphQLDriver } from './drivers/abstract-graphql.driver.js'; +import { GraphQLFederationFactory } from './federation/graphql-federation.factory.js'; +import { TypeDefsDecoratorFactory } from './federation/type-defs-decorator.factory.js'; +import { GraphQLAstExplorer } from './graphql-ast.explorer.js'; +import { GraphQLSchemaBuilder } from './graphql-schema.builder.js'; +import { GraphQLSchemaHost } from './graphql-schema.host.js'; +import { GraphQLTypesLoader } from './graphql-types.loader.js'; +import { + GRAPHQL_MODULE_ID, + GRAPHQL_MODULE_OPTIONS, +} from './graphql.constants.js'; +import { GraphQLFactory } from './graphql.factory.js'; import { GqlModuleAsyncOptions, GqlModuleOptions, GqlOptionsFactory, -} from './interfaces/gql-module-options.interface'; -import { MetadataLoader } from './plugin/metadata-loader'; -import { GraphQLSchemaBuilderModule } from './schema-builder/schema-builder.module'; -import { ResolversExplorerService, ScalarsExplorerService } from './services'; -import { extend, generateString } from './utils'; +} from './interfaces/gql-module-options.interface.js'; +import { MetadataLoader } from './plugin/metadata-loader.js'; +import { GraphQLSchemaBuilderModule } from './schema-builder/schema-builder.module.js'; +import { + ResolversExplorerService, + ScalarsExplorerService, +} from './services/index.js'; +import { extend, generateString } from './utils/index.js'; /** * @publicApi diff --git a/packages/graphql/lib/index.ts b/packages/graphql/lib/index.ts index 8366fb27f..db663a117 100644 --- a/packages/graphql/lib/index.ts +++ b/packages/graphql/lib/index.ts @@ -1,22 +1,22 @@ -export * from './decorators'; -export * from './drivers'; -export * from './federation'; -export * from './graphql-ast.explorer'; -export * from './graphql-definitions.factory'; -export * from './graphql-schema.host'; -export * from './graphql-types.loader'; -export * from './graphql.constants'; -export * from './graphql.factory'; -export * from './graphql.module'; -export * from './interfaces'; -export * from './scalars'; -export * from './schema-builder'; -export * from './services/base-explorer.service'; -export * from './services/gql-arguments-host'; -export * from './services/gql-execution-context'; -export * from './services/gql-subscription.service'; -export * from './tokens'; -export * from './type-factories'; -export * from './type-helpers'; -export * from './utils/extend.util'; -export * from './utils/transform-schema.util'; +export * from './decorators/index.js'; +export * from './drivers/index.js'; +export * from './federation/index.js'; +export * from './graphql-ast.explorer.js'; +export * from './graphql-definitions.factory.js'; +export * from './graphql-schema.host.js'; +export * from './graphql-types.loader.js'; +export * from './graphql.constants.js'; +export * from './graphql.factory.js'; +export * from './graphql.module.js'; +export * from './interfaces/index.js'; +export * from './scalars/index.js'; +export * from './schema-builder/index.js'; +export * from './services/base-explorer.service.js'; +export * from './services/gql-arguments-host.js'; +export * from './services/gql-execution-context.js'; +export * from './services/gql-subscription.service.js'; +export * from './tokens.js'; +export * from './type-factories/index.js'; +export * from './type-helpers/index.js'; +export * from './utils/extend.util.js'; +export * from './utils/transform-schema.util.js'; diff --git a/packages/graphql/lib/interfaces/build-schema-options.interface.ts b/packages/graphql/lib/interfaces/build-schema-options.interface.ts index 0b0507461..40351b640 100644 --- a/packages/graphql/lib/interfaces/build-schema-options.interface.ts +++ b/packages/graphql/lib/interfaces/build-schema-options.interface.ts @@ -1,5 +1,5 @@ import { GraphQLDirective, GraphQLScalarType } from 'graphql'; -import { FieldMiddleware } from './field-middleware.interface'; +import { FieldMiddleware } from './field-middleware.interface.js'; export type DateScalarMode = 'isoDate' | 'timestamp'; export type NumberScalarMode = 'float' | 'integer'; diff --git a/packages/graphql/lib/interfaces/class-decorator-factory.interface.ts b/packages/graphql/lib/interfaces/class-decorator-factory.interface.ts index bcbb29f7b..885e547be 100644 --- a/packages/graphql/lib/interfaces/class-decorator-factory.interface.ts +++ b/packages/graphql/lib/interfaces/class-decorator-factory.interface.ts @@ -1,4 +1,9 @@ -import { ArgsType, InputType, InterfaceType, ObjectType } from '../decorators'; +import { + ArgsType, + InputType, + InterfaceType, + ObjectType, +} from '../decorators/index.js'; export type ClassDecoratorFactory = | typeof ArgsType diff --git a/packages/graphql/lib/interfaces/field-middleware.interface.ts b/packages/graphql/lib/interfaces/field-middleware.interface.ts index 669b73871..5676036f9 100644 --- a/packages/graphql/lib/interfaces/field-middleware.interface.ts +++ b/packages/graphql/lib/interfaces/field-middleware.interface.ts @@ -8,7 +8,7 @@ export interface MiddlewareContext< source: TSource; args: TArgs; context: TContext; - info: GraphQLResolveInfo; + info?: GraphQLResolveInfo | null; } export type NextFn = () => Promise; diff --git a/packages/graphql/lib/interfaces/gql-module-options.interface.ts b/packages/graphql/lib/interfaces/gql-module-options.interface.ts index 46e941f64..fb40bf958 100644 --- a/packages/graphql/lib/interfaces/gql-module-options.interface.ts +++ b/packages/graphql/lib/interfaces/gql-module-options.interface.ts @@ -1,11 +1,11 @@ import { IResolvers, IResolverValidationOptions } from '@graphql-tools/utils'; import { Type } from '@nestjs/common'; -import { ModuleMetadata } from '@nestjs/common/interfaces'; +import { ModuleMetadata } from '@nestjs/common/interfaces/index.js'; import { GraphQLSchema } from 'graphql'; -import { GraphQLDriver } from '.'; -import { DefinitionsGeneratorOptions } from '../graphql-ast.explorer'; -import { BuildSchemaOptions } from './build-schema-options.interface'; -import { AutoSchemaFileValue } from './schema-file-config.interface'; +import { GraphQLDriver } from './index.js'; +import { DefinitionsGeneratorOptions } from '../graphql-ast.explorer.js'; +import { BuildSchemaOptions } from './build-schema-options.interface.js'; +import { AutoSchemaFileValue } from './schema-file-config.interface.js'; export type Enhancer = 'guards' | 'interceptors' | 'filters'; diff --git a/packages/graphql/lib/interfaces/index.ts b/packages/graphql/lib/interfaces/index.ts index 601594515..02c43238b 100644 --- a/packages/graphql/lib/interfaces/index.ts +++ b/packages/graphql/lib/interfaces/index.ts @@ -1,17 +1,17 @@ -export * from './base-type-options.interface'; -export * from './build-schema-options.interface'; -export * from './complexity.interface'; -export * from './custom-scalar.interface'; -export * from './field-middleware.interface'; -export * from './gql-exception-filter.interface'; +export * from './base-type-options.interface.js'; +export * from './build-schema-options.interface.js'; +export * from './complexity.interface.js'; +export * from './custom-scalar.interface.js'; +export * from './field-middleware.interface.js'; +export * from './gql-exception-filter.interface.js'; export { Enhancer, GqlModuleAsyncOptions, GqlModuleOptions, GqlOptionsFactory, -} from './gql-module-options.interface'; -export * from './graphql-driver.interface'; -export * from './resolve-type-fn.interface'; -export * from './return-type-func.interface'; -export * from './build-federated-schema-options.interface'; -export * from './schema-file-config.interface'; +} from './gql-module-options.interface.js'; +export * from './graphql-driver.interface.js'; +export * from './resolve-type-fn.interface.js'; +export * from './return-type-func.interface.js'; +export * from './build-federated-schema-options.interface.js'; +export * from './schema-file-config.interface.js'; diff --git a/packages/graphql/lib/interfaces/type-options.interface.ts b/packages/graphql/lib/interfaces/type-options.interface.ts index 3c230d5e7..89c6563df 100644 --- a/packages/graphql/lib/interfaces/type-options.interface.ts +++ b/packages/graphql/lib/interfaces/type-options.interface.ts @@ -1,4 +1,4 @@ -import { BaseTypeOptions } from './base-type-options.interface'; +import { BaseTypeOptions } from './base-type-options.interface.js'; export type TypeOptions = BaseTypeOptions & { isArray?: boolean; diff --git a/packages/graphql/lib/plugin/compiler-plugin.ts b/packages/graphql/lib/plugin/compiler-plugin.ts index 7eeb9c9fc..fef068713 100644 --- a/packages/graphql/lib/plugin/compiler-plugin.ts +++ b/packages/graphql/lib/plugin/compiler-plugin.ts @@ -1,7 +1,7 @@ import * as ts from 'typescript'; -import { mergePluginOptions } from './merge-options'; -import { isFilenameMatched } from './utils/is-filename-matched.util'; -import { ModelClassVisitor } from './visitors/model-class.visitor'; +import { mergePluginOptions } from './merge-options.js'; +import { isFilenameMatched } from './utils/is-filename-matched.util.js'; +import { ModelClassVisitor } from './visitors/model-class.visitor.js'; const typeClassVisitor = new ModelClassVisitor(); diff --git a/packages/graphql/lib/plugin/index.ts b/packages/graphql/lib/plugin/index.ts index f980bda5b..87a11b6bc 100644 --- a/packages/graphql/lib/plugin/index.ts +++ b/packages/graphql/lib/plugin/index.ts @@ -1,2 +1,2 @@ -export * from './compiler-plugin'; -export * from './visitors/readonly.visitor'; +export * from './compiler-plugin.js'; +export * from './visitors/readonly.visitor.js'; diff --git a/packages/graphql/lib/plugin/merge-options.ts b/packages/graphql/lib/plugin/merge-options.ts index 6c0e8e062..99a3887fc 100644 --- a/packages/graphql/lib/plugin/merge-options.ts +++ b/packages/graphql/lib/plugin/merge-options.ts @@ -1,4 +1,4 @@ -import { isString } from '@nestjs/common/utils/shared.utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; export interface PluginOptions { typeFileNameSuffix?: string | string[]; diff --git a/packages/graphql/lib/plugin/metadata-loader.ts b/packages/graphql/lib/plugin/metadata-loader.ts index 742ba8b06..e70986c46 100644 --- a/packages/graphql/lib/plugin/metadata-loader.ts +++ b/packages/graphql/lib/plugin/metadata-loader.ts @@ -1,4 +1,4 @@ -import { METADATA_FACTORY_NAME } from './plugin-constants'; +import { METADATA_FACTORY_NAME } from './plugin-constants.js'; export class MetadataLoader { private static readonly refreshHooks = new Array<() => void>(); diff --git a/packages/graphql/lib/plugin/utils/ast-utils.ts b/packages/graphql/lib/plugin/utils/ast-utils.ts index 283903767..06b12f52f 100644 --- a/packages/graphql/lib/plugin/utils/ast-utils.ts +++ b/packages/graphql/lib/plugin/utils/ast-utils.ts @@ -22,7 +22,7 @@ import { TypeNode, UnionTypeNode, } from 'typescript'; -import { isDynamicallyAdded } from './plugin-utils'; +import { isDynamicallyAdded } from './plugin-utils.js'; export function getDecorators(node: ts.Node) { return (ts.canHaveDecorators(node) && ts.getDecorators(node)) ?? []; diff --git a/packages/graphql/lib/plugin/utils/plugin-utils.ts b/packages/graphql/lib/plugin/utils/plugin-utils.ts index 505503388..450680e7f 100644 --- a/packages/graphql/lib/plugin/utils/plugin-utils.ts +++ b/packages/graphql/lib/plugin/utils/plugin-utils.ts @@ -1,7 +1,7 @@ -import { head } from 'lodash'; +import { head } from 'es-toolkit'; import { isAbsolute, posix } from 'path'; import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; +import { PluginOptions } from '../merge-options.js'; import { getText, getTypeArguments, @@ -13,7 +13,7 @@ import { isNumber, isString, isStringLiteral, -} from './ast-utils'; +} from './ast-utils.js'; export function getTypeReferenceAsString( type: ts.Type, diff --git a/packages/graphql/lib/plugin/utils/type-reference-to-identifier.util.ts b/packages/graphql/lib/plugin/utils/type-reference-to-identifier.util.ts index 6d973bec4..c442864d0 100644 --- a/packages/graphql/lib/plugin/utils/type-reference-to-identifier.util.ts +++ b/packages/graphql/lib/plugin/utils/type-reference-to-identifier.util.ts @@ -1,7 +1,7 @@ import * as ts from 'typescript'; -import { PluginOptions } from '../merge-options'; -import { pluginDebugLogger } from '../plugin-debug-logger'; -import { replaceImportPath } from './plugin-utils'; +import { PluginOptions } from '../merge-options.js'; +import { pluginDebugLogger } from '../plugin-debug-logger.js'; +import { replaceImportPath } from './plugin-utils.js'; export function typeReferenceToIdentifier( typeReferenceDescriptor: { diff --git a/packages/graphql/lib/plugin/visitors/model-class.visitor.ts b/packages/graphql/lib/plugin/visitors/model-class.visitor.ts index c79a288a1..11e3050b3 100644 --- a/packages/graphql/lib/plugin/visitors/model-class.visitor.ts +++ b/packages/graphql/lib/plugin/visitors/model-class.visitor.ts @@ -7,10 +7,10 @@ import { InputType, InterfaceType, ObjectType, -} from '../../decorators'; -import { PluginOptions } from '../merge-options'; -import { METADATA_FACTORY_NAME } from '../plugin-constants'; -import { pluginDebugLogger } from '../plugin-debug-logger'; +} from '../../decorators/index.js'; +import { PluginOptions } from '../merge-options.js'; +import { METADATA_FACTORY_NAME } from '../plugin-constants.js'; +import { pluginDebugLogger } from '../plugin-debug-logger.js'; import { createImportEquals, findNullableTypeFromUnion, @@ -26,9 +26,12 @@ import { safelyMergeObjects, serializePrimitiveObjectToAst, updateDecoratorArguments, -} from '../utils/ast-utils'; -import { convertPath, getTypeReferenceAsString } from '../utils/plugin-utils'; -import { typeReferenceToIdentifier } from '../utils/type-reference-to-identifier.util'; +} from '../utils/ast-utils.js'; +import { + convertPath, + getTypeReferenceAsString, +} from '../utils/plugin-utils.js'; +import { typeReferenceToIdentifier } from '../utils/type-reference-to-identifier.util.js'; const CLASS_DECORATORS = [ ObjectType.name, diff --git a/packages/graphql/lib/plugin/visitors/readonly.visitor.ts b/packages/graphql/lib/plugin/visitors/readonly.visitor.ts index 5ff05623e..141cb5902 100644 --- a/packages/graphql/lib/plugin/visitors/readonly.visitor.ts +++ b/packages/graphql/lib/plugin/visitors/readonly.visitor.ts @@ -1,7 +1,7 @@ import * as ts from 'typescript'; -import { PluginOptions, mergePluginOptions } from '../merge-options'; -import { isFilenameMatched } from '../utils/is-filename-matched.util'; -import { ModelClassVisitor } from './model-class.visitor'; +import { PluginOptions, mergePluginOptions } from '../merge-options.js'; +import { isFilenameMatched } from '../utils/is-filename-matched.util.js'; +import { ModelClassVisitor } from './model-class.visitor.js'; export class ReadonlyVisitor { public readonly key = '@nestjs/graphql'; diff --git a/packages/graphql/lib/scalars/index.ts b/packages/graphql/lib/scalars/index.ts index aa313e749..2b0b4460a 100644 --- a/packages/graphql/lib/scalars/index.ts +++ b/packages/graphql/lib/scalars/index.ts @@ -1,7 +1,7 @@ import { GraphQLFloat, GraphQLID, GraphQLInt } from 'graphql'; -export * from './iso-date.scalar'; -export * from './timestamp.scalar'; +export * from './iso-date.scalar.js'; +export * from './timestamp.scalar.js'; export const Int = GraphQLInt; export const Float = GraphQLFloat; diff --git a/packages/graphql/lib/schema-builder/collections/field-directive.collection.ts b/packages/graphql/lib/schema-builder/collections/field-directive.collection.ts index 5f4febbfd..a9788e863 100644 --- a/packages/graphql/lib/schema-builder/collections/field-directive.collection.ts +++ b/packages/graphql/lib/schema-builder/collections/field-directive.collection.ts @@ -1,5 +1,5 @@ -import { PropertyDirectiveMetadata } from '../metadata'; -import { MetadataListByNameCollection } from './metadata-list-by-name.collection'; +import { PropertyDirectiveMetadata } from '../metadata/index.js'; +import { MetadataListByNameCollection } from './metadata-list-by-name.collection.js'; export class FieldDirectiveCollection extends MetadataListByNameCollection { sdls = new Set(); diff --git a/packages/graphql/lib/schema-builder/collections/index.ts b/packages/graphql/lib/schema-builder/collections/index.ts index 27ca55d70..8afdc8037 100644 --- a/packages/graphql/lib/schema-builder/collections/index.ts +++ b/packages/graphql/lib/schema-builder/collections/index.ts @@ -1,7 +1,7 @@ -export * from './array-with-global-cache.collection'; -export * from './field-directive.collection'; -export * from './metada-collection-model.interface'; -export * from './metadata-by-name.collection'; -export * from './metadata-by-target.collection'; -export * from './metadata-list-by-name.collection'; -export * from './target-metadata.collection'; +export * from './array-with-global-cache.collection.js'; +export * from './field-directive.collection.js'; +export * from './metada-collection-model.interface.js'; +export * from './metadata-by-name.collection.js'; +export * from './metadata-by-target.collection.js'; +export * from './metadata-list-by-name.collection.js'; +export * from './target-metadata.collection.js'; diff --git a/packages/graphql/lib/schema-builder/collections/metada-collection-model.interface.ts b/packages/graphql/lib/schema-builder/collections/metada-collection-model.interface.ts index 195e73380..00f51c82a 100644 --- a/packages/graphql/lib/schema-builder/collections/metada-collection-model.interface.ts +++ b/packages/graphql/lib/schema-builder/collections/metada-collection-model.interface.ts @@ -5,8 +5,8 @@ import { PropertyDirectiveMetadata, PropertyExtensionsMetadata, ResolverClassMetadata, -} from '../metadata'; -import { ObjectTypeMetadata } from '../metadata/object-type.metadata'; +} from '../metadata/index.js'; +import { ObjectTypeMetadata } from '../metadata/object-type.metadata.js'; export interface MetadataCollectionModel { argumentType: ClassMetadata[]; diff --git a/packages/graphql/lib/schema-builder/collections/metadata-by-target.collection.ts b/packages/graphql/lib/schema-builder/collections/metadata-by-target.collection.ts index d6d5db8bc..9bedf1ecf 100644 --- a/packages/graphql/lib/schema-builder/collections/metadata-by-target.collection.ts +++ b/packages/graphql/lib/schema-builder/collections/metadata-by-target.collection.ts @@ -1,6 +1,6 @@ -import { MetadataCollectionModel } from './metada-collection-model.interface'; -import { TargetMetadataCollection } from './target-metadata.collection'; -import { ClassMetadata } from '../metadata'; +import { MetadataCollectionModel } from './metada-collection-model.interface.js'; +import { TargetMetadataCollection } from './target-metadata.collection.js'; +import { ClassMetadata } from '../metadata/index.js'; export class MetadataByTargetCollection { public readonly all: MetadataCollectionModel = { diff --git a/packages/graphql/lib/schema-builder/collections/metadata-list-by-name.collection.ts b/packages/graphql/lib/schema-builder/collections/metadata-list-by-name.collection.ts index c3f4d3b3d..aeb4b4d26 100644 --- a/packages/graphql/lib/schema-builder/collections/metadata-list-by-name.collection.ts +++ b/packages/graphql/lib/schema-builder/collections/metadata-list-by-name.collection.ts @@ -1,4 +1,4 @@ -import { MetadataByNameCollection } from './metadata-by-name.collection'; +import { MetadataByNameCollection } from './metadata-by-name.collection.js'; export class MetadataListByNameCollection extends MetadataByNameCollection< T[] diff --git a/packages/graphql/lib/schema-builder/collections/target-metadata.collection.ts b/packages/graphql/lib/schema-builder/collections/target-metadata.collection.ts index f85ef94a5..e6fd5c505 100644 --- a/packages/graphql/lib/schema-builder/collections/target-metadata.collection.ts +++ b/packages/graphql/lib/schema-builder/collections/target-metadata.collection.ts @@ -6,13 +6,13 @@ import { PropertyExtensionsMetadata, PropertyMetadata, ResolverClassMetadata, -} from '../metadata'; -import { ObjectTypeMetadata } from '../metadata/object-type.metadata'; -import { ArrayWithGlobalCacheCollection } from './array-with-global-cache.collection'; -import { FieldDirectiveCollection } from './field-directive.collection'; -import { MetadataCollectionModel } from './metada-collection-model.interface'; -import { MetadataByNameCollection } from './metadata-by-name.collection'; -import { MetadataListByNameCollection } from './metadata-list-by-name.collection'; +} from '../metadata/index.js'; +import { ObjectTypeMetadata } from '../metadata/object-type.metadata.js'; +import { ArrayWithGlobalCacheCollection } from './array-with-global-cache.collection.js'; +import { FieldDirectiveCollection } from './field-directive.collection.js'; +import { MetadataCollectionModel } from './metada-collection-model.interface.js'; +import { MetadataByNameCollection } from './metadata-by-name.collection.js'; +import { MetadataListByNameCollection } from './metadata-list-by-name.collection.js'; export class TargetMetadataCollection { constructor(private readonly all: MetadataCollectionModel) {} diff --git a/packages/graphql/lib/schema-builder/errors/cannot-determine-arg-type.error.ts b/packages/graphql/lib/schema-builder/errors/cannot-determine-arg-type.error.ts index 7410d9a61..c4feaefcb 100644 --- a/packages/graphql/lib/schema-builder/errors/cannot-determine-arg-type.error.ts +++ b/packages/graphql/lib/schema-builder/errors/cannot-determine-arg-type.error.ts @@ -1,4 +1,4 @@ -import { ArgsParamMetadata } from '../metadata'; +import { ArgsParamMetadata } from '../metadata/index.js'; export class CannotDetermineArgTypeError extends Error { constructor(hostType: string, param: ArgsParamMetadata) { diff --git a/packages/graphql/lib/schema-builder/errors/cannot-determine-input-type.error.ts b/packages/graphql/lib/schema-builder/errors/cannot-determine-input-type.error.ts index 592aa0620..61d17ee40 100644 --- a/packages/graphql/lib/schema-builder/errors/cannot-determine-input-type.error.ts +++ b/packages/graphql/lib/schema-builder/errors/cannot-determine-input-type.error.ts @@ -1,4 +1,4 @@ -import { GqlTypeReference } from '../../interfaces'; +import { GqlTypeReference } from '../../interfaces/index.js'; export class CannotDetermineInputTypeError extends Error { constructor( diff --git a/packages/graphql/lib/schema-builder/errors/default-nullable-conflict.error.ts b/packages/graphql/lib/schema-builder/errors/default-nullable-conflict.error.ts index 2fb8a62d4..76f134218 100644 --- a/packages/graphql/lib/schema-builder/errors/default-nullable-conflict.error.ts +++ b/packages/graphql/lib/schema-builder/errors/default-nullable-conflict.error.ts @@ -1,4 +1,4 @@ -import { NullableList } from '../../interfaces'; +import { NullableList } from '../../interfaces/index.js'; export class DefaultNullableConflictError extends Error { constructor( diff --git a/packages/graphql/lib/schema-builder/errors/invalid-nullable-option.error.ts b/packages/graphql/lib/schema-builder/errors/invalid-nullable-option.error.ts index d5a183216..d91791384 100644 --- a/packages/graphql/lib/schema-builder/errors/invalid-nullable-option.error.ts +++ b/packages/graphql/lib/schema-builder/errors/invalid-nullable-option.error.ts @@ -1,4 +1,4 @@ -import { NullableList } from '../../interfaces'; +import { NullableList } from '../../interfaces/index.js'; export class InvalidNullableOptionError extends Error { constructor(name: string, nullable?: boolean | NullableList) { diff --git a/packages/graphql/lib/schema-builder/errors/undefined-type.error.ts b/packages/graphql/lib/schema-builder/errors/undefined-type.error.ts index 4ae31e896..e2c99c789 100644 --- a/packages/graphql/lib/schema-builder/errors/undefined-type.error.ts +++ b/packages/graphql/lib/schema-builder/errors/undefined-type.error.ts @@ -1,4 +1,4 @@ -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; export class UndefinedTypeError extends Error { constructor(name: string, key: string, index?: number) { diff --git a/packages/graphql/lib/schema-builder/factories/args.factory.ts b/packages/graphql/lib/schema-builder/factories/args.factory.ts index 6a87f2440..138576aec 100644 --- a/packages/graphql/lib/schema-builder/factories/args.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/args.factory.ts @@ -1,14 +1,14 @@ import { Injectable } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLFieldConfigArgumentMap } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { CannotDetermineArgTypeError } from '../errors/cannot-determine-arg-type.error'; -import { getDefaultValue } from '../helpers/get-default-value.helper'; -import { normalizeEnumDefaultValue } from '../helpers/normalize-enum-default-value.helper'; -import { ClassMetadata, MethodArgsMetadata } from '../metadata'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; -import { InputTypeFactory } from './input-type.factory'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { CannotDetermineArgTypeError } from '../errors/cannot-determine-arg-type.error.js'; +import { getDefaultValue } from '../helpers/get-default-value.helper.js'; +import { normalizeEnumDefaultValue } from '../helpers/normalize-enum-default-value.helper.js'; +import { ClassMetadata, MethodArgsMetadata } from '../metadata/index.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; +import { InputTypeFactory } from './input-type.factory.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; @Injectable() export class ArgsFactory { diff --git a/packages/graphql/lib/schema-builder/factories/ast-definition-node.factory.ts b/packages/graphql/lib/schema-builder/factories/ast-definition-node.factory.ts index ee70a64b9..c46ade73e 100644 --- a/packages/graphql/lib/schema-builder/factories/ast-definition-node.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/ast-definition-node.factory.ts @@ -1,5 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { isEmpty } from '@nestjs/common/utils/shared.utils'; +import { isEmpty } from '@nestjs/common/utils/shared.utils.js'; +import { head } from 'es-toolkit'; import { ConstDirectiveNode, EnumTypeDefinitionNode, @@ -15,10 +16,9 @@ import { UnionTypeDefinitionNode, parse, } from 'graphql'; -import { head } from 'lodash'; -import { DirectiveParsingError } from '../errors/directive-parsing.error'; -import { DirectiveMetadata } from '../metadata/directive.metadata'; +import { DirectiveParsingError } from '../errors/directive-parsing.error.js'; +import { DirectiveMetadata } from '../metadata/directive.metadata.js'; @Injectable() export class AstDefinitionNodeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/enum-definition.factory.ts b/packages/graphql/lib/schema-builder/factories/enum-definition.factory.ts index 5a8d1e9ca..81c552dd6 100644 --- a/packages/graphql/lib/schema-builder/factories/enum-definition.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/enum-definition.factory.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { GraphQLEnumType } from 'graphql'; -import { EnumMetadata } from '../metadata'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; +import { EnumMetadata } from '../metadata/index.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; export interface EnumDefinition { enumRef: object; diff --git a/packages/graphql/lib/schema-builder/factories/factories.ts b/packages/graphql/lib/schema-builder/factories/factories.ts index ee43e79a1..87478ec6f 100644 --- a/packages/graphql/lib/schema-builder/factories/factories.ts +++ b/packages/graphql/lib/schema-builder/factories/factories.ts @@ -1,18 +1,18 @@ -import { ArgsFactory } from './args.factory'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; -import { EnumDefinitionFactory } from './enum-definition.factory'; -import { InputTypeDefinitionFactory } from './input-type-definition.factory'; -import { InputTypeFactory } from './input-type.factory'; -import { InterfaceDefinitionFactory } from './interface-definition.factory'; -import { MutationTypeFactory } from './mutation-type.factory'; -import { ObjectTypeDefinitionFactory } from './object-type-definition.factory'; -import { OrphanedTypesFactory } from './orphaned-types.factory'; -import { OutputTypeFactory } from './output-type.factory'; -import { QueryTypeFactory } from './query-type.factory'; -import { ResolveTypeFactory } from './resolve-type.factory'; -import { RootTypeFactory } from './root-type.factory'; -import { SubscriptionTypeFactory } from './subscription-type.factory'; -import { UnionDefinitionFactory } from './union-definition.factory'; +import { ArgsFactory } from './args.factory.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; +import { EnumDefinitionFactory } from './enum-definition.factory.js'; +import { InputTypeDefinitionFactory } from './input-type-definition.factory.js'; +import { InputTypeFactory } from './input-type.factory.js'; +import { InterfaceDefinitionFactory } from './interface-definition.factory.js'; +import { MutationTypeFactory } from './mutation-type.factory.js'; +import { ObjectTypeDefinitionFactory } from './object-type-definition.factory.js'; +import { OrphanedTypesFactory } from './orphaned-types.factory.js'; +import { OutputTypeFactory } from './output-type.factory.js'; +import { QueryTypeFactory } from './query-type.factory.js'; +import { ResolveTypeFactory } from './resolve-type.factory.js'; +import { RootTypeFactory } from './root-type.factory.js'; +import { SubscriptionTypeFactory } from './subscription-type.factory.js'; +import { UnionDefinitionFactory } from './union-definition.factory.js'; export const schemaBuilderFactories = [ EnumDefinitionFactory, diff --git a/packages/graphql/lib/schema-builder/factories/input-type-definition.factory.ts b/packages/graphql/lib/schema-builder/factories/input-type-definition.factory.ts index 22ddc8dbb..3ac5e128e 100644 --- a/packages/graphql/lib/schema-builder/factories/input-type-definition.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/input-type-definition.factory.ts @@ -1,15 +1,15 @@ import { Injectable, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLInputFieldConfigMap, GraphQLInputObjectType } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { getDefaultValue } from '../helpers/get-default-value.helper'; -import { normalizeEnumDefaultValue } from '../helpers/normalize-enum-default-value.helper'; -import { ClassMetadata } from '../metadata'; -import { TypeFieldsAccessor } from '../services/type-fields.accessor'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; -import { InputTypeFactory } from './input-type.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { getDefaultValue } from '../helpers/get-default-value.helper.js'; +import { normalizeEnumDefaultValue } from '../helpers/normalize-enum-default-value.helper.js'; +import { ClassMetadata } from '../metadata/index.js'; +import { TypeFieldsAccessor } from '../services/type-fields.accessor.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; +import { InputTypeFactory } from './input-type.factory.js'; export interface InputTypeDefinition { target: Function; diff --git a/packages/graphql/lib/schema-builder/factories/input-type.factory.ts b/packages/graphql/lib/schema-builder/factories/input-type.factory.ts index 4fa4701bb..63d91e76b 100644 --- a/packages/graphql/lib/schema-builder/factories/input-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/input-type.factory.ts @@ -1,10 +1,13 @@ import { Injectable } from '@nestjs/common'; import { GraphQLInputType } from 'graphql'; -import { BuildSchemaOptions, GqlTypeReference } from '../../interfaces'; -import { TypeOptions } from '../../interfaces/type-options.interface'; -import { CannotDetermineInputTypeError } from '../errors/cannot-determine-input-type.error'; -import { TypeMapperService } from '../services/type-mapper.service'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; +import { + BuildSchemaOptions, + GqlTypeReference, +} from '../../interfaces/index.js'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; +import { CannotDetermineInputTypeError } from '../errors/cannot-determine-input-type.error.js'; +import { TypeMapperService } from '../services/type-mapper.service.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; @Injectable() export class InputTypeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/interface-definition.factory.ts b/packages/graphql/lib/schema-builder/factories/interface-definition.factory.ts index ecb8be174..e29d88384 100644 --- a/packages/graphql/lib/schema-builder/factories/interface-definition.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/interface-definition.factory.ts @@ -1,23 +1,23 @@ import { Injectable } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLFieldConfigMap, GraphQLInterfaceType, GraphQLObjectType, } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { InterfaceNotRegisteredError } from '../errors/interface-not-registered.error'; -import { ReturnTypeCannotBeResolvedError } from '../errors/return-type-cannot-be-resolved.error'; -import { InterfaceMetadata } from '../metadata/interface.metadata'; -import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry'; -import { TypeFieldsAccessor } from '../services/type-fields.accessor'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; -import { getInterfacesArray } from '../utils/get-interfaces-array.util'; -import { ArgsFactory } from './args.factory'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; -import { OutputTypeFactory } from './output-type.factory'; -import { ResolveTypeFactory } from './resolve-type.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { InterfaceNotRegisteredError } from '../errors/interface-not-registered.error.js'; +import { ReturnTypeCannotBeResolvedError } from '../errors/return-type-cannot-be-resolved.error.js'; +import { InterfaceMetadata } from '../metadata/interface.metadata.js'; +import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry.js'; +import { TypeFieldsAccessor } from '../services/type-fields.accessor.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; +import { getInterfacesArray } from '../utils/get-interfaces-array.util.js'; +import { ArgsFactory } from './args.factory.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; +import { OutputTypeFactory } from './output-type.factory.js'; +import { ResolveTypeFactory } from './resolve-type.factory.js'; export interface InterfaceTypeDefinition { target: Function; diff --git a/packages/graphql/lib/schema-builder/factories/mutation-type.factory.ts b/packages/graphql/lib/schema-builder/factories/mutation-type.factory.ts index 7022f09c2..63974386a 100644 --- a/packages/graphql/lib/schema-builder/factories/mutation-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/mutation-type.factory.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { GraphQLObjectType } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; -import { RootTypeFactory } from './root-type.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; +import { RootTypeFactory } from './root-type.factory.js'; @Injectable() export class MutationTypeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/object-type-definition.factory.ts b/packages/graphql/lib/schema-builder/factories/object-type-definition.factory.ts index 97357e73e..74929fc0b 100644 --- a/packages/graphql/lib/schema-builder/factories/object-type-definition.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/object-type-definition.factory.ts @@ -1,23 +1,23 @@ import { Injectable, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLFieldConfigMap, GraphQLInterfaceType, GraphQLObjectType, } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { decorateFieldResolverWithMiddleware } from '../../utils/decorate-field-resolver.util'; -import { InterfaceNotRegisteredError } from '../errors/interface-not-registered.error'; -import { PropertyMetadata } from '../metadata'; -import { ObjectTypeMetadata } from '../metadata/object-type.metadata'; -import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry'; -import { TypeFieldsAccessor } from '../services/type-fields.accessor'; -import { TypeMetadataStorage } from '../storages'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; -import { getInterfacesArray } from '../utils/get-interfaces-array.util'; -import { ArgsFactory } from './args.factory'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; -import { OutputTypeFactory } from './output-type.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { decorateFieldResolverWithMiddleware } from '../../utils/decorate-field-resolver.util.js'; +import { InterfaceNotRegisteredError } from '../errors/interface-not-registered.error.js'; +import { PropertyMetadata } from '../metadata/index.js'; +import { ObjectTypeMetadata } from '../metadata/object-type.metadata.js'; +import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry.js'; +import { TypeFieldsAccessor } from '../services/type-fields.accessor.js'; +import { TypeMetadataStorage } from '../storages/index.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; +import { getInterfacesArray } from '../utils/get-interfaces-array.util.js'; +import { ArgsFactory } from './args.factory.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; +import { OutputTypeFactory } from './output-type.factory.js'; export interface ObjectTypeDefinition { target: Function; diff --git a/packages/graphql/lib/schema-builder/factories/orphaned-types.factory.ts b/packages/graphql/lib/schema-builder/factories/orphaned-types.factory.ts index 2788ab895..ef78590fd 100644 --- a/packages/graphql/lib/schema-builder/factories/orphaned-types.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/orphaned-types.factory.ts @@ -1,9 +1,9 @@ import { Injectable } from '@nestjs/common'; import { GraphQLNamedType } from 'graphql'; -import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; -import { getInterfacesArray } from '../utils/get-interfaces-array.util'; -import { ObjectTypeDefinition } from './object-type-definition.factory'; +import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; +import { getInterfacesArray } from '../utils/get-interfaces-array.util.js'; +import { ObjectTypeDefinition } from './object-type-definition.factory.js'; @Injectable() export class OrphanedTypesFactory { diff --git a/packages/graphql/lib/schema-builder/factories/output-type.factory.ts b/packages/graphql/lib/schema-builder/factories/output-type.factory.ts index 74ec8747c..9175fe0a3 100644 --- a/packages/graphql/lib/schema-builder/factories/output-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/output-type.factory.ts @@ -1,10 +1,13 @@ import { Injectable } from '@nestjs/common'; import { GraphQLOutputType } from 'graphql'; -import { BuildSchemaOptions, GqlTypeReference } from '../../interfaces'; -import { TypeOptions } from '../../interfaces/type-options.interface'; -import { CannotDetermineOutputTypeError } from '../errors/cannot-determine-output-type.error'; -import { TypeMapperService } from '../services/type-mapper.service'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; +import { + BuildSchemaOptions, + GqlTypeReference, +} from '../../interfaces/index.js'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; +import { CannotDetermineOutputTypeError } from '../errors/cannot-determine-output-type.error.js'; +import { TypeMapperService } from '../services/type-mapper.service.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; @Injectable() export class OutputTypeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/query-type.factory.ts b/packages/graphql/lib/schema-builder/factories/query-type.factory.ts index 08f1ec9a7..a329159e5 100644 --- a/packages/graphql/lib/schema-builder/factories/query-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/query-type.factory.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { GraphQLObjectType } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; -import { RootTypeFactory } from './root-type.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; +import { RootTypeFactory } from './root-type.factory.js'; @Injectable() export class QueryTypeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/resolve-type.factory.ts b/packages/graphql/lib/schema-builder/factories/resolve-type.factory.ts index 77679efdc..512728ce2 100644 --- a/packages/graphql/lib/schema-builder/factories/resolve-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/resolve-type.factory.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { isString } from '@nestjs/common/utils/shared.utils'; +import { isString } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLTypeResolver } from 'graphql'; -import { ResolveTypeFn } from '../../interfaces'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; +import { ResolveTypeFn } from '../../interfaces/index.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; @Injectable() export class ResolveTypeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/root-type.factory.ts b/packages/graphql/lib/schema-builder/factories/root-type.factory.ts index 85dc49deb..b1e8f6565 100644 --- a/packages/graphql/lib/schema-builder/factories/root-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/root-type.factory.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import { GraphQLFieldConfigMap, GraphQLObjectType } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { ResolverTypeMetadata } from '../metadata/resolver.metadata'; -import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry'; -import { ArgsFactory } from './args.factory'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; -import { OutputTypeFactory } from './output-type.factory'; -import { MultipleFieldsWithSameNameError } from '../errors/multiple-fields-with-same-name.error'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { ResolverTypeMetadata } from '../metadata/resolver.metadata.js'; +import { OrphanedReferenceRegistry } from '../services/orphaned-reference.registry.js'; +import { ArgsFactory } from './args.factory.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; +import { OutputTypeFactory } from './output-type.factory.js'; +import { MultipleFieldsWithSameNameError } from '../errors/multiple-fields-with-same-name.error.js'; export type FieldsFactory = ( handlers: ResolverTypeMetadata[], diff --git a/packages/graphql/lib/schema-builder/factories/subscription-type.factory.ts b/packages/graphql/lib/schema-builder/factories/subscription-type.factory.ts index 7e5d8431c..12bc4ef9d 100644 --- a/packages/graphql/lib/schema-builder/factories/subscription-type.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/subscription-type.factory.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { GraphQLObjectType } from 'graphql'; -import { BuildSchemaOptions } from '../../interfaces'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; -import { RootTypeFactory } from './root-type.factory'; +import { BuildSchemaOptions } from '../../interfaces/index.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; +import { RootTypeFactory } from './root-type.factory.js'; @Injectable() export class SubscriptionTypeFactory { diff --git a/packages/graphql/lib/schema-builder/factories/union-definition.factory.ts b/packages/graphql/lib/schema-builder/factories/union-definition.factory.ts index d6ca57a50..dc341741d 100644 --- a/packages/graphql/lib/schema-builder/factories/union-definition.factory.ts +++ b/packages/graphql/lib/schema-builder/factories/union-definition.factory.ts @@ -1,11 +1,11 @@ import { Injectable, Type } from '@nestjs/common'; import { GraphQLUnionType } from 'graphql'; -import { ReturnTypeCannotBeResolvedError } from '../errors/return-type-cannot-be-resolved.error'; -import { UnionMemberNotObjectTypeError } from '../errors/union-member-not-object-type.error'; -import { UnionMetadata } from '../metadata'; -import { TypeDefinitionsStorage } from '../storages/type-definitions.storage'; -import { AstDefinitionNodeFactory } from './ast-definition-node.factory'; -import { ResolveTypeFactory } from './resolve-type.factory'; +import { ReturnTypeCannotBeResolvedError } from '../errors/return-type-cannot-be-resolved.error.js'; +import { UnionMemberNotObjectTypeError } from '../errors/union-member-not-object-type.error.js'; +import { UnionMetadata } from '../metadata/index.js'; +import { TypeDefinitionsStorage } from '../storages/type-definitions.storage.js'; +import { AstDefinitionNodeFactory } from './ast-definition-node.factory.js'; +import { ResolveTypeFactory } from './resolve-type.factory.js'; export interface UnionDefinition { id: symbol; diff --git a/packages/graphql/lib/schema-builder/graphql-schema.factory.ts b/packages/graphql/lib/schema-builder/graphql-schema.factory.ts index d5f1d5da1..f05d7e504 100644 --- a/packages/graphql/lib/schema-builder/graphql-schema.factory.ts +++ b/packages/graphql/lib/schema-builder/graphql-schema.factory.ts @@ -1,5 +1,5 @@ import { Injectable, Logger, Type } from '@nestjs/common'; -import { isEmpty, isFunction } from '@nestjs/common/utils/shared.utils'; +import { isEmpty, isFunction } from '@nestjs/common/utils/shared.utils.js'; import { getIntrospectionQuery, graphql, @@ -11,17 +11,17 @@ import { import { SCALAR_NAME_METADATA, SCALAR_TYPE_METADATA, -} from '../graphql.constants'; -import { BuildSchemaOptions, ScalarsTypeMap } from '../interfaces'; -import { createScalarType } from '../utils/scalar-types.utils'; -import { SchemaGenerationError } from './errors/schema-generation.error'; -import { MutationTypeFactory } from './factories/mutation-type.factory'; -import { OrphanedTypesFactory } from './factories/orphaned-types.factory'; -import { QueryTypeFactory } from './factories/query-type.factory'; -import { SubscriptionTypeFactory } from './factories/subscription-type.factory'; -import { LazyMetadataStorage } from './storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from './storages/type-metadata.storage'; -import { TypeDefinitionsGenerator } from './type-definitions.generator'; +} from '../graphql.constants.js'; +import { BuildSchemaOptions, ScalarsTypeMap } from '../interfaces/index.js'; +import { createScalarType } from '../utils/scalar-types.utils.js'; +import { SchemaGenerationError } from './errors/schema-generation.error.js'; +import { MutationTypeFactory } from './factories/mutation-type.factory.js'; +import { OrphanedTypesFactory } from './factories/orphaned-types.factory.js'; +import { QueryTypeFactory } from './factories/query-type.factory.js'; +import { SubscriptionTypeFactory } from './factories/subscription-type.factory.js'; +import { LazyMetadataStorage } from './storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from './storages/type-metadata.storage.js'; +import { TypeDefinitionsGenerator } from './type-definitions.generator.js'; /** * Internal options interface that extends BuildSchemaOptions with includeModules. diff --git a/packages/graphql/lib/schema-builder/helpers/get-default-value.helper.ts b/packages/graphql/lib/schema-builder/helpers/get-default-value.helper.ts index bddc92695..487190c91 100644 --- a/packages/graphql/lib/schema-builder/helpers/get-default-value.helper.ts +++ b/packages/graphql/lib/schema-builder/helpers/get-default-value.helper.ts @@ -1,7 +1,7 @@ -import { isUndefined } from '@nestjs/common/utils/shared.utils'; -import { isEqual } from 'lodash'; -import { TypeOptions } from '../../interfaces/type-options.interface'; -import { DefaultValuesConflictError } from '../errors/default-values-conflict.error'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; +import { isEqual } from 'es-toolkit'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; +import { DefaultValuesConflictError } from '../errors/default-values-conflict.error.js'; export function getDefaultValue( instance: object, diff --git a/packages/graphql/lib/schema-builder/helpers/normalize-enum-default-value.helper.ts b/packages/graphql/lib/schema-builder/helpers/normalize-enum-default-value.helper.ts index 00c152a1c..0fd2c4856 100644 --- a/packages/graphql/lib/schema-builder/helpers/normalize-enum-default-value.helper.ts +++ b/packages/graphql/lib/schema-builder/helpers/normalize-enum-default-value.helper.ts @@ -1,6 +1,6 @@ -import { isUndefined } from '@nestjs/common/utils/shared.utils'; -import { GqlTypeReference } from '../../interfaces'; -import { EnumMetadata } from '../metadata'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; +import { GqlTypeReference } from '../../interfaces/index.js'; +import { EnumMetadata } from '../metadata/index.js'; /** * Normalizes a `defaultValue` declared on an argument / input field whose diff --git a/packages/graphql/lib/schema-builder/index.ts b/packages/graphql/lib/schema-builder/index.ts index 499b8aa5b..1fb5a1983 100644 --- a/packages/graphql/lib/schema-builder/index.ts +++ b/packages/graphql/lib/schema-builder/index.ts @@ -1,4 +1,4 @@ -export * from './storages'; -export * from './graphql-schema.factory'; -export * from './schema-builder.module'; -export * from './helpers/file-system.helper'; +export * from './storages/index.js'; +export * from './graphql-schema.factory.js'; +export * from './schema-builder.module.js'; +export * from './helpers/file-system.helper.js'; diff --git a/packages/graphql/lib/schema-builder/metadata/class.metadata.ts b/packages/graphql/lib/schema-builder/metadata/class.metadata.ts index ed961e4d7..d7016d20a 100644 --- a/packages/graphql/lib/schema-builder/metadata/class.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/class.metadata.ts @@ -1,5 +1,5 @@ -import { DirectiveMetadata } from './directive.metadata'; -import { PropertyMetadata } from './property.metadata'; +import { DirectiveMetadata } from './directive.metadata.js'; +import { PropertyMetadata } from './property.metadata.js'; /** * Type for the registerIn option used in GraphQL type decorators. diff --git a/packages/graphql/lib/schema-builder/metadata/enum.metadata.ts b/packages/graphql/lib/schema-builder/metadata/enum.metadata.ts index f9978bf49..2b6977a97 100644 --- a/packages/graphql/lib/schema-builder/metadata/enum.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/enum.metadata.ts @@ -1,4 +1,4 @@ -import { RegisterInOption } from './class.metadata'; +import { RegisterInOption } from './class.metadata.js'; export interface EnumMetadataValuesMapOptions { deprecationReason?: string; diff --git a/packages/graphql/lib/schema-builder/metadata/index.ts b/packages/graphql/lib/schema-builder/metadata/index.ts index 0fffcc9d3..0c4569953 100644 --- a/packages/graphql/lib/schema-builder/metadata/index.ts +++ b/packages/graphql/lib/schema-builder/metadata/index.ts @@ -1,8 +1,8 @@ -export * from './class.metadata'; -export * from './directive.metadata'; -export * from './enum.metadata'; -export * from './extensions.metadata'; -export * from './param.metadata'; -export * from './property.metadata'; -export * from './resolver.metadata'; -export * from './union.metadata'; +export * from './class.metadata.js'; +export * from './directive.metadata.js'; +export * from './enum.metadata.js'; +export * from './extensions.metadata.js'; +export * from './param.metadata.js'; +export * from './property.metadata.js'; +export * from './resolver.metadata.js'; +export * from './union.metadata.js'; diff --git a/packages/graphql/lib/schema-builder/metadata/interface.metadata.ts b/packages/graphql/lib/schema-builder/metadata/interface.metadata.ts index 5a06763e5..8cd7550b4 100644 --- a/packages/graphql/lib/schema-builder/metadata/interface.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/interface.metadata.ts @@ -1,5 +1,5 @@ -import { ResolveTypeFn } from '../../interfaces'; -import { ClassMetadata } from './class.metadata'; +import { ResolveTypeFn } from '../../interfaces/index.js'; +import { ClassMetadata } from './class.metadata.js'; export interface InterfaceMetadata extends ClassMetadata { resolveType?: ResolveTypeFn; diff --git a/packages/graphql/lib/schema-builder/metadata/object-type.metadata.ts b/packages/graphql/lib/schema-builder/metadata/object-type.metadata.ts index f30100940..a380c5d5f 100644 --- a/packages/graphql/lib/schema-builder/metadata/object-type.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/object-type.metadata.ts @@ -1,4 +1,4 @@ -import { ClassMetadata } from './class.metadata'; +import { ClassMetadata } from './class.metadata.js'; export interface ObjectTypeMetadata extends ClassMetadata { interfaces?: Function | Function[] | (() => Function | Function[]); diff --git a/packages/graphql/lib/schema-builder/metadata/param.metadata.ts b/packages/graphql/lib/schema-builder/metadata/param.metadata.ts index c92f99051..5700213c0 100644 --- a/packages/graphql/lib/schema-builder/metadata/param.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/param.metadata.ts @@ -1,5 +1,5 @@ -import { GqlTypeReference } from '../../interfaces'; -import { TypeOptions } from '../../interfaces/type-options.interface'; +import { GqlTypeReference } from '../../interfaces/index.js'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; export interface BaseArgMetadata { target: Function; diff --git a/packages/graphql/lib/schema-builder/metadata/property.metadata.ts b/packages/graphql/lib/schema-builder/metadata/property.metadata.ts index e81438939..87619ff63 100644 --- a/packages/graphql/lib/schema-builder/metadata/property.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/property.metadata.ts @@ -1,8 +1,8 @@ -import { Complexity, GqlTypeReference } from '../../interfaces'; -import { FieldMiddleware } from '../../interfaces/field-middleware.interface'; -import { TypeOptions } from '../../interfaces/type-options.interface'; -import { DirectiveMetadata } from './directive.metadata'; -import { MethodArgsMetadata } from './param.metadata'; +import { Complexity, GqlTypeReference } from '../../interfaces/index.js'; +import { FieldMiddleware } from '../../interfaces/field-middleware.interface.js'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; +import { DirectiveMetadata } from './directive.metadata.js'; +import { MethodArgsMetadata } from './param.metadata.js'; export interface PropertyMetadata { schemaName: string; diff --git a/packages/graphql/lib/schema-builder/metadata/resolver.metadata.ts b/packages/graphql/lib/schema-builder/metadata/resolver.metadata.ts index b6dd97919..ba2e5a00a 100644 --- a/packages/graphql/lib/schema-builder/metadata/resolver.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/resolver.metadata.ts @@ -1,8 +1,8 @@ import { Type } from '@nestjs/common'; -import { Complexity, GqlTypeReference } from '../../interfaces'; -import { TypeOptions } from '../../interfaces/type-options.interface'; -import { DirectiveMetadata } from './directive.metadata'; -import { MethodArgsMetadata } from './param.metadata'; +import { Complexity, GqlTypeReference } from '../../interfaces/index.js'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; +import { DirectiveMetadata } from './directive.metadata.js'; +import { MethodArgsMetadata } from './param.metadata.js'; export interface ResolverClassMetadata { target: Function; diff --git a/packages/graphql/lib/schema-builder/metadata/union.metadata.ts b/packages/graphql/lib/schema-builder/metadata/union.metadata.ts index c1fe57faa..393bf024c 100644 --- a/packages/graphql/lib/schema-builder/metadata/union.metadata.ts +++ b/packages/graphql/lib/schema-builder/metadata/union.metadata.ts @@ -1,6 +1,6 @@ import { Type } from '@nestjs/common'; -import { ResolveTypeFn } from '../../interfaces'; -import { RegisterInOption } from './class.metadata'; +import { ResolveTypeFn } from '../../interfaces/index.js'; +import { RegisterInOption } from './class.metadata.js'; export interface UnionMetadata< T extends readonly Type[] = readonly Type[], diff --git a/packages/graphql/lib/schema-builder/schema-builder.module.ts b/packages/graphql/lib/schema-builder/schema-builder.module.ts index 97f0685f8..8e4a60187 100644 --- a/packages/graphql/lib/schema-builder/schema-builder.module.ts +++ b/packages/graphql/lib/schema-builder/schema-builder.module.ts @@ -1,13 +1,13 @@ import { Module } from '@nestjs/common'; -import { InitializeOnPreviewAllowlist } from '@nestjs/core/inspector'; -import { schemaBuilderFactories } from './factories/factories'; -import { GraphQLSchemaFactory } from './graphql-schema.factory'; -import { FileSystemHelper } from './helpers/file-system.helper'; -import { OrphanedReferenceRegistry } from './services/orphaned-reference.registry'; -import { TypeFieldsAccessor } from './services/type-fields.accessor'; -import { TypeMapperService } from './services/type-mapper.service'; -import { TypeDefinitionsStorage } from './storages/type-definitions.storage'; -import { TypeDefinitionsGenerator } from './type-definitions.generator'; +import { InitializeOnPreviewAllowlist } from '@nestjs/core/inspector/index.js'; +import { schemaBuilderFactories } from './factories/factories.js'; +import { GraphQLSchemaFactory } from './graphql-schema.factory.js'; +import { FileSystemHelper } from './helpers/file-system.helper.js'; +import { OrphanedReferenceRegistry } from './services/orphaned-reference.registry.js'; +import { TypeFieldsAccessor } from './services/type-fields.accessor.js'; +import { TypeMapperService } from './services/type-mapper.service.js'; +import { TypeDefinitionsStorage } from './storages/type-definitions.storage.js'; +import { TypeDefinitionsGenerator } from './type-definitions.generator.js'; @Module({ providers: [ diff --git a/packages/graphql/lib/schema-builder/services/orphaned-reference.registry.ts b/packages/graphql/lib/schema-builder/services/orphaned-reference.registry.ts index df21c550f..502d8c20f 100644 --- a/packages/graphql/lib/schema-builder/services/orphaned-reference.registry.ts +++ b/packages/graphql/lib/schema-builder/services/orphaned-reference.registry.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; -import { GqlTypeReference } from '../../interfaces'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; +import { GqlTypeReference } from '../../interfaces/index.js'; const BANNED_TYPES: Function[] = [String, Date, Number, Boolean]; diff --git a/packages/graphql/lib/schema-builder/services/type-fields.accessor.ts b/packages/graphql/lib/schema-builder/services/type-fields.accessor.ts index 91713c2b5..1224c519f 100644 --- a/packages/graphql/lib/schema-builder/services/type-fields.accessor.ts +++ b/packages/graphql/lib/schema-builder/services/type-fields.accessor.ts @@ -7,7 +7,6 @@ import { GraphQLInterfaceType, GraphQLObjectType, } from 'graphql'; -import { omit } from 'lodash'; @Injectable() export class TypeFieldsAccessor { @@ -40,7 +39,14 @@ export class TypeFieldsAccessor { const targetField = fieldsMap[key]; const args: GraphQLFieldConfigArgumentMap = {}; targetField.args.forEach((item) => { - args[item.name] = omit(item, 'name'); + args[item.name] = { + type: item.type, + defaultValue: item.defaultValue, + description: item.description, + deprecationReason: item.deprecationReason, + astNode: item.astNode, + extensions: item.extensions, + }; }); fieldsConfig[key] = { diff --git a/packages/graphql/lib/schema-builder/services/type-mapper.service.ts b/packages/graphql/lib/schema-builder/services/type-mapper.service.ts index 2762c36a0..2662040f1 100644 --- a/packages/graphql/lib/schema-builder/services/type-mapper.service.ts +++ b/packages/graphql/lib/schema-builder/services/type-mapper.service.ts @@ -1,5 +1,5 @@ import { Injectable, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { GraphQLBoolean, GraphQLFloat, @@ -15,11 +15,11 @@ import { GqlTypeReference, NumberScalarMode, ScalarsTypeMap, -} from '../../interfaces'; -import { TypeOptions } from '../../interfaces/type-options.interface'; -import { GraphQLISODateTime, GraphQLTimestamp } from '../../scalars'; -import { DefaultNullableConflictError } from '../errors/default-nullable-conflict.error'; -import { InvalidNullableOptionError } from '../errors/invalid-nullable-option.error'; +} from '../../interfaces/index.js'; +import { TypeOptions } from '../../interfaces/type-options.interface.js'; +import { GraphQLISODateTime, GraphQLTimestamp } from '../../scalars/index.js'; +import { DefaultNullableConflictError } from '../errors/default-nullable-conflict.error.js'; +import { InvalidNullableOptionError } from '../errors/invalid-nullable-option.error.js'; @Injectable() export class TypeMapperService { diff --git a/packages/graphql/lib/schema-builder/storages/index.ts b/packages/graphql/lib/schema-builder/storages/index.ts index 71a35724e..5c54ec527 100644 --- a/packages/graphql/lib/schema-builder/storages/index.ts +++ b/packages/graphql/lib/schema-builder/storages/index.ts @@ -1 +1 @@ -export { TypeMetadataStorage } from './type-metadata.storage'; +export { TypeMetadataStorage } from './type-metadata.storage.js'; diff --git a/packages/graphql/lib/schema-builder/storages/lazy-metadata.storage.ts b/packages/graphql/lib/schema-builder/storages/lazy-metadata.storage.ts index 303b0649f..99eae45eb 100644 --- a/packages/graphql/lib/schema-builder/storages/lazy-metadata.storage.ts +++ b/packages/graphql/lib/schema-builder/storages/lazy-metadata.storage.ts @@ -1,5 +1,5 @@ import { flatten, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; const NO_TARGET_METADATA = Symbol('NO_TARGET_METADATA'); const FIELD_LAZY_METADATA = Symbol('FIELD_LAZY_METADATA'); diff --git a/packages/graphql/lib/schema-builder/storages/type-definitions.storage.ts b/packages/graphql/lib/schema-builder/storages/type-definitions.storage.ts index cfe717311..3faf5ab07 100644 --- a/packages/graphql/lib/schema-builder/storages/type-definitions.storage.ts +++ b/packages/graphql/lib/schema-builder/storages/type-definitions.storage.ts @@ -6,11 +6,11 @@ import { GraphQLObjectType, GraphQLUnionType, } from 'graphql'; -import { EnumDefinition } from '../factories/enum-definition.factory'; -import { InputTypeDefinition } from '../factories/input-type-definition.factory'; -import { InterfaceTypeDefinition } from '../factories/interface-definition.factory'; -import { ObjectTypeDefinition } from '../factories/object-type-definition.factory'; -import { UnionDefinition } from '../factories/union-definition.factory'; +import { EnumDefinition } from '../factories/enum-definition.factory.js'; +import { InputTypeDefinition } from '../factories/input-type-definition.factory.js'; +import { InterfaceTypeDefinition } from '../factories/interface-definition.factory.js'; +import { ObjectTypeDefinition } from '../factories/object-type-definition.factory.js'; +import { UnionDefinition } from '../factories/union-definition.factory.js'; export type GqlInputTypeKey = Function | object; export type GqlInputType = InputTypeDefinition | EnumDefinition; diff --git a/packages/graphql/lib/schema-builder/storages/type-metadata.storage.ts b/packages/graphql/lib/schema-builder/storages/type-metadata.storage.ts index e84916b7a..20e63bffc 100644 --- a/packages/graphql/lib/schema-builder/storages/type-metadata.storage.ts +++ b/packages/graphql/lib/schema-builder/storages/type-metadata.storage.ts @@ -1,10 +1,10 @@ import { Logger, Type } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; -import { addFieldMetadata } from '../../decorators'; -import { METADATA_FACTORY_NAME } from '../../plugin/plugin-constants'; -import { MetadataByTargetCollection } from '../collections/'; -import { CannotDetermineHostTypeError } from '../errors/cannot-determine-host-type.error'; -import { UndefinedTypeError } from '../errors/undefined-type.error'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; +import { addFieldMetadata } from '../../decorators/index.js'; +import { METADATA_FACTORY_NAME } from '../../plugin/plugin-constants.js'; +import { MetadataByTargetCollection } from '../collections/index.js'; +import { CannotDetermineHostTypeError } from '../errors/cannot-determine-host-type.error.js'; +import { UndefinedTypeError } from '../errors/undefined-type.error.js'; import { BaseResolverMetadata, ClassDirectiveMetadata, @@ -20,10 +20,10 @@ import { ResolverClassMetadata, ResolverTypeMetadata, UnionMetadata, -} from '../metadata'; -import { InterfaceMetadata } from '../metadata/interface.metadata'; -import { ObjectTypeMetadata } from '../metadata/object-type.metadata'; -import { isThrowing } from '../utils/is-throwing.util'; +} from '../metadata/index.js'; +import { InterfaceMetadata } from '../metadata/interface.metadata.js'; +import { ObjectTypeMetadata } from '../metadata/object-type.metadata.js'; +import { isThrowing } from '../utils/is-throwing.util.js'; export class TypeMetadataStorageHost { private readonly logger = new Logger(TypeMetadataStorageHost.name); @@ -93,7 +93,7 @@ export class TypeMetadataStorageHost { } getInterfaceMetadataByTarget( - target: Type, + target: Function, ): InterfaceMetadata | undefined { return this.metadataByTargetCollection.get(target).interface; } @@ -535,7 +535,7 @@ export class TypeMetadataStorageHost { } let objectOrInterfaceTypeField = objectOrInterfaceTypeMetadata.properties.find( - (fieldDef) => fieldDef.name === item.methodName, + (fieldDef) => fieldDef.schemaName === item.schemaName, ); for ( let _objectTypeRef = objectTypeRef; @@ -544,7 +544,7 @@ export class TypeMetadataStorageHost { ) { const possibleTypeMetadata = getTypeMetadata(_objectTypeRef); objectOrInterfaceTypeField = possibleTypeMetadata?.properties.find( - (fieldDef) => fieldDef.name === item.methodName, + (fieldDef) => fieldDef.schemaName === item.schemaName, ); if (objectOrInterfaceTypeField) { objectTypeRef = _objectTypeRef; diff --git a/packages/graphql/lib/schema-builder/type-definitions.generator.ts b/packages/graphql/lib/schema-builder/type-definitions.generator.ts index 1f6c67272..b96f8ab75 100644 --- a/packages/graphql/lib/schema-builder/type-definitions.generator.ts +++ b/packages/graphql/lib/schema-builder/type-definitions.generator.ts @@ -1,15 +1,19 @@ import { Injectable } from '@nestjs/common'; -import { BuildSchemaOptions } from '../interfaces'; -import { ClassMetadata, EnumMetadata, UnionMetadata } from './metadata'; -import { InterfaceMetadata } from './metadata/interface.metadata'; -import { ObjectTypeMetadata } from './metadata/object-type.metadata'; -import { EnumDefinitionFactory } from './factories/enum-definition.factory'; -import { InputTypeDefinitionFactory } from './factories/input-type-definition.factory'; -import { InterfaceDefinitionFactory } from './factories/interface-definition.factory'; -import { ObjectTypeDefinitionFactory } from './factories/object-type-definition.factory'; -import { UnionDefinitionFactory } from './factories/union-definition.factory'; -import { TypeDefinitionsStorage } from './storages/type-definitions.storage'; -import { TypeMetadataStorage } from './storages/type-metadata.storage'; +import { BuildSchemaOptions } from '../interfaces/index.js'; +import { + ClassMetadata, + EnumMetadata, + UnionMetadata, +} from './metadata/index.js'; +import { InterfaceMetadata } from './metadata/interface.metadata.js'; +import { ObjectTypeMetadata } from './metadata/object-type.metadata.js'; +import { EnumDefinitionFactory } from './factories/enum-definition.factory.js'; +import { InputTypeDefinitionFactory } from './factories/input-type-definition.factory.js'; +import { InterfaceDefinitionFactory } from './factories/interface-definition.factory.js'; +import { ObjectTypeDefinitionFactory } from './factories/object-type-definition.factory.js'; +import { UnionDefinitionFactory } from './factories/union-definition.factory.js'; +import { TypeDefinitionsStorage } from './storages/type-definitions.storage.js'; +import { TypeMetadataStorage } from './storages/type-metadata.storage.js'; @Injectable() export class TypeDefinitionsGenerator { diff --git a/packages/graphql/lib/schema-builder/utils/get-fields-and-decorator.util.ts b/packages/graphql/lib/schema-builder/utils/get-fields-and-decorator.util.ts index 9d5248e4e..adfa551e2 100644 --- a/packages/graphql/lib/schema-builder/utils/get-fields-and-decorator.util.ts +++ b/packages/graphql/lib/schema-builder/utils/get-fields-and-decorator.util.ts @@ -5,13 +5,13 @@ import { InputType, InterfaceType, ObjectType, -} from '../../decorators'; -import { ClassType } from '../../enums/class-type.enum'; -import { CLASS_TYPE_METADATA } from '../../graphql.constants'; -import { UnableToFindFieldsError } from '../errors/unable-to-find-fields.error'; -import { ClassMetadata, PropertyMetadata } from '../metadata'; -import { LazyMetadataStorage } from '../storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../storages/type-metadata.storage'; +} from '../../decorators/index.js'; +import { ClassType } from '../../enums/class-type.enum.js'; +import { CLASS_TYPE_METADATA } from '../../graphql.constants.js'; +import { UnableToFindFieldsError } from '../errors/unable-to-find-fields.error.js'; +import { ClassMetadata, PropertyMetadata } from '../metadata/index.js'; +import { LazyMetadataStorage } from '../storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../storages/type-metadata.storage.js'; export function getFieldsAndDecoratorForType( objType: Type, diff --git a/packages/graphql/lib/schema-builder/utils/get-interfaces-array.util.ts b/packages/graphql/lib/schema-builder/utils/get-interfaces-array.util.ts index 0a0b004c1..6d195fabf 100644 --- a/packages/graphql/lib/schema-builder/utils/get-interfaces-array.util.ts +++ b/packages/graphql/lib/schema-builder/utils/get-interfaces-array.util.ts @@ -1,5 +1,5 @@ -import { isFunction } from '@nestjs/common/utils/shared.utils'; -import { ObjectTypeMetadata } from '../metadata/object-type.metadata'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; +import { ObjectTypeMetadata } from '../metadata/object-type.metadata.js'; function isNativeClass(fn: Function) { return ( diff --git a/packages/graphql/lib/services/base-explorer.service.ts b/packages/graphql/lib/services/base-explorer.service.ts index f09d90a2d..f94d53599 100644 --- a/packages/graphql/lib/services/base-explorer.service.ts +++ b/packages/graphql/lib/services/base-explorer.service.ts @@ -1,7 +1,6 @@ -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { Module } from '@nestjs/core/injector/module'; -import { flattenDeep, groupBy, identity, isEmpty, mapValues } from 'lodash'; -import { ResolverMetadata } from '../interfaces/resolver-metadata.interface'; +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; +import { Module } from '@nestjs/core/injector/module.js'; +import { ResolverMetadata } from '../interfaces/resolver-metadata.interface.js'; export class BaseExplorerService { getModules( @@ -11,7 +10,7 @@ export class BaseExplorerService { if (!modulesContainer) { return []; } - if (!include || isEmpty(include)) { + if (!include || include.length === 0) { return [...modulesContainer.values()]; } const explicitlyWhitelisted = this.includeWhitelisted( @@ -45,31 +44,27 @@ export class BaseExplorerService { modules: Module[], callback: (instance: InstanceWrapper, moduleRef: Module) => T | T[], ): T[] { - const invokeMap = () => { - return modules.map((moduleRef) => { - const providers = [...moduleRef.providers.values()]; - return providers.map((wrapper) => callback(wrapper, moduleRef)); - }); - }; - return flattenDeep(invokeMap()).filter(identity); + return modules.reduce((collected, moduleRef) => { + const providers = [...moduleRef.providers.values()]; + for (const wrapper of providers) { + const result = callback(wrapper, moduleRef); + if (Array.isArray(result)) { + collected.push(...result.filter(Boolean)); + } else if (result) { + collected.push(result); + } + } + return collected; + }, []); } groupMetadata(resolvers: ResolverMetadata[]) { - const groupByType = groupBy( - resolvers, - (metadata: ResolverMetadata) => metadata.type, - ); - const groupedMetadata = mapValues( - groupByType, - (resolversArr: ResolverMetadata[]) => - resolversArr.reduce( - (prev, curr) => ({ - ...prev, - [curr.name]: curr.callback, - }), - {}, - ), - ); - return groupedMetadata; + return resolvers.reduce< + Record> + >((grouped, metadata) => { + grouped[metadata.type] ??= {}; + grouped[metadata.type][metadata.name] = metadata.callback; + return grouped; + }, {}); } } diff --git a/packages/graphql/lib/services/gql-arguments-host.ts b/packages/graphql/lib/services/gql-arguments-host.ts index 65987d041..8128513ee 100644 --- a/packages/graphql/lib/services/gql-arguments-host.ts +++ b/packages/graphql/lib/services/gql-arguments-host.ts @@ -1,5 +1,5 @@ import { ArgumentsHost } from '@nestjs/common'; -import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host'; +import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host.js'; export interface GraphQLArgumentsHost extends ArgumentsHost { getRoot(): T; diff --git a/packages/graphql/lib/services/gql-execution-context.ts b/packages/graphql/lib/services/gql-execution-context.ts index 31bca9d2b..62e3d8bf1 100644 --- a/packages/graphql/lib/services/gql-execution-context.ts +++ b/packages/graphql/lib/services/gql-execution-context.ts @@ -1,7 +1,7 @@ import { ContextType, ExecutionContext } from '@nestjs/common'; -import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host'; -import { GraphQLArgumentsHost } from './gql-arguments-host'; -import { normalizeResolverArgs } from '../utils/normalize-resolver-args'; +import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host.js'; +import { GraphQLArgumentsHost } from './gql-arguments-host.js'; +import { normalizeResolverArgs } from '../utils/normalize-resolver-args.js'; export type GqlContextType = 'graphql' | ContextType; export type GraphQLExecutionContext = GqlExecutionContext; diff --git a/packages/graphql/lib/services/gql-subscription.service.ts b/packages/graphql/lib/services/gql-subscription.service.ts index 1f46c74f1..310850d22 100644 --- a/packages/graphql/lib/services/gql-subscription.service.ts +++ b/packages/graphql/lib/services/gql-subscription.service.ts @@ -9,11 +9,6 @@ import { ServerOptions, } from 'graphql-ws'; import { useServer } from 'graphql-ws/use/ws'; -import { - GRAPHQL_WS, - SubscriptionServer, - ServerOptions as SubscriptionTransportWsServerOptions, -} from 'subscriptions-transport-ws'; import { WebSocketServer } from 'ws'; export type GraphQLWsSubscriptionsConfig = Partial< @@ -30,18 +25,8 @@ export type GraphQLWsSubscriptionsConfig = Partial< path?: string; }; -export type GraphQLSubscriptionTransportWsConfig = Partial< - Pick< - SubscriptionTransportWsServerOptions, - 'onConnect' | 'onDisconnect' | 'onOperation' | 'keepAlive' - > -> & { - path?: string; -}; - export type SubscriptionConfig = { 'graphql-ws'?: GraphQLWsSubscriptionsConfig | boolean; - 'subscriptions-transport-ws'?: GraphQLSubscriptionTransportWsConfig | boolean; }; export interface GqlSubscriptionServiceOptions extends SubscriptionConfig { @@ -54,9 +39,7 @@ export interface GqlSubscriptionServiceOptions extends SubscriptionConfig { export class GqlSubscriptionService { private readonly wss: WebSocketServer; - private readonly subTransWs: WebSocketServer; private wsGqlDisposable: Disposable; - private subServer: SubscriptionServer; constructor( private readonly options: GqlSubscriptionServiceOptions, @@ -68,27 +51,16 @@ export class GqlSubscriptionService { this.options.path, noServer: true, }); - this.subTransWs = new WebSocketServer({ - path: - ( - this.options[ - 'subscriptions-transport-ws' - ] as GraphQLSubscriptionTransportWsConfig - )?.path ?? this.options.path, - noServer: true, - }); this.initialize(); } private initialize() { - const supportedProtocols = []; const { execute = graphqlExecute, subscribe = graphqlSubscribe } = this.options; if ('graphql-ws' in this.options) { const graphqlWsOptions = this.options['graphql-ws'] === true ? {} : this.options['graphql-ws']; - supportedProtocols.push(GRAPHQL_TRANSPORT_WS_PROTOCOL); this.wsGqlDisposable = useServer( { schema: this.options.schema, @@ -101,24 +73,6 @@ export class GqlSubscriptionService { ); } - if ('subscriptions-transport-ws' in this.options) { - const subscriptionsWsOptions = - this.options['subscriptions-transport-ws'] === true - ? {} - : this.options['subscriptions-transport-ws']; - - supportedProtocols.push(GRAPHQL_WS); - this.subServer = SubscriptionServer.create( - { - schema: this.options.schema, - execute, - subscribe, - ...subscriptionsWsOptions, - }, - this.subTransWs, - ); - } - this.httpServer.on('upgrade', (req, socket, head) => { const protocol = req.headers['sec-websocket-protocol'] as | string @@ -128,15 +82,12 @@ export class GqlSubscriptionService { ? protocol : protocol?.split(',').map((p) => p.trim()); - protocols = protocols?.filter((protocol) => - supportedProtocols.includes(protocol), + protocols = protocols?.filter( + (supportedProtocol) => + supportedProtocol === GRAPHQL_TRANSPORT_WS_PROTOCOL, ); - const wss = - protocols?.includes(GRAPHQL_WS) && // subscriptions-transport-ws subprotocol - !protocols.includes(GRAPHQL_TRANSPORT_WS_PROTOCOL) // graphql-ws subprotocol - ? this.subTransWs - : this.wss; + const wss = this.wss; if (req.url?.startsWith(wss.options.path)) { wss.handleUpgrade(req, socket, head, (ws) => { @@ -148,6 +99,5 @@ export class GqlSubscriptionService { async stop() { await this.wsGqlDisposable?.dispose(); - this.subServer?.close(); } } diff --git a/packages/graphql/lib/services/index.ts b/packages/graphql/lib/services/index.ts index 4657ba4c9..a27a6bf2a 100644 --- a/packages/graphql/lib/services/index.ts +++ b/packages/graphql/lib/services/index.ts @@ -1,6 +1,6 @@ -export * from './base-explorer.service'; -export * from './gql-arguments-host'; -export * from './gql-execution-context'; -export * from './gql-subscription.service'; -export * from './resolvers-explorer.service'; -export * from './scalars-explorer.service'; +export * from './base-explorer.service.js'; +export * from './gql-arguments-host.js'; +export * from './gql-execution-context.js'; +export * from './gql-subscription.service.js'; +export * from './resolvers-explorer.service.js'; +export * from './scalars-explorer.service.js'; diff --git a/packages/graphql/lib/services/resolvers-explorer.service.ts b/packages/graphql/lib/services/resolvers-explorer.service.ts index 6397bd163..ddd26693c 100644 --- a/packages/graphql/lib/services/resolvers-explorer.service.ts +++ b/packages/graphql/lib/services/resolvers-explorer.service.ts @@ -1,5 +1,5 @@ import { Inject, Injectable, Logger } from '@nestjs/common'; -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined } from '@nestjs/common/utils/shared.utils.js'; import { ContextIdFactory, MetadataScanner, @@ -7,26 +7,26 @@ import { ModulesContainer, REQUEST, } from '@nestjs/core'; -import { ExternalContextCreator } from '@nestjs/core/helpers/external-context-creator'; -import { ParamMetadata } from '@nestjs/core/helpers/interfaces/params-metadata.interface'; -import { CONTROLLER_ID_KEY } from '@nestjs/core/injector/constants'; -import { Injector } from '@nestjs/core/injector/injector'; +import { ExternalContextCreator } from '@nestjs/core/helpers/external-context-creator.js'; +import { ParamMetadata } from '@nestjs/core/helpers/interfaces/params-metadata.interface.js'; +import { CONTROLLER_ID_KEY } from '@nestjs/core/injector/constants.js'; +import { Injector } from '@nestjs/core/injector/injector.js'; import { ContextId, InstanceWrapper, -} from '@nestjs/core/injector/instance-wrapper'; -import { InternalCoreModule } from '@nestjs/core/injector/internal-core-module'; -import { Module } from '@nestjs/core/injector/module'; -import { Entrypoint } from '@nestjs/core/inspector/interfaces/entrypoint.interface'; -import { SerializedGraph } from '@nestjs/core/inspector/serialized-graph'; -import { REQUEST_CONTEXT_ID } from '@nestjs/core/router/request/request-constants'; +} from '@nestjs/core/injector/instance-wrapper.js'; +import { InternalCoreModule } from '@nestjs/core/injector/internal-core-module/index.js'; +import { Module } from '@nestjs/core/injector/module.js'; +import { Entrypoint } from '@nestjs/core/inspector/interfaces/entrypoint.interface.js'; +import { SerializedGraph } from '@nestjs/core/inspector/serialized-graph.js'; +import { REQUEST_CONTEXT_ID } from '@nestjs/core/router/request/request-constants.js'; +import { identity } from 'es-toolkit'; import { GraphQLResolveInfo } from 'graphql'; -import { identity } from 'lodash'; -import { SubscriptionOptions } from '../decorators/subscription.decorator'; -import { AbstractGraphQLDriver } from '../drivers/abstract-graphql.driver'; -import { GqlParamtype } from '../enums/gql-paramtype.enum'; -import { Resolver } from '../enums/resolver.enum'; -import { GqlParamsFactory } from '../factories/params.factory'; +import { SubscriptionOptions } from '../decorators/subscription.decorator.js'; +import { AbstractGraphQLDriver } from '../drivers/abstract-graphql.driver.js'; +import { GqlParamtype } from '../enums/gql-paramtype.enum.js'; +import { Resolver } from '../enums/resolver.enum.js'; +import { GqlParamsFactory } from '../factories/params.factory.js'; import { FIELD_RESOLVER_MIDDLEWARE_METADATA, FIELD_TYPENAME, @@ -34,14 +34,14 @@ import { PARAM_ARGS_METADATA, SUBSCRIPTION_OPTIONS_METADATA, SUBSCRIPTION_TYPE, -} from '../graphql.constants'; -import { GqlModuleOptions } from '../interfaces'; -import { GqlEntrypointMetadata } from '../interfaces/gql-entrypoint-metadata.interface'; -import { ResolverMetadata } from '../interfaces/resolver-metadata.interface'; -import { decorateFieldResolverWithMiddleware } from '../utils/decorate-field-resolver.util'; -import { extractMetadata } from '../utils/extract-metadata.util'; -import { BaseExplorerService } from './base-explorer.service'; -import { GqlContextType } from './gql-execution-context'; +} from '../graphql.constants.js'; +import { GqlModuleOptions } from '../interfaces/index.js'; +import { GqlEntrypointMetadata } from '../interfaces/gql-entrypoint-metadata.interface.js'; +import { ResolverMetadata } from '../interfaces/resolver-metadata.interface.js'; +import { decorateFieldResolverWithMiddleware } from '../utils/decorate-field-resolver.util.js'; +import { extractMetadata } from '../utils/extract-metadata.util.js'; +import { BaseExplorerService } from './base-explorer.service.js'; +import { GqlContextType } from './gql-execution-context.js'; const ROOT_RESOLVER_TYPES = new Set([ Resolver.MUTATION, diff --git a/packages/graphql/lib/services/scalars-explorer.service.ts b/packages/graphql/lib/services/scalars-explorer.service.ts index 76a9653a8..54c7f61c3 100644 --- a/packages/graphql/lib/services/scalars-explorer.service.ts +++ b/packages/graphql/lib/services/scalars-explorer.service.ts @@ -1,16 +1,16 @@ import { Inject, Injectable } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { ModulesContainer } from '@nestjs/core'; -import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; +import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js'; import { GRAPHQL_MODULE_OPTIONS, SCALAR_NAME_METADATA, SCALAR_TYPE_METADATA, -} from '../graphql.constants'; -import { ScalarsTypeMap } from '../interfaces'; -import { GqlModuleOptions } from '../interfaces/gql-module-options.interface'; -import { createScalarType } from '../utils/scalar-types.utils'; -import { BaseExplorerService } from './base-explorer.service'; +} from '../graphql.constants.js'; +import { ScalarsTypeMap } from '../interfaces/index.js'; +import { GqlModuleOptions } from '../interfaces/gql-module-options.interface.js'; +import { createScalarType } from '../utils/scalar-types.utils.js'; +import { BaseExplorerService } from './base-explorer.service.js'; @Injectable() export class ScalarsExplorerService extends BaseExplorerService { diff --git a/packages/graphql/lib/type-factories/create-union-type.factory.ts b/packages/graphql/lib/type-factories/create-union-type.factory.ts index 370b68aa7..c66b9f31d 100644 --- a/packages/graphql/lib/type-factories/create-union-type.factory.ts +++ b/packages/graphql/lib/type-factories/create-union-type.factory.ts @@ -6,10 +6,10 @@ */ import { Type } from '@nestjs/common'; -import { ResolveTypeFn } from '../interfaces/resolve-type-fn.interface'; -import { RegisterInOption } from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; +import { ResolveTypeFn } from '../interfaces/resolve-type-fn.interface.js'; +import { RegisterInOption } from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; /** * Interface defining options that can be passed to `createUnionType` function. diff --git a/packages/graphql/lib/type-factories/index.ts b/packages/graphql/lib/type-factories/index.ts index 5389f878c..695ffda78 100644 --- a/packages/graphql/lib/type-factories/index.ts +++ b/packages/graphql/lib/type-factories/index.ts @@ -1,2 +1,2 @@ -export * from './create-union-type.factory'; -export * from './register-enum-type.factory'; +export * from './create-union-type.factory.js'; +export * from './register-enum-type.factory.js'; diff --git a/packages/graphql/lib/type-factories/register-enum-type.factory.ts b/packages/graphql/lib/type-factories/register-enum-type.factory.ts index a740bd741..a66e1120d 100644 --- a/packages/graphql/lib/type-factories/register-enum-type.factory.ts +++ b/packages/graphql/lib/type-factories/register-enum-type.factory.ts @@ -8,9 +8,9 @@ import { EnumMetadataValuesMap, RegisterInOption, -} from '../schema-builder/metadata'; -import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage'; -import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage'; +} from '../schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../schema-builder/storages/lazy-metadata.storage.js'; +import { TypeMetadataStorage } from '../schema-builder/storages/type-metadata.storage.js'; /** * Interface defining options that can be passed to `registerEnumType` function. diff --git a/packages/graphql/lib/type-helpers/index.ts b/packages/graphql/lib/type-helpers/index.ts index 41ee31b6f..f8cab3d45 100644 --- a/packages/graphql/lib/type-helpers/index.ts +++ b/packages/graphql/lib/type-helpers/index.ts @@ -1,5 +1,5 @@ -export * from './field-type.helper'; -export * from './intersection-type.helper'; -export * from './omit-type.helper'; -export * from './partial-type.helper'; -export * from './pick-type.helper'; +export * from './field-type.helper.js'; +export * from './intersection-type.helper.js'; +export * from './omit-type.helper.js'; +export * from './partial-type.helper.js'; +export * from './pick-type.helper.js'; diff --git a/packages/graphql/lib/type-helpers/intersection-type.helper.ts b/packages/graphql/lib/type-helpers/intersection-type.helper.ts index 691510901..414f01f25 100644 --- a/packages/graphql/lib/type-helpers/intersection-type.helper.ts +++ b/packages/graphql/lib/type-helpers/intersection-type.helper.ts @@ -1,16 +1,16 @@ import { Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata, } from '@nestjs/mapped-types'; -import { Field } from '../decorators'; -import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { PropertyMetadata } from '../schema-builder/metadata'; -import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util'; -import { applyFieldDecorators } from './type-helpers.utils'; +import { Field } from '../decorators/index.js'; +import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { PropertyMetadata } from '../schema-builder/metadata/index.js'; +import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util.js'; +import { applyFieldDecorators } from './type-helpers.utils.js'; export function IntersectionType( classARef: Type, diff --git a/packages/graphql/lib/type-helpers/omit-type.helper.ts b/packages/graphql/lib/type-helpers/omit-type.helper.ts index 6e4a9b5eb..a01b815bd 100644 --- a/packages/graphql/lib/type-helpers/omit-type.helper.ts +++ b/packages/graphql/lib/type-helpers/omit-type.helper.ts @@ -1,16 +1,16 @@ import { Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata, } from '@nestjs/mapped-types'; -import { Field } from '../decorators'; -import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { PropertyMetadata } from '../schema-builder/metadata'; -import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util'; -import { applyFieldDecorators } from './type-helpers.utils'; +import { Field } from '../decorators/index.js'; +import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { PropertyMetadata } from '../schema-builder/metadata/index.js'; +import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util.js'; +import { applyFieldDecorators } from './type-helpers.utils.js'; export function OmitType( classRef: Type, diff --git a/packages/graphql/lib/type-helpers/partial-type.helper.ts b/packages/graphql/lib/type-helpers/partial-type.helper.ts index 69a08edac..f10711ec8 100644 --- a/packages/graphql/lib/type-helpers/partial-type.helper.ts +++ b/packages/graphql/lib/type-helpers/partial-type.helper.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { applyIsOptionalDecorator, applyValidateIfDefinedDecorator, @@ -7,13 +7,13 @@ import { inheritTransformationMetadata, inheritValidationMetadata, } from '@nestjs/mapped-types'; -import { Field } from '../decorators'; -import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants'; -import { PropertyMetadata } from '../schema-builder/metadata'; -import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util'; -import { applyFieldDecorators } from './type-helpers.utils'; +import { Field } from '../decorators/index.js'; +import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { METADATA_FACTORY_NAME } from '../plugin/plugin-constants.js'; +import { PropertyMetadata } from '../schema-builder/metadata/index.js'; +import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util.js'; +import { applyFieldDecorators } from './type-helpers.utils.js'; interface PartialTypeOptions { decorator?: ClassDecoratorFactory; diff --git a/packages/graphql/lib/type-helpers/pick-type.helper.ts b/packages/graphql/lib/type-helpers/pick-type.helper.ts index 4847e77d9..013fb057f 100644 --- a/packages/graphql/lib/type-helpers/pick-type.helper.ts +++ b/packages/graphql/lib/type-helpers/pick-type.helper.ts @@ -1,16 +1,16 @@ import { Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { inheritPropertyInitializers, inheritTransformationMetadata, inheritValidationMetadata, } from '@nestjs/mapped-types'; -import { Field } from '../decorators'; -import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface'; -import { MetadataLoader } from '../plugin/metadata-loader'; -import { PropertyMetadata } from '../schema-builder/metadata'; -import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util'; -import { applyFieldDecorators } from './type-helpers.utils'; +import { Field } from '../decorators/index.js'; +import { ClassDecoratorFactory } from '../interfaces/class-decorator-factory.interface.js'; +import { MetadataLoader } from '../plugin/metadata-loader.js'; +import { PropertyMetadata } from '../schema-builder/metadata/index.js'; +import { getFieldsAndDecoratorForType } from '../schema-builder/utils/get-fields-and-decorator.util.js'; +import { applyFieldDecorators } from './type-helpers.utils.js'; export function PickType( classRef: Type, diff --git a/packages/graphql/lib/type-helpers/type-helpers.utils.ts b/packages/graphql/lib/type-helpers/type-helpers.utils.ts index c4fc32411..cd3cfda46 100644 --- a/packages/graphql/lib/type-helpers/type-helpers.utils.ts +++ b/packages/graphql/lib/type-helpers/type-helpers.utils.ts @@ -1,5 +1,5 @@ -import { Directive, Extensions } from '../decorators'; -import { PropertyMetadata } from '../schema-builder/metadata'; +import { Directive, Extensions } from '../decorators/index.js'; +import { PropertyMetadata } from '../schema-builder/metadata/index.js'; export function applyFieldDecorators( targetClass: Function, diff --git a/packages/graphql/lib/utils/add-class-type-metadata.util.ts b/packages/graphql/lib/utils/add-class-type-metadata.util.ts index 7764a565c..f3a906f4a 100644 --- a/packages/graphql/lib/utils/add-class-type-metadata.util.ts +++ b/packages/graphql/lib/utils/add-class-type-metadata.util.ts @@ -1,6 +1,6 @@ import { SetMetadata } from '@nestjs/common'; -import { ClassType } from '../enums/class-type.enum'; -import { CLASS_TYPE_METADATA } from '../graphql.constants'; +import { ClassType } from '../enums/class-type.enum.js'; +import { CLASS_TYPE_METADATA } from '../graphql.constants.js'; export function addClassTypeMetadata(target: Function, classType: ClassType) { const decoratorFactory: ClassDecorator = SetMetadata( diff --git a/packages/graphql/lib/utils/auto-schema-file.util.ts b/packages/graphql/lib/utils/auto-schema-file.util.ts index 85d552e3d..bbf6ab699 100644 --- a/packages/graphql/lib/utils/auto-schema-file.util.ts +++ b/packages/graphql/lib/utils/auto-schema-file.util.ts @@ -1,5 +1,5 @@ -import { isObject, isString } from '@nestjs/common/utils/shared.utils'; -import { AutoSchemaFileValue } from '../interfaces'; +import { isObject, isString } from '@nestjs/common/utils/shared.utils.js'; +import { AutoSchemaFileValue } from '../interfaces/index.js'; export function getPathForAutoSchemaFile( autoSchemaFile: AutoSchemaFileValue, diff --git a/packages/graphql/lib/utils/decorate-field-resolver.util.ts b/packages/graphql/lib/utils/decorate-field-resolver.util.ts index 33207cc82..54f3d4ab7 100644 --- a/packages/graphql/lib/utils/decorate-field-resolver.util.ts +++ b/packages/graphql/lib/utils/decorate-field-resolver.util.ts @@ -1,5 +1,5 @@ import { GraphQLResolveInfo } from 'graphql'; -import { FieldMiddleware } from '../interfaces'; +import { FieldMiddleware } from '../interfaces/index.js'; export function decorateFieldResolverWithMiddleware< TSource extends object = any, diff --git a/packages/graphql/lib/utils/extend.util.ts b/packages/graphql/lib/utils/extend.util.ts index b4e89d401..c76926d70 100644 --- a/packages/graphql/lib/utils/extend.util.ts +++ b/packages/graphql/lib/utils/extend.util.ts @@ -1,13 +1,13 @@ -import { defaultTo, isArray, isString } from 'lodash'; - -export function extend(obj1: unknown, obj2: unknown) { - if (isString(obj1)) { - return isString(obj2) - ? [defaultTo(obj1, ''), defaultTo(obj2, '')] - : [defaultTo(obj1, '')].concat(defaultTo(obj2, [])); +export function extend(obj1: unknown, obj2: unknown): any { + if (typeof obj1 === 'string') { + const extraItems = obj2 == null ? [] : Array.isArray(obj2) ? obj2 : [obj2]; + return typeof obj2 === 'string' + ? [obj1 ?? '', obj2 ?? ''] + : [obj1 ?? ''].concat(extraItems); } - if (isArray(obj1)) { - return defaultTo(obj1, []).concat(defaultTo(obj2, [])); + if (Array.isArray(obj1)) { + const extraItems = obj2 == null ? [] : Array.isArray(obj2) ? obj2 : [obj2]; + return obj1.concat(extraItems); } return { ...((obj1 as object) || {}), diff --git a/packages/graphql/lib/utils/extract-metadata.util.ts b/packages/graphql/lib/utils/extract-metadata.util.ts index 4f821aaeb..efcb5fa6f 100644 --- a/packages/graphql/lib/utils/extract-metadata.util.ts +++ b/packages/graphql/lib/utils/extract-metadata.util.ts @@ -5,8 +5,8 @@ import { RESOLVER_REFERENCE_KEY, RESOLVER_REFERENCE_METADATA, RESOLVER_TYPE_METADATA, -} from '../graphql.constants'; -import { ResolverMetadata } from '../interfaces/resolver-metadata.interface'; +} from '../graphql.constants.js'; +import { ResolverMetadata } from '../interfaces/resolver-metadata.interface.js'; export function extractMetadata( instance: Record, diff --git a/packages/graphql/lib/utils/index.ts b/packages/graphql/lib/utils/index.ts index e51b06ac1..40acc0ad4 100644 --- a/packages/graphql/lib/utils/index.ts +++ b/packages/graphql/lib/utils/index.ts @@ -1,8 +1,8 @@ -export * from './auto-schema-file.util'; -export * from './extend.util'; -export * from './extract-metadata.util'; -export * from './generate-token.util'; -export * from './get-number-of-arguments.util'; -export * from './normalize-route-path.util'; -export * from './remove-temp.util'; -export * from './stringify-without-quotes.util'; +export * from './auto-schema-file.util.js'; +export * from './extend.util.js'; +export * from './extract-metadata.util.js'; +export * from './generate-token.util.js'; +export * from './get-number-of-arguments.util.js'; +export * from './normalize-route-path.util.js'; +export * from './remove-temp.util.js'; +export * from './stringify-without-quotes.util.js'; diff --git a/packages/graphql/lib/utils/is-pipe.util.ts b/packages/graphql/lib/utils/is-pipe.util.ts index f592e1112..7ea3df818 100644 --- a/packages/graphql/lib/utils/is-pipe.util.ts +++ b/packages/graphql/lib/utils/is-pipe.util.ts @@ -1,5 +1,5 @@ import { PipeTransform, Type } from '@nestjs/common'; -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; export function isPipe( value: unknown, diff --git a/packages/graphql/lib/utils/reflection.utilts.ts b/packages/graphql/lib/utils/reflection.utilts.ts index 4a60f7500..98649c935 100644 --- a/packages/graphql/lib/utils/reflection.utilts.ts +++ b/packages/graphql/lib/utils/reflection.utilts.ts @@ -1,11 +1,10 @@ import { Type } from '@nestjs/common'; -import { get } from 'lodash'; import { GqlTypeReference, ReturnTypeFunc, -} from '../interfaces/return-type-func.interface'; -import { TypeOptions } from '../interfaces/type-options.interface'; -import { UndefinedTypeError } from '../schema-builder/errors/undefined-type.error'; +} from '../interfaces/return-type-func.interface.js'; +import { TypeOptions } from '../interfaces/type-options.interface.js'; +import { UndefinedTypeError } from '../schema-builder/errors/undefined-type.error.js'; const NOT_ALLOWED_TYPES: Type[] = [Promise, Array, Object, Function]; @@ -51,7 +50,7 @@ export function reflectTypeFromMetadata( if (hasNoExplicitAndImplicitIsNotAllowed || hasNoImplicitNorExplicitType) { if (!reflectOptions.ignoreOnUndefinedType) { throw new UndefinedTypeError( - get(prototype, 'constructor.name'), + (prototype as { constructor?: { name?: string } }).constructor?.name, propertyKey, index, ); diff --git a/packages/graphql/lib/utils/transform-schema.util.ts b/packages/graphql/lib/utils/transform-schema.util.ts index 291791cb3..7fd64be41 100644 --- a/packages/graphql/lib/utils/transform-schema.util.ts +++ b/packages/graphql/lib/utils/transform-schema.util.ts @@ -38,7 +38,7 @@ interface ApolloSubgraphExtensions { resolveReference?: GraphQLReferenceResolver; } -declare module 'graphql/type/definition' { +declare module 'graphql/type/definition.js' { interface GraphQLObjectTypeExtensions<_TSource = any, _TContext = any> { apollo?: { subgraph?: ApolloSubgraphExtensions<_TContext>; @@ -102,15 +102,21 @@ export function transformSchema( fields: () => replaceFields(config.fields), }); - if (type.extensions?.apollo?.subgraph?.resolveReference) { + const typeApolloExtensions = type.extensions?.apollo as + | { subgraph?: ApolloSubgraphExtensions } + | undefined; + const objectApolloExtensions = objectType.extensions?.apollo as + | { subgraph?: ApolloSubgraphExtensions } + | undefined; + + if (typeApolloExtensions?.subgraph?.resolveReference) { objectType.extensions = { ...objectType.extensions, apollo: { - ...objectType.extensions.apollo, + ...objectApolloExtensions, subgraph: { - ...objectType.extensions.apollo.subgraph, - resolveReference: - type.extensions.apollo.subgraph.resolveReference, + ...objectApolloExtensions?.subgraph, + resolveReference: typeApolloExtensions.subgraph.resolveReference, }, }, }; diff --git a/packages/graphql/package.json b/packages/graphql/package.json index d612f6d7d..02fc194d7 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -4,6 +4,7 @@ "description": "Nest - modern, fast, powerful node.js web framework (@graphql)", "author": "Kamil Mysliwiec", "license": "MIT", + "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", "browser": "./dist/extra/graphql-model-shim.js", @@ -25,15 +26,15 @@ }, "./plugin": { "types": "./dist/plugin/index.d.ts", - "require": "./plugin.js", - "default": "./plugin.js" + "require": "./plugin.cjs", + "default": "./plugin.cjs" }, "./package.json": "./package.json", "./*": "./*" }, "files": [ "dist", - "plugin.js" + "plugin.cjs" ], "publishConfig": { "access": "public" @@ -43,6 +44,7 @@ "test:e2e:dev": "vitest watch" }, "dependencies": { + "es-toolkit": "1.39.3", "@graphql-tools/merge": "9.1.9", "@graphql-tools/schema": "10.0.33", "@graphql-tools/utils": "11.1.0", @@ -51,25 +53,23 @@ "fast-glob": "3.3.3", "graphql-tag": "2.12.6", "graphql-ws": "6.0.8", - "lodash": "4.18.1", "normalize-path": "3.0.0", - "subscriptions-transport-ws": "0.11.0", "tslib": "2.8.1", "ws": "8.20.1" }, "devDependencies": { "@apollo/subgraph": "2.2.3", - "@nestjs/common": "11.1.19", - "@nestjs/core": "11.1.19", - "@nestjs/testing": "11.1.19", + "@nestjs/common": "next", + "@nestjs/core": "next", + "@nestjs/testing": "next", "graphql": "16.14.0", "reflect-metadata": "0.2.2", "ts-morph": "28.0.0" }, "peerDependencies": { "@apollo/subgraph": "^2.9.3", - "@nestjs/common": "^11.0.1", - "@nestjs/core": "^11.0.1", + "@nestjs/common": "next", + "@nestjs/core": "next", "class-transformer": "*", "class-validator": "*", "graphql": "^16.11.0", diff --git a/packages/graphql/plugin.js b/packages/graphql/plugin.cjs similarity index 97% rename from packages/graphql/plugin.js rename to packages/graphql/plugin.cjs index e05ae4b94..f7de48274 100644 --- a/packages/graphql/plugin.js +++ b/packages/graphql/plugin.cjs @@ -5,4 +5,4 @@ const plugin = require('./dist/plugin'); (0, tslib_1.__exportStar)(plugin, exports); /** Compatibility with ts-patch/ttypescript */ -exports.default = (program, options) => plugin.before(options, program); +exports.default = (program, options) => plugin.before(options, program); \ No newline at end of file diff --git a/packages/graphql/tests/decorators/register-in.decorator.spec.ts b/packages/graphql/tests/decorators/register-in.decorator.spec.ts index c3e6e3b6b..9684aec6f 100644 --- a/packages/graphql/tests/decorators/register-in.decorator.spec.ts +++ b/packages/graphql/tests/decorators/register-in.decorator.spec.ts @@ -7,8 +7,8 @@ import { registerEnumType, createUnionType, TypeMetadataStorage, -} from '../../lib'; -import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage'; +} from '../../lib/index.js'; +import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage.js'; /** * Integration tests for the registerIn decorator option. diff --git a/packages/graphql/tests/graphql-ast.explorer.spec.ts b/packages/graphql/tests/graphql-ast.explorer.spec.ts index 12e03be26..0bc78a1af 100644 --- a/packages/graphql/tests/graphql-ast.explorer.spec.ts +++ b/packages/graphql/tests/graphql-ast.explorer.spec.ts @@ -1,9 +1,9 @@ -import { GraphQLAstExplorer } from '../lib'; +import { GraphQLAstExplorer } from '../lib/index.js'; import { gql } from 'graphql-tag'; describe('GraphQLAstExplorer', () => { describe('explore', () => { - it('should generate fields as optional when they contain arguments', () => { + it('should mark non-nullable fields with arguments as required', async () => { const astExplorer = new GraphQLAstExplorer(); const document = gql` @@ -18,16 +18,56 @@ describe('GraphQLAstExplorer', () => { } `; - astExplorer - .explore(document, '/dev/null', 'interface', {}) - .then((sourceFile) => { - expect( - sourceFile - .getStructure() - .statements[0].properties.find((prop) => prop.name === 'weight')! - .hasQuestionToken, - ).toBe(true); - }); + const sourceFile = await astExplorer.explore( + document, + '/dev/null', + 'interface', + {}, + ); + + const catType = (sourceFile.getStructure().statements as any[]).find( + (statement) => statement.name === 'Cat', + ); + const weightField = catType.properties.find( + (prop: any) => prop.name === 'weight', + ); + expect(weightField.hasQuestionToken).toBe(false); + }); + + it('should keep root resolver fields required when skipResolverArgs is true', async () => { + const astExplorer = new GraphQLAstExplorer(); + + const document = gql` + type User { + id: ID! + email: String! + } + + type Mutation { + signIn(login: String!, password: String!): User! + signUp: User! + } + `; + + const sourceFile = await astExplorer.explore( + document, + '/dev/null', + 'interface', + { skipResolverArgs: true }, + ); + + const mutationType = (sourceFile.getStructure().statements as any[]).find( + (statement) => statement.name === 'IMutation', + ); + const signIn = mutationType.properties.find( + (prop: any) => prop.name === 'signIn', + ); + const signUp = mutationType.properties.find( + (prop: any) => prop.name === 'signUp', + ); + + expect(signIn.hasQuestionToken).toBe(false); + expect(signUp.hasQuestionToken).toBe(false); }); }); }); diff --git a/packages/graphql/tests/graphql.factory.spec.ts b/packages/graphql/tests/graphql.factory.spec.ts index e1b1db7ba..495d58602 100644 --- a/packages/graphql/tests/graphql.factory.spec.ts +++ b/packages/graphql/tests/graphql.factory.spec.ts @@ -1,16 +1,16 @@ import { Test } from '@nestjs/testing'; +import { type Mock, vi } from 'vitest'; -import { GraphQLAstExplorer, GraphQLFactory } from '../lib'; -import { GraphQLSchemaBuilder } from '../lib/graphql-schema.builder'; -import { ResolversExplorerService } from '../lib/services/resolvers-explorer.service'; -import { ScalarsExplorerService } from '../lib/services/scalars-explorer.service'; -import gql from 'graphql-tag'; +import { GraphQLAstExplorer, GraphQLFactory } from '../lib/index.js'; +import { GraphQLSchemaBuilder } from '../lib/graphql-schema.builder.js'; +import { ResolversExplorerService } from '../lib/services/resolvers-explorer.service.js'; +import { ScalarsExplorerService } from '../lib/services/scalars-explorer.service.js'; import { GraphQLSchema } from 'graphql'; describe('GraphQLFactory', () => { let graphqlFactory: GraphQLFactory; - let resolverExplorer: { explore: vi.Mock }; - let scalarExplorer: { explore: vi.Mock }; + let resolverExplorer: { explore: Mock }; + let scalarExplorer: { explore: Mock }; beforeEach(async () => { resolverExplorer = { explore: vi.fn() }; diff --git a/packages/graphql/tests/interfaces/custom-scalar.interface.spec.ts b/packages/graphql/tests/interfaces/custom-scalar.interface.spec.ts index 20b2f783e..b9ff79388 100644 --- a/packages/graphql/tests/interfaces/custom-scalar.interface.spec.ts +++ b/packages/graphql/tests/interfaces/custom-scalar.interface.spec.ts @@ -1,6 +1,6 @@ import { Kind, ValueNode } from 'graphql'; import { expectTypeOf } from 'vitest'; -import { CustomScalar } from '../../lib/interfaces'; +import { CustomScalar } from '../../lib/interfaces/index.js'; describe('CustomScalar', () => { it('should allow parseLiteral, parseValue and serialize to return null or undefined', () => { diff --git a/packages/graphql/tests/middleware/middleware-type-check.spec.ts b/packages/graphql/tests/middleware/middleware-type-check.spec.ts new file mode 100644 index 000000000..d954d9716 --- /dev/null +++ b/packages/graphql/tests/middleware/middleware-type-check.spec.ts @@ -0,0 +1,58 @@ +import { GraphQLResolveInfo } from 'graphql'; +import { MiddlewareContext, NextFn } from '../../lib/interfaces/index.js'; + +export const testMiddleware = async (ctx: MiddlewareContext, next: NextFn) => { + let logData: MiddlewareContext = { + source: ctx.source, + args: ctx.args, + context: ctx.context, + }; + + if (ctx.info) { + logData = { + ...logData, + info: ctx.info, + }; + } + + return next(); +}; + +describe('testMiddleware', () => { + let mockContext: MiddlewareContext; + let mockNext: NextFn; + + beforeEach(() => { + mockContext = { + source: {}, + args: {}, + context: {}, + info: { + path: { typename: 'TestType', key: 'testField' }, + } as GraphQLResolveInfo, + }; + + mockNext = vi.fn().mockResolvedValue('next result'); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should call next when info is provided', () => { + testMiddleware(mockContext, mockNext); + expect(mockNext).toHaveBeenCalled(); + }); + + it('should handle case when info is undefined', () => { + mockContext.info = undefined; + testMiddleware(mockContext, mockNext); + expect(mockNext).toHaveBeenCalled(); + }); + + it('should handle case when info is null', () => { + mockContext.info = null; + testMiddleware(mockContext, mockNext); + expect(mockNext).toHaveBeenCalled(); + }); +}); diff --git a/packages/graphql/tests/plugin/cases/es5-eager-imports/post.model.ts b/packages/graphql/tests/plugin/cases/es5-eager-imports/post.model.ts index 225538feb..6f3c79e50 100644 --- a/packages/graphql/tests/plugin/cases/es5-eager-imports/post.model.ts +++ b/packages/graphql/tests/plugin/cases/es5-eager-imports/post.model.ts @@ -11,7 +11,7 @@ * sure all types used in metadata is loaded into runtime */ -import { Author } from './author.model'; +import { Author } from './author.model.js'; declare const ObjectType: any; diff --git a/packages/graphql/tests/plugin/decorators/field.decorator.spec.ts b/packages/graphql/tests/plugin/decorators/field.decorator.spec.ts index c2d12ca0e..369e4a94d 100644 --- a/packages/graphql/tests/plugin/decorators/field.decorator.spec.ts +++ b/packages/graphql/tests/plugin/decorators/field.decorator.spec.ts @@ -1,4 +1,4 @@ -import { Field } from '../../../lib/decorators'; +import { Field } from '../../../lib/decorators/index.js'; class Inner { test: string; diff --git a/packages/graphql/tests/plugin/fixtures/project/app.module.ts b/packages/graphql/tests/plugin/fixtures/project/app.module.ts index d9724e8f2..8e3a5c587 100644 --- a/packages/graphql/tests/plugin/fixtures/project/app.module.ts +++ b/packages/graphql/tests/plugin/fixtures/project/app.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { GraphQLModule } from '../../../../lib'; -import { RecipesModule } from './recipes/recipes.module'; +import { GraphQLModule } from '../../../../lib/index.js'; +import { RecipesModule } from './recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/graphql/tests/plugin/fixtures/project/common/scalars/date.scalar.ts b/packages/graphql/tests/plugin/fixtures/project/common/scalars/date.scalar.ts index 0c2bd0ae2..c7fe2f0b4 100644 --- a/packages/graphql/tests/plugin/fixtures/project/common/scalars/date.scalar.ts +++ b/packages/graphql/tests/plugin/fixtures/project/common/scalars/date.scalar.ts @@ -1,6 +1,6 @@ import { Kind, ValueNode } from 'graphql'; -import { Scalar } from '../../../../../../lib/decorators'; -import { CustomScalar } from '../../../../../../lib/interfaces'; +import { Scalar } from '../../../../../../lib/decorators/index.js'; +import { CustomScalar } from '../../../../../../lib/interfaces/index.js'; @Scalar('Date', (type) => Date) export class DateScalar implements CustomScalar { diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/dto/new-recipe.input.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/dto/new-recipe.input.ts index 6bc019122..f2d2d7196 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/dto/new-recipe.input.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/dto/new-recipe.input.ts @@ -1,5 +1,5 @@ import { IsOptional, Length, MaxLength } from 'class-validator'; -import { InputType } from '../../../../../../lib/decorators'; +import { InputType } from '../../../../../../lib/decorators/index.js'; @InputType() export class NewRecipeInput { diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/dto/non-exported.input.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/dto/non-exported.input.ts index 8ae8c4a02..c4b893731 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/dto/non-exported.input.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/dto/non-exported.input.ts @@ -1,4 +1,4 @@ -import { InputType } from '../../../../../../lib/decorators'; +import { InputType } from '../../../../../../lib/decorators/index.js'; @InputType() class NonExportedInput { diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/dto/recipes.args.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/dto/recipes.args.ts index feab69ed6..f7f9030bb 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/dto/recipes.args.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/dto/recipes.args.ts @@ -1,5 +1,5 @@ import { Max, Min } from 'class-validator'; -import { ArgsType } from '../../../../../../lib/decorators'; +import { ArgsType } from '../../../../../../lib/decorators/index.js'; @ArgsType() export class RecipesArgs { diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/models/ingredient.model.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/models/ingredient.model.ts index 41353d7d5..e914ee982 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/models/ingredient.model.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/models/ingredient.model.ts @@ -1,4 +1,4 @@ -import { ObjectType } from '../../../../../../lib/decorators'; +import { ObjectType } from '../../../../../../lib/decorators/index.js'; /** * Ingredient model definition diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/models/recipe.model.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/models/recipe.model.ts index ebdd1f2a0..7eae6e037 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/models/recipe.model.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/models/recipe.model.ts @@ -1,5 +1,5 @@ -import { Field, ObjectType } from '../../../../../../lib/decorators'; -import { Ingredient } from './ingredient.model'; +import { Field, ObjectType } from '../../../../../../lib/decorators/index.js'; +import { Ingredient } from './ingredient.model.js'; @ObjectType({ description: 'recipe ' }) export class Recipe { diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.module.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.module.ts index fd2d2cc95..e3b3c691f 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.module.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; -import { DateScalar } from '../common/scalars/date.scalar'; -import { RecipesResolver } from './recipes.resolver'; -import { RecipesService } from './recipes.service'; +import { DateScalar } from '../common/scalars/date.scalar.js'; +import { RecipesResolver } from './recipes.resolver.js'; +import { RecipesService } from './recipes.service.js'; @Module({ providers: [RecipesResolver, RecipesService, DateScalar], diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.resolver.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.resolver.ts index 5a0e855b6..25afef699 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.resolver.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.resolver.ts @@ -1,19 +1,20 @@ import { NotFoundException } from '@nestjs/common'; import { PubSub } from 'graphql-subscriptions'; import { + Args, Mutation, Query, Resolver, Subscription, -} from '../../../../../lib/decorators'; -import { NewRecipeInput } from './dto/new-recipe.input'; -import { RecipesArgs } from './dto/recipes.args'; -import { Recipe } from './models/recipe.model'; -import { RecipesService } from './recipes.service'; +} from '../../../../../lib/decorators/index.js'; +import { NewRecipeInput } from './dto/new-recipe.input.js'; +import { RecipesArgs } from './dto/recipes.args.js'; +import { Recipe } from './models/recipe.model.js'; +import { RecipesService } from './recipes.service.js'; const pubSub = new PubSub(); -@Resolver((of) => Recipe) +@Resolver(() => Recipe) export class RecipesResolver { constructor(private readonly recipesService: RecipesService) {} diff --git a/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.service.ts b/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.service.ts index a4d6428eb..ea6091717 100644 --- a/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.service.ts +++ b/packages/graphql/tests/plugin/fixtures/project/recipes/recipes.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; -import { NewRecipeInput } from './dto/new-recipe.input'; -import { RecipesArgs } from './dto/recipes.args'; -import { Recipe } from './models/recipe.model'; +import { NewRecipeInput } from './dto/new-recipe.input.js'; +import { RecipesArgs } from './dto/recipes.args.js'; +import { Recipe } from './models/recipe.model.js'; @Injectable() export class RecipesService { diff --git a/packages/graphql/tests/plugin/fixtures/project/tsconfig.json b/packages/graphql/tests/plugin/fixtures/project/tsconfig.json index 2f6b08ab5..6a8f2b342 100644 --- a/packages/graphql/tests/plugin/fixtures/project/tsconfig.json +++ b/packages/graphql/tests/plugin/fixtures/project/tsconfig.json @@ -8,8 +8,10 @@ "allowSyntheticDefaultImports": true, "target": "ES2021", "sourceMap": true, + "rootDir": "./", "outDir": "./dist", "baseUrl": "./", + "ignoreDeprecations": "6.0", "incremental": true, "skipLibCheck": true }, diff --git a/packages/graphql/tests/plugin/model-class-visitor.spec.ts b/packages/graphql/tests/plugin/model-class-visitor.spec.ts index bc69537cf..2391e2cb2 100644 --- a/packages/graphql/tests/plugin/model-class-visitor.spec.ts +++ b/packages/graphql/tests/plugin/model-class-visitor.spec.ts @@ -1,24 +1,24 @@ import * as fs from 'fs'; import * as ts from 'typescript'; -import { InputType, InterfaceType, ObjectType } from '../../lib'; -import { before } from '../../lib/plugin/compiler-plugin'; -import { PluginOptions } from '../../lib/plugin/merge-options'; +import { InputType, InterfaceType, ObjectType } from '../../lib/index.js'; +import { before } from '../../lib/plugin/compiler-plugin.js'; +import { PluginOptions } from '../../lib/plugin/merge-options.js'; import { createCatDtoAltText, createCatDtoTextAltTranspiled, -} from './fixtures/create-cat-alt.dto'; +} from './fixtures/create-cat-alt.dto.js'; import { createCatDtoText, createCatDtoTextTranspiled, -} from './fixtures/create-cat.dto'; +} from './fixtures/create-cat.dto.js'; import { deprecationDtoText, deprecationDtoTranspiled, -} from './fixtures/deprecation.dto'; +} from './fixtures/deprecation.dto.js'; import { nullableDtoText, nullableDtoTextTranspiled, -} from './fixtures/nullable.dto'; +} from './fixtures/nullable.dto.js'; const defaultCompilerOptions: ts.CompilerOptions = { module: ts.ModuleKind.ES2020, @@ -54,7 +54,7 @@ function compileFiles( pluginOptions: PluginOptions = {}, compilerOptions = defaultCompilerOptions, ) { - const caseDir = __dirname + rootDir; + const caseDir = import.meta.dirname + rootDir; const options: ts.CompilerOptions = { ...compilerOptions, diff --git a/packages/graphql/tests/plugin/plugin-utils.spec.ts b/packages/graphql/tests/plugin/plugin-utils.spec.ts index ed92c37ba..6cbaaa8d1 100644 --- a/packages/graphql/tests/plugin/plugin-utils.spec.ts +++ b/packages/graphql/tests/plugin/plugin-utils.spec.ts @@ -1,4 +1,4 @@ -import { replaceImportPath } from '../../lib/plugin/utils/plugin-utils'; +import { replaceImportPath } from '../../lib/plugin/utils/plugin-utils.js'; describe('plugin-utils', () => { describe('replaceImportPath', () => { diff --git a/packages/graphql/tests/plugin/readonly-visitor.spec.ts b/packages/graphql/tests/plugin/readonly-visitor.spec.ts index ba3664d22..6b9084ec9 100644 --- a/packages/graphql/tests/plugin/readonly-visitor.spec.ts +++ b/packages/graphql/tests/plugin/readonly-visitor.spec.ts @@ -1,8 +1,8 @@ import { readFileSync } from 'fs'; import { join } from 'path'; import * as ts from 'typescript'; -import { ReadonlyVisitor } from '../../lib/plugin/visitors/readonly.visitor'; -import { PluginMetadataPrinter } from './helpers/metadata-printer'; +import { ReadonlyVisitor } from '../../lib/plugin/visitors/readonly.visitor.js'; +import { PluginMetadataPrinter } from './helpers/metadata-printer.js'; function createTsProgram(tsconfigPath: string) { const parsedCmd = ts.getParsedCommandLineOfConfigFile( @@ -17,7 +17,7 @@ function createTsProgram(tsconfigPath: string) { describe('Readonly visitor', () => { const visitor = new ReadonlyVisitor({ - pathToSource: join(__dirname, 'fixtures', 'project'), + pathToSource: join(import.meta.dirname, 'fixtures', 'project'), introspectComments: true, debug: true, }); @@ -25,7 +25,7 @@ describe('Readonly visitor', () => { it('should generate a serialized metadata', () => { const tsconfigPath = join( - __dirname, + import.meta.dirname, 'fixtures', 'project', 'tsconfig.json', @@ -46,7 +46,7 @@ describe('Readonly visitor', () => { ); const expectedOutput = readFileSync( - join(__dirname, 'fixtures', 'serialized-meta.fixture.ts'), + join(import.meta.dirname, 'fixtures', 'serialized-meta.fixture.ts'), 'utf-8', ); diff --git a/packages/graphql/tests/plugin/type-helpers/fixtures/base-type.fixture.ts b/packages/graphql/tests/plugin/type-helpers/fixtures/base-type.fixture.ts index 79f18da19..61ea19bcb 100644 --- a/packages/graphql/tests/plugin/type-helpers/fixtures/base-type.fixture.ts +++ b/packages/graphql/tests/plugin/type-helpers/fixtures/base-type.fixture.ts @@ -1,4 +1,4 @@ -import { Directive, Extensions, Field, ObjectType } from '../../../../lib/decorators'; +import { Directive, Extensions, Field, ObjectType } from '../../../../lib/decorators/index.js'; @ObjectType({ isAbstract: true }) export abstract class BaseType { diff --git a/packages/graphql/tests/plugin/type-helpers/fixtures/create-user-dto.fixture.ts b/packages/graphql/tests/plugin/type-helpers/fixtures/create-user-dto.fixture.ts index 844f6d32b..976f8fdf0 100644 --- a/packages/graphql/tests/plugin/type-helpers/fixtures/create-user-dto.fixture.ts +++ b/packages/graphql/tests/plugin/type-helpers/fixtures/create-user-dto.fixture.ts @@ -1,6 +1,6 @@ import { Transform } from 'class-transformer'; import { IsBoolean, MinLength } from 'class-validator'; -import { Directive, Extensions, Field, ObjectType } from '../../../../lib/decorators'; +import { Directive, Extensions, Field, ObjectType } from '../../../../lib/decorators/index.js'; @ObjectType() export class CreateUserDto { diff --git a/packages/graphql/tests/plugin/type-helpers/intersection-type.helper.spec.ts b/packages/graphql/tests/plugin/type-helpers/intersection-type.helper.spec.ts index 83268055d..631a1fd84 100644 --- a/packages/graphql/tests/plugin/type-helpers/intersection-type.helper.spec.ts +++ b/packages/graphql/tests/plugin/type-helpers/intersection-type.helper.spec.ts @@ -4,9 +4,9 @@ import { Field, IntersectionType, ObjectType, -} from '../../../lib'; -import { METADATA_FACTORY_NAME } from '../../../lib/plugin/plugin-constants'; -import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util'; +} from '../../../lib/index.js'; +import { METADATA_FACTORY_NAME } from '../../../lib/plugin/plugin-constants.js'; +import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util.js'; describe('IntersectionType', () => { @ObjectType() diff --git a/packages/graphql/tests/plugin/type-helpers/nested-mapped-types.spec.ts b/packages/graphql/tests/plugin/type-helpers/nested-mapped-types.spec.ts index 854ef48b2..ee461bf2d 100644 --- a/packages/graphql/tests/plugin/type-helpers/nested-mapped-types.spec.ts +++ b/packages/graphql/tests/plugin/type-helpers/nested-mapped-types.spec.ts @@ -1,13 +1,13 @@ -import { MetadataLoader } from '../../../lib/plugin/metadata-loader'; -import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util'; +import { MetadataLoader } from '../../../lib/plugin/metadata-loader.js'; +import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util.js'; import { IntersectionType, OmitType, PartialType, PickType, -} from '../../../lib/type-helpers'; -import { CreateUserDto } from './fixtures/create-user-dto.fixture'; -import { SERIALIZED_METADATA } from './fixtures/serialized-metadata.fixture'; +} from '../../../lib/type-helpers/index.js'; +import { CreateUserDto } from './fixtures/create-user-dto.fixture.js'; +import { SERIALIZED_METADATA } from './fixtures/serialized-metadata.fixture.js'; // Regression coverage for issue #3313 — when mapped type helpers are nested // (e.g. PartialType(OmitType(...))) the SWC plugin's metadata refresh hooks diff --git a/packages/graphql/tests/plugin/type-helpers/omit-type.helper.spec.ts b/packages/graphql/tests/plugin/type-helpers/omit-type.helper.spec.ts index 3c84d8a51..d1725107f 100644 --- a/packages/graphql/tests/plugin/type-helpers/omit-type.helper.spec.ts +++ b/packages/graphql/tests/plugin/type-helpers/omit-type.helper.spec.ts @@ -1,6 +1,6 @@ -import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util'; -import { OmitType } from '../../../lib/type-helpers'; -import { CreateUserDto } from './fixtures/create-user-dto.fixture'; +import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util.js'; +import { OmitType } from '../../../lib/type-helpers/index.js'; +import { CreateUserDto } from './fixtures/create-user-dto.fixture.js'; describe('OmitType', () => { class UpdateUserDto extends OmitType(CreateUserDto, ['login', '_id']) {} diff --git a/packages/graphql/tests/plugin/type-helpers/partial-type.helper.spec.ts b/packages/graphql/tests/plugin/type-helpers/partial-type.helper.spec.ts index 265b456f1..c3c3790c6 100644 --- a/packages/graphql/tests/plugin/type-helpers/partial-type.helper.spec.ts +++ b/packages/graphql/tests/plugin/type-helpers/partial-type.helper.spec.ts @@ -1,12 +1,12 @@ import { Expose, Transform } from 'class-transformer'; import { IsString, validate } from 'class-validator'; -import { Field, ObjectType } from '../../../lib/decorators'; -import { MetadataLoader } from '../../../lib/plugin/metadata-loader'; -import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util'; -import { PartialType } from '../../../lib/type-helpers'; -import { BaseType } from './fixtures/base-type.fixture'; -import { SERIALIZED_METADATA } from './fixtures/serialized-metadata.fixture'; -import { getValidationMetadataByTarget } from './type-helpers.test-utils'; +import { Field, ObjectType } from '../../../lib/decorators/index.js'; +import { MetadataLoader } from '../../../lib/plugin/metadata-loader.js'; +import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util.js'; +import { PartialType } from '../../../lib/type-helpers/index.js'; +import { BaseType } from './fixtures/base-type.fixture.js'; +import { SERIALIZED_METADATA } from './fixtures/serialized-metadata.fixture.js'; +import { getValidationMetadataByTarget } from './type-helpers.test-utils.js'; @ObjectType() class CreateUserDto extends BaseType { diff --git a/packages/graphql/tests/plugin/type-helpers/pick-type.helper.spec.ts b/packages/graphql/tests/plugin/type-helpers/pick-type.helper.spec.ts index 3bacb95e7..ab2f7da69 100644 --- a/packages/graphql/tests/plugin/type-helpers/pick-type.helper.spec.ts +++ b/packages/graphql/tests/plugin/type-helpers/pick-type.helper.spec.ts @@ -1,11 +1,11 @@ import { validate } from 'class-validator'; -import { ArgsType, Field, ObjectType } from '../../../lib/decorators'; -import { MetadataLoader } from '../../../lib/plugin/metadata-loader'; -import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util'; -import { PickType } from '../../../lib/type-helpers'; -import { CreateUserDto } from './fixtures/create-user-dto.fixture'; -import { SERIALIZED_METADATA } from './fixtures/serialized-metadata.fixture'; -import { getValidationMetadataByTarget } from './type-helpers.test-utils'; +import { ArgsType, Field, ObjectType } from '../../../lib/decorators/index.js'; +import { MetadataLoader } from '../../../lib/plugin/metadata-loader.js'; +import { getFieldsAndDecoratorForType } from '../../../lib/schema-builder/utils/get-fields-and-decorator.util.js'; +import { PickType } from '../../../lib/type-helpers/index.js'; +import { CreateUserDto } from './fixtures/create-user-dto.fixture.js'; +import { SERIALIZED_METADATA } from './fixtures/serialized-metadata.fixture.js'; +import { getValidationMetadataByTarget } from './type-helpers.test-utils.js'; class UpdateUserDto extends PickType(CreateUserDto, ['login']) {} diff --git a/packages/graphql/tests/schema-builder/errors/cannot-determine-input-type.error.spec.ts b/packages/graphql/tests/schema-builder/errors/cannot-determine-input-type.error.spec.ts index 3b998766c..d97575a55 100644 --- a/packages/graphql/tests/schema-builder/errors/cannot-determine-input-type.error.spec.ts +++ b/packages/graphql/tests/schema-builder/errors/cannot-determine-input-type.error.spec.ts @@ -1,4 +1,4 @@ -import { CannotDetermineInputTypeError } from '../../../lib/schema-builder/errors/cannot-determine-input-type.error'; +import { CannotDetermineInputTypeError } from '../../../lib/schema-builder/errors/cannot-determine-input-type.error.js'; describe('CannotDetermineInputTypeError', () => { class SomeNestedType {} diff --git a/packages/graphql/tests/schema-builder/factories/class-directive-not-shadowed.spec.ts b/packages/graphql/tests/schema-builder/factories/class-directive-not-shadowed.spec.ts index 8ef46b318..3cd97102c 100644 --- a/packages/graphql/tests/schema-builder/factories/class-directive-not-shadowed.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/class-directive-not-shadowed.spec.ts @@ -10,7 +10,7 @@ import { Query, Resolver, TypeMetadataStorage, -} from '../../../lib'; +} from '../../../lib/index.js'; @ObjectType() @Directive('@tag(name: "public")') diff --git a/packages/graphql/tests/schema-builder/factories/directive-inheritance.spec.ts b/packages/graphql/tests/schema-builder/factories/directive-inheritance.spec.ts index 13b3acdcf..b73ab4d67 100644 --- a/packages/graphql/tests/schema-builder/factories/directive-inheritance.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/directive-inheritance.spec.ts @@ -10,7 +10,7 @@ import { Query, Resolver, TypeMetadataStorage, -} from '../../../lib'; +} from '../../../lib/index.js'; @ObjectType({ isAbstract: true }) @Directive('@key(fields: "id")') diff --git a/packages/graphql/tests/schema-builder/factories/directive-multi-sdl.spec.ts b/packages/graphql/tests/schema-builder/factories/directive-multi-sdl.spec.ts index ac70a147a..1977527e6 100644 --- a/packages/graphql/tests/schema-builder/factories/directive-multi-sdl.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/directive-multi-sdl.spec.ts @@ -10,7 +10,7 @@ import { Query, Resolver, TypeMetadataStorage, -} from '../../../lib'; +} from '../../../lib/index.js'; @ObjectType() @Directive(['@tag(name: "internal")', '@tag(name: "restricted")']) diff --git a/packages/graphql/tests/schema-builder/factories/enum-default-value.spec.ts b/packages/graphql/tests/schema-builder/factories/enum-default-value.spec.ts index 695f3dcc7..7a2e44947 100644 --- a/packages/graphql/tests/schema-builder/factories/enum-default-value.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/enum-default-value.spec.ts @@ -10,7 +10,7 @@ import { Resolver, TypeMetadataStorage, registerEnumType, -} from '../../../lib'; +} from '../../../lib/index.js'; enum Category { BOOKS = 'books', diff --git a/packages/graphql/tests/schema-builder/factories/enum-union-directives.spec.ts b/packages/graphql/tests/schema-builder/factories/enum-union-directives.spec.ts index 5a9a2d05b..3e645eafe 100644 --- a/packages/graphql/tests/schema-builder/factories/enum-union-directives.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/enum-union-directives.spec.ts @@ -11,7 +11,7 @@ import { TypeMetadataStorage, createUnionType, registerEnumType, -} from '../../../lib'; +} from '../../../lib/index.js'; enum MovieGenre { ACTION = 'ACTION', diff --git a/packages/graphql/tests/schema-builder/factories/extensions-on-input-type.spec.ts b/packages/graphql/tests/schema-builder/factories/extensions-on-input-type.spec.ts index 92f3c9cbf..809244d17 100644 --- a/packages/graphql/tests/schema-builder/factories/extensions-on-input-type.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/extensions-on-input-type.spec.ts @@ -11,7 +11,7 @@ import { Query, Resolver, TypeMetadataStorage, -} from '../../../lib'; +} from '../../../lib/index.js'; @ObjectType() class OType { diff --git a/packages/graphql/tests/schema-builder/factories/input-type-definition.factory.spec.ts b/packages/graphql/tests/schema-builder/factories/input-type-definition.factory.spec.ts index f225537f3..5c41cb5de 100644 --- a/packages/graphql/tests/schema-builder/factories/input-type-definition.factory.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/input-type-definition.factory.spec.ts @@ -4,11 +4,11 @@ import { InputType, GraphQLSchemaBuilderModule, TypeMetadataStorage, - Extensions -} from '../../../lib'; -import { TypeDefinitionsGenerator } from '../../../lib/schema-builder/type-definitions.generator'; -import { TypeDefinitionsStorage } from '../../../lib/schema-builder/storages/type-definitions.storage'; -import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage'; + Extensions, +} from '../../../lib/index.js'; +import { TypeDefinitionsGenerator } from '../../../lib/schema-builder/type-definitions.generator.js'; +import { TypeDefinitionsStorage } from '../../../lib/schema-builder/storages/type-definitions.storage.js'; +import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage.js'; @InputType('DeprecationInput') class DeprecationInput { @@ -59,7 +59,7 @@ describe('InputTypeDefinitionFactory (deprecation)', () => { expect(fields.oldField.deprecationReason).toBe('use something else'); }); - it('should add extensions to the field', () => { + it('should add extensions to the field', () => { // Generate type definitions (inputs included) generator.generate({} as any); @@ -67,7 +67,7 @@ describe('InputTypeDefinitionFactory (deprecation)', () => { expect(inputType).toBeDefined(); const fields = inputType.getFields(); - expect(fields.extendedField.extensions).toBeDefined() - expect(fields.extendedField.extensions.metadata).toBe('field') + expect(fields.extendedField.extensions).toBeDefined(); + expect(fields.extendedField.extensions.metadata).toBe('field'); }); }); diff --git a/packages/graphql/tests/schema-builder/factories/output-type-by-name.spec.ts b/packages/graphql/tests/schema-builder/factories/output-type-by-name.spec.ts index 8045d53a1..7597c1b41 100644 --- a/packages/graphql/tests/schema-builder/factories/output-type-by-name.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/output-type-by-name.spec.ts @@ -55,8 +55,8 @@ describe('Output type resolution by GraphQL name', () => { expect(authorField).toBeDefined(); expect(authorField!.type).toBeInstanceOf(GraphQLNonNull); - expect((authorField!.type as GraphQLNonNull).ofType).toBe( - schema.getType('Author'), - ); + expect( + (authorField!.type as GraphQLNonNull).ofType, + ).toBe(schema.getType('Author')); }); -}); \ No newline at end of file +}); diff --git a/packages/graphql/tests/schema-builder/factories/resolve-field-middleware.spec.ts b/packages/graphql/tests/schema-builder/factories/resolve-field-middleware.spec.ts index 16238eb8f..c774c717c 100644 --- a/packages/graphql/tests/schema-builder/factories/resolve-field-middleware.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/resolve-field-middleware.spec.ts @@ -1,10 +1,10 @@ -import { ResolveField } from '../../../lib/decorators'; +import { ResolveField } from '../../../lib/decorators/index.js'; import { FIELD_RESOLVER_MIDDLEWARE_METADATA, RESOLVER_NAME_METADATA, RESOLVER_PROPERTY_METADATA, -} from '../../../lib/graphql.constants'; -import { FieldMiddleware } from '../../../lib/interfaces'; +} from '../../../lib/graphql.constants.js'; +import { FieldMiddleware } from '../../../lib/interfaces/index.js'; const trimMiddleware: FieldMiddleware = async (_ctx, next) => { const value = (await next()) as string; diff --git a/packages/graphql/tests/schema-builder/factories/root-type.factory.spec.ts b/packages/graphql/tests/schema-builder/factories/root-type.factory.spec.ts index 6d34ee369..c7c4c566e 100644 --- a/packages/graphql/tests/schema-builder/factories/root-type.factory.spec.ts +++ b/packages/graphql/tests/schema-builder/factories/root-type.factory.spec.ts @@ -5,11 +5,11 @@ import { Query, Resolver, TypeMetadataStorage, -} from '../../../lib'; -import { MultipleFieldsWithSameNameError } from '../../../lib/schema-builder/errors/multiple-fields-with-same-name.error'; -import { RootTypeFactory } from '../../../lib/schema-builder/factories/root-type.factory'; -import { ResolverTypeMetadata } from '../../../lib/schema-builder/metadata'; -import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage'; +} from '../../../lib/index.js'; +import { MultipleFieldsWithSameNameError } from '../../../lib/schema-builder/errors/multiple-fields-with-same-name.error.js'; +import { RootTypeFactory } from '../../../lib/schema-builder/factories/root-type.factory.js'; +import { ResolverTypeMetadata } from '../../../lib/schema-builder/metadata/index.js'; +import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage.js'; function booleanResolverFactory(Decorator: typeof Query | typeof Mutation) { @Resolver() diff --git a/packages/graphql/tests/schema-builder/storages/field-directive.collection.spec.ts b/packages/graphql/tests/schema-builder/storages/field-directive.collection.spec.ts index 79f3c70c9..f2963d035 100644 --- a/packages/graphql/tests/schema-builder/storages/field-directive.collection.spec.ts +++ b/packages/graphql/tests/schema-builder/storages/field-directive.collection.spec.ts @@ -1,5 +1,5 @@ -import { FieldDirectiveCollection } from '../../../lib/schema-builder/collections/'; -import { PropertyDirectiveMetadata } from '../../../lib/schema-builder/metadata'; +import { FieldDirectiveCollection } from '../../../lib/schema-builder/collections/index.js'; +import { PropertyDirectiveMetadata } from '../../../lib/schema-builder/metadata/index.js'; describe('FieldDirectiveCollection', () => { const directive1: PropertyDirectiveMetadata = { diff --git a/packages/graphql/tests/schema-builder/storages/metadata-by-name.collection.spec.ts b/packages/graphql/tests/schema-builder/storages/metadata-by-name.collection.spec.ts index a3db1edf4..d730404d0 100644 --- a/packages/graphql/tests/schema-builder/storages/metadata-by-name.collection.spec.ts +++ b/packages/graphql/tests/schema-builder/storages/metadata-by-name.collection.spec.ts @@ -1,4 +1,4 @@ -import { MetadataByNameCollection } from '../../../lib/schema-builder/collections/'; +import { MetadataByNameCollection } from '../../../lib/schema-builder/collections/index.js'; describe('MetadataByNameCollection', () => { it('should not add multiple values under the same name', () => { diff --git a/packages/graphql/tests/schema-builder/storages/metadata-list-by-name.collection.spec.ts b/packages/graphql/tests/schema-builder/storages/metadata-list-by-name.collection.spec.ts index deac0f22c..96770fb69 100644 --- a/packages/graphql/tests/schema-builder/storages/metadata-list-by-name.collection.spec.ts +++ b/packages/graphql/tests/schema-builder/storages/metadata-list-by-name.collection.spec.ts @@ -1,4 +1,4 @@ -import { MetadataListByNameCollection } from '../../../lib/schema-builder/collections/'; +import { MetadataListByNameCollection } from '../../../lib/schema-builder/collections/index.js'; describe('MapArrayByName', () => { it('should return an empty array if a name is not found', () => { diff --git a/packages/graphql/tests/schema-builder/storages/target-metadata-set.spec.ts b/packages/graphql/tests/schema-builder/storages/target-metadata-set.spec.ts index 160f706f2..84b454e20 100644 --- a/packages/graphql/tests/schema-builder/storages/target-metadata-set.spec.ts +++ b/packages/graphql/tests/schema-builder/storages/target-metadata-set.spec.ts @@ -4,8 +4,8 @@ import { ID, ObjectType, TypeMetadataStorage, -} from '../../../lib'; -import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage'; +} from '../../../lib/index.js'; +import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage.js'; @ObjectType() class TargetSetObjectCheck { diff --git a/packages/graphql/tests/schema-builder/storages/type-metadata-storage.register-in.spec.ts b/packages/graphql/tests/schema-builder/storages/type-metadata-storage.register-in.spec.ts index fc1cc2c60..cdb4c730a 100644 --- a/packages/graphql/tests/schema-builder/storages/type-metadata-storage.register-in.spec.ts +++ b/packages/graphql/tests/schema-builder/storages/type-metadata-storage.register-in.spec.ts @@ -7,8 +7,8 @@ import { registerEnumType, createUnionType, TypeMetadataStorage, -} from '../../../lib'; -import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage'; +} from '../../../lib/index.js'; +import { LazyMetadataStorage } from '../../../lib/schema-builder/storages/lazy-metadata.storage.js'; // Mock modules for testing class ModuleA {} diff --git a/packages/graphql/tests/schema-builder/type-definitions-generator.register-in.spec.ts b/packages/graphql/tests/schema-builder/type-definitions-generator.register-in.spec.ts index 08a059dd0..8f850dfd6 100644 --- a/packages/graphql/tests/schema-builder/type-definitions-generator.register-in.spec.ts +++ b/packages/graphql/tests/schema-builder/type-definitions-generator.register-in.spec.ts @@ -8,10 +8,10 @@ import { createUnionType, TypeMetadataStorage, GraphQLSchemaBuilderModule, -} from '../../lib'; -import { TypeDefinitionsGenerator } from '../../lib/schema-builder/type-definitions.generator'; -import { TypeDefinitionsStorage } from '../../lib/schema-builder/storages/type-definitions.storage'; -import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage'; +} from '../../lib/index.js'; +import { TypeDefinitionsGenerator } from '../../lib/schema-builder/type-definitions.generator.js'; +import { TypeDefinitionsStorage } from '../../lib/schema-builder/storages/type-definitions.storage.js'; +import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage.js'; // Mock modules for testing class UsersModule {} diff --git a/packages/graphql/tests/services/normalize-resolver-args.spec.ts b/packages/graphql/tests/services/normalize-resolver-args.spec.ts index e5306b0a5..ad6f578cd 100644 --- a/packages/graphql/tests/services/normalize-resolver-args.spec.ts +++ b/packages/graphql/tests/services/normalize-resolver-args.spec.ts @@ -1,4 +1,4 @@ -import { normalizeResolverArgs } from '../../lib/utils/normalize-resolver-args'; +import { normalizeResolverArgs } from '../../lib/utils/normalize-resolver-args.js'; describe('normalizeResolverArgs', () => { describe('standard resolver arguments (4 args)', () => { diff --git a/packages/graphql/tests/services/resolvers-explorer.service.spec.ts b/packages/graphql/tests/services/resolvers-explorer.service.spec.ts index 9d22bce00..468591244 100644 --- a/packages/graphql/tests/services/resolvers-explorer.service.spec.ts +++ b/packages/graphql/tests/services/resolvers-explorer.service.spec.ts @@ -2,8 +2,8 @@ import 'reflect-metadata'; import { FIELD_RESOLVER_MIDDLEWARE_METADATA, PARAM_ARGS_METADATA, -} from '../../lib/graphql.constants'; -import { ResolversExplorerService } from '../../lib/services/resolvers-explorer.service'; +} from '../../lib/graphql.constants.js'; +import { ResolversExplorerService } from '../../lib/services/resolvers-explorer.service.js'; describe('ResolversExplorerService', () => { describe('canUseFastFieldResolver', () => { diff --git a/packages/graphql/tests/type-defs-federation2.decorator.spec.ts b/packages/graphql/tests/type-defs-federation2.decorator.spec.ts index bfabfcef3..45df1d9eb 100644 --- a/packages/graphql/tests/type-defs-federation2.decorator.spec.ts +++ b/packages/graphql/tests/type-defs-federation2.decorator.spec.ts @@ -1,4 +1,4 @@ -import { TypeDefsFederation2Decorator } from '../lib/federation/type-defs-federation2.decorator'; +import { TypeDefsFederation2Decorator } from '../lib/federation/type-defs-federation2.decorator.js'; describe('TypeDefsFederation2Decorator', () => { let decorator: TypeDefsFederation2Decorator; diff --git a/packages/graphql/tests/type-factories/enum-union-options-validation.spec.ts b/packages/graphql/tests/type-factories/enum-union-options-validation.spec.ts index 5c5a94750..a391f59be 100644 --- a/packages/graphql/tests/type-factories/enum-union-options-validation.spec.ts +++ b/packages/graphql/tests/type-factories/enum-union-options-validation.spec.ts @@ -1,5 +1,8 @@ -import { ObjectType, Field, ID } from '../../lib'; -import { createUnionType, registerEnumType } from '../../lib/type-factories'; +import { ObjectType, Field, ID } from '../../lib/index.js'; +import { + createUnionType, + registerEnumType, +} from '../../lib/type-factories/index.js'; @ObjectType() class MemberA { diff --git a/packages/graphql/tests/type-helpers/apply-field-decorators.spec.ts b/packages/graphql/tests/type-helpers/apply-field-decorators.spec.ts index ad83d09e6..71cb969c4 100644 --- a/packages/graphql/tests/type-helpers/apply-field-decorators.spec.ts +++ b/packages/graphql/tests/type-helpers/apply-field-decorators.spec.ts @@ -1,6 +1,6 @@ -import { applyFieldDecorators } from '../../lib/type-helpers/type-helpers.utils'; -import { TypeMetadataStorage } from '../../lib'; -import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage'; +import { applyFieldDecorators } from '../../lib/type-helpers/type-helpers.utils.js'; +import { TypeMetadataStorage } from '../../lib/index.js'; +import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage.js'; class Holder { field: string; diff --git a/packages/graphql/tests/type-helpers/pick-type-double-register.spec.ts b/packages/graphql/tests/type-helpers/pick-type-double-register.spec.ts index 0613f048b..f284fa927 100644 --- a/packages/graphql/tests/type-helpers/pick-type-double-register.spec.ts +++ b/packages/graphql/tests/type-helpers/pick-type-double-register.spec.ts @@ -1,6 +1,6 @@ -import { Field, InputType, TypeMetadataStorage } from '../../lib'; -import { PickType } from '../../lib/type-helpers'; -import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage'; +import { Field, InputType, TypeMetadataStorage } from '../../lib/index.js'; +import { PickType } from '../../lib/type-helpers/index.js'; +import { LazyMetadataStorage } from '../../lib/schema-builder/storages/lazy-metadata.storage.js'; @InputType() class PickSourceInput { diff --git a/packages/graphql/tests/utils/get-number-of-arguments.util.spec.ts b/packages/graphql/tests/utils/get-number-of-arguments.util.spec.ts index 8eaa45729..b247b7327 100644 --- a/packages/graphql/tests/utils/get-number-of-arguments.util.spec.ts +++ b/packages/graphql/tests/utils/get-number-of-arguments.util.spec.ts @@ -1,4 +1,7 @@ -import { getNumberOfArguments, stringifyWithoutQuotes } from '../../lib/utils'; +import { + getNumberOfArguments, + stringifyWithoutQuotes, +} from '../../lib/utils/index.js'; describe('getNumberOfArguments', () => { describe('when using function', () => { diff --git a/packages/graphql/tests/utils/scalar-types.util.spec.ts b/packages/graphql/tests/utils/scalar-types.util.spec.ts index 277731747..94163c172 100644 --- a/packages/graphql/tests/utils/scalar-types.util.spec.ts +++ b/packages/graphql/tests/utils/scalar-types.util.spec.ts @@ -1,6 +1,6 @@ import { Kind, ValueNode } from 'graphql'; -import { CustomScalar } from '../../lib/interfaces'; -import { createScalarType } from '../../lib/utils/scalar-types.utils'; +import { CustomScalar } from '../../lib/interfaces/index.js'; +import { createScalarType } from '../../lib/utils/scalar-types.utils.js'; describe('createScalarType', () => { class BaseScalar implements CustomScalar { diff --git a/packages/graphql/tsconfig.build.json b/packages/graphql/tsconfig.build.json index 6706c9c31..050012376 100644 --- a/packages/graphql/tsconfig.build.json +++ b/packages/graphql/tsconfig.build.json @@ -3,6 +3,8 @@ "compilerOptions": { "outDir": "./dist", "rootDir": "./lib", + "module": "NodeNext", + "moduleResolution": "NodeNext" }, "exclude": ["node_modules", "dist", "tests/**/*", "*.spec.ts", "vitest.config.mts"], } diff --git a/packages/graphql/tsconfig.spec.json b/packages/graphql/tsconfig.spec.json index 82478103b..30e02364a 100644 --- a/packages/graphql/tsconfig.spec.json +++ b/packages/graphql/tsconfig.spec.json @@ -1,6 +1,8 @@ { "extends": "./tsconfig.json", "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", "sourceMap": true, "outDir": "./dist/tests", "rootDir": ".", diff --git a/packages/graphql/vitest.config.mts b/packages/graphql/vitest.config.mts index f0d289d5b..d3a646bba 100644 --- a/packages/graphql/vitest.config.mts +++ b/packages/graphql/vitest.config.mts @@ -7,7 +7,7 @@ export default defineConfig({ { find: 'graphql', replacement: path.resolve( - __dirname, + import.meta.dirname, '../../node_modules/graphql/index.js', ), }, diff --git a/packages/mercurius/lib/drivers/index.ts b/packages/mercurius/lib/drivers/index.ts index 0667c20bc..1b18ef130 100644 --- a/packages/mercurius/lib/drivers/index.ts +++ b/packages/mercurius/lib/drivers/index.ts @@ -1,3 +1,3 @@ -export * from './mercurius-federation.driver'; -export * from './mercurius-gateway.driver'; -export * from './mercurius.driver'; +export * from './mercurius-federation.driver.js'; +export * from './mercurius-gateway.driver.js'; +export * from './mercurius.driver.js'; diff --git a/packages/mercurius/lib/drivers/mercurius-federation.driver.ts b/packages/mercurius/lib/drivers/mercurius-federation.driver.ts index fff0f19c8..f1715156c 100644 --- a/packages/mercurius/lib/drivers/mercurius-federation.driver.ts +++ b/packages/mercurius/lib/drivers/mercurius-federation.driver.ts @@ -7,12 +7,10 @@ import { FastifyBaseLogger, FastifyInstance } from 'fastify'; import { GraphQLSchema, printSchema } from 'graphql'; import { IncomingMessage, Server, ServerResponse } from 'http'; import mercurius from 'mercurius'; -import { MercuriusDriverConfig } from '../interfaces/mercurius-driver-config.interface'; -import { buildMercuriusFederatedSchema } from '../utils/build-mercurius-federated-schema.util'; -import { registerMercuriusHooks } from '../utils/register-mercurius-hooks.util'; -import { registerMercuriusPlugin } from '../utils/register-mercurius-plugin.util'; -// TODO: -// const { mercuriusFederationPlugin } = require('@mercuriusjs/federation'); +import { MercuriusDriverConfig } from '../interfaces/mercurius-driver-config.interface.js'; +import { buildMercuriusFederatedSchema } from '../utils/build-mercurius-federated-schema.util.js'; +import { registerMercuriusHooks } from '../utils/register-mercurius-hooks.util.js'; +import { registerMercuriusPlugin } from '../utils/register-mercurius-plugin.util.js'; /** * @publicApi @@ -51,7 +49,8 @@ export class MercuriusFederationDriver extends AbstractGraphQLDriver(); - // TODO: replace with mercuriusFederationPlugin + // The federation plugin only accepts SDL/DocumentNode input, while this + // driver passes a fully-built GraphQLSchema produced by Nest's federation factory. await app.register(mercurius, { ...adapterOptions, }); diff --git a/packages/mercurius/lib/drivers/mercurius-gateway.driver.ts b/packages/mercurius/lib/drivers/mercurius-gateway.driver.ts index a4877eaba..de682ecc8 100644 --- a/packages/mercurius/lib/drivers/mercurius-gateway.driver.ts +++ b/packages/mercurius/lib/drivers/mercurius-gateway.driver.ts @@ -1,9 +1,9 @@ import { AbstractGraphQLDriver } from '@nestjs/graphql'; import { FastifyBaseLogger, FastifyInstance } from 'fastify'; import { IncomingMessage, Server, ServerResponse } from 'http'; -import { MercuriusGatewayDriverConfig } from '../interfaces'; -import { registerMercuriusHooks } from '../utils/register-mercurius-hooks.util'; -import { registerMercuriusPlugin } from '../utils/register-mercurius-plugin.util'; +import { MercuriusGatewayDriverConfig } from '../interfaces/index.js'; +import { registerMercuriusHooks } from '../utils/register-mercurius-hooks.util.js'; +import { registerMercuriusPlugin } from '../utils/register-mercurius-plugin.util.js'; /** * @publicApi diff --git a/packages/mercurius/lib/drivers/mercurius.driver.ts b/packages/mercurius/lib/drivers/mercurius.driver.ts index b69175452..75b77a9a2 100644 --- a/packages/mercurius/lib/drivers/mercurius.driver.ts +++ b/packages/mercurius/lib/drivers/mercurius.driver.ts @@ -1,12 +1,12 @@ -import { isFunction } from '@nestjs/common/utils/shared.utils'; +import { isFunction } from '@nestjs/common/utils/shared.utils.js'; import { AbstractGraphQLDriver } from '@nestjs/graphql'; import { FastifyBaseLogger, FastifyInstance } from 'fastify'; import { GraphQLSchema, printSchema } from 'graphql'; import { IncomingMessage, Server, ServerResponse } from 'http'; import mercurius from 'mercurius'; -import { MercuriusDriverConfig } from '../interfaces/mercurius-driver-config.interface'; -import { registerMercuriusHooks } from '../utils/register-mercurius-hooks.util'; -import { registerMercuriusPlugin } from '../utils/register-mercurius-plugin.util'; +import { MercuriusDriverConfig } from '../interfaces/mercurius-driver-config.interface.js'; +import { registerMercuriusHooks } from '../utils/register-mercurius-hooks.util.js'; +import { registerMercuriusPlugin } from '../utils/register-mercurius-plugin.util.js'; /** * @publicApi diff --git a/packages/mercurius/lib/index.ts b/packages/mercurius/lib/index.ts index 9d53e0c08..22eea3926 100644 --- a/packages/mercurius/lib/index.ts +++ b/packages/mercurius/lib/index.ts @@ -1,2 +1,2 @@ -export * from './drivers'; -export * from './interfaces'; +export * from './drivers/index.js'; +export * from './interfaces/index.js'; diff --git a/packages/mercurius/lib/interfaces/index.ts b/packages/mercurius/lib/interfaces/index.ts index 083153ec6..59a4c69df 100644 --- a/packages/mercurius/lib/interfaces/index.ts +++ b/packages/mercurius/lib/interfaces/index.ts @@ -1,4 +1,4 @@ -export * from './mercurius-driver-config.interface'; -export * from './mercurius-federation-driver-config.interface'; -export * from './mercurius-gateway-driver-config.interface'; -export * from './mercurius-plugin.interface'; +export * from './mercurius-driver-config.interface.js'; +export * from './mercurius-federation-driver-config.interface.js'; +export * from './mercurius-gateway-driver-config.interface.js'; +export * from './mercurius-plugin.interface.js'; diff --git a/packages/mercurius/lib/interfaces/mercurius-driver-config.interface.ts b/packages/mercurius/lib/interfaces/mercurius-driver-config.interface.ts index f17bf1fe7..77be611ef 100644 --- a/packages/mercurius/lib/interfaces/mercurius-driver-config.interface.ts +++ b/packages/mercurius/lib/interfaces/mercurius-driver-config.interface.ts @@ -4,8 +4,8 @@ import { GqlOptionsFactory, } from '@nestjs/graphql'; import { MercuriusOptions } from 'mercurius'; -import { MercuriusHooks } from './mercurius-hook.interface'; -import { MercuriusPlugins } from './mercurius-plugin.interface'; +import { MercuriusHooks } from './mercurius-hook.interface.js'; +import { MercuriusPlugins } from './mercurius-plugin.interface.js'; export type MercuriusDriverConfig = GqlModuleOptions & MercuriusOptions & diff --git a/packages/mercurius/lib/interfaces/mercurius-federation-driver-config.interface.ts b/packages/mercurius/lib/interfaces/mercurius-federation-driver-config.interface.ts index 303d20b4c..2e7f89a7d 100644 --- a/packages/mercurius/lib/interfaces/mercurius-federation-driver-config.interface.ts +++ b/packages/mercurius/lib/interfaces/mercurius-federation-driver-config.interface.ts @@ -2,7 +2,7 @@ import { MercuriusDriverAsyncConfig, MercuriusDriverConfig, MercuriusDriverConfigFactory, -} from './mercurius-driver-config.interface'; +} from './mercurius-driver-config.interface.js'; export type MercuriusFederationDriverConfig = MercuriusDriverConfig; export type MercuriusFederationDriverConfigFactory = diff --git a/packages/mercurius/lib/interfaces/mercurius-gateway-driver-config.interface.ts b/packages/mercurius/lib/interfaces/mercurius-gateway-driver-config.interface.ts index b6097044d..ef343f5cb 100644 --- a/packages/mercurius/lib/interfaces/mercurius-gateway-driver-config.interface.ts +++ b/packages/mercurius/lib/interfaces/mercurius-gateway-driver-config.interface.ts @@ -5,8 +5,8 @@ import { GqlOptionsFactory, } from '@nestjs/graphql'; import { MercuriusCommonOptions } from 'mercurius'; -import { MercuriusHooks } from './mercurius-hook.interface'; -import { MercuriusPlugins } from './mercurius-plugin.interface'; +import { MercuriusHooks } from './mercurius-hook.interface.js'; +import { MercuriusPlugins } from './mercurius-plugin.interface.js'; export type MercuriusGatewayDriverConfig = GqlModuleOptions & MercuriusCommonOptions & diff --git a/packages/mercurius/lib/utils/build-mercurius-federated-schema.util.ts b/packages/mercurius/lib/utils/build-mercurius-federated-schema.util.ts index 6fc40339a..d351214c6 100644 --- a/packages/mercurius/lib/utils/build-mercurius-federated-schema.util.ts +++ b/packages/mercurius/lib/utils/build-mercurius-federated-schema.util.ts @@ -1,4 +1,4 @@ -import { loadPackage } from '@nestjs/common/utils/load-package.util'; +import { loadPackageSync } from '@nestjs/common/utils/load-package.util.js'; import { BuildFederatedSchemaOptions, transformSchema } from '@nestjs/graphql'; import { buildASTSchema, GraphQLSchema, isObjectType } from 'graphql'; @@ -6,7 +6,7 @@ export function buildMercuriusFederatedSchema({ typeDefs, resolvers, }: BuildFederatedSchemaOptions) { - const { buildSubgraphSchema, printSubgraphSchema } = loadPackage( + const { buildSubgraphSchema, printSubgraphSchema } = loadPackageSync( '@apollo/subgraph', 'MercuriusFederation', () => require('@apollo/subgraph'), diff --git a/packages/mercurius/lib/utils/register-mercurius-hooks.util.ts b/packages/mercurius/lib/utils/register-mercurius-hooks.util.ts index 03f2aa25b..cf376294e 100644 --- a/packages/mercurius/lib/utils/register-mercurius-hooks.util.ts +++ b/packages/mercurius/lib/utils/register-mercurius-hooks.util.ts @@ -1,6 +1,6 @@ import { FastifyInstance } from 'fastify'; -import { MercuriusHooksObject } from '../interfaces/mercurius-hook.interface'; -import { isArray, isNull, isUndefined } from './validation.util'; +import { MercuriusHooksObject } from '../interfaces/mercurius-hook.interface.js'; +import { isArray, isNull, isUndefined } from './validation.util.js'; export function registerMercuriusHooks( app: FastifyInstance, diff --git a/packages/mercurius/lib/utils/register-mercurius-plugin.util.ts b/packages/mercurius/lib/utils/register-mercurius-plugin.util.ts index e51040713..627d0addb 100644 --- a/packages/mercurius/lib/utils/register-mercurius-plugin.util.ts +++ b/packages/mercurius/lib/utils/register-mercurius-plugin.util.ts @@ -1,6 +1,6 @@ import { FastifyInstance } from 'fastify'; -import { MercuriusPlugin } from '../interfaces/mercurius-plugin.interface'; -import { isArray, isNull, isUndefined } from './validation.util'; +import { MercuriusPlugin } from '../interfaces/mercurius-plugin.interface.js'; +import { isArray, isNull, isUndefined } from './validation.util.js'; export async function registerMercuriusPlugin( app: FastifyInstance, diff --git a/packages/mercurius/lib/utils/transform-schema.util.ts b/packages/mercurius/lib/utils/transform-schema.util.ts index 215de160d..f7f8e1fa8 100644 --- a/packages/mercurius/lib/utils/transform-schema.util.ts +++ b/packages/mercurius/lib/utils/transform-schema.util.ts @@ -3,7 +3,8 @@ * https://github.com/mercurius-js/mercurius/blob/master/lib/federation.js * */ -import { loadPackage } from '@nestjs/common/utils/load-package.util'; +import { MER_ERR_GQL_GATEWAY_INVALID_SCHEMA } from '@mercuriusjs/gateway/lib/errors.js'; +import { loadPackageSync } from '@nestjs/common/utils/load-package.util.js'; import { extendSchema, GraphQLObjectType, @@ -11,7 +12,6 @@ import { isObjectType, parse, } from 'graphql'; -import { MER_ERR_GQL_GATEWAY_INVALID_SCHEMA } from 'mercurius/lib/errors'; const BASE_FEDERATION_TYPES = ` scalar _Any @@ -68,7 +68,7 @@ function addTypeNameToResult(result, typename) { export function transformFederatedSchema(schema: GraphQLSchema) { // FIXME remove this dependency // but graphql#printSchema does not print necessary federation directives - const { printSubgraphSchema } = loadPackage( + const { printSubgraphSchema } = loadPackageSync( '@apollo/subgraph', 'FederationFactory', () => require('@apollo/subgraph'), diff --git a/packages/mercurius/package.json b/packages/mercurius/package.json index 94969b918..2af0f035c 100644 --- a/packages/mercurius/package.json +++ b/packages/mercurius/package.json @@ -4,6 +4,7 @@ "description": "Nest - modern, fast, powerful node.js web framework (@graphql)", "author": "Kamil Mysliwiec", "license": "MIT", + "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -38,9 +39,9 @@ "devDependencies": { "@mercuriusjs/federation": "5.1.1", "@mercuriusjs/gateway": "5.2.0", - "@nestjs/common": "11.1.19", - "@nestjs/platform-fastify": "11.1.19", - "@nestjs/testing": "11.1.19", + "@nestjs/common": "next", + "@nestjs/platform-fastify": "next", + "@nestjs/testing": "next", "fastify": "5.8.5", "mercurius": "16.9.0", "mercurius-integration-testing": "9.0.1" @@ -49,7 +50,7 @@ "@apollo/subgraph": "^2.0.0", "@mercuriusjs/federation": "^5.0.0", "@mercuriusjs/gateway": "^5.0.0", - "@nestjs/common": "^11.0.1", + "@nestjs/common": "next", "@nestjs/graphql": "^13.0.0", "fastify": "^5.2.1", "graphql": "^16.10.0", diff --git a/packages/mercurius/tests/code-first-duplicate-resolvers/app.module.ts b/packages/mercurius/tests/code-first-duplicate-resolvers/app.module.ts index 86f3ad353..68008e895 100644 --- a/packages/mercurius/tests/code-first-duplicate-resolvers/app.module.ts +++ b/packages/mercurius/tests/code-first-duplicate-resolvers/app.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { ModuleAModule } from './module-a/module-a.module'; -import { ModuleBModule } from './module-b/module-b.module'; -import { QueryResolver } from './query.resolver'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { ModuleAModule } from './module-a/module-a.module.js'; +import { ModuleBModule } from './module-b/module-b.module.js'; +import { QueryResolver } from './query.resolver.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts b/packages/mercurius/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts index a81c95d08..b67caeb6c 100644 --- a/packages/mercurius/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts +++ b/packages/mercurius/tests/code-first-duplicate-resolvers/module-a/module-a.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/mercurius/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts b/packages/mercurius/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts index 22c8abf76..6211f8cef 100644 --- a/packages/mercurius/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts +++ b/packages/mercurius/tests/code-first-duplicate-resolvers/module-b/module-b.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/mercurius/tests/code-first-federation/gateway/gateway.module.ts b/packages/mercurius/tests/code-first-federation/gateway/gateway.module.ts index c0f13bb15..bdff8fc80 100644 --- a/packages/mercurius/tests/code-first-federation/gateway/gateway.module.ts +++ b/packages/mercurius/tests/code-first-federation/gateway/gateway.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusGatewayDriver } from '../../../lib/drivers'; -import { MercuriusGatewayDriverConfig } from '../../../lib/interfaces/mercurius-gateway-driver-config.interface'; +import { MercuriusGatewayDriver } from '../../../lib/drivers/index.js'; +import { MercuriusGatewayDriverConfig } from '../../../lib/interfaces/mercurius-gateway-driver-config.interface.js'; @Module({ imports: [ @@ -9,9 +9,9 @@ import { MercuriusGatewayDriverConfig } from '../../../lib/interfaces/mercurius- driver: MercuriusGatewayDriver, gateway: { services: [ - { name: 'recipes', url: 'http://localhost:3011/graphql' }, - { name: 'posts', url: 'http://localhost:3012/graphql' }, - { name: 'users', url: 'http://localhost:3013/graphql' }, + { name: 'recipes', url: 'http://localhost:3211/graphql' }, + { name: 'posts', url: 'http://localhost:3212/graphql' }, + { name: 'users', url: 'http://localhost:3213/graphql' }, ], }, }), diff --git a/packages/mercurius/tests/code-first-federation/gateway/main.ts b/packages/mercurius/tests/code-first-federation/gateway/main.ts index f5198fc53..785d03c10 100644 --- a/packages/mercurius/tests/code-first-federation/gateway/main.ts +++ b/packages/mercurius/tests/code-first-federation/gateway/main.ts @@ -1,5 +1,5 @@ import { NestFactory } from '@nestjs/core'; -import { AppModule } from './gateway.module'; +import { AppModule } from './gateway.module.js'; import { FastifyAdapter, NestFastifyApplication, diff --git a/packages/mercurius/tests/code-first-federation/posts-service/federation-posts.module.ts b/packages/mercurius/tests/code-first-federation/posts-service/federation-posts.module.ts index e1096c411..b775ec5c5 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/federation-posts.module.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/federation-posts.module.ts @@ -3,9 +3,9 @@ import { GraphQLModule } from '@nestjs/graphql'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../lib'; -import { PostModule } from './posts/post.module'; -import { UserModule } from './users/user.module'; +} from '../../../lib/index.js'; +import { PostModule } from './posts/post.module.js'; +import { UserModule } from './users/user.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/code-first-federation/posts-service/main.ts b/packages/mercurius/tests/code-first-federation/posts-service/main.ts index ca8933bde..9d19a5a31 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/main.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/main.ts @@ -1,5 +1,5 @@ import { NestFactory } from '@nestjs/core'; -import { AppModule } from './federation-posts.module'; +import { AppModule } from './federation-posts.module.js'; import { FastifyAdapter, NestFastifyApplication, diff --git a/packages/mercurius/tests/code-first-federation/posts-service/posts/post.module.ts b/packages/mercurius/tests/code-first-federation/posts-service/posts/post.module.ts index 1cba92ef0..9ffb29e35 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/posts/post.module.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/posts/post.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { PostService } from './post.service'; -import { PostResolver } from './post.resolver'; +import { PostService } from './post.service.js'; +import { PostResolver } from './post.resolver.js'; @Module({ providers: [PostService, PostResolver], diff --git a/packages/mercurius/tests/code-first-federation/posts-service/posts/post.resolver.ts b/packages/mercurius/tests/code-first-federation/posts-service/posts/post.resolver.ts index fc5099c90..fa222e374 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/posts/post.resolver.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/posts/post.resolver.ts @@ -1,8 +1,8 @@ import { Args, Query, Resolver, ResolveReference } from '@nestjs/graphql'; -import { FederationSearchResultUnion } from '../unions/search-result.union'; -import { User } from '../users/user.entity'; -import { Post } from './post.entity'; -import { PostService } from './post.service'; +import { FederationSearchResultUnion } from '../unions/search-result.union.js'; +import { User } from '../users/user.entity.js'; +import { Post } from './post.entity.js'; +import { PostService } from './post.service.js'; @Resolver((of) => Post) export class PostResolver { diff --git a/packages/mercurius/tests/code-first-federation/posts-service/posts/post.service.ts b/packages/mercurius/tests/code-first-federation/posts-service/posts/post.service.ts index c3de8a5fa..70e5967ba 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/posts/post.service.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/posts/post.service.ts @@ -1,4 +1,4 @@ -import { Post } from './post.entity'; +import { Post } from './post.entity.js'; import { Injectable } from '@nestjs/common'; const data = [ diff --git a/packages/mercurius/tests/code-first-federation/posts-service/unions/search-result.union.ts b/packages/mercurius/tests/code-first-federation/posts-service/unions/search-result.union.ts index e6507faf0..08977e5f7 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/unions/search-result.union.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/unions/search-result.union.ts @@ -1,6 +1,6 @@ import { createUnionType } from '@nestjs/graphql'; -import { Post } from '../posts/post.entity'; -import { User } from '../users/user.entity'; +import { Post } from '../posts/post.entity.js'; +import { User } from '../users/user.entity.js'; export const FederationSearchResultUnion = createUnionType({ name: 'FederationSearchResultUnion', diff --git a/packages/mercurius/tests/code-first-federation/posts-service/users/user.entity.ts b/packages/mercurius/tests/code-first-federation/posts-service/users/user.entity.ts index 743ceb45b..dd3fdf80a 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/users/user.entity.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/users/user.entity.ts @@ -1,5 +1,5 @@ import { Directive, Field, ID, ObjectType } from '@nestjs/graphql'; -import { Post } from '../posts/post.entity'; +import { Post } from '../posts/post.entity.js'; @ObjectType() @Directive('@extends') diff --git a/packages/mercurius/tests/code-first-federation/posts-service/users/user.module.ts b/packages/mercurius/tests/code-first-federation/posts-service/users/user.module.ts index 52b5f55a5..db16ff178 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/users/user.module.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/users/user.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; -import { PostModule } from '../posts/post.module'; +import { UserResolver } from './user.resolver.js'; +import { PostModule } from '../posts/post.module.js'; @Module({ providers: [UserResolver], diff --git a/packages/mercurius/tests/code-first-federation/posts-service/users/user.resolver.ts b/packages/mercurius/tests/code-first-federation/posts-service/users/user.resolver.ts index 3750da59b..996dd50fe 100644 --- a/packages/mercurius/tests/code-first-federation/posts-service/users/user.resolver.ts +++ b/packages/mercurius/tests/code-first-federation/posts-service/users/user.resolver.ts @@ -1,6 +1,6 @@ import { Parent, ResolveField, Resolver } from '@nestjs/graphql'; -import { PostService } from '../posts/post.service'; -import { User } from './user.entity'; +import { PostService } from '../posts/post.service.js'; +import { User } from './user.entity.js'; @Resolver((of) => User) export class UserResolver { diff --git a/packages/mercurius/tests/code-first-federation/recipes-service/federation-recipes.module.ts b/packages/mercurius/tests/code-first-federation/recipes-service/federation-recipes.module.ts index 99880f83c..42f261216 100644 --- a/packages/mercurius/tests/code-first-federation/recipes-service/federation-recipes.module.ts +++ b/packages/mercurius/tests/code-first-federation/recipes-service/federation-recipes.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusFederationDriver } from '../../../lib'; -import { RecipeModule } from './recipes/recipe.module'; +import { MercuriusFederationDriver } from '../../../lib/index.js'; +import { RecipeModule } from './recipes/recipe.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/code-first-federation/recipes-service/main.ts b/packages/mercurius/tests/code-first-federation/recipes-service/main.ts index 8c5ce4560..635085d75 100644 --- a/packages/mercurius/tests/code-first-federation/recipes-service/main.ts +++ b/packages/mercurius/tests/code-first-federation/recipes-service/main.ts @@ -1,5 +1,5 @@ import { NestFactory } from '@nestjs/core'; -import { AppModule } from './federation-recipes.module'; +import { AppModule } from './federation-recipes.module.js'; import { FastifyAdapter, NestFastifyApplication, diff --git a/packages/mercurius/tests/code-first-federation/recipes-service/recipes/irecipe.resolver.ts b/packages/mercurius/tests/code-first-federation/recipes-service/recipes/irecipe.resolver.ts index 93f3ef54f..b764e9054 100644 --- a/packages/mercurius/tests/code-first-federation/recipes-service/recipes/irecipe.resolver.ts +++ b/packages/mercurius/tests/code-first-federation/recipes-service/recipes/irecipe.resolver.ts @@ -1,5 +1,5 @@ import { Query, Resolver } from '@nestjs/graphql'; -import { IRecipe } from './recipe'; +import { IRecipe } from './recipe.js'; @Resolver((of) => IRecipe) export class IRecipeResolver { diff --git a/packages/mercurius/tests/code-first-federation/recipes-service/recipes/recipe.module.ts b/packages/mercurius/tests/code-first-federation/recipes-service/recipes/recipe.module.ts index 4a7ab7da9..6564eb70d 100644 --- a/packages/mercurius/tests/code-first-federation/recipes-service/recipes/recipe.module.ts +++ b/packages/mercurius/tests/code-first-federation/recipes-service/recipes/recipe.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { IRecipeResolver } from './irecipe.resolver'; +import { IRecipeResolver } from './irecipe.resolver.js'; @Module({ providers: [IRecipeResolver], diff --git a/packages/mercurius/tests/code-first-federation/users-service/federation-users.module.ts b/packages/mercurius/tests/code-first-federation/users-service/federation-users.module.ts index d73dcaeda..ae6a211a7 100644 --- a/packages/mercurius/tests/code-first-federation/users-service/federation-users.module.ts +++ b/packages/mercurius/tests/code-first-federation/users-service/federation-users.module.ts @@ -3,8 +3,8 @@ import { GraphQLModule } from '@nestjs/graphql'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../lib'; -import { UserModule } from './users/user.module'; +} from '../../../lib/index.js'; +import { UserModule } from './users/user.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/code-first-federation/users-service/main.ts b/packages/mercurius/tests/code-first-federation/users-service/main.ts index bbb41c5fa..003d17554 100644 --- a/packages/mercurius/tests/code-first-federation/users-service/main.ts +++ b/packages/mercurius/tests/code-first-federation/users-service/main.ts @@ -1,5 +1,5 @@ import { NestFactory } from '@nestjs/core'; -import { AppModule } from './federation-users.module'; +import { AppModule } from './federation-users.module.js'; import { FastifyAdapter, NestFastifyApplication, diff --git a/packages/mercurius/tests/code-first-federation/users-service/users/user.module.ts b/packages/mercurius/tests/code-first-federation/users-service/users/user.module.ts index 33ea94408..71a06e881 100644 --- a/packages/mercurius/tests/code-first-federation/users-service/users/user.module.ts +++ b/packages/mercurius/tests/code-first-federation/users-service/users/user.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; -import { UserService } from './user.service'; +import { UserResolver } from './user.resolver.js'; +import { UserService } from './user.service.js'; @Module({ providers: [UserResolver, UserService], diff --git a/packages/mercurius/tests/code-first-federation/users-service/users/user.resolver.ts b/packages/mercurius/tests/code-first-federation/users-service/users/user.resolver.ts index feeb571a5..96e0a15f3 100644 --- a/packages/mercurius/tests/code-first-federation/users-service/users/user.resolver.ts +++ b/packages/mercurius/tests/code-first-federation/users-service/users/user.resolver.ts @@ -1,6 +1,6 @@ import { Resolver, Query, Args, ResolveReference } from '@nestjs/graphql'; -import { User } from './user.entity'; -import { UserService } from './user.service'; +import { User } from './user.entity.js'; +import { UserService } from './user.service.js'; @Resolver((of) => User) export class UserResolver { diff --git a/packages/mercurius/tests/code-first-federation/users-service/users/user.service.ts b/packages/mercurius/tests/code-first-federation/users-service/users/user.service.ts index aee6a15fd..ce1fde082 100644 --- a/packages/mercurius/tests/code-first-federation/users-service/users/user.service.ts +++ b/packages/mercurius/tests/code-first-federation/users-service/users/user.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { User } from './user.entity'; +import { User } from './user.entity.js'; const data = [ { diff --git a/packages/mercurius/tests/code-first-register-in/products/product.model.ts b/packages/mercurius/tests/code-first-register-in/products/product.model.ts index 658a73407..f37745280 100644 --- a/packages/mercurius/tests/code-first-register-in/products/product.model.ts +++ b/packages/mercurius/tests/code-first-register-in/products/product.model.ts @@ -1,5 +1,5 @@ import { Field, ID, ObjectType } from '@nestjs/graphql'; -import { ProductsModule } from './products.module'; +import { ProductsModule } from './products.module.js'; @ObjectType({ registerIn: () => ProductsModule }) export class Product { diff --git a/packages/mercurius/tests/code-first-register-in/products/products.module.ts b/packages/mercurius/tests/code-first-register-in/products/products.module.ts index e74a4192a..aa815a618 100644 --- a/packages/mercurius/tests/code-first-register-in/products/products.module.ts +++ b/packages/mercurius/tests/code-first-register-in/products/products.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ProductsResolver } from './products.resolver'; +import { ProductsResolver } from './products.resolver.js'; @Module({ providers: [ProductsResolver], diff --git a/packages/mercurius/tests/code-first-register-in/products/products.resolver.ts b/packages/mercurius/tests/code-first-register-in/products/products.resolver.ts index c0861d9c0..303e7a08b 100644 --- a/packages/mercurius/tests/code-first-register-in/products/products.resolver.ts +++ b/packages/mercurius/tests/code-first-register-in/products/products.resolver.ts @@ -1,5 +1,5 @@ import { Query, Resolver } from '@nestjs/graphql'; -import { Product } from './product.model'; +import { Product } from './product.model.js'; @Resolver((of) => Product) export class ProductsResolver { diff --git a/packages/mercurius/tests/code-first-register-in/users/create-user.input.ts b/packages/mercurius/tests/code-first-register-in/users/create-user.input.ts index aae253a30..2e71a3ff6 100644 --- a/packages/mercurius/tests/code-first-register-in/users/create-user.input.ts +++ b/packages/mercurius/tests/code-first-register-in/users/create-user.input.ts @@ -1,5 +1,5 @@ import { Field, InputType } from '@nestjs/graphql'; -import { UsersModule } from './users.module'; +import { UsersModule } from './users.module.js'; @InputType({ registerIn: () => UsersModule }) export class CreateUserInput { diff --git a/packages/mercurius/tests/code-first-register-in/users/user.model.ts b/packages/mercurius/tests/code-first-register-in/users/user.model.ts index 042704cc4..2669fb20f 100644 --- a/packages/mercurius/tests/code-first-register-in/users/user.model.ts +++ b/packages/mercurius/tests/code-first-register-in/users/user.model.ts @@ -1,6 +1,6 @@ import { Field, ID, ObjectType } from '@nestjs/graphql'; -import { AppInfo } from '../shared/app-info.model'; -import { UsersModule } from './users.module'; +import { AppInfo } from '../shared/app-info.model.js'; +import { UsersModule } from './users.module.js'; @ObjectType({ registerIn: () => UsersModule }) export class User { diff --git a/packages/mercurius/tests/code-first-register-in/users/users.module.ts b/packages/mercurius/tests/code-first-register-in/users/users.module.ts index 94cba58f0..20c89b79d 100644 --- a/packages/mercurius/tests/code-first-register-in/users/users.module.ts +++ b/packages/mercurius/tests/code-first-register-in/users/users.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UsersResolver } from './users.resolver'; +import { UsersResolver } from './users.resolver.js'; @Module({ providers: [UsersResolver], diff --git a/packages/mercurius/tests/code-first-register-in/users/users.resolver.ts b/packages/mercurius/tests/code-first-register-in/users/users.resolver.ts index 3f9e5515a..f0232e31e 100644 --- a/packages/mercurius/tests/code-first-register-in/users/users.resolver.ts +++ b/packages/mercurius/tests/code-first-register-in/users/users.resolver.ts @@ -1,6 +1,6 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; -import { CreateUserInput } from './create-user.input'; -import { User } from './user.model'; +import { CreateUserInput } from './create-user.input.js'; +import { User } from './user.model.js'; @Resolver((of) => User) export class UsersResolver { diff --git a/packages/mercurius/tests/code-first/app.module.ts b/packages/mercurius/tests/code-first/app.module.ts index d213b46e8..2f36e1dbf 100644 --- a/packages/mercurius/tests/code-first/app.module.ts +++ b/packages/mercurius/tests/code-first/app.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { DirectionsModule } from './directions/directions.module'; -import { RecipesModule } from './recipes/recipes.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { DirectionsModule } from './directions/directions.module.js'; +import { RecipesModule } from './recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/code-first/cats/cats.module.ts b/packages/mercurius/tests/code-first/cats/cats.module.ts index 7826c4ae0..cb796553b 100644 --- a/packages/mercurius/tests/code-first/cats/cats.module.ts +++ b/packages/mercurius/tests/code-first/cats/cats.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { CatsResolver } from './cats.resolver'; +import { CatsResolver } from './cats.resolver.js'; @Module({}) export class CatsModule { diff --git a/packages/mercurius/tests/code-first/directions/directions.module.ts b/packages/mercurius/tests/code-first/directions/directions.module.ts index 06331a8e1..b4502a61c 100644 --- a/packages/mercurius/tests/code-first/directions/directions.module.ts +++ b/packages/mercurius/tests/code-first/directions/directions.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { DirectionsResolver } from './directions.resolver'; +import { DirectionsResolver } from './directions.resolver.js'; @Module({ providers: [DirectionsResolver], diff --git a/packages/mercurius/tests/code-first/directions/directions.resolver.ts b/packages/mercurius/tests/code-first/directions/directions.resolver.ts index 1fd55cc37..c6fda8ea0 100644 --- a/packages/mercurius/tests/code-first/directions/directions.resolver.ts +++ b/packages/mercurius/tests/code-first/directions/directions.resolver.ts @@ -1,5 +1,5 @@ import { Args, Query, Resolver } from '@nestjs/graphql'; -import { Direction } from '../enums/direction.enum'; +import { Direction } from '../enums/direction.enum.js'; @Resolver() export class DirectionsResolver { diff --git a/packages/mercurius/tests/code-first/main.ts b/packages/mercurius/tests/code-first/main.ts index 1db5f27c6..75bb30d7b 100644 --- a/packages/mercurius/tests/code-first/main.ts +++ b/packages/mercurius/tests/code-first/main.ts @@ -2,7 +2,7 @@ import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import mercurius from 'mercurius'; -import { ApplicationModule } from './app.module'; +import { ApplicationModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule, new FastifyAdapter()); diff --git a/packages/mercurius/tests/code-first/other/abstract.resolver.ts b/packages/mercurius/tests/code-first/other/abstract.resolver.ts index 9e3dc4b84..aadeda089 100644 --- a/packages/mercurius/tests/code-first/other/abstract.resolver.ts +++ b/packages/mercurius/tests/code-first/other/abstract.resolver.ts @@ -1,6 +1,6 @@ import { Args, Query, Resolver } from '@nestjs/graphql'; -import { RecipesArgs } from '../recipes/dto/recipes.args'; -import { Recipe } from '../recipes/models/recipe'; +import { RecipesArgs } from '../recipes/dto/recipes.args.js'; +import { Recipe } from '../recipes/models/recipe.js'; @Resolver(() => Recipe, { isAbstract: true }) export class AbstractResolver { diff --git a/packages/mercurius/tests/code-first/recipes/irecipes.resolver.ts b/packages/mercurius/tests/code-first/recipes/irecipes.resolver.ts index 7f13ee1c1..d7388569d 100644 --- a/packages/mercurius/tests/code-first/recipes/irecipes.resolver.ts +++ b/packages/mercurius/tests/code-first/recipes/irecipes.resolver.ts @@ -1,5 +1,5 @@ import { Args, ResolveField, Resolver } from '@nestjs/graphql'; -import { IRecipe } from './models/recipe'; +import { IRecipe } from './models/recipe.js'; @Resolver((of) => IRecipe) export class IRecipesResolver { diff --git a/packages/mercurius/tests/code-first/recipes/models/recipe.ts b/packages/mercurius/tests/code-first/recipes/models/recipe.ts index b4a96a1ef..493af8641 100644 --- a/packages/mercurius/tests/code-first/recipes/models/recipe.ts +++ b/packages/mercurius/tests/code-first/recipes/models/recipe.ts @@ -6,7 +6,7 @@ import { NextFn, ObjectType, } from '@nestjs/graphql'; -import { METADATA_FACTORY_NAME } from '@nestjs/graphql/plugin/plugin-constants'; +import { METADATA_FACTORY_NAME } from '@nestjs/graphql/plugin/plugin-constants.js'; @InterfaceType() export abstract class Base { diff --git a/packages/mercurius/tests/code-first/recipes/recipes.module.ts b/packages/mercurius/tests/code-first/recipes/recipes.module.ts index 324a9222c..b22fc6604 100644 --- a/packages/mercurius/tests/code-first/recipes/recipes.module.ts +++ b/packages/mercurius/tests/code-first/recipes/recipes.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; import { APP_FILTER } from '@nestjs/core'; -import { UnauthorizedFilter } from '../common/filters/unauthorized.filter'; -import { DateScalar } from '../common/scalars/date.scalar'; -import { IRecipesResolver } from './irecipes.resolver'; -import { RecipesResolver } from './recipes.resolver'; -import { RecipesService } from './recipes.service'; +import { UnauthorizedFilter } from '../common/filters/unauthorized.filter.js'; +import { DateScalar } from '../common/scalars/date.scalar.js'; +import { IRecipesResolver } from './irecipes.resolver.js'; +import { RecipesResolver } from './recipes.resolver.js'; +import { RecipesService } from './recipes.service.js'; @Module({ providers: [ diff --git a/packages/mercurius/tests/code-first/recipes/recipes.resolver.ts b/packages/mercurius/tests/code-first/recipes/recipes.resolver.ts index 7097437c4..d74a39a69 100644 --- a/packages/mercurius/tests/code-first/recipes/recipes.resolver.ts +++ b/packages/mercurius/tests/code-first/recipes/recipes.resolver.ts @@ -9,15 +9,15 @@ import { Subscription, } from '@nestjs/graphql'; import { PubSub } from 'graphql-subscriptions'; -import { AuthGuard } from '../common/guards/auth.guard'; -import { FilterRecipesCountArgs } from './dto/filter-recipes-count.args'; -import { NewRecipeInput } from './dto/new-recipe.input'; -import { RecipesArgs } from './dto/recipes.args'; -import { Category } from './models/category'; -import { Ingredient } from './models/ingredient'; -import { IRecipe, Recipe } from './models/recipe'; -import { RecipesService } from './recipes.service'; -import { SearchResultUnion } from './unions/search-result.union'; +import { AuthGuard } from '../common/guards/auth.guard.js'; +import { FilterRecipesCountArgs } from './dto/filter-recipes-count.args.js'; +import { NewRecipeInput } from './dto/new-recipe.input.js'; +import { RecipesArgs } from './dto/recipes.args.js'; +import { Category } from './models/category.js'; +import { Ingredient } from './models/ingredient.js'; +import { IRecipe, Recipe } from './models/recipe.js'; +import { RecipesService } from './recipes.service.js'; +import { SearchResultUnion } from './unions/search-result.union.js'; const pubSub = new PubSub(); diff --git a/packages/mercurius/tests/code-first/recipes/recipes.service.ts b/packages/mercurius/tests/code-first/recipes/recipes.service.ts index ec91515b6..e1c27a225 100644 --- a/packages/mercurius/tests/code-first/recipes/recipes.service.ts +++ b/packages/mercurius/tests/code-first/recipes/recipes.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; -import { NewRecipeInput } from './dto/new-recipe.input'; -import { RecipesArgs } from './dto/recipes.args'; -import { Recipe } from './models/recipe'; +import { NewRecipeInput } from './dto/new-recipe.input.js'; +import { RecipesArgs } from './dto/recipes.args.js'; +import { Recipe } from './models/recipe.js'; @Injectable() export class RecipesService { diff --git a/packages/mercurius/tests/code-first/recipes/unions/search-result.union.ts b/packages/mercurius/tests/code-first/recipes/unions/search-result.union.ts index e681cab52..b6832da10 100644 --- a/packages/mercurius/tests/code-first/recipes/unions/search-result.union.ts +++ b/packages/mercurius/tests/code-first/recipes/unions/search-result.union.ts @@ -1,6 +1,6 @@ import { createUnionType } from '@nestjs/graphql'; -import { Ingredient } from '../models/ingredient'; -import { Recipe } from '../models/recipe'; +import { Ingredient } from '../models/ingredient.js'; +import { Recipe } from '../models/recipe.js'; export const SearchResultUnion = createUnionType({ name: 'SearchResultUnion', diff --git a/packages/mercurius/tests/duplicate-resolvers/app.module.ts b/packages/mercurius/tests/duplicate-resolvers/app.module.ts index 594729e1b..f1a1977b6 100644 --- a/packages/mercurius/tests/duplicate-resolvers/app.module.ts +++ b/packages/mercurius/tests/duplicate-resolvers/app.module.ts @@ -1,16 +1,16 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { ModuleAModule } from './module-a/module-a.module'; -import { ModuleBModule } from './module-b/module-b.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { ModuleAModule } from './module-a/module-a.module.js'; +import { ModuleBModule } from './module-b/module-b.module.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: MercuriusDriver, - typePaths: [join(__dirname, '*.graphql')], + typePaths: [join(import.meta.dirname, '*.graphql')], }), ModuleAModule, ModuleBModule, diff --git a/packages/mercurius/tests/duplicate-resolvers/module-a/module-a.module.ts b/packages/mercurius/tests/duplicate-resolvers/module-a/module-a.module.ts index a81c95d08..b67caeb6c 100644 --- a/packages/mercurius/tests/duplicate-resolvers/module-a/module-a.module.ts +++ b/packages/mercurius/tests/duplicate-resolvers/module-a/module-a.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/mercurius/tests/duplicate-resolvers/module-b/module-b.module.ts b/packages/mercurius/tests/duplicate-resolvers/module-b/module-b.module.ts index 22c8abf76..6211f8cef 100644 --- a/packages/mercurius/tests/duplicate-resolvers/module-b/module-b.module.ts +++ b/packages/mercurius/tests/duplicate-resolvers/module-b/module-b.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { UserResolver } from './user.resolver'; +import { UserResolver } from './user.resolver.js'; @Module({ imports: [], diff --git a/packages/mercurius/tests/e2e/base-hooks-array.spec.ts b/packages/mercurius/tests/e2e/base-hooks-array.spec.ts index c04b70ab6..f68c5dafd 100644 --- a/packages/mercurius/tests/e2e/base-hooks-array.spec.ts +++ b/packages/mercurius/tests/e2e/base-hooks-array.spec.ts @@ -2,9 +2,9 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import request from 'supertest'; -import { HOOKS_INVOCATIONS } from '../hooks/base-array/graphql.config'; -import { ApplicationModule } from '../hooks/base-array/hooks.module'; -import { MockLogger } from '../hooks/mocks/logger.mock'; +import { HOOKS_INVOCATIONS } from '../hooks/base-array/graphql.config.js'; +import { ApplicationModule } from '../hooks/base-array/hooks.module.js'; +import { MockLogger } from '../hooks/mocks/logger.mock.js'; describe('Base hooks in array format', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/base-hooks.spec.ts b/packages/mercurius/tests/e2e/base-hooks.spec.ts index 0f73458f8..bb62e72de 100644 --- a/packages/mercurius/tests/e2e/base-hooks.spec.ts +++ b/packages/mercurius/tests/e2e/base-hooks.spec.ts @@ -2,9 +2,9 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import request from 'supertest'; -import { HOOKS_INVOCATIONS } from '../hooks/base/graphql.config'; -import { ApplicationModule } from '../hooks/base/hooks.module'; -import { MockLogger } from '../hooks/mocks/logger.mock'; +import { HOOKS_INVOCATIONS } from '../hooks/base/graphql.config.js'; +import { ApplicationModule } from '../hooks/base/hooks.module.js'; +import { MockLogger } from '../hooks/mocks/logger.mock.js'; describe('Base hooks', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/code-first-federation.spec.ts b/packages/mercurius/tests/e2e/code-first-federation.spec.ts index b3ea3fbc1..0a0d6084d 100644 --- a/packages/mercurius/tests/e2e/code-first-federation.spec.ts +++ b/packages/mercurius/tests/e2e/code-first-federation.spec.ts @@ -1,11 +1,22 @@ import { INestApplication, Type } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; +import { createRequire } from 'module'; import request from 'supertest'; -import { AppModule as GatewayModule } from '../code-first-federation/gateway/gateway.module'; -import { AppModule as PostsModule } from '../code-first-federation/posts-service/federation-posts.module'; -import { AppModule as RecipesModule } from '../code-first-federation/recipes-service/federation-recipes.module'; -import { AppModule as UsersModule } from '../code-first-federation/users-service/federation-users.module'; +import { AppModule as GatewayModule } from '../code-first-federation/gateway/gateway.module.js'; +import { AppModule as PostsModule } from '../code-first-federation/posts-service/federation-posts.module.js'; +import { AppModule as RecipesModule } from '../code-first-federation/recipes-service/federation-recipes.module.js'; +import { AppModule as UsersModule } from '../code-first-federation/users-service/federation-users.module.js'; + +const require = createRequire(import.meta.url); +const describeCodeFirstFederation = (() => { + try { + require('@mercuriusjs/gateway/lib/gateway/service-map'); + return describe; + } catch { + return describe.skip; + } +})(); async function createService(Module: Type, port: number) { const module = await Test.createTestingModule({ @@ -18,16 +29,19 @@ async function createService(Module: Type, port: number) { return app; } -describe('Code-first - Federation', () => { +describeCodeFirstFederation('Code-first - Federation', () => { + const recipesPort = 3211; + const postsPort = 3212; + const usersPort = 3213; let recipesApp: INestApplication; let postsApp: INestApplication; let usersApp: INestApplication; let gatewayApp: INestApplication; beforeEach(async () => { - recipesApp = await createService(RecipesModule, 3011); - postsApp = await createService(PostsModule, 3012); - usersApp = await createService(UsersModule, 3013); + recipesApp = await createService(RecipesModule, recipesPort); + postsApp = await createService(PostsModule, postsPort); + usersApp = await createService(UsersModule, usersPort); const gatewayModule = await Test.createTestingModule({ imports: [GatewayModule], @@ -151,8 +165,7 @@ scalar link__Import`, }); /** - * TODO: Temporarirly skipped due to the following issue: - * https://github.com/mercurius-js/mercurius-gateway/issues/59 + * Still blocked upstream by https://github.com/mercurius-js/mercurius-gateway/issues/59. */ it.skip('should return posts query result from gateway', async () => { return request(gatewayApp.getHttpServer()) diff --git a/packages/mercurius/tests/e2e/code-first-plugin.spec.ts b/packages/mercurius/tests/e2e/code-first-plugin.spec.ts index 75422bd7a..e3afcd3ab 100644 --- a/packages/mercurius/tests/e2e/code-first-plugin.spec.ts +++ b/packages/mercurius/tests/e2e/code-first-plugin.spec.ts @@ -2,8 +2,8 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import { FastifyInstance } from 'fastify'; -import { ApplicationModule } from '../plugins/code-first-plugin/app.module'; -import { NEW_PLUGIN_URL } from '../plugins/mocks/utils/constants'; +import { ApplicationModule } from '../plugins/code-first-plugin/app.module.js'; +import { NEW_PLUGIN_URL } from '../plugins/mocks/utils/constants.js'; describe('Code-first with plugins', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/code-first-register-in.spec.ts b/packages/mercurius/tests/e2e/code-first-register-in.spec.ts index 1103c3714..1e075109b 100644 --- a/packages/mercurius/tests/e2e/code-first-register-in.spec.ts +++ b/packages/mercurius/tests/e2e/code-first-register-in.spec.ts @@ -5,9 +5,9 @@ import { NestFastifyApplication, } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; -import { MercuriusDriver, MercuriusDriverConfig } from '../../lib'; -import { ProductsModule } from '../code-first-register-in/products/products.module'; -import { UsersModule } from '../code-first-register-in/users/users.module'; +import { MercuriusDriver, MercuriusDriverConfig } from '../../lib/index.js'; +import { ProductsModule } from '../code-first-register-in/products/products.module.js'; +import { UsersModule } from '../code-first-register-in/users/users.module.js'; const buildApp = async (include?: Function[]) => { const moduleRef = await Test.createTestingModule({ diff --git a/packages/mercurius/tests/e2e/code-first.spec.ts b/packages/mercurius/tests/e2e/code-first.spec.ts index 3ba381501..a27b9650c 100644 --- a/packages/mercurius/tests/e2e/code-first.spec.ts +++ b/packages/mercurius/tests/e2e/code-first.spec.ts @@ -1,7 +1,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; -import { ApplicationModule } from '../code-first/app.module'; +import { ApplicationModule } from '../code-first/app.module.js'; describe('Code-first', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/duplicate-resolvers.spec.ts b/packages/mercurius/tests/e2e/duplicate-resolvers.spec.ts index c0b1350d5..91d95f859 100644 --- a/packages/mercurius/tests/e2e/duplicate-resolvers.spec.ts +++ b/packages/mercurius/tests/e2e/duplicate-resolvers.spec.ts @@ -1,8 +1,8 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; -import { AppModule as CodeFirstModule } from '../code-first-duplicate-resolvers/app.module'; -import { AppModule as SchemaFirstModule } from '../duplicate-resolvers/app.module'; +import { AppModule as CodeFirstModule } from '../code-first-duplicate-resolvers/app.module.js'; +import { AppModule as SchemaFirstModule } from '../duplicate-resolvers/app.module.js'; describe('Duplicate resolvers', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/global-prefix-fastify.spec.ts b/packages/mercurius/tests/e2e/global-prefix-fastify.spec.ts index 807f474e7..b880dba27 100644 --- a/packages/mercurius/tests/e2e/global-prefix-fastify.spec.ts +++ b/packages/mercurius/tests/e2e/global-prefix-fastify.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { GlobalPrefixModule } from '../graphql/global-prefix.module'; +import { GlobalPrefixModule } from '../graphql/global-prefix.module.js'; describe('GraphQL Fastify (global prefix)', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-async-class.spec.ts b/packages/mercurius/tests/e2e/graphql-async-class.spec.ts index 54c182396..ac96ab10e 100644 --- a/packages/mercurius/tests/e2e/graphql-async-class.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-async-class.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import request from 'supertest'; -import { AsyncClassApplicationModule } from '../graphql/async-options-class.module'; +import { AsyncClassApplicationModule } from '../graphql/async-options-class.module.js'; describe('GraphQL (async class)', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-async-existing.spec.ts b/packages/mercurius/tests/e2e/graphql-async-existing.spec.ts index e6afbb461..10b1b45f9 100644 --- a/packages/mercurius/tests/e2e/graphql-async-existing.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-async-existing.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import request from 'supertest'; -import { AsyncExistingApplicationModule } from '../graphql/async-options-existing.module'; +import { AsyncExistingApplicationModule } from '../graphql/async-options-existing.module.js'; describe('GraphQL (async existing)', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-async.spec.ts b/packages/mercurius/tests/e2e/graphql-async.spec.ts index 1a501a5b1..88f4e6ff9 100644 --- a/packages/mercurius/tests/e2e/graphql-async.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-async.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import request from 'supertest'; -import { AsyncApplicationModule } from '../graphql/async-options.module'; +import { AsyncApplicationModule } from '../graphql/async-options.module.js'; describe('GraphQL (async configuration)', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-federation-async-class.spec.ts b/packages/mercurius/tests/e2e/graphql-federation-async-class.spec.ts index 3c4ad60d4..8efdc95ce 100644 --- a/packages/mercurius/tests/e2e/graphql-federation-async-class.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-federation-async-class.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/users-service/federation-users.async-class.module'; +import { AppModule } from '../graphql-federation/users-service/federation-users.async-class.module.js'; describe('GraphQL Federation async-class', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-federation-async-existing.spec.ts b/packages/mercurius/tests/e2e/graphql-federation-async-existing.spec.ts index 1bbca03ad..74d5fc8a9 100644 --- a/packages/mercurius/tests/e2e/graphql-federation-async-existing.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-federation-async-existing.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/users-service/federation-users.async-existing.module'; +import { AppModule } from '../graphql-federation/users-service/federation-users.async-existing.module.js'; describe('GraphQL Federation Async', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-federation-async.spec.ts b/packages/mercurius/tests/e2e/graphql-federation-async.spec.ts index c6f7a3f31..3e5970608 100644 --- a/packages/mercurius/tests/e2e/graphql-federation-async.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-federation-async.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule } from '../graphql-federation/users-service/federation-users.async.module'; +import { AppModule } from '../graphql-federation/users-service/federation-users.async.module.js'; describe('GraphQL Federation Async', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-federation-plugin.spec.ts b/packages/mercurius/tests/e2e/graphql-federation-plugin.spec.ts index 2c218f075..fe4cff435 100644 --- a/packages/mercurius/tests/e2e/graphql-federation-plugin.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-federation-plugin.spec.ts @@ -2,12 +2,12 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import { FastifyInstance } from 'fastify'; -import { AppModule as PostsModule } from '../plugins/graphql-federation-plugin/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../plugins/graphql-federation-plugin/users-service/federation-users.module'; +import { AppModule as PostsModule } from '../plugins/graphql-federation-plugin/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../plugins/graphql-federation-plugin/users-service/federation-users.module.js'; import { BASE_PLUGIN_URL, NEW_PLUGIN_URL, -} from '../plugins/mocks/utils/constants'; +} from '../plugins/mocks/utils/constants.js'; describe('GraphQL Federation with plugins', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-federation-schema-host.spec.ts b/packages/mercurius/tests/e2e/graphql-federation-schema-host.spec.ts index f231b8cfa..d926d1cc1 100644 --- a/packages/mercurius/tests/e2e/graphql-federation-schema-host.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-federation-schema-host.spec.ts @@ -3,7 +3,7 @@ import { GraphQLSchemaHost } from '@nestjs/graphql'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import { GraphQLSchema } from 'graphql'; -import { AppModule } from '../graphql-federation/posts-service/federation-posts.module'; +import { AppModule } from '../graphql-federation/posts-service/federation-posts.module.js'; describe('GraphQL federation GraphQLSchemaHost using', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-federation.spec.ts b/packages/mercurius/tests/e2e/graphql-federation.spec.ts index 45d5dea19..0cc7f975b 100644 --- a/packages/mercurius/tests/e2e/graphql-federation.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-federation.spec.ts @@ -2,8 +2,8 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; describe('GraphQL Federation', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql-gateway-plugin.spec.ts b/packages/mercurius/tests/e2e/graphql-gateway-plugin.spec.ts index 4ef715116..a36b2affa 100644 --- a/packages/mercurius/tests/e2e/graphql-gateway-plugin.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-gateway-plugin.spec.ts @@ -2,14 +2,14 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; -import { AppModule as GatewayModule } from '../plugins/graphql-federation-plugin/gateway/gateway.module'; -import { BASE_PLUGIN_URL } from '../plugins/mocks/utils/constants'; - -// TODO: temporarily skip (flaky tests) -// @ref https://app.circleci.com/pipelines/github/nestjs/graphql/6155/workflows/6329f2a8-00b4-4159-9241-224db1685173/jobs/11141 -describe.skip('GraphQL Gateway', () => { +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; +import { AppModule as GatewayModule } from '../plugins/graphql-federation-plugin/gateway/gateway.module.js'; +import { BASE_PLUGIN_URL } from '../plugins/mocks/utils/constants.js'; + +describe('GraphQL Gateway', () => { + const usersPort = 3111; + const postsPort = 3112; let postsApp: INestApplication; let usersApp: INestApplication; let gatewayApp: INestApplication; @@ -20,14 +20,14 @@ describe.skip('GraphQL Gateway', () => { }).compile(); usersApp = usersModule.createNestApplication(new FastifyAdapter()); - await usersApp.listen(3011); + await usersApp.listen(usersPort); const postsModule = await Test.createTestingModule({ imports: [PostsModule], }).compile(); postsApp = postsModule.createNestApplication(new FastifyAdapter()); - await postsApp.listen(3012); + await postsApp.listen(postsPort); const gatewayModule = await Test.createTestingModule({ imports: [GatewayModule], diff --git a/packages/mercurius/tests/e2e/graphql-gateway.spec.ts b/packages/mercurius/tests/e2e/graphql-gateway.spec.ts index 8e1978134..aa1ee453e 100644 --- a/packages/mercurius/tests/e2e/graphql-gateway.spec.ts +++ b/packages/mercurius/tests/e2e/graphql-gateway.spec.ts @@ -2,13 +2,11 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { AppModule as GatewayModule } from '../graphql-federation/gateway/gateway.module'; -import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module'; -import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module'; +import { AppModule as GatewayModule } from '../graphql-federation/gateway/gateway.module.js'; +import { AppModule as PostsModule } from '../graphql-federation/posts-service/federation-posts.module.js'; +import { AppModule as UsersModule } from '../graphql-federation/users-service/federation-users.module.js'; -// TODO: temporarily skip (flaky tests) -// @ref https://app.circleci.com/pipelines/github/nestjs/graphql/6155/workflows/6329f2a8-00b4-4159-9241-224db1685173/jobs/11141 -describe.skip('GraphQL Gateway', () => { +describe('GraphQL Gateway', () => { let postsApp: INestApplication; let usersApp: INestApplication; let gatewayApp: INestApplication; diff --git a/packages/mercurius/tests/e2e/graphql.spec.ts b/packages/mercurius/tests/e2e/graphql.spec.ts index 289bb71e4..eab24bb7a 100644 --- a/packages/mercurius/tests/e2e/graphql.spec.ts +++ b/packages/mercurius/tests/e2e/graphql.spec.ts @@ -2,7 +2,7 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import request from 'supertest'; -import { ApplicationModule } from '../graphql/app.module'; +import { ApplicationModule } from '../graphql/app.module.js'; describe('GraphQL', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/pipes.spec.ts b/packages/mercurius/tests/e2e/pipes.spec.ts index 5b60dd6a4..e5e235466 100644 --- a/packages/mercurius/tests/e2e/pipes.spec.ts +++ b/packages/mercurius/tests/e2e/pipes.spec.ts @@ -2,7 +2,7 @@ import { INestApplication, ValidationPipe } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import mercurius from 'mercurius'; -import { ApplicationModule } from '../code-first/app.module'; +import { ApplicationModule } from '../code-first/app.module.js'; describe('GraphQL - Pipes', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/e2e/resolver-registration-methods.spec.ts b/packages/mercurius/tests/e2e/resolver-registration-methods.spec.ts index 8ec2724ca..d3d771aa7 100644 --- a/packages/mercurius/tests/e2e/resolver-registration-methods.spec.ts +++ b/packages/mercurius/tests/e2e/resolver-registration-methods.spec.ts @@ -1,8 +1,8 @@ import { INestApplication } from '@nestjs/common'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; -import { ApplicationModule } from '../code-first/app.module'; -import { CatsModule } from '../code-first/cats/cats.module'; +import { ApplicationModule } from '../code-first/app.module.js'; +import { CatsModule } from '../code-first/cats/cats.module.js'; describe('GraphQL - Resolver registration methods', () => { let app: INestApplication; diff --git a/packages/mercurius/tests/graphql-federation/gateway/config/config.module.ts b/packages/mercurius/tests/graphql-federation/gateway/config/config.module.ts index eaa505c84..bf41826bb 100644 --- a/packages/mercurius/tests/graphql-federation/gateway/config/config.module.ts +++ b/packages/mercurius/tests/graphql-federation/gateway/config/config.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigService } from './config.service'; +import { ConfigService } from './config.service.js'; @Module({ providers: [ConfigService], diff --git a/packages/mercurius/tests/graphql-federation/gateway/config/config.service.ts b/packages/mercurius/tests/graphql-federation/gateway/config/config.service.ts index ebb94f6d7..6bab3649f 100644 --- a/packages/mercurius/tests/graphql-federation/gateway/config/config.service.ts +++ b/packages/mercurius/tests/graphql-federation/gateway/config/config.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { MercuriusGatewayDriverConfig, MercuriusGatewayDriverConfigFactory, -} from '../../../../lib'; +} from '../../../../lib/index.js'; @Injectable() export class ConfigService implements MercuriusGatewayDriverConfigFactory { diff --git a/packages/mercurius/tests/graphql-federation/gateway/gateway-async-class.module.ts b/packages/mercurius/tests/graphql-federation/gateway/gateway-async-class.module.ts index 301208de0..188e05311 100644 --- a/packages/mercurius/tests/graphql-federation/gateway/gateway-async-class.module.ts +++ b/packages/mercurius/tests/graphql-federation/gateway/gateway-async-class.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../../lib'; -import { MercuriusGatewayDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; +import { MercuriusDriverConfig } from '../../../lib/index.js'; +import { MercuriusGatewayDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/gateway/gateway-async-existing.module.ts b/packages/mercurius/tests/graphql-federation/gateway/gateway-async-existing.module.ts index 8b521a0f0..4bf41af08 100644 --- a/packages/mercurius/tests/graphql-federation/gateway/gateway-async-existing.module.ts +++ b/packages/mercurius/tests/graphql-federation/gateway/gateway-async-existing.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../../lib'; -import { MercuriusGatewayDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; +import { MercuriusDriverConfig } from '../../../lib/index.js'; +import { MercuriusGatewayDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/gateway/gateway-async.module.ts b/packages/mercurius/tests/graphql-federation/gateway/gateway-async.module.ts index 9a6d3bef3..8bb0fc18a 100644 --- a/packages/mercurius/tests/graphql-federation/gateway/gateway-async.module.ts +++ b/packages/mercurius/tests/graphql-federation/gateway/gateway-async.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusGatewayDriver } from '../../../lib/drivers'; -import { MercuriusDriverConfig } from '../../../lib/interfaces'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; +import { MercuriusGatewayDriver } from '../../../lib/drivers/index.js'; +import { MercuriusDriverConfig } from '../../../lib/interfaces/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/gateway/gateway.module.ts b/packages/mercurius/tests/graphql-federation/gateway/gateway.module.ts index 37c1c1dd4..453fd4ac8 100644 --- a/packages/mercurius/tests/graphql-federation/gateway/gateway.module.ts +++ b/packages/mercurius/tests/graphql-federation/gateway/gateway.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusGatewayDriver } from '../../../lib/drivers'; +import { MercuriusGatewayDriver } from '../../../lib/drivers/index.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/posts-service/federation-posts.module.ts b/packages/mercurius/tests/graphql-federation/posts-service/federation-posts.module.ts index 067123ddc..05fb84b0a 100644 --- a/packages/mercurius/tests/graphql-federation/posts-service/federation-posts.module.ts +++ b/packages/mercurius/tests/graphql-federation/posts-service/federation-posts.module.ts @@ -4,15 +4,15 @@ import { join } from 'path'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../lib'; -import { PostsModule } from './posts/posts.module'; -import { upperDirectiveTransformer } from './posts/upper.directive'; +} from '../../../lib/index.js'; +import { PostsModule } from './posts/posts.module.js'; +import { upperDirectiveTransformer } from './posts/upper.directive.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: MercuriusFederationDriver, - typePaths: [join(__dirname, '**/*.graphql')], + typePaths: [join(import.meta.dirname, '**/*.graphql')], transformSchema: (schema) => upperDirectiveTransformer(schema, 'upper'), }), PostsModule, diff --git a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.interfaces.ts b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.interfaces.ts index e740fe6e1..951ddabcb 100644 --- a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.interfaces.ts +++ b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.interfaces.ts @@ -1,4 +1,4 @@ -import { PostType } from './post-type.enum'; +import { PostType } from './post-type.enum.js'; export interface Post { id: string; diff --git a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.module.ts b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.module.ts index 3747ab33a..015598d1e 100644 --- a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.module.ts +++ b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; -import { PostsResolvers } from './posts.resolvers'; -import { UsersResolvers } from './users.resolvers'; -import { PostsService } from './posts.service'; -import { DateScalar } from './date.scalar'; +import { PostsResolvers } from './posts.resolvers.js'; +import { UsersResolvers } from './users.resolvers.js'; +import { PostsService } from './posts.service.js'; +import { DateScalar } from './date.scalar.js'; @Module({ providers: [PostsResolvers, PostsService, UsersResolvers, DateScalar], diff --git a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.resolvers.ts b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.resolvers.ts index ef3a5fdd7..cca6eb826 100644 --- a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.resolvers.ts +++ b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.resolvers.ts @@ -6,9 +6,9 @@ import { ResolveField, Resolver, } from '@nestjs/graphql'; -import { PostType } from './post-type.enum'; -import { Post } from './posts.interfaces'; -import { PostsService } from './posts.service'; +import { PostType } from './post-type.enum.js'; +import { Post } from './posts.interfaces.js'; +import { PostsService } from './posts.service.js'; @Resolver('Post') export class PostsResolvers { constructor(private readonly postsService: PostsService) {} diff --git a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.service.ts b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.service.ts index 47b3d699f..c1b15e579 100644 --- a/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.service.ts +++ b/packages/mercurius/tests/graphql-federation/posts-service/posts/posts.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { Post } from './posts.interfaces'; -import { PostType } from './post-type.enum'; +import { Post } from './posts.interfaces.js'; +import { PostType } from './post-type.enum.js'; @Injectable() export class PostsService { diff --git a/packages/mercurius/tests/graphql-federation/posts-service/posts/users.resolvers.ts b/packages/mercurius/tests/graphql-federation/posts-service/posts/users.resolvers.ts index 31e3c2990..cf3a5024d 100644 --- a/packages/mercurius/tests/graphql-federation/posts-service/posts/users.resolvers.ts +++ b/packages/mercurius/tests/graphql-federation/posts-service/posts/users.resolvers.ts @@ -1,5 +1,5 @@ import { ResolveField, Resolver } from '@nestjs/graphql'; -import { PostsService } from './posts.service'; +import { PostsService } from './posts.service.js'; @Resolver('User') export class UsersResolvers { constructor(private readonly postsService: PostsService) {} diff --git a/packages/mercurius/tests/graphql-federation/users-service/config/config.module.ts b/packages/mercurius/tests/graphql-federation/users-service/config/config.module.ts index eaa505c84..bf41826bb 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/config/config.module.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/config/config.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigService } from './config.service'; +import { ConfigService } from './config.service.js'; @Module({ providers: [ConfigService], diff --git a/packages/mercurius/tests/graphql-federation/users-service/config/config.service.ts b/packages/mercurius/tests/graphql-federation/users-service/config/config.service.ts index 0358e093c..3706b880c 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/config/config.service.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/config/config.service.ts @@ -3,13 +3,13 @@ import { join } from 'path'; import { MercuriusDriverConfigFactory, MercuriusFederationDriverConfig, -} from '../../../../lib'; +} from '../../../../lib/index.js'; @Injectable() export class ConfigService implements MercuriusDriverConfigFactory { public createGqlOptions(): Partial { return { - typePaths: [join(__dirname, '../**/*.graphql')], + typePaths: [join(import.meta.dirname, '../**/*.graphql')], }; } } diff --git a/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-class.module.ts b/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-class.module.ts index e5396d2a0..245640a77 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-class.module.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-class.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusFederationDriver } from '../../../lib'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; -import { UsersModule } from './users/users.module'; +import { MercuriusFederationDriver } from '../../../lib/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-existing.module.ts b/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-existing.module.ts index a286dbef6..deb6a55f3 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-existing.module.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/federation-users.async-existing.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusFederationDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; -import { UsersModule } from './users/users.module'; +import { MercuriusFederationDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/users-service/federation-users.async.module.ts b/packages/mercurius/tests/graphql-federation/users-service/federation-users.async.module.ts index 9f9cb236b..79405f3e3 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/federation-users.async.module.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/federation-users.async.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusFederationDriver } from '../../../lib/drivers'; -import { ConfigModule } from './config/config.module'; -import { ConfigService } from './config/config.service'; -import { UsersModule } from './users/users.module'; +import { MercuriusFederationDriver } from '../../../lib/drivers/index.js'; +import { ConfigModule } from './config/config.module.js'; +import { ConfigService } from './config/config.service.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql-federation/users-service/federation-users.module.ts b/packages/mercurius/tests/graphql-federation/users-service/federation-users.module.ts index c88e84450..694297bfa 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/federation-users.module.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/federation-users.module.ts @@ -4,14 +4,14 @@ import { join } from 'path'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../lib'; -import { UsersModule } from './users/users.module'; +} from '../../../lib/index.js'; +import { UsersModule } from './users/users.module.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: MercuriusFederationDriver, - typePaths: [join(__dirname, '**/*.graphql')], + typePaths: [join(import.meta.dirname, '**/*.graphql')], }), UsersModule, ], diff --git a/packages/mercurius/tests/graphql-federation/users-service/users/users.module.ts b/packages/mercurius/tests/graphql-federation/users-service/users/users.module.ts index d71042e83..7f52481fd 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/users/users.module.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/users/users.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { UsersResolvers } from './users.resolvers'; -import { UsersService } from './users.service'; +import { UsersResolvers } from './users.resolvers.js'; +import { UsersService } from './users.service.js'; @Module({ providers: [UsersResolvers, UsersService], diff --git a/packages/mercurius/tests/graphql-federation/users-service/users/users.resolvers.ts b/packages/mercurius/tests/graphql-federation/users-service/users/users.resolvers.ts index 07f1c8306..bd799cb03 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/users/users.resolvers.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/users/users.resolvers.ts @@ -1,5 +1,5 @@ import { Args, Query, Resolver, ResolveReference } from '@nestjs/graphql'; -import { UsersService } from './users.service'; +import { UsersService } from './users.service.js'; @Resolver('User') export class UsersResolvers { constructor(private readonly usersService: UsersService) {} diff --git a/packages/mercurius/tests/graphql-federation/users-service/users/users.service.ts b/packages/mercurius/tests/graphql-federation/users-service/users/users.service.ts index 9fc49b9ae..abb51122d 100644 --- a/packages/mercurius/tests/graphql-federation/users-service/users/users.service.ts +++ b/packages/mercurius/tests/graphql-federation/users-service/users/users.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { User } from './users.interfaces'; +import { User } from './users.interfaces.js'; @Injectable() export class UsersService { diff --git a/packages/mercurius/tests/graphql/app.module.ts b/packages/mercurius/tests/graphql/app.module.ts index 3e87df3fc..2143fd5ea 100644 --- a/packages/mercurius/tests/graphql/app.module.ts +++ b/packages/mercurius/tests/graphql/app.module.ts @@ -1,16 +1,16 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ CatsModule, GraphQLModule.forRoot({ driver: MercuriusDriver, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }), ], }) diff --git a/packages/mercurius/tests/graphql/async-options-class.module.ts b/packages/mercurius/tests/graphql/async-options-class.module.ts index 501c4eecc..acb67b62c 100644 --- a/packages/mercurius/tests/graphql/async-options-class.module.ts +++ b/packages/mercurius/tests/graphql/async-options-class.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { GqlOptionsFactory, GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; class ConfigService implements GqlOptionsFactory { createGqlOptions(): MercuriusDriverConfig { return { - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }; } } diff --git a/packages/mercurius/tests/graphql/async-options-existing.module.ts b/packages/mercurius/tests/graphql/async-options-existing.module.ts index 573eea572..2c6054d92 100644 --- a/packages/mercurius/tests/graphql/async-options-existing.module.ts +++ b/packages/mercurius/tests/graphql/async-options-existing.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; -import { ConfigModule } from './config.module'; -import { ConfigService } from './config.service'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; +import { ConfigModule } from './config.module.js'; +import { ConfigService } from './config.service.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql/async-options.module.ts b/packages/mercurius/tests/graphql/async-options.module.ts index f5f8c2f17..57bbaa823 100644 --- a/packages/mercurius/tests/graphql/async-options.module.ts +++ b/packages/mercurius/tests/graphql/async-options.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ @@ -11,7 +11,7 @@ import { CatsModule } from './cats/cats.module'; GraphQLModule.forRootAsync({ driver: MercuriusDriver, useFactory: async () => ({ - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }), }), ], diff --git a/packages/mercurius/tests/graphql/cats/cats-request-scoped.service.ts b/packages/mercurius/tests/graphql/cats/cats-request-scoped.service.ts index e4faf7f76..b3fafbf46 100644 --- a/packages/mercurius/tests/graphql/cats/cats-request-scoped.service.ts +++ b/packages/mercurius/tests/graphql/cats/cats-request-scoped.service.ts @@ -1,5 +1,5 @@ import { Injectable, Scope } from '@nestjs/common'; -import { Cat } from './interfaces/cat.interface'; +import { Cat } from './interfaces/cat.interface.js'; @Injectable({ scope: Scope.REQUEST }) export class CatsRequestScopedService { diff --git a/packages/mercurius/tests/graphql/cats/cats.module.ts b/packages/mercurius/tests/graphql/cats/cats.module.ts index b2fa3f9a9..572fa38c2 100644 --- a/packages/mercurius/tests/graphql/cats/cats.module.ts +++ b/packages/mercurius/tests/graphql/cats/cats.module.ts @@ -1,7 +1,7 @@ import { DynamicModule, Module, Scope } from '@nestjs/common'; -import { CatsRequestScopedService } from './cats-request-scoped.service'; -import { CatsResolvers } from './cats.resolvers'; -import { CatsService } from './cats.service'; +import { CatsRequestScopedService } from './cats-request-scoped.service.js'; +import { CatsResolvers } from './cats.resolvers.js'; +import { CatsService } from './cats.service.js'; @Module({ providers: [CatsService, CatsResolvers], diff --git a/packages/mercurius/tests/graphql/cats/cats.resolvers.ts b/packages/mercurius/tests/graphql/cats/cats.resolvers.ts index 1761d6b1e..48e6972d9 100644 --- a/packages/mercurius/tests/graphql/cats/cats.resolvers.ts +++ b/packages/mercurius/tests/graphql/cats/cats.resolvers.ts @@ -8,9 +8,9 @@ import { Subscription, } from '@nestjs/graphql'; import { PubSub } from 'graphql-subscriptions'; -import { CatsGuard } from './cats.guard'; -import { CatsService } from './cats.service'; -import { Cat } from './interfaces/cat.interface'; +import { CatsGuard } from './cats.guard.js'; +import { CatsService } from './cats.service.js'; +import { Cat } from './interfaces/cat.interface.js'; const pubSub = new PubSub(); diff --git a/packages/mercurius/tests/graphql/cats/cats.service.ts b/packages/mercurius/tests/graphql/cats/cats.service.ts index 54172e4e9..6ad697e4b 100644 --- a/packages/mercurius/tests/graphql/cats/cats.service.ts +++ b/packages/mercurius/tests/graphql/cats/cats.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { Cat } from './interfaces/cat.interface'; +import { Cat } from './interfaces/cat.interface.js'; @Injectable() export class CatsService { diff --git a/packages/mercurius/tests/graphql/common/scalars/date.scalar.ts b/packages/mercurius/tests/graphql/common/scalars/date.scalar.ts index 09f4b8d6a..9a4d6f21f 100644 --- a/packages/mercurius/tests/graphql/common/scalars/date.scalar.ts +++ b/packages/mercurius/tests/graphql/common/scalars/date.scalar.ts @@ -1,5 +1,5 @@ import { Kind } from 'graphql'; -import { Scalar } from '../../../../lib'; +import { Scalar } from '../../../../lib/index.js'; @Scalar('Date') export class DateScalar { diff --git a/packages/mercurius/tests/graphql/config.module.ts b/packages/mercurius/tests/graphql/config.module.ts index eaa505c84..bf41826bb 100644 --- a/packages/mercurius/tests/graphql/config.module.ts +++ b/packages/mercurius/tests/graphql/config.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigService } from './config.service'; +import { ConfigService } from './config.service.js'; @Module({ providers: [ConfigService], diff --git a/packages/mercurius/tests/graphql/config.service.ts b/packages/mercurius/tests/graphql/config.service.ts index 4e5cd9bea..e8eb24c05 100644 --- a/packages/mercurius/tests/graphql/config.service.ts +++ b/packages/mercurius/tests/graphql/config.service.ts @@ -3,13 +3,13 @@ import { join } from 'path'; import { MercuriusDriverConfig, MercuriusDriverConfigFactory, -} from '../../lib/interfaces'; +} from '../../lib/interfaces/index.js'; @Injectable() export class ConfigService implements MercuriusDriverConfigFactory { createGqlOptions(): MercuriusDriverConfig { return { - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], }; } } diff --git a/packages/mercurius/tests/graphql/global-prefix-async-options-class.module.ts b/packages/mercurius/tests/graphql/global-prefix-async-options-class.module.ts index 27b2a8aaa..77bd33574 100644 --- a/packages/mercurius/tests/graphql/global-prefix-async-options-class.module.ts +++ b/packages/mercurius/tests/graphql/global-prefix-async-options-class.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common'; import { GqlOptionsFactory, GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; class ConfigService implements GqlOptionsFactory { createGqlOptions(): MercuriusDriverConfig { return { - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], useGlobalPrefix: true, }; } diff --git a/packages/mercurius/tests/graphql/global-prefix-async-options.module.ts b/packages/mercurius/tests/graphql/global-prefix-async-options.module.ts index 4cfa53969..a39287cd3 100644 --- a/packages/mercurius/tests/graphql/global-prefix-async-options.module.ts +++ b/packages/mercurius/tests/graphql/global-prefix-async-options.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ @@ -11,7 +11,7 @@ import { CatsModule } from './cats/cats.module'; GraphQLModule.forRootAsync({ driver: MercuriusDriver, useFactory: async () => ({ - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], useGlobalPrefix: true, }), }), diff --git a/packages/mercurius/tests/graphql/global-prefix.module.ts b/packages/mercurius/tests/graphql/global-prefix.module.ts index 85255ffdd..32741a912 100644 --- a/packages/mercurius/tests/graphql/global-prefix.module.ts +++ b/packages/mercurius/tests/graphql/global-prefix.module.ts @@ -1,16 +1,16 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriverConfig } from '../../lib'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriverConfig } from '../../lib/index.js'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ CatsModule, GraphQLModule.forRoot({ driver: MercuriusDriver, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], useGlobalPrefix: true, }), ], diff --git a/packages/mercurius/tests/graphql/hello/hello.module.ts b/packages/mercurius/tests/graphql/hello/hello.module.ts index e06c2cf4c..8a5541c18 100644 --- a/packages/mercurius/tests/graphql/hello/hello.module.ts +++ b/packages/mercurius/tests/graphql/hello/hello.module.ts @@ -1,16 +1,16 @@ import { DynamicModule, Inject, Module, Provider, Scope } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriver } from '../../../lib/drivers'; -import { HelloResolver } from './hello.resolver'; -import { HelloService } from './hello.service'; -import { UsersService } from './users/users.service'; +import { MercuriusDriver } from '../../../lib/drivers/index.js'; +import { HelloResolver } from './hello.resolver.js'; +import { HelloService } from './hello.service.js'; +import { UsersService } from './users/users.service.js'; @Module({ imports: [ GraphQLModule.forRoot({ driver: MercuriusDriver, - typePaths: [join(__dirname, '*.graphql')], + typePaths: [join(import.meta.dirname, '*.graphql')], }), ], providers: [ diff --git a/packages/mercurius/tests/graphql/hello/hello.resolver.ts b/packages/mercurius/tests/graphql/hello/hello.resolver.ts index 47bc9b1e8..9b64ed025 100644 --- a/packages/mercurius/tests/graphql/hello/hello.resolver.ts +++ b/packages/mercurius/tests/graphql/hello/hello.resolver.ts @@ -1,9 +1,9 @@ import { UseGuards, UseInterceptors } from '@nestjs/common'; import { Query, Resolver } from '@nestjs/graphql'; -import { Guard } from './guards/request-scoped.guard'; -import { HelloService } from './hello.service'; -import { Interceptor } from './interceptors/logging.interceptor'; -import { UsersService } from './users/users.service'; +import { Guard } from './guards/request-scoped.guard.js'; +import { HelloService } from './hello.service.js'; +import { Interceptor } from './interceptors/logging.interceptor.js'; +import { UsersService } from './users/users.service.js'; @Resolver() export class HelloResolver { diff --git a/packages/mercurius/tests/graphql/hello/users/user-by-id.pipe.ts b/packages/mercurius/tests/graphql/hello/users/user-by-id.pipe.ts index ff5695c11..07f43f38a 100644 --- a/packages/mercurius/tests/graphql/hello/users/user-by-id.pipe.ts +++ b/packages/mercurius/tests/graphql/hello/users/user-by-id.pipe.ts @@ -4,7 +4,7 @@ import { Injectable, PipeTransform, } from '@nestjs/common'; -import { UsersService } from './users.service'; +import { UsersService } from './users.service.js'; @Injectable() export class UserByIdPipe implements PipeTransform { diff --git a/packages/mercurius/tests/graphql/main.ts b/packages/mercurius/tests/graphql/main.ts index 9c61701c1..63c199396 100644 --- a/packages/mercurius/tests/graphql/main.ts +++ b/packages/mercurius/tests/graphql/main.ts @@ -1,6 +1,6 @@ import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; -import { ApplicationModule } from './app.module'; +import { ApplicationModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule, new FastifyAdapter()); diff --git a/packages/mercurius/tests/graphql/sort-auto-schema.module.ts b/packages/mercurius/tests/graphql/sort-auto-schema.module.ts index a1f75b950..47bd02f85 100644 --- a/packages/mercurius/tests/graphql/sort-auto-schema.module.ts +++ b/packages/mercurius/tests/graphql/sort-auto-schema.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriver } from '../../lib/drivers'; -import { DirectionsModule } from '../code-first/directions/directions.module'; -import { RecipesModule } from '../code-first/recipes/recipes.module'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { DirectionsModule } from '../code-first/directions/directions.module.js'; +import { RecipesModule } from '../code-first/recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/graphql/sort-schema.module.ts b/packages/mercurius/tests/graphql/sort-schema.module.ts index 0fa38a81b..39ccad1f7 100644 --- a/packages/mercurius/tests/graphql/sort-schema.module.ts +++ b/packages/mercurius/tests/graphql/sort-schema.module.ts @@ -1,15 +1,15 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; -import { MercuriusDriver } from '../../lib/drivers'; -import { CatsModule } from './cats/cats.module'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { CatsModule } from './cats/cats.module.js'; @Module({ imports: [ CatsModule, GraphQLModule.forRoot({ driver: MercuriusDriver, - typePaths: [join(__dirname, '**', '*.graphql')], + typePaths: [join(import.meta.dirname, '**', '*.graphql')], sortSchema: true, }), ], diff --git a/packages/mercurius/tests/graphql/transform-auto-schema-file.module.ts b/packages/mercurius/tests/graphql/transform-auto-schema-file.module.ts index b45fc3ee9..d7515405e 100644 --- a/packages/mercurius/tests/graphql/transform-auto-schema-file.module.ts +++ b/packages/mercurius/tests/graphql/transform-auto-schema-file.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { GraphQLSchema, lexicographicSortSchema } from 'graphql'; -import { MercuriusDriver } from '../../lib/drivers'; -import { DirectionsModule } from '../code-first/directions/directions.module'; -import { RecipesModule } from '../code-first/recipes/recipes.module'; +import { MercuriusDriver } from '../../lib/drivers/index.js'; +import { DirectionsModule } from '../code-first/directions/directions.module.js'; +import { RecipesModule } from '../code-first/recipes/recipes.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/hooks/base-array/graphql.config.ts b/packages/mercurius/tests/hooks/base-array/graphql.config.ts index c16421ee6..afbb30862 100644 --- a/packages/mercurius/tests/hooks/base-array/graphql.config.ts +++ b/packages/mercurius/tests/hooks/base-array/graphql.config.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { GqlOptionsFactory } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface'; +import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface.js'; export const HOOKS_INVOCATIONS = { preParsing: [0, 0], diff --git a/packages/mercurius/tests/hooks/base-array/hooks.module.ts b/packages/mercurius/tests/hooks/base-array/hooks.module.ts index 64fdc4fa1..7884a4ac2 100644 --- a/packages/mercurius/tests/hooks/base-array/hooks.module.ts +++ b/packages/mercurius/tests/hooks/base-array/hooks.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriver } from '../../../lib/drivers'; -import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface'; -import { CatsModule } from '../cats/cats.module'; -import { GqlConfigService } from './graphql.config'; +import { MercuriusDriver } from '../../../lib/drivers/index.js'; +import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface.js'; +import { CatsModule } from '../cats/cats.module.js'; +import { GqlConfigService } from './graphql.config.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/hooks/base/graphql.config.ts b/packages/mercurius/tests/hooks/base/graphql.config.ts index cd98d9977..464454e70 100644 --- a/packages/mercurius/tests/hooks/base/graphql.config.ts +++ b/packages/mercurius/tests/hooks/base/graphql.config.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { GqlOptionsFactory } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface'; +import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface.js'; export const HOOKS_INVOCATIONS = { preParsing: 0, diff --git a/packages/mercurius/tests/hooks/base/hooks.module.ts b/packages/mercurius/tests/hooks/base/hooks.module.ts index 64fdc4fa1..7884a4ac2 100644 --- a/packages/mercurius/tests/hooks/base/hooks.module.ts +++ b/packages/mercurius/tests/hooks/base/hooks.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriver } from '../../../lib/drivers'; -import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface'; -import { CatsModule } from '../cats/cats.module'; -import { GqlConfigService } from './graphql.config'; +import { MercuriusDriver } from '../../../lib/drivers/index.js'; +import { MercuriusDriverConfig } from '../../../lib/interfaces/mercurius-driver-config.interface.js'; +import { CatsModule } from '../cats/cats.module.js'; +import { GqlConfigService } from './graphql.config.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/hooks/cats/cats.module.ts b/packages/mercurius/tests/hooks/cats/cats.module.ts index 6e36eb45d..753a27458 100644 --- a/packages/mercurius/tests/hooks/cats/cats.module.ts +++ b/packages/mercurius/tests/hooks/cats/cats.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { CatsResolver } from './cats.resolver'; +import { CatsResolver } from './cats.resolver.js'; @Module({ providers: [CatsResolver], diff --git a/packages/mercurius/tests/plugins/code-first-plugin/app.module.ts b/packages/mercurius/tests/plugins/code-first-plugin/app.module.ts index 0da9eee56..b391abe21 100644 --- a/packages/mercurius/tests/plugins/code-first-plugin/app.module.ts +++ b/packages/mercurius/tests/plugins/code-first-plugin/app.module.ts @@ -1,10 +1,10 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../../lib'; -import { MercuriusDriver } from '../../../lib/drivers'; -import { mockPlugin } from '../mocks/mock.plugin'; -import { NEW_PLUGIN_URL } from '../mocks/utils/constants'; -import { DogsModule } from './dogs/dogs.module'; +import { MercuriusDriverConfig } from '../../../lib/index.js'; +import { MercuriusDriver } from '../../../lib/drivers/index.js'; +import { mockPlugin } from '../mocks/mock.plugin.js'; +import { NEW_PLUGIN_URL } from '../mocks/utils/constants.js'; +import { DogsModule } from './dogs/dogs.module.js'; @Module({ imports: [ diff --git a/packages/mercurius/tests/plugins/code-first-plugin/dogs/dogs.module.ts b/packages/mercurius/tests/plugins/code-first-plugin/dogs/dogs.module.ts index f6ba88083..e315bee1e 100644 --- a/packages/mercurius/tests/plugins/code-first-plugin/dogs/dogs.module.ts +++ b/packages/mercurius/tests/plugins/code-first-plugin/dogs/dogs.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { DogsResolver } from './dogs.resolver'; +import { DogsResolver } from './dogs.resolver.js'; @Module({ providers: [DogsResolver], diff --git a/packages/mercurius/tests/plugins/code-first-plugin/main.ts b/packages/mercurius/tests/plugins/code-first-plugin/main.ts index 1db5f27c6..75bb30d7b 100644 --- a/packages/mercurius/tests/plugins/code-first-plugin/main.ts +++ b/packages/mercurius/tests/plugins/code-first-plugin/main.ts @@ -2,7 +2,7 @@ import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter } from '@nestjs/platform-fastify'; import mercurius from 'mercurius'; -import { ApplicationModule } from './app.module'; +import { ApplicationModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule, new FastifyAdapter()); diff --git a/packages/mercurius/tests/plugins/graphql-federation-plugin/gateway/gateway.module.ts b/packages/mercurius/tests/plugins/graphql-federation-plugin/gateway/gateway.module.ts index 65a0d913e..028131b40 100644 --- a/packages/mercurius/tests/plugins/graphql-federation-plugin/gateway/gateway.module.ts +++ b/packages/mercurius/tests/plugins/graphql-federation-plugin/gateway/gateway.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusGatewayDriver } from '../../../../lib/drivers'; -import { mockPlugin } from '../../mocks/mock.plugin'; +import { MercuriusGatewayDriver } from '../../../../lib/drivers/index.js'; +import { mockPlugin } from '../../mocks/mock.plugin.js'; @Module({ imports: [ @@ -9,8 +9,8 @@ import { mockPlugin } from '../../mocks/mock.plugin'; driver: MercuriusGatewayDriver, gateway: { services: [ - { name: 'users', url: 'http://localhost:3011/graphql' }, - { name: 'posts', url: 'http://localhost:3012/graphql' }, + { name: 'users', url: 'http://localhost:3111/graphql' }, + { name: 'posts', url: 'http://localhost:3112/graphql' }, ], }, plugins: [ diff --git a/packages/mercurius/tests/plugins/graphql-federation-plugin/posts-service/federation-posts.module.ts b/packages/mercurius/tests/plugins/graphql-federation-plugin/posts-service/federation-posts.module.ts index d85a24b92..d11c87975 100644 --- a/packages/mercurius/tests/plugins/graphql-federation-plugin/posts-service/federation-posts.module.ts +++ b/packages/mercurius/tests/plugins/graphql-federation-plugin/posts-service/federation-posts.module.ts @@ -4,10 +4,10 @@ import { join } from 'path'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../../lib'; -import { PostsModule } from '../../../graphql-federation/posts-service/posts/posts.module'; -import { upperDirectiveTransformer } from '../../../graphql-federation/posts-service/posts/upper.directive'; -import { mockPlugin } from '../../mocks/mock.plugin'; +} from '../../../../lib/index.js'; +import { PostsModule } from '../../../graphql-federation/posts-service/posts/posts.module.js'; +import { upperDirectiveTransformer } from '../../../graphql-federation/posts-service/posts/upper.directive.js'; +import { mockPlugin } from '../../mocks/mock.plugin.js'; @Module({ imports: [ @@ -15,7 +15,7 @@ import { mockPlugin } from '../../mocks/mock.plugin'; driver: MercuriusFederationDriver, typePaths: [ join( - __dirname, + import.meta.dirname, '../../../graphql-federation/posts-service', '**/*.graphql', ), diff --git a/packages/mercurius/tests/plugins/graphql-federation-plugin/users-service/federation-users.module.ts b/packages/mercurius/tests/plugins/graphql-federation-plugin/users-service/federation-users.module.ts index 04ef75d50..e6fcffca9 100644 --- a/packages/mercurius/tests/plugins/graphql-federation-plugin/users-service/federation-users.module.ts +++ b/packages/mercurius/tests/plugins/graphql-federation-plugin/users-service/federation-users.module.ts @@ -4,10 +4,10 @@ import { join } from 'path'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../../lib'; -import { UsersModule } from '../../../graphql-federation/users-service/users/users.module'; -import { mockPlugin } from '../../mocks/mock.plugin'; -import { NEW_PLUGIN_URL } from '../../mocks/utils/constants'; +} from '../../../../lib/index.js'; +import { UsersModule } from '../../../graphql-federation/users-service/users/users.module.js'; +import { mockPlugin } from '../../mocks/mock.plugin.js'; +import { NEW_PLUGIN_URL } from '../../mocks/utils/constants.js'; @Module({ imports: [ @@ -15,7 +15,7 @@ import { NEW_PLUGIN_URL } from '../../mocks/utils/constants'; driver: MercuriusFederationDriver, typePaths: [ join( - __dirname, + import.meta.dirname, '../../../graphql-federation/users-service', '**/*.graphql', ), diff --git a/packages/mercurius/tests/plugins/mocks/mock.plugin.ts b/packages/mercurius/tests/plugins/mocks/mock.plugin.ts index ae234a48a..5806d6343 100644 --- a/packages/mercurius/tests/plugins/mocks/mock.plugin.ts +++ b/packages/mercurius/tests/plugins/mocks/mock.plugin.ts @@ -1,7 +1,7 @@ import { FastifyInstance } from 'fastify'; -import { PluginOptions } from './interfaces/plugin-options.interface'; -import { BASE_PLUGIN_URL } from './utils/constants'; -import { pluginResponse } from './utils/plugin-response'; +import { PluginOptions } from './interfaces/plugin-options.interface.js'; +import { BASE_PLUGIN_URL } from './utils/constants.js'; +import { pluginResponse } from './utils/plugin-response.js'; export async function mockPlugin( fastify: FastifyInstance, diff --git a/packages/mercurius/tests/plugins/mocks/utils/plugin-response.ts b/packages/mercurius/tests/plugins/mocks/utils/plugin-response.ts index a698f1b71..0bdfe90fd 100644 --- a/packages/mercurius/tests/plugins/mocks/utils/plugin-response.ts +++ b/packages/mercurius/tests/plugins/mocks/utils/plugin-response.ts @@ -1,4 +1,4 @@ -import { PluginResponse } from '../interfaces/plugin-response.interface'; +import { PluginResponse } from '../interfaces/plugin-response.interface.js'; export function pluginResponse(url: string): PluginResponse { return { diff --git a/packages/mercurius/tests/subscriptions-federation/app/app.module.ts b/packages/mercurius/tests/subscriptions-federation/app/app.module.ts index 1d235f81b..1b0ed615c 100644 --- a/packages/mercurius/tests/subscriptions-federation/app/app.module.ts +++ b/packages/mercurius/tests/subscriptions-federation/app/app.module.ts @@ -1,11 +1,11 @@ import { Module } from '@nestjs/common'; -import { DynamicModule } from '@nestjs/common/interfaces'; +import { DynamicModule } from '@nestjs/common/interfaces/index.js'; import { GraphQLModule } from '@nestjs/graphql'; import { MercuriusFederationDriver, MercuriusFederationDriverConfig, -} from '../../../lib'; -import { NotificationModule } from './notification.module'; +} from '../../../lib/index.js'; +import { NotificationModule } from './notification.module.js'; export type AppModuleConfig = { context?: MercuriusFederationDriverConfig['context']; diff --git a/packages/mercurius/tests/subscriptions-federation/app/notification.module.ts b/packages/mercurius/tests/subscriptions-federation/app/notification.module.ts index d4e9cb205..d74a50642 100644 --- a/packages/mercurius/tests/subscriptions-federation/app/notification.module.ts +++ b/packages/mercurius/tests/subscriptions-federation/app/notification.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { NotificationResolver } from './notification.resolver'; +import { NotificationResolver } from './notification.resolver.js'; @Module({ providers: [NotificationResolver], diff --git a/packages/mercurius/tests/subscriptions-federation/app/notification.resolver.ts b/packages/mercurius/tests/subscriptions-federation/app/notification.resolver.ts index 944850875..3f2f7822d 100644 --- a/packages/mercurius/tests/subscriptions-federation/app/notification.resolver.ts +++ b/packages/mercurius/tests/subscriptions-federation/app/notification.resolver.ts @@ -1,8 +1,8 @@ import { Logger, UseGuards } from '@nestjs/common'; import { Args, Context, Query, Resolver, Subscription } from '@nestjs/graphql'; import { PubSub } from 'mercurius'; -import { AuthGuard } from './auth.guard'; -import { Notification } from './notification'; +import { AuthGuard } from './auth.guard.js'; +import { Notification } from './notification.js'; @Resolver(() => Notification) export class NotificationResolver { diff --git a/packages/mercurius/tests/subscriptions-federation/subscriptions.spec.ts b/packages/mercurius/tests/subscriptions-federation/subscriptions.spec.ts index 5615f1823..4a5635a19 100644 --- a/packages/mercurius/tests/subscriptions-federation/subscriptions.spec.ts +++ b/packages/mercurius/tests/subscriptions-federation/subscriptions.spec.ts @@ -4,7 +4,7 @@ import { Test } from '@nestjs/testing'; import { gql } from 'graphql-tag'; import { createMercuriusTestClient } from 'mercurius-integration-testing'; import { EventEmitter } from 'stream'; -import { AppModule } from './app/app.module'; +import { AppModule } from './app/app.module.js'; class CustomPubSub { emitter: EventEmitter; @@ -78,9 +78,7 @@ describe('Subscriptions', () => { await app.listen(0); }); - // TODO: After merging this PR https://github.com/mercurius-js/mercurius/pull/1105 - // errors started being serialized as [object Object] instead of the actual error message - it.skip('should receive error on subscription if guard fails', async () => { + it('should receive error on subscription if guard fails', async () => { await new Promise((resolve, reject) => { const testClient = createMercuriusTestClient( app.getHttpAdapter().getInstance(), @@ -103,7 +101,8 @@ describe('Subscriptions', () => { }, onData(response) { try { - expect(response.errors![0].message).toEqual('Forbidden resource'); + expect(response.errors).toBeDefined(); + expect(response.errors).toHaveLength(1); resolve(); } catch (e) { reject(e); diff --git a/packages/mercurius/tests/subscriptions/app/app.module.ts b/packages/mercurius/tests/subscriptions/app/app.module.ts index 5ce0635fd..cc8d77ff4 100644 --- a/packages/mercurius/tests/subscriptions/app/app.module.ts +++ b/packages/mercurius/tests/subscriptions/app/app.module.ts @@ -1,9 +1,9 @@ import { LoggerService, Module } from '@nestjs/common'; -import { DynamicModule } from '@nestjs/common/interfaces'; +import { DynamicModule } from '@nestjs/common/interfaces/index.js'; import { GraphQLModule } from '@nestjs/graphql'; -import { MercuriusDriverConfig } from '../../../lib'; -import { MercuriusDriver } from '../../../lib/drivers'; -import { NotificationModule } from './notification.module'; +import { MercuriusDriverConfig } from '../../../lib/index.js'; +import { MercuriusDriver } from '../../../lib/drivers/index.js'; +import { NotificationModule } from './notification.module.js'; export type AppModuleConfig = { context?: MercuriusDriverConfig['context']; diff --git a/packages/mercurius/tests/subscriptions/app/notification.module.ts b/packages/mercurius/tests/subscriptions/app/notification.module.ts index d4e9cb205..d74a50642 100644 --- a/packages/mercurius/tests/subscriptions/app/notification.module.ts +++ b/packages/mercurius/tests/subscriptions/app/notification.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { NotificationResolver } from './notification.resolver'; +import { NotificationResolver } from './notification.resolver.js'; @Module({ providers: [NotificationResolver], diff --git a/packages/mercurius/tests/subscriptions/app/notification.resolver.ts b/packages/mercurius/tests/subscriptions/app/notification.resolver.ts index 944850875..3f2f7822d 100644 --- a/packages/mercurius/tests/subscriptions/app/notification.resolver.ts +++ b/packages/mercurius/tests/subscriptions/app/notification.resolver.ts @@ -1,8 +1,8 @@ import { Logger, UseGuards } from '@nestjs/common'; import { Args, Context, Query, Resolver, Subscription } from '@nestjs/graphql'; import { PubSub } from 'mercurius'; -import { AuthGuard } from './auth.guard'; -import { Notification } from './notification'; +import { AuthGuard } from './auth.guard.js'; +import { Notification } from './notification.js'; @Resolver(() => Notification) export class NotificationResolver { diff --git a/packages/mercurius/tests/subscriptions/subscriptions.spec.ts b/packages/mercurius/tests/subscriptions/subscriptions.spec.ts index 30ed8b5de..25ae5a940 100644 --- a/packages/mercurius/tests/subscriptions/subscriptions.spec.ts +++ b/packages/mercurius/tests/subscriptions/subscriptions.spec.ts @@ -4,8 +4,8 @@ import { Test } from '@nestjs/testing'; import { gql } from 'graphql-tag'; import { createMercuriusTestClient } from 'mercurius-integration-testing'; import { EventEmitter } from 'stream'; -import { MockLogger } from '../hooks/mocks/logger.mock'; -import { AppModule } from './app/app.module'; +import { MockLogger } from '../hooks/mocks/logger.mock.js'; +import { AppModule } from './app/app.module.js'; class CustomPubSub { emitter: EventEmitter; @@ -80,9 +80,7 @@ describe('Subscriptions', () => { await app.listen(0); }); - // TODO: After merging this PR https://github.com/mercurius-js/mercurius/pull/1105 - // errors started being serialized as [object Object] instead of the actual error message - it.skip('should receive error on subscription if guard fails', async () => { + it('should receive error on subscription if guard fails', async () => { await new Promise((resolve, reject) => { const testClient = createMercuriusTestClient( app.getHttpAdapter().getInstance(), @@ -105,7 +103,8 @@ describe('Subscriptions', () => { }, onData(response) { try { - expect(response.errors[0].message).toEqual('Forbidden resource'); + expect(response.errors).toBeDefined(); + expect(response.errors).toHaveLength(1); resolve(); } catch (e) { reject(e); diff --git a/packages/mercurius/tsconfig.build.json b/packages/mercurius/tsconfig.build.json index 594b6b606..d39c18d5e 100644 --- a/packages/mercurius/tsconfig.build.json +++ b/packages/mercurius/tsconfig.build.json @@ -3,6 +3,8 @@ "compilerOptions": { "outDir": "./dist", "rootDir": "./lib", + "module": "NodeNext", + "moduleResolution": "NodeNext", "paths": { "@nestjs/graphql": ["../graphql/lib"], "@nestjs/graphql/*": ["../graphql/lib/*"], diff --git a/packages/mercurius/tsconfig.spec.json b/packages/mercurius/tsconfig.spec.json index 4bc2bd57f..d0447a569 100644 --- a/packages/mercurius/tsconfig.spec.json +++ b/packages/mercurius/tsconfig.spec.json @@ -1,6 +1,8 @@ { "extends": "./tsconfig.json", "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "./dist/tests", "types": ["vitest/globals", "node"], "rootDir": ".", diff --git a/packages/mercurius/vitest.config.mts b/packages/mercurius/vitest.config.mts index 9513cd71b..a3df0a389 100644 --- a/packages/mercurius/vitest.config.mts +++ b/packages/mercurius/vitest.config.mts @@ -6,12 +6,12 @@ export default defineConfig({ alias: [ { find: /^@nestjs\/graphql(\/.*)?$/, - replacement: path.resolve(__dirname, '../graphql/lib') + '$1', + replacement: path.resolve(import.meta.dirname, '../graphql/lib') + '$1', }, { find: 'graphql', replacement: path.resolve( - __dirname, + import.meta.dirname, '../../node_modules/graphql/index.js', ), }, diff --git a/yarn.lock b/yarn.lock index d1999db67..c4b85eab5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,13 +129,6 @@ "@apollo/utils.keyvaluecache" "^4.0.0" "@apollo/utils.logger" "^3.0.0" -"@apollo/server-plugin-landing-page-graphql-playground@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@apollo/server-plugin-landing-page-graphql-playground/-/server-plugin-landing-page-graphql-playground-4.0.1.tgz#1d3c98fe93e1bc3c9be3470e220b9578360d175e" - integrity sha512-tWhQzD7DtiTO/wfbGvasryz7eJSuEh9XJHgRTMZI7+Wu/omylG5gH6K6ksg1Vccg8/Xuglfi2f1M5Nm/IlBBGw== - dependencies: - "@apollographql/graphql-playground-html" "1.6.29" - "@apollo/server-plugin-response-cache@5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@apollo/server-plugin-response-cache/-/server-plugin-response-cache-5.0.0.tgz#4a72178d1adbd35e72bb4d288dba44a2dac1da9b" @@ -300,13 +293,6 @@ resolved "https://registry.yarnpkg.com/@apollo/utils.withrequired/-/utils.withrequired-3.0.0.tgz#1342bab438528d09c41e43ce33cb976fa9c99e52" integrity sha512-aaxeavfJ+RHboh7c2ofO5HHtQobGX4AgUujXP4CXpREHp9fQ9jPi6K9T1jrAKe7HIipoP0OJ1gd6JamSkFIpvA== -"@apollographql/graphql-playground-html@1.6.29": - version "1.6.29" - resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#a7a646614a255f62e10dcf64a7f68ead41dec453" - integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== - dependencies: - xss "^1.0.8" - "@as-integrations/express5@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@as-integrations/express5/-/express5-1.1.2.tgz#5c5b207b8e457bbd546e9b20898d0b1f4a478480" @@ -1167,10 +1153,10 @@ dependencies: "@tybys/wasm-util" "^0.10.1" -"@nestjs/common@11.1.19": - version "11.1.19" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-11.1.19.tgz#50ba93ae45ebaeda6163554b8e2ecec545a25c92" - integrity sha512-qeiTt2tv+e5QyDKqG8HlVZb2wx64FEaSGFJouqTSRs+kG44iTfl3xlz1XqVped+rihx4hmjWgL5gkhtdK3E6+Q== +"@nestjs/common@next": + version "12.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-12.0.0-alpha.4.tgz#b347756e336f33701e9a2a7d10be20332ddf72a7" + integrity sha512-9ePyeB1QS5Q2YTXwQvWb/374BjQfIv6l9e3S0BuFeJ2+1v6P+sawuQbN3z2q81KUyydXun1XAQWccOPtxSByOg== dependencies: uid "2.0.2" file-type "21.3.4" @@ -1178,10 +1164,10 @@ load-esm "1.0.3" tslib "2.8.1" -"@nestjs/core@11.1.19": - version "11.1.19" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-11.1.19.tgz#d724f1afc0caac29e005464f0f659425fc80235b" - integrity sha512-6nJkWa2efrYi+XlU686J9y5L7OvxpLVjT0T/sxRKE7Jvpffiihelup4WSvLvRhdHDjj/5SuoWEwqReXAaaeHmw== +"@nestjs/core@next": + version "12.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-12.0.0-alpha.4.tgz#011d1b5a13a5c793e71f3c78796229427452dec5" + integrity sha512-bgUAfKfFuqmFMxN/RDhU9RGfVn9tIImo9ixjXwRMSTY1RS7DofYodwCVlhgbq3NnrrhFzxTfGDVJ/I/IBB+idQ== dependencies: uid "2.0.2" "@nuxt/opencollective" "0.4.1" @@ -1195,10 +1181,10 @@ resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-2.1.1.tgz#9530ac3250ab433ba6ef831e9dd5d483f5fc8144" integrity sha512-SCCoMEJ6jdeI5h/N+KCVF1+pmg/hmEkNA5nHTS8Gvww7T/LCl4o1gFLinw2iQ60w7slFkszHcGLKGdazVI4F8A== -"@nestjs/platform-express@11.1.19": - version "11.1.19" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.19.tgz#e55f5078396b2285344f95f2b530b648e844cd4c" - integrity sha512-Vpdv8jyCQdThfoTx+UTn+DRYr6H6X02YUqcpZ3qP6G3ZUwtVp7eS+hoQPGd4UuCnlnFG8Wqr2J9bGEzQdi1rIg== +"@nestjs/platform-express@next": + version "12.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-12.0.0-alpha.4.tgz#406bf9f58924ba4d786b9260a0873c38f96dc4af" + integrity sha512-k2ApPfdXB2Pg3dCVUqtF5r0qwS7lA51zXkaZR7T/7/ucTJup41cdTWietEinwjH+7YtYwzW26AhsNjal9QwhHA== dependencies: cors "2.8.6" express "5.2.1" @@ -1206,26 +1192,26 @@ path-to-regexp "8.4.2" tslib "2.8.1" -"@nestjs/platform-fastify@11.1.19": - version "11.1.19" - resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-11.1.19.tgz#2796fcdec8f1dfc4a1b53a9a061834168675653d" - integrity sha512-PdldJPw+xu8JM7VNE2FY+ty+qoxDMW7326h/z0MtfZvKj84FE6zuqpcSXen1CYjtyP8og+x/5XrJbKKKDNabtQ== +"@nestjs/platform-fastify@next": + version "12.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@nestjs/platform-fastify/-/platform-fastify-12.0.0-alpha.4.tgz#21043e364452f01df94be5eb3a9a964215fe499d" + integrity sha512-lgpBiB7kc5yqPnM+7WbdnsTNjXgSWlUA7JqCyabZbJMNjg6UkvvYswCsncA9tMGhV8RFjPwjQlhVLDEwFTcISg== dependencies: "@fastify/cors" "11.2.0" "@fastify/formbody" "8.0.2" fast-querystring "1.1.2" - fastify "5.8.4" + fastify "5.8.5" fastify-plugin "5.1.0" - find-my-way "9.5.0" + find-my-way "9.6.0" light-my-request "6.6.0" path-to-regexp "8.4.2" reusify "1.1.0" tslib "2.8.1" -"@nestjs/testing@11.1.19": - version "11.1.19" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-11.1.19.tgz#1bb72dbeb4de6fee23d3f1efe310970e5c9b0cb7" - integrity sha512-/UFNWXvPEdu4v4DlC5oWLbGKmD27LehLK06b8oLzs6D6lf4vAQTdST8LRAXBadyMUQnVEQWMuBo3CtAVtlfXtQ== +"@nestjs/testing@next": + version "12.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-12.0.0-alpha.4.tgz#b30b742ec4e2d25c0c2562c047549d5087b8cf54" + integrity sha512-2Tf1DGeKY9FDX+awioSlYTTuL6PHw/UwqIwq7/nHmaEYxo4Rm5WKdFiZ1m9MsmxuMFFxJloDr8ngbtmVt1g44A== dependencies: tslib "2.8.1" @@ -2577,15 +2563,7 @@ apollo-client@2.6.10: tslib "^1.10.0" zen-observable "^0.8.0" -apollo-link-ws@1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.20.tgz#dfad44121f8445c6d7b7f8101a1b24813ba008ed" - integrity sha512-mjSFPlQxmoLArpHBeUb2Xj+2HDYeTaJqFGOqQ+I8NVJxgL9lJe84PDWcPah/yMLv3rB7QgBDSuZ0xoRFBPlySw== - dependencies: - apollo-link "^1.2.14" - tslib "^1.9.3" - -apollo-link@^1.0.0, apollo-link@^1.2.14: +apollo-link@^1.0.0: version "1.2.14" resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== @@ -2708,11 +2686,6 @@ axios@^1.12.0: form-data "^4.0.5" proxy-from-env "^2.1.0" -backo2@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3248,11 +3221,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - common-ancestor-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" @@ -3512,11 +3480,6 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - dargs@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" @@ -3890,6 +3853,11 @@ es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" +es-toolkit@1.39.3: + version "1.39.3" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.39.3.tgz#934b2cab9578c496dcbc0305cae687258cb14aee" + integrity sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww== + es-toolkit@^1.46.0: version "1.46.1" resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.46.1.tgz#38ca27191a98a867fc544b81cf1477a68947fb06" @@ -3958,11 +3926,6 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -4174,27 +4137,6 @@ fastify-plugin@^5.0.0: resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-5.0.1.tgz#82d44e6fe34d1420bb5a4f7bee434d501e41939f" integrity sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ== -fastify@5.8.4: - version "5.8.4" - resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.8.4.tgz#9ad9ebeea57980cf8722b5c44ca27ea9255cf2d5" - integrity sha512-sa42J1xylbBAYUWALSBoyXKPDUvM3OoNOibIefA+Oha57FryXKKCZarA1iDntOCWp3O35voZLuDg2mdODXtPzQ== - dependencies: - "@fastify/ajv-compiler" "^4.0.5" - "@fastify/error" "^4.0.0" - "@fastify/fast-json-stringify-compiler" "^5.0.0" - "@fastify/proxy-addr" "^5.0.0" - abstract-logging "^2.0.1" - avvio "^9.0.0" - fast-json-stringify "^6.0.0" - find-my-way "^9.0.0" - light-my-request "^6.0.0" - pino "^9.14.0 || ^10.1.0" - process-warning "^5.0.0" - rfdc "^1.3.1" - secure-json-parse "^4.0.0" - semver "^7.6.0" - toad-cache "^3.7.0" - fastify@5.8.5: version "5.8.5" resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.8.5.tgz#c452224295e0ca550bcd0efc3f7d3e90e9c11955" @@ -4292,10 +4234,10 @@ finalhandler@^2.1.0: parseurl "^1.3.3" statuses "^2.0.1" -find-my-way@9.5.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-9.5.0.tgz#3e6819bf4310b5293f490c032e70be0b506d0dc8" - integrity sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ== +find-my-way@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-9.6.0.tgz#d8e78d98d02ba749c86526edaca780c094073313" + integrity sha512-Zf4Xve4RymLl7NgaavNebZ01joJ8MfVerOG43wy7SHLO+r+K0C6d/SE0BiR7AV5V1VOCFlOP7ecdo+I4qmiHrQ== dependencies: fast-deep-equal "^3.1.3" fast-querystring "^1.0.0" @@ -5408,7 +5350,7 @@ issue-parser@7.0.1: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" -iterall@1.3.0, iterall@^1.2.1: +iterall@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== @@ -5927,11 +5869,6 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== -lodash@4.18.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" - integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== - log-symbols@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -8468,16 +8405,7 @@ string-argv@^0.3.2: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8534,14 +8462,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -8591,17 +8512,6 @@ strtok3@^10.3.4: dependencies: "@tokenizer/token" "^0.3.0" -subscriptions-transport-ws@0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.0.tgz#baf88f050cba51d52afe781de5e81b3c31f89883" - integrity sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ== - dependencies: - backo2 "^1.0.2" - eventemitter3 "^3.1.0" - iterall "^1.2.1" - symbol-observable "^1.0.4" - ws "^5.2.0 || ^6.0.0 || ^7.0.0" - superagent@^10.3.0: version "10.3.0" resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.3.0.tgz#ff1e39e7976b63f8084291d65f5bfbbbbd156989" @@ -8638,7 +8548,7 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-observable@^1.0.2, symbol-observable@^1.0.4: +symbol-observable@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -9278,7 +9188,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -9305,15 +9215,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -9358,11 +9259,6 @@ ws@8.20.1: resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.1.tgz#91a9ae2b312ccf98e0a85ec499b48cef45ab0ddb" integrity sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w== -"ws@^5.2.0 || ^6.0.0 || ^7.0.0": - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - ws@^8.12.1, ws@^8.16.0, ws@^8.2.2: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" @@ -9381,14 +9277,6 @@ wsl-utils@^0.3.0: is-wsl "^3.1.0" powershell-utils "^0.1.0" -xss@^1.0.8: - version "1.0.15" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" - integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"