55namespace Apollo \Federation ;
66
77use Apollo \Federation \Directives \ExternalDirective ;
8+ use Apollo \Federation \Directives \InaccessibleDirective ;
89use Apollo \Federation \Directives \KeyDirective ;
10+ use Apollo \Federation \Directives \OverrideDirective ;
911use Apollo \Federation \Directives \ProvidesDirective ;
1012use Apollo \Federation \Directives \RequiresDirective ;
13+ use Apollo \Federation \Directives \ShareableDirective ;
1114use Apollo \Federation \Enum \DirectiveEnum ;
12- use GraphQL \Type \Definition \Directive ;
1315
1416/**
1517 * Helper class to get directives for annotating federated entity types.
1618 */
1719class Directives
1820{
19- /** @var array<string,Directive> */
20- private static $ directives = null ;
21+ /**
22+ * @var array{
23+ * external: ExternalDirective,
24+ * inaccessible: InaccessibleDirective,
25+ * key: KeyDirective,
26+ * override: OverrideDirective,
27+ * requires: RequiresDirective,
28+ * provides: ProvidesDirective,
29+ * shareable: ShareableDirective,
30+ * }|null
31+ */
32+ private static ?array $ directives = null ;
2133
2234 /**
2335 * Gets the @key directive.
@@ -35,6 +47,22 @@ public static function external(): ExternalDirective
3547 return self ::getDirectives ()[DirectiveEnum::EXTERNAL ];
3648 }
3749
50+ /**
51+ * Gets the @inaccessible directive.
52+ */
53+ public static function inaccessible (): InaccessibleDirective
54+ {
55+ return self ::getDirectives ()[DirectiveEnum::INACCESSIBLE ];
56+ }
57+
58+ /**
59+ * Gets the @override directive.
60+ */
61+ public static function override (): OverrideDirective
62+ {
63+ return self ::getDirectives ()[DirectiveEnum::OVERRIDE ];
64+ }
65+
3866 /**
3967 * Gets the @requires directive.
4068 */
@@ -51,19 +79,38 @@ public static function provides(): ProvidesDirective
5179 return self ::getDirectives ()[DirectiveEnum::PROVIDES ];
5280 }
5381
82+ /**
83+ * Gets the @shareable directive.
84+ */
85+ public static function shareable (): ShareableDirective
86+ {
87+ return self ::getDirectives ()[DirectiveEnum::SHAREABLE ];
88+ }
89+
5490 /**
5591 * Gets the directives that can be used on federated entity types.
5692 *
57- * @return array<string,Directive>
93+ * @return array{
94+ * external: ExternalDirective,
95+ * inaccessible: InaccessibleDirective,
96+ * key: KeyDirective,
97+ * override: OverrideDirective,
98+ * requires: RequiresDirective,
99+ * provides: ProvidesDirective,
100+ * shareable: ShareableDirective,
101+ * }
58102 */
59103 public static function getDirectives (): array
60104 {
61105 if (!self ::$ directives ) {
62106 self ::$ directives = [
63107 DirectiveEnum::EXTERNAL => new ExternalDirective (),
108+ DirectiveEnum::INACCESSIBLE => new InaccessibleDirective (),
64109 DirectiveEnum::KEY => new KeyDirective (),
110+ DirectiveEnum::OVERRIDE => new OverrideDirective (),
65111 DirectiveEnum::REQUIRES => new RequiresDirective (),
66112 DirectiveEnum::PROVIDES => new ProvidesDirective (),
113+ DirectiveEnum::SHAREABLE => new ShareableDirective (),
67114 ];
68115 }
69116
0 commit comments