1+ import fs from 'fs' ;
2+ import path from 'path' ;
3+ import { LoadContext , Plugin , PluginOptions } from '@docusaurus/types' ;
4+ import logger from '@docusaurus/logger' ;
5+ import Module from 'module' ;
6+
7+ const createProvidersJsonPlugin = ( context : LoadContext , options : PluginOptions ) : Plugin => {
8+ return {
9+ name : 'docusaurus-plugin-create-providers-json' ,
10+
11+ async postBuild ( { outDir, routes, plugins } ) {
12+ const originalResolveFilename = Module . _resolveFilename
13+
14+ // This is a hack to allow us to import a custom module instead of the normal translation module
15+ Module . _resolveFilename = function ( request , parent , isMain , options ) {
16+ if ( request == '@docusaurus/Translate' ) {
17+ request = path . resolve ( __dirname , 'custom_modules' , 'translate.ts' ) ;
18+ }
19+ return originalResolveFilename . call ( this , request , parent , isMain , options ) ;
20+ } ;
21+
22+ // Import the providers data
23+ const { providersData } = await import ( '../data/providers' ) ;
24+
25+ // Restore the original resolve function
26+ Module . _resolveFilename = originalResolveFilename
27+
28+ const providersFilePath = path . join ( outDir , 'data/providers.json' ) ;
29+
30+ fs . mkdirSync ( path . dirname ( providersFilePath ) , { recursive : true } ) ;
31+
32+ fs . writeFileSync ( providersFilePath , JSON . stringify ( providersData , null , 2 ) , 'utf-8' ) ;
33+
34+ logger . success ( `Created providers.json file at ${ providersFilePath } ` ) ;
35+ }
36+ } ;
37+ } ;
38+
39+ export default createProvidersJsonPlugin ;
0 commit comments