impress-2020/scripts/build-cached-data.js

63 lines
1.6 KiB
JavaScript
Raw Normal View History

// We run this on build to cache some stable database tables into the JS
// bundle!
require("honeycomb-beeline")({
writeKey: process.env["HONEYCOMB_WRITE_KEY"],
dataset:
process.env["NODE_ENV"] === "production"
? "Dress to Impress (2020)"
: "Dress to Impress (2020, dev)",
serviceName: "impress-2020-build-process",
disableInstrumentationOnLoad: true,
});
const fs = require("fs").promises;
const path = require("path");
const { ApolloServer } = require("apollo-server");
const { createTestClient } = require("apollo-server-testing");
const gql = require("graphql-tag");
const { config } = require("../src/server");
const cachedDataPath = path.join(__dirname, "..", "src", "app", "cached-data");
async function main() {
await fs.mkdir(cachedDataPath, { recursive: true });
// Check out this scrappy way of making a query against server code ^_^`
const { query } = createTestClient(new ApolloServer(config));
const res = await query({
query: gql`
query BuildCachedData {
allZones {
id
label
depth
isCommonlyUsedByItems
}
}
`,
});
if (res.errors) {
for (const error of res.errors) {
console.error(error);
}
throw new Error(`GraphQL request failed`);
}
const filePath = path.join(cachedDataPath, "zones.json");
await fs.writeFile(
filePath,
JSON.stringify(res.data.allZones, null, 4),
"utf8"
);
console.info(`📚 Wrote zones to ${path.relative(process.cwd(), filePath)}`);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.then(() => process.exit());