diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..0fd4d473 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +max_line_length = 120 +trim_trailing_whitespace = true + +[*.md] +indent_size = 2 +trim_trailing_whitespace = false + +[*.{cjs,mjs,js,ts,tsx,css,json,json5,yml,yaml}] +indent_size = 2 diff --git a/.env.sample b/.env.sample new file mode 100644 index 00000000..5d62e609 --- /dev/null +++ b/.env.sample @@ -0,0 +1,31 @@ +# Since .env is gitignored, you can use .env.example to build a new `.env` file when you clone the repo. +# Keep this file up-to-date when you add new variables to \`.env\`. + +# This file will be committed to version control, so make sure not to have any secrets in it. +# If you are cloning this repo, create a copy of this file named `.env` and populate it with your secrets. + +# ----------------------------------------------------------------------------- +# Shared +# ----------------------------------------------------------------------------- +# The database URL is used to connect to your PlanetScale database. +DB_HOST='aws.connect.psdb.cloud' +DB_NAME='YOUR_DB_NAME' +DB_USERNAME='' +DB_PASSWORD='pscale_pw_' + +# You can generate the secret via 'openssl rand -base64 32' on Unix +# @see https://next-auth.js.org/configuration/options#secret +AUTH_SECRET='supersecret' + +# Preconfigured Discord OAuth provider, works out-of-the-box +# @see https://next-auth.js.org/providers/discord +AUTH_DISCORD_ID='supersecret' +AUTH_DISCORD_SECRET='supersecret' + +# ----------------------------------------------------------------------------- +# App +# ----------------------------------------------------------------------------- +GOOGLE_ANALYTICS_ID="G-XXXXXXXXXX" +STRIPE_CHECKOUT_URL="https://donate.stripe.com/test_XXXXXXXXXXXXXXXXXX" +SITE_NAME="tatsutakein.jp" +SITE_URL="https://tatsutakein.jp" diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 118b0422..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,18 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -const config = { - root: true, - extends: ['@tatsutakeinjp/eslint-config'], // uses the config in `packages/config/eslint` - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 'latest', - tsconfigRootDir: __dirname, - project: ['./tsconfig.json', './apps/*/tsconfig.json', './packages/*/tsconfig.json'], - }, - settings: { - next: { - rootDir: ['apps/frontend'], - }, - }, -}; - -module.exports = config; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ab1fdfc3..9025a75f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @tatsutakein @tatsutakein-bot[bot] +* @tatsutakein diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 57fb340a..4ebf645d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - この度はバグレポートにご協力いただき、ありがとうございました。 + この度はバグレポートにご協力いただき、ありがとうございます。 - type: checkboxes attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 959db430..ba6f8fd8 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - この度は機能要望にご協力いただき、ありがとうございました。 + この度は機能要望にご協力いただき、ありがとうございます。 - type: checkboxes attributes: @@ -23,7 +23,7 @@ body: description: 機能要望は問題に関連するものですか?説明してください。 placeholder: いつも悔しい思いをするのは validations: - required: true + required: false - type: textarea id: solution diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 56852c46..fc14ae7b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -20,8 +20,6 @@ - このコミット xxxxxxx ( commit hash ) を主にレビューして欲しい --> - - ## レビューレベル - [ ] Lv0: まったく見ないで Approve する diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..1a829936 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: weekly + labels: + - 'dependencies' + - 'ignore for release' diff --git a/.github/labeler.yml b/.github/labeler.yml index 3fbaf495..b497caf1 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,44 +1,84 @@ +# noinspection YAMLSchemaValidation version: 1 labels: # Type labels - - label: "@type/feature" - title: '^(:sparkles:|:tada:|:art:).*' - - label: "@type/improve" - title: '^(:\+1:|:recycle:|:rocket:).*' - - label: "@type/fix" - title: '^:bug:.*' - - label: "@type/docs" - title: '^:books:.*' - files: - - "docs/.+" - label: "@type/build" - title: '^(:wrench:|:up:).*' - files: - - "**/package.json" - - ".tool-versions" - - "tools/.+" + title: '^build(?:\(.+\))?\!?:' + - label: "@type/ci" - title: '^:green_heart:.*' + title: '^ci(?:\(.+\))?\!?:' files: - '\.github/.+' + - "scripts/.+" + - "tools/.+" + + - label: "@type/docs" + title: '^docs:(?:\(.+\))?\!?:' + files: + - "docs/.+" + - "**/README.md$" + + - label: "@type/feature" + title: '^feat:(?:\(.+\))?\!?:' + + - label: "@type/fix" + title: '^fix:(?:\(.+\))?\!?:' + + - label: "@type/improve" + title: '^(style|refactor|perf)(?:\(.+\))?\!?:' + + # Top Package labels + - label: "@apps/backend" + files: + - "apps/backend/.+" - # Package labels - label: "@apps/frontend" files: - "apps/frontend/.+" - - label: "@packages/eslint-config" + + # Core Package labels + - label: "@core/common" + files: + - "core/common/.+" + + - label: "@core/data" files: - - "packages/config/eslint/.+" - - label: "@packages/prettier-config" + - "core/data/.+" + + - label: "@core/database" files: - - "packages/config/prettier/.+" - - label: "@packages/tailwind-config" + - "core/database/.+" + + - label: "@core/datastore" files: - - "packages/config/tailwind/.+" - - label: "@packages/tsconfig" + - "core/datastore/.+" + + - label: "@core/designsystem" + files: + - "core/designsystem/.+" + + - label: "@core/domain" files: - - "packages/config/tsconfig/.+" - - label: "@packages/core/ui" + - "core/domain/.+" + + - label: "@core/model" + files: + - "core/model/.+" + + - label: "@core/network" + files: + - "core/network/.+" + + - label: "@core/testing" + files: + - "core/testing/.+" + + # Feature Package labels + - label: "@feature/top" + files: + - "feature/top/.+" + + - label: "@feature/auth" files: - - "packages/core/ui/.+" + - "feature/auth/.+" diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 00000000..5c369752 --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,103 @@ +# Default labels +- name: "bug" + color: "d73a4a" + description: "Something isn't working" + +- name: "dependencies" + color: "1d76db" + description: "Pull requests that update a dependency file" + +- name: "DO NOT MERGE" + color: "b60205" + +- name: "documentation" + color: "0075ca" + description: "Improvements or additions to documentation" + +- name: "duplicate" + color: "cfd8d7" + description: "This issue or pull request already exists" + +- name: "enhancement" + color: "a2eeef" + description: "New feature or request" + +- name: "good first issue" + color: "fe9b9c" + description: "Good for newcomers" + +- name: "help wanted" + color: "008672" + description: "Extra attention is needed" + +- name: "ignore for release" + color: "bfd4f2" + description: "Exclude from Release Notes" + +- name: "wontfix" + color: "ffffff" + description: "This will not be worked on" + +- name: "work in progress" + color: "e5d19e" + +# Type labels +- name: "@type/ci" + color: "ededed" + +- name: "@type/docs" + color: "ededed" + from_name: "documentation" + +- name: "@type/feature" + color: "ededed" + +- name: "@type/fix" + color: "ededed" + +- name: "@type/improve" + color: "ededed" + +# Top Package labels +- name: "@apps/backend" + color: "e261d6" + description: "Backend development" + +- name: "@apps/frontend" + color: "f89c0f" + description: "Frontend development" + +# Core Package labels +- name: "@core/common" + color: "e99695" + +- name: "@core/data" + color: "50D413" + +- name: "@core/database" + color: "88651D" + +- name: "@core/datastore" + color: "1997D2" + +- name: "@core/designsystem" + color: "936116" + +- name: "@core/domain" + color: "DC79FD" + +- name: "@core/model" + color: "D1A70E" + +- name: "@core/network" + color: "630D81" + +- name: "@core/testing" + color: "29033D" + +# Feature Package labels +- name: "@feature/top" + color: "c22752" + +- name: "@feature/auth" + color: "48360E" diff --git a/.github/release.yml b/.github/release.yml deleted file mode 100644 index 82c32b6d..00000000 --- a/.github/release.yml +++ /dev/null @@ -1,16 +0,0 @@ -# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes - -changelog: - exclude: - labels: - - ignore-for-release - categories: - - title: 🏕 Features - labels: - - '*' - exclude: - labels: - - dependencies - - title: 👒 Dependencies - labels: - - dependencies diff --git a/.github/workflows/assign-author-to-pr.yml b/.github/workflows/assign-author-to-pr.yml index 07738177..cca0e676 100644 --- a/.github/workflows/assign-author-to-pr.yml +++ b/.github/workflows/assign-author-to-pr.yml @@ -1,4 +1,4 @@ -name: Assign author to Pull request +name: "Assign author to Pull request" on: pull_request: @@ -7,7 +7,8 @@ on: jobs: assignAuthor: name: Assign author to PR - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - name: Assign author to PR - uses: technote-space/assign-author@v1 + # https://github.com/marketplace/actions/assign-author + - name: Assign Author + uses: technote-space/assign-author@9558557c5c4816f38bd06176fbc324ba14bb3160 # v1.6.2 diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index a2dab2ce..134ba9ba 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -1,4 +1,4 @@ -name: Checks +name: 'Checks' on: pull_request: @@ -12,57 +12,85 @@ concurrency: jobs: changed: runs-on: ubuntu-22.04 + permissions: + contents: read + pull-requests: read outputs: - frontend: ${{ steps.needs.outputs.frontend }} + actions: ${{ steps.changes.outputs.actions }} + frontend: ${{ steps.changes.outputs.frontend }} steps: + # https://github.com/marketplace/actions/checkout - name: Checkout - uses: actions/checkout@v4.1.1 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + # https://github.com/marketplace/actions/paths-changes-filter - name: Paths Changes Filter - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1 id: changes with: filters: | + actions: + - '.github/workflows/*.yml' frontend: - 'apps/frontend/**/*' - - 'packages/config/**/*' - - 'packages/core/**/*' + - 'packages/**/**/*' + - 'tooling/**/**/*' - 'package.json' - '.tool-versions' - - name: Output Needs - id: needs - run: | - echo "frontend=${{ steps.changes.outputs.frontend == 'true' }}" >> $GITHUB_OUTPUT - frontend: + check-actions: + runs-on: ubuntu-22.04 + needs: changed + if: needs.changed.outputs.actions == 'true' + timeout-minutes: 10 + + steps: + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + # https://github.com/marketplace/actions/actionlint-with-reviewdog + - uses: reviewdog/action-actionlint@6a38513dd4d2e818798c5c73d0870adbb82de4a4 # v1.41.0 + with: + fail_on_error: true + filter_mode: nofilter + level: error + reporter: github-pr-review + + check-frontend: runs-on: ubuntu-22.04 needs: changed if: needs.changed.outputs.frontend == 'true' permissions: contents: read steps: + # https://github.com/marketplace/actions/checkout - name: Checkout - uses: actions/checkout@v4.1.1 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + # https://github.com/marketplace/actions/mise-action - name: mise action - uses: jdx/mise-action@v2.0.2 - - - name: Setup Bun - uses: oven-sh/setup-bun@v1.1.1 + uses: jdx/mise-action@3bc85396a273ed82bba5e53a15174bbf9dba095c # v2.0.2 - name: Create dot env file shell: bash run: | - touch .env.local - echo "NEXT_PUBLIC_GOOGLE_ANALYTICS_ID=\"DUMMY\"" >> .env.local - echo "NEXT_PUBLIC_STRIPE_CHECKOUT_URL=\"https://donate.stripe.com\"" >> .env.local - echo "NEXT_PUBLIC_SITE_NAME=\"tatsutakein.jp\"" >> .env.local - echo "NEXT_PUBLIC_SITE_URL=\"https://tatsutakein.jp\"" >> .env.local - working-directory: ./apps/frontend + cp .env.sample .env.local - name: Clean install using bun shell: bash run: bun install - name: Build - run: bun run build --filter=frontend + shell: bash + run: bun run build + + status-check: + runs-on: ubuntu-22.04 + needs: + - check-actions + - check-frontend + permissions: { } + if: failure() + steps: + - run: exit 1 diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml deleted file mode 100644 index 179b0a2c..00000000 --- a/.github/workflows/dependabot-auto-merge.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: "Dependabot auto-merge" - -on: - pull_request: ~ - -permissions: - contents: write - pull-requests: write - -jobs: - dependabot: - runs-on: ubuntu-22.04 - if: github.actor == 'dependabot[bot]' - steps: - # https://github.com/marketplace/actions/create-github-app-token - - name: Create GitHub App Token - uses: actions/create-github-app-token@v1.8.0 - id: app-token - with: - app-id: ${{ vars.BOT_APP_ID }} - private-key: ${{ secrets.BOT_PRIVATE_KEY }} - - # https://github.com/marketplace/actions/fetch-metadata-from-dependabot-prs - - name: Dependabot metadata - id: metadata - uses: dependabot/fetch-metadata@v1.6.0 - with: - github-token: "${{ steps.app-token.outputs.token }}" - - - name: Enable auto-merge for Dependabot PRs - if: | - steps.metadata.outputs.update-type == 'version-update:semver-patch' || - steps.metadata.outputs.update-type == 'version-update:semver-minor' - run: | - gh pr review --approve "$PR_URL" - gh pr merge --auto --merge "$PR_URL" - env: - PR_URL: ${{ github.event.pull_request.html_url }} - PR_TITLE: ${{ github.event.pull_request.title }} - GH_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml index e5ee044d..e61cc2c5 100644 --- a/.github/workflows/development.yml +++ b/.github/workflows/development.yml @@ -19,13 +19,18 @@ jobs: permissions: contents: read - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: - deploy: ${{ steps.needs.outputs.deploy }} + deploy: ${{ steps.changes.outputs.deploy }} steps: - - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + # https://github.com/marketplace/actions/paths-changes-filter + - name: Paths Changes Filter + uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1 id: changes with: filters: | @@ -36,29 +41,29 @@ jobs: - name: Output Needs id: needs run: | - echo "deploy=${{ env.IS_DISPATCH == 'true' || steps.changes.outputs.deploy == 'true' }}" >> $GITHUB_OUTPUT + echo "deploy=${{ env.IS_DISPATCH == 'true' || steps.changes.outputs.deploy == 'true' }}" >> "$GITHUB_OUTPUT" deploy: permissions: contents: read deployments: write - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: filter if: needs.filter.outputs.deploy == 'true' steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v1 + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Install deps (with cache) - run: bun install + # https://github.com/marketplace/actions/mise-action + - name: mise action + uses: jdx/mise-action@3bc85396a273ed82bba5e53a15174bbf9dba095c # v2.0.2 + # https://github.com/marketplace/actions/vercel-action - name: Deploy to Vercel - uses: amondnet/vercel-action@v25 + uses: amondnet/vercel-action@225d234cfe5340ca1f9a6cd158338126b5b6845f # v25.1.1 id: vercel with: vercel-token: ${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 13906b33..6bb0f52d 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,15 +1,17 @@ name: "Pull Request Labeler" on: - - pull_request_target + pull_request_target: jobs: triage: + runs-on: ubuntu-22.04 permissions: contents: read pull-requests: write - runs-on: ubuntu-latest steps: - - uses: srvaroa/labeler@v1.10.0 + # https://github.com/marketplace/actions/label-manager-for-prs-and-issues-based-on-configurable-conditions + - name: Label manager for PRs and Issues based on configurable conditions + uses: srvaroa/labeler@0381dc470140eaebc6fd87fc4aedc4dd2f39f997 # v1.10.0 env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml new file mode 100644 index 00000000..0f0ce15b --- /dev/null +++ b/.github/workflows/labels.yml @@ -0,0 +1,32 @@ +name: "Labels" + +on: + push: + branches: + - 'main' + paths: + - '.github/labels.yml' + - '.github/workflows/labels.yml' + pull_request: + paths: + - '.github/labels.yml' + - '.github/workflows/labels.yml' + +jobs: + labeler: + runs-on: ubuntu-22.04 + steps: + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + # https://github.com/marketplace/actions/github-labeler + - name: Run Labeler + uses: crazy-max/ghaction-github-labeler@de749cf181958193cb7debf1a9c5bb28922f3e1b # v5.0.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + yaml-file: .github/labels.yml + dry-run: ${{ github.event_name == 'pull_request' }} + exclude: | + help* + *issue diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3986d353..93d87a1f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -14,12 +14,17 @@ jobs: permissions: contents: read - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: - deploy: ${{ steps.needs.outputs.deploy }} + deploy: ${{ steps.changes.outputs.deploy }} steps: - - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + # https://github.com/marketplace/actions/paths-changes-filter + - name: Paths Changes Filter + uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1 id: changes with: filters: | @@ -27,10 +32,6 @@ jobs: - 'apps/**/*' - 'packages/**/*' - 'package.json' - - name: Output Needs - id: needs - run: | - echo "deploy=${{ steps.changes.outputs.deploy == 'true' }}" >> $GITHUB_OUTPUT deploy: permissions: @@ -38,22 +39,25 @@ jobs: deployments: write pull-requests: write - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: filter if: needs.filter.outputs.deploy == 'true' steps: - - name: Checkout repository - uses: actions/checkout@v4 + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Setup Bun - uses: oven-sh/setup-bun@v1 + # https://github.com/marketplace/actions/mise-action + - name: mise action + uses: jdx/mise-action@3bc85396a273ed82bba5e53a15174bbf9dba095c # v2.0.2 - - name: Install deps (with cache) + - name: Install deps run: bun install + # https://github.com/marketplace/actions/vercel-action - name: Deploy to Vercel - uses: amondnet/vercel-action@v25 + uses: amondnet/vercel-action@225d234cfe5340ca1f9a6cd158338126b5b6845f # v25.1.1 id: vercel with: vercel-token: ${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 7a6ab7bf..9a879799 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -15,20 +15,23 @@ jobs: contents: read deployments: write - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - name: Checkout repository - uses: actions/checkout@v4 + # https://github.com/marketplace/actions/checkout + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Setup Bun - uses: oven-sh/setup-bun@v1 + # https://github.com/marketplace/actions/mise-action + - name: mise action + uses: jdx/mise-action@3bc85396a273ed82bba5e53a15174bbf9dba095c # v2.0.2 - - name: Install deps (with cache) + - name: Install deps run: bun install + # https://github.com/marketplace/actions/vercel-action - name: Deploy to Vercel - uses: amondnet/vercel-action@v25 + uses: amondnet/vercel-action@225d234cfe5340ca1f9a6cd158338126b5b6845f # v25.1.1 id: vercel with: vercel-token: ${{ secrets.VERCEL_TOKEN }} diff --git a/.gitignore b/.gitignore index 7a4c9821..4e99d854 100644 --- a/.gitignore +++ b/.gitignore @@ -13,17 +13,52 @@ coverage out/ build -# misc +# backend + +dist/ +*.tsbuildinfo + +# Miscellaneous +*.class +*.log +*.pyc +*.swp .DS_Store *.pem +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/* +# Keep the project icon. +!/.idea/icon.svg + +# Editor User Setting Files +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets +*.code-workspace +!default.code-workspace +.classpath +.project +!.cspell # debug npm-debug.log* yarn-debug.log* yarn-error.log* -.pnpm-debug.log* # local env files +.env .env.local .env.development.local .env.test.local @@ -32,8 +67,5 @@ yarn-error.log* # turbo .turbo -# IntelliJ -.idea - -# VSCode -.vscode +# vercel +.vercel diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 00000000..e1b738db --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,5 @@ +#!/usr/bin/env sh + +. "$(dirname -- "$0")/_/husky.sh" + +bun commitlint --edit "${1}" diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 00000000..7d15d2dc --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/.npmrc b/.npmrc index ded82e2f..abe2247b 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ -auto-install-peers = true +node-linker=hoisted +auto-install-peers=true diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 4e39d305..00000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -.github - -# frontend -.next -gql diff --git a/.tool-versions b/.tool-versions index 2442e379..c7f772fe 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1 @@ -nodejs 20.10.0 -bun 1.0.21 +bun 1.0.28 diff --git a/LICENSE b/LICENSE index 6b24d680..6f1e1aaf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 tatsutakein +Copyright (c) 2024 @tatsutakein Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile index 99e3c033..b16cfa17 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ help: @grep -E '^[a-zA-Z_-]+:.*?# .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":[^#]*? #| #"}; {printf "%-57s%s\n", $$1 $$3, $$2}' -.PHONY: bs -bs: # Bootstrap to start development. - @./tools/bootstrap.sh +.PHONY: bootstrap bs +bootstrap: # Bootstrap to start development. + @./scripts/bootstrap.sh +bs: # Short hand for the bootstrap command. + @$(MAKE) bootstrap diff --git a/README.md b/README.md index 70c17cab..7a44e4fc 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,76 @@ -tatsutakein.jp +[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) +[![dependabot](https://img.shields.io/badge/maintaied_with-dependabot-blue?logo=dependabot)](https://docs.github.com/en/code-security/dependabot) +[![renovate](https://img.shields.io/badge/maintaied%20with-renovate-blue?logo=renovatebot)](https://app.renovatebot.com/dashboard) +![GitHub last commit (branch)](https://img.shields.io/github/last-commit/tatsutakein/project-boilerplate) # tatsutakein.jp -https://tatsutakein.jp - -## Tech Stacks +tatsutakein.jp -### [Turborepo](https://turbo.build/repo) +## Features -### [Next.js](https://nextjs.org/) +https://tatsutakein.jp -### [Tailwind CSS](https://tailwindcss.com/) +TBD -## GetStarted +### Screenshots -以下の手順を踏んで開発に参加しましょう。 +TBD -### 1. Bootstrap +## Get Started -以下のコマンドを実行して開発環境を整えます。 +After git clone, run the following command ```shell $ make bs ``` -### 2. `bun run dev` +What is being processed by bootstrap is shown below. -`bun run dev`でローカルサーバーを立ち上げます。 -表示された URL にアクセスすると、サイトが表示されます。 +- Configuring git commit message templates +- Installation of various tools by mise +- Installation of dependencies by bun +- Installation of husky by bun + +### Add template + +You can generate code from a template using plop by executing the following command. ```shell -$ bun run dev +$ bun plop ``` +## Development Environment + +TBD + +## Architecture + +- [Turborepo](https://turbo.build/repo) +- [Next.js](https://nextjs.org/) +- [Tailwind CSS](https://tailwindcss.com/) + +## Build + +TBD + +## Testing + +TBD + +## Performance + +TBD + +## Contributors + +Thanks to our wonderful contributors! + + + Contributors + + ## License -This software is provided under the [MIT License](LICENSE). +tatsutakein.jp is distributed under the terms of the MIT License. See the [license](LICENSE) for more +information. diff --git a/apps/frontend/.gitignore b/apps/frontend/.gitignore index da83c915..fd3dbb57 100644 --- a/apps/frontend/.gitignore +++ b/apps/frontend/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +.yarn/install-state.gz # testing /coverage @@ -25,14 +26,11 @@ yarn-debug.log* yarn-error.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local +.env*.local # vercel .vercel -# graphql-codegen -/src/gql/ -/graphql.schema.json +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/frontend/README.md b/apps/frontend/README.md index 2bf496f5..c4033664 100644 --- a/apps/frontend/README.md +++ b/apps/frontend/README.md @@ -1,36 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + ## Getting Started First, run the development server: ```bash +npm run dev +# or yarn dev +# or +pnpm dev +# or +bun dev ``` Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. - -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed -on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited -in `pages/api/hello.js`. +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated -as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. ## Learn More To learn more about Next.js, take a look at the following resources: - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn/foundations/about-nextjs) - an interactive Next.js tutorial. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions -are welcome! +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! ## Deploy on Vercel -The easiest way to deploy your Next.js app is to use -the [Vercel Platform](https://vercel.com/new?utm_source=github.com&utm_medium=referral&utm_campaign=turborepo-readme) -from the creators of Next.js. +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/apps/frontend/codegen.ts b/apps/frontend/codegen.ts index 38bc1fd0..d9e11049 100644 --- a/apps/frontend/codegen.ts +++ b/apps/frontend/codegen.ts @@ -1,24 +1,23 @@ -import type { CodegenConfig } from '@graphql-codegen/cli'; +import type { CodegenConfig } from "@graphql-codegen/cli"; const config: CodegenConfig = { overwrite: true, - schema: - 'https://ap-northeast-1.cdn.hygraph.com/content/clcfsbgaq0fxx01ug951f007y/master', - documents: ['src/**/*.tsx', 'src/**/*.ts'], + schema: "https://tatsutakeinjp.hasura.app/v1/graphql", + documents: ["src/**/*.tsx", "src/**/*.ts"], generates: { - 'src/gql/': { - preset: 'client', + "src/gql/": { + preset: "client", plugins: [], presetConfig: { - gqlTagName: 'gql', + gqlTagName: "gql", }, }, - './graphql.schema.json': { - plugins: ['introspection'], + "./graphql.schema.json": { + plugins: ["introspection"], }, }, hooks: { - afterAllFileWrite: ['prettier --write'], + afterAllFileWrite: ["prettier --write"], }, }; diff --git a/apps/frontend/graphql.schema.json b/apps/frontend/graphql.schema.json new file mode 100644 index 00000000..1938595f --- /dev/null +++ b/apps/frontend/graphql.schema.json @@ -0,0 +1,7434 @@ +{ + "__schema": { + "queryType": { + "name": "query_root" + }, + "mutationType": null, + "subscriptionType": { + "name": "subscription_root" + }, + "types": [ + { + "kind": "SCALAR", + "name": "Boolean", + "description": "The `Boolean` scalar type represents `true` or `false`.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Int", + "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "Int_comparison_exp", + "description": "Boolean expression to compare columns of type \"Int\". All fields are combined with logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_eq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_in", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_is_null", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_neq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nin", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "String", + "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "description": "Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_eq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_ilike", + "description": "does the column match the given case-insensitive pattern", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_in", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_iregex", + "description": "does the column match the given POSIX regular expression, case insensitive", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_is_null", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_like", + "description": "does the column match the given pattern", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_neq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nilike", + "description": "does the column NOT match the given case-insensitive pattern", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nin", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_niregex", + "description": "does the column NOT match the given POSIX regular expression, case insensitive", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nlike", + "description": "does the column NOT match the given pattern", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nregex", + "description": "does the column NOT match the given POSIX regular expression, case sensitive", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nsimilar", + "description": "does the column NOT match the given SQL regular expression", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_regex", + "description": "does the column match the given POSIX regular expression, case sensitive", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_similar", + "description": "does the column match the given SQL regular expression", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Directive", + "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isRepeatable", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "locations", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "__DirectiveLocation", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "args", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "__DirectiveLocation", + "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "QUERY", + "description": "Location adjacent to a query operation.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "MUTATION", + "description": "Location adjacent to a mutation operation.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SUBSCRIPTION", + "description": "Location adjacent to a subscription operation.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FIELD", + "description": "Location adjacent to a field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FRAGMENT_DEFINITION", + "description": "Location adjacent to a fragment definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FRAGMENT_SPREAD", + "description": "Location adjacent to a fragment spread.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INLINE_FRAGMENT", + "description": "Location adjacent to an inline fragment.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "VARIABLE_DEFINITION", + "description": "Location adjacent to a variable definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SCHEMA", + "description": "Location adjacent to a schema definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SCALAR", + "description": "Location adjacent to a scalar definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "OBJECT", + "description": "Location adjacent to an object type definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FIELD_DEFINITION", + "description": "Location adjacent to a field definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ARGUMENT_DEFINITION", + "description": "Location adjacent to an argument definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INTERFACE", + "description": "Location adjacent to an interface definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "UNION", + "description": "Location adjacent to a union definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM", + "description": "Location adjacent to an enum definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM_VALUE", + "description": "Location adjacent to an enum value definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_OBJECT", + "description": "Location adjacent to an input object type definition.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_FIELD_DEFINITION", + "description": "Location adjacent to an input object field definition.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__EnumValue", + "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Field", + "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "args", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__InputValue", + "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "defaultValue", + "description": "A GraphQL-formatted string representing the default value for this input value.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Schema", + "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", + "fields": [ + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "types", + "description": "A list of all types supported by this server.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "queryType", + "description": "The type that query operations will be rooted at.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mutationType", + "description": "If this server supports mutation, the type that mutation operations will be rooted at.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionType", + "description": "If this server support subscription, the type that subscription operations will be rooted at.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "directives", + "description": "A list of all directives supported by this server.", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Directive", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Type", + "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", + "fields": [ + { + "name": "kind", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "__TypeKind", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "specifiedByURL", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fields", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Field", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "interfaces", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "possibleTypes", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "enumValues", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__EnumValue", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "inputFields", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ofType", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "__TypeKind", + "description": "An enum describing what kind of type a given `__Type` is.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "SCALAR", + "description": "Indicates this type is a scalar.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "OBJECT", + "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INTERFACE", + "description": "Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "UNION", + "description": "Indicates this type is a union. `possibleTypes` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM", + "description": "Indicates this type is an enum. `enumValues` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_OBJECT", + "description": "Indicates this type is an input object. `inputFields` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "LIST", + "description": "Indicates this type is a list. `ofType` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NON_NULL", + "description": "Indicates this type is a non-null. `ofType` is a valid field.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "assets", + "description": "アセット", + "fields": [ + { + "name": "created_at", + "description": "作成日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "file_name", + "description": "説明文", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": "高さ", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "アセットID", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mime_type", + "description": "MimeType", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "posts_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "size", + "description": "ファイルサイズ", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "アセットソース", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": "幅", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "description": "Boolean expression to filter rows from the table \"assets\". All fields are combined with a logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_and", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_not", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_or", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "file_name", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "smallint_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mime_type", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "size", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "Int_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "smallint_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "assets_order_by", + "description": "Ordering options when selecting data from \"assets\".", + "fields": null, + "inputFields": [ + { + "name": "created_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "file_name", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mime_type", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts_aggregate", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_aggregate_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "size", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "assets_select_column", + "description": "select columns of table \"assets\"", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "created_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "file_name", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mime_type", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "size", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "assets_stream_cursor_input", + "description": "Streaming cursor of the table \"assets\"", + "fields": null, + "inputFields": [ + { + "name": "initial_value", + "description": "Stream column input with initial value", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "assets_stream_cursor_value_input", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ordering", + "description": "cursor ordering", + "type": { + "kind": "ENUM", + "name": "cursor_ordering", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "assets_stream_cursor_value_input", + "description": "Initial value of the column from where the streaming should start", + "fields": null, + "inputFields": [ + { + "name": "created_at", + "description": "作成日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "file_name", + "description": "説明文", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "height", + "description": "高さ", + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "アセットID", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mime_type", + "description": "MimeType", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "size", + "description": "ファイルサイズ", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "url", + "description": "アセットソース", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "width", + "description": "幅", + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "cursor_ordering", + "description": "ordering argument of a cursor", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "ASC", + "description": "ascending ordering of the cursor", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DESC", + "description": "descending ordering of the cursor", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "order_by", + "description": "column ordering options", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "asc", + "description": "in ascending order, nulls last", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "asc_nulls_first", + "description": "in ascending order, nulls first", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "asc_nulls_last", + "description": "in ascending order, nulls last", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "desc", + "description": "in descending order, nulls first", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "desc_nulls_first", + "description": "in descending order, nulls first", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "desc_nulls_last", + "description": "in descending order, nulls last", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "post_tags", + "description": "ポストとタグの関連付け", + "fields": [ + { + "name": "post", + "description": "An object relationship", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_id", + "description": "ポストID", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": "An object relationship", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "tags", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "タグID", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_aggregate_order_by", + "description": "order by aggregate values of table \"post_tags\"", + "fields": null, + "inputFields": [ + { + "name": "count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "max", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_max_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "min", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_min_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "description": "Boolean expression to filter rows from the table \"post_tags\". All fields are combined with a logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_and", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_not", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_or", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_max_order_by", + "description": "order by max() on columns of table \"post_tags\"", + "fields": null, + "inputFields": [ + { + "name": "post_id", + "description": "ポストID", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "タグID", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_min_order_by", + "description": "order by min() on columns of table \"post_tags\"", + "fields": null, + "inputFields": [ + { + "name": "post_id", + "description": "ポストID", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "タグID", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_order_by", + "description": "Ordering options when selecting data from \"post_tags\".", + "fields": null, + "inputFields": [ + { + "name": "post", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "tags_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "post_tags_select_column", + "description": "select columns of table \"post_tags\"", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "post_id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_stream_cursor_input", + "description": "Streaming cursor of the table \"post_tags\"", + "fields": null, + "inputFields": [ + { + "name": "initial_value", + "description": "Stream column input with initial value", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_stream_cursor_value_input", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ordering", + "description": "cursor ordering", + "type": { + "kind": "ENUM", + "name": "cursor_ordering", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "post_tags_stream_cursor_value_input", + "description": "Initial value of the column from where the streaming should start", + "fields": null, + "inputFields": [ + { + "name": "post_id", + "description": "ポストID", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "タグID", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "posts", + "description": "ポスト", + "fields": [ + { + "name": "content", + "description": "内容", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "coverImage", + "description": "An object relationship", + "args": [], + "type": { + "kind": "OBJECT", + "name": "assets", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": "カバー画像", + "args": [], + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": "作成日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "削除日時", + "args": [], + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": "抜粋", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ポスト ID", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "post_tags_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": "公開日時", + "args": [], + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo", + "description": "An object relationship", + "args": [], + "type": { + "kind": "OBJECT", + "name": "seos", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": "SEO", + "args": [], + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": "ラベル文字列", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "タイトル", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_aggregate_order_by", + "description": "order by aggregate values of table \"posts\"", + "fields": null, + "inputFields": [ + { + "name": "count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "max", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_max_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "min", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_min_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "description": "Boolean expression to filter rows from the table \"posts\". All fields are combined with a logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_and", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_not", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_or", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "content", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "coverImage", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_max_order_by", + "description": "order by max() on columns of table \"posts\"", + "fields": null, + "inputFields": [ + { + "name": "content", + "description": "内容", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": "カバー画像", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": "作成日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "削除日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": "抜粋", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ポスト ID", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": "公開日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": "SEO", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": "ラベル文字列", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "タイトル", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_min_order_by", + "description": "order by min() on columns of table \"posts\"", + "fields": null, + "inputFields": [ + { + "name": "content", + "description": "内容", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": "カバー画像", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": "作成日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "削除日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": "抜粋", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ポスト ID", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": "公開日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": "SEO", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": "ラベル文字列", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "タイトル", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_order_by", + "description": "Ordering options when selecting data from \"posts\".", + "fields": null, + "inputFields": [ + { + "name": "content", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "coverImage", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "assets_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags_aggregate", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_aggregate_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "seos_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "posts_select_column", + "description": "select columns of table \"posts\"", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "content", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_stream_cursor_input", + "description": "Streaming cursor of the table \"posts\"", + "fields": null, + "inputFields": [ + { + "name": "initial_value", + "description": "Stream column input with initial value", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_stream_cursor_value_input", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ordering", + "description": "cursor ordering", + "type": { + "kind": "ENUM", + "name": "cursor_ordering", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "posts_stream_cursor_value_input", + "description": "Initial value of the column from where the streaming should start", + "fields": null, + "inputFields": [ + { + "name": "content", + "description": "内容", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cover_image_id", + "description": "カバー画像", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": "作成日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "削除日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "excerpt", + "description": "抜粋", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ポスト ID", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "published_at", + "description": "公開日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seo_id", + "description": "SEO", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "slug", + "description": "ラベル文字列", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "タイトル", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "query_root", + "description": null, + "fields": [ + { + "name": "assets", + "description": "fetch data from the table: \"assets\"", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "assets_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "assets_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "assets", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "assets_by_pk", + "description": "fetch data from the table: \"assets\" using primary key columns", + "args": [ + { + "name": "id", + "description": "アセットID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "assets", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "post_tags_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags_by_pk", + "description": "fetch data from the table: \"post_tags\" using primary key columns", + "args": [ + { + "name": "post_id", + "description": "ポストID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "タグID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "posts_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts_by_pk", + "description": "fetch data from the table: \"posts\" using primary key columns", + "args": [ + { + "name": "id", + "description": "ポスト ID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seos", + "description": "fetch data from the table: \"seos\"", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "seos_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "seos_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "seos", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seos_by_pk", + "description": "fetch data from the table: \"seos\" using primary key columns", + "args": [ + { + "name": "id", + "description": "SEO ID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "seos", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tags", + "description": "fetch data from the table: \"tags\"", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "tags_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "tags_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tags_by_pk", + "description": "fetch data from the table: \"tags\" using primary key columns", + "args": [ + { + "name": "id", + "description": "タグID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "tags", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "seos", + "description": "SEO", + "fields": [ + { + "name": "created_at", + "description": "作成日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "削除日時", + "args": [], + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "説明文", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "SEO ID", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "og_image_url", + "description": "カスタム OG 画像 URL ( 1280✕720 )", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "posts_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "タイトル", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "description": "Boolean expression to filter rows from the table \"seos\". All fields are combined with a logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_and", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_not", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_or", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "og_image_url", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "seos_order_by", + "description": "Ordering options when selecting data from \"seos\".", + "fields": null, + "inputFields": [ + { + "name": "created_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "og_image_url", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts_aggregate", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_aggregate_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "seos_select_column", + "description": "select columns of table \"seos\"", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "created_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "og_image_url", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "seos_stream_cursor_input", + "description": "Streaming cursor of the table \"seos\"", + "fields": null, + "inputFields": [ + { + "name": "initial_value", + "description": "Stream column input with initial value", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "seos_stream_cursor_value_input", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ordering", + "description": "cursor ordering", + "type": { + "kind": "ENUM", + "name": "cursor_ordering", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "seos_stream_cursor_value_input", + "description": "Initial value of the column from where the streaming should start", + "fields": null, + "inputFields": [ + { + "name": "created_at", + "description": "作成日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deleted_at", + "description": "削除日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "説明文", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "SEO ID", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "og_image_url", + "description": "カスタム OG 画像 URL ( 1280✕720 )", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "タイトル", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "smallint", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "smallint_comparison_exp", + "description": "Boolean expression to compare columns of type \"smallint\". All fields are combined with logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_eq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_in", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_is_null", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_neq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nin", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "smallint", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "subscription_root", + "description": null, + "fields": [ + { + "name": "assets", + "description": "fetch data from the table: \"assets\"", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "assets_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "assets_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "assets", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "assets_by_pk", + "description": "fetch data from the table: \"assets\" using primary key columns", + "args": [ + { + "name": "id", + "description": "アセットID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "assets", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "assets_stream", + "description": "fetch data from the table in a streaming manner: \"assets\"", + "args": [ + { + "name": "batch_size", + "description": "maximum number of rows returned in a single batch", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cursor", + "description": "cursor to stream the results returned by the query", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "assets_stream_cursor_input", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "assets_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "assets", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "post_tags_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags_by_pk", + "description": "fetch data from the table: \"post_tags\" using primary key columns", + "args": [ + { + "name": "post_id", + "description": "ポストID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag_id", + "description": "タグID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags_stream", + "description": "fetch data from the table in a streaming manner: \"post_tags\"", + "args": [ + { + "name": "batch_size", + "description": "maximum number of rows returned in a single batch", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cursor", + "description": "cursor to stream the results returned by the query", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_stream_cursor_input", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "posts_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts_by_pk", + "description": "fetch data from the table: \"posts\" using primary key columns", + "args": [ + { + "name": "id", + "description": "ポスト ID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "posts_stream", + "description": "fetch data from the table in a streaming manner: \"posts\"", + "args": [ + { + "name": "batch_size", + "description": "maximum number of rows returned in a single batch", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cursor", + "description": "cursor to stream the results returned by the query", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "posts_stream_cursor_input", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "posts_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "posts", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seos", + "description": "fetch data from the table: \"seos\"", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "seos_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "seos_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "seos", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seos_by_pk", + "description": "fetch data from the table: \"seos\" using primary key columns", + "args": [ + { + "name": "id", + "description": "SEO ID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "seos", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "seos_stream", + "description": "fetch data from the table in a streaming manner: \"seos\"", + "args": [ + { + "name": "batch_size", + "description": "maximum number of rows returned in a single batch", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cursor", + "description": "cursor to stream the results returned by the query", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "seos_stream_cursor_input", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "seos_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "seos", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tags", + "description": "fetch data from the table: \"tags\"", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "tags_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "tags_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tags_by_pk", + "description": "fetch data from the table: \"tags\" using primary key columns", + "args": [ + { + "name": "id", + "description": "タグID", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "tags", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tags_stream", + "description": "fetch data from the table in a streaming manner: \"tags\"", + "args": [ + { + "name": "batch_size", + "description": "maximum number of rows returned in a single batch", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "cursor", + "description": "cursor to stream the results returned by the query", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "tags_stream_cursor_input", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "tags", + "description": "タグ", + "fields": [ + { + "name": "created_at", + "description": "作成日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "説明文", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "タグID", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags", + "description": "An array relationship", + "args": [ + { + "name": "distinct_on", + "description": "distinct select on columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "post_tags_select_column", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "limit", + "description": "limit the number of rows returned", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "offset", + "description": "skip the first n rows. Use only with order_by", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "order_by", + "description": "sort the rows by one or more columns", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "post_tags_order_by", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "where", + "description": "filter the rows returned", + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "post_tags", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": "タグ", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "description": "Boolean expression to filter rows from the table \"tags\". All fields are combined with a logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_and", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_not", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_or", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "tags_bool_exp", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_bool_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "tags_order_by", + "description": "Ordering options when selecting data from \"tags\".", + "fields": null, + "inputFields": [ + { + "name": "created_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "post_tags_aggregate", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "post_tags_aggregate_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "tags_select_column", + "description": "select columns of table \"tags\"", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "created_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "tags_stream_cursor_input", + "description": "Streaming cursor of the table \"tags\"", + "fields": null, + "inputFields": [ + { + "name": "initial_value", + "description": "Stream column input with initial value", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "tags_stream_cursor_value_input", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ordering", + "description": "cursor ordering", + "type": { + "kind": "ENUM", + "name": "cursor_ordering", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "tags_stream_cursor_value_input", + "description": "Initial value of the column from where the streaming should start", + "fields": null, + "inputFields": [ + { + "name": "created_at", + "description": "作成日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": "説明文", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "タグID", + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tag", + "description": "タグ", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_at", + "description": "更新日時", + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "timestamptz", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "timestamptz_comparison_exp", + "description": "Boolean expression to compare columns of type \"timestamptz\". All fields are combined with logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_eq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_in", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_is_null", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_neq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nin", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "timestamptz", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "uuid", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "uuid_comparison_exp", + "description": "Boolean expression to compare columns of type \"uuid\". All fields are combined with logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_eq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_in", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_is_null", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_neq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nin", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "uuid", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + } + ], + "directives": [ + { + "name": "cached", + "description": "whether this query should be cached (Hasura Cloud only)", + "isRepeatable": false, + "locations": ["QUERY"], + "args": [ + { + "name": "refresh", + "description": "refresh the cache entry", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": "false", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ttl", + "description": "measured in seconds", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": "60", + "isDeprecated": false, + "deprecationReason": null + } + ] + }, + { + "name": "include", + "description": "whether this query should be included", + "isRepeatable": false, + "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], + "args": [ + { + "name": "if", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ] + }, + { + "name": "skip", + "description": "whether this query should be skipped", + "isRepeatable": false, + "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], + "args": [ + { + "name": "if", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ] + } + ] + } +} diff --git a/apps/frontend/next.config.mjs b/apps/frontend/next.config.mjs index 410275dd..d3d8f3b8 100644 --- a/apps/frontend/next.config.mjs +++ b/apps/frontend/next.config.mjs @@ -1,19 +1,37 @@ -// Importing env files here to validate on build -import './src/env.mjs'; +import { fileURLToPath } from "url"; +import _jiti from "jiti"; -/** @type {import('next').NextConfig} */ +const jiti = _jiti(fileURLToPath(import.meta.url)); + +// Import env files to validate at build time. Use jiti so we can load .ts files in here. +jiti("./src/env"); +jiti("@tatsutakeinjp/auth/env"); + +/** @type {import("next").NextConfig} */ const config = { reactStrictMode: true, + /** Enables hot reloading for local packages without a build step */ - transpilePackages: ['@tatsutakeinjp/core-ui'], + transpilePackages: [ + "@tatsutakeinjp/api", + "@tatsutakeinjp/auth", + "@tatsutakeinjp/db", + "@tatsutakeinjp/ui", + "@tatsutakeinjp/validators" + ], + /** We already do linting and typechecking as separate tasks in CI */ eslint: { ignoreDuringBuilds: true }, typescript: { ignoreBuildErrors: true }, images: { - domains: [ - 'media.graphassets.com', - ], - }, + remotePatterns: [ + { + protocol: "https", + hostname: "dk0taoori0pbd.cloudfront.net", + port: "" + } + ] + } }; export default config; diff --git a/apps/frontend/package.json b/apps/frontend/package.json index a255b3c6..c1273c54 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -1,67 +1,71 @@ { - "name": "frontend", - "version": "1.0.0", + "name": "@tatsutakeinjp/frontend", + "version": "0.1.0", "private": true, - "license": "MIT", + "type": "module", "scripts": { + "build": "bun codegen && bun with-env next build", "clean": "git clean -xdf .next .turbo node_modules", - "dev": "bun codegen && next dev", - "build": "bun codegen && next build", - "start": "next start", - "lint": "next lint", - "codegen": "graphql-codegen --config codegen.ts", - "codegen:watch": "graphql-codegen --config codegen.ts --watch" + "dev": "bun with-env next dev", + "format": "prettier --check . --ignore-path ../../.gitignore", + "lint": "dotenv -v SKIP_ENV_VALIDATION=1 next lint", + "start": "bun with-env next start", + "typecheck": "tsc --noEmit", + "with-env": "dotenv -e ../../.env --", + "codegen": "graphql-codegen-esm --config codegen.ts", + "codegen:watch": "graphql-codegen-esm --config codegen.ts --watch" }, "dependencies": { - "@apollo/client": "3.8.9", - "@apollo/experimental-nextjs-app-support": "^0.6.0", - "@fortawesome/fontawesome-svg-core": "6.5.1", - "@fortawesome/free-brands-svg-icons": "6.5.1", - "@fortawesome/free-regular-svg-icons": "6.5.1", - "@fortawesome/free-solid-svg-icons": "6.5.1", - "@fortawesome/react-fontawesome": "0.2.0", - "@headlessui/react": "1.7.18", - "@radix-ui/react-dropdown-menu": "^2.0.6", - "@radix-ui/react-icons": "^1.3.0", - "@t3-oss/env-nextjs": "^0.7.1", - "@tailwindcss/line-clamp": "0.4.4", - "@tatsutakeinjp/core-ui": "workspace:*", - "@types/react-syntax-highlighter": "15.5.11", - "@vercel/analytics": "^1.1.1", - "clsx": "2.1.0", - "date-fns": "3.2.0", + "@tatsutakeinjp/api": "workspace:*", + "@tatsutakeinjp/auth": "workspace:*", + "@tatsutakeinjp/db": "workspace:*", + "@tatsutakeinjp/ui": "workspace:*", + "@tatsutakeinjp/validators": "workspace:*", + "@t3-oss/env-nextjs": "0.9.2", + "@tanstack/react-query": "5.21.7", + "date-fns": "2.30.0", "date-fns-tz": "2.0.0", + "geist": "1.2.2", "graphql": "16.8.1", - "graphql-request": "^6.1.0", - "next": "14.0.4", + "graphql-request": "6.1.0", + "next": "14.1.0", "react": "18.2.0", - "react-copy-to-clipboard": "5.1.0", "react-dom": "18.2.0", - "react-hook-form": "7.49.3", - "react-markdown": "9.0.1", - "react-syntax-highlighter": "15.5.0", - "recoil": "0.7.7", - "zod": "^3.22.4" + "superjson": "2.2.1", + "zod": "3.22.4" }, "devDependencies": { - "@babel/core": "7.23.7", - "@graphql-codegen/cli": "5.0.0", - "@graphql-codegen/client-preset": "4.1.0", - "@graphql-codegen/introspection": "4.0.0", + "@fortawesome/free-brands-svg-icons": "6.5.1", + "@fortawesome/react-fontawesome": "0.2.0", + "@graphql-codegen/cli": "5.0.2", + "@graphql-codegen/client-preset": "4.2.2", + "@graphql-codegen/introspection": "4.0.2", "@graphql-typed-document-node/core": "3.2.0", - "@tailwindcss/line-clamp": "^0.4.4", + "@parcel/watcher": "2.4.0", + "@tatsutakeinjp/eslint-config": "workspace:*", + "@tatsutakeinjp/prettier-config": "workspace:*", "@tatsutakeinjp/tailwind-config": "workspace:*", - "@types/gtag.js": "^0.0.18", - "@types/jest": "29.5.11", - "@types/node": "20.11.1", - "@types/react": "18.2.48", - "@types/react-copy-to-clipboard": "5.0.7", - "@types/react-dom": "18.2.18", - "autoprefixer": "10.4.16", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", - "postcss": "8.4.33", - "tailwindcss": "^3.3.5", - "typescript": "^5.2.2" - } + "@tatsutakeinjp/tsconfig": "workspace:*", + "@types/node": "20.11.19", + "@types/react": "18.2.56", + "@types/react-dom": "18.2.19", + "dotenv-cli": "7.3.0", + "eslint": "8.56.0", + "framer-motion": "11.0.5", + "jiti": "1.21.0", + "prettier": "3.2.5", + "sugar-high": "0.6.0", + "tailwindcss": "3.4.1", + "ts-node": "10.9.2", + "typescript": "5.3.3" + }, + "eslintConfig": { + "root": true, + "extends": [ + "@tatsutakeinjp/eslint-config/base", + "@tatsutakeinjp/eslint-config/nextjs", + "@tatsutakeinjp/eslint-config/react" + ] + }, + "prettier": "@tatsutakeinjp/prettier-config" } diff --git a/apps/frontend/postcss.config.cjs b/apps/frontend/postcss.config.cjs new file mode 100644 index 00000000..12a703d9 --- /dev/null +++ b/apps/frontend/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/apps/frontend/postcss.config.js b/apps/frontend/postcss.config.js deleted file mode 100644 index 07aa434b..00000000 --- a/apps/frontend/postcss.config.js +++ /dev/null @@ -1,9 +0,0 @@ -// If you want to use other PostCSS plugins, see the following: -// https://tailwindcss.com/docs/using-with-preprocessors - -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/apps/frontend/public/favicon.ico b/apps/frontend/public/favicon.ico new file mode 100644 index 00000000..bb363b89 Binary files /dev/null and b/apps/frontend/public/favicon.ico differ diff --git a/apps/frontend/public/next.svg b/apps/frontend/public/next.svg new file mode 100644 index 00000000..5174b28c --- /dev/null +++ b/apps/frontend/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/frontend/public/vercel.svg b/apps/frontend/public/vercel.svg new file mode 100644 index 00000000..d2f84222 --- /dev/null +++ b/apps/frontend/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/frontend/src/app/ApolloClient.ts b/apps/frontend/src/app/ApolloClient.ts deleted file mode 100644 index 7de62a07..00000000 --- a/apps/frontend/src/app/ApolloClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApolloClient, HttpLink, InMemoryCache } from '@apollo/client'; -import { registerApolloClient } from '@apollo/experimental-nextjs-app-support/rsc'; - -export const { getClient } = registerApolloClient(() => { - return new ApolloClient({ - cache: new InMemoryCache(), - link: new HttpLink({ - uri: 'https://ap-northeast-1.cdn.hygraph.com/content/clcfsbgaq0fxx01ug951f007y/master', - // you can disable result caching here if you want to - // (this does not work if you are rendering your page with `export const dynamic = "force-static"`) - // fetchOptions: { cache: "no-store" }, - }), - }); -}); diff --git a/apps/frontend/src/app/_components/assets/index.ts b/apps/frontend/src/app/_components/assets/index.ts new file mode 100644 index 00000000..c854b2a9 --- /dev/null +++ b/apps/frontend/src/app/_components/assets/index.ts @@ -0,0 +1 @@ +export * from "./profile-image"; diff --git a/apps/frontend/src/app/_components/assets/profile-image.tsx b/apps/frontend/src/app/_components/assets/profile-image.tsx new file mode 100644 index 00000000..88330af0 --- /dev/null +++ b/apps/frontend/src/app/_components/assets/profile-image.tsx @@ -0,0 +1,11 @@ +import type { CSSProperties, JSX } from "react"; +import Image from "next/image"; + +interface Props { + className?: string; + style?: CSSProperties; +} + +export const ProfileImage: (props: Props) => JSX.Element = ({ className, style }) => { + return ; +}; diff --git a/apps/frontend/src/app/_components/navigation/footer.tsx b/apps/frontend/src/app/_components/navigation/footer.tsx new file mode 100644 index 00000000..9c8a6856 --- /dev/null +++ b/apps/frontend/src/app/_components/navigation/footer.tsx @@ -0,0 +1,76 @@ +import type { JSX } from "react"; +import Link from "next/link"; +import { PagePath } from "@/lib/router"; + +import { GitHubIcon, InstagramIcon, NoteIcon, TwitterIcon } from "@tatsutakeinjp/ui/assets"; + +const NAVIGATIONS = { + main: [ + { name: "About", href: PagePath.about() }, + { name: "Blog", href: PagePath.blogIndex() }, + { name: "Products", href: PagePath.products() }, + { name: "Works", href: PagePath.works() }, + { name: "Patron", href: PagePath.patron() }, + { name: "Policy", href: PagePath.policy() }, + ], + social: [ + { + name: "GitHub", + href: "https://github.com/tatsutakein", + icon: () => , + }, + { + name: "Twitter", + href: "https://twitter.com/tatsutakein", + icon: () => , + }, + { + name: "Instagram", + href: "https://www.instagram.com/tatsutakein/", + icon: () => , + }, + { + name: "Note", + href: "https://note.com/tatsutakein/", + icon: () => , + }, + ], +}; + +export const Footer = (): JSX.Element => ( +
+
+ + +
+ {NAVIGATIONS.social.map((item) => ( + + + {item.icon.name} + + ))} +
+ +

