mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-28 18:26:54 +00:00
refactor(client): migrate Gatsby setup files to TypeScript (#66367)
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
|
||||
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
|
||||
const webpack = require('webpack');
|
||||
|
||||
const env = require('./config/env.json');
|
||||
const { createSuperBlockIntroPages } = require('./utils/gatsby');
|
||||
|
||||
exports.createPages = async function createPages({
|
||||
actions,
|
||||
graphql,
|
||||
reporter
|
||||
}: any) {
|
||||
if (!env.algoliaAPIKey || !env.algoliaAppId) {
|
||||
if (process.env.FREECODECAMP_NODE_ENV === 'production') {
|
||||
throw new Error(
|
||||
'Algolia App id and API key are required to start the client!'
|
||||
);
|
||||
} else {
|
||||
reporter.info(
|
||||
'Algolia keys missing or invalid. Required for search to yield results.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!env.stripePublicKey) {
|
||||
if (process.env.FREECODECAMP_NODE_ENV === 'production') {
|
||||
throw new Error('Stripe public key is required to start the client!');
|
||||
} else {
|
||||
reporter.info(
|
||||
'Stripe public key is missing or invalid. Required for Stripe integration.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const { createPage } = actions;
|
||||
|
||||
const {
|
||||
data: { allSuperBlockStructure }
|
||||
} = await graphql(`
|
||||
{
|
||||
allSuperBlockStructure {
|
||||
nodes {
|
||||
superBlock
|
||||
}
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
const superBlocks = allSuperBlockStructure.nodes.map(
|
||||
(node: { superBlock: string }) => node.superBlock
|
||||
);
|
||||
superBlocks.forEach((superBlock: string) => {
|
||||
createSuperBlockIntroPages(createPage)({ superBlock });
|
||||
});
|
||||
};
|
||||
|
||||
exports.onCreateWebpackConfig = ({ stage, actions }: any) => {
|
||||
const newPlugins = [
|
||||
// We add the shims of the node globals to the global scope
|
||||
new webpack.ProvidePlugin({
|
||||
Buffer: ['buffer', 'Buffer']
|
||||
}),
|
||||
new webpack.ProvidePlugin({
|
||||
process: 'process/browser'
|
||||
})
|
||||
];
|
||||
// The monaco editor relies on some browser only globals so should not be
|
||||
// involved in SSR. Also, if the plugin is used during the 'build-html' or
|
||||
// 'develop-html' stage it overwrites the minfied files with ordinary ones.
|
||||
if (stage !== 'build-html' && stage !== 'develop-html') {
|
||||
newPlugins.push(
|
||||
new MonacoWebpackPlugin({ filename: '[name].worker-[contenthash].js' })
|
||||
);
|
||||
}
|
||||
actions.setWebpackConfig({
|
||||
resolve: {
|
||||
fallback: {
|
||||
fs: false,
|
||||
path: 'path-browserify',
|
||||
assert: 'assert',
|
||||
crypto: 'crypto-browserify',
|
||||
util: 'util/util',
|
||||
buffer: 'buffer',
|
||||
stream: 'stream-browserify',
|
||||
process: 'process/browser'
|
||||
}
|
||||
},
|
||||
plugins: newPlugins,
|
||||
ignoreWarnings: [
|
||||
(warning: Error) => {
|
||||
if (warning instanceof Error) {
|
||||
if (warning.message.includes('mini-css-extract-plugin')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
]
|
||||
});
|
||||
};
|
||||
|
||||
exports.onCreateBabelConfig = ({ actions }: any) => {
|
||||
actions.setBabelPlugin({
|
||||
name: '@babel/plugin-proposal-function-bind'
|
||||
});
|
||||
actions.setBabelPlugin({
|
||||
name: '@babel/plugin-proposal-export-default-from'
|
||||
});
|
||||
};
|
||||
|
||||
exports.createSchemaCustomization = ({ actions }: any) => {
|
||||
const { createTypes } = actions;
|
||||
// This hook is supported by the test runner, but is not currently used by the
|
||||
// client, so we have to tell Gatsby that it exists.
|
||||
const typeDefs = `
|
||||
type ChallengeNodeChallengeHooks {
|
||||
afterEach: String
|
||||
}
|
||||
`;
|
||||
createTypes(typeDefs);
|
||||
};
|
||||
|
||||
export {};
|
||||
Reference in New Issue
Block a user