Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: improve api parser and json schema for vue #2051

Merged
merged 13 commits into from
Apr 2, 2024

Conversation

jeffwcx
Copy link
Collaborator

@jeffwcx jeffwcx commented Mar 21, 2024

🤔 这个变动的性质是?/ What is the nature of this change?

  • 新特性提交 / New feature
  • bug 修复 / Fix bug
  • 样式优化 / Style optimization
  • 代码风格优化 / Code style optimization
  • 性能优化 / Performance optimization
  • 构建优化 / Build optimization
  • 网站、文档、Demo 改进 / Website, documentation, demo improvements
  • 重构代码或样式 / Refactor code or style
  • 测试相关 / Test related
  • 其他 / Other

🔗 相关 Issue / Related Issue

💡 需求背景和解决方案 / Background or solution

一. 添加更多 jsdoc tags支持

  • 引入release tags(@public / @deprecated / @experimental / @beta / @alpha),去掉@expose
  • 引入version control tags (@version / @since)
    对API组件有一定修改(只有具备某些js tag信息才会渲染出效果,没有则和原来一样)
image image image
  • 添加Functional Component/Generic Component支持,引入@component区分普通函数和前两者

二. disableExternalLinkAutoDectectexternalSymbolLinkMap 支持

通过配置

  externalSymbolLinkMap: {
    typescript: {
      Promise:
        'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise',
    },
  },

可实现以下效果
image

这里对API组件改动比较大,主要是让HANDLERS返回ReactNode而不是string,需要审查一下 @PeachScript

disableExternalLinkAutoDectect主要用于关闭自动外链检测
一般情况下,typescript关于web api的部分是有外链的
image
我们会自动检测这都些外链

三. source links 支持

有以下选项可供使用

  • disableSources 禁止生成source links
  • disableGit 禁止执行git命令,直接由用户提供sourceLinkTemplategitRevision
  • sourceLinkTemplate
    默认支持github, bitbucket, gitlab, gitee模板,如果是私有服或是其他公有服务,可自行提供sourceLinkTemplate,例如: https://xxx.coding.net/p/xxxx/d/xxxx/git/tree/{gitRevision}/{path}#L{line}
  • gitRevision 可固定为某个分支
  • gitRemote 默认为origin, 可自行指定

📝 更新日志 / Changelog

Language Changelog
🇺🇸 English enhancement of dumi-vue-meta and API component
🇨🇳 Chinese dumi-vue-meta及API组件增强

Copy link

vercel bot commented Mar 21, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
dumi ✅ Ready (Inspect) Visit Preview 💬 Add feedback Mar 30, 2024 11:40am

examples/vue/.dumirc.ts Outdated Show resolved Hide resolved
examples/vue/src/functional.tsx Show resolved Hide resolved
examples/vue/src/Button/index.tsx Show resolved Hide resolved
if (typeof prop.type === 'string' && prop.type in this) {
// value from TypeMap
if ('enum' in prop) return this.enum(prop);

return (this as any)[prop.type](prop);
} else if (prop.type) {
// non-parsed type, such as ReactNode
return this.getValidClassName(prop) || prop.type;
return this.getValidClassName(prop) || <span>{prop.type}</span>;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

所有值必须套一层 span 吗

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

主要是保持一致性,后续如果要加className进行样式美化就比较方便

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

比如说后面要弄一些高亮什么的,那么每个类型,就需要单独的className

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果是这个作用的话感觉这里做得有点太多了,返回纯文本后续用高亮库来实现会更简单一些?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

可是如果全部返回纯文本,a标签的插入就得用innerHTML了,很多<>泛型的地方就得进行html encoding,而且不保证哪里会有问题

@jeffwcx
Copy link
Collaborator Author

jeffwcx commented Mar 28, 2024

source links更新了,再看看呗。主要dumi-assets-types协议部分,我不确定是否和你们的内部版本冲突 @PeachScript

/**
* URL for displaying source file, usually the git repo file URL
*/
url?: string;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个存 assets.json 会比较冗余,在运行时再拼 repository 信息,类似:

href={`${intl.formatMessage(
{ id: '$internal.edit.link' },
{ filename: frontmatter.filename },
)}`}

siteDataContext 里可能得记一下 git tree hash


&-link {
padding-right: 16px;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='@{link-icon-color}'><path d='M10 6V8H5V19H16V14H18V20C18 20.5523 17.5523 21 17 21H4C3.44772 21 3 20.5523 3 20V7C3 6.44772 3.44772 6 4 6H10ZM21 3V11H19L18.9999 6.413L11.2071 14.2071L9.79289 12.7929L17.5849 5H13V3H21Z'></path></svg>");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个图标先不加吧,样式我再想想后面给所有外链统一加

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK,那就只加链接

@PeachScript
Copy link
Member

主要dumi-assets-types协议部分,我不确定是否和你们的内部版本冲突

看新增的都是 optional,应该问题不大,function 的部分也是和解析结果对应的

@jeffwcx
Copy link
Collaborator Author

jeffwcx commented Mar 31, 2024

看看喽 @PeachScript

Copy link
Member

@PeachScript PeachScript left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@PeachScript PeachScript changed the title feat: enhance vue-meta feat: improve api parser and json schema for vue Apr 2, 2024
@PeachScript PeachScript merged commit 8cdc32b into feature/2.3.0 Apr 2, 2024
9 checks passed
@PeachScript PeachScript deleted the feature/vue-meta-enhance branch April 2, 2024 09:23
PeachScript added a commit that referenced this pull request Apr 26, 2024
* refactor: extract inline plugin templates as independent files (#1874)

* refactor: mv to tmpl

* refactor: more info

* refactor: to template

* docs: add customize page

* refactor: to contant

* chore: revert config

* chore: rm tmpl

* chore: dir path

* chore: clean up

* feat: split markdown meta loader (#1875)

* feat: split mdLoader type

* feat: split mdLoader

* chore: code optimize

* fix: use winPath

* chore: update getter

* refactor: extract runtime tpl (#1883)

* refactor: load text data from self in markdown loader (#1881)

* refactor: provider `useDemoData` which is given by `getDemoById` (#1876)

* chore: all pass to lazy

* chore: match route

* chore: meta demos

* chore: support getDemoById

* chore: split code

* chore: back of it

* chore: getDemoById

* chore: support demo sus

* chore: all demos

* chore: demo extract

* chore: clean up

* chore: clean up

* chore: rm fallback

* refactor: remove full demos from context (#1885)

* chore: rm demos

* chore: update lock file

* chore: rm texts (#1886)

* refactor: useRouteMeta & useTabMeta with getRouteMetaById (#1888)

* refactor: useRouteMeta & useTabMeta

* fix: route meta

* refactor: fix sidebar

* chore: code clean

* refactor: useRouteMeta fully use getRouteMetaById (#1889)

* fix: useRouteMeta fully use getRouteMetaById

* refactor: runtime get frontmatter directly

* refactor: use sync frontmatter

* refactor: better frontmatter code (#1892)

* refactor: better frontmatter code

* fix: render loop

* refactor: clean up meta (#1894)

* refactor: clean up meta

* chore: clean up

* feat: Make searchable again (#1898)

* chore: search data

* chore: fill content

* chore: fix loading

* chore: support loading state

* feat: merge chunk & optimize meta loading (#1906)

* feat: use new loader for search

* feat: search support tsx

* feat: split meta chunk

* feat: load meta on hover

* chore: code clena

* perf: loadSearchData on focus & show loading only once (#1915)

* fix: demo should export html file (#1931)

* fix: demo should export html file

* chore: code clean

* feat: support live demo (#1905)

* feat: support live code

* feat: split live plugin

* feat: enabled by live config

* feat: add error catcher

* docs: add docs

* docs: add docs

* feat: update single file logic

* docs: rm docs

* feat: put Live Components into theme-default slots

* feat: update regexp & fix enable logic

* feat: make LiveEditor derivate Editor

* feat: enhance live regexp (#1946)

* refactor: optimize async route meta solution (#1974)

* refactor: optimize async route meta solution

* refactor: simplify markdown loader rules

* refactor: correct async tab meta load logic

* refactor: page suspense add fallback

* feat: add default loading skeleton (#1512)

* feat: add global loading logic

# This is the 1st commit message:

feat: add global loading logic

# This is the commit message #2:

chore: update

# This is the commit message #3:

feat: add Loading Skeleton

# This is the commit message #4:

feat: update

# This is the commit message #5:

chore: update Loading

# This is the commit message #6:

chore: update pnpm-lock.yaml

# This is the commit message #7:

chore: fix lock file

# This is the commit message #8:

Revert "chore: fix lock file"

This reverts commit 73dee02.

# This is the commit message #9:

Revert "chore: update pnpm-lock.yaml"

This reverts commit 3f6f579.

# This is the commit message #10:

chore: fix lock file

# This is the commit message #11:

chore: update logic

# This is the commit message #12:

chore(deps): bump umi@4.0.54

# This is the commit message #13:

Revert "chore(deps): bump umi@4.0.54"

This reverts commit 011ecf9.

# This is the commit message #14:

fix: fix path error on windows platform

# This is the commit message #15:

chore(deps): bump umi@4.0.54

# This is the commit message #16:

chore: revert @umi/lint 4.0.54 => 4.0.53

Because there is breaking change

# This is the commit message #17:

chore(deps): upgrade umi@4.0.55

# This is the commit message #18:

chore: update type

# This is the commit message #19:

chore: update Loading

# This is the commit message #20:

refactor: site template ignore dist dir (#1518)

add /dist > .gitignore
# This is the commit message #21:

refactor: improve content padding when disable footer (#1517)

* chore(theme): improve the default theme style

* chore: update Content style

* chore: update
# This is the commit message #22:

refactor: make chunk name clean for theme routes (#1513)

fix: special links not working bug in markdown (#1524)

* fix: absolute links and schema links lost bug in markdown

* refactor: update relative link condition

* refactor: update relative link condition for data url

* Update src/loaders/markdown/transformer/rehypeLink.ts

* Update src/loaders/markdown/transformer/rehypeLink.ts

* refactor: new way to handle special links

fix: workaround for helmet lost in ssr since umi@4.0.54 (#1525)

* fix: helmet lost in ssr since umi@4.0.53

* refactor: patch helmet for version range

* style: update

fix: react types is missing in react template (#1526)

build: release 2.1.15

Revert "Merge branch 'master' into wuxh/feat-1463"

This reverts commit 6b344d9, reversing
changes made to bfef009.

* chore: update

* chore: update lock file

* docs: update dingtalk qrcode

* fix: conventional 2-level nav lost in localized routes (#1951)

* chore: bump @babel/traverse from 7.22.8 to 7.23.2 (#1947)

Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.8 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build: release 2.2.14

* docs: correct spelling of code sandbox

* fix: unexpected transformation of colon symbol (#1962)

Co-authored-by: liangjun.chen <liangjun.chen@yunqutech.com>

* chore: bump browserify-sign from 4.2.1 to 4.2.2 (#1954)

Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](browserify/browserify-sign@v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: color select disappeared unexpectedly on simulator (#1976)

* fix: wrong search scroll position of 1-level heading in current page (#1978)

* fix: fixed the hash was cleared and did not scroll to the corresponding position

* feat: 调整搜索逻辑,如果目标链接是本页 & !hash,则滚动到顶部

* fix: api table does not respect ignore flag (#1981)

* build: release 2.2.15

* fix: handle unexpected oneof and allof for api metadata (#1982)

* refactor: cache dir config can control compile fs cache location (#1984)

* refactor: use async way to parse theme modules (#1983)

* build: release 2.2.16

* chore: revert change

* Revert "chore: revert change"

This reverts commit 6eeac57.

* chore: remove

* feat: add loadcomp logic

* chore: making the simple complicated is commonplace

* Revert "Revert "chore: revert change""

This reverts commit fee192f.

* chore: ?

* chore: clean code

* chore: update lock file

* chore: update

* chore: update style

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: PeachScript <scdzwyxst@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Optimistic-Chen <64662582+DBSDs@users.noreply.github.com>
Co-authored-by: liangjun.chen <liangjun.chen@yunqutech.com>
Co-authored-by: binyellow <571704908@qq.com>
Co-authored-by: 阿平 <xierenyuan@qq.com>

* refactor: optimize live demo feature in v2.3 (#1992)

* refactor: clean up compile-time logic

* feat: emit demo context in loader

* refactor: clean up runtime api and slots

* feat: add SourceCodeEditor slot

* feat: add useLiveDemo api

* refactor: rewrite live demo feature with useLiveDemo

* feat: live demo support iframe mode

* refactor: constants for browser runtime

* fix: multi-instance problem and styles of live demo feature (#2001)

* refactor: improve naming of useLiveDemo api

* refactor: restore live config temporarily

* fix: live demo error styles for compact demo

* fix: wrong npm dependency meta in runtime

* fix: multiple instance problem from demo context

* refactor: avoid breaking change for useRouteMeta api (#2002)

* refactor: avoid empty tabs from useRouteMeta

* refactor: version check include prerelease

* feat: live demo support custom tech stack (#2012)

* feat: live demo support custom tech stack

* feat: add live loading status for demo previewer

* feat: useLiveDemo support iframe demo (#2013)

* feat: useLiveDemo support iframe demo

* refactor: exclude demo entry file from context

* perf: skip outdated tasks for useLiveDemo

* fix: unexpected suspense from useRouteMeta (#2019)

* fix: unexpected suspense from useRouteMeta

* refactor: remove use from useRouteMeta

* feat: tech stack supports declare runtime plugin (#2020)

* fix: overflow for source code editor (#2014)

* fix: source code should wrap

* fix: code scroll

* chore: optimize

* chore: code opt

* chore: code clean

* fix: code editor scroll bar should be draggable (#2023)

* feat: support vue tech stack (#1922)

* feat: add vue tech stack support

* docs: techstack related

how to use vue and how to add techstack support plugin

* feat: add external api parser support

1. Add interfaces to allow dumi to integrate with an external api parser
2. Add dumi-vue-meta package, which can extract metadata from vue.
3.  Add  API tables support for dumi-plugin-vue

* docs: api table support related

* feat: add an option for changing tsconfig path

Add the `tsconfigPath` option in `parserOptions` to allow user to customize tsconfig

* refactor: give watcher creation rights to BaseAtomAssetsParser

* docs: Update README.md

* fix: type of function signature parameter needs to be string

* refactor: code structure adjustment

* fix: babel-plugin-iife type error

* chore: use umi prebundled babel dependencies

prebundle `@vue/babel-plugin-jsx`

* feat: add onBlockLoad method for IDumiTechStack

Provide a method for parsing custom files of frontend frameworks.

* refactor: replace `babel-plugin-iife` with` transformDemoCode`

* refactor: consolidate runtime related APIs into `IDumiTechStack`

remove `useTechStackRuntimeApi`

* feat: add createApiParser

* fix: createApiParser

* docs: techstack related

* refactor: add bundle-utils

* fix: support html2sketch

* fix: html comments FrontMatter

* feat: incorporate live demo into the techstack

* fix: iframe mode

* fix: issue introduced by @vue/babel-plugin-jsx

vuejs/babel-plugin-jsx#687

* refactor: new design of techstack runtime options

* fix: live demo loading

* feat: check vue version

* refactor: flatten options of preset-vue

* refactor: remove id

* docs: preset-vue and techstack

* refactor: remove id of IDemoData

* fix: demo error

* fix: shoud pass id to useRenderer

* fix: unexpected return type of useRouteMeta

* refactor: improve vue tech stack support (#2036)

* chore: update eslintignore

* refactor: merge bundler-utils to tech-stack-utils

* refactor: turn useRenderer to internal api

* refactor: clean type definitions

* refactor: export parser apis from tech-stack-utils

* refactor: remove useless demo data from loader

* build: clear build config for dumi-vue-meta

* test: update test case

* test: update case for parser

* fix: unnecessary trailing line break for read-only source code (#2033)

* fix: trim

* fix: 兼容LiveDemo情况

---------

Co-authored-by: Peach <scdzwyxst@gmail.com>

* fix: demo editor style and live re-render for mobile theme (#2025)

* fix: theme-mobile sorce code editor style

* feat: move Tooltip to slots

* refactor: make tooltip as internal component

* chore: clear diff for pnpm-lock.yaml

* fix: mobile live demo

---------

Co-authored-by: PeachScript <scdzwyxst@gmail.com>

* feat: add defineTechStack api (#2042)

* feat: add createTechStack api

* refactor: change to defineTechStack, restore built-in ReactTechStack

* refactor: remain consistent with the original interface

---------

Co-authored-by: Peach <scdzwyxst@gmail.com>

* feat: support code group container (#2059)

* feat: markdown support CodeGroup

feat: 基本实现

chore: update docs

chore: style

chore: update

chore: update demo

chore: update logic

feat: update logic

chore: update docs

chore: remove

chore: update

chore: clean diff

chore: update

feat: update logic

test: update test

Revert "test: update test"

This reverts commit 994414e.

test: add unit test

* chore: fix ts lint

* chore: update code-group style

* chore: update

* test: update unit test

* Update src/loaders/markdown/transformer/remarkContainer.ts

Co-authored-by: Peach <scdzwyxst@gmail.com>

* chore: update logic

* chore: remove ts type

* feat: updata tabs comp

* chore: unified naming

---------

Co-authored-by: Peach <scdzwyxst@gmail.com>

* docs: describe for vue tech stack (#2050)

* docs: vue related

* docs: update defineTechStack

* feat: improve api parser and json schema for vue (#2051)

* feat: add functional component/generic component support

* feat: add more typedoc/jsdoc tags

version control  and release related tags

* fix: expose outside props

* feat: add externalSymbolLinkMap support

* fix: readme

* fix: tests run on windows

* feat: add source reference for interface, type alias, type params

* fix: vue demo

* fix: dynamic git revision

* fix: tests on windows

* refactor: remove version

* feat: use dumi built-in function to generate source links

* fix: multi-instance bug and unhandled error for live demo feature (#2078)

* fix: external resolve and skip server render handle for liveDemo

* fix: 依赖不再使用绝对路径

* fix: delete external

* feat: optimize the error prompts and editing experience of vue demo  (#2065)

* feat: optimize the error prompts and editing experience of vue demo

* refactor: use preflight option

* refactor: optimize userRenderer

* docs: vue supplement explanation (#2079)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: 二货爱吃白萝卜 <smith3816@gmail.com>
Co-authored-by: MadCcc <1075746765@qq.com>
Co-authored-by: 红 <wxh1220@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Optimistic-Chen <64662582+DBSDs@users.noreply.github.com>
Co-authored-by: liangjun.chen <liangjun.chen@yunqutech.com>
Co-authored-by: binyellow <571704908@qq.com>
Co-authored-by: 阿平 <xierenyuan@qq.com>
Co-authored-by: eternal~fire <jeffwcx@icloud.com>
Co-authored-by: Zhou Bill <735051883@qq.com>
Co-authored-by: Jinbao1001 <nodewebli@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants