Skip to content
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
6b174de
add config options
ysmolski Jan 22, 2026
25900b9
test how modules are support
ysmolski Jan 23, 2026
c899d24
test flooring of ListSize
ysmolski Jan 23, 2026
85897a0
update with race fix in the engine
ysmolski Jan 26, 2026
db1e637
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Jan 27, 2026
cbac743
bump the engine
ysmolski Jan 27, 2026
551b21d
use released engine
ysmolski Jan 27, 2026
98e96f3
fix the comment in a test
ysmolski Jan 27, 2026
e21a880
fix default config
ysmolski Jan 27, 2026
5783522
return cost struct instead of the plan value
ysmolski Jan 30, 2026
466a3ca
rename config variables
ysmolski Jan 30, 2026
f7eb41b
rename config vars
ysmolski Jan 30, 2026
56d8d35
rename for the engine with actual costs
ysmolski Feb 6, 2026
12c6675
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 9, 2026
b25430c
add rough metrics collection
ysmolski Feb 9, 2026
1e7e63a
remove test
ysmolski Feb 9, 2026
2f2bff7
use latest unreleased engine
ysmolski Feb 9, 2026
4793b16
add more metrics tests
ysmolski Feb 9, 2026
ca852d5
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 9, 2026
1d6fcb3
clarify tests
ysmolski Feb 9, 2026
0ed9f40
require EstimatedListSize and fix MaxEstimatedLimit
ysmolski Feb 16, 2026
c79d56f
add attributes check to metrics test
ysmolski Feb 16, 2026
b164ca8
fix small nits
ysmolski Feb 16, 2026
d6ae666
add checks to a test
ysmolski Feb 16, 2026
61138f2
throw error defensively
ysmolski Feb 16, 2026
de2eca3
calculate delta as estimated - actual
ysmolski Feb 16, 2026
7d922d5
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 16, 2026
02d359c
update gomod
ysmolski Feb 16, 2026
e7e410a
fix config
ysmolski Feb 16, 2026
02982bf
bump engine
ysmolski Feb 16, 2026
5a89487
hide telemetry under the switch
ysmolski Feb 17, 2026
275152a
add dedicated benchmark for the costs analysis
ysmolski Feb 17, 2026
5179643
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 17, 2026
7656c45
bump the engine
ysmolski Feb 17, 2026
af815be
fix configs
ysmolski Feb 17, 2026
751dad2
Merge branch 'main' into yury/eng-8636-router-expose-the-static-cost-…
ysmolski Feb 18, 2026
41a091e
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 19, 2026
aa6ab5e
bump engine to 253
ysmolski Feb 19, 2026
f470888
fix test check and add stack for debugging
ysmolski Feb 20, 2026
e503e8f
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 20, 2026
fe6fd28
Merge branch 'main' into yury/eng-8636-router-expose-the-static-cost-…
ysmolski Feb 20, 2026
3127219
implement interface from composition with configs
ysmolski Feb 23, 2026
ef8fc58
calculate costs only once & expose via headers
ysmolski Feb 23, 2026
19acb89
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 23, 2026
8ad9f94
remove unused var
ysmolski Feb 23, 2026
99edd25
diversify tests a little
ysmolski Feb 24, 2026
3e5e0c5
add directives to the schemas
ysmolski Feb 24, 2026
8dd3980
remove debug statement
ysmolski Feb 24, 2026
2e4eb46
remove delta metrics as redundant
ysmolski Feb 24, 2026
5c23d7e
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 24, 2026
76b1b0b
add special bucket boundaries for cost histograms
ysmolski Feb 25, 2026
df343a2
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 25, 2026
fdad133
tighten the range
ysmolski Feb 25, 2026
e601a8e
port the changes in composition
ysmolski Feb 27, 2026
445f8e5
feat(composition): support @cost and @listSize (#2484)
Aenimus Feb 27, 2026
ca941bf
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Feb 27, 2026
cc2df00
use Cost Control everywhere
ysmolski Feb 27, 2026
5e14201
rename leftovers
ysmolski Feb 27, 2026
e72353a
fix the last old name
ysmolski Feb 27, 2026
d7f4ae1
fix subtle edge cases
ysmolski Feb 27, 2026
be923bb
remove dupl entry
ysmolski Feb 27, 2026
59140e6
preserve requireOneSlicingArgument default (true)
ysmolski Feb 27, 2026
5c9a33b
emit actual-cost metric independently from estimated-cost
ysmolski Feb 27, 2026
878532f
dont ignore err in a test
ysmolski Feb 27, 2026
8084fd6
fix: listSize validation in composition
ysmolski Mar 2, 2026
0bd10e5
do not allow empty listSize on non-list types
ysmolski Mar 2, 2026
ba156cc
fix: reject costs defined on fields of interfaces
ysmolski Mar 2, 2026
c8afa3a
reject empty sizeField on non-list types
ysmolski Mar 2, 2026
1a8061e
tighten tests data
ysmolski Mar 2, 2026
1f8b392
add tests extension type
ysmolski Mar 2, 2026
32cda8c
update index
ysmolski Mar 2, 2026
febebbe
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 2, 2026
b2bf4eb
fix lint issues
ysmolski Mar 2, 2026
18c6b04
continue for wrong entries
ysmolski Mar 2, 2026
583bdb1
update index
ysmolski Mar 2, 2026
2e232d6
add type weight and slicingArguments tests
ysmolski Mar 2, 2026
b8dc37f
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 4, 2026
47df6d6
fix computation on cache hits
ysmolski Mar 9, 2026
1e04d27
add missing `cost_stats` in JSON schema
ysmolski Mar 9, 2026
523d665
be more strict in config validation
ysmolski Mar 9, 2026
5bd57c7
add test to verify both DS are used in Costs calc
ysmolski Mar 9, 2026
62cf79c
make the costHeaderSetter closure to use pw.writer.Header()
ysmolski Mar 9, 2026
a572d9a
remove redundant line
ysmolski Mar 9, 2026
568d06c
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 9, 2026
9ca28e6
make lint happy
ysmolski Mar 9, 2026
6a741bf
comp: test the same field in two different subgraphs
ysmolski Mar 10, 2026
3397ae4
update test configs
ysmolski Mar 10, 2026
1eb75e5
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 10, 2026
a3cf3bc
fixed typing issues
ysmolski Mar 10, 2026
992726b
use switch instead ifs in the handleListSizeDirective
ysmolski Mar 10, 2026
7165fec
update globals
ysmolski Mar 10, 2026
f001bb8
make lint
ysmolski Mar 10, 2026
61c787e
handle no parents case
ysmolski Mar 10, 2026
9077f1a
braces in switch
ysmolski Mar 11, 2026
63ff3e5
update global
ysmolski Mar 11, 2026
7bb3d37
fix bug in tests and add nil check
ysmolski Mar 11, 2026
a4ab87d
add parallel benchmark
ysmolski Mar 11, 2026
528f68d
add tests for negative weights
ysmolski Mar 11, 2026
a875c7d
use records
ysmolski Mar 11, 2026
af61281
handle costs in controlplane
ysmolski Mar 11, 2026
748122c
add else to if
ysmolski Mar 11, 2026
1fc29b8
update global
ysmolski Mar 11, 2026
35c36ad
fix small nits
ysmolski Mar 12, 2026
a87a413
use maps in the Costs type
ysmolski Mar 12, 2026
ef7e973
make argumentWeights as a map
ysmolski Mar 12, 2026
79b37ff
update global
ysmolski Mar 12, 2026
97c8062
make two properties defined always
ysmolski Mar 12, 2026
1c1f262
strict testing messages
ysmolski Mar 12, 2026
66d55fa
update global
ysmolski Mar 12, 2026
f5f57a1
make requireOneSlicingArgument set to true by default
ysmolski Mar 12, 2026
52ba20b
use toStrictEqual in all tests
ysmolski Mar 12, 2026
26297a9
check the argument type for weights on the directives arguments
ysmolski Mar 12, 2026
d78f088
sort the props
ysmolski Mar 12, 2026
884d2fc
remove ternary operator
ysmolski Mar 12, 2026
b8f768e
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 13, 2026
cde508d
fix small things
ysmolski Mar 13, 2026
3218c53
fix lint for shared
ysmolski Mar 13, 2026
33159a5
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 13, 2026
6bd6cb5
bump engine to 264
ysmolski Mar 13, 2026
374f111
fix tests
ysmolski Mar 13, 2026
cc7421a
add docs for sizedFields and enable cost control page
ysmolski Mar 13, 2026
d5e0a30
add tests for sizedFields
ysmolski Mar 16, 2026
1d3dad2
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 16, 2026
c3c6db2
move config validation to the json schema layer
ysmolski Mar 16, 2026
612e9d4
reduce cardinality of histograms
ysmolski Mar 16, 2026
5676a71
test websockets both for queries and subs
ysmolski Mar 16, 2026
4ce7ad0
remove for for old controlplane
ysmolski Mar 16, 2026
a80e85a
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 16, 2026
71398c6
add costs back to controlplane
ysmolski Mar 16, 2026
22eeec2
fix test affected by sizedFields and move costs_test.go
ysmolski Mar 17, 2026
92377ef
forbid listSize.sizedFields on lists returning types
ysmolski Mar 17, 2026
23067e7
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 17, 2026
7b85244
update global
ysmolski Mar 17, 2026
037d6c9
add a deep lists test
ysmolski Mar 17, 2026
a701d0b
pnpm lint
ysmolski Mar 17, 2026
68713ca
Merge branch 'main' of github.com:wundergraph/cosmo into yury/eng-863…
ysmolski Mar 17, 2026
864dfa3
bump engine to 265
ysmolski Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,264 changes: 1,316 additions & 948 deletions connect-go/gen/proto/wg/cosmo/node/v1/node.pb.go

Large diffs are not rendered by default.

183 changes: 183 additions & 0 deletions connect/src/wg/cosmo/node/v1/node_pb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -838,6 +838,11 @@ export class DataSourceConfiguration extends Message<DataSourceConfiguration> {
*/
interfaceObjects: EntityInterfaceConfiguration[] = [];

/**
* @generated from field: optional wg.cosmo.node.v1.CostConfiguration cost_configuration = 16;
*/
costConfiguration?: CostConfiguration;

constructor(data?: PartialMessage<DataSourceConfiguration>) {
super();
proto3.util.initPartial(data, this);
Expand All @@ -861,6 +866,7 @@ export class DataSourceConfiguration extends Message<DataSourceConfiguration> {
{ no: 13, name: "custom_events", kind: "message", T: DataSourceCustomEvents },
{ no: 14, name: "entity_interfaces", kind: "message", T: EntityInterfaceConfiguration, repeated: true },
{ no: 15, name: "interface_objects", kind: "message", T: EntityInterfaceConfiguration, repeated: true },
{ no: 16, name: "cost_configuration", kind: "message", T: CostConfiguration, opt: true },
]);

static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DataSourceConfiguration {
Expand All @@ -880,6 +886,183 @@ export class DataSourceConfiguration extends Message<DataSourceConfiguration> {
}
}

/**
* @generated from message wg.cosmo.node.v1.CostConfiguration
*/
export class CostConfiguration extends Message<CostConfiguration> {
/**
* @generated from field: repeated wg.cosmo.node.v1.FieldWeightConfiguration field_weights = 1;
*/
fieldWeights: FieldWeightConfiguration[] = [];

/**
* @generated from field: repeated wg.cosmo.node.v1.FieldListSizeConfiguration list_sizes = 2;
*/
listSizes: FieldListSizeConfiguration[] = [];

/**
* @generated from field: map<string, int32> type_weights = 3;
*/
typeWeights: { [key: string]: number } = {};

/**
* @generated from field: map<string, int32> directive_argument_weights = 4;
*/
directiveArgumentWeights: { [key: string]: number } = {};

constructor(data?: PartialMessage<CostConfiguration>) {
super();
proto3.util.initPartial(data, this);
}

static readonly runtime: typeof proto3 = proto3;
static readonly typeName = "wg.cosmo.node.v1.CostConfiguration";
static readonly fields: FieldList = proto3.util.newFieldList(() => [
{ no: 1, name: "field_weights", kind: "message", T: FieldWeightConfiguration, repeated: true },
{ no: 2, name: "list_sizes", kind: "message", T: FieldListSizeConfiguration, repeated: true },
{ no: 3, name: "type_weights", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 5 /* ScalarType.INT32 */} },
{ no: 4, name: "directive_argument_weights", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 5 /* ScalarType.INT32 */} },
]);

static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CostConfiguration {
return new CostConfiguration().fromBinary(bytes, options);
}

static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CostConfiguration {
return new CostConfiguration().fromJson(jsonValue, options);
}

static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CostConfiguration {
return new CostConfiguration().fromJsonString(jsonString, options);
}

static equals(a: CostConfiguration | PlainMessage<CostConfiguration> | undefined, b: CostConfiguration | PlainMessage<CostConfiguration> | undefined): boolean {
return proto3.util.equals(CostConfiguration, a, b);
}
}

