Skip to content

Latest commit

 

History

History
256 lines (228 loc) · 4.35 KB

File metadata and controls

256 lines (228 loc) · 4.35 KB

English

musk-clone

生成具有相同数据结构的模拟影子克隆,速度与 Elon Musk 一样。

特斯拉CEO马斯克生9个子女,说自己为提高美国生育率正在尽一份力

为什么要用 musk-clone?

当你想制作一个与现有的具有相同数据结构的新模拟项目时,你必须复制--> 逐一修改--> 粘贴,这个过程会花费很多时间。

现在您可以使用musk-clone以节省您的时间!

特性

根据传入的数据,快速生成一份相同数据结构的数据,用于开发阶段快速构造mock数据

  • source主要支持最常见的两种类型,对象类型和数组类型,支持深层嵌套
  • 仅对基本类型string,number,boolean进行转换,其余均返回具有新内存地址的原值
  • 支持repeat,批量返回多个经过musk-clone后的对象
  • 支持忽略mock对象的某些key
  • 支持自定义key的返回内容

在线demo

https://codesandbox.io/s/musk-clone-x137mv

安装

yarn add -D musk-clone

使用

基本使用

import { muskClone } from 'musk-clone'

const src = ["foo", 1, true]
const target = muskClone({source: src});
console.log(target); 
// ["foo-0v3DrX7hoOqIFaQeMDDaF", 71, true],

常用场景

import { muskClone } from 'musk-clone'

const src = [
  { foo: "str", bar: 1, val: true },
  { foo: "str1", bar: 2, val: false },
]
const target = muskClone({source: src});
console.log(target); 
// [
//   { foo: "str-jHGKjWz3kz0ome5-tl6MS", bar: 36, val: false },
//   { foo: "str1-LqOPbB5xXYKXV8hmBB_Q6", bar: 2, val: true }
// ]

克隆多个

import { muskClone } from 'musk-clone'

const src = [
  { foo: "str", bar: 1, val: true },
  { foo: "str1", bar: 2, val: false },
]
const target = muskClone({source: src, repeat: 2});
console.log(target); 
// [
//   [
//     {
//       "foo": "str-GEoG0NphDqhwQZ44aH2LF",
//       "bar": 5,
//       "val": true
//     },
//     {
//       "foo": "str1-mxD-IMD6U9BocOp8ql_XY",
//       "bar": 7,
//       "val": true
//     }
//   ],
//   [
//     {
//       "foo": "str-ldPI7kVtHeUOMph1U4yi8",
//       "bar": 3,
//       "val": true
//     },
//     {
//       "foo": "str1-EbVeOGe1YRjudpKDjA-gR",
//       "bar": 7,
//       "val": false
//     }
//   ]
// ]

忽略mock对象key

import { muskClone } from 'musk-clone'

const src = [
  { foo: "str", bar: 1 },
  { foo: "str1", bar: 2 },
]
const target = muskClone({source: src, repeat: 2, ignores:['foo']});
console.log(target); 
// [
//   [
//     {
//       "foo": "str",
//       "bar": 5,
//     },
//     {
//       "foo": "str1",
//       "bar": 7,
//     }
//   ],
//   [
//     {
//       "foo": "str",
//       "bar": 3,
//     },
//     {
//       "foo": "str1",
//       "bar": 7,
//     }
//   ]
// ]

自定义key的返回内容

const src = [
  { foo: "str", bar: 1, val: true },
  { foo: "str1", bar: 2, val: false },
];
const target = muskClone({source: src, repeat: 2, ignores: ["foo"], fieldCallbacks:{
  bar: (item) => item + Math.random(),
}});
// [
//   [
//     {
//       "foo": "str",
//       "bar": 1.6969435733626381,
//       "val": true
//     },
//     {
//       "foo": "str1",
//       "bar": 2.8654049353811537,
//       "val": false
//     }
//   ],
//   [
//     {
//       "foo": "str",
//       "bar": 1.840926677103744,
//       "val": true
//     },
//     {
//       "foo": "str1",
//       "bar": 2.9165549953686725,
//       "val": false
//     }
//   ]
// ]

API

muskClone({source, repeat = 1, ignores = [], fieldCallbacks = {}})

{
  source: SourceType;
  repeat?: number;
  ignores?: Array<string>;
  fieldCallbacks?: Record<string, Function>;
}

示例

数组

["foo", 1, true]
=>

["foo-0v3DrX7hoOqIFaQeMDDaF", 71, false]

对象

{ 
  foo: "str", 
  bar: 1, 
  val: true 
}
=>

{
  foo: "str-I5s0VjK7209eBqV6QYUeJ",
  bar: 68,
  val: true
}

对象数组

[
  { 
    foo: "str", 
    bar: 1, 
    val: true 
  }
]
=>
[
  {
    foo: "str-eALWWUK2tsA6sn_aSAB3I",
    bar: 38,
    val: false
  }
]

复杂嵌套数据结构

[
  { 
    foo: "str", 
    bar: 1, 
    val: true, 
    nest: [
      { 
        baz: 2 
      }
    ] 
  }
]
=>
[
  {
    foo: "str-67nhBc5A9cDZl3dQ7L48c",
    bar: 42,
    val: true,
    nest: [
      {
        baz: 74
      }
    ]
  }
]

其它

欢迎提PR和issue

License

MIT.