@dxos/random 0.3.11-main.474ad53
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/LICENSE +8 -0
- package/README.md +3 -0
- package/dist/lib/browser/index.mjs +134 -0
- package/dist/lib/browser/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/node/index.cjs +144 -0
- package/dist/lib/node/index.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -0
- package/dist/types/src/faker.d.ts +55 -0
- package/dist/types/src/faker.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/random.test.d.ts +2 -0
- package/dist/types/src/random.test.d.ts.map +1 -0
- package/dist/types/src/util.d.ts +10 -0
- package/dist/types/src/util.d.ts.map +1 -0
- package/package.json +31 -0
- package/src/faker.ts +104 -0
- package/src/index.ts +7 -0
- package/src/random.test.ts +13 -0
- package/src/util.ts +37 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
Copyright (c) 2022 DXOS
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
5
|
+
|
|
6
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import "@dxos/node-std/globals";
|
|
2
|
+
|
|
3
|
+
// inject-globals:@inject-globals
|
|
4
|
+
import {
|
|
5
|
+
global,
|
|
6
|
+
Buffer,
|
|
7
|
+
process
|
|
8
|
+
} from "@dxos/node-std/inject-globals";
|
|
9
|
+
|
|
10
|
+
// packages/common/random/src/index.ts
|
|
11
|
+
export * from "@ngneat/falso";
|
|
12
|
+
|
|
13
|
+
// packages/common/random/src/faker.ts
|
|
14
|
+
import { rand, randChanceBoolean, randCompanyName, randEmail, randFirstName, randFloat, randFullName, randHexaDecimal, randNumber as randNumber2, randParagraph, randProductName, randRecentDate, randSentence, randUrl, randUuid, randWord, seed } from "@ngneat/falso";
|
|
15
|
+
|
|
16
|
+
// packages/common/random/src/util.ts
|
|
17
|
+
import { randNumber } from "@ngneat/falso";
|
|
18
|
+
var toRange = (range, min = 0) => typeof range === "number" ? {
|
|
19
|
+
min,
|
|
20
|
+
max: range
|
|
21
|
+
} : range;
|
|
22
|
+
var getCount = (range) => typeof range === "number" ? range : randNumber(range);
|
|
23
|
+
var multiple = (f, n) => {
|
|
24
|
+
return Array.from({
|
|
25
|
+
length: n
|
|
26
|
+
}).map(() => f());
|
|
27
|
+
};
|
|
28
|
+
var uniqueArray = (values, n) => {
|
|
29
|
+
if (Array.isArray(values)) {
|
|
30
|
+
const results = [];
|
|
31
|
+
const selection = Array.from(new Set(values));
|
|
32
|
+
for (let i = 0; i < n; i++) {
|
|
33
|
+
if (selection.length === 0) {
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
results.push(selection.splice(Math.floor(Math.random() * selection.length), 1)[0]);
|
|
37
|
+
}
|
|
38
|
+
return results;
|
|
39
|
+
} else {
|
|
40
|
+
const results = /* @__PURE__ */ new Set();
|
|
41
|
+
while (results.size < n) {
|
|
42
|
+
results.add(values());
|
|
43
|
+
}
|
|
44
|
+
return Array.from(results);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// packages/common/random/src/faker.ts
|
|
49
|
+
var faker = {
|
|
50
|
+
//
|
|
51
|
+
// Util
|
|
52
|
+
//
|
|
53
|
+
seed: (value) => seed(String(value)),
|
|
54
|
+
helpers: {
|
|
55
|
+
arrayElement: (a) => rand(a),
|
|
56
|
+
multiple: (f, { count }) => multiple(f, typeof count === "number" ? count : getCount(count)),
|
|
57
|
+
uniqueArray: (f, n) => uniqueArray(f, n)
|
|
58
|
+
},
|
|
59
|
+
//
|
|
60
|
+
// Type
|
|
61
|
+
//
|
|
62
|
+
number: {
|
|
63
|
+
float: (range) => randFloat(range ? toRange(range) : void 0),
|
|
64
|
+
int: (range) => randNumber2(range ? toRange(range) : void 0)
|
|
65
|
+
},
|
|
66
|
+
datatype: {
|
|
67
|
+
boolean: (p) => randChanceBoolean({
|
|
68
|
+
chanceTrue: p?.probability ?? 0.5
|
|
69
|
+
})
|
|
70
|
+
},
|
|
71
|
+
date: {
|
|
72
|
+
recent: () => randRecentDate()
|
|
73
|
+
},
|
|
74
|
+
//
|
|
75
|
+
// Text
|
|
76
|
+
//
|
|
77
|
+
lorem: {
|
|
78
|
+
word: () => randWord(),
|
|
79
|
+
words: (n = 1) => randWord({
|
|
80
|
+
length: getCount(n)
|
|
81
|
+
}).join(" "),
|
|
82
|
+
sentence: (n = 1) => {
|
|
83
|
+
if (n) {
|
|
84
|
+
const text = randWord({
|
|
85
|
+
length: getCount(n)
|
|
86
|
+
}).join(" ");
|
|
87
|
+
return text.charAt(0).toUpperCase() + text.slice(1) + ".";
|
|
88
|
+
}
|
|
89
|
+
return randSentence();
|
|
90
|
+
},
|
|
91
|
+
sentences: (n = 1) => randSentence({
|
|
92
|
+
length: getCount(n)
|
|
93
|
+
}).join(" "),
|
|
94
|
+
paragraph: (n = 1) => {
|
|
95
|
+
if (n) {
|
|
96
|
+
return randSentence({
|
|
97
|
+
length: getCount(n)
|
|
98
|
+
}).join(" ");
|
|
99
|
+
}
|
|
100
|
+
return randParagraph();
|
|
101
|
+
},
|
|
102
|
+
paragraphs: (n = 1) => randParagraph({
|
|
103
|
+
length: getCount(n)
|
|
104
|
+
}).join(" ")
|
|
105
|
+
},
|
|
106
|
+
//
|
|
107
|
+
// String
|
|
108
|
+
//
|
|
109
|
+
string: {
|
|
110
|
+
hexadecimal: (l) => randHexaDecimal(l).join(""),
|
|
111
|
+
uuid: () => randUuid()
|
|
112
|
+
},
|
|
113
|
+
//
|
|
114
|
+
// Custom
|
|
115
|
+
//
|
|
116
|
+
internet: {
|
|
117
|
+
email: () => randEmail(),
|
|
118
|
+
url: () => randUrl()
|
|
119
|
+
},
|
|
120
|
+
person: {
|
|
121
|
+
firstName: () => randFirstName(),
|
|
122
|
+
fullName: () => randFullName()
|
|
123
|
+
},
|
|
124
|
+
company: {
|
|
125
|
+
name: () => randCompanyName()
|
|
126
|
+
},
|
|
127
|
+
commerce: {
|
|
128
|
+
productName: () => randProductName()
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
export {
|
|
132
|
+
faker
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/faker.ts", "../../../src/util.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport * from '@ngneat/falso';\n\nexport * from './faker';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n rand,\n randChanceBoolean,\n randCompanyName,\n randEmail,\n randFirstName,\n randFloat,\n randFullName,\n randHexaDecimal,\n randNumber,\n randParagraph,\n randProductName,\n randRecentDate,\n randSentence,\n randUrl,\n randUuid,\n randWord,\n seed,\n} from '@ngneat/falso';\n\nimport { type Range, getCount, multiple, toRange, uniqueArray } from './util';\n\n// Fake faker.\nexport const faker = {\n //\n // Util\n //\n seed: (value: number) => seed(String(value)),\n helpers: {\n arrayElement: <T>(a: T[]) => rand(a),\n multiple: <T>(f: () => T, { count }: { count: number | { min: number; max: number } }) =>\n multiple(f, typeof count === 'number' ? count : getCount(count)),\n uniqueArray: <T>(f: T[] | (() => T), n: number) => uniqueArray(f, n),\n },\n\n //\n // Type\n //\n number: {\n float: (range?: number | Range) => randFloat(range ? toRange(range) : undefined),\n int: (range?: number | Range) => randNumber(range ? toRange(range) : undefined),\n },\n datatype: {\n boolean: (p?: { probability: number }) => randChanceBoolean({ chanceTrue: p?.probability ?? 0.5 }),\n },\n date: {\n recent: () => randRecentDate(),\n },\n\n //\n // Text\n //\n lorem: {\n word: () => randWord(),\n words: (n: number | Range = 1) => randWord({ length: getCount(n) }).join(' '),\n sentence: (n: number | Range = 1) => {\n if (n) {\n const text = randWord({ length: getCount(n) }).join(' ');\n return text.charAt(0).toUpperCase() + text.slice(1) + '.';\n }\n\n return randSentence();\n },\n sentences: (n: number | Range = 1) => randSentence({ length: getCount(n) }).join(' '),\n paragraph: (n: number | Range = 1) => {\n if (n) {\n return randSentence({ length: getCount(n) }).join(' ');\n }\n\n return randParagraph();\n },\n paragraphs: (n: number | Range = 1) => randParagraph({ length: getCount(n) }).join(' '),\n },\n\n //\n // String\n //\n string: {\n hexadecimal: (l?: { length: number }) => randHexaDecimal(l).join(''),\n uuid: () => randUuid(),\n },\n\n //\n // Custom\n //\n internet: {\n email: () => randEmail(),\n url: () => randUrl(),\n },\n person: {\n firstName: () => randFirstName(),\n fullName: () => randFullName(),\n },\n company: {\n name: () => randCompanyName(),\n },\n commerce: {\n productName: () => randProductName(),\n },\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { randNumber } from '@ngneat/falso';\n\nexport type Range = { min?: number; max?: number; count?: number };\n\nexport const toRange = (range: number | Range, min = 0) => (typeof range === 'number' ? { min, max: range } : range);\n\nexport const getCount = (range?: number | Range) => (typeof range === 'number' ? range : randNumber(range));\n\nexport const multiple = <T>(f: () => T, n: number): T[] => {\n return Array.from({ length: n }).map(() => f());\n};\n\nexport const uniqueArray = <T>(values: T[] | (() => T), n: number): T[] => {\n if (Array.isArray(values)) {\n const results: T[] = [];\n const selection = Array.from(new Set<T>(values));\n for (let i = 0; i < n; i++) {\n if (selection.length === 0) {\n break;\n }\n results.push(selection.splice(Math.floor(Math.random() * selection.length), 1)[0]);\n }\n return results;\n } else {\n const results = new Set<T>();\n // TODO(burdon): Set timeout.\n while (results.size < n) {\n results.add(values());\n }\n\n return Array.from(results);\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["rand", "randChanceBoolean", "randCompanyName", "randEmail", "randFirstName", "randFloat", "randFullName", "randHexaDecimal", "randNumber", "randParagraph", "randProductName", "randRecentDate", "randSentence", "randUrl", "randUuid", "randWord", "seed", "randNumber", "toRange", "range", "min", "max", "getCount", "randNumber", "multiple", "f", "n", "Array", "from", "length", "map", "uniqueArray", "values", "isArray", "results", "selection", "Set", "i", "push", "splice", "Math", "floor", "random", "size", "add", "faker", "seed", "value", "String", "helpers", "arrayElement", "a", "rand", "multiple", "f", "count", "getCount", "uniqueArray", "n", "number", "float", "range", "randFloat", "toRange", "undefined", "int", "randNumber", "datatype", "boolean", "p", "randChanceBoolean", "chanceTrue", "probability", "date", "recent", "randRecentDate", "lorem", "word", "randWord", "words", "length", "join", "sentence", "text", "charAt", "toUpperCase", "slice", "randSentence", "sentences", "paragraph", "randParagraph", "paragraphs", "string", "hexadecimal", "l", "randHexaDecimal", "uuid", "randUuid", "internet", "email", "randEmail", "url", "randUrl", "person", "firstName", "randFirstName", "fullName", "randFullName", "company", "name", "randCompanyName", "commerce", "productName", "randProductName"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random/src/util.ts":{"bytes":4143,"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random/src/faker.ts":{"bytes":9360,"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"packages/common/random/src/util.ts","kind":"import-statement","original":"./util"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random/src/index.ts":{"bytes":558,"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"packages/common/random/src/faker.ts","kind":"import-statement","original":"./faker"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/common/random/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7587},"packages/common/random/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"@ngneat/falso","kind":"import-statement","external":true}],"exports":["faker"],"entryPoint":"packages/common/random/src/index.ts","inputs":{"inject-globals:@inject-globals":{"bytesInOutput":79},"packages/common/random/src/index.ts":{"bytesInOutput":31},"packages/common/random/src/faker.ts":{"bytesInOutput":1997},"packages/common/random/src/util.ts":{"bytesInOutput":820}},"bytes":3209}}}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var node_exports = {};
|
|
21
|
+
__export(node_exports, {
|
|
22
|
+
faker: () => faker
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(node_exports);
|
|
25
|
+
__reExport(node_exports, require("@ngneat/falso"), module.exports);
|
|
26
|
+
var import_falso = require("@ngneat/falso");
|
|
27
|
+
var import_falso2 = require("@ngneat/falso");
|
|
28
|
+
var toRange = (range, min = 0) => typeof range === "number" ? {
|
|
29
|
+
min,
|
|
30
|
+
max: range
|
|
31
|
+
} : range;
|
|
32
|
+
var getCount = (range) => typeof range === "number" ? range : (0, import_falso2.randNumber)(range);
|
|
33
|
+
var multiple = (f, n) => {
|
|
34
|
+
return Array.from({
|
|
35
|
+
length: n
|
|
36
|
+
}).map(() => f());
|
|
37
|
+
};
|
|
38
|
+
var uniqueArray = (values, n) => {
|
|
39
|
+
if (Array.isArray(values)) {
|
|
40
|
+
const results = [];
|
|
41
|
+
const selection = Array.from(new Set(values));
|
|
42
|
+
for (let i = 0; i < n; i++) {
|
|
43
|
+
if (selection.length === 0) {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
results.push(selection.splice(Math.floor(Math.random() * selection.length), 1)[0]);
|
|
47
|
+
}
|
|
48
|
+
return results;
|
|
49
|
+
} else {
|
|
50
|
+
const results = /* @__PURE__ */ new Set();
|
|
51
|
+
while (results.size < n) {
|
|
52
|
+
results.add(values());
|
|
53
|
+
}
|
|
54
|
+
return Array.from(results);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var faker = {
|
|
58
|
+
//
|
|
59
|
+
// Util
|
|
60
|
+
//
|
|
61
|
+
seed: (value) => (0, import_falso.seed)(String(value)),
|
|
62
|
+
helpers: {
|
|
63
|
+
arrayElement: (a) => (0, import_falso.rand)(a),
|
|
64
|
+
multiple: (f, { count }) => multiple(f, typeof count === "number" ? count : getCount(count)),
|
|
65
|
+
uniqueArray: (f, n) => uniqueArray(f, n)
|
|
66
|
+
},
|
|
67
|
+
//
|
|
68
|
+
// Type
|
|
69
|
+
//
|
|
70
|
+
number: {
|
|
71
|
+
float: (range) => (0, import_falso.randFloat)(range ? toRange(range) : void 0),
|
|
72
|
+
int: (range) => (0, import_falso.randNumber)(range ? toRange(range) : void 0)
|
|
73
|
+
},
|
|
74
|
+
datatype: {
|
|
75
|
+
boolean: (p) => (0, import_falso.randChanceBoolean)({
|
|
76
|
+
chanceTrue: p?.probability ?? 0.5
|
|
77
|
+
})
|
|
78
|
+
},
|
|
79
|
+
date: {
|
|
80
|
+
recent: () => (0, import_falso.randRecentDate)()
|
|
81
|
+
},
|
|
82
|
+
//
|
|
83
|
+
// Text
|
|
84
|
+
//
|
|
85
|
+
lorem: {
|
|
86
|
+
word: () => (0, import_falso.randWord)(),
|
|
87
|
+
words: (n = 1) => (0, import_falso.randWord)({
|
|
88
|
+
length: getCount(n)
|
|
89
|
+
}).join(" "),
|
|
90
|
+
sentence: (n = 1) => {
|
|
91
|
+
if (n) {
|
|
92
|
+
const text = (0, import_falso.randWord)({
|
|
93
|
+
length: getCount(n)
|
|
94
|
+
}).join(" ");
|
|
95
|
+
return text.charAt(0).toUpperCase() + text.slice(1) + ".";
|
|
96
|
+
}
|
|
97
|
+
return (0, import_falso.randSentence)();
|
|
98
|
+
},
|
|
99
|
+
sentences: (n = 1) => (0, import_falso.randSentence)({
|
|
100
|
+
length: getCount(n)
|
|
101
|
+
}).join(" "),
|
|
102
|
+
paragraph: (n = 1) => {
|
|
103
|
+
if (n) {
|
|
104
|
+
return (0, import_falso.randSentence)({
|
|
105
|
+
length: getCount(n)
|
|
106
|
+
}).join(" ");
|
|
107
|
+
}
|
|
108
|
+
return (0, import_falso.randParagraph)();
|
|
109
|
+
},
|
|
110
|
+
paragraphs: (n = 1) => (0, import_falso.randParagraph)({
|
|
111
|
+
length: getCount(n)
|
|
112
|
+
}).join(" ")
|
|
113
|
+
},
|
|
114
|
+
//
|
|
115
|
+
// String
|
|
116
|
+
//
|
|
117
|
+
string: {
|
|
118
|
+
hexadecimal: (l) => (0, import_falso.randHexaDecimal)(l).join(""),
|
|
119
|
+
uuid: () => (0, import_falso.randUuid)()
|
|
120
|
+
},
|
|
121
|
+
//
|
|
122
|
+
// Custom
|
|
123
|
+
//
|
|
124
|
+
internet: {
|
|
125
|
+
email: () => (0, import_falso.randEmail)(),
|
|
126
|
+
url: () => (0, import_falso.randUrl)()
|
|
127
|
+
},
|
|
128
|
+
person: {
|
|
129
|
+
firstName: () => (0, import_falso.randFirstName)(),
|
|
130
|
+
fullName: () => (0, import_falso.randFullName)()
|
|
131
|
+
},
|
|
132
|
+
company: {
|
|
133
|
+
name: () => (0, import_falso.randCompanyName)()
|
|
134
|
+
},
|
|
135
|
+
commerce: {
|
|
136
|
+
productName: () => (0, import_falso.randProductName)()
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
140
|
+
0 && (module.exports = {
|
|
141
|
+
faker,
|
|
142
|
+
...require("@ngneat/falso")
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/faker.ts", "../../../src/util.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport * from '@ngneat/falso';\n\nexport * from './faker';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n rand,\n randChanceBoolean,\n randCompanyName,\n randEmail,\n randFirstName,\n randFloat,\n randFullName,\n randHexaDecimal,\n randNumber,\n randParagraph,\n randProductName,\n randRecentDate,\n randSentence,\n randUrl,\n randUuid,\n randWord,\n seed,\n} from '@ngneat/falso';\n\nimport { type Range, getCount, multiple, toRange, uniqueArray } from './util';\n\n// Fake faker.\nexport const faker = {\n //\n // Util\n //\n seed: (value: number) => seed(String(value)),\n helpers: {\n arrayElement: <T>(a: T[]) => rand(a),\n multiple: <T>(f: () => T, { count }: { count: number | { min: number; max: number } }) =>\n multiple(f, typeof count === 'number' ? count : getCount(count)),\n uniqueArray: <T>(f: T[] | (() => T), n: number) => uniqueArray(f, n),\n },\n\n //\n // Type\n //\n number: {\n float: (range?: number | Range) => randFloat(range ? toRange(range) : undefined),\n int: (range?: number | Range) => randNumber(range ? toRange(range) : undefined),\n },\n datatype: {\n boolean: (p?: { probability: number }) => randChanceBoolean({ chanceTrue: p?.probability ?? 0.5 }),\n },\n date: {\n recent: () => randRecentDate(),\n },\n\n //\n // Text\n //\n lorem: {\n word: () => randWord(),\n words: (n: number | Range = 1) => randWord({ length: getCount(n) }).join(' '),\n sentence: (n: number | Range = 1) => {\n if (n) {\n const text = randWord({ length: getCount(n) }).join(' ');\n return text.charAt(0).toUpperCase() + text.slice(1) + '.';\n }\n\n return randSentence();\n },\n sentences: (n: number | Range = 1) => randSentence({ length: getCount(n) }).join(' '),\n paragraph: (n: number | Range = 1) => {\n if (n) {\n return randSentence({ length: getCount(n) }).join(' ');\n }\n\n return randParagraph();\n },\n paragraphs: (n: number | Range = 1) => randParagraph({ length: getCount(n) }).join(' '),\n },\n\n //\n // String\n //\n string: {\n hexadecimal: (l?: { length: number }) => randHexaDecimal(l).join(''),\n uuid: () => randUuid(),\n },\n\n //\n // Custom\n //\n internet: {\n email: () => randEmail(),\n url: () => randUrl(),\n },\n person: {\n firstName: () => randFirstName(),\n fullName: () => randFullName(),\n },\n company: {\n name: () => randCompanyName(),\n },\n commerce: {\n productName: () => randProductName(),\n },\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { randNumber } from '@ngneat/falso';\n\nexport type Range = { min?: number; max?: number; count?: number };\n\nexport const toRange = (range: number | Range, min = 0) => (typeof range === 'number' ? { min, max: range } : range);\n\nexport const getCount = (range?: number | Range) => (typeof range === 'number' ? range : randNumber(range));\n\nexport const multiple = <T>(f: () => T, n: number): T[] => {\n return Array.from({ length: n }).map(() => f());\n};\n\nexport const uniqueArray = <T>(values: T[] | (() => T), n: number): T[] => {\n if (Array.isArray(values)) {\n const results: T[] = [];\n const selection = Array.from(new Set<T>(values));\n for (let i = 0; i < n; i++) {\n if (selection.length === 0) {\n break;\n }\n results.push(selection.splice(Math.floor(Math.random() * selection.length), 1)[0]);\n }\n return results;\n } else {\n const results = new Set<T>();\n // TODO(burdon): Set timeout.\n while (results.size < n) {\n results.add(values());\n }\n\n return Array.from(results);\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_falso", "toRange", "range", "min", "max", "getCount", "randNumber", "multiple", "f", "n", "Array", "from", "length", "map", "uniqueArray", "values", "isArray", "results", "selection", "Set", "i", "push", "splice", "Math", "floor", "random", "size", "add", "faker", "seed", "value", "String", "helpers", "arrayElement", "a", "rand", "count", "number", "float", "randFloat", "undefined", "int", "datatype", "boolean", "p", "randChanceBoolean", "chanceTrue", "probability", "date", "recent", "randRecentDate", "lorem", "word", "randWord", "words", "join", "sentence", "text", "charAt", "toUpperCase", "slice", "randSentence", "sentences", "paragraph", "randParagraph", "paragraphs", "string", "hexadecimal", "l", "randHexaDecimal", "uuid", "randUuid", "internet", "email", "randEmail", "url", "randUrl", "person", "firstName", "randFirstName", "fullName", "randFullName", "company", "name", "randCompanyName", "commerce", "productName", "randProductName"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"packages/common/random/src/util.ts":{"bytes":4143,"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true}],"format":"esm"},"packages/common/random/src/faker.ts":{"bytes":9360,"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"packages/common/random/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/common/random/src/index.ts":{"bytes":558,"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"packages/common/random/src/faker.ts","kind":"import-statement","original":"./faker"}],"format":"esm"}},"outputs":{"packages/common/random/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7578},"packages/common/random/dist/lib/node/index.cjs":{"imports":[{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"@ngneat/falso","kind":"import-statement","external":true},{"path":"@ngneat/falso","kind":"import-statement","external":true}],"exports":["faker"],"entryPoint":"packages/common/random/src/index.ts","inputs":{"packages/common/random/src/index.ts":{"bytesInOutput":31},"packages/common/random/src/faker.ts":{"bytesInOutput":1997},"packages/common/random/src/util.ts":{"bytesInOutput":820}},"bytes":3061}}}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type Range } from './util';
|
|
2
|
+
export declare const faker: {
|
|
3
|
+
seed: (value: number) => void;
|
|
4
|
+
helpers: {
|
|
5
|
+
arrayElement: <T>(a: T[]) => T;
|
|
6
|
+
multiple: <T_1>(f: () => T_1, { count }: {
|
|
7
|
+
count: number | {
|
|
8
|
+
min: number;
|
|
9
|
+
max: number;
|
|
10
|
+
};
|
|
11
|
+
}) => T_1[];
|
|
12
|
+
uniqueArray: <T_2>(f: T_2[] | (() => T_2), n: number) => T_2[];
|
|
13
|
+
};
|
|
14
|
+
number: {
|
|
15
|
+
float: (range?: number | Range) => number;
|
|
16
|
+
int: (range?: number | Range) => number;
|
|
17
|
+
};
|
|
18
|
+
datatype: {
|
|
19
|
+
boolean: (p?: {
|
|
20
|
+
probability: number;
|
|
21
|
+
}) => boolean;
|
|
22
|
+
};
|
|
23
|
+
date: {
|
|
24
|
+
recent: () => Date;
|
|
25
|
+
};
|
|
26
|
+
lorem: {
|
|
27
|
+
word: () => string;
|
|
28
|
+
words: (n?: number | Range) => string;
|
|
29
|
+
sentence: (n?: number | Range) => string;
|
|
30
|
+
sentences: (n?: number | Range) => string;
|
|
31
|
+
paragraph: (n?: number | Range) => string;
|
|
32
|
+
paragraphs: (n?: number | Range) => string;
|
|
33
|
+
};
|
|
34
|
+
string: {
|
|
35
|
+
hexadecimal: (l?: {
|
|
36
|
+
length: number;
|
|
37
|
+
}) => string;
|
|
38
|
+
uuid: () => string;
|
|
39
|
+
};
|
|
40
|
+
internet: {
|
|
41
|
+
email: () => string;
|
|
42
|
+
url: () => string;
|
|
43
|
+
};
|
|
44
|
+
person: {
|
|
45
|
+
firstName: () => string;
|
|
46
|
+
fullName: () => string;
|
|
47
|
+
};
|
|
48
|
+
company: {
|
|
49
|
+
name: () => string;
|
|
50
|
+
};
|
|
51
|
+
commerce: {
|
|
52
|
+
productName: () => string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=faker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faker.d.ts","sourceRoot":"","sources":["../../../src/faker.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,KAAK,EAA4C,MAAM,QAAQ,CAAC;AAG9E,eAAO,MAAM,KAAK;kBAIF,MAAM;;;;mBAG4B,MAAM,GAAG;gBAAE,GAAG,EAAE,MAAM,CAAC;gBAAC,GAAG,EAAE,MAAM,CAAA;aAAE;;sDAE3C,MAAM;;;wBAO9B,MAAM,GAAG,KAAK;sBAChB,MAAM,GAAG,KAAK;;;sBAGd;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE;;;;;;;oBAW1B,MAAM,GAAG,KAAK;uBACX,MAAM,GAAG,KAAK;wBAQb,MAAM,GAAG,KAAK;wBACd,MAAM,GAAG,KAAK;yBAOb,MAAM,GAAG,KAAK;;;0BAOZ;YAAE,QAAQ,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;CAqBvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC;AAE9B,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random.test.d.ts","sourceRoot":"","sources":["../../../src/random.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type Range = {
|
|
2
|
+
min?: number;
|
|
3
|
+
max?: number;
|
|
4
|
+
count?: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const toRange: (range: number | Range, min?: number) => Range;
|
|
7
|
+
export declare const getCount: (range?: number | Range) => number;
|
|
8
|
+
export declare const multiple: <T>(f: () => T, n: number) => T[];
|
|
9
|
+
export declare const uniqueArray: <T>(values: T[] | (() => T), n: number) => T[];
|
|
10
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,KAAK,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,eAAO,MAAM,OAAO,UAAW,MAAM,GAAG,KAAK,wBAAuE,CAAC;AAErH,eAAO,MAAM,QAAQ,WAAY,MAAM,GAAG,KAAK,WAA4D,CAAC;AAE5G,eAAO,MAAM,QAAQ,qBAAsB,MAAM,QAEhD,CAAC;AAEF,eAAO,MAAM,WAAW,kCAAmC,MAAM,QAoBhE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dxos/random",
|
|
3
|
+
"version": "0.3.11-main.474ad53",
|
|
4
|
+
"description": "Random data generator.",
|
|
5
|
+
"homepage": "https://dxos.org",
|
|
6
|
+
"bugs": "https://github.com/dxos/dxos/issues",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "DXOS.org",
|
|
9
|
+
"main": "dist/lib/node/index.cjs",
|
|
10
|
+
"browser": {
|
|
11
|
+
"./dist/lib/node/index.cjs": "./dist/lib/browser/index.mjs"
|
|
12
|
+
},
|
|
13
|
+
"types": "dist/types/src/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"src"
|
|
17
|
+
],
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@ngneat/falso": "^7.1.1",
|
|
20
|
+
"seedrandom": "^3.0.5",
|
|
21
|
+
"uuid": "^8.3.2",
|
|
22
|
+
"@dxos/node-std": "0.3.11-main.474ad53"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/seedrandom": "^3.0.5",
|
|
26
|
+
"@types/uuid": "^8.3.0"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
}
|
|
31
|
+
}
|
package/src/faker.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
rand,
|
|
7
|
+
randChanceBoolean,
|
|
8
|
+
randCompanyName,
|
|
9
|
+
randEmail,
|
|
10
|
+
randFirstName,
|
|
11
|
+
randFloat,
|
|
12
|
+
randFullName,
|
|
13
|
+
randHexaDecimal,
|
|
14
|
+
randNumber,
|
|
15
|
+
randParagraph,
|
|
16
|
+
randProductName,
|
|
17
|
+
randRecentDate,
|
|
18
|
+
randSentence,
|
|
19
|
+
randUrl,
|
|
20
|
+
randUuid,
|
|
21
|
+
randWord,
|
|
22
|
+
seed,
|
|
23
|
+
} from '@ngneat/falso';
|
|
24
|
+
|
|
25
|
+
import { type Range, getCount, multiple, toRange, uniqueArray } from './util';
|
|
26
|
+
|
|
27
|
+
// Fake faker.
|
|
28
|
+
export const faker = {
|
|
29
|
+
//
|
|
30
|
+
// Util
|
|
31
|
+
//
|
|
32
|
+
seed: (value: number) => seed(String(value)),
|
|
33
|
+
helpers: {
|
|
34
|
+
arrayElement: <T>(a: T[]) => rand(a),
|
|
35
|
+
multiple: <T>(f: () => T, { count }: { count: number | { min: number; max: number } }) =>
|
|
36
|
+
multiple(f, typeof count === 'number' ? count : getCount(count)),
|
|
37
|
+
uniqueArray: <T>(f: T[] | (() => T), n: number) => uniqueArray(f, n),
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
//
|
|
41
|
+
// Type
|
|
42
|
+
//
|
|
43
|
+
number: {
|
|
44
|
+
float: (range?: number | Range) => randFloat(range ? toRange(range) : undefined),
|
|
45
|
+
int: (range?: number | Range) => randNumber(range ? toRange(range) : undefined),
|
|
46
|
+
},
|
|
47
|
+
datatype: {
|
|
48
|
+
boolean: (p?: { probability: number }) => randChanceBoolean({ chanceTrue: p?.probability ?? 0.5 }),
|
|
49
|
+
},
|
|
50
|
+
date: {
|
|
51
|
+
recent: () => randRecentDate(),
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
//
|
|
55
|
+
// Text
|
|
56
|
+
//
|
|
57
|
+
lorem: {
|
|
58
|
+
word: () => randWord(),
|
|
59
|
+
words: (n: number | Range = 1) => randWord({ length: getCount(n) }).join(' '),
|
|
60
|
+
sentence: (n: number | Range = 1) => {
|
|
61
|
+
if (n) {
|
|
62
|
+
const text = randWord({ length: getCount(n) }).join(' ');
|
|
63
|
+
return text.charAt(0).toUpperCase() + text.slice(1) + '.';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return randSentence();
|
|
67
|
+
},
|
|
68
|
+
sentences: (n: number | Range = 1) => randSentence({ length: getCount(n) }).join(' '),
|
|
69
|
+
paragraph: (n: number | Range = 1) => {
|
|
70
|
+
if (n) {
|
|
71
|
+
return randSentence({ length: getCount(n) }).join(' ');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return randParagraph();
|
|
75
|
+
},
|
|
76
|
+
paragraphs: (n: number | Range = 1) => randParagraph({ length: getCount(n) }).join(' '),
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
//
|
|
80
|
+
// String
|
|
81
|
+
//
|
|
82
|
+
string: {
|
|
83
|
+
hexadecimal: (l?: { length: number }) => randHexaDecimal(l).join(''),
|
|
84
|
+
uuid: () => randUuid(),
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
//
|
|
88
|
+
// Custom
|
|
89
|
+
//
|
|
90
|
+
internet: {
|
|
91
|
+
email: () => randEmail(),
|
|
92
|
+
url: () => randUrl(),
|
|
93
|
+
},
|
|
94
|
+
person: {
|
|
95
|
+
firstName: () => randFirstName(),
|
|
96
|
+
fullName: () => randFullName(),
|
|
97
|
+
},
|
|
98
|
+
company: {
|
|
99
|
+
name: () => randCompanyName(),
|
|
100
|
+
},
|
|
101
|
+
commerce: {
|
|
102
|
+
productName: () => randProductName(),
|
|
103
|
+
},
|
|
104
|
+
};
|
package/src/index.ts
ADDED
package/src/util.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { randNumber } from '@ngneat/falso';
|
|
6
|
+
|
|
7
|
+
export type Range = { min?: number; max?: number; count?: number };
|
|
8
|
+
|
|
9
|
+
export const toRange = (range: number | Range, min = 0) => (typeof range === 'number' ? { min, max: range } : range);
|
|
10
|
+
|
|
11
|
+
export const getCount = (range?: number | Range) => (typeof range === 'number' ? range : randNumber(range));
|
|
12
|
+
|
|
13
|
+
export const multiple = <T>(f: () => T, n: number): T[] => {
|
|
14
|
+
return Array.from({ length: n }).map(() => f());
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const uniqueArray = <T>(values: T[] | (() => T), n: number): T[] => {
|
|
18
|
+
if (Array.isArray(values)) {
|
|
19
|
+
const results: T[] = [];
|
|
20
|
+
const selection = Array.from(new Set<T>(values));
|
|
21
|
+
for (let i = 0; i < n; i++) {
|
|
22
|
+
if (selection.length === 0) {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
results.push(selection.splice(Math.floor(Math.random() * selection.length), 1)[0]);
|
|
26
|
+
}
|
|
27
|
+
return results;
|
|
28
|
+
} else {
|
|
29
|
+
const results = new Set<T>();
|
|
30
|
+
// TODO(burdon): Set timeout.
|
|
31
|
+
while (results.size < n) {
|
|
32
|
+
results.add(values());
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return Array.from(results);
|
|
36
|
+
}
|
|
37
|
+
};
|