@@ -15,7 +15,7 @@ const chalk = require('chalk');
15
15
const env = require ( './env.js' ) ;
16
16
const siteConfig = require ( CWD + '/siteConfig.js' ) ;
17
17
const versionFallback = require ( './versionFallback.js' ) ;
18
- const escapeStringRegexp = require ( 'escape-string-regexp ' ) ;
18
+ const utils = require ( './utils.js ' ) ;
19
19
20
20
const SupportedHeaderFields = new Set ( [
21
21
'id' ,
@@ -121,17 +121,10 @@ function extractMetadata(content) {
121
121
return { metadata, rawContent : both . content } ;
122
122
}
123
123
124
- // process the metadata for a document found in the docs folder
125
- function processMetadata ( file ) {
124
+ // process the metadata for a document found in either ' docs' or 'translated_docs'
125
+ function processMetadata ( file , refDir ) {
126
126
const result = extractMetadata ( fs . readFileSync ( file , 'utf8' ) ) ;
127
-
128
- let regexSubFolder = new RegExp (
129
- '/' + escapeStringRegexp ( getDocsPath ( ) ) + '/(.*)/.*/'
130
- ) ;
131
-
132
- const match = regexSubFolder . exec ( file ) ;
133
- let language = match ? match [ 1 ] : 'en' ;
134
-
127
+ const language = utils . getLanguage ( file , refDir ) || 'en' ;
135
128
const metadata = { } ;
136
129
for ( const fieldName of Object . keys ( result . metadata ) ) {
137
130
if ( SupportedHeaderFields . has ( fieldName ) ) {
@@ -142,14 +135,28 @@ function processMetadata(file) {
142
135
}
143
136
144
137
const rawContent = result . rawContent ;
145
- metadata . source = path . basename ( file ) ;
146
138
147
139
if ( ! metadata . id ) {
148
140
metadata . id = path . basename ( file , path . extname ( file ) ) ;
149
141
}
150
142
if ( metadata . id . includes ( '/' ) ) {
151
143
throw new Error ( 'Document id cannot include "/".' ) ;
152
144
}
145
+
146
+ // If a file is located in a subdirectory, prepend the subdir to it's ID
147
+ // Example:
148
+ // (file: 'docusaurus/docs/projectA/test.md', ID 'test', refDir: 'docs')
149
+ // returns 'projectA/test'
150
+ const subDir = utils . getSubDir ( file , refDir ) ;
151
+ if ( subDir ) {
152
+ metadata . id = `${ subDir } /${ metadata . id } ` ;
153
+ }
154
+
155
+ // Example: `docs/projectA/test.md` source is `projectA/test.md`
156
+ metadata . source = subDir
157
+ ? `${ subDir } /${ path . basename ( file ) } `
158
+ : path . basename ( file ) ;
159
+
153
160
if ( ! metadata . title ) {
154
161
metadata . title = metadata . id ;
155
162
}
@@ -209,14 +216,15 @@ function generateMetadataDocs() {
209
216
const defaultMetadatas = { } ;
210
217
211
218
// metadata for english files
219
+ const docsDir = path . join ( CWD , '../' , getDocsPath ( ) ) ;
212
220
let files = glob . sync ( CWD + '/../' + getDocsPath ( ) + '/**' ) ;
213
221
files . forEach ( file => {
214
222
let language = 'en' ;
215
223
216
224
const extension = path . extname ( file ) ;
217
225
218
226
if ( extension === '.md' || extension === '.markdown' ) {
219
- const res = processMetadata ( file ) ;
227
+ const res = processMetadata ( file , docsDir ) ;
220
228
221
229
if ( ! res ) {
222
230
return ;
@@ -255,23 +263,17 @@ function generateMetadataDocs() {
255
263
} ) ;
256
264
257
265
// metadata for non-english docs
258
- const regexSubFolder = / t r a n s l a t e d _ d o c s \/ ( . * ? ) \/ . * / ;
266
+ const translatedDir = path . join ( CWD , 'translated_docs' ) ;
259
267
files = glob . sync ( CWD + '/translated_docs/**' ) ;
260
268
files . forEach ( file => {
261
- let language = 'en' ;
262
- const match = regexSubFolder . exec ( file ) ;
263
- if ( match ) {
264
- language = match [ 1 ] ;
265
- }
266
-
267
- if ( enabledLanguages . indexOf ( language ) === - 1 ) {
269
+ if ( ! utils . getLanguage ( file , translatedDir ) ) {
268
270
return ;
269
271
}
270
272
271
273
const extension = path . extname ( file ) ;
272
274
273
275
if ( extension === '.md' || extension === '.markdown' ) {
274
- const res = processMetadata ( file ) ;
276
+ const res = processMetadata ( file , translatedDir ) ;
275
277
if ( ! res ) {
276
278
return ;
277
279
}
0 commit comments