Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
module.exports = async (program: IProgram) => {
initTracer(program.openTracingConfigFile)
report.pendingActivity({ id: `webpack-develop` })
telemetry.trackCli(`DEVELOP_START`)
telemetry.startBackgroundUpdate()
const port =
typeof program.port === `string` ? parseInt(program.port, 10) : program.port
// In order to enable custom ssl, --cert-file --key-file and -https flags must all be
// used together
if ((program[`cert-file`] || program[`key-file`]) && !program.https) {
report.panic(
`for custom ssl --https, --cert-file, and --key-file must be used together`
)
}
try {
program.port = await detectPortInUseAndPrompt(port)
} catch (e) {
if (e.message === `USER_REJECTED`) {
process.exit(0)
}
throw e
}
// Check if https is enabled, then create or get SSL cert.
// Certs are named after `name` inside the project's package.json.
const createIndexHtml = async (activity: ActivityTracker) => {
try {
await buildHTML.buildPages({
program,
stage: `develop-html`,
pagePaths: [`/`],
workerPool,
activity,
})
} catch (err) {
if (err.name !== `WebpackError`) {
report.panic(err)
return
}
report.panic(
report.stripIndent`
There was an error compiling the html.js component for the development server.
See our docs page on debugging HTML builds for help https://gatsby.dev/debug-html
`,
err
)
}
}
const createIndexHtml = async (activity: ActivityTracker) => {
try {
await buildHTML.buildPages({
program,
stage: `develop-html`,
pagePaths: [`/`],
workerPool,
activity,
})
} catch (err) {
if (err.name !== `WebpackError`) {
report.panic(err)
return
}
report.panic(
report.stripIndent`
There was an error compiling the html.js component for the development server.
See our docs page on debugging HTML builds for help https://gatsby.dev/debug-html
`,
err
)
}
}
const jobs = queries.map(async function doQuery(
{ indexName = mainIndexName, query, transformer = identity, settings },
i
) {
if (!query) {
report.panic(
`failed to index to Algolia. You did not give "query" to this query`
);
}
const index = client.initIndex(indexName);
const mainIndexExists = await indexExists(index);
const tmpIndex = client.initIndex(`${indexName}_tmp`);
const indexToUse = mainIndexExists ? tmpIndex : index;
if (mainIndexExists) {
setStatus(activity, `query ${i}: copying existing index`);
await scopedCopyIndex(client, index, tmpIndex);
}
setStatus(activity, `query ${i}: executing query`);
const result = await graphql(query);
if (result.errors) {
if (settings) {
const { taskID } = await indexToUse.setSettings(settings);
await indexToUse.waitTask(taskID);
}
if (mainIndexExists) {
setStatus(activity, `query ${i}: moving copied index to main index`);
return moveIndex(client, tmpIndex, index);
}
});
try {
await Promise.all(jobs);
} catch (err) {
report.panic(`failed to index to Algolia`, err);
}
activity.end();
};
);
}
const index = client.initIndex(indexName);
const mainIndexExists = await indexExists(index);
const tmpIndex = client.initIndex(`${indexName}_tmp`);
const indexToUse = mainIndexExists ? tmpIndex : index;
if (mainIndexExists) {
setStatus(activity, `query ${i}: copying existing index`);
await scopedCopyIndex(client, index, tmpIndex);
}
setStatus(activity, `query ${i}: executing query`);
const result = await graphql(query);
if (result.errors) {
report.panic(`failed to index to Algolia`, result.errors);
}
const objects = await transformer(result);
const chunks = chunk(objects, chunkSize);
setStatus(activity, `query ${i}: splitting in ${chunks.length} jobs`);
const chunkJobs = chunks.map(async function(chunked) {
const { taskID } = await indexToUse.addObjects(chunked);
return indexToUse.waitTask(taskID);
});
await Promise.all(chunkJobs);
if (settings) {
const { taskID } = await indexToUse.setSettings(settings);
await indexToUse.waitTask(taskID);