@akanjs/cli 0.9.21 → 0.9.23
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 +282 -296
- package/esm/index.js +282 -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
|
-
|
|
3566
|
+
if (key.tab) {
|
|
3567
|
+
setTabIndex((prev) => (prev + 1) % logList.length);
|
|
3580
3568
|
setScrollPos(0);
|
|
3581
|
-
}
|
|
3582
|
-
if (input6 === " " && isRunning) {
|
|
3583
3569
|
setIsRunning(false);
|
|
3584
|
-
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
|
-
setIsRunning(false);
|
|
3622
|
-
}
|
|
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
3570
|
}
|
|
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,285 @@ 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) => {
|
|
3653
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { key: index }, index, ": ", log));
|
|
3654
|
+
}), /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { backgroundColor: "green" }, "Scrolling... +", scrollPos)) : focusLog.map((log, index) => {
|
|
3655
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_ink2.Text, { key: index }, index, ": ", log));
|
|
3656
|
+
})
|
|
3657
|
+
))), /* @__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
3658
|
};
|
|
3741
3659
|
|
|
3742
|
-
// pkgs/@akanjs/cli/src/application/
|
|
3743
|
-
var Backend = ({
|
|
3744
|
-
const [logs, setLogs] = (0,
|
|
3660
|
+
// pkgs/@akanjs/cli/src/application/application.interface.tsx
|
|
3661
|
+
var Backend = ({ appName, childProcess, onExit }) => {
|
|
3662
|
+
const [logs, setLogs] = (0, import_react3.useState)([]);
|
|
3745
3663
|
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) => {
|
|
3664
|
+
(0, import_react3.useEffect)(() => {
|
|
3665
|
+
childProcess.stdout?.on("data", (data) => {
|
|
3753
3666
|
const newOutput = data.toString().split("\n");
|
|
3754
3667
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3755
3668
|
});
|
|
3756
|
-
|
|
3669
|
+
childProcess.stderr?.on("data", (data) => {
|
|
3757
3670
|
const newOutput = data.toString().split("\n");
|
|
3758
3671
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3759
3672
|
});
|
|
3760
3673
|
return () => {
|
|
3761
|
-
|
|
3674
|
+
childProcess.kill();
|
|
3675
|
+
onExit();
|
|
3762
3676
|
};
|
|
3763
3677
|
}, []);
|
|
3764
|
-
return /* @__PURE__ */
|
|
3678
|
+
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
3679
|
};
|
|
3766
|
-
var Frontend = ({
|
|
3767
|
-
const [logs, setLogs] = (0,
|
|
3680
|
+
var Frontend = ({ appName, childProcess, onExit }) => {
|
|
3681
|
+
const [logs, setLogs] = (0, import_react3.useState)([]);
|
|
3768
3682
|
const [width, height] = useStdoutDimensions();
|
|
3769
|
-
(0,
|
|
3770
|
-
|
|
3771
|
-
env,
|
|
3772
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
3773
|
-
detached: true
|
|
3774
|
-
});
|
|
3775
|
-
proc.stdout?.on("data", (data) => {
|
|
3683
|
+
(0, import_react3.useEffect)(() => {
|
|
3684
|
+
childProcess.stdout?.on("data", (data) => {
|
|
3776
3685
|
const newOutput = data.toString().split("\n");
|
|
3777
3686
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3778
3687
|
});
|
|
3779
|
-
|
|
3688
|
+
childProcess.stderr?.on("data", (data) => {
|
|
3780
3689
|
const newOutput = data.toString().split("\n");
|
|
3781
3690
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3782
3691
|
});
|
|
3783
3692
|
return () => {
|
|
3784
|
-
|
|
3693
|
+
childProcess.kill();
|
|
3694
|
+
onExit();
|
|
3785
3695
|
};
|
|
3786
3696
|
}, []);
|
|
3787
|
-
return /* @__PURE__ */
|
|
3697
|
+
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
3698
|
};
|
|
3789
|
-
var Csr = ({
|
|
3790
|
-
|
|
3791
|
-
onLoad
|
|
3792
|
-
}) => {
|
|
3793
|
-
const [logs, setLogs] = (0, import_react4.useState)([]);
|
|
3699
|
+
var Csr = ({ app, event, onExit }) => {
|
|
3700
|
+
const [logs, setLogs] = (0, import_react3.useState)([]);
|
|
3794
3701
|
const [width, height] = useStdoutDimensions();
|
|
3795
|
-
(0,
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3702
|
+
const [test, setTest] = (0, import_react3.useState)(false);
|
|
3703
|
+
(0, import_react3.useEffect)(() => {
|
|
3704
|
+
event.on("info", (msg) => {
|
|
3705
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3706
|
+
});
|
|
3707
|
+
event.on("warn", (msg) => {
|
|
3708
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3709
|
+
});
|
|
3710
|
+
event.on("warnOnce", (msg) => {
|
|
3711
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3712
|
+
});
|
|
3713
|
+
event.on("error", (msg) => {
|
|
3714
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3715
|
+
});
|
|
3716
|
+
event.on("clearScreen", (type) => {
|
|
3717
|
+
setLogs((prevLogs) => [...prevLogs, type]);
|
|
3800
3718
|
});
|
|
3801
3719
|
}, []);
|
|
3802
|
-
return /* @__PURE__ */
|
|
3720
|
+
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
3721
|
};
|
|
3804
|
-
var Start = ({
|
|
3805
|
-
app,
|
|
3806
|
-
backendEnv,
|
|
3807
|
-
frontendEnv,
|
|
3808
|
-
onLoadCsr
|
|
3809
|
-
}) => {
|
|
3722
|
+
var Start = ({ appName, bcp, fcp, csr, onExit, maxLength = 100 }) => {
|
|
3810
3723
|
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
|
-
|
|
3724
|
+
const [csrLogs, setCsrLogs] = (0, import_react3.useState)([]);
|
|
3725
|
+
const [backendLogs, setBackendLogs] = (0, import_react3.useState)([]);
|
|
3726
|
+
const [frontendLogs, setFrontendLogs] = (0, import_react3.useState)([]);
|
|
3727
|
+
const { exit } = (0, import_ink3.useApp)();
|
|
3728
|
+
const filterLogData = (data) => {
|
|
3729
|
+
return typeof data === "string" ? data.split(/\r?\n/).filter((line) => line !== "") : data.toString().split(/\r?\n/).filter((line) => line !== "");
|
|
3730
|
+
};
|
|
3731
|
+
const saveLog = (type, data, setLog) => {
|
|
3732
|
+
const newOutput = filterLogData(data);
|
|
3733
|
+
const logs = newOutput.map((line) => ({ type, content: line }));
|
|
3734
|
+
setLog((currentLogs) => {
|
|
3735
|
+
if (currentLogs.length >= maxLength) {
|
|
3736
|
+
return [...currentLogs.slice(logs.length, maxLength), ...logs];
|
|
3737
|
+
} else if (currentLogs.length < maxLength && currentLogs.length + logs.length > maxLength) {
|
|
3738
|
+
return [...currentLogs.slice(Math.abs(maxLength - currentLogs.length - logs.length), maxLength), ...logs];
|
|
3739
|
+
} else
|
|
3740
|
+
return [...currentLogs, ...logs];
|
|
3821
3741
|
});
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
detached: true
|
|
3742
|
+
};
|
|
3743
|
+
(0, import_react3.useEffect)(() => {
|
|
3744
|
+
bcp.stdout?.on("data", (data) => {
|
|
3745
|
+
saveLog("stdout", data, setBackendLogs);
|
|
3827
3746
|
});
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
setBackendLogs((currentLogs) => [
|
|
3831
|
-
...currentLogs,
|
|
3832
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3833
|
-
]);
|
|
3747
|
+
bcp.stderr?.on("data", (data) => {
|
|
3748
|
+
saveLog("stderr", data, setBackendLogs);
|
|
3834
3749
|
});
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
setBackendLogs((currentLogs) => [
|
|
3838
|
-
...currentLogs,
|
|
3839
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3840
|
-
]);
|
|
3750
|
+
fcp.stdout?.on("data", (data) => {
|
|
3751
|
+
saveLog("stdout", data, setFrontendLogs);
|
|
3841
3752
|
});
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
setFrontendLogs((currentLogs) => [
|
|
3845
|
-
...currentLogs,
|
|
3846
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3847
|
-
]);
|
|
3753
|
+
fcp.stderr?.on("data", (data) => {
|
|
3754
|
+
saveLog("stderr", data, setFrontendLogs);
|
|
3848
3755
|
});
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
setFrontendLogs((currentLogs) => [
|
|
3852
|
-
...currentLogs,
|
|
3853
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3854
|
-
]);
|
|
3756
|
+
csr.on("info", (msg) => {
|
|
3757
|
+
saveLog("info", msg, setCsrLogs);
|
|
3855
3758
|
});
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
3859
|
-
|
|
3759
|
+
csr.on("warn", (msg) => {
|
|
3760
|
+
saveLog("warn", msg, setCsrLogs);
|
|
3761
|
+
});
|
|
3762
|
+
csr.on("error", (msg) => {
|
|
3763
|
+
saveLog("error", msg, setCsrLogs);
|
|
3764
|
+
});
|
|
3765
|
+
csr.on("clearScreen", (type) => {
|
|
3766
|
+
saveLog("clearScreen", type, setCsrLogs);
|
|
3767
|
+
});
|
|
3768
|
+
const destroy = async () => {
|
|
3769
|
+
bcp.kill();
|
|
3770
|
+
fcp.kill();
|
|
3771
|
+
bcp.stdin?.end();
|
|
3772
|
+
fcp.stdin?.end();
|
|
3773
|
+
csr.removeAllListeners();
|
|
3774
|
+
await onExit();
|
|
3775
|
+
exit();
|
|
3776
|
+
process.exit(0);
|
|
3777
|
+
};
|
|
3778
|
+
process.on("SIGINT", () => {
|
|
3779
|
+
void destroy();
|
|
3860
3780
|
});
|
|
3861
3781
|
return () => {
|
|
3862
|
-
|
|
3863
|
-
frontend.kill();
|
|
3782
|
+
void destroy();
|
|
3864
3783
|
};
|
|
3865
3784
|
}, []);
|
|
3866
|
-
return /* @__PURE__ */
|
|
3785
|
+
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
3786
|
MultiScrollList,
|
|
3868
3787
|
{
|
|
3869
3788
|
logList: [
|
|
3870
3789
|
{
|
|
3871
|
-
title: `${
|
|
3790
|
+
title: `${appName} frontend`,
|
|
3872
3791
|
logs: frontendLogs.map((log) => log.content),
|
|
3873
3792
|
color: "#ff493b"
|
|
3874
3793
|
},
|
|
3875
3794
|
{
|
|
3876
|
-
title: `${
|
|
3795
|
+
title: `${appName} backend`,
|
|
3877
3796
|
logs: backendLogs.map((log) => log.content),
|
|
3878
3797
|
color: "#e535ab"
|
|
3879
3798
|
},
|
|
3880
3799
|
{
|
|
3881
|
-
title: `${
|
|
3800
|
+
title: `${appName} react`,
|
|
3882
3801
|
logs: csrLogs.map((log) => log.content),
|
|
3883
3802
|
color: "#7cc5d9"
|
|
3884
3803
|
}
|
|
3885
|
-
]
|
|
3804
|
+
],
|
|
3805
|
+
maxLength
|
|
3886
3806
|
}
|
|
3887
3807
|
)));
|
|
3888
3808
|
};
|
|
3889
3809
|
var Interface = {
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3810
|
+
/**
|
|
3811
|
+
* Akan CSR 실행 컴포넌트
|
|
3812
|
+
*
|
|
3813
|
+
* @param app 앱 정보
|
|
3814
|
+
* @param event CSR 이벤트 발생기
|
|
3815
|
+
* @param onExit 종료 함수
|
|
3816
|
+
*/
|
|
3817
|
+
Csr: (app, event, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Csr, { app, event, onExit })),
|
|
3818
|
+
/**
|
|
3819
|
+
* Akan Backend 실행 컴포넌트
|
|
3820
|
+
*
|
|
3821
|
+
* @param appName 앱 이름
|
|
3822
|
+
* @param childProcess 백엔드 차일드 프로세스
|
|
3823
|
+
* @param onExit 종료 함수
|
|
3824
|
+
*/
|
|
3825
|
+
Backend: (appName, childProcess, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Backend, { appName, childProcess, onExit })),
|
|
3826
|
+
/**
|
|
3827
|
+
* Akan Frontend 실행 컴포넌트
|
|
3828
|
+
*
|
|
3829
|
+
* @param appName 앱 이름
|
|
3830
|
+
* @param childProcess 프론트엔드 차일드 프로세스
|
|
3831
|
+
* @param onExit 종료 함수
|
|
3832
|
+
*/
|
|
3833
|
+
Frontend: (appName, childProcess, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Frontend, { appName, childProcess, onExit })),
|
|
3834
|
+
/**
|
|
3835
|
+
* Akan application 통합 실행 컴포넌트 (백엔드, 프론트엔드, React(CSR))
|
|
3836
|
+
*
|
|
3837
|
+
* @param maxLength 로그 최대 길이
|
|
3838
|
+
* @param appName 앱 이름
|
|
3839
|
+
* @param bcp 백엔드 차일드 프로세스
|
|
3840
|
+
* @param fcp 프론트엔드 차일드 프로세스
|
|
3841
|
+
* @param csr CSR 이벤트 발생기
|
|
3842
|
+
* @param onExit 종료 함수
|
|
3843
|
+
*/
|
|
3844
|
+
Start: (appName, bcp, fcp, csr, onExit) => renderManager(/* @__PURE__ */ import_react3.default.createElement(Start, { appName, bcp, fcp, csr, onExit }))
|
|
3845
|
+
};
|
|
3846
|
+
var renderManager = (component) => {
|
|
3847
|
+
const renderFn = (0, import_ink3.render)(component);
|
|
3848
|
+
return renderFn;
|
|
3894
3849
|
};
|
|
3895
3850
|
|
|
3896
3851
|
// pkgs/@akanjs/cli/src/application/application.runner.ts
|
|
3852
|
+
var import_node_events = __toESM(require("node:events"), 1);
|
|
3853
|
+
var import_prompts6 = require("@inquirer/prompts");
|
|
3854
|
+
var import_output_parsers = require("@langchain/core/output_parsers");
|
|
3855
|
+
var import_prompts7 = require("@langchain/core/prompts");
|
|
3856
|
+
var import_runnables2 = require("@langchain/core/runnables");
|
|
3857
|
+
var import_openai3 = require("@langchain/openai");
|
|
3858
|
+
var import_plugin_react = __toESM(require("@vitejs/plugin-react"), 1);
|
|
3859
|
+
var import_dotenv3 = __toESM(require("dotenv"), 1);
|
|
3860
|
+
var esbuild2 = __toESM(require("esbuild"), 1);
|
|
3861
|
+
var import_fs10 = __toESM(require("fs"), 1);
|
|
3862
|
+
var import_promises3 = __toESM(require("fs/promises"), 1);
|
|
3863
|
+
var import_js_yaml2 = __toESM(require("js-yaml"), 1);
|
|
3864
|
+
var import_open = __toESM(require("open"), 1);
|
|
3865
|
+
var import_ora3 = __toESM(require("ora"), 1);
|
|
3866
|
+
var import_path4 = __toESM(require("path"), 1);
|
|
3867
|
+
var vite = __toESM(require("vite"), 1);
|
|
3868
|
+
var import_vite_plugin_commonjs = __toESM(require("vite-plugin-commonjs"), 1);
|
|
3869
|
+
var import_vite_plugin_node_polyfills = require("vite-plugin-node-polyfills");
|
|
3870
|
+
var import_vite_tsconfig_paths = __toESM(require("vite-tsconfig-paths"), 1);
|
|
3897
3871
|
var ApplicationRunner = class {
|
|
3898
3872
|
async createApplication(appName, workspace) {
|
|
3899
3873
|
await workspace.applyTemplate({
|
|
@@ -3921,34 +3895,6 @@ var ApplicationRunner = class {
|
|
|
3921
3895
|
await app.syncAssets(scanResult.akanConfig.libs);
|
|
3922
3896
|
return scanResult;
|
|
3923
3897
|
}
|
|
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
3898
|
async getScriptFilename(app) {
|
|
3953
3899
|
if (!app.exists("scripts")) {
|
|
3954
3900
|
app.mkdir("scripts");
|
|
@@ -4028,7 +3974,7 @@ var ApplicationRunner = class {
|
|
|
4028
3974
|
app.dist.writeJson("backend/package.json", appPackageJson);
|
|
4029
3975
|
app.dist.writeFile(import_path4.default.join(app.dist.cwdPath, "backend", "Dockerfile"), akanConfig.backend.docker.content);
|
|
4030
3976
|
}
|
|
4031
|
-
async startBackend(app, { open: open2 = false, onStart } = {}) {
|
|
3977
|
+
async startBackend(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4032
3978
|
const { env } = await this.#prepareCommand(app, "start", "backend");
|
|
4033
3979
|
const ctx = await esbuild2.context({
|
|
4034
3980
|
write: true,
|
|
@@ -4045,7 +3991,11 @@ var ApplicationRunner = class {
|
|
|
4045
3991
|
onStart?.();
|
|
4046
3992
|
if (open2)
|
|
4047
3993
|
setTimeout(() => (0, import_open.default)("http://localhost:8080/backend/graphql"), 3e3);
|
|
4048
|
-
|
|
3994
|
+
return app.dist.spawnSync("node", ["--watch", "main.js"], {
|
|
3995
|
+
env,
|
|
3996
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit",
|
|
3997
|
+
cwd: `${app.dist.cwdPath}/backend`
|
|
3998
|
+
});
|
|
4049
3999
|
}
|
|
4050
4000
|
async buildFrontend(app, { spawnOptions } = {}) {
|
|
4051
4001
|
const { env } = await this.#prepareCommand(app, "build", "frontend");
|
|
@@ -4079,12 +4029,20 @@ var ApplicationRunner = class {
|
|
|
4079
4029
|
]);
|
|
4080
4030
|
app.dist.writeFile("frontend/Dockerfile", akanConfig.frontend.docker.content);
|
|
4081
4031
|
}
|
|
4082
|
-
async startFrontend(app, {
|
|
4032
|
+
async startFrontend(app, {
|
|
4033
|
+
open: open2 = false,
|
|
4034
|
+
turbo = true,
|
|
4035
|
+
onStart,
|
|
4036
|
+
withInk = false
|
|
4037
|
+
} = {}) {
|
|
4083
4038
|
const { env } = await this.#prepareCommand(app, "start", "frontend");
|
|
4084
4039
|
if (open2)
|
|
4085
4040
|
setTimeout(() => (0, import_open.default)("http://localhost:4200"), 3e3);
|
|
4086
4041
|
onStart?.();
|
|
4087
|
-
|
|
4042
|
+
return app.spawnSync("npx", ["next", "dev", "-p", "4200", ...turbo ? ["--turbo"] : []], {
|
|
4043
|
+
env,
|
|
4044
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit"
|
|
4045
|
+
});
|
|
4088
4046
|
}
|
|
4089
4047
|
async #getViteConfig(app, command, viteConfig = {}) {
|
|
4090
4048
|
const { env } = await this.#prepareCommand(app, command, "csr");
|
|
@@ -4172,38 +4130,41 @@ var ApplicationRunner = class {
|
|
|
4172
4130
|
const config = await this.#getViteConfig(app, "build");
|
|
4173
4131
|
await vite.build(config);
|
|
4174
4132
|
}
|
|
4175
|
-
startCsr(app, { open: open2 = false, onStart } = {}) {
|
|
4176
|
-
|
|
4177
|
-
|
|
4133
|
+
async startCsr(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4134
|
+
const eventEmitter = new import_node_events.default();
|
|
4135
|
+
const config = await this.#getViteConfig(
|
|
4136
|
+
app,
|
|
4137
|
+
"start",
|
|
4138
|
+
withInk ? {
|
|
4178
4139
|
customLogger: {
|
|
4179
4140
|
info: (msg) => {
|
|
4180
|
-
|
|
4141
|
+
eventEmitter.emit("info", msg);
|
|
4181
4142
|
},
|
|
4182
4143
|
warn: (msg) => {
|
|
4183
|
-
|
|
4144
|
+
eventEmitter.emit("warn", msg);
|
|
4184
4145
|
},
|
|
4185
4146
|
warnOnce: (msg) => {
|
|
4186
|
-
|
|
4147
|
+
eventEmitter.emit("warnOnce", msg);
|
|
4187
4148
|
},
|
|
4188
4149
|
error: (msg) => {
|
|
4189
|
-
|
|
4150
|
+
eventEmitter.emit("error", msg);
|
|
4190
4151
|
},
|
|
4191
4152
|
clearScreen: (type) => {
|
|
4192
|
-
|
|
4153
|
+
eventEmitter.emit("clearScreen", type);
|
|
4193
4154
|
},
|
|
4194
4155
|
hasErrorLogged: (error) => {
|
|
4195
4156
|
return false;
|
|
4196
4157
|
},
|
|
4197
4158
|
hasWarned: false
|
|
4198
4159
|
}
|
|
4199
|
-
}
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
});
|
|
4160
|
+
} : {}
|
|
4161
|
+
);
|
|
4162
|
+
const server = await vite.createServer(config);
|
|
4163
|
+
await server.listen(4201);
|
|
4204
4164
|
onStart?.();
|
|
4205
4165
|
if (open2)
|
|
4206
4166
|
setTimeout(() => (0, import_open.default)("http://localhost:4201"), 3e3);
|
|
4167
|
+
return { server, eventEmitter };
|
|
4207
4168
|
}
|
|
4208
4169
|
async buildIos(app) {
|
|
4209
4170
|
const capacitorApp = await new CapacitorApp(app).init();
|
|
@@ -4497,7 +4458,16 @@ var ApplicationScript = class {
|
|
|
4497
4458
|
await this.syncApplication(app);
|
|
4498
4459
|
if (app.workspace.getBaseDevEnv().env === "local")
|
|
4499
4460
|
await this.dbup(app.workspace);
|
|
4500
|
-
await this
|
|
4461
|
+
const backend = await this.startBackend(app, { open: open2, withInk: true });
|
|
4462
|
+
const frontend = await this.startFrontend(app, { open: open2, withInk: true });
|
|
4463
|
+
const { server: csrServer, eventEmitter: csr } = await this.startCsr(app, { open: open2, withInk: true });
|
|
4464
|
+
Interface.Start(app.name, backend, frontend, csr, async () => {
|
|
4465
|
+
await csrServer.close();
|
|
4466
|
+
backend.kill();
|
|
4467
|
+
frontend.kill();
|
|
4468
|
+
csr.removeAllListeners();
|
|
4469
|
+
process.exit(0);
|
|
4470
|
+
});
|
|
4501
4471
|
}
|
|
4502
4472
|
async buildBackend(app, { sync = true } = {}) {
|
|
4503
4473
|
if (sync)
|
|
@@ -4506,7 +4476,12 @@ var ApplicationScript = class {
|
|
|
4506
4476
|
await this.#runner.buildBackend(app);
|
|
4507
4477
|
spinner.succeed(`Backend built in dist/apps/${app.name}/backend`);
|
|
4508
4478
|
}
|
|
4509
|
-
async startBackend(app, {
|
|
4479
|
+
async startBackend(app, {
|
|
4480
|
+
open: open2 = false,
|
|
4481
|
+
dbup = true,
|
|
4482
|
+
sync = true,
|
|
4483
|
+
withInk = false
|
|
4484
|
+
} = {}) {
|
|
4510
4485
|
if (app.getEnv() === "local" && dbup) {
|
|
4511
4486
|
await this.dbup(app.workspace);
|
|
4512
4487
|
process.on("SIGINT", async () => {
|
|
@@ -4517,12 +4492,14 @@ var ApplicationScript = class {
|
|
|
4517
4492
|
if (sync)
|
|
4518
4493
|
await this.syncApplication(app);
|
|
4519
4494
|
const spinner = app.spinning("Preparing backend...");
|
|
4520
|
-
await this.#runner.startBackend(app, {
|
|
4495
|
+
const childProcess = await this.#runner.startBackend(app, {
|
|
4521
4496
|
open: open2,
|
|
4522
4497
|
onStart: () => {
|
|
4523
4498
|
spinner.succeed(`Backend prepared, ready to start`);
|
|
4524
|
-
}
|
|
4499
|
+
},
|
|
4500
|
+
withInk
|
|
4525
4501
|
});
|
|
4502
|
+
return childProcess;
|
|
4526
4503
|
}
|
|
4527
4504
|
async buildFrontend(app, { sync = true, standalone = false } = {}) {
|
|
4528
4505
|
if (sync)
|
|
@@ -4535,17 +4512,24 @@ var ApplicationScript = class {
|
|
|
4535
4512
|
spinner.succeed(`Frontend built in dist/apps/${app.name}/frontend`);
|
|
4536
4513
|
}
|
|
4537
4514
|
}
|
|
4538
|
-
async startFrontend(app, {
|
|
4515
|
+
async startFrontend(app, {
|
|
4516
|
+
open: open2 = false,
|
|
4517
|
+
turbo = false,
|
|
4518
|
+
sync = true,
|
|
4519
|
+
withInk = false
|
|
4520
|
+
} = {}) {
|
|
4539
4521
|
if (sync)
|
|
4540
4522
|
await this.syncApplication(app);
|
|
4541
4523
|
const spinner = app.spinning("Preparing frontend...");
|
|
4542
|
-
await this.#runner.startFrontend(app, {
|
|
4524
|
+
const childProcess = await this.#runner.startFrontend(app, {
|
|
4543
4525
|
open: open2,
|
|
4544
4526
|
turbo,
|
|
4545
4527
|
onStart: () => {
|
|
4546
4528
|
spinner.succeed(`Frontend prepared, ready to start`);
|
|
4547
|
-
}
|
|
4529
|
+
},
|
|
4530
|
+
withInk
|
|
4548
4531
|
});
|
|
4532
|
+
return childProcess;
|
|
4549
4533
|
}
|
|
4550
4534
|
async buildCsr(app, { sync = true } = {}) {
|
|
4551
4535
|
if (sync)
|
|
@@ -4554,14 +4538,16 @@ var ApplicationScript = class {
|
|
|
4554
4538
|
await this.#runner.buildCsr(app);
|
|
4555
4539
|
spinner.succeed(`Successfully built in dist/apps/${app.name}/csr`);
|
|
4556
4540
|
}
|
|
4557
|
-
async startCsr(app, { open: open2 = false, sync = true } = {}) {
|
|
4541
|
+
async startCsr(app, { open: open2 = false, sync = true, withInk = false } = {}) {
|
|
4558
4542
|
if (sync)
|
|
4559
4543
|
await this.syncApplication(app);
|
|
4560
|
-
this.#runner.startCsr(app, {
|
|
4544
|
+
const { eventEmitter, server } = await this.#runner.startCsr(app, {
|
|
4561
4545
|
open: open2,
|
|
4562
4546
|
onStart: () => {
|
|
4563
|
-
}
|
|
4547
|
+
},
|
|
4548
|
+
withInk
|
|
4564
4549
|
});
|
|
4550
|
+
return { eventEmitter, server };
|
|
4565
4551
|
}
|
|
4566
4552
|
async buildIos(app, { sync = true } = {}) {
|
|
4567
4553
|
if (sync)
|