@akanjs/cli 0.9.20 → 0.9.22
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/cjs/index.js +274 -295
- package/esm/index.js +274 -295
- package/esm/src/templates/__scalar/__model__/__model__.constant.js +1 -0
- package/esm/src/templates/__scalar/__model__/__model__.dictionary.js +1 -0
- package/esm/src/templates/__scalar/__model__/__model__.document.js +1 -0
- package/esm/src/templates/app/akan.config.js +1 -0
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/page.js +1 -0
- package/esm/src/templates/app/app/[lang]/(__appName__)/(public)/unknown/page.js +1 -0
- package/esm/src/templates/app/app/[lang]/(__appName__)/layout.js +1 -0
- package/esm/src/templates/app/app/[lang]/admin/layout.js +1 -0
- package/esm/src/templates/app/app/[lang]/admin/page.js +1 -0
- package/esm/src/templates/app/app/csr.js +1 -0
- package/esm/src/templates/app/app/layout.js +1 -0
- package/esm/src/templates/app/app/robots.js +1 -0
- package/esm/src/templates/app/app/sitemap.js +1 -0
- package/esm/src/templates/app/base/baseLogic.js +1 -0
- package/esm/src/templates/app/base/index.js +1 -0
- package/esm/src/templates/app/common/commonLogic.js +1 -0
- package/esm/src/templates/app/common/index.js +1 -0
- package/esm/src/templates/app/env/env.client.debug.ts.template +0 -0
- package/esm/src/templates/app/env/env.client.develop.ts.template +0 -0
- package/esm/src/templates/app/env/env.client.js +1 -0
- package/esm/src/templates/app/env/env.client.local.ts.template +0 -0
- package/esm/src/templates/app/env/env.client.main.ts.template +0 -0
- package/esm/src/templates/app/env/env.client.testing.ts.template +0 -0
- package/esm/src/templates/app/env/env.client.type.js +1 -0
- package/esm/src/templates/app/env/env.server.debug.ts.template +0 -0
- package/esm/src/templates/app/env/env.server.develop.ts.template +0 -0
- package/esm/src/templates/app/env/env.server.js +1 -0
- package/esm/src/templates/app/env/env.server.local.ts.template +0 -0
- package/esm/src/templates/app/env/env.server.main.ts.template +0 -0
- package/esm/src/templates/app/env/env.server.testing.ts.template +0 -0
- package/esm/src/templates/app/jest.config.js +1 -0
- package/esm/src/templates/app/lib/___appName__/__appName__.dictionary.js +1 -0
- package/esm/src/templates/app/lib/___appName__/__appName__.service.js +1 -0
- package/esm/src/templates/app/lib/___appName__/__appName__.store.js +1 -0
- package/esm/src/templates/app/lib/___appName__/_server.js +1 -0
- package/esm/src/templates/app/lib/option.js +1 -0
- package/esm/src/templates/app/lib/setting/Setting.Template.js +1 -0
- package/esm/src/templates/app/lib/setting/Setting.Unit.js +1 -0
- package/esm/src/templates/app/lib/setting/Setting.Util.js +1 -0
- package/esm/src/templates/app/lib/setting/Setting.View.js +1 -0
- package/esm/src/templates/app/lib/setting/Setting.Zone.js +1 -0
- package/esm/src/templates/app/lib/setting/_server.js +1 -0
- package/esm/src/templates/app/lib/setting/index.js +1 -0
- package/esm/src/templates/app/lib/setting/setting.constant.js +1 -0
- package/esm/src/templates/app/lib/setting/setting.dictionary.js +1 -0
- package/esm/src/templates/app/lib/setting/setting.document.js +1 -0
- package/esm/src/templates/app/lib/setting/setting.service.js +1 -0
- package/esm/src/templates/app/lib/setting/setting.signal.js +1 -0
- package/esm/src/templates/app/lib/setting/setting.store.js +1 -0
- package/esm/src/templates/app/lib/summary/Summary.Template.js +1 -0
- package/esm/src/templates/app/lib/summary/Summary.Unit.js +1 -0
- package/esm/src/templates/app/lib/summary/Summary.Util.js +1 -0
- package/esm/src/templates/app/lib/summary/Summary.View.js +1 -0
- package/esm/src/templates/app/lib/summary/Summary.Zone.js +1 -0
- package/esm/src/templates/app/lib/summary/_server.js +1 -0
- package/esm/src/templates/app/lib/summary/index.js +1 -0
- package/esm/src/templates/app/lib/summary/summary.constant.js +1 -0
- package/esm/src/templates/app/lib/summary/summary.dictionary.js +1 -0
- package/esm/src/templates/app/lib/summary/summary.document.js +1 -0
- package/esm/src/templates/app/lib/summary/summary.service.js +1 -0
- package/esm/src/templates/app/lib/summary/summary.signal.js +1 -0
- package/esm/src/templates/app/lib/summary/summary.store.js +1 -0
- package/esm/src/templates/app/lib/user/User.Template.js +1 -0
- package/esm/src/templates/app/lib/user/User.Unit.js +1 -0
- package/esm/src/templates/app/lib/user/User.Util.js +1 -0
- package/esm/src/templates/app/lib/user/User.View.js +1 -0
- package/esm/src/templates/app/lib/user/User.Zone.js +1 -0
- package/esm/src/templates/app/lib/user/_server.js +1 -0
- package/esm/src/templates/app/lib/user/index.js +1 -0
- package/esm/src/templates/app/lib/user/user.constant.js +1 -0
- package/esm/src/templates/app/lib/user/user.dictionary.js +1 -0
- package/esm/src/templates/app/lib/user/user.document.js +1 -0
- package/esm/src/templates/app/lib/user/user.service.js +1 -0
- package/esm/src/templates/app/lib/user/user.signal.js +1 -0
- package/esm/src/templates/app/lib/user/user.signal.spec.js +1 -0
- package/esm/src/templates/app/lib/user/user.signal.test.js +1 -0
- package/esm/src/templates/app/lib/user/user.store.js +1 -0
- package/esm/src/templates/app/main.js +1 -0
- package/esm/src/templates/app/middleware.js +1 -0
- package/esm/src/templates/app/nest/backendLogic.js +1 -0
- package/esm/src/templates/app/nest/index.js +1 -0
- package/esm/src/templates/app/next/frontendLogic.js +1 -0
- package/esm/src/templates/app/next/index.js +1 -0
- package/esm/src/templates/app/ui/UiComponent.js +1 -0
- package/esm/src/templates/app/ui/index.js +1 -0
- package/esm/src/templates/client.js +2 -1
- package/esm/src/templates/crudPages/[__model__Id]/edit/page.js +1 -0
- package/esm/src/templates/crudPages/[__model__Id]/page.js +1 -0
- package/esm/src/templates/crudPages/new/page.js +1 -0
- package/esm/src/templates/crudPages/page.js +1 -0
- package/esm/src/templates/index.js +1 -0
- package/esm/src/templates/lib/__lib/extends/summary.constant.js +2 -1
- package/esm/src/templates/lib/__lib/lib.constant.js +1 -0
- package/esm/src/templates/lib/__lib/lib.dictionary.js +1 -0
- package/esm/src/templates/lib/__lib/lib.document.js +1 -0
- package/esm/src/templates/lib/__lib/lib.service.js +2 -1
- package/esm/src/templates/lib/__lib/lib.signal.js +1 -0
- package/esm/src/templates/lib/__lib/lib.store.js +1 -0
- package/esm/src/templates/lib/__scalar/_server.js +2 -1
- package/esm/src/templates/lib/cnst.js +1 -0
- package/esm/src/templates/lib/cnst_.js +1 -0
- package/esm/src/templates/lib/db.js +1 -0
- package/esm/src/templates/lib/dict.js +1 -0
- package/esm/src/templates/lib/fetch.js +2 -1
- package/esm/src/templates/lib/sig.js +2 -1
- package/esm/src/templates/lib/srv.js +2 -1
- package/esm/src/templates/lib/st.js +1 -0
- package/esm/src/templates/lib/store.js +2 -1
- package/esm/src/templates/lib/usePage.js +1 -0
- package/esm/src/templates/libRoot/akan.config.js +1 -0
- package/esm/src/templates/libRoot/base/baseLogic.js +1 -0
- package/esm/src/templates/libRoot/base/index.js +1 -0
- package/esm/src/templates/libRoot/common/commonLogic.js +1 -0
- package/esm/src/templates/libRoot/common/index.js +1 -0
- package/esm/src/templates/libRoot/jest.config.js +1 -0
- package/esm/src/templates/libRoot/lib/___libName__/__libName__.dictionary.js +1 -0
- package/esm/src/templates/libRoot/lib/___libName__/__libName__.service.js +1 -0
- package/esm/src/templates/libRoot/lib/___libName__/__libName__.store.js +1 -0
- package/esm/src/templates/libRoot/lib/___libName__/_server.js +1 -0
- package/esm/src/templates/libRoot/lib/option.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/Setting.Template.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/Setting.Unit.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/Setting.Util.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/Setting.View.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/Setting.Zone.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/_server.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/index.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/setting.constant.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/setting.dictionary.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/setting.document.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/setting.service.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/setting.signal.js +1 -0
- package/esm/src/templates/libRoot/lib/setting/setting.store.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/Summary.Template.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/Summary.Unit.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/Summary.Util.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/Summary.View.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/Summary.Zone.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/_server.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/index.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/summary.constant.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/summary.dictionary.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/summary.document.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/summary.service.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/summary.signal.js +1 -0
- package/esm/src/templates/libRoot/lib/summary/summary.store.js +1 -0
- package/esm/src/templates/libRoot/lib/user/User.Template.js +1 -0
- package/esm/src/templates/libRoot/lib/user/User.Unit.js +1 -0
- package/esm/src/templates/libRoot/lib/user/User.Util.js +1 -0
- package/esm/src/templates/libRoot/lib/user/User.View.js +1 -0
- package/esm/src/templates/libRoot/lib/user/User.Zone.js +1 -0
- package/esm/src/templates/libRoot/lib/user/_server.js +1 -0
- package/esm/src/templates/libRoot/lib/user/index.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.constant.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.dictionary.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.document.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.service.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.signal.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.signal.spec.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.signal.test.js +1 -0
- package/esm/src/templates/libRoot/lib/user/user.store.js +1 -0
- package/esm/src/templates/libRoot/nest/backendLogic.js +1 -0
- package/esm/src/templates/libRoot/nest/index.js +1 -0
- package/esm/src/templates/libRoot/next/frontendLogic.js +1 -0
- package/esm/src/templates/libRoot/next/index.js +1 -0
- package/esm/src/templates/libRoot/ui/index.js +1 -0
- package/esm/src/templates/module/__Model__.Template.js +1 -0
- package/esm/src/templates/module/__Model__.Unit.js +1 -0
- package/esm/src/templates/module/__Model__.Util.js +1 -0
- package/esm/src/templates/module/__Model__.View.js +1 -0
- package/esm/src/templates/module/__Model__.Zone.js +1 -0
- package/esm/src/templates/module/__model__.constant.js +1 -0
- package/esm/src/templates/module/__model__.dictionary.js +1 -0
- package/esm/src/templates/module/__model__.document.js +1 -0
- package/esm/src/templates/module/__model__.service.js +1 -0
- package/esm/src/templates/module/__model__.signal.js +1 -0
- package/esm/src/templates/module/__model__.signal.spec.js +1 -0
- package/esm/src/templates/module/__model__.signal.test.js +1 -0
- package/esm/src/templates/module/__model__.store.js +1 -0
- package/esm/src/templates/module/_server.js +1 -0
- package/esm/src/templates/module/index.js +1 -0
- package/esm/src/templates/server.js +2 -1
- package/package.json +1 -1
- package/src/application/application.interface.d.ts +40 -0
- package/src/application/application.runner.d.ts +14 -7
- package/src/application/application.script.d.ts +12 -6
- package/ui/MultiScrollList.d.ts +2 -1
- package/src/application/appilcation.interface.d.ts +0 -11
- package/ui/ScrollList.d.ts +0 -7
- package/ui/index.d.ts +0 -1
package/cjs/index.js
CHANGED
|
@@ -3541,115 +3541,35 @@ var LibraryScript = class {
|
|
|
3541
3541
|
}
|
|
3542
3542
|
};
|
|
3543
3543
|
|
|
3544
|
-
// pkgs/@akanjs/cli/src/application/application.
|
|
3545
|
-
var
|
|
3546
|
-
var
|
|
3547
|
-
var import_prompts7 = require("@langchain/core/prompts");
|
|
3548
|
-
var import_runnables2 = require("@langchain/core/runnables");
|
|
3549
|
-
var import_openai3 = require("@langchain/openai");
|
|
3550
|
-
var import_plugin_react = __toESM(require("@vitejs/plugin-react"), 1);
|
|
3551
|
-
var import_dotenv3 = __toESM(require("dotenv"), 1);
|
|
3552
|
-
var esbuild2 = __toESM(require("esbuild"), 1);
|
|
3553
|
-
var import_fs10 = __toESM(require("fs"), 1);
|
|
3554
|
-
var import_promises3 = __toESM(require("fs/promises"), 1);
|
|
3555
|
-
var import_js_yaml2 = __toESM(require("js-yaml"), 1);
|
|
3556
|
-
var import_open = __toESM(require("open"), 1);
|
|
3557
|
-
var import_ora3 = __toESM(require("ora"), 1);
|
|
3558
|
-
var import_path4 = __toESM(require("path"), 1);
|
|
3559
|
-
var vite = __toESM(require("vite"), 1);
|
|
3560
|
-
var import_vite_plugin_commonjs = __toESM(require("vite-plugin-commonjs"), 1);
|
|
3561
|
-
var import_vite_plugin_node_polyfills = require("vite-plugin-node-polyfills");
|
|
3562
|
-
var import_vite_tsconfig_paths = __toESM(require("vite-tsconfig-paths"), 1);
|
|
3563
|
-
|
|
3564
|
-
// pkgs/@akanjs/cli/src/application/appilcation.interface.tsx
|
|
3565
|
-
var import_ink4 = require("ink");
|
|
3566
|
-
var import_react4 = __toESM(require("react"), 1);
|
|
3544
|
+
// pkgs/@akanjs/cli/src/application/application.interface.tsx
|
|
3545
|
+
var import_ink3 = require("ink");
|
|
3546
|
+
var import_react3 = __toESM(require("react"), 1);
|
|
3567
3547
|
|
|
3568
|
-
// pkgs/@akanjs/cli/ui/
|
|
3548
|
+
// pkgs/@akanjs/cli/ui/MultiScrollList.tsx
|
|
3569
3549
|
var import_ink2 = require("ink");
|
|
3570
3550
|
var import_react2 = __toESM(require("react"), 1);
|
|
3571
|
-
var
|
|
3572
|
-
|
|
3551
|
+
var HEADER_HEIGHT = 1;
|
|
3552
|
+
var FOOTER_HEIGHT = 5;
|
|
3553
|
+
var BORDER_HEIGHT = 2;
|
|
3554
|
+
var MultiScrollList = ({ logList, maxLength = 100 }) => {
|
|
3573
3555
|
const [width, height] = useStdoutDimensions();
|
|
3556
|
+
const [focusLog, setFocusLog] = (0, import_react2.useState)([]);
|
|
3557
|
+
const [lengthMap, setLengthMap] = (0, import_react2.useState)(/* @__PURE__ */ new Map());
|
|
3574
3558
|
const [scrollPos, setScrollPos] = (0, import_react2.useState)(0);
|
|
3559
|
+
const [tabIndex, setTabIndex] = (0, import_react2.useState)(0);
|
|
3575
3560
|
const [isRunning, setIsRunning] = (0, import_react2.useState)(false);
|
|
3576
|
-
const [boxHeight, setBoxHeight] = (0, import_react2.useState)(height -
|
|
3561
|
+
const [boxHeight, setBoxHeight] = (0, import_react2.useState)(height - HEADER_HEIGHT - FOOTER_HEIGHT - BORDER_HEIGHT);
|
|
3562
|
+
const getLimitedLogs = (logs) => {
|
|
3563
|
+
return logs.length > maxLength ? logs.slice(logs.length - maxLength) : logs;
|
|
3564
|
+
};
|
|
3577
3565
|
(0, import_ink2.useInput)((input6, key) => {
|
|
3578
|
-
if (key.
|
|
3579
|
-
|
|
3580
|
-
setScrollPos(0);
|
|
3581
|
-
}
|
|
3582
|
-
if (input6 === " " && isRunning) {
|
|
3583
|
-
setIsRunning(false);
|
|
3566
|
+
if (key.tab) {
|
|
3567
|
+
setTabIndex((prev) => (prev + 1) % logList.length);
|
|
3584
3568
|
setScrollPos(0);
|
|
3585
|
-
}
|
|
3586
|
-
if (key.downArrow && scrollPos > 0) {
|
|
3587
|
-
if (key.shift) {
|
|
3588
|
-
setScrollPos(scrollPos - 10);
|
|
3589
|
-
} else {
|
|
3590
|
-
setScrollPos(scrollPos - 1);
|
|
3591
|
-
}
|
|
3592
|
-
}
|
|
3593
|
-
if (key.upArrow && scrollPos < list.length - boxHeight) {
|
|
3594
|
-
if (key.shift) {
|
|
3595
|
-
setScrollPos(scrollPos + 10);
|
|
3596
|
-
} else {
|
|
3597
|
-
setScrollPos(scrollPos + 1);
|
|
3598
|
-
}
|
|
3599
|
-
}
|
|
3600
|
-
});
|
|
3601
|
-
(0, import_react2.useEffect)(() => {
|
|
3602
|
-
if (isRunning) {
|
|
3603
|
-
setScrollPos(scrollPos + 1);
|
|
3604
|
-
return;
|
|
3605
|
-
}
|
|
3606
|
-
if (list.length > boxHeight) {
|
|
3607
|
-
setRenderLogs(list.slice(list.length - boxHeight, list.length));
|
|
3608
|
-
} else {
|
|
3609
|
-
setRenderLogs(list);
|
|
3610
|
-
}
|
|
3611
|
-
}, [list, isRunning]);
|
|
3612
|
-
(0, import_react2.useEffect)(() => {
|
|
3613
|
-
setBoxHeight(Math.floor(height * 0.9));
|
|
3614
|
-
}, [height]);
|
|
3615
|
-
(0, import_react2.useEffect)(() => {
|
|
3616
|
-
if (scrollPos > 0) {
|
|
3617
|
-
setRenderLogs(list.slice(list.length - boxHeight - scrollPos, list.length - scrollPos));
|
|
3618
|
-
setIsRunning(true);
|
|
3619
|
-
} else {
|
|
3620
|
-
setRenderLogs(list.slice(list.length - boxHeight, list.length));
|
|
3621
3569
|
setIsRunning(false);
|
|
3622
3570
|
}
|
|
3623
|
-
}, [scrollPos]);
|
|
3624
|
-
return /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { ...props, width, height: "100%", flexDirection: "column" }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { borderStyle: "round", width, height: height - 3 }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, null, isRunning ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, renderLogs.slice(0, renderLogs.length - 1).map((log, index) => /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { key: index }, log), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null))), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "scrolling... + ", scrollPos)) : /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, renderLogs.map((log, index) => /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { key: index }, log), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null)))))), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { dimColor: true }, "You can use the following shortcuts:", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), "* ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "up"), " and ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "down"), " to scroll.", " ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "shift"), " to scroll faster.", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), "* ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "escape"), " to stop scrolling.")));
|
|
3625
|
-
};
|
|
3626
|
-
|
|
3627
|
-
// pkgs/@akanjs/cli/ui/MultiScrollList.tsx
|
|
3628
|
-
var import_ink3 = require("ink");
|
|
3629
|
-
var import_react3 = __toESM(require("react"), 1);
|
|
3630
|
-
var MultiScrollList = ({ logList }) => {
|
|
3631
|
-
const [width, height] = useStdoutDimensions();
|
|
3632
|
-
const [renderMultiLogs, setRenderMultiLogs] = (0, import_react3.useState)(
|
|
3633
|
-
Array.from({ length: logList.length }, () => [])
|
|
3634
|
-
);
|
|
3635
|
-
const [lengthMap, setLengthMap] = (0, import_react3.useState)(/* @__PURE__ */ new Map());
|
|
3636
|
-
const [scrollPos, setScrollPos] = (0, import_react3.useState)(0);
|
|
3637
|
-
const [tabIndex, setTabIndex] = (0, import_react3.useState)(null);
|
|
3638
|
-
const [isRunning, setIsRunning] = (0, import_react3.useState)(false);
|
|
3639
|
-
const [boxHeight, setBoxHeight] = (0, import_react3.useState)(height - 7);
|
|
3640
|
-
(0, import_ink3.useInput)((input6, key) => {
|
|
3641
|
-
if (key.tab) {
|
|
3642
|
-
if (tabIndex === null) {
|
|
3643
|
-
setTabIndex(0);
|
|
3644
|
-
} else {
|
|
3645
|
-
setTabIndex((prev) => (prev + 1) % logList.length);
|
|
3646
|
-
setIsRunning(false);
|
|
3647
|
-
}
|
|
3648
|
-
}
|
|
3649
3571
|
if (key.escape) {
|
|
3650
3572
|
setScrollPos(0);
|
|
3651
|
-
if (tabIndex !== null)
|
|
3652
|
-
setTabIndex(null);
|
|
3653
3573
|
setIsRunning(false);
|
|
3654
3574
|
}
|
|
3655
3575
|
if (input6 === " ") {
|
|
@@ -3669,230 +3589,277 @@ var MultiScrollList = ({ logList }) => {
|
|
|
3669
3589
|
setScrollPos(newScrollPos);
|
|
3670
3590
|
}
|
|
3671
3591
|
}
|
|
3672
|
-
if (key.upArrow &&
|
|
3673
|
-
|
|
3674
|
-
|
|
3675
|
-
if (
|
|
3676
|
-
|
|
3592
|
+
if (key.upArrow && scrollPos < logList[tabIndex].logs.length - boxHeight) {
|
|
3593
|
+
const limitedLogs = getLimitedLogs(logList[tabIndex].logs);
|
|
3594
|
+
if (scrollPos < limitedLogs.length - boxHeight) {
|
|
3595
|
+
if (key.shift) {
|
|
3596
|
+
const newScrollPos = scrollPos + 10;
|
|
3597
|
+
if (newScrollPos > limitedLogs.length - boxHeight) {
|
|
3598
|
+
setScrollPos(limitedLogs.length - boxHeight);
|
|
3599
|
+
} else {
|
|
3600
|
+
setScrollPos(newScrollPos);
|
|
3601
|
+
}
|
|
3677
3602
|
} else {
|
|
3678
|
-
setScrollPos(
|
|
3603
|
+
setScrollPos(scrollPos + 1);
|
|
3679
3604
|
}
|
|
3680
|
-
|
|
3681
|
-
|
|
3605
|
+
if (!isRunning)
|
|
3606
|
+
setIsRunning(true);
|
|
3682
3607
|
}
|
|
3683
|
-
if (!isRunning)
|
|
3684
|
-
setIsRunning(true);
|
|
3685
3608
|
}
|
|
3686
3609
|
});
|
|
3687
|
-
(0,
|
|
3610
|
+
(0, import_react2.useEffect)(() => {
|
|
3688
3611
|
const getLogsToRender = (logs, index) => {
|
|
3612
|
+
const limitedLogs = getLimitedLogs(logs);
|
|
3689
3613
|
if (scrollPos > 0 && tabIndex === index) {
|
|
3690
|
-
return
|
|
3691
|
-
} else if (
|
|
3692
|
-
return
|
|
3614
|
+
return limitedLogs.slice(limitedLogs.length - boxHeight - scrollPos, limitedLogs.length - scrollPos);
|
|
3615
|
+
} else if (limitedLogs.length > boxHeight) {
|
|
3616
|
+
return limitedLogs.slice(limitedLogs.length - boxHeight, limitedLogs.length);
|
|
3693
3617
|
} else {
|
|
3694
|
-
return
|
|
3618
|
+
return limitedLogs;
|
|
3695
3619
|
}
|
|
3696
3620
|
};
|
|
3697
3621
|
if (isRunning) {
|
|
3698
|
-
if (
|
|
3622
|
+
if (lengthMap.has(tabIndex)) {
|
|
3699
3623
|
const tabLength = lengthMap.get(tabIndex);
|
|
3700
|
-
|
|
3624
|
+
const limitedLogsLength = Math.min(logList[tabIndex].logs.length, maxLength);
|
|
3625
|
+
if (tabLength && tabLength < limitedLogsLength) {
|
|
3701
3626
|
setScrollPos(scrollPos + 1);
|
|
3702
|
-
lengthMap.set(tabIndex,
|
|
3627
|
+
lengthMap.set(tabIndex, limitedLogsLength);
|
|
3703
3628
|
}
|
|
3704
3629
|
}
|
|
3705
|
-
|
|
3706
|
-
const newState = [...prev];
|
|
3707
|
-
logList.forEach((logData, index) => {
|
|
3708
|
-
newState[index] = getLogsToRender(logData.logs, index);
|
|
3709
|
-
});
|
|
3710
|
-
return newState;
|
|
3711
|
-
});
|
|
3630
|
+
setFocusLog(getLogsToRender(logList[tabIndex].logs, tabIndex));
|
|
3712
3631
|
} else {
|
|
3713
|
-
|
|
3714
|
-
const newState = [...prev];
|
|
3715
|
-
logList.forEach((logData, index) => {
|
|
3716
|
-
lengthMap.set(index, logData.logs.length);
|
|
3717
|
-
newState[index] = getLogsToRender(logData.logs, index);
|
|
3718
|
-
});
|
|
3719
|
-
return newState;
|
|
3720
|
-
});
|
|
3632
|
+
setFocusLog(getLogsToRender(logList[tabIndex].logs, tabIndex));
|
|
3721
3633
|
}
|
|
3722
|
-
}, [logList, isRunning, scrollPos, tabIndex, boxHeight]);
|
|
3723
|
-
(0,
|
|
3724
|
-
setBoxHeight(height -
|
|
3634
|
+
}, [logList, isRunning, scrollPos, tabIndex, boxHeight, maxLength]);
|
|
3635
|
+
(0, import_react2.useEffect)(() => {
|
|
3636
|
+
setBoxHeight(height - HEADER_HEIGHT - FOOTER_HEIGHT - BORDER_HEIGHT);
|
|
3725
3637
|
}, [height]);
|
|
3726
|
-
(0,
|
|
3727
|
-
setLengthMap(new Map(logList.map((log, index) => [index, log.logs.length])));
|
|
3728
|
-
}, []);
|
|
3729
|
-
return /* @__PURE__ */
|
|
3730
|
-
|
|
3638
|
+
(0, import_react2.useEffect)(() => {
|
|
3639
|
+
setLengthMap(new Map(logList.map((log, index) => [index, Math.min(log.logs.length, maxLength)])));
|
|
3640
|
+
}, [logList, maxLength]);
|
|
3641
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { width, height, flexDirection: "column" }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { width, height: "80%", flexDirection: "row" }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { width: 30, height: "100%", flexDirection: "column" }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, null, "List ", tabIndex + 1, "/", logList.length)), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { borderStyle: "round", borderColor: "blackBright", width: "100%", height: "100%", flexDirection: "column" }, logList.map((log, index) => {
|
|
3642
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { color: index === tabIndex ? "green" : "white" }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, null, "\u25CF"), "\xA0", log.title.length > 25 ? log.title.slice(0, 25) + "..." : log.title));
|
|
3643
|
+
}))), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { width, height: boxHeight + 3, flexDirection: "column" }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, null, logList[tabIndex].title), /* @__PURE__ */ import_react2.default.createElement(
|
|
3644
|
+
import_ink2.Box,
|
|
3731
3645
|
{
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3646
|
+
borderStyle: isRunning ? "double" : "round",
|
|
3647
|
+
flexDirection: "column",
|
|
3648
|
+
borderColor: logList[tabIndex].color,
|
|
3649
|
+
width: "100%",
|
|
3650
|
+
height: "100%"
|
|
3737
3651
|
},
|
|
3738
|
-
|
|
3739
|
-
)))
|
|
3652
|
+
scrollPos > 0 ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, focusLog.slice(0, focusLog.length - 1).map((log, index) => /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { key: index }, log)), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "Scrolling... +", scrollPos)) : focusLog.map((log, index) => /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { key: index }, log))
|
|
3653
|
+
))), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Box, { width }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { dimColor: true }, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, null, "You can use the following shortcuts:"), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), "* ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "tab"), " to switch tab.", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), "* ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "up"), " and ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "down"), " to scroll.", " ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "shift"), " to scroll faster.", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), "* ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "space"), " to scroll.", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Newline, null), "* ", /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "escape"), " to stop scrolling.")));
|
|
3740
3654
|
};
|
|
3741
3655
|
|
|
3742
|
-
// pkgs/@akanjs/cli/src/application/
|
|
3743
|
-
var Backend = ({
|
|
3744
|
-
const [logs, setLogs] = (0,
|
|
3656
|
+
// pkgs/@akanjs/cli/src/application/application.interface.tsx
|
|
3657
|
+
var Backend = ({ appName, childProcess, onExit }) => {
|
|
3658
|
+
const [logs, setLogs] = (0, import_react3.useState)([]);
|
|
3745
3659
|
const [width, height] = useStdoutDimensions();
|
|
3746
|
-
(0,
|
|
3747
|
-
|
|
3748
|
-
env,
|
|
3749
|
-
stdio: "pipe",
|
|
3750
|
-
cwd: `${app.dist.cwdPath}/backend`
|
|
3751
|
-
});
|
|
3752
|
-
proc.stdout?.on("data", (data) => {
|
|
3660
|
+
(0, import_react3.useEffect)(() => {
|
|
3661
|
+
childProcess.stdout?.on("data", (data) => {
|
|
3753
3662
|
const newOutput = data.toString().split("\n");
|
|
3754
3663
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3755
3664
|
});
|
|
3756
|
-
|
|
3665
|
+
childProcess.stderr?.on("data", (data) => {
|
|
3757
3666
|
const newOutput = data.toString().split("\n");
|
|
3758
3667
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3759
3668
|
});
|
|
3760
3669
|
return () => {
|
|
3761
|
-
|
|
3670
|
+
childProcess.kill();
|
|
3671
|
+
onExit();
|
|
3762
3672
|
};
|
|
3763
3673
|
}, []);
|
|
3764
|
-
return /* @__PURE__ */
|
|
3674
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_ink3.Box, { width, height }, /* @__PURE__ */ import_react3.default.createElement(import_ink3.Text, { bold: true }, "Akan.JS Backend"));
|
|
3765
3675
|
};
|
|
3766
|
-
var Frontend = ({
|
|
3767
|
-
const [logs, setLogs] = (0,
|
|
3676
|
+
var Frontend = ({ appName, childProcess, onExit }) => {
|
|
3677
|
+
const [logs, setLogs] = (0, import_react3.useState)([]);
|
|
3768
3678
|
const [width, height] = useStdoutDimensions();
|
|
3769
|
-
(0,
|
|
3770
|
-
|
|
3771
|
-
env,
|
|
3772
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
3773
|
-
detached: true
|
|
3774
|
-
});
|
|
3775
|
-
proc.stdout?.on("data", (data) => {
|
|
3679
|
+
(0, import_react3.useEffect)(() => {
|
|
3680
|
+
childProcess.stdout?.on("data", (data) => {
|
|
3776
3681
|
const newOutput = data.toString().split("\n");
|
|
3777
3682
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3778
3683
|
});
|
|
3779
|
-
|
|
3684
|
+
childProcess.stderr?.on("data", (data) => {
|
|
3780
3685
|
const newOutput = data.toString().split("\n");
|
|
3781
3686
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3782
3687
|
});
|
|
3783
3688
|
return () => {
|
|
3784
|
-
|
|
3689
|
+
childProcess.kill();
|
|
3690
|
+
onExit();
|
|
3785
3691
|
};
|
|
3786
3692
|
}, []);
|
|
3787
|
-
return /* @__PURE__ */
|
|
3693
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_ink3.Box, { width, height, flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(import_ink3.Text, { bold: true }, appName, " Frontend"), logs.map((log) => /* @__PURE__ */ import_react3.default.createElement(import_ink3.Text, { key: log }, log)));
|
|
3788
3694
|
};
|
|
3789
|
-
var Csr = ({
|
|
3790
|
-
|
|
3791
|
-
onLoad
|
|
3792
|
-
}) => {
|
|
3793
|
-
const [logs, setLogs] = (0, import_react4.useState)([]);
|
|
3695
|
+
var Csr = ({ app, event, onExit }) => {
|
|
3696
|
+
const [logs, setLogs] = (0, import_react3.useState)([]);
|
|
3794
3697
|
const [width, height] = useStdoutDimensions();
|
|
3795
|
-
(0,
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3698
|
+
const [test, setTest] = (0, import_react3.useState)(false);
|
|
3699
|
+
(0, import_react3.useEffect)(() => {
|
|
3700
|
+
event.on("info", (msg) => {
|
|
3701
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3702
|
+
});
|
|
3703
|
+
event.on("warn", (msg) => {
|
|
3704
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3705
|
+
});
|
|
3706
|
+
event.on("warnOnce", (msg) => {
|
|
3707
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3708
|
+
});
|
|
3709
|
+
event.on("error", (msg) => {
|
|
3710
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3711
|
+
});
|
|
3712
|
+
event.on("clearScreen", (type) => {
|
|
3713
|
+
setLogs((prevLogs) => [...prevLogs, type]);
|
|
3800
3714
|
});
|
|
3801
3715
|
}, []);
|
|
3802
|
-
return /* @__PURE__ */
|
|
3716
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_ink3.Box, { width, height, flexDirection: "column" }, /* @__PURE__ */ import_react3.default.createElement(import_ink3.Text, null, test ? "true" : "false"), /* @__PURE__ */ import_react3.default.createElement(import_ink3.Text, { bold: true }, "Akan.JS CSR"), /* @__PURE__ */ import_react3.default.createElement(import_ink3.Text, null, logs));
|
|
3803
3717
|
};
|
|
3804
|
-
var Start = ({
|
|
3805
|
-
app,
|
|
3806
|
-
backendEnv,
|
|
3807
|
-
frontendEnv,
|
|
3808
|
-
onLoadCsr
|
|
3809
|
-
}) => {
|
|
3718
|
+
var Start = ({ appName, bcp, fcp, csr, onExit, maxLength = 100 }) => {
|
|
3810
3719
|
const [width, height] = useStdoutDimensions();
|
|
3811
|
-
const [csrLogs, setCsrLogs] = (0,
|
|
3812
|
-
const [backendLogs, setBackendLogs] = (0,
|
|
3813
|
-
const [frontendLogs, setFrontendLogs] = (0,
|
|
3814
|
-
(0,
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3720
|
+
const [csrLogs, setCsrLogs] = (0, import_react3.useState)([]);
|
|
3721
|
+
const [backendLogs, setBackendLogs] = (0, import_react3.useState)([]);
|
|
3722
|
+
const [frontendLogs, setFrontendLogs] = (0, import_react3.useState)([]);
|
|
3723
|
+
const { exit } = (0, import_ink3.useApp)();
|
|
3724
|
+
const filterLogData = (data) => {
|
|
3725
|
+
return typeof data === "string" ? data.split(/\r?\n/).filter((line) => line !== "") : data.toString().split(/\r?\n/).filter((line) => line !== "");
|
|
3726
|
+
};
|
|
3727
|
+
const saveLog = (type, data, setLog) => {
|
|
3728
|
+
const newOutput = filterLogData(data);
|
|
3729
|
+
const logs = newOutput.map((line) => ({ type, content: line }));
|
|
3730
|
+
setLog((currentLogs) => {
|
|
3731
|
+
if (currentLogs.length >= maxLength) {
|
|
3732
|
+
return [...currentLogs.slice(logs.length, maxLength), ...logs];
|
|
3733
|
+
} else if (currentLogs.length < maxLength && currentLogs.length + logs.length > maxLength) {
|
|
3734
|
+
return [...currentLogs.slice(Math.abs(maxLength - currentLogs.length - logs.length), maxLength), ...logs];
|
|
3735
|
+
} else
|
|
3736
|
+
return [...currentLogs, ...logs];
|
|
3820
3737
|
});
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
detached: true
|
|
3738
|
+
};
|
|
3739
|
+
(0, import_react3.useEffect)(() => {
|
|
3740
|
+
bcp.stdout?.on("data", (data) => {
|
|
3741
|
+
saveLog("stdout", data, setBackendLogs);
|
|
3826
3742
|
});
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
setBackendLogs((currentLogs) => [
|
|
3830
|
-
...currentLogs,
|
|
3831
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3832
|
-
]);
|
|
3743
|
+
bcp.stderr?.on("data", (data) => {
|
|
3744
|
+
saveLog("stderr", data, setBackendLogs);
|
|
3833
3745
|
});
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
setBackendLogs((currentLogs) => [
|
|
3837
|
-
...currentLogs,
|
|
3838
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3839
|
-
]);
|
|
3746
|
+
fcp.stdout?.on("data", (data) => {
|
|
3747
|
+
saveLog("stdout", data, setFrontendLogs);
|
|
3840
3748
|
});
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
setFrontendLogs((currentLogs) => [
|
|
3844
|
-
...currentLogs,
|
|
3845
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3846
|
-
]);
|
|
3749
|
+
fcp.stderr?.on("data", (data) => {
|
|
3750
|
+
saveLog("stderr", data, setFrontendLogs);
|
|
3847
3751
|
});
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
setFrontendLogs((currentLogs) => [
|
|
3851
|
-
...currentLogs,
|
|
3852
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3853
|
-
]);
|
|
3752
|
+
csr.on("info", (msg) => {
|
|
3753
|
+
saveLog("info", msg, setCsrLogs);
|
|
3854
3754
|
});
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
3755
|
+
csr.on("warn", (msg) => {
|
|
3756
|
+
saveLog("warn", msg, setCsrLogs);
|
|
3757
|
+
});
|
|
3758
|
+
csr.on("error", (msg) => {
|
|
3759
|
+
saveLog("error", msg, setCsrLogs);
|
|
3760
|
+
});
|
|
3761
|
+
csr.on("clearScreen", (type) => {
|
|
3762
|
+
saveLog("clearScreen", type, setCsrLogs);
|
|
3859
3763
|
});
|
|
3860
3764
|
return () => {
|
|
3861
|
-
|
|
3862
|
-
|
|
3765
|
+
bcp.kill();
|
|
3766
|
+
fcp.kill();
|
|
3767
|
+
bcp.stdin?.end();
|
|
3768
|
+
fcp.stdin?.end();
|
|
3769
|
+
csr.removeAllListeners();
|
|
3770
|
+
void (async () => {
|
|
3771
|
+
await onExit();
|
|
3772
|
+
exit();
|
|
3773
|
+
process.exit(0);
|
|
3774
|
+
})();
|
|
3863
3775
|
};
|
|
3864
3776
|
}, []);
|
|
3865
|
-
return /* @__PURE__ */
|
|
3777
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_ink3.Box, { borderColor: "#ff493b", height, width, flexDirection: "row" }, /* @__PURE__ */ import_react3.default.createElement(
|
|
3866
3778
|
MultiScrollList,
|
|
3867
3779
|
{
|
|
3868
3780
|
logList: [
|
|
3869
3781
|
{
|
|
3870
|
-
title: `${
|
|
3782
|
+
title: `${appName} frontend`,
|
|
3871
3783
|
logs: frontendLogs.map((log) => log.content),
|
|
3872
3784
|
color: "#ff493b"
|
|
3873
3785
|
},
|
|
3874
3786
|
{
|
|
3875
|
-
title: `${
|
|
3787
|
+
title: `${appName} backend`,
|
|
3876
3788
|
logs: backendLogs.map((log) => log.content),
|
|
3877
3789
|
color: "#e535ab"
|
|
3878
3790
|
},
|
|
3879
3791
|
{
|
|
3880
|
-
title: `${
|
|
3792
|
+
title: `${appName} react`,
|
|
3881
3793
|
logs: csrLogs.map((log) => log.content),
|
|
3882
3794
|
color: "#7cc5d9"
|
|
3883
3795
|
}
|
|
3884
|
-
]
|
|
3796
|
+
],
|
|
3797
|
+
maxLength
|
|
3885
3798
|
}
|
|
3886
3799
|
)));
|
|
3887
3800
|
};
|
|
3888
3801
|
var Interface = {
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3802
|
+
/**
|
|
3803
|
+
* Akan CSR 실행 컴포넌트
|
|
3804
|
+
*
|
|
3805
|
+
* @param app 앱 정보
|
|
3806
|
+
* @param event CSR 이벤트 발생기
|
|
3807
|
+
* @param onExit 종료 함수
|
|
3808
|
+
*/
|
|
3809
|
+
Csr: (app, event, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Csr, { app, event, onExit })),
|
|
3810
|
+
/**
|
|
3811
|
+
* Akan Backend 실행 컴포넌트
|
|
3812
|
+
*
|
|
3813
|
+
* @param appName 앱 이름
|
|
3814
|
+
* @param childProcess 백엔드 차일드 프로세스
|
|
3815
|
+
* @param onExit 종료 함수
|
|
3816
|
+
*/
|
|
3817
|
+
Backend: (appName, childProcess, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Backend, { appName, childProcess, onExit })),
|
|
3818
|
+
/**
|
|
3819
|
+
* Akan Frontend 실행 컴포넌트
|
|
3820
|
+
*
|
|
3821
|
+
* @param appName 앱 이름
|
|
3822
|
+
* @param childProcess 프론트엔드 차일드 프로세스
|
|
3823
|
+
* @param onExit 종료 함수
|
|
3824
|
+
*/
|
|
3825
|
+
Frontend: (appName, childProcess, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Frontend, { appName, childProcess, onExit })),
|
|
3826
|
+
/**
|
|
3827
|
+
* Akan application 통합 실행 컴포넌트 (백엔드, 프론트엔드, React(CSR))
|
|
3828
|
+
*
|
|
3829
|
+
* @param maxLength 로그 최대 길이
|
|
3830
|
+
* @param appName 앱 이름
|
|
3831
|
+
* @param bcp 백엔드 차일드 프로세스
|
|
3832
|
+
* @param fcp 프론트엔드 차일드 프로세스
|
|
3833
|
+
* @param csr CSR 이벤트 발생기
|
|
3834
|
+
* @param onExit 종료 함수
|
|
3835
|
+
*/
|
|
3836
|
+
Start: (appName, bcp, fcp, csr, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Start, { appName, bcp, fcp, csr, onExit }))
|
|
3837
|
+
};
|
|
3838
|
+
var renderManager = (component) => {
|
|
3839
|
+
const renderFn = (0, import_ink3.render)(component);
|
|
3840
|
+
return renderFn;
|
|
3893
3841
|
};
|
|
3894
3842
|
|
|
3895
3843
|
// pkgs/@akanjs/cli/src/application/application.runner.ts
|
|
3844
|
+
var import_node_events = __toESM(require("node:events"), 1);
|
|
3845
|
+
var import_prompts6 = require("@inquirer/prompts");
|
|
3846
|
+
var import_output_parsers = require("@langchain/core/output_parsers");
|
|
3847
|
+
var import_prompts7 = require("@langchain/core/prompts");
|
|
3848
|
+
var import_runnables2 = require("@langchain/core/runnables");
|
|
3849
|
+
var import_openai3 = require("@langchain/openai");
|
|
3850
|
+
var import_plugin_react = __toESM(require("@vitejs/plugin-react"), 1);
|
|
3851
|
+
var import_dotenv3 = __toESM(require("dotenv"), 1);
|
|
3852
|
+
var esbuild2 = __toESM(require("esbuild"), 1);
|
|
3853
|
+
var import_fs10 = __toESM(require("fs"), 1);
|
|
3854
|
+
var import_promises3 = __toESM(require("fs/promises"), 1);
|
|
3855
|
+
var import_js_yaml2 = __toESM(require("js-yaml"), 1);
|
|
3856
|
+
var import_open = __toESM(require("open"), 1);
|
|
3857
|
+
var import_ora3 = __toESM(require("ora"), 1);
|
|
3858
|
+
var import_path4 = __toESM(require("path"), 1);
|
|
3859
|
+
var vite = __toESM(require("vite"), 1);
|
|
3860
|
+
var import_vite_plugin_commonjs = __toESM(require("vite-plugin-commonjs"), 1);
|
|
3861
|
+
var import_vite_plugin_node_polyfills = require("vite-plugin-node-polyfills");
|
|
3862
|
+
var import_vite_tsconfig_paths = __toESM(require("vite-tsconfig-paths"), 1);
|
|
3896
3863
|
var ApplicationRunner = class {
|
|
3897
3864
|
async createApplication(appName, workspace) {
|
|
3898
3865
|
await workspace.applyTemplate({
|
|
@@ -3920,34 +3887,6 @@ var ApplicationRunner = class {
|
|
|
3920
3887
|
await app.syncAssets(scanResult.akanConfig.libs);
|
|
3921
3888
|
return scanResult;
|
|
3922
3889
|
}
|
|
3923
|
-
async start(app) {
|
|
3924
|
-
const { env: frontendEnv } = await this.#prepareCommand(app, "start", "frontend");
|
|
3925
|
-
const { env: backendEnv } = await this.#prepareCommand(app, "start", "backend");
|
|
3926
|
-
Interface.Start(app, backendEnv, frontendEnv, async ({ onLog }) => {
|
|
3927
|
-
const config = await this.#getViteConfig(app, "start", {
|
|
3928
|
-
customLogger: {
|
|
3929
|
-
info: (msg) => {
|
|
3930
|
-
onLog(msg);
|
|
3931
|
-
},
|
|
3932
|
-
warn: (msg) => {
|
|
3933
|
-
},
|
|
3934
|
-
warnOnce: (msg) => {
|
|
3935
|
-
},
|
|
3936
|
-
error: (msg) => {
|
|
3937
|
-
onLog(msg);
|
|
3938
|
-
},
|
|
3939
|
-
clearScreen: (type) => {
|
|
3940
|
-
},
|
|
3941
|
-
hasErrorLogged: (error) => {
|
|
3942
|
-
return false;
|
|
3943
|
-
},
|
|
3944
|
-
hasWarned: false
|
|
3945
|
-
}
|
|
3946
|
-
});
|
|
3947
|
-
const server = await vite.createServer(config);
|
|
3948
|
-
await server.listen(4201);
|
|
3949
|
-
});
|
|
3950
|
-
}
|
|
3951
3890
|
async getScriptFilename(app) {
|
|
3952
3891
|
if (!app.exists("scripts")) {
|
|
3953
3892
|
app.mkdir("scripts");
|
|
@@ -4027,7 +3966,7 @@ var ApplicationRunner = class {
|
|
|
4027
3966
|
app.dist.writeJson("backend/package.json", appPackageJson);
|
|
4028
3967
|
app.dist.writeFile(import_path4.default.join(app.dist.cwdPath, "backend", "Dockerfile"), akanConfig.backend.docker.content);
|
|
4029
3968
|
}
|
|
4030
|
-
async startBackend(app, { open: open2 = false, onStart } = {}) {
|
|
3969
|
+
async startBackend(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4031
3970
|
const { env } = await this.#prepareCommand(app, "start", "backend");
|
|
4032
3971
|
const ctx = await esbuild2.context({
|
|
4033
3972
|
write: true,
|
|
@@ -4044,7 +3983,11 @@ var ApplicationRunner = class {
|
|
|
4044
3983
|
onStart?.();
|
|
4045
3984
|
if (open2)
|
|
4046
3985
|
setTimeout(() => (0, import_open.default)("http://localhost:8080/backend/graphql"), 3e3);
|
|
4047
|
-
|
|
3986
|
+
return app.dist.spawnSync("node", ["--watch", "main.js"], {
|
|
3987
|
+
env,
|
|
3988
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit",
|
|
3989
|
+
cwd: `${app.dist.cwdPath}/backend`
|
|
3990
|
+
});
|
|
4048
3991
|
}
|
|
4049
3992
|
async buildFrontend(app, { spawnOptions } = {}) {
|
|
4050
3993
|
const { env } = await this.#prepareCommand(app, "build", "frontend");
|
|
@@ -4078,12 +4021,20 @@ var ApplicationRunner = class {
|
|
|
4078
4021
|
]);
|
|
4079
4022
|
app.dist.writeFile("frontend/Dockerfile", akanConfig.frontend.docker.content);
|
|
4080
4023
|
}
|
|
4081
|
-
async startFrontend(app, {
|
|
4024
|
+
async startFrontend(app, {
|
|
4025
|
+
open: open2 = false,
|
|
4026
|
+
turbo = true,
|
|
4027
|
+
onStart,
|
|
4028
|
+
withInk = false
|
|
4029
|
+
} = {}) {
|
|
4082
4030
|
const { env } = await this.#prepareCommand(app, "start", "frontend");
|
|
4083
4031
|
if (open2)
|
|
4084
4032
|
setTimeout(() => (0, import_open.default)("http://localhost:4200"), 3e3);
|
|
4085
4033
|
onStart?.();
|
|
4086
|
-
|
|
4034
|
+
return app.spawnSync("npx", ["next", "dev", "-p", "4200", ...turbo ? ["--turbo"] : []], {
|
|
4035
|
+
env,
|
|
4036
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit"
|
|
4037
|
+
});
|
|
4087
4038
|
}
|
|
4088
4039
|
async #getViteConfig(app, command, viteConfig = {}) {
|
|
4089
4040
|
const { env } = await this.#prepareCommand(app, command, "csr");
|
|
@@ -4171,38 +4122,41 @@ var ApplicationRunner = class {
|
|
|
4171
4122
|
const config = await this.#getViteConfig(app, "build");
|
|
4172
4123
|
await vite.build(config);
|
|
4173
4124
|
}
|
|
4174
|
-
startCsr(app, { open: open2 = false, onStart } = {}) {
|
|
4175
|
-
|
|
4176
|
-
|
|
4125
|
+
async startCsr(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4126
|
+
const eventEmitter = new import_node_events.default();
|
|
4127
|
+
const config = await this.#getViteConfig(
|
|
4128
|
+
app,
|
|
4129
|
+
"start",
|
|
4130
|
+
withInk ? {
|
|
4177
4131
|
customLogger: {
|
|
4178
4132
|
info: (msg) => {
|
|
4179
|
-
|
|
4133
|
+
eventEmitter.emit("info", msg);
|
|
4180
4134
|
},
|
|
4181
4135
|
warn: (msg) => {
|
|
4182
|
-
|
|
4136
|
+
eventEmitter.emit("warn", msg);
|
|
4183
4137
|
},
|
|
4184
4138
|
warnOnce: (msg) => {
|
|
4185
|
-
|
|
4139
|
+
eventEmitter.emit("warnOnce", msg);
|
|
4186
4140
|
},
|
|
4187
4141
|
error: (msg) => {
|
|
4188
|
-
|
|
4142
|
+
eventEmitter.emit("error", msg);
|
|
4189
4143
|
},
|
|
4190
4144
|
clearScreen: (type) => {
|
|
4191
|
-
|
|
4145
|
+
eventEmitter.emit("clearScreen", type);
|
|
4192
4146
|
},
|
|
4193
4147
|
hasErrorLogged: (error) => {
|
|
4194
4148
|
return false;
|
|
4195
4149
|
},
|
|
4196
4150
|
hasWarned: false
|
|
4197
4151
|
}
|
|
4198
|
-
}
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
});
|
|
4152
|
+
} : {}
|
|
4153
|
+
);
|
|
4154
|
+
const server = await vite.createServer(config);
|
|
4155
|
+
await server.listen(4201);
|
|
4203
4156
|
onStart?.();
|
|
4204
4157
|
if (open2)
|
|
4205
4158
|
setTimeout(() => (0, import_open.default)("http://localhost:4201"), 3e3);
|
|
4159
|
+
return { server, eventEmitter };
|
|
4206
4160
|
}
|
|
4207
4161
|
async buildIos(app) {
|
|
4208
4162
|
const capacitorApp = await new CapacitorApp(app).init();
|
|
@@ -4496,7 +4450,16 @@ var ApplicationScript = class {
|
|
|
4496
4450
|
await this.syncApplication(app);
|
|
4497
4451
|
if (app.workspace.getBaseDevEnv().env === "local")
|
|
4498
4452
|
await this.dbup(app.workspace);
|
|
4499
|
-
await this
|
|
4453
|
+
const backend = await this.startBackend(app, { open: open2, withInk: true });
|
|
4454
|
+
const frontend = await this.startFrontend(app, { open: open2, withInk: true });
|
|
4455
|
+
const { server: csrServer, eventEmitter: csr } = await this.startCsr(app, { open: open2, withInk: true });
|
|
4456
|
+
Interface.Start(app.name, backend, frontend, csr, async () => {
|
|
4457
|
+
await csrServer.close();
|
|
4458
|
+
backend.kill();
|
|
4459
|
+
frontend.kill();
|
|
4460
|
+
csr.removeAllListeners();
|
|
4461
|
+
process.exit(0);
|
|
4462
|
+
});
|
|
4500
4463
|
}
|
|
4501
4464
|
async buildBackend(app, { sync = true } = {}) {
|
|
4502
4465
|
if (sync)
|
|
@@ -4505,7 +4468,12 @@ var ApplicationScript = class {
|
|
|
4505
4468
|
await this.#runner.buildBackend(app);
|
|
4506
4469
|
spinner.succeed(`Backend built in dist/apps/${app.name}/backend`);
|
|
4507
4470
|
}
|
|
4508
|
-
async startBackend(app, {
|
|
4471
|
+
async startBackend(app, {
|
|
4472
|
+
open: open2 = false,
|
|
4473
|
+
dbup = true,
|
|
4474
|
+
sync = true,
|
|
4475
|
+
withInk = false
|
|
4476
|
+
} = {}) {
|
|
4509
4477
|
if (app.getEnv() === "local" && dbup) {
|
|
4510
4478
|
await this.dbup(app.workspace);
|
|
4511
4479
|
process.on("SIGINT", async () => {
|
|
@@ -4516,12 +4484,14 @@ var ApplicationScript = class {
|
|
|
4516
4484
|
if (sync)
|
|
4517
4485
|
await this.syncApplication(app);
|
|
4518
4486
|
const spinner = app.spinning("Preparing backend...");
|
|
4519
|
-
await this.#runner.startBackend(app, {
|
|
4487
|
+
const childProcess = await this.#runner.startBackend(app, {
|
|
4520
4488
|
open: open2,
|
|
4521
4489
|
onStart: () => {
|
|
4522
4490
|
spinner.succeed(`Backend prepared, ready to start`);
|
|
4523
|
-
}
|
|
4491
|
+
},
|
|
4492
|
+
withInk
|
|
4524
4493
|
});
|
|
4494
|
+
return childProcess;
|
|
4525
4495
|
}
|
|
4526
4496
|
async buildFrontend(app, { sync = true, standalone = false } = {}) {
|
|
4527
4497
|
if (sync)
|
|
@@ -4534,17 +4504,24 @@ var ApplicationScript = class {
|
|
|
4534
4504
|
spinner.succeed(`Frontend built in dist/apps/${app.name}/frontend`);
|
|
4535
4505
|
}
|
|
4536
4506
|
}
|
|
4537
|
-
async startFrontend(app, {
|
|
4507
|
+
async startFrontend(app, {
|
|
4508
|
+
open: open2 = false,
|
|
4509
|
+
turbo = false,
|
|
4510
|
+
sync = true,
|
|
4511
|
+
withInk = false
|
|
4512
|
+
} = {}) {
|
|
4538
4513
|
if (sync)
|
|
4539
4514
|
await this.syncApplication(app);
|
|
4540
4515
|
const spinner = app.spinning("Preparing frontend...");
|
|
4541
|
-
await this.#runner.startFrontend(app, {
|
|
4516
|
+
const childProcess = await this.#runner.startFrontend(app, {
|
|
4542
4517
|
open: open2,
|
|
4543
4518
|
turbo,
|
|
4544
4519
|
onStart: () => {
|
|
4545
4520
|
spinner.succeed(`Frontend prepared, ready to start`);
|
|
4546
|
-
}
|
|
4521
|
+
},
|
|
4522
|
+
withInk
|
|
4547
4523
|
});
|
|
4524
|
+
return childProcess;
|
|
4548
4525
|
}
|
|
4549
4526
|
async buildCsr(app, { sync = true } = {}) {
|
|
4550
4527
|
if (sync)
|
|
@@ -4553,14 +4530,16 @@ var ApplicationScript = class {
|
|
|
4553
4530
|
await this.#runner.buildCsr(app);
|
|
4554
4531
|
spinner.succeed(`Successfully built in dist/apps/${app.name}/csr`);
|
|
4555
4532
|
}
|
|
4556
|
-
async startCsr(app, { open: open2 = false, sync = true } = {}) {
|
|
4533
|
+
async startCsr(app, { open: open2 = false, sync = true, withInk = false } = {}) {
|
|
4557
4534
|
if (sync)
|
|
4558
4535
|
await this.syncApplication(app);
|
|
4559
|
-
this.#runner.startCsr(app, {
|
|
4536
|
+
const { eventEmitter, server } = await this.#runner.startCsr(app, {
|
|
4560
4537
|
open: open2,
|
|
4561
4538
|
onStart: () => {
|
|
4562
|
-
}
|
|
4539
|
+
},
|
|
4540
|
+
withInk
|
|
4563
4541
|
});
|
|
4542
|
+
return { eventEmitter, server };
|
|
4564
4543
|
}
|
|
4565
4544
|
async buildIos(app, { sync = true } = {}) {
|
|
4566
4545
|
if (sync)
|