zaki-dxp
v1.1.1
Published
小俊 · 常用 JS 工具集(lodash 高频子集风格):字符串与命名、数组 unique/groupBy/chunk、isEmpty/deepClone、clamp、防抖节流与 retry;零运行时依赖,ESM + TS
Downloads
25
Maintainers
Readme
zaki-dxp
npm workspaces 仓库:
| 包 | 说明 |
|----|------|
| zaki-dxp | 根目录,零运行时依赖的工具函数(ESM +类型) |
| zaki-dxp-office-preview | Vue 2/3:docx / xlsx / pptx 预览(ESM + CJS) |
| zaki-dxp-rich-editor | Vue 2/3:Quill 富文本,v-model HTML(ESM + CJS) |
安装(根包)
npm install zaki-dxp子包说明与发布:
- Office:
[packages/office-preview/README.md](./packages/office-preview/README.md),cd packages/office-preview && npm publish - 富文本:
[packages/rich-editor/README.md](./packages/rich-editor/README.md),cd packages/rich-editor && npm publish
使用示例
import {
slugify,
truncate,
toCamelCase,
unique,
groupBy,
deepClone,
clamp,
safeJsonParse,
pick,
omit,
retry,
sleep,
debounce,
throttle,
} from "zaki-dxp";
slugify("Hello World");
toCamelCase("hello-world");
unique([1, 1, 2]);
groupBy(["a", "bb", "c"], (s) => s.length);
deepClone({ a: 1, b: [2] });
safeJsonParse('{"ok":true}', {});
clamp(150, 0, 100);
truncate("很长的一段文案……", 8);
pick({ id: 1, name: "a", secret: "x" }, ["id", "name"]);
omit({ id: 1, name: "a", secret: "x" }, ["secret"]);
await sleep(200);
await retry(() => fetch("/api/health").then((r) => r.json()), {
times: 4,
delayMs: 100,
backoff: 2,
});
debounce(() => {}, 120);
throttle(() => {}, 80);API(根包)
| 模块 | 导出 |
|------|------|
| 字符串 | greet, joinParts, slugify, truncate, capitalize, toCamelCase, toKebabCase |
| 对象 | pick, omit |
| 类型 / JSON | isNil, isPlainObject, isEmpty, deepClone, safeJsonParse |
| 数组 | unique, groupBy, chunk |
| 数字 | clamp, randomInt |
| 异步 | sleep, retry(类型 RetryOptions) |
| 函数 | debounce, throttle, once, memoize |
本地开发
npm install
npm run build
npm run build:office
npm run build:rich-editor
npm run build:all
npm testLicense
MIT(见 LICENSE)
