|
| 1 | +let fs = require('fs') |
| 2 | +let childProcess = require('child_process') |
| 3 | + |
| 4 | +let blogPostBase = 'https://reasonml.org/blog' |
| 5 | +let rescriptBase = 'https://rescript-lang.org' |
| 6 | +let manualBase = `${rescriptBase}/docs/manual/latest` |
| 7 | + |
| 8 | +let docLanguages = [ |
| 9 | + 'en', |
| 10 | + 'es-ES', |
| 11 | + 'fr', |
| 12 | + 'ja', |
| 13 | + 'ko', |
| 14 | + 'pt-BR', |
| 15 | + 'ru', |
| 16 | + 'zh-CN', |
| 17 | + 'zh-TW', |
| 18 | +] |
| 19 | + |
| 20 | +let mainPages = { |
| 21 | + 'built-with-bucklescript.html': rescriptBase, |
| 22 | + 'built-with-bucklescript/index.html': rescriptBase, |
| 23 | + 'examples.html': `${manualBase}/newcomer-examples`, |
| 24 | + 'examples/index.html': `${manualBase}/newcomer-examples`, |
| 25 | + 'faq.html': `${manualBase}/faq`, |
| 26 | + 'faq/index.html': `${manualBase}/faq`, |
| 27 | + 'gettingStarted.html': `${manualBase}/introduction`, |
| 28 | + 'gettingStarted/index.html': `${manualBase}/introduction`, |
| 29 | + 'index.html': rescriptBase, |
| 30 | +} |
| 31 | + |
| 32 | +let docPages = { |
| 33 | + 'automatic-interface-generation.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 34 | + 'automatic-interface-generation/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 35 | + 'better-data-structures-printing-debug-mode.html': `${rescriptBase}/docs/manual/latest/shared-data-types`, |
| 36 | + 'better-data-structures-printing-debug-mode/index.html': `${rescriptBase}/docs/manual/latest/shared-data-types`, |
| 37 | + 'bind-to-global-values.html': `${rescriptBase}/docs/manual/latest/bind-to-global-js-values`, |
| 38 | + 'bind-to-global-values/index.html': `${rescriptBase}/docs/manual/latest/bind-to-global-js-values`, |
| 39 | + 'browser-support-polyfills.html': `${rescriptBase}/docs/manual/latest/browser-support-polyfills`, |
| 40 | + 'browser-support-polyfills/index.html': `${rescriptBase}/docs/manual/latest/browser-support-polyfills`, |
| 41 | + 'build-advanced.html': `${rescriptBase}/docs/manual/latest/build-advanced`, |
| 42 | + 'build-advanced/index.html': `${rescriptBase}/docs/manual/latest/build-advanced`, |
| 43 | + 'build-configuration.html': `${rescriptBase}/docs/manual/latest/build-configuration`, |
| 44 | + 'build-configuration/index.html': `${rescriptBase}/docs/manual/latest/build-configuration`, |
| 45 | + 'build-overview.html': `${rescriptBase}/docs/manual/latest/build-overview`, |
| 46 | + 'build-overview/index.html': `${rescriptBase}/docs/manual/latest/build-overview`, |
| 47 | + 'build-performance.html': `${rescriptBase}/docs/manual/latest/build-performance`, |
| 48 | + 'build-performance/index.html': `${rescriptBase}/docs/manual/latest/build-performance`, |
| 49 | + 'class.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object#bind-to-a-js-object-thats-a-class`, |
| 50 | + 'class/index.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object#bind-to-a-js-object-thats-a-class`, |
| 51 | + 'common-data-types.html': `${rescriptBase}/docs/manual/latest/shared-data-types`, |
| 52 | + 'common-data-types/index.html': `${rescriptBase}/docs/manual/latest/shared-data-types`, |
| 53 | + 'community.html': `${rescriptBase}/community`, |
| 54 | + 'community/index.html': `${rescriptBase}/community`, |
| 55 | + 'comparison-to-jsoo.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 56 | + 'comparison-to-jsoo/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 57 | + 'compiler-architecture-principles.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 58 | + 'compiler-architecture-principles/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 59 | + 'concepts-overview.html': `${rescriptBase}/docs/manual/latest/concepts-overview`, |
| 60 | + 'concepts-overview/index.html': `${rescriptBase}/docs/manual/latest/concepts-overview`, |
| 61 | + 'conditional-compilation.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 62 | + 'conditional-compilation/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 63 | + 'difference-from-native-ocaml.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 64 | + 'difference-from-native-ocaml/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 65 | + 'ecosystem.html': `${rescriptBase}/docs/manual/latest/libraries`, |
| 66 | + 'ecosystem/index.html': `${rescriptBase}/docs/manual/latest/libraries`, |
| 67 | + 'embed-raw-javascript.html': `${rescriptBase}/docs/manual/latest/embed-raw-javascript`, |
| 68 | + 'embed-raw-javascript/index.html': `${rescriptBase}/docs/manual/latest/embed-raw-javascript`, |
| 69 | + 'exceptions.html': `${rescriptBase}/docs/manual/latest/exceptions`, |
| 70 | + 'exceptions/index.html': `${rescriptBase}/docs/manual/latest/exceptions`, |
| 71 | + 'extended-compiler-options.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 72 | + 'extended-compiler-options/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 73 | + 'function.html': `${rescriptBase}/docs/manual/latest/function`, |
| 74 | + 'function/index.html': `${rescriptBase}/docs/manual/latest/function`, |
| 75 | + 'generate-converters-accessors.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 76 | + 'generate-converters-accessors/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 77 | + 'import-export.html': `${rescriptBase}/docs/manual/latest/import-from-export-to-js`, |
| 78 | + 'import-export/index.html': `${rescriptBase}/docs/manual/latest/import-from-export-to-js`, |
| 79 | + 'installation.html': `${rescriptBase}/docs/manual/latest/installation#new-project`, |
| 80 | + 'installation/index.html': `${rescriptBase}/docs/manual/latest/installation#new-project`, |
| 81 | + 'interop-cheatsheet.html': `${rescriptBase}/docs/manual/latest/interop-cheatsheet`, |
| 82 | + 'interop-cheatsheet/index.html': `${rescriptBase}/docs/manual/latest/interop-cheatsheet`, |
| 83 | + 'interop-misc.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 84 | + 'interop-misc/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 85 | + 'interop-overview.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 86 | + 'interop-overview/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 87 | + 'interop-with-js-build-systems.html': `${rescriptBase}/docs/manual/latest/interop-with-js-build-systems`, |
| 88 | + 'interop-with-js-build-systems/index.html': `${rescriptBase}/docs/manual/latest/interop-with-js-build-systems`, |
| 89 | + 'intro-to-external.html': `${rescriptBase}/docs/manual/latest/external`, |
| 90 | + 'intro-to-external/index.html': `${rescriptBase}/docs/manual/latest/external`, |
| 91 | + 'json.html': `${rescriptBase}/docs/manual/latest/json`, |
| 92 | + 'json/index.html': `${rescriptBase}/docs/manual/latest/json`, |
| 93 | + 'load-third-party-libraries.html': `${rescriptBase}/try`, |
| 94 | + 'load-third-party-libraries/index.html': `${rescriptBase}/try`, |
| 95 | + 'new-project.html': `${rescriptBase}/docs/manual/latest/installation#new-project`, |
| 96 | + 'new-project/index.html': `${rescriptBase}/docs/manual/latest/installation#new-project`, |
| 97 | + 'nodejs-special-variables.html': `${rescriptBase}/docs/manual/latest/bind-to-global-js-values#special-global-values`, |
| 98 | + 'nodejs-special-variables/index.html': `${rescriptBase}/docs/manual/latest/bind-to-global-js-values#special-global-values`, |
| 99 | + 'null-undefined-option.html': `${rescriptBase}/docs/manual/latest/null-undefined-option`, |
| 100 | + 'null-undefined-option/index.html': `${rescriptBase}/docs/manual/latest/null-undefined-option`, |
| 101 | + 'object-2.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object`, |
| 102 | + 'object-2/index.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object`, |
| 103 | + 'object.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object`, |
| 104 | + 'object/index.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object`, |
| 105 | + 'pipe-first.html': `${rescriptBase}/docs/manual/latest/pipe`, |
| 106 | + 'pipe-first/index.html': `${rescriptBase}/docs/manual/latest/pipe`, |
| 107 | + 'playground.html': `${rescriptBase}/try`, |
| 108 | + 'playground/index.html': `${rescriptBase}/try`, |
| 109 | + 'property-access.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object#bind-using-special-bs-getters--setters`, |
| 110 | + 'property-access/index.html': `${rescriptBase}/docs/manual/latest/bind-to-js-object#bind-using-special-bs-getters--setters`, |
| 111 | + 'regular-expression.html': `${rescriptBase}/docs/manual/latest/primitive-types#regular-expression`, |
| 112 | + 'regular-expression/index.html': `${rescriptBase}/docs/manual/latest/primitive-types#regular-expression`, |
| 113 | + 'return-value-wrapping.html': `${rescriptBase}/docs/manual/latest/bind-to-js-function#function-nullable-return-value-wrapping`, |
| 114 | + 'return-value-wrapping/index.html': `${rescriptBase}/docs/manual/latest/bind-to-js-function#function-nullable-return-value-wrapping`, |
| 115 | + 'roadmap.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 116 | + 'roadmap/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 117 | + 'stdlib-overview.html': `${rescriptBase}/apis/latest`, |
| 118 | + 'stdlib-overview/index.html': `${rescriptBase}/apis/latest`, |
| 119 | + 'try.html': `${rescriptBase}/docs/manual/latest/try`, |
| 120 | + 'try/index.html': `${rescriptBase}/docs/manual/latest/try`, |
| 121 | + 'upgrade-to-v7.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 122 | + 'upgrade-to-v7/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 123 | + 'use-existing-ocaml-libraries.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 124 | + 'use-existing-ocaml-libraries/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 125 | + 'what-why.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 126 | + 'what-why/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 127 | + 'why-bucklescript-matters-for-javascript-platform.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 128 | + 'why-bucklescript-matters-for-javascript-platform/index.html': `${rescriptBase}/docs/manual/latest/introduction`, |
| 129 | +} |
| 130 | + |
| 131 | +let blogPages = { |
| 132 | + 'blog/2017/10/01/announcing-1-0.html': `${blogPostBase}/bucklescript-release-1-0`, |
| 133 | + 'blog/2017/10/01/announcing-1-0/index.html': `${blogPostBase}/bucklescript-release-1-0`, |
| 134 | + 'blog/2017/10/02/release-1-4-2.html': `${blogPostBase}/bucklescript-release-1-4-2`, |
| 135 | + 'blog/2017/10/02/release-1-4-2/index.html': `${blogPostBase}/bucklescript-release-1-4-2`, |
| 136 | + 'blog/2017/10/03/release-1-4-3.html': `${blogPostBase}/bucklescript-release-1-4-3`, |
| 137 | + 'blog/2017/10/03/release-1-4-3/index.html': `${blogPostBase}/bucklescript-release-1-4-3`, |
| 138 | + 'blog/2017/10/04/release-1-5-0.html': `${blogPostBase}/bucklescript-release-1-5-0`, |
| 139 | + 'blog/2017/10/04/release-1-5-0/index.html': `${blogPostBase}/bucklescript-release-1-5-0`, |
| 140 | + 'blog/2017/10/05/release-1-5-1.html': `${blogPostBase}/bucklescript-release-1-5-1`, |
| 141 | + 'blog/2017/10/05/release-1-5-1/index.html': `${blogPostBase}/bucklescript-release-1-5-1`, |
| 142 | + 'blog/2017/10/06/release-1-5-2.html': `${blogPostBase}/bucklescript-release-1-5-2`, |
| 143 | + 'blog/2017/10/06/release-1-5-2/index.html': `${blogPostBase}/bucklescript-release-1-5-2`, |
| 144 | + 'blog/2017/10/07/release-1-7-0.html': `${blogPostBase}/bucklescript-release-1-7-0`, |
| 145 | + 'blog/2017/10/07/release-1-7-0/index.html': `${blogPostBase}/bucklescript-release-1-7-0`, |
| 146 | + 'blog/2017/10/08/release-1-7-4.html': `${blogPostBase}/bucklescript-release-1-7-4`, |
| 147 | + 'blog/2017/10/08/release-1-7-4/index.html': `${blogPostBase}/bucklescript-release-1-7-4`, |
| 148 | + 'blog/2017/10/09/release-1-7-5.html': `${blogPostBase}/bucklescript-release-1-7-5`, |
| 149 | + 'blog/2017/10/09/release-1-7-5/index.html': `${blogPostBase}/bucklescript-release-1-7-5`, |
| 150 | + 'blog/2017/12/01/new-doc-site.html': `${blogPostBase}/new-doc-site`, |
| 151 | + 'blog/2017/12/01/new-doc-site/index.html': `${blogPostBase}/new-doc-site`, |
| 152 | + 'blog/2018/03/13/a-small-step-for-bucklescript.html': `${blogPostBase}/a-small-step-for-bucklescript`, |
| 153 | + 'blog/2018/03/13/a-small-step-for-bucklescript/index.html': `${blogPostBase}/a-small-step-for-bucklescript`, |
| 154 | + 'blog/2018/04/16/release-3-0-0.html': `${blogPostBase}/bucklescript-release-3-0-0`, |
| 155 | + 'blog/2018/04/16/release-3-0-0/index.html': `${blogPostBase}/bucklescript-release-3-0-0`, |
| 156 | + 'blog/2018/05/21/release-3-1-0.html': `${blogPostBase}/bucklescript-release-3-1-0`, |
| 157 | + 'blog/2018/05/21/release-3-1-0/index.html': `${blogPostBase}/bucklescript-release-3-1-0`, |
| 158 | + 'blog/2018/05/23/release-3-1-4.html': `${blogPostBase}/bucklescript-release-3-1-4`, |
| 159 | + 'blog/2018/05/23/release-3-1-4/index.html': `${blogPostBase}/bucklescript-release-3-1-4`, |
| 160 | + 'blog/2018/07/17/release-4-0-0.html': `${blogPostBase}/bucklescript-release-4-0-0-pt1`, |
| 161 | + 'blog/2018/07/17/release-4-0-0/index.html': `${blogPostBase}/bucklescript-release-4-0-0-pt1`, |
| 162 | + 'blog/2018/07/17/release-4-0-0II.html': `${blogPostBase}/bucklescript-release-4-0-0-pt2`, |
| 163 | + 'blog/2018/07/17/release-4-0-0II/index.html': `${blogPostBase}/bucklescript-release-4-0-0-pt2`, |
| 164 | + 'blog/2018/11/13/arity-zero.html': `${blogPostBase}/arity-zero`, |
| 165 | + 'blog/2018/11/13/arity-zero/index.html': `${blogPostBase}/arity-zero`, |
| 166 | + 'blog/2018/11/19/next-half.html': `${blogPostBase}/bucklescript-roadmap-q3-4-2018`, |
| 167 | + 'blog/2018/11/19/next-half/index.html': `${blogPostBase}/bucklescript-roadmap-q3-4-2018`, |
| 168 | + 'blog/2018/12/05/release-4-0-8.html': `${blogPostBase}/bucklescript-release-4-0-8`, |
| 169 | + 'blog/2018/12/05/release-4-0-8/index.html': `${blogPostBase}/bucklescript-release-4-0-8`, |
| 170 | + 'blog/2019/01/07/release-4-0-17.html': `${blogPostBase}/bucklescript-release-4-0-17`, |
| 171 | + 'blog/2019/01/07/release-4-0-17/index.html': `${blogPostBase}/bucklescript-release-4-0-17`, |
| 172 | + 'blog/2019/01/11/scalable.html': `${blogPostBase}/scalable`, |
| 173 | + 'blog/2019/01/11/scalable/index.html': `${blogPostBase}/scalable`, |
| 174 | + 'blog/2019/03/1/feature-preview.html': `${blogPostBase}/feature-preview-variadic`, |
| 175 | + 'blog/2019/03/1/feature-preview/index.html': `${blogPostBase}/feature-preview-variadic`, |
| 176 | + 'blog/2019/03/21/release-5-0.html': `${blogPostBase}/bucklescript-release-5-0`, |
| 177 | + 'blog/2019/03/21/release-5-0/index.html': `${blogPostBase}/bucklescript-release-5-0`, |
| 178 | + 'blog/2019/03/31/release-6-0.html': `${blogPostBase}/bucklescript-release-6-0`, |
| 179 | + 'blog/2019/03/31/release-6-0/index.html': `${blogPostBase}/bucklescript-release-6-0`, |
| 180 | + 'blog/2019/04/09/release-schedule.html': `${blogPostBase}/bucklescript-release-5-0-1`, |
| 181 | + 'blog/2019/04/09/release-schedule/index.html': `${blogPostBase}/bucklescript-release-5-0-1`, |
| 182 | + 'blog/2019/04/22/release-5-0-4.html': `${blogPostBase}/bucklescript-release-5-0-4`, |
| 183 | + 'blog/2019/04/22/release-5-0-4/index.html': `${blogPostBase}/bucklescript-release-5-0-4`, |
| 184 | + 'blog/2019/05/21/ffi-overview.html': `${blogPostBase}/ffi-overview`, |
| 185 | + 'blog/2019/05/21/ffi-overview/index.html': `${blogPostBase}/ffi-overview`, |
| 186 | + 'blog/2019/06/26/release-5-0-5.html': `${blogPostBase}/bucklescript-release-5-0-5`, |
| 187 | + 'blog/2019/06/26/release-5-0-5/index.html': `${blogPostBase}/bucklescript-release-5-0-5`, |
| 188 | + 'blog/2019/08/12/release-5-10-0.html': `${blogPostBase}/bucklescript-release-5-1-0`, |
| 189 | + 'blog/2019/08/12/release-5-10-0/index.html': `${blogPostBase}/bucklescript-release-5-1-0`, |
| 190 | + 'blog/2019/09/23/release-5-20-0.html': `${blogPostBase}/bucklescript-release-5-2-0`, |
| 191 | + 'blog/2019/09/23/release-5-20-0/index.html': `${blogPostBase}/bucklescript-release-5-2-0`, |
| 192 | + 'blog/2019/10/16/another-encoding.html': `${blogPostBase}/another-encoding`, |
| 193 | + 'blog/2019/10/16/another-encoding/index.html': `${blogPostBase}/another-encoding`, |
| 194 | + 'blog/2019/11/18/whats-new-in-7.html': `${blogPostBase}/whats-new-in-7-pt1`, |
| 195 | + 'blog/2019/11/18/whats-new-in-7/index.html': `${blogPostBase}/whats-new-in-7-pt1`, |
| 196 | + 'blog/2019/12/20/release-7-02.html': `${blogPostBase}/bucklescript-release-7-0-2`, |
| 197 | + 'blog/2019/12/20/release-7-02/index.html': `${blogPostBase}/bucklescript-release-7-0-2`, |
| 198 | + 'blog/2019/12/27/whats-new-in-7-cont.html': `${blogPostBase}/whats-new-in-7-pt2`, |
| 199 | + 'blog/2019/12/27/whats-new-in-7-cont/index.html': `${blogPostBase}/whats-new-in-7-pt2`, |
| 200 | + 'blog/2020/02/04/release-7-1-0.html': `${blogPostBase}/bucklescript-release-7-1-0`, |
| 201 | + 'blog/2020/02/04/release-7-1-0/index.html': `${blogPostBase}/bucklescript-release-7-1-0`, |
| 202 | + 'blog/2020/02/07/union-types-in-bucklescript.html': `${blogPostBase}/union-types-in-bucklescript`, |
| 203 | + 'blog/2020/02/07/union-types-in-bucklescript/index.html': `${blogPostBase}/union-types-in-bucklescript`, |
| 204 | + 'blog/2020/02/20/loading-stdlib-in-memory.html': `${blogPostBase}/loading-stdlib-in-memory`, |
| 205 | + 'blog/2020/02/20/loading-stdlib-in-memory/index.html': `${blogPostBase}/loading-stdlib-in-memory`, |
| 206 | + 'blog/2020/03/12/release-7-2.html': `${blogPostBase}/bucklescript-release-7-2`, |
| 207 | + 'blog/2020/03/12/release-7-2/index.html': `${blogPostBase}/bucklescript-release-7-2`, |
| 208 | + 'blog/2020/03/26/generalize-uncurry.html': `${blogPostBase}/generalize-uncurry`, |
| 209 | + 'blog/2020/03/26/generalize-uncurry/index.html': `${blogPostBase}/generalize-uncurry`, |
| 210 | + 'blog/2020/04/13/release-7-3.html': `${blogPostBase}/bucklescript-release-7-3`, |
| 211 | + 'blog/2020/04/13/release-7-3/index.html': `${blogPostBase}/bucklescript-release-7-3`, |
| 212 | + 'blog/2020/05/06/exception-encoding.html': `${blogPostBase}/a-story-of-exception-encoding`, |
| 213 | + 'blog/2020/05/06/exception-encoding/index.html': `${blogPostBase}/a-story-of-exception-encoding`, |
| 214 | + 'blog/index.html': `${rescriptBase}/blog`, |
| 215 | + 'blog/page2/index.html': `${rescriptBase}/blog`, |
| 216 | + 'blog/page3/index.html': `${rescriptBase}/blog`, |
| 217 | + 'blog/page4/index.html': `${rescriptBase}/blog`, |
| 218 | + 'blog/page5/index.html': `${rescriptBase}/blog`, |
| 219 | +} |
| 220 | + |
| 221 | +let createFile = (filePath, redirectLink) => { |
| 222 | + let p = filePath.split('/') |
| 223 | + if (p.length > 1) { |
| 224 | + let dirs = p.slice(0, p.length - 1).join('/') |
| 225 | + childProcess.execFileSync('mkdir', ['-p', dirs]) |
| 226 | + } |
| 227 | + |
| 228 | + let content = ` |
| 229 | + <link rel="canonical" href="${redirectLink}"/> |
| 230 | + <meta http-equiv="refresh" content="0; url=${redirectLink}" /> |
| 231 | + ` |
| 232 | + fs.writeFileSync(filePath, content) |
| 233 | +} |
| 234 | + |
| 235 | +Object.entries(blogPages).forEach(([pathSpec, redirectLink]) => { |
| 236 | + createFile(pathSpec, redirectLink) |
| 237 | +}) |
| 238 | + |
| 239 | +Object.entries(mainPages).forEach(([pathSpec, redirectLink]) => { |
| 240 | + createFile(pathSpec, redirectLink) |
| 241 | + docLanguages.forEach(language => { |
| 242 | + createFile(language + '/' + pathSpec, redirectLink) |
| 243 | + }) |
| 244 | +}) |
| 245 | + |
| 246 | +Object.entries(docPages).forEach(([pathSpec, redirectLink]) => { |
| 247 | + createFile('docs/' + pathSpec, redirectLink) |
| 248 | + docLanguages.forEach(language => { |
| 249 | + createFile('docs/' + language + '/' + pathSpec, redirectLink) |
| 250 | + }) |
| 251 | +}) |
0 commit comments