devkit-tool 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.
Files changed (150) hide show
  1. package/README.md +90 -0
  2. package/dist/commands/buat.d.ts +2 -0
  3. package/dist/commands/buat.d.ts.map +1 -0
  4. package/dist/commands/buat.js +229 -0
  5. package/dist/commands/buat.js.map +1 -0
  6. package/dist/commands/install.d.ts +2 -0
  7. package/dist/commands/install.d.ts.map +1 -0
  8. package/dist/commands/install.js +161 -0
  9. package/dist/commands/install.js.map +1 -0
  10. package/dist/commands/referensi.d.ts +2 -0
  11. package/dist/commands/referensi.d.ts.map +1 -0
  12. package/dist/commands/referensi.js +26 -0
  13. package/dist/commands/referensi.js.map +1 -0
  14. package/dist/core/detector.d.ts +7 -0
  15. package/dist/core/detector.d.ts.map +1 -0
  16. package/dist/core/detector.js +63 -0
  17. package/dist/core/detector.js.map +1 -0
  18. package/dist/core/environment.d.ts +8 -0
  19. package/dist/core/environment.d.ts.map +1 -0
  20. package/dist/core/environment.js +161 -0
  21. package/dist/core/environment.js.map +1 -0
  22. package/dist/core/executor.d.ts +12 -0
  23. package/dist/core/executor.d.ts.map +1 -0
  24. package/dist/core/executor.js +37 -0
  25. package/dist/core/executor.js.map +1 -0
  26. package/dist/core/knowledge.d.ts +10 -0
  27. package/dist/core/knowledge.d.ts.map +1 -0
  28. package/dist/core/knowledge.js +114 -0
  29. package/dist/core/knowledge.js.map +1 -0
  30. package/dist/core/registry.d.ts +4 -0
  31. package/dist/core/registry.d.ts.map +1 -0
  32. package/dist/core/registry.js +37 -0
  33. package/dist/core/registry.js.map +1 -0
  34. package/dist/core/warna.d.ts +14 -0
  35. package/dist/core/warna.d.ts.map +1 -0
  36. package/dist/core/warna.js +35 -0
  37. package/dist/core/warna.js.map +1 -0
  38. package/dist/core/welcome.d.ts +2 -0
  39. package/dist/core/welcome.d.ts.map +1 -0
  40. package/dist/core/welcome.js +42 -0
  41. package/dist/core/welcome.js.map +1 -0
  42. package/dist/index.d.ts +3 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +59 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/technologies/bootstrap.d.ts +3 -0
  47. package/dist/technologies/bootstrap.d.ts.map +1 -0
  48. package/dist/technologies/bootstrap.js +9 -0
  49. package/dist/technologies/bootstrap.js.map +1 -0
  50. package/dist/technologies/bun.d.ts +3 -0
  51. package/dist/technologies/bun.d.ts.map +1 -0
  52. package/dist/technologies/bun.js +9 -0
  53. package/dist/technologies/bun.js.map +1 -0
  54. package/dist/technologies/composer.d.ts +3 -0
  55. package/dist/technologies/composer.d.ts.map +1 -0
  56. package/dist/technologies/composer.js +22 -0
  57. package/dist/technologies/composer.js.map +1 -0
  58. package/dist/technologies/cypress.d.ts +3 -0
  59. package/dist/technologies/cypress.d.ts.map +1 -0
  60. package/dist/technologies/cypress.js +9 -0
  61. package/dist/technologies/cypress.js.map +1 -0
  62. package/dist/technologies/docker.d.ts +3 -0
  63. package/dist/technologies/docker.d.ts.map +1 -0
  64. package/dist/technologies/docker.js +24 -0
  65. package/dist/technologies/docker.js.map +1 -0
  66. package/dist/technologies/express.d.ts +3 -0
  67. package/dist/technologies/express.d.ts.map +1 -0
  68. package/dist/technologies/express.js +9 -0
  69. package/dist/technologies/express.js.map +1 -0
  70. package/dist/technologies/firebase.d.ts +3 -0
  71. package/dist/technologies/firebase.d.ts.map +1 -0
  72. package/dist/technologies/firebase.js +9 -0
  73. package/dist/technologies/firebase.js.map +1 -0
  74. package/dist/technologies/flutter.d.ts +3 -0
  75. package/dist/technologies/flutter.d.ts.map +1 -0
  76. package/dist/technologies/flutter.js +9 -0
  77. package/dist/technologies/flutter.js.map +1 -0
  78. package/dist/technologies/go.d.ts +3 -0
  79. package/dist/technologies/go.d.ts.map +1 -0
  80. package/dist/technologies/go.js +24 -0
  81. package/dist/technologies/go.js.map +1 -0
  82. package/dist/technologies/jest.d.ts +3 -0
  83. package/dist/technologies/jest.d.ts.map +1 -0
  84. package/dist/technologies/jest.js +9 -0
  85. package/dist/technologies/jest.js.map +1 -0
  86. package/dist/technologies/laravel.d.ts +3 -0
  87. package/dist/technologies/laravel.d.ts.map +1 -0
  88. package/dist/technologies/laravel.js +9 -0
  89. package/dist/technologies/laravel.js.map +1 -0
  90. package/dist/technologies/nestjs.d.ts +3 -0
  91. package/dist/technologies/nestjs.d.ts.map +1 -0
  92. package/dist/technologies/nestjs.js +9 -0
  93. package/dist/technologies/nestjs.js.map +1 -0
  94. package/dist/technologies/netlify.d.ts +3 -0
  95. package/dist/technologies/netlify.d.ts.map +1 -0
  96. package/dist/technologies/netlify.js +9 -0
  97. package/dist/technologies/netlify.js.map +1 -0
  98. package/dist/technologies/nextjs.d.ts +3 -0
  99. package/dist/technologies/nextjs.d.ts.map +1 -0
  100. package/dist/technologies/nextjs.js +9 -0
  101. package/dist/technologies/nextjs.js.map +1 -0
  102. package/dist/technologies/node.d.ts +3 -0
  103. package/dist/technologies/node.d.ts.map +1 -0
  104. package/dist/technologies/node.js +9 -0
  105. package/dist/technologies/node.js.map +1 -0
  106. package/dist/technologies/php.d.ts +3 -0
  107. package/dist/technologies/php.d.ts.map +1 -0
  108. package/dist/technologies/php.js +24 -0
  109. package/dist/technologies/php.js.map +1 -0
  110. package/dist/technologies/pnpm.d.ts +3 -0
  111. package/dist/technologies/pnpm.d.ts.map +1 -0
  112. package/dist/technologies/pnpm.js +9 -0
  113. package/dist/technologies/pnpm.js.map +1 -0
  114. package/dist/technologies/python.d.ts +3 -0
  115. package/dist/technologies/python.d.ts.map +1 -0
  116. package/dist/technologies/python.js +24 -0
  117. package/dist/technologies/python.js.map +1 -0
  118. package/dist/technologies/react.d.ts +3 -0
  119. package/dist/technologies/react.d.ts.map +1 -0
  120. package/dist/technologies/react.js +9 -0
  121. package/dist/technologies/react.js.map +1 -0
  122. package/dist/technologies/sass.d.ts +3 -0
  123. package/dist/technologies/sass.d.ts.map +1 -0
  124. package/dist/technologies/sass.js +9 -0
  125. package/dist/technologies/sass.js.map +1 -0
  126. package/dist/technologies/supabase.d.ts +3 -0
  127. package/dist/technologies/supabase.d.ts.map +1 -0
  128. package/dist/technologies/supabase.js +9 -0
  129. package/dist/technologies/supabase.js.map +1 -0
  130. package/dist/technologies/tailwind.d.ts +3 -0
  131. package/dist/technologies/tailwind.d.ts.map +1 -0
  132. package/dist/technologies/tailwind.js +9 -0
  133. package/dist/technologies/tailwind.js.map +1 -0
  134. package/dist/technologies/vercel.d.ts +3 -0
  135. package/dist/technologies/vercel.d.ts.map +1 -0
  136. package/dist/technologies/vercel.js +9 -0
  137. package/dist/technologies/vercel.js.map +1 -0
  138. package/dist/technologies/vite.d.ts +3 -0
  139. package/dist/technologies/vite.d.ts.map +1 -0
  140. package/dist/technologies/vite.js +9 -0
  141. package/dist/technologies/vite.js.map +1 -0
  142. package/dist/technologies/yarn.d.ts +3 -0
  143. package/dist/technologies/yarn.d.ts.map +1 -0
  144. package/dist/technologies/yarn.js +9 -0
  145. package/dist/technologies/yarn.js.map +1 -0
  146. package/dist/types/index.d.ts +10 -0
  147. package/dist/types/index.d.ts.map +1 -0
  148. package/dist/types/index.js +2 -0
  149. package/dist/types/index.js.map +1 -0
  150. package/package.json +44 -0
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # DevKit — Developer Project Wizard
2
+
3
+ CLI tool untuk membantu developer membuat project, menginstall teknologi, mengecek environment, dan mencari command yang sering lupa.
4
+
5
+ ## Instalasi
6
+
7
+ ```bash
8
+ npm install -g devkit-tool
9
+ ```
10
+
11
+ ## Penggunaan
12
+
13
+ ```bash
14
+ devkit
15
+ ```
16
+
17
+ Atau tanpa install global:
18
+
19
+ ```bash
20
+ npx devkit-tool
21
+ ```
22
+
23
+ ## Fitur
24
+
25
+ ### Buat Proyek Baru
26
+ - Node.js
27
+ - Vite
28
+ - Laravel (dengan pilihan versi & deteksi lokasi XAMPP/Laragon/WAMP)
29
+ - React
30
+ - Tailwind CSS
31
+ - Flutter
32
+ - Next.js
33
+ - Express.js
34
+ - Bootstrap
35
+
36
+ ### Install Teknologi
37
+ - React
38
+ - Tailwind CSS
39
+ - Flutter
40
+ - Next.js
41
+ - Express.js
42
+ - Bootstrap
43
+ - Composer
44
+ - PHP
45
+ - Docker
46
+ - Python
47
+ - Go
48
+
49
+ ### Cek Lingkungan
50
+ - Node.js
51
+ - npm
52
+ - Git
53
+ - PHP
54
+ - Composer
55
+
56
+ ### Referensi Perintah
57
+ - Laravel
58
+ - Vite
59
+ - React
60
+ - Tailwind CSS
61
+ - Node.js
62
+
63
+ ## Requirements
64
+
65
+ - Node.js >= 18.0.0
66
+ - npm
67
+
68
+ ## Development
69
+
70
+ ```bash
71
+ # Install dependencies
72
+ npm install
73
+
74
+ # Development mode
75
+ npm run dev
76
+
77
+ # Build
78
+ npm run build
79
+
80
+ # Test
81
+ npm test
82
+ ```
83
+
84
+ ## License
85
+
86
+ ISC
87
+
88
+ ## Author
89
+
90
+ [@Adiwijaya11](https://github.com/Adiwijaya11)
@@ -0,0 +1,2 @@
1
+ export declare function jalankanBuatProyek(): Promise<void>;
2
+ //# sourceMappingURL=buat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buat.d.ts","sourceRoot":"","sources":["../../src/commands/buat.ts"],"names":[],"mappings":"AA4GA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsLxD"}
@@ -0,0 +1,229 @@
1
+ import * as p from "@clack/prompts";
2
+ import { dapatkanSemuaTeknologi } from "../core/registry.js";
3
+ import { deteksiSemua } from "../core/detector.js";
4
+ import { execute } from "../core/executor.js";
5
+ import { existsSync } from "node:fs";
6
+ import path from "node:path";
7
+ import { deteksiEnvironmentLokal } from "../core/environment.js";
8
+ import { reset, bold, dim, green, yellow, cyan, warnaUntukTeknologi, teksBerwarna } from "../core/warna.js";
9
+ function validasiNamaProyek(nama) {
10
+ if (!nama?.trim()) {
11
+ return "Nama proyek tidak boleh kosong.";
12
+ }
13
+ if (/[<>:"/\\|?*]/.test(nama)) {
14
+ return "Nama proyek mengandung karakter yang tidak valid.";
15
+ }
16
+ if (nama.startsWith(".") || nama.startsWith("-")) {
17
+ return "Nama proyek tidak boleh dimulai dengan titik atau strip.";
18
+ }
19
+ return undefined;
20
+ }
21
+ async function pilihVersiLaravel() {
22
+ const versi = await p.select({
23
+ message: "Pilih versi Laravel:",
24
+ options: [
25
+ { value: "latest", label: "Latest", hint: "Versi terbaru" },
26
+ { value: "12.*", label: "Laravel 12", hint: "PHP 8.2+" },
27
+ { value: "11.*", label: "Laravel 11", hint: "PHP 8.2+" },
28
+ { value: "10.*", label: "Laravel 10", hint: "PHP 8.1+" },
29
+ { value: "9.*", label: "Laravel 9", hint: "PHP 8.0+" },
30
+ { value: "8.*", label: "Laravel 8", hint: "PHP 7.4+" },
31
+ ],
32
+ });
33
+ return versi;
34
+ }
35
+ async function pilihLokasiLaravel() {
36
+ const environments = await deteksiEnvironmentLokal();
37
+ const options = environments
38
+ .filter((e) => e.terdeteksi)
39
+ .map((e) => ({
40
+ value: e.path,
41
+ label: `${e.nama} — ${e.path}`,
42
+ hint: e.sumber,
43
+ }));
44
+ options.push({
45
+ value: "custom",
46
+ label: "Lokasi lain...",
47
+ hint: "Pilih folder tujuan sendiri",
48
+ });
49
+ const lokasi = await p.select({
50
+ message: "Simpan proyek di mana?",
51
+ options,
52
+ });
53
+ if (p.isCancel(lokasi)) {
54
+ return lokasi;
55
+ }
56
+ if (lokasi === "custom") {
57
+ const pathCustom = await p.text({
58
+ message: "Masukkan path folder tujuan:",
59
+ placeholder: "C:\\xampp\\htdocs",
60
+ validate: (value) => {
61
+ if (!value?.trim()) {
62
+ return "Path tidak boleh kosong.";
63
+ }
64
+ return undefined;
65
+ },
66
+ });
67
+ if (p.isCancel(pathCustom)) {
68
+ return pathCustom;
69
+ }
70
+ return pathCustom;
71
+ }
72
+ return lokasi;
73
+ }
74
+ async function cekRequirements(requirements) {
75
+ const hasil = await deteksiSemua();
76
+ const alatMap = new Map(hasil.map((r) => [r.nama.toLowerCase(), r]));
77
+ const semuaTerpenuhi = requirements.every((req) => {
78
+ const alat = alatMap.get(req.toLowerCase());
79
+ return alat?.terinstall ?? false;
80
+ });
81
+ if (!semuaTerpenuhi) {
82
+ const hilang = requirements.filter((req) => {
83
+ const alat = alatMap.get(req.toLowerCase());
84
+ return !alat?.terinstall;
85
+ });
86
+ p.note(`Requirements tidak terpenuhi: ${hilang.join(", ")}`);
87
+ return false;
88
+ }
89
+ return true;
90
+ }
91
+ export async function jalankanBuatProyek() {
92
+ p.intro("Buat Proyek Baru");
93
+ const daftarTeknologi = dapatkanSemuaTeknologi();
94
+ const teknologiDipilih = await p.select({
95
+ message: "Apa yang ingin kamu buat?",
96
+ options: daftarTeknologi.map((t) => ({
97
+ value: t.nama,
98
+ label: teksBerwarna(t.nama, warnaUntukTeknologi(t.nama)),
99
+ hint: t.deskripsi,
100
+ })),
101
+ });
102
+ if (p.isCancel(teknologiDipilih)) {
103
+ p.cancel("Operasi dibatalkan.");
104
+ return;
105
+ }
106
+ const teknologi = daftarTeknologi.find((t) => t.nama === teknologiDipilih);
107
+ let versiLaravel = null;
108
+ if (teknologi.nama.toLowerCase() === "laravel") {
109
+ const versi = await pilihVersiLaravel();
110
+ if (p.isCancel(versi)) {
111
+ p.cancel("Operasi dibatalkan.");
112
+ return;
113
+ }
114
+ versiLaravel = versi;
115
+ }
116
+ const namaProyek = await p.text({
117
+ message: "Nama proyek:",
118
+ placeholder: "my-app",
119
+ validate: validasiNamaProyek,
120
+ });
121
+ if (p.isCancel(namaProyek)) {
122
+ p.cancel("Operasi dibatalkan.");
123
+ return;
124
+ }
125
+ if (typeof namaProyek !== "string") {
126
+ p.cancel("Operasi dibatalkan.");
127
+ return;
128
+ }
129
+ const spinner = p.spinner();
130
+ spinner.start("Memeriksa requirements...");
131
+ const requirementsOk = await cekRequirements(teknologi.requirements);
132
+ if (!requirementsOk) {
133
+ spinner.stop("Requirements tidak terpenuhi");
134
+ p.outro("Silakan install requirements yang hilang terlebih dahulu.");
135
+ return;
136
+ }
137
+ spinner.stop("Requirements terpenuhi");
138
+ let cwdProyek = namaProyek;
139
+ let labelLokasi = namaProyek;
140
+ if (teknologi.nama.toLowerCase() === "laravel") {
141
+ const lokasi = await pilihLokasiLaravel();
142
+ if (p.isCancel(lokasi)) {
143
+ p.cancel("Operasi dibatalkan.");
144
+ return;
145
+ }
146
+ const lokasiResolved = lokasi;
147
+ if (!existsSync(lokasiResolved)) {
148
+ p.note(`Folder ${lokasiResolved} tidak ada. Folder akan dibuat otomatis.`, "Info");
149
+ }
150
+ cwdProyek = path.join(lokasiResolved, namaProyek);
151
+ labelLokasi = cwdProyek;
152
+ }
153
+ const warnaTeknologi = warnaUntukTeknologi(teknologi.nama);
154
+ const langkah = [
155
+ `Buat proyek ${teksBerwarna(teknologi.nama, warnaTeknologi)}${versiLaravel ? ` ${versiLaravel}` : ""}`,
156
+ ...(teknologi.perintahInstall.length > 0 ? ["Install dependencies"] : []),
157
+ "Verifikasi instalasi",
158
+ ];
159
+ const rencana = [
160
+ `Proyek: ${bold}${namaProyek}${reset}`,
161
+ `Teknologi: ${teksBerwarna(teknologi.nama, warnaTeknologi)}`,
162
+ ...(versiLaravel ? [`Versi: ${versiLaravel}`] : []),
163
+ `Lokasi: ${labelLokasi}`,
164
+ ``,
165
+ `Langkah:`,
166
+ ...langkah.map((l, i) => ` ${i + 1}. ${l}`),
167
+ ].join("\n");
168
+ p.note(rencana, "Rencana Proyek");
169
+ const konfirmasi = await p.confirm({
170
+ message: "Lanjutkan?",
171
+ initialValue: true,
172
+ });
173
+ if (p.isCancel(konfirmasi) || !konfirmasi) {
174
+ p.cancel("Operasi dibatalkan.");
175
+ return;
176
+ }
177
+ const spinnerEksekusi = p.spinner();
178
+ const argsBuat = versiLaravel && versiLaravel !== "latest"
179
+ ? [...teknologi.perintahBuat.slice(1), namaProyek, versiLaravel]
180
+ : [...teknologi.perintahBuat.slice(1), namaProyek];
181
+ const perintahBuat = teknologi.perintahBuat[0];
182
+ if (!perintahBuat) {
183
+ p.outro("Perintah buat tidak ditemukan.");
184
+ return;
185
+ }
186
+ spinnerEksekusi.start(`Membuat proyek ${teknologi.nama}...`);
187
+ const hasilBuat = await execute(perintahBuat, argsBuat, teknologi.nama.toLowerCase() === "laravel"
188
+ ? { cwd: path.dirname(cwdProyek) }
189
+ : {});
190
+ if (!hasilBuat.success) {
191
+ spinnerEksekusi.stop("Gagal membuat proyek");
192
+ p.note(hasilBuat.stderr, "Error");
193
+ p.outro("Pembuatan proyek gagal.");
194
+ return;
195
+ }
196
+ spinnerEksekusi.stop("Proyek berhasil dibuat");
197
+ if (teknologi.perintahInstall.length > 0) {
198
+ const perintahInstall = teknologi.perintahInstall[0];
199
+ if (!perintahInstall) {
200
+ p.outro("Perintah install tidak ditemukan.");
201
+ return;
202
+ }
203
+ spinnerEksekusi.start("Menginstall dependencies...");
204
+ const hasilInstall = await execute(perintahInstall, teknologi.perintahInstall.slice(1), { cwd: cwdProyek });
205
+ if (!hasilInstall.success) {
206
+ spinnerEksekusi.stop("Gagal menginstall dependencies");
207
+ p.note(hasilInstall.stderr, "Error");
208
+ p.outro("Instalasi dependencies gagal.");
209
+ return;
210
+ }
211
+ spinnerEksekusi.stop("Dependencies berhasil diinstall");
212
+ }
213
+ const perintahVerifikasi = teknologi.perintahVerifikasi[0];
214
+ if (!perintahVerifikasi) {
215
+ p.outro("Perintah verifikasi tidak ditemukan.");
216
+ return;
217
+ }
218
+ spinnerEksekusi.start("Memverifikasi instalasi...");
219
+ const hasilVerifikasi = await execute(perintahVerifikasi, teknologi.perintahVerifikasi.slice(1), { cwd: cwdProyek });
220
+ if (!hasilVerifikasi.success) {
221
+ spinnerEksekusi.stop("Verifikasi gagal");
222
+ p.note(hasilVerifikasi.stderr, "Error");
223
+ p.outro("Verifikasi instalasi gagal.");
224
+ return;
225
+ }
226
+ spinnerEksekusi.stop("Verifikasi berhasil");
227
+ p.outro(`Proyek ${teksBerwarna(namaProyek, warnaTeknologi)} berhasil dibuat di ${labelLokasi}!`);
228
+ }
229
+ //# sourceMappingURL=buat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buat.js","sourceRoot":"","sources":["../../src/commands/buat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAyB,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5G,SAAS,kBAAkB,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,mDAAmD,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,0DAA0D,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QAC3B,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE;YAC3D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;YACxD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;YACxD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;YACxD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;YACtD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;SACvD;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,YAAY,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAErD,MAAM,OAAO,GAAG,YAAY;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,KAAK,EAAE,CAAC,CAAC,IAAI;QACb,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM;KACf,CAAC,CAAC,CAAC;IAEN,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,6BAA6B;KACpC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,wBAAwB;QACjC,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,8BAA8B;YACvC,WAAW,EAAE,mBAAmB;YAChC,QAAQ,EAAE,CAAC,KAAyB,EAAE,EAAE;gBACtC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;oBACnB,OAAO,0BAA0B,CAAC;gBACpC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,YAAsB;IACnD,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,EAAE,UAAU,IAAI,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,iCAAiC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE5B,MAAM,eAAe,GAAG,sBAAsB,EAAE,CAAC;IAEjD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QACtC,OAAO,EAAE,2BAA2B;QACpC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,EAAE,CAAC,CAAC,SAAS;SAClB,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CACd,CAAC;IAEvB,IAAI,YAAY,GAAkB,IAAI,CAAC;IAEvC,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAExC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,YAAY,GAAG,KAAe,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,kBAAkB;KAC7B,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAE3C,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAErE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,CAAC,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAEvC,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,IAAI,WAAW,GAAG,UAAU,CAAC;IAE7B,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAE1C,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,MAAgB,CAAC;QAExC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,UAAU,cAAc,0CAA0C,EAAE,MAAM,CAAC,CAAC;QACrF,CAAC;QAED,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAClD,WAAW,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG;QACd,eAAe,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACtG,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,sBAAsB;KACvB,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,WAAW,IAAI,GAAG,UAAU,GAAG,KAAK,EAAE;QACtC,cAAc,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;QAC5D,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,WAAW,WAAW,EAAE;QACxB,EAAE;QACF,UAAU;QACV,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;QACjC,OAAO,EAAE,YAAY;QACrB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAEpC,MAAM,QAAQ,GAAG,YAAY,IAAI,YAAY,KAAK,QAAQ;QACxD,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC;QAChE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,eAAe,CAAC,KAAK,CAAC,kBAAkB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,YAAY,EACZ,QAAQ,EACR,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;QACxC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAClC,CAAC,CAAC,EAAE,CACP,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAE/C,IAAI,SAAS,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,eAAe,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5G,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,CAAC,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,eAAe,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAErH,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7B,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAE5C,CAAC,CAAC,KAAK,CAAC,UAAU,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,uBAAuB,WAAW,GAAG,CAAC,CAAC;AACnG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function jalankanInstallTeknologi(): Promise<void>;
2
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAgMA,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B9D"}
@@ -0,0 +1,161 @@
1
+ import * as p from "@clack/prompts";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { dapatkanSemuaTeknologi } from "../core/registry.js";
4
+ import { execute } from "../core/executor.js";
5
+ import { jalankanBuatProyek } from "./buat.js";
6
+ import { reset, bold, dim, green, yellow, cyan, warnaUntukTeknologi, teksBerwarna } from "../core/warna.js";
7
+ function deteksiProjectDetail() {
8
+ const hasil = [];
9
+ if (existsSync("package.json")) {
10
+ try {
11
+ const pkg = JSON.parse(readFileSync("package.json", "utf-8"));
12
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
13
+ const depList = Object.keys(deps);
14
+ hasil.push({
15
+ jenis: "Node.js",
16
+ dependencies: depList,
17
+ });
18
+ if (existsSync("vite.config.ts") || existsSync("vite.config.js")) {
19
+ hasil.push({ jenis: "Vite" });
20
+ }
21
+ if (depList.includes("react")) {
22
+ hasil.push({ jenis: "React" });
23
+ }
24
+ if (depList.some((d) => d.includes("tailwindcss"))) {
25
+ hasil.push({ jenis: "Tailwind CSS" });
26
+ }
27
+ }
28
+ catch {
29
+ hasil.push({ jenis: "Node.js" });
30
+ }
31
+ }
32
+ if (existsSync("composer.json")) {
33
+ hasil.push({ jenis: "Laravel" });
34
+ }
35
+ if (hasil.length === 0) {
36
+ hasil.push({ jenis: "Tidak dikenali" });
37
+ }
38
+ return hasil;
39
+ }
40
+ function deteksiOS() {
41
+ const platform = process.platform;
42
+ if (platform === "win32")
43
+ return "windows";
44
+ if (platform === "darwin")
45
+ return "macos";
46
+ return "linux";
47
+ }
48
+ async function installDiProjectYangAda() {
49
+ const os = deteksiOS();
50
+ const projectDetail = deteksiProjectDetail();
51
+ const infoProject = projectDetail
52
+ .filter((p) => p.jenis !== "Tidak dikenali")
53
+ .map((p) => p.jenis);
54
+ if (infoProject.length === 0) {
55
+ p.note("Tidak ada project terdeteksi di directory ini. Pastikan kamu berada di folder project.", "Project Saat Ini");
56
+ p.outro("Install teknologi membutuhkan project yang sudah ada.");
57
+ return;
58
+ }
59
+ p.note([
60
+ `Project terdeteksi: ${infoProject.join(", ")}`,
61
+ ...(projectDetail[0]?.dependencies
62
+ ? [`Dependencies: ${projectDetail[0].dependencies.slice(0, 5).join(", ")}${projectDetail[0].dependencies.length > 5 ? "..." : ""}`]
63
+ : []),
64
+ ].join("\n"), "Project Saat Ini");
65
+ const daftarTeknologi = dapatkanSemuaTeknologi().filter((t) => t.perintahInstall.length > 0);
66
+ const teknologiDipilih = await p.select({
67
+ message: "Apa yang ingin kamu install?",
68
+ options: daftarTeknologi.map((t) => ({
69
+ value: t.nama,
70
+ label: teksBerwarna(t.nama, warnaUntukTeknologi(t.nama)),
71
+ hint: t.deskripsi,
72
+ })),
73
+ });
74
+ if (p.isCancel(teknologiDipilih)) {
75
+ p.cancel("Operasi dibatalkan.");
76
+ return;
77
+ }
78
+ if (typeof teknologiDipilih !== "string") {
79
+ p.cancel("Operasi dibatalkan.");
80
+ return;
81
+ }
82
+ const teknologi = daftarTeknologi.find((t) => t.nama === teknologiDipilih);
83
+ const warnaTeknologi = warnaUntukTeknologi(teknologi.nama);
84
+ const perintahLengkap = `${teknologi.perintahInstall.join(" ")}`;
85
+ p.note([
86
+ `Teknologi: ${teksBerwarna(teknologi.nama, warnaTeknologi)}`,
87
+ `Deskripsi: ${teknologi.deskripsi}`,
88
+ `OS: ${os}`,
89
+ ``,
90
+ `Perintah: ${perintahLengkap}`,
91
+ ].join("\n"), "Rencana Install");
92
+ const konfirmasi = await p.confirm({
93
+ message: "Lanjutkan?",
94
+ initialValue: true,
95
+ });
96
+ if (p.isCancel(konfirmasi) || !konfirmasi) {
97
+ p.cancel("Operasi dibatalkan.");
98
+ return;
99
+ }
100
+ const perintahInstall = teknologi.perintahInstall[0];
101
+ if (!perintahInstall) {
102
+ p.outro("Perintah install tidak ditemukan.");
103
+ return;
104
+ }
105
+ const perintahVerifikasi = teknologi.perintahVerifikasi[0];
106
+ if (!perintahVerifikasi) {
107
+ p.outro("Perintah verifikasi tidak ditemukan.");
108
+ return;
109
+ }
110
+ const spinner = p.spinner();
111
+ spinner.start(`Menginstall ${teknologi.nama}...`);
112
+ const hasilInstall = await execute(perintahInstall, teknologi.perintahInstall.slice(1), { shell: true });
113
+ if (!hasilInstall.success) {
114
+ spinner.stop("Gagal menginstall");
115
+ p.note(`Auto-install gagal. Berikut panduan manual untuk install ${teknologi.nama}:`, "Panduan Install");
116
+ if (teknologi.panduanManual) {
117
+ p.note(teknologi.panduanManual, "Langkah Manual");
118
+ }
119
+ p.outro("Silakan install manual terlebih dahulu.");
120
+ return;
121
+ }
122
+ spinner.stop(`${teknologi.nama} berhasil diinstall`);
123
+ spinner.start("Memverifikasi instalasi...");
124
+ const hasilVerifikasi = await execute(perintahVerifikasi, teknologi.perintahVerifikasi.slice(1));
125
+ if (!hasilVerifikasi.success) {
126
+ spinner.stop("Verifikasi gagal");
127
+ p.note(hasilVerifikasi.stderr, "Error");
128
+ p.outro("Verifikasi instalasi gagal.");
129
+ return;
130
+ }
131
+ spinner.stop("Verifikasi berhasil");
132
+ p.outro(`${teknologi.nama} berhasil diinstall!`);
133
+ }
134
+ export async function jalankanInstallTeknologi() {
135
+ p.intro("Install Teknologi");
136
+ const opsi = await p.select({
137
+ message: "Apa yang ingin kamu lakukan?",
138
+ options: [
139
+ {
140
+ value: "existing",
141
+ label: "Install di project yang sudah ada",
142
+ hint: "Install teknologi ke project yang sudah ada di folder ini",
143
+ },
144
+ {
145
+ value: "new",
146
+ label: "Buat project baru dulu",
147
+ hint: "Buat project baru, lalu install teknologi",
148
+ },
149
+ ],
150
+ });
151
+ if (p.isCancel(opsi)) {
152
+ p.cancel("Operasi dibatalkan.");
153
+ return;
154
+ }
155
+ if (opsi === "new") {
156
+ await jalankanBuatProyek();
157
+ return;
158
+ }
159
+ await installDiProjectYangAda();
160
+ }
161
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function jalankanReferensiPerintah(): Promise<void>;
2
+ //# sourceMappingURL=referensi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referensi.d.ts","sourceRoot":"","sources":["../../src/commands/referensi.ts"],"names":[],"mappings":"AAIA,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B/D"}
@@ -0,0 +1,26 @@
1
+ import * as p from "@clack/prompts";
2
+ import { dapatkanTeknologiUnik, cariPerintah } from "../core/knowledge.js";
3
+ import { reset, bold, dim, warnaUntukTeknologi, teksBerwarna } from "../core/warna.js";
4
+ export async function jalankanReferensiPerintah() {
5
+ p.intro("Referensi Perintah");
6
+ const daftarTeknologi = dapatkanTeknologiUnik();
7
+ const teknologiDipilih = await p.select({
8
+ message: "Pilih teknologi:",
9
+ options: daftarTeknologi.map((t) => ({
10
+ value: t,
11
+ label: teksBerwarna(t, warnaUntukTeknologi(t)),
12
+ })),
13
+ });
14
+ if (p.isCancel(teknologiDipilih)) {
15
+ p.cancel("Operasi dibatalkan.");
16
+ return;
17
+ }
18
+ const perintah = cariPerintah(teknologiDipilih);
19
+ const warnaTeknologi = warnaUntukTeknologi(teknologiDipilih);
20
+ const baris = perintah.map((p) => {
21
+ return `${teksBerwarna(p.kategori, warnaTeknologi)}:\n ${p.perintah}\n ${dim}${p.deskripsi}${reset}`;
22
+ });
23
+ p.note(baris.join("\n\n"), teksBerwarna(teknologiDipilih, warnaTeknologi));
24
+ p.outro("Referensi perintah selesai.");
25
+ }
26
+ //# sourceMappingURL=referensi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referensi.js","sourceRoot":"","sources":["../../src/commands/referensi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE9B,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAEhD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QACtC,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAC/C,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,gBAA0B,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,mBAAmB,CAAC,gBAA0B,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,QAAQ,OAAO,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;IACzG,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,gBAA0B,EAAE,cAAc,CAAC,CAAC,CAAC;IAErF,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface StatusAlat {
2
+ nama: string;
3
+ terinstall: boolean;
4
+ versi: string | null;
5
+ }
6
+ export declare function deteksiSemua(): Promise<StatusAlat[]>;
7
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAoED,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAE1D"}
@@ -0,0 +1,63 @@
1
+ import { execa } from "execa";
2
+ const daftarAlat = [
3
+ {
4
+ nama: "Node.js",
5
+ perintah: "node",
6
+ args: ["--version"],
7
+ parseVersi: (stdout) => stdout.trim().replace(/^v/, ""),
8
+ },
9
+ {
10
+ nama: "npm",
11
+ perintah: "npm",
12
+ args: ["--version"],
13
+ parseVersi: (stdout) => stdout.trim(),
14
+ },
15
+ {
16
+ nama: "Git",
17
+ perintah: "git",
18
+ args: ["--version"],
19
+ parseVersi: (stdout) => {
20
+ const match = stdout.match(/(\d+\.\d+\.\d+)/);
21
+ return match?.[1] ?? stdout.trim();
22
+ },
23
+ },
24
+ {
25
+ nama: "PHP",
26
+ perintah: "php",
27
+ args: ["--version"],
28
+ parseVersi: (stdout) => {
29
+ const match = stdout.match(/PHP (\d+\.\d+\.\d+)/);
30
+ return match?.[1] ?? stdout.trim();
31
+ },
32
+ },
33
+ {
34
+ nama: "Composer",
35
+ perintah: "composer",
36
+ args: ["--version"],
37
+ parseVersi: (stdout) => {
38
+ const match = stdout.match(/(\d+\.\d+\.\d+)/);
39
+ return match?.[1] ?? stdout.trim();
40
+ },
41
+ },
42
+ ];
43
+ async function deteksiAlat(alat) {
44
+ try {
45
+ const hasil = await execa(alat.perintah, alat.args, { timeout: 10000 });
46
+ return {
47
+ nama: alat.nama,
48
+ terinstall: true,
49
+ versi: alat.parseVersi(hasil.stdout),
50
+ };
51
+ }
52
+ catch {
53
+ return {
54
+ nama: alat.nama,
55
+ terinstall: false,
56
+ versi: null,
57
+ };
58
+ }
59
+ }
60
+ export async function deteksiSemua() {
61
+ return Promise.all(daftarAlat.map(deteksiAlat));
62
+ }
63
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAe9B,MAAM,UAAU,GAAmB;IACjC;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;KACxE;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;KACtD;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC9C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC9C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;KACF;CACF,CAAC;AAEF,KAAK,UAAU,WAAW,CAAC,IAAkB;IAC3C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;SACrC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface EnvironmentLokal {
2
+ nama: string;
3
+ path: string;
4
+ terdeteksi: boolean;
5
+ sumber: string;
6
+ }
7
+ export declare function deteksiEnvironmentLokal(): Promise<EnvironmentLokal[]>;
8
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkID,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8C3E"}