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