UNPKG

@bizhermit/nextron

Version:

nextjs + electron application

1 lines 9.17 kB
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&__createBinding(t,e,n);return __setModuleDefault(t,e),t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.logger=void 0;const path_1=__importDefault(require("path")),url_1=__importDefault(require("url")),electron_1=require("electron"),electron_is_dev_1=__importDefault(require("electron-is-dev")),electron_next_1=__importDefault(require("electron-next")),fs_1=require("fs"),promises_1=require("fs/promises"),datetime_utils_1=__importDefault(require("@bizhermit/basic-utils/dist/datetime-utils")),string_utils_1=__importDefault(require("@bizhermit/basic-utils/dist/string-utils")),logger=(e,...t)=>{if("debug"===e&&!electron_is_dev_1.default)return;const n=`${datetime_utils_1.default.format(new Date,"yyyy-MM-ddThh:mm:ss.SSS")} [${(e.toUpperCase()+" ").slice(0,5)}] ${string_utils_1.default.join(" ",...t)}\n`;return process.stdout.write(n),n};exports.logger=logger;const execute=e=>{const t=e?.logger??exports.logger;t("info","::: @bizhermit/nextron :::"+(electron_is_dev_1.default?" [dev]":"")),t("debug",`props:\n${JSON.stringify(e,null,2)}`),electron_1.app.on("ready",(async()=>{const n=e?.dev?.port??8e3,i=e?.rootDirname??path_1.default.join(__dirname,"../../../../");await(0,electron_next_1.default)(path_1.default.join(i,"src"),n);const o=e?.width??1280,r=e?.height??720,s=electron_1.screen.getPrimaryDisplay().workAreaSize;let a,l;if("string"==typeof e?.position)switch(e?.position){case"left-top":a=0,l=0;break;case"right-bottom":a=s.width-o,l=s.height-r}else a=e?.position?.x,l=e?.position?.y;const u=new electron_1.BrowserWindow({width:o,height:r,minWidth:e?.minWidth??0,minHeight:e?.minHeight??0,maxWidth:e?.maxWidth,maxHeight:e?.maxHeight,resizable:e?.resizable??!0,useContentSize:e?.useContentSize??!1,fullscreen:e?.fullscreen??!1,fullscreenable:e?.fullscreenable??!0,maximizable:e?.maximizable??!0,minimizable:e?.minimizable??!0,closable:e?.closable??!0,x:a,y:l,movable:e?.movable??!0,opacity:e?.opacity??1,focusable:e?.focusable??!0,alwaysOnTop:e?.alwaysOnTop??!1,skipTaskbar:e?.skipTaskbar??!1,title:e?.title,frame:e?.frame??!0,hasShadow:e?.hasShadow??!0,icon:path_1.default.join(i,"src/public/favicon.ico"),webPreferences:{nodeIntegration:!1,contextIsolation:!0,preload:path_1.default.join(__dirname,"preload.js")}});e?.interceptors?.createdMainWindow?.(electron_1.app,u);let c="";electron_is_dev_1.default?(c=`http://localhost:${n}/`,!1===e?.dev?.menubar&&u.setMenu(null),!1!==e?.dev?.openDevTools&&u.webContents.openDevTools(),t("info","app listen start",c)):(e?.openDevTools&&u.webContents.openDevTools(),!0!==e?.menubar&&u.setMenu(null),c=url_1.default.format({pathname:path_1.default.join(i,"src/out/index.html"),protocol:"file:",slashes:!0}),t("info","app boot"));const d=global;d._session={};const _=electron_is_dev_1.default?i:path_1.default.dirname(process.argv[0]),p=path_1.default.join(_,"resources");(0,fs_1.existsSync)(p)||await(0,promises_1.mkdir)(p,{recursive:!0});const f=path_1.default.join(p,"config.json");let h={appDirname:_,isDev:electron_is_dev_1.default};const m=async()=>{const e={...h};return delete e.appDirname,delete e.isDev,await(0,promises_1.writeFile)(f,JSON.stringify(e,null,2),{encoding:"utf-8"})};(0,fs_1.existsSync)(f)||(h={...e?.defaultConfig??{},appDirname:_,isDev:electron_is_dev_1.default},await m()),h=await(async()=>{const e=JSON.parse(await(0,promises_1.readFile)(f,{encoding:"utf-8"}));return e.appDirname=_,e.isDev=electron_is_dev_1.default,e})(),d._session.layoutColor=h.layout?.color??e?.layoutColor??(electron_1.nativeTheme.shouldUseDarkColors?"dark":"light"),d._session.layoutDesign=h.layout?.design??e?.layoutDesign??"material";let g="";g=electron_is_dev_1.default?e?.dev?.i18nFilename??path_1.default.join(_,"src/i18n"):e?.i18nFilename??path_1.default.join(_,"resources/i18n");try{d._language=(await Promise.resolve().then((()=>__importStar(require(g)))))?.default??{},t("debug","load i18n",g)}catch{d._language={},t("warn","cannot find i18n module",g)}d.nextron={};const y=(e,t,n)=>{"handle"===t&&(d.nextron[e]=(...e)=>n({},...e),electron_1.ipcMain.handle(e,n)),"on"===t&&(d.nextron[e]=(...e)=>{const t={};return n(t,...e),t.returnValue},electron_1.ipcMain.on(e,n))};electron_is_dev_1.default?y("fetch","handle",((t,n,i,o)=>{e?.interceptors?.fetchApi?.(n,i,o);const r=(c+"api/"+n).replace(/\/\//g,"/"),s={...o};return"GET"!==o?.method&&(string_utils_1.default.isEmpty(s.method)&&(s.method="POST"),s.headers={"Content-Type":"application/json",...s.headers},null==s.body&&(s.body=JSON.stringify(i??{}))),new Promise(((e,t)=>{fetch(r,s).then((n=>{n.ok?n.json().then((t=>{e(t)})).catch((e=>{t(e)})):t("fetch failed")})).catch((e=>{t(e)}))}))})):y("fetch","handle",((t,n,o,r)=>(e?.interceptors?.fetchApi?.(n,o,r),new Promise(((e,t)=>{try{let s={};const a={statusCode:0,status:e=>(a.statusCode=e??0,a),json:e=>(s=e,a)},l=()=>{0===a.statusCode?setTimeout((()=>{l()}),5):e(JSON.parse(JSON.stringify(s)))};d._session.regenerate=e=>{Object.keys(d._session).forEach((e=>{"regenerate"!==e&&delete d._session[e]})),e?.()};const u={body:o,session:d._session,query:{},cookies:{},method:r?.method};let c=n,_=n.indexOf("?");if(_>=0){c=n.substring(0,_);n.substring(_+1).split("&").forEach((e=>{_=e.indexOf("=");const t=e.substring(0,_),n=_>=0?e.substring(_+1):"";if(t in u.query){const e=u.query[t];"string"==typeof e?u.query[t]=[e,n]:e.push(n)}else u.query[t]=n}))}Promise.resolve().then((()=>__importStar(require(path_1.default.join(i,"main/src/pages/api",c))))).then((e=>{try{e.default(u,a),l()}catch(e){t(e)}})).catch((e=>{t(e)}))}catch(e){t(e)}}))))),y("setSize","on",((e,t)=>{try{const n=u.getSize();u.setSize(t.width??n[0],t.height??n[1],t.animate),e.returnValue=!0}catch{e.returnValue=!1}}));const b=()=>{const e=u.getSize();return{width:e[0],height:e[1]}};y("getSize","on",(e=>{e.returnValue=b()})),y("setAlwaysOnTop","on",((e,t)=>{u.setAlwaysOnTop(e.returnValue=t??!1)})),y("isAlwaysOnTop","on",(e=>{e.returnValue=u.isAlwaysOnTop()})),y("minimize","on",(e=>{u.minimize(),e.returnValue=b()})),y("unminimize","on",(e=>{u.restore(),e.returnValue=b()})),y("isMinimize","on",(e=>{e.returnValue=u.isMinimized()})),y("maximize","on",(e=>{u.maximize(),e.returnValue=b()})),y("unmaximize","on",(e=>{u.unmaximize(),e.returnValue=b()})),y("isMaximize","on",(e=>{e.returnValue=u.isMaximized()})),y("setFullScreen","on",((e,t)=>{u.setFullScreen(e.returnValue=t??!1)})),y("isFullScreen","on",(e=>{e.returnValue=u.isFullScreen()})),y("setOpacity","on",((e,t)=>{u.setOpacity(e.returnValue=t??1)})),y("getOpacity","on",(e=>{e.returnValue=u.getOpacity()}));y("setPosition","on",((e,t)=>{switch(t.position){case"center":u.center();break;case"left-top":u.setPosition(0,0,t.animate);break;case"right-bottom":const e=b(),n=electron_1.screen.getPrimaryDisplay().workAreaSize;u.setPosition(n.width-e.width,n.height-e.height,t.animate);break;default:const i=u.getPosition();u.setPosition(t.position.x??i[0],t.position.y??i[1],t.animate)}e.returnValue=(()=>{const e=u.getPosition();return{x:e[0],y:e[1]}})()})),y("close","on",(e=>{u.close(),e.returnValue=null})),y("destory","on",(e=>{u.destroy(),e.returnValue=null})),y("focus","on",(e=>{u.focus(),e.returnValue=null})),y("blur","on",(e=>{u.blur(),e.returnValue=null})),y("hasFocus","on",(e=>{e.returnValue=u.isFocused()})),y("notification","on",((e,t,n)=>new Notification(t,n))),y("setLayoutColor","handle",(async(e,t)=>(null==h.layout&&(h.layout={}),d._session.layoutColor=h.layout.color=electron_1.nativeTheme.themeSource=t||(electron_1.nativeTheme.shouldUseDarkColors?"dark":"light"),await m(),h.layout.color))),y("getLayoutColor","on",(e=>{e.returnValue=d._session.layoutColor})),y("setLayoutDesign","handle",(async(e,t)=>(null==h.layout&&(h.layout={}),d._session.layoutDesign=h.layout.design=t||"",await m(),h.layout.design))),y("getLayoutDesign","on",(e=>{e.returnValue=d._session.layoutDesign})),y("saveConfig","handle",(async(e,t)=>{h={...h,...t},await m()})),y("getConfig","on",((e,t)=>{null==t||0===t.length?e.returnValue=h:e.returnValue=h[t]})),y("getSession","on",((e,t)=>{e.returnValue=null==t?d._session:d._session[t]})),y("setSession","on",((e,t,n)=>{null!=t&&(d._session[t]=n),e.returnValue=n})),y("clearSession","on",((e,t)=>{null!=t&&delete d._session[t],e.returnValue=null})),y("getLanguage","on",((e,t)=>{e.returnValue=d._language[t??"ja"]??d._language})),u.loadURL(c),e?.interceptors?.loadedMainWindow?.(electron_1.app,u)})),electron_1.app.on("window-all-closed",(()=>{e?.interceptors?.quitApp?.(electron_1.app),electron_1.app.quit(),t("info","app quit")}))};exports.default=execute;