1
1
const fetch = globalThis . fetch ;
2
-
3
2
const fs = require ( 'fs' ) ;
4
3
const path = require ( 'path' ) ;
5
4
const { api : apiOverrides } = require ( './data/meta-override.json' ) ;
@@ -9,36 +8,66 @@ const DEMOS_PATH = path.resolve('static/demos');
9
8
let COMPONENT_LINK_REGEXP ;
10
9
11
10
( async function ( ) {
12
- const response = await fetch (
13
- 'https://raw.githubusercontent.com/ionic-team/ionic-docs/translation/jp/scripts/data/translated-api.json' ,
14
- ) ;
15
- const { components } = await response . json ( ) ;
16
-
17
- const names = components . map ( ( component ) => component . tag . slice ( 4 ) ) ;
18
- // matches all relative markdown links to a component, e.g. (../button)
19
- COMPONENT_LINK_REGEXP = new RegExp ( `\\(../(${ names . join ( '|' ) } )/?(#[^)]+)?\\)` , 'g' ) ;
20
-
21
- components . map ( writePage ) ;
11
+ try {
12
+ const response = await fetch (
13
+ 'https://raw.githubusercontent.com/ionic-team/ionic-docs/translation/jp/scripts/data/translated-api.json' ,
14
+ ) ;
15
+
16
+ if ( ! response . ok ) {
17
+ console . error ( `Failed to fetch translated API data: ${ response . status } ${ response . statusText } ` ) ;
18
+ return ;
19
+ }
20
+
21
+ const data = await response . json ( ) ;
22
+
23
+ if ( ! data || ! data . components ) {
24
+ console . error ( 'Invalid API data structure - missing components' ) ;
25
+ return ;
26
+ }
27
+
28
+ const { components } = data ;
29
+
30
+ const names = components . map ( ( component ) => component . tag . slice ( 4 ) ) ;
31
+ // matches all relative markdown links to a component, e.g. (../button)
32
+ COMPONENT_LINK_REGEXP = new RegExp ( `\\(../(${ names . join ( '|' ) } )/?(#[^)]+)?\\)` , 'g' ) ;
33
+
34
+ components . map ( writePage ) ;
35
+ } catch ( error ) {
36
+ console . error ( 'Error fetching or processing translated API data:' , error ) ;
37
+ // Don't fail the build, just skip Japanese API generation
38
+ console . log ( 'Skipping Japanese API generation due to error' ) ;
39
+ }
22
40
} ) ( ) ;
23
41
24
42
function writePage ( page ) {
25
- let data = [
26
- renderFrontmatter ( page ) ,
27
- renderReadme ( page ) ,
28
- renderUsage ( page ) ,
29
- renderProperties ( page ) ,
30
- renderEvents ( page ) ,
31
- renderMethods ( page ) ,
32
- renderParts ( page ) ,
33
- renderCustomProps ( page ) ,
34
- renderSlots ( page ) ,
35
- ] . join ( '' ) ;
36
-
37
- // fix relative links, e.g. (../button) -> (button.md)
38
- data = data . replace ( COMPONENT_LINK_REGEXP , '($1.md$2)' ) ;
39
-
40
- const path = `i18n/ja/docusaurus-plugin-content-docs/current/api/${ page . tag . slice ( 4 ) } .md` ;
41
- fs . writeFileSync ( path , data ) ;
43
+ try {
44
+ let data = [
45
+ renderFrontmatter ( page ) ,
46
+ renderReadme ( page ) ,
47
+ renderUsage ( page ) ,
48
+ renderProperties ( page ) ,
49
+ renderEvents ( page ) ,
50
+ renderMethods ( page ) ,
51
+ renderParts ( page ) ,
52
+ renderCustomProps ( page ) ,
53
+ renderSlots ( page ) ,
54
+ ] . join ( '' ) ;
55
+
56
+ // fix relative links, e.g. (../button) -> (button.md)
57
+ data = data . replace ( COMPONENT_LINK_REGEXP , '($1.md$2)' ) ;
58
+
59
+ const filePath = `i18n/ja/docusaurus-plugin-content-docs/current/api/${ page . tag . slice ( 4 ) } .md` ;
60
+
61
+ // Ensure directory exists
62
+ const dir = path . dirname ( filePath ) ;
63
+ if ( ! fs . existsSync ( dir ) ) {
64
+ fs . mkdirSync ( dir , { recursive : true } ) ;
65
+ }
66
+
67
+ fs . writeFileSync ( filePath , data ) ;
68
+ } catch ( error ) {
69
+ console . error ( `Error writing page for ${ page . tag } :` , error ) ;
70
+ }
42
71
}
43
72
44
73
function renderFrontmatter ( { tag } ) {
@@ -64,9 +93,21 @@ ${utils.getHeadTag(apiOverrides[tag])}
64
93
` ;
65
94
}
66
95
67
- function renderReadme ( { readme, encapsulation } ) {
96
+ function renderReadme ( page ) {
97
+ // Add null/undefined check
98
+ if ( ! page || ! page . readme ) {
99
+ console . warn ( `Missing readme for component: ${ page ?. tag || 'unknown' } ` ) ;
100
+ return '' ;
101
+ }
102
+
103
+ const readme = page . readme ;
68
104
const endIndex = readme . indexOf ( '\n' ) ;
69
-
105
+
106
+ // Add additional safety check
107
+ if ( endIndex === - 1 ) {
108
+ return readme ; // Return the whole readme if no newline found
109
+ }
110
+
70
111
const title = readme . substring ( 0 , endIndex ) ;
71
112
const rest = readme . substring ( endIndex ) ;
72
113
@@ -76,7 +117,7 @@ function renderReadme({ readme, encapsulation }) {
76
117
return `
77
118
import EncapsulationPill from '@components/page/api/EncapsulationPill';
78
119
79
- ${ encapsulation !== 'none' ? `<EncapsulationPill type="${ encapsulation } " />` : '' }
120
+ ${ page . encapsulation !== 'none' ? `<EncapsulationPill type="${ page . encapsulation } " />` : '' }
80
121
81
122
82
123
${ addAdmonitions ( rest ) }
0 commit comments