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.
- package/README.md +90 -0
- package/dist/commands/buat.d.ts +2 -0
- package/dist/commands/buat.d.ts.map +1 -0
- package/dist/commands/buat.js +229 -0
- package/dist/commands/buat.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +161 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/referensi.d.ts +2 -0
- package/dist/commands/referensi.d.ts.map +1 -0
- package/dist/commands/referensi.js +26 -0
- package/dist/commands/referensi.js.map +1 -0
- package/dist/core/detector.d.ts +7 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +63 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/environment.d.ts +8 -0
- package/dist/core/environment.d.ts.map +1 -0
- package/dist/core/environment.js +161 -0
- package/dist/core/environment.js.map +1 -0
- package/dist/core/executor.d.ts +12 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +37 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/knowledge.d.ts +10 -0
- package/dist/core/knowledge.d.ts.map +1 -0
- package/dist/core/knowledge.js +114 -0
- package/dist/core/knowledge.js.map +1 -0
- package/dist/core/registry.d.ts +4 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +37 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/warna.d.ts +14 -0
- package/dist/core/warna.d.ts.map +1 -0
- package/dist/core/warna.js +35 -0
- package/dist/core/warna.js.map +1 -0
- package/dist/core/welcome.d.ts +2 -0
- package/dist/core/welcome.d.ts.map +1 -0
- package/dist/core/welcome.js +42 -0
- package/dist/core/welcome.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/technologies/bootstrap.d.ts +3 -0
- package/dist/technologies/bootstrap.d.ts.map +1 -0
- package/dist/technologies/bootstrap.js +9 -0
- package/dist/technologies/bootstrap.js.map +1 -0
- package/dist/technologies/bun.d.ts +3 -0
- package/dist/technologies/bun.d.ts.map +1 -0
- package/dist/technologies/bun.js +9 -0
- package/dist/technologies/bun.js.map +1 -0
- package/dist/technologies/composer.d.ts +3 -0
- package/dist/technologies/composer.d.ts.map +1 -0
- package/dist/technologies/composer.js +22 -0
- package/dist/technologies/composer.js.map +1 -0
- package/dist/technologies/cypress.d.ts +3 -0
- package/dist/technologies/cypress.d.ts.map +1 -0
- package/dist/technologies/cypress.js +9 -0
- package/dist/technologies/cypress.js.map +1 -0
- package/dist/technologies/docker.d.ts +3 -0
- package/dist/technologies/docker.d.ts.map +1 -0
- package/dist/technologies/docker.js +24 -0
- package/dist/technologies/docker.js.map +1 -0
- package/dist/technologies/express.d.ts +3 -0
- package/dist/technologies/express.d.ts.map +1 -0
- package/dist/technologies/express.js +9 -0
- package/dist/technologies/express.js.map +1 -0
- package/dist/technologies/firebase.d.ts +3 -0
- package/dist/technologies/firebase.d.ts.map +1 -0
- package/dist/technologies/firebase.js +9 -0
- package/dist/technologies/firebase.js.map +1 -0
- package/dist/technologies/flutter.d.ts +3 -0
- package/dist/technologies/flutter.d.ts.map +1 -0
- package/dist/technologies/flutter.js +9 -0
- package/dist/technologies/flutter.js.map +1 -0
- package/dist/technologies/go.d.ts +3 -0
- package/dist/technologies/go.d.ts.map +1 -0
- package/dist/technologies/go.js +24 -0
- package/dist/technologies/go.js.map +1 -0
- package/dist/technologies/jest.d.ts +3 -0
- package/dist/technologies/jest.d.ts.map +1 -0
- package/dist/technologies/jest.js +9 -0
- package/dist/technologies/jest.js.map +1 -0
- package/dist/technologies/laravel.d.ts +3 -0
- package/dist/technologies/laravel.d.ts.map +1 -0
- package/dist/technologies/laravel.js +9 -0
- package/dist/technologies/laravel.js.map +1 -0
- package/dist/technologies/nestjs.d.ts +3 -0
- package/dist/technologies/nestjs.d.ts.map +1 -0
- package/dist/technologies/nestjs.js +9 -0
- package/dist/technologies/nestjs.js.map +1 -0
- package/dist/technologies/netlify.d.ts +3 -0
- package/dist/technologies/netlify.d.ts.map +1 -0
- package/dist/technologies/netlify.js +9 -0
- package/dist/technologies/netlify.js.map +1 -0
- package/dist/technologies/nextjs.d.ts +3 -0
- package/dist/technologies/nextjs.d.ts.map +1 -0
- package/dist/technologies/nextjs.js +9 -0
- package/dist/technologies/nextjs.js.map +1 -0
- package/dist/technologies/node.d.ts +3 -0
- package/dist/technologies/node.d.ts.map +1 -0
- package/dist/technologies/node.js +9 -0
- package/dist/technologies/node.js.map +1 -0
- package/dist/technologies/php.d.ts +3 -0
- package/dist/technologies/php.d.ts.map +1 -0
- package/dist/technologies/php.js +24 -0
- package/dist/technologies/php.js.map +1 -0
- package/dist/technologies/pnpm.d.ts +3 -0
- package/dist/technologies/pnpm.d.ts.map +1 -0
- package/dist/technologies/pnpm.js +9 -0
- package/dist/technologies/pnpm.js.map +1 -0
- package/dist/technologies/python.d.ts +3 -0
- package/dist/technologies/python.d.ts.map +1 -0
- package/dist/technologies/python.js +24 -0
- package/dist/technologies/python.js.map +1 -0
- package/dist/technologies/react.d.ts +3 -0
- package/dist/technologies/react.d.ts.map +1 -0
- package/dist/technologies/react.js +9 -0
- package/dist/technologies/react.js.map +1 -0
- package/dist/technologies/sass.d.ts +3 -0
- package/dist/technologies/sass.d.ts.map +1 -0
- package/dist/technologies/sass.js +9 -0
- package/dist/technologies/sass.js.map +1 -0
- package/dist/technologies/supabase.d.ts +3 -0
- package/dist/technologies/supabase.d.ts.map +1 -0
- package/dist/technologies/supabase.js +9 -0
- package/dist/technologies/supabase.js.map +1 -0
- package/dist/technologies/tailwind.d.ts +3 -0
- package/dist/technologies/tailwind.d.ts.map +1 -0
- package/dist/technologies/tailwind.js +9 -0
- package/dist/technologies/tailwind.js.map +1 -0
- package/dist/technologies/vercel.d.ts +3 -0
- package/dist/technologies/vercel.d.ts.map +1 -0
- package/dist/technologies/vercel.js +9 -0
- package/dist/technologies/vercel.js.map +1 -0
- package/dist/technologies/vite.d.ts +3 -0
- package/dist/technologies/vite.d.ts.map +1 -0
- package/dist/technologies/vite.js +9 -0
- package/dist/technologies/vite.js.map +1 -0
- package/dist/technologies/yarn.d.ts +3 -0
- package/dist/technologies/yarn.d.ts.map +1 -0
- package/dist/technologies/yarn.js +9 -0
- package/dist/technologies/yarn.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|