Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

GraphQL

PlatformsVersionsSSWGLicense

The Swift implementation for GraphQL, a query language for APIs created by Facebook.

This repo is a Swift port of the JavaScript reference implementation. To create GraphQL schemas more easily, use graphql-generator or Graphiti, and to expose your schema through HTTP, check out graphql-vapor or graphql-hummingbird

Looking for help? Find resources from the GraphQL community.

Usage

Schema Definition

The GraphQLSchema object can be used to define GraphQL Schemas and Types. These schemas are made up of types, fields, arguments, and resolver functions. Below is an example:

letschema=tryGraphQLSchema(
query:GraphQLObjectType( // Defines the special "query" type
name:"Query",
fields:["hello":GraphQLField( // Users may query 'hello'
type: GraphQLString, // The result is a string type
resolve:{ _, _, _, _ in"world" // The result of querying 'hello' is "world"
})]))

For more complex schema examples see the test files.

Execution

Once a schema has been defined queries may be executed against it using the global graphql function:

letresult=tryawaitgraphql(
schema: schema,
request:"{ hello }")

The result of this query is a GraphQLResult that encodes to the following JSON:

{ "hello": "world" }

Subscription

This package supports GraphQL subscription. To create a subscription field in a GraphQL schema, use the subscribe resolver that returns any type that conforms to AsyncSequence, with a Sendable element type. You must also provide a resolver, which defines how to process each event as it occurs and must return the field result type. Here is an example:

letschema=tryGraphQLSchema(
subscribe:GraphQLObjectType(
name:"Subscribe",
fields:["hello":GraphQLField(
type: GraphQLString,
resolve:{ eventResult, _, _, _ in // Defines how to transform each event when it occurs
return eventResult
},
subscribe:{ _, _, _, _ in // Defines how to construct the event stream
returnAsyncThrowingStream<String,Error>{ continuation inlettimer=Timer.scheduledTimer(
withTimeInterval:3,
repeats:true,){
continuation.yield("world") // Emits "world" every 3 seconds
}}})]))

To execute a subscription use the graphqlSubscribe function:

letsubscriptionResult=tryawaitgraphqlSubscribe(
schema: schema,)letstream= subscriptionResult.get()fortryawaitresultin stream {print(result)}

The code above will print the following JSON every 3 seconds:

{ "hello": "world" }

Encoding Results

If you encode a GraphQLResult with an ordinary JSONEncoder, there are no guarantees that the field order will match the query, violating the GraphQL spec. To preserve this order, GraphQLResult should be encoded using the GraphQLJSONEncoder provided by this package.

Support

This package aims to support the previous three Swift versions.

For details on upgrading to new major versions, see MIGRATION.

Contributing

If you think you have found a security vulnerability, please follow the Security guidelines.

Those contributing to this package are expected to follow the Swift Code of Conduct, the Swift API Design Guidelines, and the SSWG Technical Best Practices.

This repo uses the standard swift format, and includes lint checks to enforce these formatting standards. To format your code, run:

swift format --parallel --in-place --recursive ./

Most of this repo mirrors the structure of the canonical GraphQL implementation written in Javascript/Typescript. If there is any feature missing, looking at the original code and "translating" it to Swift works, most of the time. For example:

Swift

/Sources/GraphQL/Language/AST.swift

Javascript/Typescript

/src/language/ast.js

License

This project is released under the MIT license. See LICENSE for details.

About

The Swift GraphQL implementation for macOS and Linux

Topics

Resources

Security policy

Stars

962 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages