@qubit-ltd/common-decorator 3.10.6 → 3.10.8

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 CHANGED
@@ -3,8 +3,8 @@
3
3
  [![npm package](https://img.shields.io/npm/v/@qubit-ltd/common-decorator.svg)](https://npmjs.com/package/@qubit-ltd/common-decorator)
4
4
  [![License](https://img.shields.io/badge/License-Apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
5
5
  [![中文文档](https://img.shields.io/badge/文档-中文版-blue.svg)](README.zh_CN.md)
6
- [![CircleCI](https://dl.circleci.com/status-badge/img/gh/Haixing-Hu/js-common-decorator/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/Haixing-Hu/js-common-decorator/tree/master)
7
- [![Coverage Status](https://coveralls.io/repos/github/Haixing-Hu/js-common-decorator/badge.svg?branch=master)](https://coveralls.io/github/Haixing-Hu/js-common-decorator?branch=master)
6
+ [![CircleCI](https://dl.circleci.com/status-badge/img/gh/qubit-ltd/js-common-decorator/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/qubit-ltd/js-common-decorator/tree/master)
7
+ [![Coverage Status](https://coveralls.io/repos/github/qubit-ltd/js-common-decorator/badge.svg?branch=master)](https://coveralls.io/github/qubit-ltd/js-common-decorator?branch=master)
8
8
 
9
9
  ## Overview
10
10
 
@@ -1527,7 +1527,7 @@ See the [LICENSE](LICENSE) file for more details.
1527
1527
  [@babel/plugin-proposal-decorators]: https://babeljs.io/docs/babel-plugin-proposal-decorators
1528
1528
  [stage 3 proposal of JavaScript decorators]: https://github.com/tc39/proposal-decorators
1529
1529
  [stage 3 proposal of JavaScript decorator metadata]: https://github.com/tc39/proposal-decorator-metadata
1530
- [GitHub repository]: https://github.com/Haixing-Hu/js-common-decorator
1530
+ [GitHub repository]: https://github.com/qubit-ltd/js-common-decorator
1531
1531
  [webpack]: https://webpack.js.org/
1532
1532
  [vite]: https://vitejs.dev/
1533
1533
  [vite-plugin-vue]: https://www.npmjs.com/package/@vitejs/plugin-vue
package/README.zh_CN.md CHANGED
@@ -3,8 +3,8 @@
3
3
  [![npm package](https://img.shields.io/npm/v/@qubit-ltd/common-decorator.svg)](https://npmjs.com/package/@qubit-ltd/common-decorator)
4
4
  [![License](https://img.shields.io/badge/License-Apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
5
5
  [![English Document](https://img.shields.io/badge/Document-English-blue.svg)](README.md)
6
- [![CircleCI](https://dl.circleci.com/status-badge/img/gh/Haixing-Hu/js-common-decorator/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/Haixing-Hu/js-common-decorator/tree/master)
7
- [![Coverage Status](https://coveralls.io/repos/github/Haixing-Hu/js-common-decorator/badge.svg?branch=master)](https://coveralls.io/github/Haixing-Hu/js-common-decorator?branch=master)
6
+ [![CircleCI](https://dl.circleci.com/status-badge/img/gh/qubit-ltd/js-common-decorator/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/qubit-ltd/js-common-decorator/tree/master)
7
+ [![Coverage Status](https://coveralls.io/repos/github/qubit-ltd/js-common-decorator/badge.svg?branch=master)](https://coveralls.io/github/qubit-ltd/js-common-decorator?branch=master)
8
8
 
9
9
  ## 概述
10
10
 
@@ -1301,7 +1301,7 @@ console.log(sourceField); // 'first_name'
1301
1301
  [@babel/plugin-proposal-decorators]: https://babeljs.io/docs/babel-plugin-proposal-decorators
1302
1302
  [JavaScript 装饰器 stage 3 提案]: https://github.com/tc39/proposal-decorators
1303
1303
  [JavaScript 装饰器元数据 stage 3 提案]: https://github.com/tc39/proposal-decorator-metadata
1304
- [GitHub 仓库]: https://github.com/Haixing-Hu/js-common-decorator
1304
+ [GitHub 仓库]: https://github.com/qubit-ltd/js-common-decorator
1305
1305
  [webpack]: https://webpack.js.org/
1306
1306
  [vite]: https://vitejs.dev/
1307
1307
  [vite-plugin-vue]: https://www.npmjs.com/package/@vitejs/plugin-vue
@@ -1,6 +1,6 @@
1
1
  <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Home</title><!--[if lt IE 9]>
2
2
  <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
- <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="home-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M19 21H5a1 1 0 0 1-1-1v-9H1l10.327-9.388a1 1 0 0 1 1.346 0L23 11h-3v9a1 1 0 0 1-1 1zM6 19h12V9.157l-6-5.454-6 5.454V19z"/></symbol><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title"><a href="index.html" class="sidebar-home-anchor">首页</a></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-类"><div>类</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="DefaultAssignmentOptions.html">DefaultAssignmentOptions</a></div><div class="sidebar-section-children"><a href="DefaultOptions.html">DefaultOptions</a></div><div class="sidebar-section-children"><a href="DefaultToJsonOptions.html">DefaultToJsonOptions</a></div><div class="sidebar-section-children"><a href="Page.html">Page</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-命名空间"><div>命名空间</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Enum.html">Enum</a></div><div class="sidebar-section-children"><a href="Model.html">Model</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-全局"><div>全局</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#ElementType">ElementType</a></div><div class="sidebar-section-children"><a href="global.html#Label">Label</a></div><div class="sidebar-section-children"><a href="global.html#NameField">NameField</a></div><div class="sidebar-section-children"><a href="global.html#NonEmpty">NonEmpty</a></div><div class="sidebar-section-children"><a href="global.html#Normalizable">Normalizable</a></div><div class="sidebar-section-children"><a href="global.html#Nullable">Nullable</a></div><div class="sidebar-section-children"><a href="global.html#Readonly">Readonly</a></div><div class="sidebar-section-children"><a href="global.html#Timeout">Timeout</a></div><div class="sidebar-section-children"><a href="global.html#Type">Type</a></div><div class="sidebar-section-children"><a href="global.html#Validatable">Validatable</a></div><div class="sidebar-section-children"><a href="global.html#assign">assign</a></div><div class="sidebar-section-children"><a href="global.html#create">create</a></div><div class="sidebar-section-children"><a href="global.html#createArray">createArray</a></div><div class="sidebar-section-children"><a href="global.html#createDeferredReadonlyInitializer">createDeferredReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createImmediateReadonlyInitializer">createImmediateReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createPage">createPage</a></div><div class="sidebar-section-children"><a href="global.html#defaultNormalizer">defaultNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#defaultValidator">defaultValidator</a></div><div class="sidebar-section-children"><a href="global.html#enumNormalizer">enumNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#getDefaultInstance">getDefaultInstance</a></div><div class="sidebar-section-children"><a href="global.html#getFieldElementType">getFieldElementType</a></div><div class="sidebar-section-children"><a href="global.html#getFieldType">getFieldType</a></div><div class="sidebar-section-children"><a href="global.html#getSourceField">getSourceField</a></div><div class="sidebar-section-children"><a href="global.html#hasOwnProperty">hasOwnProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasProperty">hasProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasPrototypeFunction">hasPrototypeFunction</a></div><div class="sidebar-section-children"><a href="global.html#isEnumClass">isEnumClass</a></div><div class="sidebar-section-children"><a href="global.html#isEnumerator">isEnumerator</a></div><div class="sidebar-section-children"><a href="global.html#isValidPageSource">isValidPageSource</a></div><div class="sidebar-section-children"><a href="global.html#normalize">normalize</a></div><div class="sidebar-section-children"><a href="global.html#stringifyId">stringifyId</a></div><div class="sidebar-section-children"><a href="global.html#toJSON">toJSON</a></div><div class="sidebar-section-children"><a href="global.html#toJsonString">toJsonString</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button home-button" aria-label="go-to-homepage"><svg><use xlink:href="#home-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">本页内容</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section class="readme"><article><h1>js-common-decorator</h1><p><a href="https://npmjs.com/package/@qubit-ltd/common-decorator"><img src="https://img.shields.io/npm/v/@qubit-ltd/common-decorator.svg" alt="npm package"></a><a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache-blue.svg" alt="License"></a><a href="README.md"><img src="https://img.shields.io/badge/Document-English-blue.svg" alt="English Document"></a><a href="https://dl.circleci.com/status-badge/redirect/gh/Haixing-Hu/js-common-decorator/tree/master"><img src="https://dl.circleci.com/status-badge/img/gh/Haixing-Hu/js-common-decorator/tree/master.svg?style=shield" alt="CircleCI"></a><a href="https://coveralls.io/github/Haixing-Hu/js-common-decorator?branch=master"><img src="https://coveralls.io/repos/github/Haixing-Hu/js-common-decorator/badge.svg?branch=master" alt="Coverage Status"></a></p><h2>概述</h2><p><a href="https://npmjs.com/package/@qubit-ltd/common-decorator">@qubit-ltd/common-decorator</a> 是一个JavaScript通用装饰器库,为您的领域类提供强大的增强工具。该库支持最新的(截至2023年11月)JavaScript装饰器[stage 3 提案]。</p><p>使用这个库,您可以轻松地为领域类添加常用方法,实现类似Java的枚举功能,添加验证和规范化功能等 - 所有这些都使用现代装饰器语法。</p><h2>特性</h2><ul><li><strong>现代装饰器支持</strong>:兼容最新的 JavaScript 装饰器 Stage 3 提案</li><li><strong>模型增强</strong>:<code>@Model</code> 装饰器为领域模型类添加常用方法</li><li><strong>枚举实现</strong>:<code>@Enum</code> 装饰器提供类似 Java 的枚举功能</li><li><strong>验证支持</strong>:<code>@Validatable</code> 装饰器实现字段验证</li><li><strong>规范化支持</strong>:<code>@Normalizable</code> 装饰器实现字段规范化</li><li><strong>类型安全</strong>:<code>@Type</code> 和 <code>@ElementType</code> 装饰器用于类型检查</li><li><strong>序列化工具</strong>:内置 JSON 序列化/反序列化支持</li><li><strong>工具函数</strong>:独立的辅助函数,用于ID转换、JSON序列化等功能</li><li><strong>高测试覆盖率</strong>:全面的测试套件确保所有功能的可靠性</li></ul><h2>安装</h2><pre class="prettyprint source lang-bash"><code># 使用 npm
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="home-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M19 21H5a1 1 0 0 1-1-1v-9H1l10.327-9.388a1 1 0 0 1 1.346 0L23 11h-3v9a1 1 0 0 1-1 1zM6 19h12V9.157l-6-5.454-6 5.454V19z"/></symbol><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title"><a href="index.html" class="sidebar-home-anchor">首页</a></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-类"><div>类</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="DefaultAssignmentOptions.html">DefaultAssignmentOptions</a></div><div class="sidebar-section-children"><a href="DefaultOptions.html">DefaultOptions</a></div><div class="sidebar-section-children"><a href="DefaultToJsonOptions.html">DefaultToJsonOptions</a></div><div class="sidebar-section-children"><a href="Page.html">Page</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-命名空间"><div>命名空间</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Enum.html">Enum</a></div><div class="sidebar-section-children"><a href="Model.html">Model</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-全局"><div>全局</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#ElementType">ElementType</a></div><div class="sidebar-section-children"><a href="global.html#Label">Label</a></div><div class="sidebar-section-children"><a href="global.html#NameField">NameField</a></div><div class="sidebar-section-children"><a href="global.html#NonEmpty">NonEmpty</a></div><div class="sidebar-section-children"><a href="global.html#Normalizable">Normalizable</a></div><div class="sidebar-section-children"><a href="global.html#Nullable">Nullable</a></div><div class="sidebar-section-children"><a href="global.html#Readonly">Readonly</a></div><div class="sidebar-section-children"><a href="global.html#Timeout">Timeout</a></div><div class="sidebar-section-children"><a href="global.html#Type">Type</a></div><div class="sidebar-section-children"><a href="global.html#Validatable">Validatable</a></div><div class="sidebar-section-children"><a href="global.html#assign">assign</a></div><div class="sidebar-section-children"><a href="global.html#create">create</a></div><div class="sidebar-section-children"><a href="global.html#createArray">createArray</a></div><div class="sidebar-section-children"><a href="global.html#createDeferredReadonlyInitializer">createDeferredReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createImmediateReadonlyInitializer">createImmediateReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createPage">createPage</a></div><div class="sidebar-section-children"><a href="global.html#defaultNormalizer">defaultNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#defaultValidator">defaultValidator</a></div><div class="sidebar-section-children"><a href="global.html#enumNormalizer">enumNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#getDefaultInstance">getDefaultInstance</a></div><div class="sidebar-section-children"><a href="global.html#getFieldElementType">getFieldElementType</a></div><div class="sidebar-section-children"><a href="global.html#getFieldType">getFieldType</a></div><div class="sidebar-section-children"><a href="global.html#getSourceField">getSourceField</a></div><div class="sidebar-section-children"><a href="global.html#hasOwnProperty">hasOwnProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasProperty">hasProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasPrototypeFunction">hasPrototypeFunction</a></div><div class="sidebar-section-children"><a href="global.html#isEnumClass">isEnumClass</a></div><div class="sidebar-section-children"><a href="global.html#isEnumerator">isEnumerator</a></div><div class="sidebar-section-children"><a href="global.html#isValidPageSource">isValidPageSource</a></div><div class="sidebar-section-children"><a href="global.html#normalize">normalize</a></div><div class="sidebar-section-children"><a href="global.html#stringifyId">stringifyId</a></div><div class="sidebar-section-children"><a href="global.html#toJSON">toJSON</a></div><div class="sidebar-section-children"><a href="global.html#toJsonString">toJsonString</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button home-button" aria-label="go-to-homepage"><svg><use xlink:href="#home-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">本页内容</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section class="readme"><article><h1>js-common-decorator</h1><p><a href="https://npmjs.com/package/@qubit-ltd/common-decorator"><img src="https://img.shields.io/npm/v/@qubit-ltd/common-decorator.svg" alt="npm package"></a><a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache-blue.svg" alt="License"></a><a href="README.md"><img src="https://img.shields.io/badge/Document-English-blue.svg" alt="English Document"></a><a href="https://dl.circleci.com/status-badge/redirect/gh/qubit-ltd/js-common-decorator/tree/master"><img src="https://dl.circleci.com/status-badge/img/gh/qubit-ltd/js-common-decorator/tree/master.svg?style=shield" alt="CircleCI"></a><a href="https://coveralls.io/github/qubit-ltd/js-common-decorator?branch=master"><img src="https://coveralls.io/repos/github/qubit-ltd/js-common-decorator/badge.svg?branch=master" alt="Coverage Status"></a></p><h2>概述</h2><p><a href="https://npmjs.com/package/@qubit-ltd/common-decorator">@qubit-ltd/common-decorator</a> 是一个JavaScript通用装饰器库,为您的领域类提供强大的增强工具。该库支持最新的(截至2023年11月)JavaScript装饰器[stage 3 提案]。</p><p>使用这个库,您可以轻松地为领域类添加常用方法,实现类似Java的枚举功能,添加验证和规范化功能等 - 所有这些都使用现代装饰器语法。</p><h2>特性</h2><ul><li><strong>现代装饰器支持</strong>:兼容最新的 JavaScript 装饰器 Stage 3 提案</li><li><strong>模型增强</strong>:<code>@Model</code> 装饰器为领域模型类添加常用方法</li><li><strong>枚举实现</strong>:<code>@Enum</code> 装饰器提供类似 Java 的枚举功能</li><li><strong>验证支持</strong>:<code>@Validatable</code> 装饰器实现字段验证</li><li><strong>规范化支持</strong>:<code>@Normalizable</code> 装饰器实现字段规范化</li><li><strong>类型安全</strong>:<code>@Type</code> 和 <code>@ElementType</code> 装饰器用于类型检查</li><li><strong>序列化工具</strong>:内置 JSON 序列化/反序列化支持</li><li><strong>工具函数</strong>:独立的辅助函数,用于ID转换、JSON序列化等功能</li><li><strong>高测试覆盖率</strong>:全面的测试套件确保所有功能的可靠性</li></ul><h2>安装</h2><pre class="prettyprint source lang-bash"><code># 使用 npm
4
4
  npm install @qubit-ltd/common-decorator
5
5
 
6
6
  # 使用 yarn
@@ -463,7 +463,7 @@ const options = {
463
463
 
464
464
  const sourceField = getSourceField('firstName', options);
465
465
  console.log(sourceField); // 'first_name'
466
- </code></pre><h2><span id="recent-updates">最新更新</span></h2><h3>测试覆盖增强(2023年12月)</h3><ul><li><strong>枚举克隆钩子测试</strong>:添加了全面的测试,验证枚举克隆钩子的行为,确保在克隆操作中正确处理枚举器对象。</li><li><strong>字段验证覆盖</strong>:增强了字段验证的测试覆盖率,特别针对边缘情况,确保在所有场景下都能进行可靠的验证。</li><li><strong>模型实现测试</strong>:为各种模型实现函数添加了额外的测试,以实现更高的代码覆盖率。</li></ul><p>最新更新主要集中在提高测试覆盖率和可靠性,特别关注:</p><ul><li>确保枚举器对象在克隆过程中保持单例模式</li><li>验证空字段的处理与适当的错误处理</li><li>验证模型实现函数在所有边缘情况下都能正常工作</li></ul><h2><span id="contributing">贡献</span></h2><p>如果你发现任何问题或有改进建议,请随时在 <a href="https://github.com/Haixing-Hu/js-common-decorator">GitHub 仓库</a> 上提交 issue 或 pull request。</p><h2><span id="license">许可证</span></h2><p><a href="https://npmjs.com/package/@qubit-ltd/common-decorator">@qubit-ltd/common-decorator</a> 根据 Apache 2.0 许可证分发。详情请参阅 <a href="LICENSE">LICENSE</a> 文件。</p><h2>前后端数据转换示例</h2><p>在实际项目中,前端与后端之间的数据交换是非常常见的场景。下面的示例展示了如何使用本库处理从RESTful接口获取的数据,以及如何将数据发送回后端。</p><h3>完整示例</h3><p>假设我们有一个电子商务应用,需要处理订单数据。后端API返回的数据是小写加下划线的命名风格(如<code>order_id</code>),而前端代码使用驼峰命名(如<code>orderId</code>)。同时,订单ID使用Java的Long类型(对JavaScript来说可能超出安全整数范围)。</p><p>首先,定义我们的领域模型:</p><pre class="prettyprint source lang-javascript"><code>import { Model, Type, ElementType, Normalizable, Validatable, NonEmpty, DefaultOptions } from '@qubit-ltd/common-decorator';
466
+ </code></pre><h2><span id="recent-updates">最新更新</span></h2><h3>测试覆盖增强(2023年12月)</h3><ul><li><strong>枚举克隆钩子测试</strong>:添加了全面的测试,验证枚举克隆钩子的行为,确保在克隆操作中正确处理枚举器对象。</li><li><strong>字段验证覆盖</strong>:增强了字段验证的测试覆盖率,特别针对边缘情况,确保在所有场景下都能进行可靠的验证。</li><li><strong>模型实现测试</strong>:为各种模型实现函数添加了额外的测试,以实现更高的代码覆盖率。</li></ul><p>最新更新主要集中在提高测试覆盖率和可靠性,特别关注:</p><ul><li>确保枚举器对象在克隆过程中保持单例模式</li><li>验证空字段的处理与适当的错误处理</li><li>验证模型实现函数在所有边缘情况下都能正常工作</li></ul><h2><span id="contributing">贡献</span></h2><p>如果你发现任何问题或有改进建议,请随时在 <a href="https://github.com/qubit-ltd/js-common-decorator">GitHub 仓库</a> 上提交 issue 或 pull request。</p><h2><span id="license">许可证</span></h2><p><a href="https://npmjs.com/package/@qubit-ltd/common-decorator">@qubit-ltd/common-decorator</a> 根据 Apache 2.0 许可证分发。详情请参阅 <a href="LICENSE">LICENSE</a> 文件。</p><h2>前后端数据转换示例</h2><p>在实际项目中,前端与后端之间的数据交换是非常常见的场景。下面的示例展示了如何使用本库处理从RESTful接口获取的数据,以及如何将数据发送回后端。</p><h3>完整示例</h3><p>假设我们有一个电子商务应用,需要处理订单数据。后端API返回的数据是小写加下划线的命名风格(如<code>order_id</code>),而前端代码使用驼峰命名(如<code>orderId</code>)。同时,订单ID使用Java的Long类型(对JavaScript来说可能超出安全整数范围)。</p><p>首先,定义我们的领域模型:</p><pre class="prettyprint source lang-javascript"><code>import { Model, Type, ElementType, Normalizable, Validatable, NonEmpty, DefaultOptions } from '@qubit-ltd/common-decorator';
467
467
 
468
468
  // 设置默认选项,处理命名风格转换
469
469
  DefaultOptions.set('assign', {
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@qubit-ltd/common-decorator",
3
- "version": "3.10.6",
3
+ "version": "3.10.8",
4
4
  "description": "A JavaScript ES7 library of common decorators",
5
5
  "author": "Haixing Hu (starfish.hu@gmail.com)",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "git+https://github.com/Haixing-Hu/js-common-decorator.git"
9
+ "url": "git+https://github.com/qubit-ltd/js-common-decorator.git"
10
10
  },
11
11
  "bugs": {
12
- "url": "https://github.com/Haixing-Hu/js-common-decorator/issues"
12
+ "url": "https://github.com/qubit-ltd/js-common-decorator/issues"
13
13
  },
14
- "homepage": "https://github.com/Haixing-Hu/js-common-decorator",
14
+ "homepage": "https://github.com/qubit-ltd/js-common-decorator",
15
15
  "keywords": [
16
16
  "JavaScript",
17
17
  "decorator"
@@ -41,7 +41,7 @@
41
41
  "lint": "eslint ./src ./test",
42
42
  "doc": "jsdoc -c jsdoc.json",
43
43
  "es5": "check-es-version -e 5 -s true",
44
- "deploy": "npm run test && npm run build:all && npm publish --registry='https://registry.npmjs.org/' --access public"
44
+ "deploy": "npm run test && npm run build:all && npm publish --@qubit-ltd:registry='https://registry.npmjs.org/' --access public"
45
45
  },
46
46
  "browserify": {
47
47
  "transform": [
@@ -50,13 +50,13 @@
50
50
  },
51
51
  "peerDependencies": {
52
52
  "@babel/runtime": "^7.28.5",
53
- "@qubit-ltd/clone": "^1.13.6",
54
- "@qubit-ltd/common-util": "^5.4.9",
55
- "@qubit-ltd/json": "^1.2.6",
56
- "@qubit-ltd/naming-style": "^1.3.12",
57
- "@qubit-ltd/type-detect": "^2.2.8",
58
- "@qubit-ltd/typeinfo": "^3.3.9",
59
- "@qubit-ltd/validation-rule": "^1.7.1"
53
+ "@qubit-ltd/clone": "^1.13.7",
54
+ "@qubit-ltd/common-util": "^5.4.10",
55
+ "@qubit-ltd/json": "^1.2.7",
56
+ "@qubit-ltd/naming-style": "^1.3.13",
57
+ "@qubit-ltd/type-detect": "^2.2.9",
58
+ "@qubit-ltd/typeinfo": "^3.3.10",
59
+ "@qubit-ltd/validation-rule": "^1.8.2"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@babel/core": "^7.28.5",
@@ -66,16 +66,16 @@
66
66
  "@babel/preset-env": "^7.28.5",
67
67
  "@babel/runtime": "^7.28.5",
68
68
  "@jest/core": "^30.1.3",
69
- "@qubit-ltd/clone": "^1.13.6",
70
- "@qubit-ltd/common-util": "^5.4.9",
69
+ "@qubit-ltd/clone": "^1.13.7",
70
+ "@qubit-ltd/common-util": "^5.4.10",
71
71
  "@qubit-ltd/common-validation-rule": "^1.6.5",
72
- "@qubit-ltd/eslint-config": "^2.0.1",
73
- "@qubit-ltd/jsdoc-theme": "^1.5.2",
74
- "@qubit-ltd/json": "^1.2.6",
75
- "@qubit-ltd/naming-style": "^1.3.12",
76
- "@qubit-ltd/rollup-builder": "^1.8.14",
77
- "@qubit-ltd/type-detect": "^2.2.8",
78
- "@qubit-ltd/typeinfo": "^3.3.9",
72
+ "@qubit-ltd/eslint-config": "^2.0.2",
73
+ "@qubit-ltd/jsdoc-theme": "^1.5.3",
74
+ "@qubit-ltd/json": "^1.2.7",
75
+ "@qubit-ltd/naming-style": "^1.3.13",
76
+ "@qubit-ltd/rollup-builder": "^1.8.15",
77
+ "@qubit-ltd/type-detect": "^2.2.9",
78
+ "@qubit-ltd/typeinfo": "^3.3.10",
79
79
  "@rollup/plugin-alias": "^6.0.0",
80
80
  "@rollup/plugin-babel": "^6.1.0",
81
81
  "@rollup/plugin-commonjs": "^29.0.0",