fauna-gql-upload
Version:
Manage your FaunaDB resources in within your project and upload them using a single command
213 lines (150 loc) • 6.55 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload indexes - Fauna GQL Upload</title>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" />
<link rel="preconnect" href="https://arc.io" />
<link rel="preconnect" href="https://viewm.moonicorn.network" />
<link rel="preconnect" href="https://plausible.io" />
<link rel="stylesheet" href="../../css/main.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/themes/prism-okaidia.css" integrity="sha512-lTmd0bFMM2Ttm/S8V5dywYNiJaSyF5PILZosvAIzW4EJ7JLEYflk9ImyYIxw5KlFz7e9ZCJN53rnvPnefD240w==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/prism.min.js" integrity="sha512-YBk7HhgDZvBxmtOfUdvX0z8IH2d10Hp3aEygaMNhtF8fSOvBZ16D/1bXZTJV6ndk/L/DlXxYStP8jrF77v2MIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script async src="https://arc.io/widget.min.js#3ua6mscf"></script>
<script async defer data-domain="fgu-docs.com" src="https://plausible.io/js/plausible.js"></script>
</head>
<body>
<header>
<button class="icon-button hamburger">
<img src="../../img/hamburger.svg" />
</button>
<h1 class="title">Fauna GQL Upload</h1>
<div class="social">
<a href="https://github.com/Plazide/fauna-gql-upload">
<img alt="Github" src="../../img/github.png" />
</a>
<a href="https://twitter.com/chj_web">
<img alt="Twitter" src="../../img/twitter.png" />
</a>
</div>
</header>
<nav class="nav">
<header>
<button onclick="toggleNavigation()" class="icon-button backburger">
<img src="../../img/backburger.svg" />
</button>
<h1 class="title">Fauna GQL Upload</h1>
</header>
<ul class="list">
<li >
<a href="../..">✨ Introduction</a>
</li>
<li >
<a href="../../getting-started/">🏹 Getting started</a>
</li>
<li class="dropdown">
<button class="dropdown-button">
⌨️ Configuration
<img class="chevron" alt="chevron" src="../../img/chevron.svg" />
</button>
<ul class="closed list">
<li >
<a href="../../configuration/config-file/">Config file</a>
</li>
<li >
<a href="../../configuration/command-line-options/">Command-line options</a>
</li>
<li >
<a href="../../configuration/local-development/">Local development</a>
</li>
</ul>
</li>
<li class="active dropdown">
<button class="dropdown-button">
🤹 Usage
<img class="chevron" alt="chevron" src="../../img/chevron.svg" />
</button>
<ul class="list">
<li >
<a href="../upload-schema/">Upload schema</a>
</li>
<li >
<a href="../upload-functions/">Upload functions</a>
</li>
<li class="active">
<a href="./">Upload indexes</a>
</li>
<li >
<a href="../upload-roles/">Upload roles</a>
</li>
<li >
<a href="../upload-data/">Upload data</a>
</li>
<li >
<a href="../upload-access-providers/">Upload access providers</a>
</li>
<li >
<a href="../graphql-code-generator/">GraphQL code generator</a>
</li>
<li >
<a href="../with-typescript/">With typescript</a>
</li>
</ul>
</li>
<li >
<a href="../../contributing/">💡 Contributing</a>
</li>
<li >
<a href="../../problems-or-issues/">❌ Problems or issues?</a>
</li>
</ul>
<footer>
<a href="https://github.com/Plazide/fauna-gql-upload">
<img alt="Github" src="../../img/github.png" />
</a>
<a href="https://twitter.com/chj_web">
<img alt="Twitter" src="../../img/twitter.png" />
</a>
</footer>
</nav>
<main class="main"><h1 id="upload-indexes">Upload indexes</h1>
<p>To upload indexes, you need a <code>fauna/indexes</code> directory containing a <code>.js</code> file for each of your indexes. These files describe the index and look like the following example.</p>
<pre><code class="language-js">import { query as q } from "faunadb";
export default {
name: "people_sort_by_age_asc",
source: q.Collection("People"),
values: [
{ field: ["data", "age"] },
{ field: ["ref"] }
]
}
</code></pre>
<p>Fauna does actually create indexes based on your schema. But in certain situations it might be necessary to create custom indexes. The index above sorts people in ascending order by their age.</p>
<h2 id="be-careful-when-updating-terms-or-values">Be careful when updating <code>terms</code> or <code>values</code></h2>
<p>FaunaDB does not allow you to update the <code>terms</code> and <code>values</code> fields. Attempting to do this will result in an error. Fauna GQL Upload solves this. </p>
<p>As of version 2.2.0, Fauna GQL Upload deletes the indexes, waits 60 seconds, and uploads them again whenever an <code>"invalid document data"</code> error occurs on an index. This makes updating indexes convenient when using Fauna GQL Upload, but it comes with one potential downside.</p>
<p>Because indexes are removed and can't be uploaded again until the cache has cleared, which is 60 seconds, there is a 1 minute window where you will get <code>"invalid ref"</code> errors if you try to access the indexes. That means your application wouldn't function properly during this time.</p>
<p>Indexes should therefore be carefully considered before being pushed to production, since they can't be updated without downtime.</p></main>
<iframe
src="https://viewm.moonicorn.network/#%7B%22options%22%3A%7B%22publisherAddr%22%3A%220x60C1D3c8E5FE51bEE5546F6240E18230be4C7Ab2%22%2C%22whitelistedTokens%22%3A%5B%220x6B175474E89094C44Da98b954EedeAC495271d0F%22%5D%2C%22whitelistedType%22%3A%22legacy_160x600%22%2C%22randomize%22%3Atrue%2C%22targeting%22%3A%5B%5D%2C%22width%22%3A%22160%22%2C%22height%22%3A%22600%22%2C%22minPerImpression%22%3A%220%22%2C%22fallbackUnit%22%3Anull%2C%22marketSlot%22%3A%22QmREYH6teaTWQF7uD7TfKuVvqRY3P5WauxDeHoQoJJJ4aA%22%7D%7D"
width="160"
height="600"
scrolling="no"
frameborder="0"
style="border: 0;"
class="ad-frame"
onload="window.addEventListener('message', function(ev) {
if (ev.data.hasOwnProperty('adexHeight') && ('https://viewm.moonicorn.network' === ev.origin)) {
for (let f of document.getElementsByTagName('iframe')) {
if (f.contentWindow === ev.source) {
f.height = ev.data.adexHeight;
}
}
}
}, false)"
></iframe>
<script src="../../js/main.js"></script>
</body>
</html>