@akanjs/cli 0.9.21 → 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 -296
- package/esm/index.js +274 -296
- 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,231 +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
|
-
|
|
3820
|
-
|
|
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];
|
|
3821
3737
|
});
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
detached: true
|
|
3738
|
+
};
|
|
3739
|
+
(0, import_react3.useEffect)(() => {
|
|
3740
|
+
bcp.stdout?.on("data", (data) => {
|
|
3741
|
+
saveLog("stdout", data, setBackendLogs);
|
|
3827
3742
|
});
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
setBackendLogs((currentLogs) => [
|
|
3831
|
-
...currentLogs,
|
|
3832
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3833
|
-
]);
|
|
3743
|
+
bcp.stderr?.on("data", (data) => {
|
|
3744
|
+
saveLog("stderr", data, setBackendLogs);
|
|
3834
3745
|
});
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
setBackendLogs((currentLogs) => [
|
|
3838
|
-
...currentLogs,
|
|
3839
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3840
|
-
]);
|
|
3746
|
+
fcp.stdout?.on("data", (data) => {
|
|
3747
|
+
saveLog("stdout", data, setFrontendLogs);
|
|
3841
3748
|
});
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
setFrontendLogs((currentLogs) => [
|
|
3845
|
-
...currentLogs,
|
|
3846
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3847
|
-
]);
|
|
3749
|
+
fcp.stderr?.on("data", (data) => {
|
|
3750
|
+
saveLog("stderr", data, setFrontendLogs);
|
|
3848
3751
|
});
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
setFrontendLogs((currentLogs) => [
|
|
3852
|
-
...currentLogs,
|
|
3853
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3854
|
-
]);
|
|
3752
|
+
csr.on("info", (msg) => {
|
|
3753
|
+
saveLog("info", msg, setCsrLogs);
|
|
3855
3754
|
});
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
3859
|
-
|
|
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);
|
|
3860
3763
|
});
|
|
3861
3764
|
return () => {
|
|
3862
|
-
|
|
3863
|
-
|
|
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
|
+
})();
|
|
3864
3775
|
};
|
|
3865
3776
|
}, []);
|
|
3866
|
-
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(
|
|
3867
3778
|
MultiScrollList,
|
|
3868
3779
|
{
|
|
3869
3780
|
logList: [
|
|
3870
3781
|
{
|
|
3871
|
-
title: `${
|
|
3782
|
+
title: `${appName} frontend`,
|
|
3872
3783
|
logs: frontendLogs.map((log) => log.content),
|
|
3873
3784
|
color: "#ff493b"
|
|
3874
3785
|
},
|
|
3875
3786
|
{
|
|
3876
|
-
title: `${
|
|
3787
|
+
title: `${appName} backend`,
|
|
3877
3788
|
logs: backendLogs.map((log) => log.content),
|
|
3878
3789
|
color: "#e535ab"
|
|
3879
3790
|
},
|
|
3880
3791
|
{
|
|
3881
|
-
title: `${
|
|
3792
|
+
title: `${appName} react`,
|
|
3882
3793
|
logs: csrLogs.map((log) => log.content),
|
|
3883
3794
|
color: "#7cc5d9"
|
|
3884
3795
|
}
|
|
3885
|
-
]
|
|
3796
|
+
],
|
|
3797
|
+
maxLength
|
|
3886
3798
|
}
|
|
3887
3799
|
)));
|
|
3888
3800
|
};
|
|
3889
3801
|
var Interface = {
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
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;
|
|
3894
3841
|
};
|
|
3895
3842
|
|
|
3896
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);
|
|
3897
3863
|
var ApplicationRunner = class {
|
|
3898
3864
|
async createApplication(appName, workspace) {
|
|
3899
3865
|
await workspace.applyTemplate({
|
|
@@ -3921,34 +3887,6 @@ var ApplicationRunner = class {
|
|
|
3921
3887
|
await app.syncAssets(scanResult.akanConfig.libs);
|
|
3922
3888
|
return scanResult;
|
|
3923
3889
|
}
|
|
3924
|
-
async start(app) {
|
|
3925
|
-
const { env: frontendEnv } = await this.#prepareCommand(app, "start", "frontend");
|
|
3926
|
-
const { env: backendEnv } = await this.#prepareCommand(app, "start", "backend");
|
|
3927
|
-
Interface.Start(app, backendEnv, frontendEnv, async ({ onLog }) => {
|
|
3928
|
-
const config = await this.#getViteConfig(app, "start", {
|
|
3929
|
-
customLogger: {
|
|
3930
|
-
info: (msg) => {
|
|
3931
|
-
onLog(msg);
|
|
3932
|
-
},
|
|
3933
|
-
warn: (msg) => {
|
|
3934
|
-
},
|
|
3935
|
-
warnOnce: (msg) => {
|
|
3936
|
-
},
|
|
3937
|
-
error: (msg) => {
|
|
3938
|
-
onLog(msg);
|
|
3939
|
-
},
|
|
3940
|
-
clearScreen: (type) => {
|
|
3941
|
-
},
|
|
3942
|
-
hasErrorLogged: (error) => {
|
|
3943
|
-
return false;
|
|
3944
|
-
},
|
|
3945
|
-
hasWarned: false
|
|
3946
|
-
}
|
|
3947
|
-
});
|
|
3948
|
-
const server = await vite.createServer(config);
|
|
3949
|
-
await server.listen(4201);
|
|
3950
|
-
});
|
|
3951
|
-
}
|
|
3952
3890
|
async getScriptFilename(app) {
|
|
3953
3891
|
if (!app.exists("scripts")) {
|
|
3954
3892
|
app.mkdir("scripts");
|
|
@@ -4028,7 +3966,7 @@ var ApplicationRunner = class {
|
|
|
4028
3966
|
app.dist.writeJson("backend/package.json", appPackageJson);
|
|
4029
3967
|
app.dist.writeFile(import_path4.default.join(app.dist.cwdPath, "backend", "Dockerfile"), akanConfig.backend.docker.content);
|
|
4030
3968
|
}
|
|
4031
|
-
async startBackend(app, { open: open2 = false, onStart } = {}) {
|
|
3969
|
+
async startBackend(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4032
3970
|
const { env } = await this.#prepareCommand(app, "start", "backend");
|
|
4033
3971
|
const ctx = await esbuild2.context({
|
|
4034
3972
|
write: true,
|
|
@@ -4045,7 +3983,11 @@ var ApplicationRunner = class {
|
|
|
4045
3983
|
onStart?.();
|
|
4046
3984
|
if (open2)
|
|
4047
3985
|
setTimeout(() => (0, import_open.default)("http://localhost:8080/backend/graphql"), 3e3);
|
|
4048
|
-
|
|
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
|
+
});
|
|
4049
3991
|
}
|
|
4050
3992
|
async buildFrontend(app, { spawnOptions } = {}) {
|
|
4051
3993
|
const { env } = await this.#prepareCommand(app, "build", "frontend");
|
|
@@ -4079,12 +4021,20 @@ var ApplicationRunner = class {
|
|
|
4079
4021
|
]);
|
|
4080
4022
|
app.dist.writeFile("frontend/Dockerfile", akanConfig.frontend.docker.content);
|
|
4081
4023
|
}
|
|
4082
|
-
async startFrontend(app, {
|
|
4024
|
+
async startFrontend(app, {
|
|
4025
|
+
open: open2 = false,
|
|
4026
|
+
turbo = true,
|
|
4027
|
+
onStart,
|
|
4028
|
+
withInk = false
|
|
4029
|
+
} = {}) {
|
|
4083
4030
|
const { env } = await this.#prepareCommand(app, "start", "frontend");
|
|
4084
4031
|
if (open2)
|
|
4085
4032
|
setTimeout(() => (0, import_open.default)("http://localhost:4200"), 3e3);
|
|
4086
4033
|
onStart?.();
|
|
4087
|
-
|
|
4034
|
+
return app.spawnSync("npx", ["next", "dev", "-p", "4200", ...turbo ? ["--turbo"] : []], {
|
|
4035
|
+
env,
|
|
4036
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit"
|
|
4037
|
+
});
|
|
4088
4038
|
}
|
|
4089
4039
|
async #getViteConfig(app, command, viteConfig = {}) {
|
|
4090
4040
|
const { env } = await this.#prepareCommand(app, command, "csr");
|
|
@@ -4172,38 +4122,41 @@ var ApplicationRunner = class {
|
|
|
4172
4122
|
const config = await this.#getViteConfig(app, "build");
|
|
4173
4123
|
await vite.build(config);
|
|
4174
4124
|
}
|
|
4175
|
-
startCsr(app, { open: open2 = false, onStart } = {}) {
|
|
4176
|
-
|
|
4177
|
-
|
|
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 ? {
|
|
4178
4131
|
customLogger: {
|
|
4179
4132
|
info: (msg) => {
|
|
4180
|
-
|
|
4133
|
+
eventEmitter.emit("info", msg);
|
|
4181
4134
|
},
|
|
4182
4135
|
warn: (msg) => {
|
|
4183
|
-
|
|
4136
|
+
eventEmitter.emit("warn", msg);
|
|
4184
4137
|
},
|
|
4185
4138
|
warnOnce: (msg) => {
|
|
4186
|
-
|
|
4139
|
+
eventEmitter.emit("warnOnce", msg);
|
|
4187
4140
|
},
|
|
4188
4141
|
error: (msg) => {
|
|
4189
|
-
|
|
4142
|
+
eventEmitter.emit("error", msg);
|
|
4190
4143
|
},
|
|
4191
4144
|
clearScreen: (type) => {
|
|
4192
|
-
|
|
4145
|
+
eventEmitter.emit("clearScreen", type);
|
|
4193
4146
|
},
|
|
4194
4147
|
hasErrorLogged: (error) => {
|
|
4195
4148
|
return false;
|
|
4196
4149
|
},
|
|
4197
4150
|
hasWarned: false
|
|
4198
4151
|
}
|
|
4199
|
-
}
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
});
|
|
4152
|
+
} : {}
|
|
4153
|
+
);
|
|
4154
|
+
const server = await vite.createServer(config);
|
|
4155
|
+
await server.listen(4201);
|
|
4204
4156
|
onStart?.();
|
|
4205
4157
|
if (open2)
|
|
4206
4158
|
setTimeout(() => (0, import_open.default)("http://localhost:4201"), 3e3);
|
|
4159
|
+
return { server, eventEmitter };
|
|
4207
4160
|
}
|
|
4208
4161
|
async buildIos(app) {
|
|
4209
4162
|
const capacitorApp = await new CapacitorApp(app).init();
|
|
@@ -4497,7 +4450,16 @@ var ApplicationScript = class {
|
|
|
4497
4450
|
await this.syncApplication(app);
|
|
4498
4451
|
if (app.workspace.getBaseDevEnv().env === "local")
|
|
4499
4452
|
await this.dbup(app.workspace);
|
|
4500
|
-
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
|
+
});
|
|
4501
4463
|
}
|
|
4502
4464
|
async buildBackend(app, { sync = true } = {}) {
|
|
4503
4465
|
if (sync)
|
|
@@ -4506,7 +4468,12 @@ var ApplicationScript = class {
|
|
|
4506
4468
|
await this.#runner.buildBackend(app);
|
|
4507
4469
|
spinner.succeed(`Backend built in dist/apps/${app.name}/backend`);
|
|
4508
4470
|
}
|
|
4509
|
-
async startBackend(app, {
|
|
4471
|
+
async startBackend(app, {
|
|
4472
|
+
open: open2 = false,
|
|
4473
|
+
dbup = true,
|
|
4474
|
+
sync = true,
|
|
4475
|
+
withInk = false
|
|
4476
|
+
} = {}) {
|
|
4510
4477
|
if (app.getEnv() === "local" && dbup) {
|
|
4511
4478
|
await this.dbup(app.workspace);
|
|
4512
4479
|
process.on("SIGINT", async () => {
|
|
@@ -4517,12 +4484,14 @@ var ApplicationScript = class {
|
|
|
4517
4484
|
if (sync)
|
|
4518
4485
|
await this.syncApplication(app);
|
|
4519
4486
|
const spinner = app.spinning("Preparing backend...");
|
|
4520
|
-
await this.#runner.startBackend(app, {
|
|
4487
|
+
const childProcess = await this.#runner.startBackend(app, {
|
|
4521
4488
|
open: open2,
|
|
4522
4489
|
onStart: () => {
|
|
4523
4490
|
spinner.succeed(`Backend prepared, ready to start`);
|
|
4524
|
-
}
|
|
4491
|
+
},
|
|
4492
|
+
withInk
|
|
4525
4493
|
});
|
|
4494
|
+
return childProcess;
|
|
4526
4495
|
}
|
|
4527
4496
|
async buildFrontend(app, { sync = true, standalone = false } = {}) {
|
|
4528
4497
|
if (sync)
|
|
@@ -4535,17 +4504,24 @@ var ApplicationScript = class {
|
|
|
4535
4504
|
spinner.succeed(`Frontend built in dist/apps/${app.name}/frontend`);
|
|
4536
4505
|
}
|
|
4537
4506
|
}
|
|
4538
|
-
async startFrontend(app, {
|
|
4507
|
+
async startFrontend(app, {
|
|
4508
|
+
open: open2 = false,
|
|
4509
|
+
turbo = false,
|
|
4510
|
+
sync = true,
|
|
4511
|
+
withInk = false
|
|
4512
|
+
} = {}) {
|
|
4539
4513
|
if (sync)
|
|
4540
4514
|
await this.syncApplication(app);
|
|
4541
4515
|
const spinner = app.spinning("Preparing frontend...");
|
|
4542
|
-
await this.#runner.startFrontend(app, {
|
|
4516
|
+
const childProcess = await this.#runner.startFrontend(app, {
|
|
4543
4517
|
open: open2,
|
|
4544
4518
|
turbo,
|
|
4545
4519
|
onStart: () => {
|
|
4546
4520
|
spinner.succeed(`Frontend prepared, ready to start`);
|
|
4547
|
-
}
|
|
4521
|
+
},
|
|
4522
|
+
withInk
|
|
4548
4523
|
});
|
|
4524
|
+
return childProcess;
|
|
4549
4525
|
}
|
|
4550
4526
|
async buildCsr(app, { sync = true } = {}) {
|
|
4551
4527
|
if (sync)
|
|
@@ -4554,14 +4530,16 @@ var ApplicationScript = class {
|
|
|
4554
4530
|
await this.#runner.buildCsr(app);
|
|
4555
4531
|
spinner.succeed(`Successfully built in dist/apps/${app.name}/csr`);
|
|
4556
4532
|
}
|
|
4557
|
-
async startCsr(app, { open: open2 = false, sync = true } = {}) {
|
|
4533
|
+
async startCsr(app, { open: open2 = false, sync = true, withInk = false } = {}) {
|
|
4558
4534
|
if (sync)
|
|
4559
4535
|
await this.syncApplication(app);
|
|
4560
|
-
this.#runner.startCsr(app, {
|
|
4536
|
+
const { eventEmitter, server } = await this.#runner.startCsr(app, {
|
|
4561
4537
|
open: open2,
|
|
4562
4538
|
onStart: () => {
|
|
4563
|
-
}
|
|
4539
|
+
},
|
|
4540
|
+
withInk
|
|
4564
4541
|
});
|
|
4542
|
+
return { eventEmitter, server };
|
|
4565
4543
|
}
|
|
4566
4544
|
async buildIos(app, { sync = true } = {}) {
|
|
4567
4545
|
if (sync)
|