stigg-api-client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|