Demo

Plugin app data

Plugin များ persistent runtime files သိမ်းရန်နှင့် bundled backend assets ဖတ်ရန် အသုံးပြုပါသည်။ @quan-erp/shared-backend-core မှ AppFolder ကို အသုံးပြုရပါသည် — APP_DATA_FOLDER path ကို hardcode မလုပ်ရပါ။

ခြုံငုံသုံးသပ်ချက်

Data နှင့် assets ကို platform folder များတွင် ထားမှ Docker / staging / production တို့တွင် path များ တည်ငြိမ်ပါသည်။ AppFolder က process.env path များကို resolve ပေးပါသည်။

  • Runtime files → plugin data folder (APP_DATA_FOLDER အောက်)
  • Bundled static → backend/assets (install ပြီးနောက် read-only)
  • Temp / partial upload → app temp (ရှင်းလင်းနိုင်ပါသည်)
  • APP_DATA_FOLDER root သို့ တိုက်ရိုက် မရေးရပါ — plugin subdirectory သုံးရပါသည်

1. Application & plugin folders

Folder လေးခု အရေးကြီးပါသည်။ Global သည် env မှ၊ plugin folder များသည် plugin name (နှင့် assets အတွက် version) မှ ဆင်းသက်ပါသည်။

FolderPathUtilityအသုံး
App data (global)process.env.APP_DATA_FOLDERAppFolder.getAppDataFolder()Persistent app data root — တိုက်ရိုက် မရေးရပါ
App tempprocess.env.UPLOAD_FILE_TEMP_FOLDERAppFolder.getAppTempDataFolder()Temp / scratch — durable data မထားရပါ
Plugin data<APP_DATA_FOLDER>/<pluginName>AppFolder.getPluginDataFolder(pluginName)Runtime data: export, report, disk cache
Plugin assets<INSTALLED_PLUGINS_FOLDER>/<pluginName>/<version>/backend/assetsAppFolder.getPluginAssetFolder(pluginName, version)Plugin package နှင့်ပါသော read-only assets

2. Data folder vs asset folder

App run နေစဉ် ဖန်တီး/ပြင်သော ဖိုင်များအတွက် data folder ကို အသုံးပြုရပါသည်။ Source နှင့်အတူ ship လုပ်ပြီး runtime တွင် မပြင်သော ဖိုင်များအတွက် asset folder ကို အသုံးပြုရပါသည်။

  • Data ဥပမာ — CSV, PDF report, local SQLite, runtime config
  • Asset ဥပမာ — document template, seed JSON, default icon
Asset folderData folder
PurposeCode နှင့် bundle လုပ်သော static filesRuntime တွင် ဖန်တီးသော dynamic files
PersistenceReinstall / update တွင် အစားထိုးနိုင်ပါသည်Plugin update ကျော်လွန် တည်ရှိပါသည်
UtilitygetPluginAssetFolder(name, version)getPluginDataFolder(name)
Source in repoplugins/<name>/backend/assets/Runtime တွင် disk ပေါ် ဖန်တီးပါသည်

3. AppFolder API

@quan-erp/shared-backend-core မှ AppFolder ကို import လုပ်ရပါသည်။ metadata.name နှင့် metadata.pluginVersion ကို အသုံးပြုရပါသည်။

Methodဖော်ပြချက်
getAppDataFolder()APP_DATA_FOLDER root
getAppTempDataFolder()Temp upload / scratch
getPluginDataFolder(pluginName)Plugin တစ်ခု၏ persistent data
getPluginAssetFolder(pluginName, version)Installed backend/assets (versioned)
TSXresolve paths
1import { AppFolder } from "@quan-erp/shared-backend-core"; 2import metadata from "../../module.metadata.json" with { type: "json" }; 3import fs from "node:fs/promises"; 4import path from "node:path"; 5 6const dataDir = AppFolder.getPluginDataFolder(metadata.name); 7const assetDir = AppFolder.getPluginAssetFolder( 8 metadata.name, 9 metadata.pluginVersion, 10); 11 12// Persistent runtime file 13await fs.mkdir(dataDir, { recursive: true }); 14await fs.writeFile(path.join(dataDir, "export.csv"), csv, "utf8"); 15 16// Bundled template (read-only) 17const template = await fs.readFile( 18 path.join(assetDir, "invoice-template.html"), 19 "utf8", 20);

4. Backend assets bundling

Static backend files ကို plugins/<name>/backend/assets/ တွင် ထားရှိရပါသည်။ Build / pack က bundle ထဲသို့ ကူးပြီး၊ install ပြီးနောက် getPluginAssetFolder ဖြင့် resolve လုပ်နိုင်ပါသည်။

  • backend/assets/ အောက်ရှိ အရာအားလုံး pack ပါဝင်ပါသည်
  • Install ပြီး getPluginAssetFolder(name, pluginVersion) သုံးရပါသည်
  • Asset folder သို့ runtime write မလုပ်ရပါ — getPluginDataFolder သုံးရပါသည်
SHsource layout
1plugins/<plugin-name>/ 2└── backend/ 3 ├── assets/ 4 │ ├── invoice-template.html 5 │ └── seed/ 6 │ └── defaults.json 7 └── src/

စည်းမျဉ်းများ

  • Isolation — getPluginDataFolder(yourPluginName) အောက်တွင်သာ ရေးရပါသည်
  • Persistence — getAppTempDataFolder တွင် durable data မထားရပါ
  • Portability — AppFolder သုံးရပါသည်; path hardcode မလုပ်ရပါ
  • Versioned assets — getPluginAssetFolder သို့ pluginVersion ပေးရပါသည်