devkits-lorem 1.0.0
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 +116 -0
- package/index.js +156 -0
- package/package.json +48 -0
- package/test.js +79 -0
package/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# devkits-lorem
|
|
2
|
+
|
|
3
|
+
> Generate Lorem Ipsum placeholder text
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g devkits-lorem
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or use without installation:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx devkits-lorem [args]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Generate 1 paragraph (default)
|
|
21
|
+
dk-lorem
|
|
22
|
+
|
|
23
|
+
# Generate multiple paragraphs
|
|
24
|
+
dk-lorem -p 3
|
|
25
|
+
dk-lorem --paragraphs 5
|
|
26
|
+
|
|
27
|
+
# Generate sentences
|
|
28
|
+
dk-lorem -s 5
|
|
29
|
+
dk-lorem --sentences 10
|
|
30
|
+
|
|
31
|
+
# Generate specific word count
|
|
32
|
+
dk-lorem -w 100
|
|
33
|
+
dk-lorem --words 50
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Why @devkits/lorem?
|
|
37
|
+
|
|
38
|
+
- ✅ Fast - Instant generation
|
|
39
|
+
- ✅ Zero dependencies - Pure Node.js
|
|
40
|
+
- ✅ Offline - Works without internet
|
|
41
|
+
- ✅ Free - Open source (MIT)
|
|
42
|
+
- ✅ CLI - Use in your terminal
|
|
43
|
+
- ✅ Multiple modes - paragraphs, sentences, or words
|
|
44
|
+
|
|
45
|
+
## Web Version
|
|
46
|
+
|
|
47
|
+
Prefer a GUI? Check out the web version: **https://devkits-tools.surge.sh/tools/lorem-ipsum**
|
|
48
|
+
|
|
49
|
+
- 84 developer tools in one PWA
|
|
50
|
+
- Works offline
|
|
51
|
+
- No signup required
|
|
52
|
+
|
|
53
|
+
## Pro Features
|
|
54
|
+
|
|
55
|
+
Upgrade to Pro for advanced features:
|
|
56
|
+
|
|
57
|
+
- 📦 Batch Processing
|
|
58
|
+
- 🔗 API Access (1000 req/day free)
|
|
59
|
+
- ☁️ Cloud Sync
|
|
60
|
+
- 🎨 Custom Themes
|
|
61
|
+
- 📊 Advanced Analytics
|
|
62
|
+
- 💬 Priority Support
|
|
63
|
+
|
|
64
|
+
**Price:** $9 one-time payment
|
|
65
|
+
**Upgrade:** https://devkits-tools.surge.sh/pro
|
|
66
|
+
**Discount:** Use code `EARLYBIRD-2026` for 20% off
|
|
67
|
+
|
|
68
|
+
## See Also
|
|
69
|
+
|
|
70
|
+
Part of the **[DevKits Tools](https://devkits-tools.surge.sh)** collection — 80+ free developer tools:
|
|
71
|
+
|
|
72
|
+
### Popular Tools
|
|
73
|
+
|
|
74
|
+
| Tool | npm Package | Description |
|
|
75
|
+
|------|-------------|-------------|
|
|
76
|
+
| **[Base64](https://devkits-tools.surge.sh/tools/base64)** | `@devkits/base64` | Encode/decode Base64 |
|
|
77
|
+
| **[JSON Formatter](https://devkits-tools.surge.sh/tools/json-formatter)** | `@devkits/json-formatter` | Format and validate JSON |
|
|
78
|
+
| **[Color Converter](https://devkits-tools.surge.sh/tools/color-converter)** | `@devkits/color-converter` | HEX/RGB/HSL conversion |
|
|
79
|
+
| **[UUID Generator](https://devkits-tools.surge.sh/tools/uuid-generator)** | `@devkits/uuid-generator` | Generate unique UUIDs |
|
|
80
|
+
| **[Hash Generator](https://devkits-tools.surge.sh/tools/hash-generator)** | `@devkits/hash-generator` | MD5, SHA1, SHA256, SHA512 |
|
|
81
|
+
| **[Regex Tester](https://devkits-tools.surge.sh/tools/regex-tester)** | `@devkits/regex-tester` | Test regex patterns |
|
|
82
|
+
|
|
83
|
+
### Other DevKits Tools
|
|
84
|
+
|
|
85
|
+
- **[HTML Tools](https://devkits-tools.surge.sh/tools/html-entities)** — HTML entity encode/decode
|
|
86
|
+
- **[CSS Tools](https://devkits-tools.surge.sh/tools/css-minifier)** — CSS minify/format
|
|
87
|
+
- **[Cron Parser](https://devkits-tools.surge.sh/tools/cron-parser)** — Parse cron expressions
|
|
88
|
+
- **[Case Convert](https://devkits-tools.surge.sh/tools/text-case)** — camelCase, snake_case, etc.
|
|
89
|
+
- **[Slugify](https://devkits-tools.surge.sh/tools/slug-generator)** — Create URL-friendly slugs
|
|
90
|
+
- **[Password Generator](https://devkits-tools.surge.sh/tools/password-generator)** — Secure passwords
|
|
91
|
+
- **[Text Counter](https://devkits-tools.surge.sh/tools/text-counter)** — Word/char counter
|
|
92
|
+
- **[Timestamp](https://devkits-tools.surge.sh/tools/timestamp)** — Unix timestamp converter
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### More from DevKits
|
|
97
|
+
|
|
98
|
+
- **[Invoicely](https://invoicely-app.surge.sh)** — Free invoice generator for freelancers
|
|
99
|
+
- **[SnapOG](https://snapog.surge.sh)** — Free OG image generator with 20+ templates
|
|
100
|
+
- **[API Monitor](https://api-monitor-saas.surge.sh)** — Real-time API monitoring
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
👉 **Explore all 80+ developer tools at [DevKits Tools](https://devkits-tools.surge.sh)**
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
MIT © [DevKits Team](https://devkits-tools.surge.sh)
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 🚀 API Monitoring for Developers
|
|
113
|
+
|
|
114
|
+
Build better APIs with **API Monitor SaaS** — real-time monitoring, alerting, and analytics.
|
|
115
|
+
|
|
116
|
+
👉 **Early Access: $1 pre-order (50% off for life)** → https://api-monitor-saas.surge.sh?utm_source=npm&utm_medium=readme&utm_campaign=phase0
|
package/index.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @devkits/lorem - Generate Lorem Ipsum placeholder text
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* dk-lorem # Generate 1 paragraph
|
|
8
|
+
* dk-lorem -p 3 # Generate 3 paragraphs
|
|
9
|
+
* dk-lorem -s 5 # Generate 5 sentences
|
|
10
|
+
* dk-lorem -w 100 # Generate 100 words
|
|
11
|
+
*
|
|
12
|
+
* Web version: https://devkits-tools.surge.sh/tools/lorem-ipsum
|
|
13
|
+
* Pro features: https://devkits-tools.surge.sh/pro
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const WORDS = [
|
|
17
|
+
'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit',
|
|
18
|
+
'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore',
|
|
19
|
+
'magna', 'aliqua', 'ut', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud',
|
|
20
|
+
'exercitation', 'ullamco', 'laboris', 'nisi', 'ut', 'aliquip', 'ex', 'ea',
|
|
21
|
+
'commodo', 'consequat', 'duis', 'aute', 'irure', 'dolor', 'in', 'reprehenderit',
|
|
22
|
+
'voluptate', 'velit', 'esse', 'cillum', 'dolore', 'eu', 'fugiat', 'nulla',
|
|
23
|
+
'pariatur', 'excepteur', 'sint', 'occaecat', 'cupidatat', 'non', 'proident',
|
|
24
|
+
'sunt', 'in', 'culpa', 'qui', 'officia', 'deserunt', 'mollit', 'anim', 'id',
|
|
25
|
+
'est', 'laborum', 'at', 'vero', 'eos', 'accusamus', 'iusto', 'odio', 'dignissimos',
|
|
26
|
+
'ducimus', 'blanditiis', 'praesentium', 'voluptatum', 'deleniti', 'atque',
|
|
27
|
+
'corrupti', 'quos', 'dolores', 'quas', 'molestias', 'excepturi', 'sint',
|
|
28
|
+
'obcaecati', 'cupiditate', 'provident', 'similique', 'neque', 'porro',
|
|
29
|
+
'quisquam', 'nihil', 'impedit', 'quo', 'minus', 'quod', 'maxime', 'placeat',
|
|
30
|
+
'facere', 'possimus', 'omnis', 'voluptas', 'assumenda', 'repellendus',
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
function randomWord() {
|
|
34
|
+
return WORDS[Math.floor(Math.random() * WORDS.length)];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function capitalize(str) {
|
|
38
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function generateSentence() {
|
|
42
|
+
const len = Math.floor(Math.random() * 8) + 5; // 5-12 words
|
|
43
|
+
const words = [];
|
|
44
|
+
for (let i = 0; i < len; i++) {
|
|
45
|
+
words.push(randomWord());
|
|
46
|
+
}
|
|
47
|
+
return capitalize(words.join(' ')) + '.';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function generateParagraph(numSentences = 5) {
|
|
51
|
+
const sentences = [];
|
|
52
|
+
for (let i = 0; i < numSentences; i++) {
|
|
53
|
+
sentences.push(generateSentence());
|
|
54
|
+
}
|
|
55
|
+
return sentences.join(' ');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function generateLorem(options = {}) {
|
|
59
|
+
const { type = 'paragraphs', count = 1 } = options;
|
|
60
|
+
|
|
61
|
+
switch (type) {
|
|
62
|
+
case 'sentences':
|
|
63
|
+
const sentences = [];
|
|
64
|
+
for (let i = 0; i < count; i++) {
|
|
65
|
+
sentences.push(generateSentence());
|
|
66
|
+
}
|
|
67
|
+
return sentences.join(' ');
|
|
68
|
+
|
|
69
|
+
case 'words':
|
|
70
|
+
const words = [];
|
|
71
|
+
for (let i = 0; i < count; i++) {
|
|
72
|
+
words.push(randomWord());
|
|
73
|
+
}
|
|
74
|
+
return words.join(' ');
|
|
75
|
+
|
|
76
|
+
case 'paragraphs':
|
|
77
|
+
default:
|
|
78
|
+
const paragraphs = [];
|
|
79
|
+
for (let i = 0; i < count; i++) {
|
|
80
|
+
paragraphs.push(generateParagraph());
|
|
81
|
+
}
|
|
82
|
+
return paragraphs.join('\n\n');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function showHelp() {
|
|
87
|
+
console.log(`
|
|
88
|
+
@devkits/lorem - Generate Lorem Ipsum placeholder text
|
|
89
|
+
|
|
90
|
+
Usage:
|
|
91
|
+
dk-lorem # 1 paragraph
|
|
92
|
+
dk-lorem -p 3 # 3 paragraphs
|
|
93
|
+
dk-lorem -s 5 # 5 sentences
|
|
94
|
+
dk-lorem -w 100 # 100 words
|
|
95
|
+
dk-lorem -t sentences -c 5 # 5 sentences (alternative)
|
|
96
|
+
|
|
97
|
+
Options:
|
|
98
|
+
-p, --paragraphs <n> Generate N paragraphs (default: 1)
|
|
99
|
+
-s, --sentences <n> Generate N sentences
|
|
100
|
+
-w, --words <n> Generate N words
|
|
101
|
+
-t, --type <type> Type: paragraphs, sentences, words
|
|
102
|
+
-c, --count <n> Count for type (default: 1)
|
|
103
|
+
-h, --help Show this help message
|
|
104
|
+
|
|
105
|
+
Examples:
|
|
106
|
+
dk-lorem # 1 paragraph
|
|
107
|
+
dk-lorem -p 5 # 5 paragraphs
|
|
108
|
+
dk-lorem -s 10 # 10 sentences
|
|
109
|
+
dk-lorem -w 50 # 50 words
|
|
110
|
+
|
|
111
|
+
Web version: https://devkits-tools.surge.sh/tools/lorem-ipsum
|
|
112
|
+
Pro features: https://devkits-tools.surge.sh/pro
|
|
113
|
+
`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Main entry point
|
|
117
|
+
const args = process.argv.slice(2);
|
|
118
|
+
|
|
119
|
+
if (!args.length || args.includes('-h') || args.includes('--help')) {
|
|
120
|
+
showHelp();
|
|
121
|
+
process.exit(0);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Parse options
|
|
125
|
+
let type = 'paragraphs';
|
|
126
|
+
let count = 1;
|
|
127
|
+
|
|
128
|
+
for (let i = 0; i < args.length; i++) {
|
|
129
|
+
switch (args[i]) {
|
|
130
|
+
case '-p':
|
|
131
|
+
case '--paragraphs':
|
|
132
|
+
type = 'paragraphs';
|
|
133
|
+
count = parseInt(args[++i], 10) || 1;
|
|
134
|
+
break;
|
|
135
|
+
case '-s':
|
|
136
|
+
case '--sentences':
|
|
137
|
+
type = 'sentences';
|
|
138
|
+
count = parseInt(args[++i], 10) || 1;
|
|
139
|
+
break;
|
|
140
|
+
case '-w':
|
|
141
|
+
case '--words':
|
|
142
|
+
type = 'words';
|
|
143
|
+
count = parseInt(args[++i], 10) || 1;
|
|
144
|
+
break;
|
|
145
|
+
case '-t':
|
|
146
|
+
case '--type':
|
|
147
|
+
type = args[++i] || 'paragraphs';
|
|
148
|
+
break;
|
|
149
|
+
case '-c':
|
|
150
|
+
case '--count':
|
|
151
|
+
count = parseInt(args[++i], 10) || 1;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
console.log(generateLorem({ type, count }));
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devkits-lorem",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Generate Lorem Ipsum placeholder text",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"dk-lorem": "./index.js",
|
|
8
|
+
"lorem": "./index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "node test.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"lorem",
|
|
15
|
+
"ipsum",
|
|
16
|
+
"placeholder",
|
|
17
|
+
"text",
|
|
18
|
+
"generator",
|
|
19
|
+
"devkits",
|
|
20
|
+
"developer-tools",
|
|
21
|
+
"cli",
|
|
22
|
+
"command-line",
|
|
23
|
+
"nodejs",
|
|
24
|
+
"utility",
|
|
25
|
+
"productivity",
|
|
26
|
+
"dev-tools",
|
|
27
|
+
"free-tools"
|
|
28
|
+
],
|
|
29
|
+
"author": "DevKits Team <devkits-auto@protonmail.com>",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/devkits/tools"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://devkits-tools.surge.sh/tools/lorem-ipsum",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/devkits/tools/issues"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=14.0.0"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"index.js",
|
|
44
|
+
"README.md",
|
|
45
|
+
"test.js"
|
|
46
|
+
],
|
|
47
|
+
"dependencies": {}
|
|
48
|
+
}
|
package/test.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tests for @devkits/lorem
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { execSync } = require('child_process');
|
|
8
|
+
|
|
9
|
+
const tests = [
|
|
10
|
+
{
|
|
11
|
+
name: 'Default generates 1 paragraph',
|
|
12
|
+
cmd: 'node index.js',
|
|
13
|
+
check: (result) => result.split('\n\n').length === 1
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'Generate 3 paragraphs',
|
|
17
|
+
cmd: 'node index.js -p 3',
|
|
18
|
+
check: (result) => result.split('\n\n').length === 3
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'Generate 5 sentences',
|
|
22
|
+
cmd: 'node index.js -s 5',
|
|
23
|
+
check: (result) => result.split('.').filter(s => s.trim()).length === 5
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'Generate 50 words',
|
|
27
|
+
cmd: 'node index.js -w 50',
|
|
28
|
+
check: (result) => result.split(/\s+/).length === 50
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'All words are valid lorem ipsum words',
|
|
32
|
+
cmd: 'node index.js -w 100',
|
|
33
|
+
check: (result) => {
|
|
34
|
+
const validWords = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit',
|
|
35
|
+
'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore',
|
|
36
|
+
'magna', 'aliqua', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud',
|
|
37
|
+
'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea',
|
|
38
|
+
'commodo', 'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit',
|
|
39
|
+
'voluptate', 'velit', 'esse', 'cillum', 'eu', 'fugiat', 'nulla',
|
|
40
|
+
'pariatur', 'excepteur', 'sint', 'occaecat', 'cupidatat', 'non', 'proident',
|
|
41
|
+
'sunt', 'culpa', 'qui', 'officia', 'deserunt', 'mollit', 'anim', 'id',
|
|
42
|
+
'est', 'laborum', 'at', 'vero', 'eos', 'accusamus', 'iusto', 'odio', 'dignissimos',
|
|
43
|
+
'ducimus', 'blanditiis', 'praesentium', 'voluptatum', 'deleniti', 'atque',
|
|
44
|
+
'corrupti', 'quos', 'dolores', 'quas', 'molestias', 'excepturi',
|
|
45
|
+
'obcaecati', 'cupiditate', 'provident', 'similique', 'neque', 'porro',
|
|
46
|
+
'quisquam', 'nihil', 'impedit', 'quo', 'minus', 'quod', 'maxime', 'placeat',
|
|
47
|
+
'facere', 'possimus', 'omnis', 'voluptas', 'assumenda', 'repellendus'];
|
|
48
|
+
return result.toLowerCase().split(/\s+/).every(word => {
|
|
49
|
+
const clean = word.replace(/[^a-z]/g, '');
|
|
50
|
+
return validWords.includes(clean);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
let passed = 0;
|
|
57
|
+
let failed = 0;
|
|
58
|
+
|
|
59
|
+
console.log('Running @devkits/lorem tests...\n');
|
|
60
|
+
|
|
61
|
+
for (const test of tests) {
|
|
62
|
+
try {
|
|
63
|
+
const result = execSync(test.cmd, { encoding: 'utf8' }).trim();
|
|
64
|
+
if (test.check(result)) {
|
|
65
|
+
console.log(`✅ ${test.name}`);
|
|
66
|
+
passed++;
|
|
67
|
+
} else {
|
|
68
|
+
console.log(`❌ ${test.name}`);
|
|
69
|
+
console.log(` Got: ${result.substring(0, 100)}...`);
|
|
70
|
+
failed++;
|
|
71
|
+
}
|
|
72
|
+
} catch (err) {
|
|
73
|
+
console.log(`❌ ${test.name} - Error: ${err.message}`);
|
|
74
|
+
failed++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
console.log(`\n${passed}/${tests.length} tests passed`);
|
|
79
|
+
process.exit(failed > 0 ? 1 : 0);
|