@maple-design/cli-vue 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +305 -2
- package/README.zh-CN.md +305 -0
- package/bin/cli.mjs +5 -0
- package/client.d.ts +1 -0
- package/client.js +1 -0
- package/lib/client/appType.d.ts +4 -0
- package/lib/client/appType.js +7 -0
- package/lib/client/index.d.ts +29 -0
- package/lib/client/index.js +170 -0
- package/lib/client/language.d.ts +11 -0
- package/lib/client/language.js +52 -0
- package/lib/client/theme-state.d.ts +3 -0
- package/lib/client/theme-state.js +6 -0
- package/lib/node/bin.d.ts +2 -0
- package/lib/node/bin.js +154 -0
- package/lib/node/commands/build.d.ts +1 -0
- package/lib/node/commands/build.js +15 -0
- package/lib/node/commands/checklist.d.ts +6 -0
- package/lib/node/commands/checklist.js +59 -0
- package/lib/node/commands/compile.d.ts +3 -0
- package/lib/node/commands/compile.js +41 -0
- package/lib/node/commands/create.d.ts +8 -0
- package/lib/node/commands/create.js +91 -0
- package/lib/node/commands/dev.d.ts +6 -0
- package/lib/node/commands/dev.js +58 -0
- package/lib/node/commands/extension.d.ts +3 -0
- package/lib/node/commands/extension.js +5 -0
- package/lib/node/commands/gen.d.ts +24 -0
- package/lib/node/commands/gen.js +91 -0
- package/lib/node/commands/icons.d.ts +4 -0
- package/lib/node/commands/icons.js +15 -0
- package/lib/node/commands/preview.d.ts +4 -0
- package/lib/node/commands/preview.js +18 -0
- package/lib/node/commands/styleVars.d.ts +1 -0
- package/lib/node/commands/styleVars.js +6 -0
- package/lib/node/commands/test.d.ts +7 -0
- package/lib/node/commands/test.js +16 -0
- package/lib/node/commands/vite.d.ts +2 -0
- package/lib/node/commands/vite.js +14 -0
- package/lib/node/compiler/compileModule.d.ts +4 -0
- package/lib/node/compiler/compileModule.js +78 -0
- package/lib/node/compiler/compileSFC.d.ts +6 -0
- package/lib/node/compiler/compileSFC.js +119 -0
- package/lib/node/compiler/compileScript.d.ts +27 -0
- package/lib/node/compiler/compileScript.js +221 -0
- package/lib/node/compiler/compileSiteEntry.d.ts +19 -0
- package/lib/node/compiler/compileSiteEntry.js +164 -0
- package/lib/node/compiler/compileStyle.d.ts +14 -0
- package/lib/node/compiler/compileStyle.js +55 -0
- package/lib/node/compiler/compileStyleVars.d.ts +3 -0
- package/lib/node/compiler/compileStyleVars.js +46 -0
- package/lib/node/compiler/compileTemplateHighlight.d.ts +18 -0
- package/lib/node/compiler/compileTemplateHighlight.js +133 -0
- package/lib/node/compiler/compileTypes.d.ts +2 -0
- package/lib/node/compiler/compileTypes.js +58 -0
- package/lib/node/compiler/generateLibraryEntry.d.ts +3 -0
- package/lib/node/compiler/generateLibraryEntry.js +152 -0
- package/lib/node/compiler/siteRoutes.d.ts +4 -0
- package/lib/node/compiler/siteRoutes.js +9 -0
- package/lib/node/config/maple.config.d.ts +215 -0
- package/lib/node/config/maple.config.js +32 -0
- package/lib/node/config/maple.default.config.d.ts +2 -0
- package/lib/node/config/maple.default.config.js +386 -0
- package/lib/node/config/site-resolver.d.ts +25 -0
- package/lib/node/config/site-resolver.js +138 -0
- package/lib/node/config/vite.config.d.ts +28 -0
- package/lib/node/config/vite.config.js +209 -0
- package/lib/node/config/vitest.config.d.ts +2 -0
- package/lib/node/config/vitest.config.js +54 -0
- package/lib/node/config/vitest.setup.d.ts +1 -0
- package/lib/node/config/vitest.setup.js +8 -0
- package/lib/node/index.d.ts +13 -0
- package/lib/node/index.js +13 -0
- package/lib/node/release/index.d.ts +20 -0
- package/lib/node/release/index.js +147 -0
- package/lib/node/shared/constant.d.ts +47 -0
- package/lib/node/shared/constant.js +53 -0
- package/lib/node/shared/fsUtils.d.ts +18 -0
- package/lib/node/shared/fsUtils.js +57 -0
- package/lib/node/shared/logger.d.ts +8 -0
- package/lib/node/shared/logger.js +18 -0
- package/lib/node/shared/serial-task.d.ts +2 -0
- package/lib/node/shared/serial-task.js +9 -0
- package/package.json +111 -3
- package/site/documentation-sections.spec.ts +45 -0
- package/site/documentation-sections.ts +48 -0
- package/site/index.html +89 -0
- package/site/mobile/App.vue +437 -0
- package/site/mobile/AppHome.vue +154 -0
- package/site/mobile/main.ts +99 -0
- package/site/mobile/route-sync.spec.ts +34 -0
- package/site/mobile/route-sync.ts +10 -0
- package/site/mobile.html +70 -0
- package/site/module.d.ts +5 -0
- package/site/pc/App.vue +44 -0
- package/site/pc/Layout.vue +641 -0
- package/site/pc/components/AppAd.vue +117 -0
- package/site/pc/components/AppHeader.vue +459 -0
- package/site/pc/components/AppMobile.spec.ts +204 -0
- package/site/pc/components/AppMobile.vue +201 -0
- package/site/pc/components/AppOutline.spec.ts +89 -0
- package/site/pc/components/AppOutline.vue +161 -0
- package/site/pc/components/AppSidebar.vue +144 -0
- package/site/pc/components/code-example/CodeExample.spec.ts +36 -0
- package/site/pc/components/code-example/CodeExample.vue +164 -0
- package/site/pc/components/code-example/codeExample.less +88 -0
- package/site/pc/components/code-example/index.ts +10 -0
- package/site/pc/components/demo-preview/DemoPreview.vue +92 -0
- package/site/pc/components/demo-preview/index.ts +8 -0
- package/site/pc/components/mobile-preview-url.ts +17 -0
- package/site/pc/components/preview-section.spec.ts +24 -0
- package/site/pc/components/preview-section.ts +23 -0
- package/site/pc/main.ts +108 -0
- package/site/pc/pages/index/index.vue +421 -0
- package/site/pc/pages/index/locale/en-US.ts +1 -0
- package/site/pc/pages/index/locale/zh-CN.ts +1 -0
- package/site/pc/responsive-layout.spec.ts +40 -0
- package/site/pc/route-state.spec.ts +34 -0
- package/site/pc/route-state.ts +25 -0
- package/site/pc/scroll-hash.spec.ts +49 -0
- package/site/pc/scroll-hash.ts +25 -0
- package/site/route-recovery.spec.ts +51 -0
- package/site/route-recovery.ts +38 -0
- package/site/tsconfig.json +16 -0
- package/site/types.ts +6 -0
- package/site/utils.ts +45 -0
- package/template/create/[ComponentName].tsx.ejs +16 -0
- package/template/create/[ComponentName].vue.ejs +21 -0
- package/template/create/[componentName].d.ts.ejs +13 -0
- package/template/create/__tests__/index.spec.js.ejs +10 -0
- package/template/create/docs/en-US.md +0 -0
- package/template/create/docs/zh-CN.md +0 -0
- package/template/create/example/index.vue.ejs +17 -0
- package/template/create/example/locale/_index.ts +17 -0
- package/template/create/example/locale/en-US.ts +3 -0
- package/template/create/example/locale/index.ts +24 -0
- package/template/create/example/locale/zh-CN.ts +3 -0
- package/template/create/index.ts.ejs +12 -0
- package/template/create/props.ts +1 -0
- package/template/create/style/[componentName].less.ejs +5 -0
- package/template/create/style/index.less.ejs +1 -0
- package/template/create/style/index.ts.ejs +1 -0
- package/template/generators/base/.browserslistrc +2 -0
- package/template/generators/base/.prettierignore +14 -0
- package/template/generators/base/README.md +90 -0
- package/template/generators/base/_gitignore +19 -0
- package/template/generators/base/eslint.config.js +15 -0
- package/template/generators/base/package.json +97 -0
- package/template/generators/base/prettier.config.js +3 -0
- package/template/generators/base/public/logo.svg +30 -0
- package/template/generators/base/shims/shims-md.d.ts +4 -0
- package/template/generators/base/shims/shims-vue.d.ts +6 -0
- package/template/generators/base/tsconfig.declaration.json +21 -0
- package/template/generators/base/tsconfig.json +28 -0
- package/template/generators/base/ui-build.config.mjs +16 -0
- package/template/generators/config/default/base/docs/home.zh-CN.md +3 -0
- package/template/generators/config/default/base/maple.config.mjs +49 -0
- package/template/generators/config/default/sfc/src/button/Button.vue +34 -0
- package/template/generators/config/default/sfc/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/default/sfc/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/default/sfc/src/button/example/BasicUse.vue +7 -0
- package/template/generators/config/default/sfc/src/button/example/ModifyColor.vue +7 -0
- package/template/generators/config/default/sfc/src/button/example/index.vue +12 -0
- package/template/generators/config/default/sfc/src/button/index.ts +8 -0
- package/template/generators/config/default/sfc/src/button/style/button.less +14 -0
- package/template/generators/config/default/sfc/src/button/style/index.less +1 -0
- package/template/generators/config/default/sfc/src/button/style/index.ts +1 -0
- package/template/generators/config/default/sfc/src/utils/components.ts +20 -0
- package/template/generators/config/default/tsx/src/button/Button.tsx +30 -0
- package/template/generators/config/default/tsx/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/default/tsx/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/default/tsx/src/button/example/BasicUse.vue +7 -0
- package/template/generators/config/default/tsx/src/button/example/ModifyColor.vue +7 -0
- package/template/generators/config/default/tsx/src/button/example/index.vue +12 -0
- package/template/generators/config/default/tsx/src/button/index.ts +8 -0
- package/template/generators/config/default/tsx/src/button/style/button.less +14 -0
- package/template/generators/config/default/tsx/src/button/style/index.less +1 -0
- package/template/generators/config/default/tsx/src/button/style/index.ts +1 -0
- package/template/generators/config/default/tsx/src/utils/components.ts +20 -0
- package/template/generators/config/i18n/base/docs/home.en-US.md +3 -0
- package/template/generators/config/i18n/base/docs/home.zh-CN.md +3 -0
- package/template/generators/config/i18n/base/maple.config.mjs +51 -0
- package/template/generators/config/i18n/sfc/src/button/Button.vue +38 -0
- package/template/generators/config/i18n/sfc/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/i18n/sfc/src/button/docs/en-US.md +39 -0
- package/template/generators/config/i18n/sfc/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/i18n/sfc/src/button/example/BasicUse.vue +11 -0
- package/template/generators/config/i18n/sfc/src/button/example/ModifyColor.vue +11 -0
- package/template/generators/config/i18n/sfc/src/button/example/index.vue +15 -0
- package/template/generators/config/i18n/sfc/src/button/example/locale/en-US.ts +5 -0
- package/template/generators/config/i18n/sfc/src/button/example/locale/index.ts +23 -0
- package/template/generators/config/i18n/sfc/src/button/example/locale/zh-CN.ts +5 -0
- package/template/generators/config/i18n/sfc/src/button/index.ts +8 -0
- package/template/generators/config/i18n/sfc/src/button/style/button.less +14 -0
- package/template/generators/config/i18n/sfc/src/button/style/index.less +1 -0
- package/template/generators/config/i18n/sfc/src/button/style/index.ts +1 -0
- package/template/generators/config/i18n/sfc/src/locale/__tests__/index.spec.js +52 -0
- package/template/generators/config/i18n/sfc/src/locale/docs/en-US.md +26 -0
- package/template/generators/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -0
- package/template/generators/config/i18n/sfc/src/locale/en-US.d.ts +5 -0
- package/template/generators/config/i18n/sfc/src/locale/en-US.ts +7 -0
- package/template/generators/config/i18n/sfc/src/locale/index.ts +82 -0
- package/template/generators/config/i18n/sfc/src/locale/zh-CN.d.ts +5 -0
- package/template/generators/config/i18n/sfc/src/locale/zh-CN.ts +7 -0
- package/template/generators/config/i18n/sfc/src/utils/components.ts +20 -0
- package/template/generators/config/i18n/tsx/src/button/Button.tsx +35 -0
- package/template/generators/config/i18n/tsx/src/button/__tests__/index.spec.js +8 -0
- package/template/generators/config/i18n/tsx/src/button/docs/en-US.md +39 -0
- package/template/generators/config/i18n/tsx/src/button/docs/zh-CN.md +39 -0
- package/template/generators/config/i18n/tsx/src/button/example/BasicUse.vue +11 -0
- package/template/generators/config/i18n/tsx/src/button/example/ModifyColor.vue +11 -0
- package/template/generators/config/i18n/tsx/src/button/example/index.vue +15 -0
- package/template/generators/config/i18n/tsx/src/button/example/locale/en-US.ts +5 -0
- package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -0
- package/template/generators/config/i18n/tsx/src/button/example/locale/zh-CN.ts +5 -0
- package/template/generators/config/i18n/tsx/src/button/index.ts +8 -0
- package/template/generators/config/i18n/tsx/src/button/style/button.less +14 -0
- package/template/generators/config/i18n/tsx/src/button/style/index.less +1 -0
- package/template/generators/config/i18n/tsx/src/button/style/index.ts +1 -0
- package/template/generators/config/i18n/tsx/src/locale/__tests__/index.spec.js +52 -0
- package/template/generators/config/i18n/tsx/src/locale/docs/en-US.md +26 -0
- package/template/generators/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -0
- package/template/generators/config/i18n/tsx/src/locale/en-US.d.ts +5 -0
- package/template/generators/config/i18n/tsx/src/locale/en-US.ts +7 -0
- package/template/generators/config/i18n/tsx/src/locale/index.ts +82 -0
- package/template/generators/config/i18n/tsx/src/locale/zh-CN.d.ts +5 -0
- package/template/generators/config/i18n/tsx/src/locale/zh-CN.ts +7 -0
- package/template/generators/config/i18n/tsx/src/utils/components.ts +20 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import pico from 'picocolors';
|
|
2
|
+
export default {
|
|
3
|
+
info(text) {
|
|
4
|
+
console.log(text);
|
|
5
|
+
},
|
|
6
|
+
success(text) {
|
|
7
|
+
console.log(pico.green(text));
|
|
8
|
+
},
|
|
9
|
+
warning(text) {
|
|
10
|
+
console.log(pico.yellow(text));
|
|
11
|
+
},
|
|
12
|
+
error(text) {
|
|
13
|
+
console.log(pico.red(text));
|
|
14
|
+
},
|
|
15
|
+
title(text) {
|
|
16
|
+
console.log(pico.cyan(text));
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Run watcher-triggered rebuilds one at a time, including after a failed run. */
|
|
2
|
+
export function createSerialTask() {
|
|
3
|
+
let pending = Promise.resolve();
|
|
4
|
+
return (task) => {
|
|
5
|
+
const next = pending.catch(() => undefined).then(task);
|
|
6
|
+
pending = next;
|
|
7
|
+
return next;
|
|
8
|
+
};
|
|
9
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,114 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maple-design/cli-vue",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "cli of maple",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cli",
|
|
7
|
+
"maple"
|
|
8
|
+
],
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/loca-spirit/maple-design-mobile/issues"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/loca-spirit/maple-design-mobile.git",
|
|
15
|
+
"directory": "packages/cli"
|
|
16
|
+
},
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"author": "shuai.meng",
|
|
19
|
+
"type": "module",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": "./lib/node/index.js",
|
|
22
|
+
"./release": "./lib/node/release/index.js",
|
|
23
|
+
"./client": "./client.js"
|
|
24
|
+
},
|
|
25
|
+
"main": "./lib/node/index.js",
|
|
26
|
+
"module": "./lib/node/index.js",
|
|
27
|
+
"bin": {
|
|
28
|
+
"maple-cli": "./bin/cli.mjs"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"bin",
|
|
32
|
+
"lib",
|
|
33
|
+
"client.js",
|
|
34
|
+
"client.d.ts",
|
|
35
|
+
"template",
|
|
36
|
+
"site"
|
|
37
|
+
],
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@babel/core": "^7.28.0",
|
|
40
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
41
|
+
"@inquirer/prompts": "^6.0.1",
|
|
42
|
+
"@sparknest/ui-build-vue": "^1.0.0",
|
|
43
|
+
"@sparknest/ui-doc-preview-vue": "^1.0.0",
|
|
44
|
+
"@vitejs/plugin-vue": "5.2.1",
|
|
45
|
+
"@vitejs/plugin-vue-jsx": "4.1.1",
|
|
46
|
+
"@vue/babel-plugin-jsx": "1.2.5",
|
|
47
|
+
"@vue/compiler-sfc": "3.5.13",
|
|
48
|
+
"@vue/runtime-core": "3.5.13",
|
|
49
|
+
"chokidar": "^3.6.0",
|
|
50
|
+
"commander": "^8.3.0",
|
|
51
|
+
"conventional-changelog": "^5.1.0",
|
|
52
|
+
"ejs": "^3.1.10",
|
|
53
|
+
"esbuild": "0.23.1",
|
|
54
|
+
"fs-extra": "^9.0.1",
|
|
55
|
+
"glob": "7.2.3",
|
|
56
|
+
"hash-sum": "^2.0.0",
|
|
57
|
+
"less": "^3.13.1",
|
|
58
|
+
"markdown-it": "^14.3.0",
|
|
59
|
+
"nanospinner": "^1.2.2",
|
|
60
|
+
"picocolors": "^1.1.1",
|
|
61
|
+
"sass": "^1.89.2",
|
|
62
|
+
"semver": "^7.7.2",
|
|
63
|
+
"tinyexec": "npm:tinyexec@^0.3.0",
|
|
64
|
+
"typescript": "5.3.3",
|
|
65
|
+
"unplugin-auto-import": "^0.18.6",
|
|
66
|
+
"unplugin-vue-components": "^0.27.5",
|
|
67
|
+
"vite": "6.1.1",
|
|
68
|
+
"vitest": "3.0.6",
|
|
69
|
+
"vue": "3.5.13",
|
|
70
|
+
"@maple-design/shared-vue": "1.1.0",
|
|
71
|
+
"@maple-design/vite-plugins-vue": "1.1.0",
|
|
72
|
+
"@maple-design/resolver-vue": "1.1.0"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@types/babel__core": "^7.20.5",
|
|
76
|
+
"@types/ejs": "^3.1.5",
|
|
77
|
+
"@types/fs-extra": "^9.0.13",
|
|
78
|
+
"@types/glob": "7.2.0",
|
|
79
|
+
"@types/hash-sum": "^1.0.2",
|
|
80
|
+
"@types/markdown-it": "^12.2.3",
|
|
81
|
+
"@types/node": "^18.7.20",
|
|
82
|
+
"@types/semver": "^7",
|
|
83
|
+
"rimraf": "^5.0.1",
|
|
84
|
+
"@maple-design/touch-emulator-vue": "1.1.0",
|
|
85
|
+
"@maple-design/icons-vue": "1.1.1",
|
|
86
|
+
"@maple-design/ui-vue": "1.1.0"
|
|
87
|
+
},
|
|
88
|
+
"peerDependencies": {
|
|
89
|
+
"@vitest/coverage-istanbul": "3.0.6",
|
|
90
|
+
"@vue/runtime-core": "3.5.13",
|
|
91
|
+
"@vue/test-utils": "2.4.6",
|
|
92
|
+
"clipboard": "^2.0.6",
|
|
93
|
+
"jsdom": "24.1.1",
|
|
94
|
+
"live-server": "^1.2.1",
|
|
95
|
+
"vue": "3.5.13",
|
|
96
|
+
"vue-router": "4.5.0",
|
|
97
|
+
"@maple-design/touch-emulator-vue": "1.1.0",
|
|
98
|
+
"@maple-design/icons-vue": "1.1.1",
|
|
99
|
+
"@maple-design/ui-vue": "1.1.0"
|
|
100
|
+
},
|
|
101
|
+
"engines": {
|
|
102
|
+
"node": "^14.18.0 || >=16.0.0"
|
|
103
|
+
},
|
|
104
|
+
"publishConfig": {
|
|
105
|
+
"access": "public",
|
|
106
|
+
"registry": "https://registry.npmjs.org/"
|
|
107
|
+
},
|
|
108
|
+
"scripts": {
|
|
109
|
+
"build": "rimraf ./lib && tsc",
|
|
110
|
+
"dev": "tsc --watch",
|
|
111
|
+
"test": "vitest run --config vitest.config.ts",
|
|
112
|
+
"build:node": "tsc -p tsconfig.node.json"
|
|
113
|
+
}
|
|
6
114
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { getDocumentationSection, getSectionMenu, sectionRoute } from './documentation-sections'
|
|
3
|
+
import type { Menu } from './utils'
|
|
4
|
+
|
|
5
|
+
const sections = [
|
|
6
|
+
{ id: 'showcase', text: { 'zh-CN': '特色与场景' }, entry: 'showcase', docs: ['showcase', 'practiceList'] },
|
|
7
|
+
{ id: 'components', text: { 'zh-CN': '组件' }, entry: 'quickstart', mobileEntry: 'home' },
|
|
8
|
+
]
|
|
9
|
+
const menu = [
|
|
10
|
+
{ type: 1, text: { 'zh-CN': '特色与场景' } },
|
|
11
|
+
{ type: 3, doc: 'showcase' },
|
|
12
|
+
{ type: 3, doc: 'practiceList' },
|
|
13
|
+
{ type: 1, text: { 'zh-CN': '开发指南' } },
|
|
14
|
+
{ type: 3, doc: 'quickstart' },
|
|
15
|
+
{ type: 1, text: { 'zh-CN': '组件' } },
|
|
16
|
+
{ type: 2, doc: 'button' },
|
|
17
|
+
] as Menu[]
|
|
18
|
+
describe('independent documentation sections', () => {
|
|
19
|
+
it('keeps menus isolated across languages and direct routes', () => {
|
|
20
|
+
for (const locale of ['zh-CN', 'en-US']) {
|
|
21
|
+
expect(getDocumentationSection(`/${locale}/practiceList`, sections)?.id).toBe('showcase')
|
|
22
|
+
expect(getDocumentationSection(`/${locale}/button`, sections)?.id).toBe('components')
|
|
23
|
+
}
|
|
24
|
+
expect(
|
|
25
|
+
getSectionMenu(menu, sections[0], sections)
|
|
26
|
+
.map((item) => item.doc)
|
|
27
|
+
.filter(Boolean),
|
|
28
|
+
).toEqual(['showcase', 'practiceList'])
|
|
29
|
+
expect(
|
|
30
|
+
getSectionMenu(menu, sections[1], sections)
|
|
31
|
+
.map((item) => item.doc)
|
|
32
|
+
.filter(Boolean),
|
|
33
|
+
).toEqual(['quickstart', 'button'])
|
|
34
|
+
expect(getSectionMenu(menu, undefined, [])).toBe(menu)
|
|
35
|
+
})
|
|
36
|
+
it('uses a scoped mobile component home and preserves language exactly once', () => {
|
|
37
|
+
expect(sectionRoute(sections[0], 'en-US')).toEqual({ path: '/en-US/showcase', query: {} })
|
|
38
|
+
expect(sectionRoute(sections[1], 'en-US', true)).toEqual({
|
|
39
|
+
path: '/home',
|
|
40
|
+
query: { section: 'components', language: 'en-US' },
|
|
41
|
+
})
|
|
42
|
+
expect(getDocumentationSection('/home', sections, 'showcase')?.id).toBe('showcase')
|
|
43
|
+
expect(getDocumentationSection('/home', sections, 'invalid')?.id).toBe('components')
|
|
44
|
+
})
|
|
45
|
+
})
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Menu } from './utils'
|
|
2
|
+
|
|
3
|
+
export interface DocumentationSection {
|
|
4
|
+
id: string
|
|
5
|
+
text: Record<string, string>
|
|
6
|
+
entry: string
|
|
7
|
+
mobileEntry?: string
|
|
8
|
+
docs?: string[]
|
|
9
|
+
}
|
|
10
|
+
export function getDocumentationSection(path: string, sections: DocumentationSection[], requested?: unknown) {
|
|
11
|
+
const doc = path.split('?')[0].split('/').filter(Boolean).at(-1) ?? ''
|
|
12
|
+
if (doc === 'home' && typeof requested === 'string') {
|
|
13
|
+
const explicit = sections.find((section) => section.id === requested)
|
|
14
|
+
if (explicit) return explicit
|
|
15
|
+
}
|
|
16
|
+
return (
|
|
17
|
+
sections.find((section) => section.docs?.includes(doc)) ?? sections.find((section) => !section.docs) ?? sections[0]
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
export function getSectionMenu(
|
|
21
|
+
menu: Menu[],
|
|
22
|
+
section: DocumentationSection | undefined,
|
|
23
|
+
sections: DocumentationSection[],
|
|
24
|
+
) {
|
|
25
|
+
if (!section) return menu
|
|
26
|
+
const result: Menu[] = []
|
|
27
|
+
let heading: Menu | undefined
|
|
28
|
+
for (const item of menu) {
|
|
29
|
+
if (item.type === 1) {
|
|
30
|
+
heading = item
|
|
31
|
+
continue
|
|
32
|
+
}
|
|
33
|
+
if (getDocumentationSection(item.doc, sections)?.id !== section.id) continue
|
|
34
|
+
if (heading) {
|
|
35
|
+
result.push(heading)
|
|
36
|
+
heading = undefined
|
|
37
|
+
}
|
|
38
|
+
result.push(item)
|
|
39
|
+
}
|
|
40
|
+
return result
|
|
41
|
+
}
|
|
42
|
+
export function sectionRoute(section: DocumentationSection, language: string, mobile = false) {
|
|
43
|
+
const doc = mobile ? (section.mobileEntry ?? section.entry) : section.entry
|
|
44
|
+
return {
|
|
45
|
+
path: doc === 'home' ? '/home' : `/${language}/${doc}`,
|
|
46
|
+
query: doc === 'home' ? { section: section.id, language } : {},
|
|
47
|
+
}
|
|
48
|
+
}
|