npm package: @fewangsit/wangsvue-monorepo
Description: Wangsit Front End Developer Monorepo
Author: Wangsit FE Developer
Latest version: 1.0.1

# **Standar Pengelolaan Kode di @fewangsit/wangsvue-monorepo**

## **1. Struktur Kode di `wangsvue`**

- Semua _types_ atau _Data Transfer Object (DTO)_ **tidak boleh dibuat** di repo ini.
- Sebagai gantinya, **semua deklarasi tipe dan DTO harus didefinisikan langsung di dalam repo API Services** masing masing project.
- Yang sudah terlanjut di buat disini akan di pindahkan secara bertahap.
- Component commons di folder library adalah komponen yang tidak memerlukan spesifik type/interface dari project apapun. Komponen commons tidak boleh mengimport types/interface dari repo API Services.
- Component commons yang tidak diperlukan oleh semua project atau hanya beberapa project tertentu tidak boleh di import di `library/component/index.ts`, cukup di import di `packages/[nama package]/component/index.ts`, agar tidak menambah bundle size ke package lain yang tidak membutuhkannya.
- Preset hanya dibuat untuk component commons. Selain itu bisa dengan inline tailwind class.

## **2. Testing**

- Testing akan mulai diberlakukan untuk komponen. Dimulai dari component commons.
- Jika testing sudah berjalan, maka test harus dijalankan sebelum release.

## **3. Pengelolaan Branch**

- Setiap pengembangan fitur baru atau perbaikan bug **wajib dilakukan di branch terpisah**. Kecuali jika hanya bug kecil dan yakin akan bisa diselesaikan dalam sekejap.
- **Branch `dev` dan `main` hanya digunakan untuk keperluan rilis**.

  - **Branch `dev`:** Untuk persiapan rilis atau pengujian gabungan (_staging_).
  - **Branch `main`:** Untuk rilis versi final.
  - Tidak ada staging. Versi prerelease alpha bisa di gunakan di `develop` maupun `stage` environtment. Maka Dari itu, untuk api services di buat terpisah agar pengelolaan branch lebih sederhana.

  ### **Konvensi Penamaan Branch**

  3.1. **Pengembangan Fitur Baru**

  - Gunakan format: `feat/{workspace-name}/{component-name}`
  - Contoh:

    - `feat/acts/new-component`
    - `feat/sales/dashboard-widget`

      3.2. **Perbaikan Bug (Hotfix)**

  - Gunakan format: `hotfix/{workspace-name}/{component-name}`
  - Contoh:
    - `hotfix/fats/fix-error-on-export`
    - `hotfix/wangs/login-issue`

  Gunakan nama _workspace_ berikut untuk penamaan branch:

  - **acts** : `packages/admin-tagsamurai`
  - **fats** : `packages/fixedasset-tagsamurai`
  - **sales** : `packages/sales`
  - **wangs** : `packages/wangsit-workspace`

  ***

## **4. Menjalankan Development Server**

- Gunakan terminal yang mendukung bash script. Misal git bash.
- Menjalankan pnpm dev akan menjalankan vite dev server dengan default preset "wangsvue".
- Untuk mengganti preset, gunakan option `--preset <nama preset>`, misal `pnpm dev --preset fixedasset`

## **5. Cara Melakukan Release**

- Gunakan terminal yang mendukung bash script. Misal git bash.
- Release stable version hanya dilakukan di branch main.
- Release alpha version bisa dilakukan di branch dev, hotfix/\*_, atau feat/\*_.

- Untuk release stable, checkout branch `main`, lalu gunakan perintah `git merge dev` untuk menarik semua perubahan di branch dev ke main. Pastikan sebelum melakukan ini, branch dev sudah benar benar tested dan stabil.
- Jika hanya ingin mengambil beberapa perubahan, gunakan `git cherry-pick <commit hash>`
- Jalan kan, `pnpm release <nama-workspace>`, beda dari sebelumnya, sesuaikan dengan field name di package.json. Misal `pnpm release wangsvue-acts`.

- Untuk release alpha di branch dev, gunakan `pnpm release:alpha <nama-workspace>`
- Kedua perintah ini akan menaikkan patch version.
- Setelah melakukan release di branch main. Merge ke branch dev, dengan jalankan `git merge main` dari branch dev.
- Setelah relase, segera push ke remote.

## **6. Tambahan**

Selain release, kita bisa menggunakan command `pnpm serve:http <nama-workspace>` untuk sigle-spa local override.
Command ini akan menjalankan release build lalu serving dist folder di localhost.

---