stigg-api-client 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +22 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +81 -0
- data/LICENSE.txt +21 -0
- data/README.md +109 -0
- data/Rakefile +12 -0
- data/lib/stigg/client.rb +37 -0
- data/lib/stigg/generated/operations.rb +608 -0
- data/lib/stigg/version.rb +5 -0
- data/lib/stigg.rb +5 -0
- data/package.json +4 -0
- data/project.json +3 -0
- data/schema.json +50719 -0
- data/scripts/generate-operations.mjs +99 -0
- data/scripts/generate.sh +14 -0
- metadata +74 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
import * as gql from 'graphql';
|
2
|
+
import fs from 'fs';
|
3
|
+
|
4
|
+
const schema = fs.readFileSync(
|
5
|
+
'../api-client-schema/src/schema.graphql',
|
6
|
+
'utf8'
|
7
|
+
);
|
8
|
+
|
9
|
+
const operations = fs.readFileSync('operations.graphql', 'utf8');
|
10
|
+
|
11
|
+
const gqlSchema = gql.buildSchema(schema);
|
12
|
+
|
13
|
+
const gqlOperations = gql.parse(operations);
|
14
|
+
|
15
|
+
function generateOperationsModule() {
|
16
|
+
const typeInfo = new gql.TypeInfo(gqlSchema);
|
17
|
+
const outputProgram = gql.visit(
|
18
|
+
gqlOperations,
|
19
|
+
gql.visitWithTypeInfo(typeInfo, visitor(gqlSchema, typeInfo))
|
20
|
+
);
|
21
|
+
|
22
|
+
const modules = ['Fragment', 'Mutation', 'Query']
|
23
|
+
.map(
|
24
|
+
(moduleName) =>
|
25
|
+
`module ${moduleName}\n${outputProgram
|
26
|
+
.filter((x) => x.moduleName === moduleName)
|
27
|
+
.map((x) => x.element)
|
28
|
+
.join('\n\n')}\nend`
|
29
|
+
)
|
30
|
+
.join('\n');
|
31
|
+
|
32
|
+
return `# frozen_string_literal: true\n\nmodule Stigg\n${modules}\nend`;
|
33
|
+
}
|
34
|
+
|
35
|
+
function findFragments(node, results = new Set()) {
|
36
|
+
if (node.kind === 'FragmentSpread') {
|
37
|
+
results.add(node.name.value);
|
38
|
+
gqlOperations.definitions.find((def) => {
|
39
|
+
if (
|
40
|
+
def.kind === 'FragmentDefinition' &&
|
41
|
+
def.name.value === node.name.value
|
42
|
+
) {
|
43
|
+
findFragments(def, results);
|
44
|
+
}
|
45
|
+
});
|
46
|
+
}
|
47
|
+
node.selectionSet?.selections?.forEach((node) =>
|
48
|
+
findFragments(node, results)
|
49
|
+
);
|
50
|
+
return results;
|
51
|
+
}
|
52
|
+
|
53
|
+
function visitor(schema, typeInfo) {
|
54
|
+
return {
|
55
|
+
enter(node) {
|
56
|
+
typeInfo.enter(node);
|
57
|
+
},
|
58
|
+
leave(node) {
|
59
|
+
typeInfo.leave(node);
|
60
|
+
switch (node.kind) {
|
61
|
+
case 'Document':
|
62
|
+
return node.definitions;
|
63
|
+
case 'OperationDefinition': {
|
64
|
+
const results = findFragments(node);
|
65
|
+
const rawQuery = node.loc.source.body.substring(
|
66
|
+
node.loc.start,
|
67
|
+
node.loc.end
|
68
|
+
);
|
69
|
+
const namelessQuery = rawQuery.replace(
|
70
|
+
`${node.operation} ${node.name.value}`,
|
71
|
+
`${node.operation} `
|
72
|
+
);
|
73
|
+
const includedFragments = [...results]
|
74
|
+
.map((x) => `#{Fragment::${x}}\n`)
|
75
|
+
.join('');
|
76
|
+
const constantName =
|
77
|
+
node.name.value[0].toUpperCase() + node.name.value.slice(1);
|
78
|
+
return {
|
79
|
+
moduleName: node.operation === 'mutation' ? 'Mutation' : 'Query',
|
80
|
+
element: `${constantName} = <<-GRAPHQL\n${namelessQuery}\n${includedFragments}GRAPHQL`,
|
81
|
+
};
|
82
|
+
}
|
83
|
+
case 'FragmentDefinition': {
|
84
|
+
const querySource = node.loc.source.body.substring(
|
85
|
+
node.loc.start,
|
86
|
+
node.loc.end
|
87
|
+
);
|
88
|
+
return {
|
89
|
+
moduleName: 'Fragment',
|
90
|
+
element: `${node.name.value} = <<-GRAPHQL\n${querySource}\nGRAPHQL`,
|
91
|
+
};
|
92
|
+
}
|
93
|
+
}
|
94
|
+
},
|
95
|
+
};
|
96
|
+
}
|
97
|
+
|
98
|
+
const module = generateOperationsModule();
|
99
|
+
fs.writeFileSync('lib/stigg/generated/operations.rb', module);
|
data/scripts/generate.sh
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# stitch the operation files together
|
2
|
+
cat ../api-client-schema/src/operations/fragments.graphql > operations.graphql
|
3
|
+
cat ../api-client-schema/src/operations/queries.graphql >> operations.graphql
|
4
|
+
cat ../api-client-schema/src/operations/mutations.graphql >> operations.graphql
|
5
|
+
|
6
|
+
cp ../api-client-schema/src/schema.json schema.json
|
7
|
+
|
8
|
+
cat <<-EOF > schema.json
|
9
|
+
$(echo { \"data\": ) $(cat schema.json) $(echo })
|
10
|
+
EOF
|
11
|
+
|
12
|
+
node scripts/generate-operations.mjs
|
13
|
+
|
14
|
+
rubocop -a lib/stigg/generated/operations.rb
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stigg-api-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stigg
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: graphlient
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.7.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.7.0
|
27
|
+
description: Stigg API Client for Ruby
|
28
|
+
email:
|
29
|
+
- support@stigg.io
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".rspec"
|
35
|
+
- ".rubocop.yml"
|
36
|
+
- Gemfile
|
37
|
+
- Gemfile.lock
|
38
|
+
- LICENSE.txt
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- lib/stigg.rb
|
42
|
+
- lib/stigg/client.rb
|
43
|
+
- lib/stigg/generated/operations.rb
|
44
|
+
- lib/stigg/version.rb
|
45
|
+
- package.json
|
46
|
+
- project.json
|
47
|
+
- schema.json
|
48
|
+
- scripts/generate-operations.mjs
|
49
|
+
- scripts/generate.sh
|
50
|
+
homepage: https://stigg.io
|
51
|
+
licenses:
|
52
|
+
- MIT
|
53
|
+
metadata:
|
54
|
+
homepage_uri: https://stigg.io
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 3.0.0
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubygems_version: 3.2.3
|
71
|
+
signing_key:
|
72
|
+
specification_version: 4
|
73
|
+
summary: Stigg API Client
|
74
|
+
test_files: []
|