create-medan-app 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.
- package/dist/index.js +34 -0
- package/dist/templates.js +74 -0
- package/package.json +28 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { GITIGNORE, MAIN_MEDAN, packageJson, readme } from "./templates.js";
|
|
5
|
+
function isValidPackageName(name) {
|
|
6
|
+
return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(name);
|
|
7
|
+
}
|
|
8
|
+
function main() {
|
|
9
|
+
const rawName = process.argv[2];
|
|
10
|
+
if (!rawName) {
|
|
11
|
+
console.error("pake: npx create-medan-app <nama-project>");
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
if (!isValidPackageName(rawName)) {
|
|
15
|
+
console.error(`nama '${rawName}' gak valid buat nama package npm (huruf kecil, angka, '-', '_' aja)`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const targetDir = resolve(process.cwd(), rawName);
|
|
19
|
+
if (existsSync(targetDir) && readdirSync(targetDir).length > 0) {
|
|
20
|
+
console.error(`folder '${rawName}' udah ada dan gak kosong bang`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
mkdirSync(targetDir, { recursive: true });
|
|
24
|
+
writeFileSync(resolve(targetDir, "package.json"), packageJson(rawName));
|
|
25
|
+
writeFileSync(resolve(targetDir, "main.medan"), MAIN_MEDAN);
|
|
26
|
+
writeFileSync(resolve(targetDir, "README.md"), readme(rawName));
|
|
27
|
+
writeFileSync(resolve(targetDir, ".gitignore"), GITIGNORE);
|
|
28
|
+
console.log(`mantap kali! project '${rawName}' udah jadi.\n`);
|
|
29
|
+
console.log("langkah selanjutnya:\n");
|
|
30
|
+
console.log(` cd ${rawName}`);
|
|
31
|
+
console.log(" npm install");
|
|
32
|
+
console.log(" npm start");
|
|
33
|
+
}
|
|
34
|
+
main();
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export function packageJson(name) {
|
|
2
|
+
return `{
|
|
3
|
+
"name": "${name}",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"private": true,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start": "medan main.medan"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"medan-language": "^0.1.2"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
}
|
|
15
|
+
export const MAIN_MEDAN = `// selamat datang di Medan-lang!
|
|
16
|
+
// jalanin dengan: npm start
|
|
17
|
+
|
|
18
|
+
// variabel
|
|
19
|
+
modal nama = "Medan"
|
|
20
|
+
bilang "Horas, " + nama + "!"
|
|
21
|
+
|
|
22
|
+
// percabangan
|
|
23
|
+
modal umur = 21
|
|
24
|
+
kalo umur > 17
|
|
25
|
+
bilang "Udah gede kali umur lu"
|
|
26
|
+
kalo gak
|
|
27
|
+
bilang "Masih bocil"
|
|
28
|
+
siap
|
|
29
|
+
|
|
30
|
+
// fungsi
|
|
31
|
+
bikin tambah(a, b)
|
|
32
|
+
balikin a + b
|
|
33
|
+
siap
|
|
34
|
+
|
|
35
|
+
bilang "5 + 7 = " + tambah(5, 7)
|
|
36
|
+
|
|
37
|
+
// while (gas)
|
|
38
|
+
modal i = 0
|
|
39
|
+
gas i < 3
|
|
40
|
+
bilang "gas ke " + i
|
|
41
|
+
i = i + 1
|
|
42
|
+
siap
|
|
43
|
+
|
|
44
|
+
// ulang N kali
|
|
45
|
+
ulang 3 kali
|
|
46
|
+
bilang "mantap kali!"
|
|
47
|
+
siap
|
|
48
|
+
|
|
49
|
+
// array/list
|
|
50
|
+
modal buah = ["mangga", "jeruk", "apel"]
|
|
51
|
+
tambahin(buah, "duren")
|
|
52
|
+
bilang buah
|
|
53
|
+
bilang "panjang buah: " + panjang(buah)
|
|
54
|
+
`;
|
|
55
|
+
export function readme(name) {
|
|
56
|
+
return `# ${name}
|
|
57
|
+
|
|
58
|
+
Project Medan-lang, di-scaffold pakai \`create-medan-app\`.
|
|
59
|
+
|
|
60
|
+
## Jalanin
|
|
61
|
+
|
|
62
|
+
\`\`\`bash
|
|
63
|
+
npm install
|
|
64
|
+
npm start
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
## Belajar lebih lanjut
|
|
68
|
+
|
|
69
|
+
Referensi lengkap bahasa Medan-lang (semua keyword, tipe data, contoh) ada
|
|
70
|
+
di: https://www.npmjs.com/package/medan-language
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
export const GITIGNORE = `node_modules/
|
|
74
|
+
`;
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-medan-app",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Scaffold project Medan-lang baru, kayak 'npx create-next-app'.",
|
|
5
|
+
"author": "Wilbert Law",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"bin": {
|
|
10
|
+
"create-medan-app": "dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=18"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"dev": "tsx src/index.ts",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^26.2.0",
|
|
25
|
+
"tsx": "^4.19.2",
|
|
26
|
+
"typescript": "^5.7.3"
|
|
27
|
+
}
|
|
28
|
+
}
|