+ © 2023 tatsutakein, Inc. All rights reserved. +

+
+
+); diff --git a/apps/frontend/src/app/_components/navigation/header.tsx b/apps/frontend/src/app/_components/navigation/header.tsx new file mode 100644 index 00000000..f8d281bf --- /dev/null +++ b/apps/frontend/src/app/_components/navigation/header.tsx @@ -0,0 +1,75 @@ +import React from "react"; +import Link from "next/link"; +import { MobileHeaderMenu } from "@/app/_components/navigation/mobile-header-menu"; +import { PagePath } from "@/lib/router"; + +import { About, Blog, Logo, Products, Works } from "@tatsutakeinjp/ui/assets"; + +const MENUS = [ + { + a: { + name: "About", + href: PagePath.about(), + }, + text: () => { + return ; + }, + }, + { + a: { + name: "Blog", + href: PagePath.blogIndex(), + }, + text: () => { + return ; + }, + }, + { + a: { + name: "Products", + href: PagePath.products(), + }, + text: () => { + return ; + }, + }, + { + a: { + name: "Works", + href: PagePath.works(), + }, + text: () => { + return ; + }, + }, +]; + +export const Header = (): JSX.Element => { + const siteName = "tatsutakein"; + + return ( +
+
+ + + {siteName} + + + {/* モバイル用メニュー */} + + + {/* PC用メニュー */} +
+ {MENUS.map((menu, index) => { + return ( + + + {menu.a.name} + + ); + })} +
+
+
+ ); +}; diff --git a/apps/frontend/src/app/_components/navigation/index.ts b/apps/frontend/src/app/_components/navigation/index.ts new file mode 100644 index 00000000..1bfcdfc8 --- /dev/null +++ b/apps/frontend/src/app/_components/navigation/index.ts @@ -0,0 +1,3 @@ +export * from "./footer"; +export * from "./header"; +export * from "./mobile-header-menu"; diff --git a/apps/frontend/src/components/Navigation/MobileHeaderMenu.tsx b/apps/frontend/src/app/_components/navigation/mobile-header-menu.tsx similarity index 100% rename from apps/frontend/src/components/Navigation/MobileHeaderMenu.tsx rename to apps/frontend/src/app/_components/navigation/mobile-header-menu.tsx diff --git a/apps/frontend/src/app/_components/utils/index.ts b/apps/frontend/src/app/_components/utils/index.ts new file mode 100644 index 00000000..5efecf32 --- /dev/null +++ b/apps/frontend/src/app/_components/utils/index.ts @@ -0,0 +1 @@ +export * from "./loading-spinner"; diff --git a/apps/frontend/src/app/_components/utils/loading-spinner.tsx b/apps/frontend/src/app/_components/utils/loading-spinner.tsx new file mode 100644 index 00000000..c25461a4 --- /dev/null +++ b/apps/frontend/src/app/_components/utils/loading-spinner.tsx @@ -0,0 +1,13 @@ +export const LoadingSpinner = () => { + return ( +
+
+ Loading... +
+
+ ); +}; diff --git a/apps/frontend/src/app/_features/post/components/hero-image.tsx b/apps/frontend/src/app/_features/post/components/hero-image.tsx new file mode 100644 index 00000000..d1805c9f --- /dev/null +++ b/apps/frontend/src/app/_features/post/components/hero-image.tsx @@ -0,0 +1,69 @@ +import Link from "next/link"; +import { PagePath } from "@/lib/router"; +import { formatDateEn, utcToJstTime } from "@/utils/date"; +import { CalendarIcon } from "@radix-ui/react-icons"; +import clsx from "clsx"; + +interface Props { + heroImage?: string; + heroText?: string | null; + title: string; + publishedAt: string; + tags: string[]; +} + +export const HeroImage = ({ heroImage, heroText, title, publishedAt, tags }: Props): JSX.Element => { + const localPublishedAt = formatDateEn(utcToJstTime(new Date(publishedAt))); + + return ( +
+ {/* Image */} + {heroImage && ( + # + )} + {!heroImage && ( + # + )} + + {/* Blur */} +
+ +
+
+ {/* Hero Text */} + {heroText &&
{heroText}
} + + {/* Title */} +

+ {title} +

+ + {/* Update Date */} +
+ + +
+ + {/* Tags */} +
+ {tags.map((tag) => ( + + # {tag} + + ))} +
+
+
+
+ ); +}; diff --git a/apps/frontend/src/app/_features/post/components/index.ts b/apps/frontend/src/app/_features/post/components/index.ts new file mode 100644 index 00000000..ad73c69a --- /dev/null +++ b/apps/frontend/src/app/_features/post/components/index.ts @@ -0,0 +1,3 @@ +export * from "./post-card"; +export * from "./post-content"; +export * from "./post-section"; diff --git a/apps/frontend/src/app/_features/post/components/post-card.tsx b/apps/frontend/src/app/_features/post/components/post-card.tsx new file mode 100644 index 00000000..ca1e93b0 --- /dev/null +++ b/apps/frontend/src/app/_features/post/components/post-card.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import Link from "next/link"; +import { formatDateEn, utcToJstTime } from "@/utils/date"; +import { countText, hasJa } from "@/utils/text"; +import clsx from "clsx"; + +interface Props { + href: string; + title: string; + description?: string | undefined | null; + publishedAt: string; + heroImage: string; + heroText?: string | undefined | null; +} + +export const PostCard: React.FC = ({ href, title, description, publishedAt, heroImage, heroText }) => { + return ( +
+ + {/* ヒーロー画像 */} +
+ # + + 6 ? "text-2xl" : "text-3xl", + )} + style={{ textShadow: "1px 1px 4px rgb(0 0 0 / 25%)" }} + > + {heroText} + +
+ + {/* 記事情報 */} +
+
{title}
+ + {description &&
{description}
} + +
+ +
+
+ +
+ ); +}; diff --git a/apps/frontend/src/app/_features/post/components/post-content.tsx b/apps/frontend/src/app/_features/post/components/post-content.tsx new file mode 100644 index 00000000..a763cdc7 --- /dev/null +++ b/apps/frontend/src/app/_features/post/components/post-content.tsx @@ -0,0 +1,45 @@ +import type { PostQuery } from "@/gql/graphql"; +import { PostSection } from "@/app/_features/post/components"; +import { HeroImage } from "@/app/_features/post/components/hero-image"; +import { formatDateEn, utcToJstTime } from "@/utils/date"; +import { CalendarIcon } from "@radix-ui/react-icons"; + +import { MarkdownRenderer } from "@tatsutakeinjp/ui/markdown"; + +interface BlogContentProps { + post: PostQuery["posts_by_pk"]; +} + +export const PostContent: (props: BlogContentProps) => JSX.Element = ({ post }) => { + if (post === undefined || post === null) { + return
; + } + + return ( +
+ + +
+ + {/* Header */} +
+ + + {} + + +
+ + {/* Body */} + {post.content} +
+
+
+ ); +}; diff --git a/apps/frontend/src/app/_features/post/components/post-section.tsx b/apps/frontend/src/app/_features/post/components/post-section.tsx new file mode 100644 index 00000000..fa18e3c1 --- /dev/null +++ b/apps/frontend/src/app/_features/post/components/post-section.tsx @@ -0,0 +1,13 @@ +import type { ReactNode } from "react"; + +interface Props { + children?: ReactNode; +} + +export const PostSection = (props: Props): JSX.Element => { + return ( +
+ {props.children} +
+ ); +}; diff --git a/apps/frontend/src/app/_features/post/gql/index.tsx b/apps/frontend/src/app/_features/post/gql/index.tsx new file mode 100644 index 00000000..4ec81b9b --- /dev/null +++ b/apps/frontend/src/app/_features/post/gql/index.tsx @@ -0,0 +1,63 @@ +import { gql } from "@/gql"; + +/** + * + */ +export const getPostsQuery = gql(/* GraphQL */ ` + query Posts($now: timestamptz!) { + posts(order_by: { published_at: desc }, where: { published_at: { _lte: $now } }) { + id + title + excerpt + published_at + coverImage { + url + } + } + } +`); + +/** + * Post の slug を取得する + */ +export const getPostIdsQuery = gql(/* GraphQL */ ` + query PostIds($now: timestamptz!) { + posts(where: { published_at: { _lte: $now } }) { + id + } + } +`); + +/** + * Post ページのメタデータを取得する + */ +export const getPostMetadataQuery = gql(/* GraphQL */ ` + query PostMetadata($id: uuid!) { + posts_by_pk(id: $id) { + title + excerpt + } + } +`); + +/** + * Post データを取得する + */ +export const getPostQuery = gql(/* GraphQL */ ` + query Post($id: uuid!) { + posts_by_pk(id: $id) { + title + excerpt + published_at + coverImage { + url + } + content + post_tags { + tag { + tag + } + } + } + } +`); diff --git a/apps/frontend/src/app/_features/product/components/index.ts b/apps/frontend/src/app/_features/product/components/index.ts new file mode 100644 index 00000000..382cf2ed --- /dev/null +++ b/apps/frontend/src/app/_features/product/components/index.ts @@ -0,0 +1 @@ +export * from "./product-card"; diff --git a/apps/frontend/src/app/_features/product/components/product-card.tsx b/apps/frontend/src/app/_features/product/components/product-card.tsx new file mode 100644 index 00000000..1484fcc5 --- /dev/null +++ b/apps/frontend/src/app/_features/product/components/product-card.tsx @@ -0,0 +1,43 @@ +import type { Product } from "@/app/_features/product/types/product"; +import React from "react"; +import Image from "next/image"; +import Link from "next/link"; + +type Props = Product; + +export const ProductCard: React.FC = ({ href, title, description, src, techs }) => { + const content = ( + <> + {/* ヒーロー画像 */} +
+ # +
+ + {/* 記事情報 */} +
+
{title}
+ +
{description}
+ +
+ {techs.map((tech) => ( +
+ {tech} +
+ ))} +
+
+ + ); + return ( +
+ {href ? ( + + {content} + + ) : ( + content + )} +
+ ); +}; diff --git a/apps/frontend/src/app/_features/product/index.ts b/apps/frontend/src/app/_features/product/index.ts new file mode 100644 index 00000000..9916d85a --- /dev/null +++ b/apps/frontend/src/app/_features/product/index.ts @@ -0,0 +1,2 @@ +export * from "./components"; +export * from "./types"; diff --git a/apps/frontend/src/app/_features/product/types/index.ts b/apps/frontend/src/app/_features/product/types/index.ts new file mode 100644 index 00000000..658ff383 --- /dev/null +++ b/apps/frontend/src/app/_features/product/types/index.ts @@ -0,0 +1 @@ +export * from "./product"; diff --git a/apps/frontend/src/features/product/types/product.ts b/apps/frontend/src/app/_features/product/types/product.ts similarity index 100% rename from apps/frontend/src/features/product/types/product.ts rename to apps/frontend/src/app/_features/product/types/product.ts diff --git a/apps/frontend/src/app/_features/work/components/index.ts b/apps/frontend/src/app/_features/work/components/index.ts new file mode 100644 index 00000000..267ab921 --- /dev/null +++ b/apps/frontend/src/app/_features/work/components/index.ts @@ -0,0 +1 @@ +export * from "./work-card"; diff --git a/apps/frontend/src/app/_features/work/components/work-card.tsx b/apps/frontend/src/app/_features/work/components/work-card.tsx new file mode 100644 index 00000000..bda6f078 --- /dev/null +++ b/apps/frontend/src/app/_features/work/components/work-card.tsx @@ -0,0 +1,46 @@ +import type { Work } from "@/app/_features/work/types"; +import React from "react"; +import Image from "next/image"; +import Link from "next/link"; + +type Props = Work; + +export const WorkCard: React.FC = ({ status, href, title, description, src, techs }) => { + const content = ( + <> + {/* ヒーロー画像 */} +
+ # +
+ + {/* 記事情報 */} +
+
+
{title}
+
{status}
+
+ +
{description}
+ +
+ {techs.map((tech) => ( +
+ {tech} +
+ ))} +
+
+ + ); + return ( +
+ {href ? ( + + {content} + + ) : ( + content + )} +
+ ); +}; diff --git a/apps/frontend/src/features/product/types/index.ts b/apps/frontend/src/app/_features/work/types/index.ts similarity index 100% rename from apps/frontend/src/features/product/types/index.ts rename to apps/frontend/src/app/_features/work/types/index.ts diff --git a/apps/frontend/src/features/work/types/work.ts b/apps/frontend/src/app/_features/work/types/work.ts similarity index 100% rename from apps/frontend/src/features/work/types/work.ts rename to apps/frontend/src/app/_features/work/types/work.ts diff --git a/apps/frontend/src/app/about/page.tsx b/apps/frontend/src/app/about/page.tsx index b4193deb..d1d86a99 100644 --- a/apps/frontend/src/app/about/page.tsx +++ b/apps/frontend/src/app/about/page.tsx @@ -1,109 +1,89 @@ -import { ContentsLayout } from '@/components/Layout'; -import { ExternalLink } from '@/components/Utils/ExternalLink'; -import { PagePath } from '@/lib/router'; -import clsx from 'clsx'; -import { Metadata, NextPage } from 'next'; -import React from 'react'; +import type { Metadata } from "next"; +import type { JSX } from "react"; +import clsx from "clsx"; + +import { ExternalLink } from "@tatsutakeinjp/ui/external-link"; export const metadata: Metadata = { - title: 'About', - description: 'Ryo Takeuchi のポートフォリオサイトです。', + title: "About", + description: "Ryo Takeuchi のポートフォリオサイトです。", }; -const Works: NextPage = () => { +export default function AboutPage(): JSX.Element { return ( - +
{/* タイトル */} -

About

-

Ryo Takeuchi に関する内容とリンクをまとめます。

+

About

+

Ryo Takeuchi に関する内容とリンクをまとめます。

{/* プロフィール */} -

プロフィール

-

+

プロフィール

+

埼玉県在住のエンジニアです。
- 本業は Android - アプリの開発をメインに行っていますが、フロントエンドやバックエンドの開発もできます。 + 本業は Android アプリの開発をメインに行っていますが、フロントエンドやバックエンドの開発もできます。

{/* 活動 */} -

活動

-

OSS への貢献やコミュニティ活動などを行っています。

-
    +

    活動

    +

    OSS への貢献やコミュニティ活動などを行っています。

    +
    • -
      - - DroidKaigi 2023 - +
      + DroidKaigi 2023 運営スタッフ
    • -
      - - FlutterKaigi 2023 - +
      + FlutterKaigi 2023 運営スタッフ
    • -
      - - flutter_line_sdk - +
      + flutter_line_sdk へのコントリビュート
    {/* スキル */} -

    スキル

    -
    +

    スキル

    +
    {[ - 'Kotlin', - 'Android View', - 'Jetpack Compose', - 'Swift', - 'SwiftUI', - 'Dart', - 'Flutter', - 'TypeScript', - 'React', - 'Next.js', - 'Golang', - 'PHP', - 'Codeigniter', - 'Laravel', - 'Git', + "Kotlin", + "Android View", + "Jetpack Compose", + "Swift", + "SwiftUI", + "Dart", + "Flutter", + "TypeScript", + "React", + "Next.js", + "Golang", + "PHP", + "Codeigniter", + "Laravel", + "Git", ].map((tech) => ( -
    +
    {tech}
    ))}
    {/* ツール */} -

    ツール

    -
    - {['IntelliJ IDEA', 'Slack', 'VSCode'].map((tech) => ( -
    +

    ツール

    +
    + {["IntelliJ IDEA", "Slack", "VSCode"].map((tech) => ( +
    {tech}
    ))}
    - +
); -}; - -export default Works; +} diff --git a/apps/frontend/src/app/apple-icon.png b/apps/frontend/src/app/apple-icon.png deleted file mode 100644 index cb85e764..00000000 Binary files a/apps/frontend/src/app/apple-icon.png and /dev/null differ diff --git a/apps/frontend/src/app/favicon.ico b/apps/frontend/src/app/favicon.ico index bb363b89..718d6fea 100644 Binary files a/apps/frontend/src/app/favicon.ico and b/apps/frontend/src/app/favicon.ico differ diff --git a/apps/frontend/src/app/globals.css b/apps/frontend/src/app/globals.css new file mode 100644 index 00000000..f93e188a --- /dev/null +++ b/apps/frontend/src/app/globals.css @@ -0,0 +1,142 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + ::selection { + @apply bg-black text-white; + } + + html, + body { + /*@apply bg-violet-50;*/ + @apply bg-[#FBF9FF]; + /*color: rgb(var(--foreground-rgb));*/ + } + + html { + @apply scroll-smooth antialiased; + text-size-adjust: 100%; + text-rendering: optimizeLegibility; + } + + body { + @apply font-sans text-base text-gray-500; + } + + #__next { + /*@apply min-h-dynamic-screen;*/ + } + + article { + @apply flex flex-col; + } + + p { + @apply mb-6 leading-relaxed; + } + + a, + button { + @apply cursor-pointer outline-none; + } + + a { + @apply transition-colors duration-300; + } + + button:focus { + @apply outline-none; + } + + button:disabled, + button[disabled] { + @apply cursor-not-allowed bg-gray-100; + } + + h1, + h2, + h3 { + @apply scroll-mt-16 font-semibold slashed-zero tracking-tighter lg:scroll-mt-8; + } + + h1 { + @apply text-2xl md:text-3xl; + } + + h2 { + @apply text-lg md:text-xl; + } + + h3 { + @apply md:text-lg; + } + + h2 + h3 { + @apply !mt-0; + } + + ol > li::marker { + @apply font-semibold; + } + + ul > li { + @apply pl-2; + } + + ul > li::marker { + @apply text-gray-400; + } + + li div { + @apply inline; + } + + li p, + li div, + li h1, + li h2 { + @apply my-0; + } + + hr { + @apply my-6 border-gray-200; + } + + pre { + @apply overflow-x-auto break-normal rounded-b-lg border-x border-b border-gray-500 p-3 text-left text-xs leading-relaxed; + } + + code { + @apply whitespace-pre-wrap; + } + + code .sh__line::before { + counter-increment: sh-line-number 1; + content: counter(sh-line-number); + margin-right: 24px; + text-align: right; + color: #a4a4a4; + } +} + +@media (prefers-color-scheme: dark) { + ::selection { + @apply bg-indigo-700 text-white; + } + + html, + body { + @apply bg-zinc-800; + } + + body { + @apply text-white; + } +} + +@layer utilities { + .text-balance { + text-wrap: balance; + } +} diff --git a/apps/frontend/src/app/icon.svg b/apps/frontend/src/app/icon.svg deleted file mode 100644 index 3c4276d0..00000000 --- a/apps/frontend/src/app/icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/frontend/src/app/layout.tsx b/apps/frontend/src/app/layout.tsx index 16452a55..c3c08199 100644 --- a/apps/frontend/src/app/layout.tsx +++ b/apps/frontend/src/app/layout.tsx @@ -1,63 +1,73 @@ -import '@/styles/globals.css'; -// include styles from the ui package -import '@tatsutakeinjp/core-ui/styles.css'; -import GoogleAnalytics from '@/components/Utils/GoogleAnalytics'; -import { env } from '@/env.mjs'; -import { Analytics } from '@vercel/analytics/react'; -import { Metadata } from 'next'; -import React from 'react'; - -const siteName = env.NEXT_PUBLIC_SITE_NAME; -const description = 'Ryo Takeuchi のポートフォリオサイトです。'; -const url = env.NEXT_PUBLIC_SITE_URL; +import type { Metadata, Viewport } from "next"; +import { env } from "@/env"; +import { GeistMono } from "geist/font/mono"; +import { GeistSans } from "geist/font/sans"; + +import { cn } from "@tatsutakeinjp/ui"; +import { ThemeProvider } from "@tatsutakeinjp/ui/theme"; +import { Toaster } from "@tatsutakeinjp/ui/toast"; + +import "@/app/globals.css"; + +import type { JSX, ReactNode } from "react"; +import { Footer, Header } from "@/app/_components/navigation"; + +const siteName = env.SITE_NAME; export const metadata: Metadata = { - metadataBase: new URL(env.NEXT_PUBLIC_SITE_URL), + metadataBase: new URL(env.VERCEL_ENV === "production" ? env.SITE_URL : "http://localhost:3000"), title: { + template: `%s — ${siteName}`, default: siteName, - /** `next-seo`の`titleTemplate`に相当する機能 */ - template: `%s | ${siteName}`, }, - description, + description: "Simple monorepo with shared backend for web & mobile apps", openGraph: { - title: siteName, - description, - url, - siteName, - locale: 'ja_JP', - type: 'website', + title: { + template: `%s — ${siteName}`, + default: siteName, + }, + description: "Simple monorepo with shared backend for web & mobile apps", + type: "website", + url: "/", + siteName: siteName, + locale: "ja_JP", }, twitter: { - card: 'summary_large_image', + card: "summary_large_image", title: siteName, - description, - creator: '@tatsutakein', - }, - alternates: { - canonical: url, + site: "@tatsutakein", + creator: "@tatsutakein", }, }; -// @see https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#dynamic -export const dynamic = 'force-dynamic'; - -interface LayoutProps { - children: React.ReactNode; -} +export const viewport: Viewport = { + themeColor: [ + { media: "(prefers-color-scheme: light)", color: "white" }, + { media: "(prefers-color-scheme: dark)", color: "black" }, + ], +}; -const RootLayout: React.FC = ({ children }) => { - // noinspection HtmlRequiredTitleElement +export default function RootLayout(props: { children: ReactNode }): JSX.Element { return ( - - - - - - {children} - + + + +
+
{props.children}
+