Skip to content

Commit b8904ed

Browse files
authored
Merge pull request #175 from wravery/next
More progress on 4.0 tasks
2 parents d6c7aef + 8d1a60f commit b8904ed

File tree

142 files changed

+7486
-4349
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

142 files changed

+7486
-4349
lines changed

CMakeLists.txt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.8.2)
4+
cmake_minimum_required(VERSION 3.15)
55

6-
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15")
7-
# Enable CMAKE_MSVC_RUNTIME_LIBRARY on Windows.
8-
set(MSVC_MATCH_VCPKG_TRIPLET ON)
9-
cmake_policy(SET CMP0091 NEW)
10-
endif()
6+
# Enable CMAKE_MSVC_RUNTIME_LIBRARY on Windows: https://cmake.org/cmake/help/latest/policy/CMP0091.html
7+
cmake_policy(SET CMP0091 NEW)
118

129
# Default to the last updated version from version.txt.
1310
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.txt" VERSION_FILE)
@@ -43,7 +40,7 @@ option(BUILD_SHARED_LIBS "Build shared libraries instead of static libs" OFF)
4340
if(VCPKG_TARGET_TRIPLET)
4441
message(STATUS "Using ${VCPKG_TARGET_TRIPLET} triplet with vcpkg")
4542

46-
if(MSVC AND MSVC_MATCH_VCPKG_TRIPLET)
43+
if(MSVC)
4744
# Match the MSVC runtime if we're using VCPKG with static libraries.
4845
if(VCPKG_TARGET_TRIPLET MATCHES [[^.+-static$]])
4946
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

cmake/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.8.2)
4+
cmake_minimum_required(VERSION 3.15)
55

66
# Enable version checks in find_package
77
include(CMakePackageConfigHelpers)

cmake/cppgraphqlgen-functions.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function(update_graphql_schema_files SCHEMA_TARGET SCHEMA_GRAPHQL SCHEMA_PREFIX
3333
"-DSCHEMA_PREFIX=${SCHEMA_PREFIX}" "-DSCHEMA_NAMESPACE=${SCHEMA_NAMESPACE}"
3434
"-DADDITIONAL_SCHEMAGEN_ARGS=${ADDITIONAL_SCHEMAGEN_ARGS}"
3535
-P ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT}
36-
DEPENDS ${SCHEMA_GRAPHQL} ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT}
36+
DEPENDS ${SCHEMA_GRAPHQL} ${GRAPHQL_UPDATE_SCHEMA_FILES_SCRIPT} cppgraphqlgen::schemagen
3737
COMMENT "Generating ${SCHEMA_TARGET} GraphQL schema"
3838
VERBATIM)
3939
endfunction()
@@ -84,7 +84,7 @@ function(update_graphql_client_files CLIENT_TARGET SCHEMA_GRAPHQL REQUEST_GRAPHQ
8484
"-DCLIENT_PREFIX=${CLIENT_PREFIX}" "-DCLIENT_NAMESPACE=${CLIENT_NAMESPACE}"
8585
"-DADDITIONAL_CLIENTGEN_ARGS=${ADDITIONAL_CLIENTGEN_ARGS}"
8686
-P ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT}
87-
DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT}
87+
DEPENDS ${SCHEMA_GRAPHQL} ${REQUEST_GRAPHQL} ${GRAPHQL_UPDATE_CLIENT_FILES_SCRIPT} cppgraphqlgen::clientgen
8888
COMMENT "Generating ${CLIENT_TARGET} client"
8989
VERBATIM)
9090
endfunction()

cmake/cppgraphqlgen-update-client-files.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ if(NOT FILE_NAMES)
4141
message(FATAL_ERROR "Schema generation failed!")
4242
endif()
4343

