mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-07 18:01:40 -05:00
630 lines
15 KiB
GraphQL
630 lines
15 KiB
GraphQL
### Type definitions saved at 2026-02-12T12:28:08.262Z ###
|
|
|
|
enum RemoteFileFit {
|
|
COVER
|
|
FILL
|
|
OUTSIDE
|
|
CONTAIN
|
|
}
|
|
|
|
enum RemoteFileFormat {
|
|
AUTO
|
|
JPG
|
|
PNG
|
|
WEBP
|
|
AVIF
|
|
}
|
|
|
|
enum RemoteFileLayout {
|
|
FIXED
|
|
FULL_WIDTH
|
|
CONSTRAINED
|
|
}
|
|
|
|
enum RemoteFilePlaceholder {
|
|
DOMINANT_COLOR
|
|
BLURRED
|
|
TRACED_SVG
|
|
NONE
|
|
}
|
|
|
|
enum RemoteFileCropFocus {
|
|
CENTER
|
|
TOP
|
|
RIGHT
|
|
BOTTOM
|
|
LEFT
|
|
ENTROPY
|
|
EDGES
|
|
FACES
|
|
}
|
|
|
|
type RemoteFileResize {
|
|
width: Int
|
|
height: Int
|
|
src: String
|
|
}
|
|
|
|
"""
|
|
Remote Interface
|
|
"""
|
|
interface RemoteFile {
|
|
id: ID!
|
|
mimeType: String!
|
|
filename: String!
|
|
filesize: Int
|
|
width: Int
|
|
height: Int
|
|
publicUrl: String!
|
|
resize(
|
|
width: Int
|
|
height: Int
|
|
aspectRatio: Float
|
|
fit: RemoteFileFit = COVER
|
|
|
|
"""
|
|
The image formats to generate. Valid values are AUTO (meaning the same
|
|
format as the source image), JPG, PNG, WEBP and AVIF.
|
|
The default value is [AUTO, WEBP, AVIF], and you should rarely need to
|
|
change this. Take care if you specify JPG or PNG when you do
|
|
not know the formats of the source images, as this could lead to unwanted
|
|
results such as converting JPEGs to PNGs. Specifying
|
|
both PNG and JPG is not supported and will be ignored.
|
|
"""
|
|
format: RemoteFileFormat = AUTO
|
|
cropFocus: [RemoteFileCropFocus]
|
|
quality: Int = 75
|
|
): RemoteFileResize
|
|
|
|
"""
|
|
Data used in the <GatsbyImage /> component. See https://gatsby.dev/img for more info.
|
|
"""
|
|
gatsbyImage(
|
|
"""
|
|
The layout for the image.
|
|
FIXED: A static image sized, that does not resize according to the screen width
|
|
FULL_WIDTH: The image resizes to fit its container. Pass a "sizes" option if
|
|
it isn't going to be the full width of the screen.
|
|
CONSTRAINED: Resizes to fit its container, up to a maximum width, at which point it will remain fixed in size.
|
|
"""
|
|
layout: RemoteFileLayout = CONSTRAINED
|
|
|
|
"""
|
|
The display width of the generated image for layout = FIXED, and the display
|
|
width of the largest image for layout = CONSTRAINED.
|
|
The actual largest image resolution will be this value multiplied by the largest value in outputPixelDensities
|
|
Ignored if layout = FLUID.
|
|
"""
|
|
width: Int
|
|
|
|
"""
|
|
If set, the height of the generated image. If omitted, it is calculated from
|
|
the supplied width, matching the aspect ratio of the source image.
|
|
"""
|
|
height: Int
|
|
|
|
"""
|
|
Format of generated placeholder image, displayed while the main image loads.
|
|
BLURRED: a blurred, low resolution image, encoded as a base64 data URI
|
|
DOMINANT_COLOR: a solid color, calculated from the dominant color of the image (default).
|
|
TRACED_SVG: deprecated. Will use DOMINANT_COLOR.
|
|
NONE: no placeholder. Set the argument "backgroundColor" to use a fixed background color.
|
|
"""
|
|
placeholder: RemoteFilePlaceholder = DOMINANT_COLOR
|
|
|
|
"""
|
|
If set along with width or height, this will set the value of the other
|
|
dimension to match the provided aspect ratio, cropping the image if needed.
|
|
If neither width or height is provided, height will be set based on the intrinsic width of the source image.
|
|
"""
|
|
aspectRatio: Float
|
|
|
|
"""
|
|
The image formats to generate. Valid values are AUTO (meaning the same
|
|
format as the source image), JPG, PNG, WEBP and AVIF.
|
|
The default value is [AUTO, WEBP, AVIF], and you should rarely need to
|
|
change this. Take care if you specify JPG or PNG when you do
|
|
not know the formats of the source images, as this could lead to unwanted
|
|
results such as converting JPEGs to PNGs. Specifying
|
|
both PNG and JPG is not supported and will be ignored.
|
|
"""
|
|
formats: [RemoteFileFormat!] = [AUTO, WEBP, AVIF]
|
|
|
|
"""
|
|
A list of image pixel densities to generate for FIXED and CONSTRAINED
|
|
images. You should rarely need to change this. It will never generate images
|
|
larger than the source, and will always include a 1x image.
|
|
Default is [ 1, 2 ] for fixed images, meaning 1x, 2x, and [0.25, 0.5, 1, 2]
|
|
for fluid. In this case, an image with a fluid layout and width = 400 would
|
|
generate images at 100, 200, 400 and 800px wide.
|
|
"""
|
|
outputPixelDensities: [Float] = [0.25, 0.5, 1, 2]
|
|
|
|
"""
|
|
Specifies the image widths to generate. You should rarely need to change
|
|
this. For FIXED and CONSTRAINED images it is better to allow these to be
|
|
determined automatically,
|
|
based on the image size. For FULL_WIDTH images this can be used to override
|
|
the default, which is [750, 1080, 1366, 1920].
|
|
It will never generate any images larger than the source.
|
|
"""
|
|
breakpoints: [Int] = [750, 1080, 1366, 1920]
|
|
|
|
"""
|
|
The "sizes" property, passed to the img tag. This describes the display size of the image.
|
|
This does not affect the generated images, but is used by the browser to
|
|
decide which images to download. You can leave this blank for fixed images,
|
|
or if the responsive image
|
|
container will be the full width of the screen. In these cases we will generate an appropriate value.
|
|
"""
|
|
sizes: String
|
|
|
|
"""
|
|
Background color applied to the wrapper, or when "letterboxing" an image to another aspect ratio.
|
|
"""
|
|
backgroundColor: String
|
|
fit: RemoteFileFit = COVER
|
|
cropFocus: [RemoteFileCropFocus]
|
|
quality: Int = 75
|
|
): GatsbyImageData
|
|
}
|
|
|
|
type File implements Node @dontInfer {
|
|
sourceInstanceName: String!
|
|
absolutePath: String!
|
|
relativePath: String!
|
|
extension: String!
|
|
size: Int!
|
|
prettySize: String!
|
|
modifiedTime: Date! @dateformat
|
|
accessTime: Date! @dateformat
|
|
changeTime: Date! @dateformat
|
|
birthTime: Date! @dateformat
|
|
root: String!
|
|
dir: String!
|
|
base: String!
|
|
ext: String!
|
|
name: String!
|
|
relativeDirectory: String!
|
|
dev: Int!
|
|
mode: Int!
|
|
nlink: Int!
|
|
uid: Int!
|
|
gid: Int!
|
|
rdev: Int!
|
|
ino: Float!
|
|
atimeMs: Float!
|
|
mtimeMs: Float!
|
|
ctimeMs: Float!
|
|
atime: Date! @dateformat
|
|
mtime: Date! @dateformat
|
|
ctime: Date! @dateformat
|
|
birthtime: Date @deprecated(reason: "Use `birthTime` instead")
|
|
birthtimeMs: Float @deprecated(reason: "Use `birthTime` instead")
|
|
blksize: Int
|
|
blocks: Int
|
|
}
|
|
|
|
type Directory implements Node @dontInfer {
|
|
sourceInstanceName: String!
|
|
absolutePath: String!
|
|
relativePath: String!
|
|
extension: String!
|
|
size: Int!
|
|
prettySize: String!
|
|
modifiedTime: Date! @dateformat
|
|
accessTime: Date! @dateformat
|
|
changeTime: Date! @dateformat
|
|
birthTime: Date! @dateformat
|
|
root: String!
|
|
dir: String!
|
|
base: String!
|
|
ext: String!
|
|
name: String!
|
|
relativeDirectory: String!
|
|
dev: Int!
|
|
mode: Int!
|
|
nlink: Int!
|
|
uid: Int!
|
|
gid: Int!
|
|
rdev: Int!
|
|
ino: Float!
|
|
atimeMs: Float!
|
|
mtimeMs: Float!
|
|
ctimeMs: Float!
|
|
atime: Date! @dateformat
|
|
mtime: Date! @dateformat
|
|
ctime: Date! @dateformat
|
|
birthtime: Date @deprecated(reason: "Use `birthTime` instead")
|
|
birthtimeMs: Float @deprecated(reason: "Use `birthTime` instead")
|
|
}
|
|
|
|
type Site implements Node @derivedTypes @dontInfer {
|
|
buildTime: Date @dateformat
|
|
siteMetadata: SiteSiteMetadata
|
|
port: Int
|
|
host: String
|
|
flags: SiteFlags
|
|
trailingSlash: String
|
|
pathPrefix: String
|
|
polyfill: Boolean
|
|
jsxRuntime: String
|
|
graphqlTypegen: Boolean
|
|
}
|
|
|
|
type SiteSiteMetadata {
|
|
title: String
|
|
description: String
|
|
siteUrl: String
|
|
}
|
|
|
|
type SiteFlags {
|
|
DEV_SSR: Boolean
|
|
}
|
|
|
|
type SiteFunction implements Node @dontInfer {
|
|
functionRoute: String!
|
|
pluginName: String!
|
|
originalAbsoluteFilePath: String!
|
|
originalRelativeFilePath: String!
|
|
relativeCompiledFilePath: String!
|
|
absoluteCompiledFilePath: String!
|
|
matchPath: String
|
|
}
|
|
|
|
type SitePage implements Node @dontInfer {
|
|
path: String!
|
|
component: String!
|
|
internalComponentName: String!
|
|
componentChunkName: String!
|
|
matchPath: String
|
|
pageContext: JSON @proxy(from: "context", fromNode: false)
|
|
pluginCreator: SitePlugin @link(by: "id", from: "pluginCreatorId")
|
|
}
|
|
|
|
type SitePlugin implements Node @dontInfer {
|
|
resolve: String
|
|
name: String
|
|
version: String
|
|
nodeAPIs: [String]
|
|
browserAPIs: [String]
|
|
ssrAPIs: [String]
|
|
pluginFilepath: String
|
|
pluginOptions: JSON
|
|
packageJson: JSON
|
|
}
|
|
|
|
type SiteBuildMetadata implements Node @dontInfer {
|
|
buildTime: Date @dateformat
|
|
}
|
|
|
|
type MarkdownHeading {
|
|
id: String
|
|
value: String
|
|
depth: Int
|
|
}
|
|
|
|
enum MarkdownHeadingLevels {
|
|
h1
|
|
h2
|
|
h3
|
|
h4
|
|
h5
|
|
h6
|
|
}
|
|
|
|
enum MarkdownExcerptFormats {
|
|
PLAIN
|
|
HTML
|
|
MARKDOWN
|
|
}
|
|
|
|
type MarkdownWordCount {
|
|
paragraphs: Int
|
|
sentences: Int
|
|
words: Int
|
|
}
|
|
|
|
type MarkdownRemark implements Node
|
|
@childOf(mimeTypes: ["text/markdown", "text/x-markdown"], types: ["File"])
|
|
@derivedTypes
|
|
@dontInfer {
|
|
frontmatter: MarkdownRemarkFrontmatter
|
|
excerpt: String
|
|
rawMarkdownBody: String
|
|
fileAbsolutePath: String
|
|
fields: MarkdownRemarkFields
|
|
}
|
|
|
|
type MarkdownRemarkFrontmatter {
|
|
title: String
|
|
superBlock: String
|
|
certification: String
|
|
}
|
|
|
|
type MarkdownRemarkFields {
|
|
slug: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeHooks {
|
|
afterEach: String
|
|
beforeAll: String
|
|
beforeEach: String
|
|
afterAll: String
|
|
}
|
|
|
|
type SuperBlockStructure implements Node @derivedTypes @dontInfer {
|
|
chapters: [SuperBlockStructureChapters]
|
|
superBlock: String
|
|
blocks: [String]
|
|
}
|
|
|
|
type SuperBlockStructureChapters @derivedTypes {
|
|
dashedName: String
|
|
modules: [SuperBlockStructureChaptersModules]
|
|
chapterType: String
|
|
comingSoon: Boolean
|
|
}
|
|
|
|
type SuperBlockStructureChaptersModules {
|
|
dashedName: String
|
|
blocks: [String]
|
|
moduleType: String
|
|
comingSoon: Boolean
|
|
}
|
|
|
|
type ChallengeNode implements Node @derivedTypes @dontInfer {
|
|
sourceInstanceName: String
|
|
challenge: ChallengeNodeChallenge
|
|
}
|
|
|
|
type ChallengeNodeChallenge @derivedTypes {
|
|
id: String
|
|
title: String
|
|
challengeType: Int
|
|
dashedName: String
|
|
demoType: String
|
|
challengeFiles: [ChallengeNodeChallengeChallengeFiles]
|
|
solutions: [[ChallengeNodeChallengeSolutions]]
|
|
assignments: [String]
|
|
tests: [ChallengeNodeChallengeTests]
|
|
description: String
|
|
translationPending: Boolean
|
|
sourceLocation: String
|
|
block: String
|
|
blockLabel: String
|
|
blockLayout: String
|
|
hasEditableBoundaries: Boolean
|
|
order: Int
|
|
instructions: String
|
|
questions: [ChallengeNodeChallengeQuestions]
|
|
superBlock: String
|
|
superOrder: Int
|
|
challengeOrder: Int
|
|
isLastChallengeInBlock: Boolean
|
|
required: [ChallengeNodeChallengeRequired]
|
|
helpCategory: String
|
|
usesMultifileEditor: Boolean
|
|
disableLoopProtectTests: Boolean
|
|
disableLoopProtectPreview: Boolean
|
|
certification: String
|
|
fields: ChallengeNodeChallengeFields
|
|
quizzes: [ChallengeNodeChallengeQuizzes]
|
|
chapter: String
|
|
module: String
|
|
hooks: ChallengeNodeChallengeHooks
|
|
nodules: [ChallengeNodeChallengeNodules]
|
|
forumTopicId: Int
|
|
videoId: String
|
|
bilibiliIds: ChallengeNodeChallengeBilibiliIds
|
|
saveSubmissionToDB: Boolean
|
|
lang: String
|
|
scene: ChallengeNodeChallengeScene
|
|
explanation: String
|
|
fillInTheBlank: ChallengeNodeChallengeFillInTheBlank
|
|
inputType: String
|
|
videoUrl: String
|
|
url: String
|
|
template: String
|
|
transcript: String
|
|
isExam: Boolean
|
|
showSpeakingButton: Boolean
|
|
videoLocaleIds: ChallengeNodeChallengeVideoLocaleIds
|
|
notes: String
|
|
prerequisites: [ChallengeNodeChallengePrerequisites]
|
|
msTrophyId: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeChallengeFiles {
|
|
head: String
|
|
tail: String
|
|
id: String
|
|
editableRegionBoundaries: [Int]
|
|
history: [String]
|
|
name: String
|
|
ext: String
|
|
path: String
|
|
fileKey: String
|
|
contents: String
|
|
seed: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeSolutions {
|
|
head: String
|
|
tail: String
|
|
id: String
|
|
history: [String]
|
|
name: String
|
|
ext: String
|
|
path: String
|
|
fileKey: String
|
|
contents: String
|
|
seed: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeTests {
|
|
text: String
|
|
testString: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuestions @derivedTypes {
|
|
text: String
|
|
answers: [ChallengeNodeChallengeQuestionsAnswers]
|
|
solution: Int
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuestionsAnswers {
|
|
answer: String
|
|
feedback: String
|
|
audioId: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeRequired {
|
|
src: String
|
|
link: String
|
|
raw: Boolean
|
|
}
|
|
|
|
type ChallengeNodeChallengeFields {
|
|
slug: String
|
|
blockHashSlug: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuizzes @derivedTypes {
|
|
questions: [ChallengeNodeChallengeQuizzesQuestions]
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuizzesQuestions @derivedTypes {
|
|
text: String
|
|
distractors: [String]
|
|
answer: String
|
|
audioData: ChallengeNodeChallengeQuizzesQuestionsAudioData
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuizzesQuestionsAudioData @derivedTypes {
|
|
audio: ChallengeNodeChallengeQuizzesQuestionsAudioDataAudio
|
|
transcript: [ChallengeNodeChallengeQuizzesQuestionsAudioDataTranscript]
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuizzesQuestionsAudioDataAudio {
|
|
filename: String
|
|
startTimestamp: Int
|
|
finishTimestamp: Float
|
|
}
|
|
|
|
type ChallengeNodeChallengeQuizzesQuestionsAudioDataTranscript {
|
|
character: String
|
|
text: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeNodules @derivedTypes {
|
|
type: String
|
|
contents: String
|
|
files: [ChallengeNodeChallengeNodulesFiles]
|
|
}
|
|
|
|
type ChallengeNodeChallengeNodulesFiles {
|
|
contents: String
|
|
ext: String
|
|
name: String
|
|
contentsHtml: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeBilibiliIds {
|
|
aid: Int
|
|
bvid: String
|
|
cid: Int
|
|
}
|
|
|
|
type ChallengeNodeChallengeScene @derivedTypes {
|
|
setup: ChallengeNodeChallengeSceneSetup
|
|
commands: [ChallengeNodeChallengeSceneCommands]
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneSetup @derivedTypes {
|
|
background: String
|
|
characters: [ChallengeNodeChallengeSceneSetupCharacters]
|
|
audio: ChallengeNodeChallengeSceneSetupAudio
|
|
alwaysShowDialogue: Boolean
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneSetupCharacters @derivedTypes {
|
|
character: String
|
|
position: ChallengeNodeChallengeSceneSetupCharactersPosition
|
|
opacity: Int
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneSetupCharactersPosition {
|
|
x: Int
|
|
y: Int
|
|
z: Float
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneSetupAudio {
|
|
filename: String
|
|
startTime: Float
|
|
startTimestamp: Float
|
|
finishTimestamp: Float
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneCommands @derivedTypes {
|
|
character: String
|
|
opacity: Int
|
|
startTime: Float
|
|
finishTime: Float
|
|
dialogue: ChallengeNodeChallengeSceneCommandsDialogue
|
|
position: ChallengeNodeChallengeSceneCommandsPosition
|
|
background: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneCommandsDialogue {
|
|
text: String
|
|
align: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeSceneCommandsPosition {
|
|
x: Int
|
|
y: Int
|
|
z: Float
|
|
}
|
|
|
|
type ChallengeNodeChallengeFillInTheBlank @derivedTypes {
|
|
sentence: String
|
|
blanks: [ChallengeNodeChallengeFillInTheBlankBlanks]
|
|
inputType: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeFillInTheBlankBlanks {
|
|
answer: String
|
|
feedback: String
|
|
}
|
|
|
|
type ChallengeNodeChallengeVideoLocaleIds {
|
|
espanol: String
|
|
italian: String
|
|
portuguese: String
|
|
}
|
|
|
|
type ChallengeNodeChallengePrerequisites {
|
|
id: String
|
|
title: String
|
|
}
|
|
|
|
type CertificateNode implements Node @derivedTypes @dontInfer {
|
|
sourceInstanceName: String
|
|
challenge: CertificateNodeChallenge
|
|
}
|
|
|
|
type CertificateNodeChallenge @derivedTypes {
|
|
id: String
|
|
title: String
|
|
certification: String
|
|
challengeType: Int
|
|
tests: [CertificateNodeChallengeTests]
|
|
}
|
|
|
|
type CertificateNodeChallengeTests {
|
|
id: String
|
|
title: String
|
|
}
|