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 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
+ }