44-
# Remove stale files in the source directory
44+
# Support if() IN_LIST operator: https://cmake.org/cmake/help/latest/policy/CMP0057.html
4545
cmake_policy(SET CMP0057 NEW)
46+
47+
# Remove stale files in the source directory
4648
file(GLOB OLD_FILES ${CLIENT_SOURCE_DIR}/*.h ${CLIENT_SOURCE_DIR}/*.cpp)
4749
foreach(OLD_FILE ${OLD_FILES})
4850
get_filename_component(OLD_FILE ${OLD_FILE} NAME)

cmake/cppgraphqlgen-update-schema-files.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ if(NOT FILE_NAMES)
4040
message(FATAL_ERROR "Schema generation failed!")
4141
endif()
4242

43-
# Remove stale files in the source directory
43+
# Support if() IN_LIST operator: https://cmake.org/cmake/help/latest/policy/CMP0057.html
4444
cmake_policy(SET CMP0057 NEW)
45+
46+
# Remove stale files in the source directory
4547
file(GLOB OLD_FILES ${SCHEMA_SOURCE_DIR}/*.h ${SCHEMA_SOURCE_DIR}/*.cpp)
4648
foreach(OLD_FILE ${OLD_FILES})
4749
get_filename_component(OLD_FILE ${OLD_FILE} NAME)

include/SchemaGenerator.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,25 @@ class Generator
4242
std::string getSourcePath() const noexcept;
4343

4444
bool outputHeader() const noexcept;
45-
void outputObjectStubs(
46-
std::ostream& headerFile, const ObjectType& objectType) const;
45+
void outputInterfaceDeclaration(std::ostream& headerFile, std::string_view cppType) const;
46+
void outputObjectImplements(std::ostream& headerFile, const ObjectType& objectType) const;
47+
void outputObjectStubs(std::ostream& headerFile, const ObjectType& objectType) const;
4748
void outputObjectDeclaration(
4849
std::ostream& headerFile, const ObjectType& objectType, bool isQueryType) const;
4950
std::string getFieldDeclaration(const InputField& inputField) const noexcept;
5051
std::string getFieldDeclaration(const OutputField& outputField) const noexcept;
5152
std::string getResolverDeclaration(const OutputField& outputField) const noexcept;
5253

5354
bool outputSource() const noexcept;
55+
void outputInterfaceImplementation(std::ostream& sourceFile, std::string_view cppType) const;
56+
void outputInterfaceIntrospection(
57+
std::ostream& sourceFile, const InterfaceType& interfaceType) const;
58+
void outputUnionIntrospection(std::ostream& sourceFile, const UnionType& unionType) const;
5459
void outputObjectImplementation(
5560
std::ostream& sourceFile, const ObjectType& objectType, bool isQueryType) const;
5661
void outputObjectIntrospection(std::ostream& sourceFile, const ObjectType& objectType) const;
62+
void outputIntrospectionFields(
63+
std::ostream& sourceFile, std::string_view cppType, const OutputFieldList& fields) const;
5764
std::string getArgumentDefaultValue(
5865
size_t level, const response::Value& defaultValue) const noexcept;
5966
std::string getArgumentDeclaration(const InputField& argument, const char* prefixToken,

include/graphqlservice/GraphQLService.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ using TypeNames = internal::string_view_set;
612612
class Object : public std::enable_shared_from_this<Object>
613613
{
614614
public:
615-
GRAPHQLSERVICE_EXPORT explicit Object(TypeNames&& typeNames, ResolverMap&& resolvers);
615+
GRAPHQLSERVICE_EXPORT explicit Object(TypeNames&& typeNames, ResolverMap&& resolvers) noexcept;
616616
GRAPHQLSERVICE_EXPORT virtual ~Object() = default;
617617

618618
GRAPHQLSERVICE_EXPORT AwaitableResolver resolve(const SelectionSetParams& selectionSetParams,
@@ -631,7 +631,7 @@ class Object : public std::enable_shared_from_this<Object>
631631
GRAPHQLSERVICE_EXPORT virtual void beginSelectionSet(const SelectionSetParams& params) const;
632632
GRAPHQLSERVICE_EXPORT virtual void endSelectionSet(const SelectionSetParams& params) const;
633633

634-
std::mutex _resolverMutex {};
634+
mutable std::mutex _resolverMutex {};
635635

636636
private:
637637
TypeNames _typeNames;

include/graphqlservice/introspection/IntrospectionSchema.h

Lines changed: 64 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,14 @@ enum class DirectiveLocation
6767
INPUT_FIELD_DEFINITION
6868
};
6969

70-
namespace object {
71-
7270
class Schema;
7371
class Type;
7472
class Field;
7573
class InputValue;
7674
class EnumValue;
7775
class Directive;
7876

79-
} // namespace object
77+
namespace object {
8078

8179
class Schema;
8280
class Type;
@@ -85,19 +83,17 @@ class InputValue;
8583
class EnumValue;
8684
class Directive;
8785

88-
namespace object {
89-
9086
class Schema
9187
: public service::Object
9288
{
9389
private:
94-
service::AwaitableResolver resolveTypes(service::ResolverParams&& params);
95-
service::AwaitableResolver resolveQueryType(service::ResolverParams&& params);
96-
service::AwaitableResolver resolveMutationType(service::ResolverParams&& params);
97-
service::AwaitableResolver resolveSubscriptionType(service::ResolverParams&& params);
98-
service::AwaitableResolver resolveDirectives(service::ResolverParams&& params);
90+
service::AwaitableResolver resolveTypes(service::ResolverParams&& params) const;
91+
service::AwaitableResolver resolveQueryType(service::ResolverParams&& params) const;
92+
service::AwaitableResolver resolveMutationType(service::ResolverParams&& params) const;
93+
service::AwaitableResolver resolveSubscriptionType(service::ResolverParams&& params) const;
94+
service::AwaitableResolver resolveDirectives(service::ResolverParams&& params) const;
9995

100-
service::AwaitableResolver resolve_typename(service::ResolverParams&& params);
96+
service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
10197

10298
struct Concept
10399
{
@@ -150,26 +146,29 @@ class Schema
150146

151147
const std::unique_ptr<Concept> _pimpl;
152148

149+
service::TypeNames getTypeNames() const noexcept;
150+
service::ResolverMap getResolvers() const noexcept;
151+
153152
public:
154-
GRAPHQLINTROSPECTION_EXPORT Schema(std::shared_ptr<introspection::Schema> pimpl);
153+
GRAPHQLINTROSPECTION_EXPORT Schema(std::shared_ptr<introspection::Schema> pimpl) noexcept;
155154
GRAPHQLINTROSPECTION_EXPORT ~Schema();
156155
};
157156

158157
class Type
159158
: public service::Object
160159
{
161160
private:
162-
service::AwaitableResolver resolveKind(service::ResolverParams&& params);
163-
service::AwaitableResolver resolveName(service::ResolverParams&& params);
164-
service::AwaitableResolver resolveDescription(service::ResolverParams&& params);
165-
service::AwaitableResolver resolveFields(service::ResolverParams&& params);
166-
service::AwaitableResolver resolveInterfaces(service::ResolverParams&& params);
167-
service::AwaitableResolver resolvePossibleTypes(service::ResolverParams&& params);
168-
service::AwaitableResolver resolveEnumValues(service::ResolverParams&& params);
169-
service::AwaitableResolver resolveInputFields(service::ResolverParams&& params);
170-
service::AwaitableResolver resolveOfType(service::ResolverParams&& params);
171-
172-
service::AwaitableResolver resolve_typename(service::ResolverParams&& params);
161+
service::AwaitableResolver resolveKind(service::ResolverParams&& params) const;
162+
service::AwaitableResolver resolveName(service::ResolverParams&& params) const;
163+
service::AwaitableResolver resolveDescription(service::ResolverParams&& params) const;
164+
service::AwaitableResolver resolveFields(service::ResolverParams&& params) const;
165+
service::AwaitableResolver resolveInterfaces(service::ResolverParams&& params) const;
166+
service::AwaitableResolver resolvePossibleTypes(service::ResolverParams&& params) const;
167+
service::AwaitableResolver resolveEnumValues(service::ResolverParams&& params) const;
168+
service::AwaitableResolver resolveInputFields(service::ResolverParams&& params) const;
169+
service::AwaitableResolver resolveOfType(service::ResolverParams&& params) const;
170+
171+
service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
173172

174173
struct Concept
175174
{
@@ -246,23 +245,26 @@ class Type
246245

247246
const std::unique_ptr<Concept> _pimpl;
248247

248+
service::TypeNames getTypeNames() const noexcept;
249+
service::ResolverMap getResolvers() const noexcept;
250+
249251
public:
250-
GRAPHQLINTROSPECTION_EXPORT Type(std::shared_ptr<introspection::Type> pimpl);
252+
GRAPHQLINTROSPECTION_EXPORT Type(std::shared_ptr<introspection::Type> pimpl) noexcept;
251253
GRAPHQLINTROSPECTION_EXPORT ~Type();
252254
};
253255

254256
class Field
255257
: public service::Object
256258
{
257259
private:
258-
service::AwaitableResolver resolveName(service::ResolverParams&& params);
259-
service::AwaitableResolver resolveDescription(service::ResolverParams&& params);
260-
service::AwaitableResolver resolveArgs(service::ResolverParams&& params);
261-
service::AwaitableResolver resolveType(service::ResolverParams&& params);
262-
service::AwaitableResolver resolveIsDeprecated(service::ResolverParams&& params);
263-
service::AwaitableResolver resolveDeprecationReason(service::ResolverParams&& params);
260+
service::AwaitableResolver resolveName(service::ResolverParams&& params) const;
261+
service::AwaitableResolver resolveDescription(service::ResolverParams&& params) const;
262+
service::AwaitableResolver resolveArgs(service::ResolverParams&& params) const;
263+
service::AwaitableResolver resolveType(service::ResolverParams&& params) const;
264+
service::AwaitableResolver resolveIsDeprecated(service::ResolverParams&& params) const;
265+
service::AwaitableResolver resolveDeprecationReason(service::ResolverParams&& params) const;
264266

265-
service::AwaitableResolver resolve_typename(service::ResolverParams&& params);
267+
service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
266268

267269
struct Concept
268270
{
@@ -321,21 +323,24 @@ class Field
321323

322324
const std::unique_ptr<Concept> _pimpl;
323325

326+
service::TypeNames getTypeNames() const noexcept;
327+
service::ResolverMap getResolvers() const noexcept;
328+
324329
public:
325-
GRAPHQLINTROSPECTION_EXPORT Field(std::shared_ptr<introspection::Field> pimpl);
330+
GRAPHQLINTROSPECTION_EXPORT Field(std::shared_ptr<introspection::Field> pimpl) noexcept;
326331
GRAPHQLINTROSPECTION_EXPORT ~Field();
327332
};
328333

329334
class InputValue
330335
: public service::Object
331336
{
332337
private:
333-
service::AwaitableResolver resolveName(service::ResolverParams&& params);
334-
service::AwaitableResolver resolveDescription(service::ResolverParams&& params);
335-
service::AwaitableResolver resolveType(service::ResolverParams&& params);
336-
service::AwaitableResolver resolveDefaultValue(service::ResolverParams&& params);
338+
service::AwaitableResolver resolveName(service::ResolverParams&& params) const;
339+
service::AwaitableResolver resolveDescription(service::ResolverParams&& params) const;
340+
service::AwaitableResolver resolveType(service::ResolverParams&& params) const;
341+
service::AwaitableResolver resolveDefaultValue(service::ResolverParams&& params) const;
337342

338-
service::AwaitableResolver resolve_typename(service::ResolverParams&& params);
343+
service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
339344

340345
struct Concept
341346
{
@@ -382,21 +387,24 @@ class InputValue
382387

383388
const std::unique_ptr<Concept> _pimpl;
384389

390+
service::TypeNames getTypeNames() const noexcept;
391+
service::ResolverMap getResolvers() const noexcept;
392+
385393
public:
386-
GRAPHQLINTROSPECTION_EXPORT InputValue(std::shared_ptr<introspection::InputValue> pimpl);
394+
GRAPHQLINTROSPECTION_EXPORT InputValue(std::shared_ptr<introspection::InputValue> pimpl) noexcept;
387395
GRAPHQLINTROSPECTION_EXPORT ~InputValue();
388396
};
389397

390398
class EnumValue
391399
: public service::Object
392400
{
393401
private:
394-
service::AwaitableResolver resolveName(service::ResolverParams&& params);
395-
service::AwaitableResolver resolveDescription(service::ResolverParams&& params);
396-
service::AwaitableResolver resolveIsDeprecated(service::ResolverParams&& params);
397-
service::AwaitableResolver resolveDeprecationReason(service::ResolverParams&& params);
402+
service::AwaitableResolver resolveName(service::ResolverParams&& params) const;
403+
service::AwaitableResolver resolveDescription(service::ResolverParams&& params) const;
404+
service::AwaitableResolver resolveIsDeprecated(service::ResolverParams&& params) const;
405+
service::AwaitableResolver resolveDeprecationReason(service::ResolverParams&& params) const;
398406

399-
service::AwaitableResolver resolve_typename(service::ResolverParams&& params);
407+
service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
400408

401409
struct Concept
402410
{
@@ -443,21 +451,24 @@ class EnumValue
443451

444452
const std::unique_ptr<Concept> _pimpl;
445453

454+
service::TypeNames getTypeNames() const noexcept;
455+
service::ResolverMap getResolvers() const noexcept;
456+
446457
public:
447-
GRAPHQLINTROSPECTION_EXPORT EnumValue(std::shared_ptr<introspection::EnumValue> pimpl);
458+
GRAPHQLINTROSPECTION_EXPORT EnumValue(std::shared_ptr<introspection::EnumValue> pimpl) noexcept;
448459
GRAPHQLINTROSPECTION_EXPORT ~EnumValue();
449460
};
450461

451462
class Directive
452463
: public service::Object
453464
{
454465
private:
455-
service::AwaitableResolver resolveName(service::ResolverParams&& params);
456-
service::AwaitableResolver resolveDescription(service::ResolverParams&& params);
457-
service::AwaitableResolver resolveLocations(service::ResolverParams&& params);
458-
service::AwaitableResolver resolveArgs(service::ResolverParams&& params);
466+
service::AwaitableResolver resolveName(service::ResolverParams&& params) const;
467+
service::AwaitableResolver resolveDescription(service::ResolverParams&& params) const;
468+
service::AwaitableResolver resolveLocations(service::ResolverParams&& params) const;
469+
service::AwaitableResolver resolveArgs(service::ResolverParams&& params) const;
459470

460-
service::AwaitableResolver resolve_typename(service::ResolverParams&& params);
471+
service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
461472

462473
struct Concept
463474
{
@@ -504,8 +515,11 @@ class Directive
504515

505516
const std::unique_ptr<Concept> _pimpl;
506517

518+
service::TypeNames getTypeNames() const noexcept;
519+
service::ResolverMap getResolvers() const noexcept;
520+
507521
public:
508-
GRAPHQLINTROSPECTION_EXPORT Directive(std::shared_ptr<introspection::Directive> pimpl);
522+
GRAPHQLINTROSPECTION_EXPORT Directive(std::shared_ptr<introspection::Directive> pimpl) noexcept;
509523
GRAPHQLINTROSPECTION_EXPORT ~Directive();
510524
};
511525

samples/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.8.2)
4+
cmake_minimum_required(VERSION 3.15)
55

66
add_subdirectory(client)
77
add_subdirectory(learn)

samples/client/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.8.2)
4+
cmake_minimum_required(VERSION 3.15)
55

66
add_subdirectory(query)
77
add_subdirectory(mutate)

0 commit comments

Comments
 (0)