/**
* @generated from message wg.cosmo.node.v1.FieldWeightConfiguration
*/
export class FieldWeightConfiguration extends Message<FieldWeightConfiguration> {
/**
* @generated from field: string type_name = 1;
*/
typeName = "";

/**
* @generated from field: string field_name = 2;
*/
fieldName = "";

/**
* @generated from field: optional int32 weight = 3;
*/
weight?: number;

/**
* @generated from field: map<string, int32> argument_weights = 4;
*/
argumentWeights: { [key: string]: number } = {};

constructor(data?: PartialMessage<FieldWeightConfiguration>) {
super();
proto3.util.initPartial(data, this);
}

static readonly runtime: typeof proto3 = proto3;
static readonly typeName = "wg.cosmo.node.v1.FieldWeightConfiguration";
static readonly fields: FieldList = proto3.util.newFieldList(() => [
{ no: 1, name: "type_name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
{ no: 2, name: "field_name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
{ no: 3, name: "weight", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true },
{ no: 4, name: "argument_weights", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 5 /* ScalarType.INT32 */} },
]);

static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): FieldWeightConfiguration {
return new FieldWeightConfiguration().fromBinary(bytes, options);
}

static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): FieldWeightConfiguration {
return new FieldWeightConfiguration().fromJson(jsonValue, options);
}

