enjidev 0.0.0 → 0.1.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.
Files changed (3) hide show
  1. package/README.md +19 -1
  2. package/index.js +132 -0
  3. package/package.json +9 -2
package/README.md CHANGED
@@ -1 +1,19 @@
1
- # XME
1
+ # enjidev cli
2
+
3
+ ## One time run
4
+
5
+ ```bash
6
+ npx enjidev
7
+ ```
8
+
9
+ ## Install Globally
10
+
11
+ ```bash
12
+ npm install -g enjidev
13
+ ```
14
+
15
+ Then run:
16
+
17
+ ```bash
18
+ enjidev
19
+ ```
package/index.js ADDED
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env node
2
+
3
+ // ═══════════════════════════════════════════════════════════════════════════════
4
+ // ANSI color codes
5
+ // ═══════════════════════════════════════════════════════════════════════════════
6
+
7
+ const c = {
8
+ reset: "\x1b[0m",
9
+ bold: "\x1b[1m",
10
+ dim: "\x1b[2m",
11
+
12
+ cyan: "\x1b[36m",
13
+ magenta: "\x1b[35m",
14
+ yellow: "\x1b[33m",
15
+ blue: "\x1b[34m",
16
+ green: "\x1b[32m",
17
+ white: "\x1b[37m",
18
+ gray: "\x1b[90m",
19
+
20
+ brightCyan: "\x1b[96m",
21
+ brightMagenta: "\x1b[95m",
22
+ brightYellow: "\x1b[93m",
23
+ };
24
+
25
+ // ═══════════════════════════════════════════════════════════════════════════════
26
+ // Configuration
27
+ // ═══════════════════════════════════════════════════════════════════════════════
28
+
29
+ const bio = {
30
+ name: "Enji Kusnadi",
31
+ title: "Front-End Developer",
32
+ location: "Indonesia",
33
+ availableForHire: true,
34
+
35
+ socials: {
36
+ github: "https://github.com/enjidev",
37
+ x: "https://x.com/enjidev",
38
+ linkedin: "https://linkedin.com/in/enjidev",
39
+ website: "https://enji.dev",
40
+ },
41
+
42
+ skills: ["TypeScript", "React", "Vue", "UI/UX"],
43
+ };
44
+
45
+ // ═══════════════════════════════════════════════════════════════════════════════
46
+ // ASCII Art
47
+ // ═══════════════════════════════════════════════════════════════════════════════
48
+
49
+ const asciiArt = [
50
+ " + ",
51
+ " +++++++++ ",
52
+ " +++++++++++++++ ",
53
+ " +++++++++++++++++++++ ",
54
+ " +++++++++++++++++++++++++++ ",
55
+ " +++++++++++++++++++++++++++++++ ",
56
+ " +++++++++++++++++++++++++++ ",
57
+ " +++++++++++++++++++++ ",
58
+ " +++++++++++++++ ",
59
+ " ++++ +++++++++ ++++ ",
60
+ " +++++++++ + +++++++++ ",
61
+ " ++++++++++ +++++++++ ",
62
+ " ++++++++++ +++++++++ ",
63
+ " +++++++++++++ ",
64
+ " ++++ +++++++ ++++ ",
65
+ " +++++++++ + +++++++++ ",
66
+ " ++++++++++ +++++++++ ",
67
+ " ++++++++++ +++++++++ ",
68
+ " +++++++++++++ ",
69
+ " +++++++ ",
70
+ " + ",
71
+ ];
72
+
73
+ // ═══════════════════════════════════════════════════════════════════════════════
74
+ // Build info lines
75
+ // ═══════════════════════════════════════════════════════════════════════════════
76
+
77
+ function buildInfoLines() {
78
+ const separator = c.gray + "─".repeat(30) + c.reset;
79
+
80
+ const lines = [
81
+ `${c.brightCyan}${c.bold}${bio.name}${c.reset}`,
82
+ separator,
83
+ `${c.brightYellow}Title${c.reset}: ${bio.title}`,
84
+ `${c.brightYellow}Location${c.reset}: ${bio.location}`,
85
+ "",
86
+ `${c.brightMagenta}Website${c.reset}: ${bio.socials.website}`,
87
+ `${c.brightMagenta}GitHub${c.reset}: ${bio.socials.github}`,
88
+ `${c.brightMagenta}LinkedIn${c.reset}: ${bio.socials.linkedin}`,
89
+ `${c.brightMagenta}X${c.reset}: ${bio.socials.x}`,
90
+ "",
91
+ `${c.brightCyan}Skills${c.reset}: ${bio.skills.join(", ")}`,
92
+ ];
93
+
94
+ if (bio.availableForHire) {
95
+ lines.push("");
96
+ lines.push(`${c.green}◆ ${c.green}Available for Hire`);
97
+ }
98
+
99
+ return lines;
100
+ }
101
+
102
+ // ═══════════════════════════════════════════════════════════════════════════════
103
+ // Render side-by-side
104
+ // ═══════════════════════════════════════════════════════════════════════════════
105
+
106
+ function render() {
107
+ const infoLines = buildInfoLines();
108
+ const maxLines = Math.max(asciiArt.length, infoLines.length);
109
+ const artWidth = 60;
110
+ const gap = " ";
111
+
112
+ console.log();
113
+ console.log();
114
+
115
+ for (let i = 0; i < maxLines; i++) {
116
+ const artLine = asciiArt[i] || "";
117
+ const infoLine = infoLines[i] || "";
118
+
119
+ const paddedArt = artLine.padEnd(artWidth);
120
+
121
+ console.log(` ${c.brightCyan}${paddedArt}${c.reset}${gap}${infoLine}`);
122
+ }
123
+
124
+ console.log();
125
+ console.log();
126
+ }
127
+
128
+ // ═══════════════════════════════════════════════════════════════════════════════
129
+ // Main
130
+ // ═══════════════════════════════════════════════════════════════════════════════
131
+
132
+ render();
package/package.json CHANGED
@@ -1,8 +1,15 @@
1
1
  {
2
2
  "name": "enjidev",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "license": "MIT",
5
5
  "keywords": [
6
+ "cli",
6
7
  "enjidev"
7
- ]
8
+ ],
9
+ "scripts": {
10
+ "dev": "node --watch index.js"
11
+ },
12
+ "bin": {
13
+ "enjidev": "index.js"
14
+ }
8
15
  }