static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): FieldWeightConfiguration {
return new FieldWeightConfiguration().fromJsonString(jsonString, options);
}

static equals(a: FieldWeightConfiguration | PlainMessage<FieldWeightConfiguration> | undefined, b: FieldWeightConfiguration | PlainMessage<FieldWeightConfiguration> | undefined): boolean {
return proto3.util.equals(FieldWeightConfiguration, a, b);
}
}

/**
* @generated from message wg.cosmo.node.v1.FieldListSizeConfiguration
*/
export class FieldListSizeConfiguration extends Message<FieldListSizeConfiguration> {
/**
* @generated from field: string type_name = 1;
*/
typeName = "";

/**
* @generated from field: string field_name = 2;
*/
fieldName = "";

/**
* @generated from field: optional int32 assumed_size = 3;
*/
assumedSize?: number;

/**
* @generated from field: repeated string slicing_arguments = 4;
*/
slicingArguments: string[] = [];

/**
* @generated from field: repeated string sized_fields = 5;
*/
sizedFields: string[] = [];

/**
* @generated from field: optional bool require_one_slicing_argument = 6;
*/
requireOneSlicingArgument?: boolean;

constructor(data?: PartialMessage<FieldListSizeConfiguration>) {
super();
proto3.util.initPartial(data, this);
}

static readonly runtime: typeof proto3 = proto3;
static readonly typeName = "wg.cosmo.node.v1.FieldListSizeConfiguration";
static readonly fields: FieldList = proto3.util.newFieldList(() => [
{ no: 1, name: "type_name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
{ no: 2, name: "field_name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
{ no: 3, name: "assumed_size", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true },
{ no: 4, name: "slicing_arguments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
{ no: 5, name: "sized_fields", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
{ no: 6, name: "require_one_slicing_argument", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true },
]);

static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): FieldListSizeConfiguration {
return new FieldListSizeConfiguration().fromBinary(bytes, options);
}

static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): FieldListSizeConfiguration {
return new FieldListSizeConfiguration().fromJson(jsonValue, options);
}

static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): FieldListSizeConfiguration {
return new FieldListSizeConfiguration().fromJsonString(jsonString, options);
}

static equals(a: FieldListSizeConfiguration | PlainMessage<FieldListSizeConfiguration> | undefined, b: FieldListSizeConfiguration | PlainMessage<FieldListSizeConfiguration> | undefined): boolean {
return proto3.util.equals(FieldListSizeConfiguration, a, b);
}
}

/**
* @generated from message wg.cosmo.node.v1.ArgumentConfiguration
*/
Expand Down
10 changes: 6 additions & 4 deletions demo/pkg/subgraphs/employees/subgraph/schema.graphqls
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ directive @goField(
) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION

directive @openfed__requireFetchReasons repeatable on FIELD_DEFINITION | INTERFACE | OBJECT
directive @cost(weight: Int!) on ARGUMENT_DEFINITION | ENUM | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | OBJECT | SCALAR
directive @listSize( assumedSize: Int, slicingArguments: [String!], sizedFields: [String!], requireOneSlicingArgument: Boolean = true ) on FIELD_DEFINITION

type Query {
employee(id: Int!): Employee @openfed__requireFetchReasons
employee(id: Int! @cost(weight: 2)): Employee @cost(weight: 5) @openfed__requireFetchReasons
employeeAsList(id: Int!): [Employee]
employees: [Employee]
employees: [Employee] @listSize(assumedSize: 50)
products: [Products!]!
teammates(team: Department!): [Employee!]!
firstEmployee: Employee! @tag(name: "internal")
Expand Down Expand Up @@ -65,7 +67,7 @@ type Subscription {
countFor(count: Int!): Int!
}

enum Department {
enum Department @cost(weight: 1) {
ENGINEERING
MARKETING
OPERATIONS
Expand Down Expand Up @@ -179,7 +181,7 @@ type Consultancy @key(fields: "upc") {
isLeadAvailable: Boolean @requires(fields: "lead { isAvailable }")
}

type Cosmo implements IProduct @key(fields: "upc") {
type Cosmo implements IProduct @key(fields: "upc") @cost(weight: 5) {
upc: ID!
engineers: [Employee!]!
lead: Employee!
Expand Down
11 changes: 7 additions & 4 deletions demo/pkg/subgraphs/products/subgraph/schema.graphqls
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.5", import: ["@authenticated", "@composeDirective", "@external", "@extends", "@inaccessible", "@interfaceObject", "@override", "@provides", "@key", "@requires", "@requiresScopes", "@shareable", "@tag"])

directive @cost(weight: Int!) on ARGUMENT_DEFINITION | ENUM | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | OBJECT | SCALAR
directive @listSize( assumedSize: Int, slicingArguments: [String!], sizedFields: [String!], requireOneSlicingArgument: Boolean = true ) on FIELD_DEFINITION

schema {
query: Queries
mutation: Mutation
}

type Queries {
productTypes: [Products!]!
productTypes: [Products!]! @listSize(assumedSize: 50)
topSecretFederationFacts: [TopSecretFact!]! @requiresScopes(scopes: [["read:fact"], ["read:all"]])
factTypes: [TopSecretFactType!]
sharedThings(numOfA: Int! numOfB: Int!): [Thing!]! @shareable
sharedThings(numOfA: Int! numOfB: Int!): [Thing!]! @listSize(slicingArguments: ["numOfA"]) @shareable
}

type Mutation {
Expand Down Expand Up @@ -38,7 +41,7 @@ interface TopSecretFact @authenticated {
factType: TopSecretFactType
}

scalar FactContent @requiresScopes(scopes: [["read:scalar"], ["read:all"]])
scalar FactContent @cost(weight: 10) @requiresScopes(scopes: [["read:scalar"], ["read:all"]])

type DirectiveFact implements TopSecretFact @authenticated {
title: String!
Expand Down Expand Up @@ -81,7 +84,7 @@ type Consultancy @key(fields: "upc") {
name: ProductName!
}

type Cosmo @key(fields: "upc") {
type Cosmo @key(fields: "upc") @cost(weight: 8) {
upc: ID!
name: ProductName!
repositoryURL: String!
Expand Down
24 changes: 24 additions & 0 deletions proto/wg/cosmo/node/v1/node.proto
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,30 @@ message DataSourceConfiguration {
DataSourceCustomEvents custom_events = 13;
repeated EntityInterfaceConfiguration entity_interfaces = 14;
repeated EntityInterfaceConfiguration interface_objects = 15;
optional CostConfiguration cost_configuration = 16;
}

message CostConfiguration {
repeated FieldWeightConfiguration field_weights = 1;
repeated FieldListSizeConfiguration list_sizes = 2;
map<string, int32> type_weights = 3;
map<string, int32> directive_argument_weights = 4;
}

message FieldWeightConfiguration {
string type_name = 1;
string field_name = 2;
optional int32 weight = 3;
map<string, int32> argument_weights = 4;
}

message FieldListSizeConfiguration {
string type_name = 1;
string field_name = 2;
optional int32 assumed_size = 3;
repeated string slicing_arguments = 4;
repeated string sized_fields = 5;
optional bool require_one_slicing_argument = 6;
}

message ArgumentConfiguration {
Expand Down
Loading
Loading