@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/esm/index.js
CHANGED
|
@@ -3523,115 +3523,35 @@ var LibraryScript = class {
|
|
|
3523
3523
|
}
|
|
3524
3524
|
};
|
|
3525
3525
|
|
|
3526
|
-
// pkgs/@akanjs/cli/src/application/application.
|
|
3527
|
-
import {
|
|
3528
|
-
import {
|
|
3529
|
-
import { PromptTemplate as PromptTemplate2 } from "@langchain/core/prompts";
|
|
3530
|
-
import { RunnableSequence as RunnableSequence2 } from "@langchain/core/runnables";
|
|
3531
|
-
import { ChatOpenAI as ChatOpenAI3 } from "@langchain/openai";
|
|
3532
|
-
import react from "@vitejs/plugin-react";
|
|
3533
|
-
import dotenv3 from "dotenv";
|
|
3534
|
-
import * as esbuild2 from "esbuild";
|
|
3535
|
-
import fs14 from "fs";
|
|
3536
|
-
import fsPromise3 from "fs/promises";
|
|
3537
|
-
import yaml2 from "js-yaml";
|
|
3538
|
-
import openBrowser from "open";
|
|
3539
|
-
import ora3 from "ora";
|
|
3540
|
-
import path7 from "path";
|
|
3541
|
-
import * as vite from "vite";
|
|
3542
|
-
import commonjs from "vite-plugin-commonjs";
|
|
3543
|
-
import { nodePolyfills } from "vite-plugin-node-polyfills";
|
|
3544
|
-
import tsconfigPaths from "vite-tsconfig-paths";
|
|
3545
|
-
|
|
3546
|
-
// pkgs/@akanjs/cli/src/application/appilcation.interface.tsx
|
|
3547
|
-
import { Box as Box3, render, Text as Text3 } from "ink";
|
|
3548
|
-
import React3, { useEffect as useEffect4, useState as useState4 } from "react";
|
|
3526
|
+
// pkgs/@akanjs/cli/src/application/application.interface.tsx
|
|
3527
|
+
import { Box as Box2, render, Text as Text2, useApp } from "ink";
|
|
3528
|
+
import React2, { useEffect as useEffect3, useState as useState3 } from "react";
|
|
3549
3529
|
|
|
3550
|
-
// pkgs/@akanjs/cli/ui/
|
|
3530
|
+
// pkgs/@akanjs/cli/ui/MultiScrollList.tsx
|
|
3551
3531
|
import { Box, Newline, Text, useInput } from "ink";
|
|
3552
3532
|
import React, { useEffect as useEffect2, useState as useState2 } from "react";
|
|
3553
|
-
var
|
|
3554
|
-
|
|
3533
|
+
var HEADER_HEIGHT = 1;
|
|
3534
|
+
var FOOTER_HEIGHT = 5;
|
|
3535
|
+
var BORDER_HEIGHT = 2;
|
|
3536
|
+
var MultiScrollList = ({ logList, maxLength = 100 }) => {
|
|
3555
3537
|
const [width, height] = useStdoutDimensions();
|
|
3538
|
+
const [focusLog, setFocusLog] = useState2([]);
|
|
3539
|
+
const [lengthMap, setLengthMap] = useState2(/* @__PURE__ */ new Map());
|
|
3556
3540
|
const [scrollPos, setScrollPos] = useState2(0);
|
|
3541
|
+
const [tabIndex, setTabIndex] = useState2(0);
|
|
3557
3542
|
const [isRunning, setIsRunning] = useState2(false);
|
|
3558
|
-
const [boxHeight, setBoxHeight] = useState2(height -
|
|
3543
|
+
const [boxHeight, setBoxHeight] = useState2(height - HEADER_HEIGHT - FOOTER_HEIGHT - BORDER_HEIGHT);
|
|
3544
|
+
const getLimitedLogs = (logs) => {
|
|
3545
|
+
return logs.length > maxLength ? logs.slice(logs.length - maxLength) : logs;
|
|
3546
|
+
};
|
|
3559
3547
|
useInput((input6, key) => {
|
|
3560
|
-
if (key.
|
|
3561
|
-
|
|
3548
|
+
if (key.tab) {
|
|
3549
|
+
setTabIndex((prev) => (prev + 1) % logList.length);
|
|
3562
3550
|
setScrollPos(0);
|
|
3563
|
-
}
|
|
3564
|
-
if (input6 === " " && isRunning) {
|
|
3565
3551
|
setIsRunning(false);
|
|
3566
|
-
setScrollPos(0);
|
|
3567
|
-
}
|
|
3568
|
-
if (key.downArrow && scrollPos > 0) {
|
|
3569
|
-
if (key.shift) {
|
|
3570
|
-
setScrollPos(scrollPos - 10);
|
|
3571
|
-
} else {
|
|
3572
|
-
setScrollPos(scrollPos - 1);
|
|
3573
|
-
}
|
|
3574
|
-
}
|
|
3575
|
-
if (key.upArrow && scrollPos < list.length - boxHeight) {
|
|
3576
|
-
if (key.shift) {
|
|
3577
|
-
setScrollPos(scrollPos + 10);
|
|
3578
|
-
} else {
|
|
3579
|
-
setScrollPos(scrollPos + 1);
|
|
3580
|
-
}
|
|
3581
|
-
}
|
|
3582
|
-
});
|
|
3583
|
-
useEffect2(() => {
|
|
3584
|
-
if (isRunning) {
|
|
3585
|
-
setScrollPos(scrollPos + 1);
|
|
3586
|
-
return;
|
|
3587
|
-
}
|
|
3588
|
-
if (list.length > boxHeight) {
|
|
3589
|
-
setRenderLogs(list.slice(list.length - boxHeight, list.length));
|
|
3590
|
-
} else {
|
|
3591
|
-
setRenderLogs(list);
|
|
3592
|
-
}
|
|
3593
|
-
}, [list, isRunning]);
|
|
3594
|
-
useEffect2(() => {
|
|
3595
|
-
setBoxHeight(Math.floor(height * 0.9));
|
|
3596
|
-
}, [height]);
|
|
3597
|
-
useEffect2(() => {
|
|
3598
|
-
if (scrollPos > 0) {
|
|
3599
|
-
setRenderLogs(list.slice(list.length - boxHeight - scrollPos, list.length - scrollPos));
|
|
3600
|
-
setIsRunning(true);
|
|
3601
|
-
} else {
|
|
3602
|
-
setRenderLogs(list.slice(list.length - boxHeight, list.length));
|
|
3603
|
-
setIsRunning(false);
|
|
3604
|
-
}
|
|
3605
|
-
}, [scrollPos]);
|
|
3606
|
-
return /* @__PURE__ */ React.createElement(Box, { ...props, width, height: "100%", flexDirection: "column" }, /* @__PURE__ */ React.createElement(Box, { borderStyle: "round", width, height: height - 3 }, /* @__PURE__ */ React.createElement(Newline, null), /* @__PURE__ */ React.createElement(Text, null, isRunning ? /* @__PURE__ */ React.createElement(React.Fragment, null, renderLogs.slice(0, renderLogs.length - 1).map((log, index) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { key: index }, log), /* @__PURE__ */ React.createElement(Newline, null))), /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "scrolling... + ", scrollPos)) : /* @__PURE__ */ React.createElement(React.Fragment, null, renderLogs.map((log, index) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { key: index }, log), /* @__PURE__ */ React.createElement(Newline, null)))))), /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "You can use the following shortcuts:", /* @__PURE__ */ React.createElement(Newline, null), "* ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "up"), " and ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "down"), " to scroll.", " ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "shift"), " to scroll faster.", /* @__PURE__ */ React.createElement(Newline, null), "* ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "escape"), " to stop scrolling.")));
|
|
3607
|
-
};
|
|
3608
|
-
|
|
3609
|
-
// pkgs/@akanjs/cli/ui/MultiScrollList.tsx
|
|
3610
|
-
import { Box as Box2, Newline as Newline2, Text as Text2, useInput as useInput2 } from "ink";
|
|
3611
|
-
import React2, { useEffect as useEffect3, useState as useState3 } from "react";
|
|
3612
|
-
var MultiScrollList = ({ logList }) => {
|
|
3613
|
-
const [width, height] = useStdoutDimensions();
|
|
3614
|
-
const [renderMultiLogs, setRenderMultiLogs] = useState3(
|
|
3615
|
-
Array.from({ length: logList.length }, () => [])
|
|
3616
|
-
);
|
|
3617
|
-
const [lengthMap, setLengthMap] = useState3(/* @__PURE__ */ new Map());
|
|
3618
|
-
const [scrollPos, setScrollPos] = useState3(0);
|
|
3619
|
-
const [tabIndex, setTabIndex] = useState3(null);
|
|
3620
|
-
const [isRunning, setIsRunning] = useState3(false);
|
|
3621
|
-
const [boxHeight, setBoxHeight] = useState3(height - 7);
|
|
3622
|
-
useInput2((input6, key) => {
|
|
3623
|
-
if (key.tab) {
|
|
3624
|
-
if (tabIndex === null) {
|
|
3625
|
-
setTabIndex(0);
|
|
3626
|
-
} else {
|
|
3627
|
-
setTabIndex((prev) => (prev + 1) % logList.length);
|
|
3628
|
-
setIsRunning(false);
|
|
3629
|
-
}
|
|
3630
3552
|
}
|
|
3631
3553
|
if (key.escape) {
|
|
3632
3554
|
setScrollPos(0);
|
|
3633
|
-
if (tabIndex !== null)
|
|
3634
|
-
setTabIndex(null);
|
|
3635
3555
|
setIsRunning(false);
|
|
3636
3556
|
}
|
|
3637
3557
|
if (input6 === " ") {
|
|
@@ -3651,231 +3571,277 @@ var MultiScrollList = ({ logList }) => {
|
|
|
3651
3571
|
setScrollPos(newScrollPos);
|
|
3652
3572
|
}
|
|
3653
3573
|
}
|
|
3654
|
-
if (key.upArrow &&
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
if (
|
|
3658
|
-
|
|
3574
|
+
if (key.upArrow && scrollPos < logList[tabIndex].logs.length - boxHeight) {
|
|
3575
|
+
const limitedLogs = getLimitedLogs(logList[tabIndex].logs);
|
|
3576
|
+
if (scrollPos < limitedLogs.length - boxHeight) {
|
|
3577
|
+
if (key.shift) {
|
|
3578
|
+
const newScrollPos = scrollPos + 10;
|
|
3579
|
+
if (newScrollPos > limitedLogs.length - boxHeight) {
|
|
3580
|
+
setScrollPos(limitedLogs.length - boxHeight);
|
|
3581
|
+
} else {
|
|
3582
|
+
setScrollPos(newScrollPos);
|
|
3583
|
+
}
|
|
3659
3584
|
} else {
|
|
3660
|
-
setScrollPos(
|
|
3585
|
+
setScrollPos(scrollPos + 1);
|
|
3661
3586
|
}
|
|
3662
|
-
|
|
3663
|
-
|
|
3587
|
+
if (!isRunning)
|
|
3588
|
+
setIsRunning(true);
|
|
3664
3589
|
}
|
|
3665
|
-
if (!isRunning)
|
|
3666
|
-
setIsRunning(true);
|
|
3667
3590
|
}
|
|
3668
3591
|
});
|
|
3669
|
-
|
|
3592
|
+
useEffect2(() => {
|
|
3670
3593
|
const getLogsToRender = (logs, index) => {
|
|
3594
|
+
const limitedLogs = getLimitedLogs(logs);
|
|
3671
3595
|
if (scrollPos > 0 && tabIndex === index) {
|
|
3672
|
-
return
|
|
3673
|
-
} else if (
|
|
3674
|
-
return
|
|
3596
|
+
return limitedLogs.slice(limitedLogs.length - boxHeight - scrollPos, limitedLogs.length - scrollPos);
|
|
3597
|
+
} else if (limitedLogs.length > boxHeight) {
|
|
3598
|
+
return limitedLogs.slice(limitedLogs.length - boxHeight, limitedLogs.length);
|
|
3675
3599
|
} else {
|
|
3676
|
-
return
|
|
3600
|
+
return limitedLogs;
|
|
3677
3601
|
}
|
|
3678
3602
|
};
|
|
3679
3603
|
if (isRunning) {
|
|
3680
|
-
if (
|
|
3604
|
+
if (lengthMap.has(tabIndex)) {
|
|
3681
3605
|
const tabLength = lengthMap.get(tabIndex);
|
|
3682
|
-
|
|
3606
|
+
const limitedLogsLength = Math.min(logList[tabIndex].logs.length, maxLength);
|
|
3607
|
+
if (tabLength && tabLength < limitedLogsLength) {
|
|
3683
3608
|
setScrollPos(scrollPos + 1);
|
|
3684
|
-
lengthMap.set(tabIndex,
|
|
3609
|
+
lengthMap.set(tabIndex, limitedLogsLength);
|
|
3685
3610
|
}
|
|
3686
3611
|
}
|
|
3687
|
-
|
|
3688
|
-
const newState = [...prev];
|
|
3689
|
-
logList.forEach((logData, index) => {
|
|
3690
|
-
newState[index] = getLogsToRender(logData.logs, index);
|
|
3691
|
-
});
|
|
3692
|
-
return newState;
|
|
3693
|
-
});
|
|
3612
|
+
setFocusLog(getLogsToRender(logList[tabIndex].logs, tabIndex));
|
|
3694
3613
|
} else {
|
|
3695
|
-
|
|
3696
|
-
const newState = [...prev];
|
|
3697
|
-
logList.forEach((logData, index) => {
|
|
3698
|
-
lengthMap.set(index, logData.logs.length);
|
|
3699
|
-
newState[index] = getLogsToRender(logData.logs, index);
|
|
3700
|
-
});
|
|
3701
|
-
return newState;
|
|
3702
|
-
});
|
|
3614
|
+
setFocusLog(getLogsToRender(logList[tabIndex].logs, tabIndex));
|
|
3703
3615
|
}
|
|
3704
|
-
}, [logList, isRunning, scrollPos, tabIndex, boxHeight]);
|
|
3705
|
-
|
|
3706
|
-
setBoxHeight(height -
|
|
3616
|
+
}, [logList, isRunning, scrollPos, tabIndex, boxHeight, maxLength]);
|
|
3617
|
+
useEffect2(() => {
|
|
3618
|
+
setBoxHeight(height - HEADER_HEIGHT - FOOTER_HEIGHT - BORDER_HEIGHT);
|
|
3707
3619
|
}, [height]);
|
|
3708
|
-
|
|
3709
|
-
setLengthMap(new Map(logList.map((log, index) => [index, log.logs.length])));
|
|
3710
|
-
}, []);
|
|
3711
|
-
return /* @__PURE__ */
|
|
3712
|
-
|
|
3620
|
+
useEffect2(() => {
|
|
3621
|
+
setLengthMap(new Map(logList.map((log, index) => [index, Math.min(log.logs.length, maxLength)])));
|
|
3622
|
+
}, [logList, maxLength]);
|
|
3623
|
+
return /* @__PURE__ */ React.createElement(Box, { width, height, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Box, { width, height: "80%", flexDirection: "row" }, /* @__PURE__ */ React.createElement(Box, { width: 30, height: "100%", flexDirection: "column" }, /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, null, "List ", tabIndex + 1, "/", logList.length)), /* @__PURE__ */ React.createElement(Box, { borderStyle: "round", borderColor: "blackBright", width: "100%", height: "100%", flexDirection: "column" }, logList.map((log, index) => {
|
|
3624
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { color: index === tabIndex ? "green" : "white" }, /* @__PURE__ */ React.createElement(Text, null, "\u25CF"), "\xA0", log.title.length > 25 ? log.title.slice(0, 25) + "..." : log.title));
|
|
3625
|
+
}))), /* @__PURE__ */ React.createElement(Box, { width, height: boxHeight + 3, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, logList[tabIndex].title), /* @__PURE__ */ React.createElement(
|
|
3626
|
+
Box,
|
|
3713
3627
|
{
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
|
|
3628
|
+
borderStyle: isRunning ? "double" : "round",
|
|
3629
|
+
flexDirection: "column",
|
|
3630
|
+
borderColor: logList[tabIndex].color,
|
|
3631
|
+
width: "100%",
|
|
3632
|
+
height: "100%"
|
|
3719
3633
|
},
|
|
3720
|
-
|
|
3721
|
-
)))
|
|
3634
|
+
scrollPos > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, focusLog.slice(0, focusLog.length - 1).map((log, index) => /* @__PURE__ */ React.createElement(Text, { key: index }, log)), /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "Scrolling... +", scrollPos)) : focusLog.map((log, index) => /* @__PURE__ */ React.createElement(Text, { key: index }, log))
|
|
3635
|
+
))), /* @__PURE__ */ React.createElement(Box, { width }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, /* @__PURE__ */ React.createElement(Text, null, "You can use the following shortcuts:"), /* @__PURE__ */ React.createElement(Newline, null), "* ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "tab"), " to switch tab.", /* @__PURE__ */ React.createElement(Newline, null), "* ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "up"), " and ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "down"), " to scroll.", " ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "shift"), " to scroll faster.", /* @__PURE__ */ React.createElement(Newline, null), "* ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "space"), " to scroll.", /* @__PURE__ */ React.createElement(Newline, null), "* ", /* @__PURE__ */ React.createElement(Text, { backgroundColor: "green" }, "escape"), " to stop scrolling.")));
|
|
3722
3636
|
};
|
|
3723
3637
|
|
|
3724
|
-
// pkgs/@akanjs/cli/src/application/
|
|
3725
|
-
var Backend = ({
|
|
3726
|
-
const [logs, setLogs] =
|
|
3638
|
+
// pkgs/@akanjs/cli/src/application/application.interface.tsx
|
|
3639
|
+
var Backend = ({ appName, childProcess, onExit }) => {
|
|
3640
|
+
const [logs, setLogs] = useState3([]);
|
|
3727
3641
|
const [width, height] = useStdoutDimensions();
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
env,
|
|
3731
|
-
stdio: "pipe",
|
|
3732
|
-
cwd: `${app.dist.cwdPath}/backend`
|
|
3733
|
-
});
|
|
3734
|
-
proc.stdout?.on("data", (data) => {
|
|
3642
|
+
useEffect3(() => {
|
|
3643
|
+
childProcess.stdout?.on("data", (data) => {
|
|
3735
3644
|
const newOutput = data.toString().split("\n");
|
|
3736
3645
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3737
3646
|
});
|
|
3738
|
-
|
|
3647
|
+
childProcess.stderr?.on("data", (data) => {
|
|
3739
3648
|
const newOutput = data.toString().split("\n");
|
|
3740
3649
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3741
3650
|
});
|
|
3742
3651
|
return () => {
|
|
3743
|
-
|
|
3652
|
+
childProcess.kill();
|
|
3653
|
+
onExit();
|
|
3744
3654
|
};
|
|
3745
3655
|
}, []);
|
|
3746
|
-
return /* @__PURE__ */
|
|
3656
|
+
return /* @__PURE__ */ React2.createElement(Box2, { width, height }, /* @__PURE__ */ React2.createElement(Text2, { bold: true }, "Akan.JS Backend"));
|
|
3747
3657
|
};
|
|
3748
|
-
var Frontend = ({
|
|
3749
|
-
const [logs, setLogs] =
|
|
3658
|
+
var Frontend = ({ appName, childProcess, onExit }) => {
|
|
3659
|
+
const [logs, setLogs] = useState3([]);
|
|
3750
3660
|
const [width, height] = useStdoutDimensions();
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
env,
|
|
3754
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
3755
|
-
detached: true
|
|
3756
|
-
});
|
|
3757
|
-
proc.stdout?.on("data", (data) => {
|
|
3661
|
+
useEffect3(() => {
|
|
3662
|
+
childProcess.stdout?.on("data", (data) => {
|
|
3758
3663
|
const newOutput = data.toString().split("\n");
|
|
3759
3664
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3760
3665
|
});
|
|
3761
|
-
|
|
3666
|
+
childProcess.stderr?.on("data", (data) => {
|
|
3762
3667
|
const newOutput = data.toString().split("\n");
|
|
3763
3668
|
setLogs((prevLogs) => [...prevLogs, ...newOutput]);
|
|
3764
3669
|
});
|
|
3765
3670
|
return () => {
|
|
3766
|
-
|
|
3671
|
+
childProcess.kill();
|
|
3672
|
+
onExit();
|
|
3767
3673
|
};
|
|
3768
3674
|
}, []);
|
|
3769
|
-
return /* @__PURE__ */
|
|
3675
|
+
return /* @__PURE__ */ React2.createElement(Box2, { width, height, flexDirection: "column" }, /* @__PURE__ */ React2.createElement(Text2, { bold: true }, appName, " Frontend"), logs.map((log) => /* @__PURE__ */ React2.createElement(Text2, { key: log }, log)));
|
|
3770
3676
|
};
|
|
3771
|
-
var Csr = ({
|
|
3772
|
-
|
|
3773
|
-
onLoad
|
|
3774
|
-
}) => {
|
|
3775
|
-
const [logs, setLogs] = useState4([]);
|
|
3677
|
+
var Csr = ({ app, event, onExit }) => {
|
|
3678
|
+
const [logs, setLogs] = useState3([]);
|
|
3776
3679
|
const [width, height] = useStdoutDimensions();
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
|
|
3680
|
+
const [test, setTest] = useState3(false);
|
|
3681
|
+
useEffect3(() => {
|
|
3682
|
+
event.on("info", (msg) => {
|
|
3683
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3684
|
+
});
|
|
3685
|
+
event.on("warn", (msg) => {
|
|
3686
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3687
|
+
});
|
|
3688
|
+
event.on("warnOnce", (msg) => {
|
|
3689
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3690
|
+
});
|
|
3691
|
+
event.on("error", (msg) => {
|
|
3692
|
+
setLogs((prevLogs) => [...prevLogs, msg]);
|
|
3693
|
+
});
|
|
3694
|
+
event.on("clearScreen", (type) => {
|
|
3695
|
+
setLogs((prevLogs) => [...prevLogs, type]);
|
|
3782
3696
|
});
|
|
3783
3697
|
}, []);
|
|
3784
|
-
return /* @__PURE__ */
|
|
3698
|
+
return /* @__PURE__ */ React2.createElement(Box2, { width, height, flexDirection: "column" }, /* @__PURE__ */ React2.createElement(Text2, null, test ? "true" : "false"), /* @__PURE__ */ React2.createElement(Text2, { bold: true }, "Akan.JS CSR"), /* @__PURE__ */ React2.createElement(Text2, null, logs));
|
|
3785
3699
|
};
|
|
3786
|
-
var Start = ({
|
|
3787
|
-
app,
|
|
3788
|
-
backendEnv,
|
|
3789
|
-
frontendEnv,
|
|
3790
|
-
onLoadCsr
|
|
3791
|
-
}) => {
|
|
3700
|
+
var Start = ({ appName, bcp, fcp, csr, onExit, maxLength = 100 }) => {
|
|
3792
3701
|
const [width, height] = useStdoutDimensions();
|
|
3793
|
-
const [csrLogs, setCsrLogs] =
|
|
3794
|
-
const [backendLogs, setBackendLogs] =
|
|
3795
|
-
const [frontendLogs, setFrontendLogs] =
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3702
|
+
const [csrLogs, setCsrLogs] = useState3([]);
|
|
3703
|
+
const [backendLogs, setBackendLogs] = useState3([]);
|
|
3704
|
+
const [frontendLogs, setFrontendLogs] = useState3([]);
|
|
3705
|
+
const { exit } = useApp();
|
|
3706
|
+
const filterLogData = (data) => {
|
|
3707
|
+
return typeof data === "string" ? data.split(/\r?\n/).filter((line) => line !== "") : data.toString().split(/\r?\n/).filter((line) => line !== "");
|
|
3708
|
+
};
|
|
3709
|
+
const saveLog = (type, data, setLog) => {
|
|
3710
|
+
const newOutput = filterLogData(data);
|
|
3711
|
+
const logs = newOutput.map((line) => ({ type, content: line }));
|
|
3712
|
+
setLog((currentLogs) => {
|
|
3713
|
+
if (currentLogs.length >= maxLength) {
|
|
3714
|
+
return [...currentLogs.slice(logs.length, maxLength), ...logs];
|
|
3715
|
+
} else if (currentLogs.length < maxLength && currentLogs.length + logs.length > maxLength) {
|
|
3716
|
+
return [...currentLogs.slice(Math.abs(maxLength - currentLogs.length - logs.length), maxLength), ...logs];
|
|
3717
|
+
} else
|
|
3718
|
+
return [...currentLogs, ...logs];
|
|
3803
3719
|
});
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
detached: true
|
|
3720
|
+
};
|
|
3721
|
+
useEffect3(() => {
|
|
3722
|
+
bcp.stdout?.on("data", (data) => {
|
|
3723
|
+
saveLog("stdout", data, setBackendLogs);
|
|
3809
3724
|
});
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
setBackendLogs((currentLogs) => [
|
|
3813
|
-
...currentLogs,
|
|
3814
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3815
|
-
]);
|
|
3725
|
+
bcp.stderr?.on("data", (data) => {
|
|
3726
|
+
saveLog("stderr", data, setBackendLogs);
|
|
3816
3727
|
});
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
setBackendLogs((currentLogs) => [
|
|
3820
|
-
...currentLogs,
|
|
3821
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3822
|
-
]);
|
|
3728
|
+
fcp.stdout?.on("data", (data) => {
|
|
3729
|
+
saveLog("stdout", data, setFrontendLogs);
|
|
3823
3730
|
});
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
setFrontendLogs((currentLogs) => [
|
|
3827
|
-
...currentLogs,
|
|
3828
|
-
...newOutput.map((line) => ({ type: "stdout", content: line }))
|
|
3829
|
-
]);
|
|
3731
|
+
fcp.stderr?.on("data", (data) => {
|
|
3732
|
+
saveLog("stderr", data, setFrontendLogs);
|
|
3830
3733
|
});
|
|
3831
|
-
|
|
3832
|
-
|
|
3833
|
-
setFrontendLogs((currentLogs) => [
|
|
3834
|
-
...currentLogs,
|
|
3835
|
-
...newOutput.map((line) => ({ type: "stderr", content: line }))
|
|
3836
|
-
]);
|
|
3734
|
+
csr.on("info", (msg) => {
|
|
3735
|
+
saveLog("info", msg, setCsrLogs);
|
|
3837
3736
|
});
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3737
|
+
csr.on("warn", (msg) => {
|
|
3738
|
+
saveLog("warn", msg, setCsrLogs);
|
|
3739
|
+
});
|
|
3740
|
+
csr.on("error", (msg) => {
|
|
3741
|
+
saveLog("error", msg, setCsrLogs);
|
|
3742
|
+
});
|
|
3743
|
+
csr.on("clearScreen", (type) => {
|
|
3744
|
+
saveLog("clearScreen", type, setCsrLogs);
|
|
3842
3745
|
});
|
|
3843
3746
|
return () => {
|
|
3844
|
-
|
|
3845
|
-
|
|
3747
|
+
bcp.kill();
|
|
3748
|
+
fcp.kill();
|
|
3749
|
+
bcp.stdin?.end();
|
|
3750
|
+
fcp.stdin?.end();
|
|
3751
|
+
csr.removeAllListeners();
|
|
3752
|
+
void (async () => {
|
|
3753
|
+
await onExit();
|
|
3754
|
+
exit();
|
|
3755
|
+
process.exit(0);
|
|
3756
|
+
})();
|
|
3846
3757
|
};
|
|
3847
3758
|
}, []);
|
|
3848
|
-
return /* @__PURE__ */
|
|
3759
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Box2, { borderColor: "#ff493b", height, width, flexDirection: "row" }, /* @__PURE__ */ React2.createElement(
|
|
3849
3760
|
MultiScrollList,
|
|
3850
3761
|
{
|
|
3851
3762
|
logList: [
|
|
3852
3763
|
{
|
|
3853
|
-
title: `${
|
|
3764
|
+
title: `${appName} frontend`,
|
|
3854
3765
|
logs: frontendLogs.map((log) => log.content),
|
|
3855
3766
|
color: "#ff493b"
|
|
3856
3767
|
},
|
|
3857
3768
|
{
|
|
3858
|
-
title: `${
|
|
3769
|
+
title: `${appName} backend`,
|
|
3859
3770
|
logs: backendLogs.map((log) => log.content),
|
|
3860
3771
|
color: "#e535ab"
|
|
3861
3772
|
},
|
|
3862
3773
|
{
|
|
3863
|
-
title: `${
|
|
3774
|
+
title: `${appName} react`,
|
|
3864
3775
|
logs: csrLogs.map((log) => log.content),
|
|
3865
3776
|
color: "#7cc5d9"
|
|
3866
3777
|
}
|
|
3867
|
-
]
|
|
3778
|
+
],
|
|
3779
|
+
maxLength
|
|
3868
3780
|
}
|
|
3869
3781
|
)));
|
|
3870
3782
|
};
|
|
3871
3783
|
var Interface = {
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3784
|
+
/**
|
|
3785
|
+
* Akan CSR 실행 컴포넌트
|
|
3786
|
+
*
|
|
3787
|
+
* @param app 앱 정보
|
|
3788
|
+
* @param event CSR 이벤트 발생기
|
|
3789
|
+
* @param onExit 종료 함수
|
|
3790
|
+
*/
|
|
3791
|
+
Csr: (app, event, onExit) => renderManager(/* @__PURE__ */ React2.createElement(Csr, { app, event, onExit })),
|
|
3792
|
+
/**
|
|
3793
|
+
* Akan Backend 실행 컴포넌트
|
|
3794
|
+
*
|
|
3795
|
+
* @param appName 앱 이름
|
|
3796
|
+
* @param childProcess 백엔드 차일드 프로세스
|
|
3797
|
+
* @param onExit 종료 함수
|
|
3798
|
+
*/
|
|
3799
|
+
Backend: (appName, childProcess, onExit) => renderManager(/* @__PURE__ */ React2.createElement(Backend, { appName, childProcess, onExit })),
|
|
3800
|
+
/**
|
|
3801
|
+
* Akan Frontend 실행 컴포넌트
|
|
3802
|
+
*
|
|
3803
|
+
* @param appName 앱 이름
|
|
3804
|
+
* @param childProcess 프론트엔드 차일드 프로세스
|
|
3805
|
+
* @param onExit 종료 함수
|
|
3806
|
+
*/
|
|
3807
|
+
Frontend: (appName, childProcess, onExit) => renderManager(/* @__PURE__ */ React2.createElement(Frontend, { appName, childProcess, onExit })),
|
|
3808
|
+
/**
|
|
3809
|
+
* Akan application 통합 실행 컴포넌트 (백엔드, 프론트엔드, React(CSR))
|
|
3810
|
+
*
|
|
3811
|
+
* @param maxLength 로그 최대 길이
|
|
3812
|
+
* @param appName 앱 이름
|
|
3813
|
+
* @param bcp 백엔드 차일드 프로세스
|
|
3814
|
+
* @param fcp 프론트엔드 차일드 프로세스
|
|
3815
|
+
* @param csr CSR 이벤트 발생기
|
|
3816
|
+
* @param onExit 종료 함수
|
|
3817
|
+
*/
|
|
3818
|
+
Start: (appName, bcp, fcp, csr, onExit) => renderManager(/* @__PURE__ */ React2.createElement(Start, { appName, bcp, fcp, csr, onExit }))
|
|
3819
|
+
};
|
|
3820
|
+
var renderManager = (component) => {
|
|
3821
|
+
const renderFn = render(component);
|
|
3822
|
+
return renderFn;
|
|
3876
3823
|
};
|
|
3877
3824
|
|
|
3878
3825
|
// pkgs/@akanjs/cli/src/application/application.runner.ts
|
|
3826
|
+
import EventEmitter from "node:events";
|
|
3827
|
+
import { confirm as confirm2, input as input4, select as select5 } from "@inquirer/prompts";
|
|
3828
|
+
import { StringOutputParser } from "@langchain/core/output_parsers";
|
|
3829
|
+
import { PromptTemplate as PromptTemplate2 } from "@langchain/core/prompts";
|
|
3830
|
+
import { RunnableSequence as RunnableSequence2 } from "@langchain/core/runnables";
|
|
3831
|
+
import { ChatOpenAI as ChatOpenAI3 } from "@langchain/openai";
|
|
3832
|
+
import react from "@vitejs/plugin-react";
|
|
3833
|
+
import dotenv3 from "dotenv";
|
|
3834
|
+
import * as esbuild2 from "esbuild";
|
|
3835
|
+
import fs14 from "fs";
|
|
3836
|
+
import fsPromise3 from "fs/promises";
|
|
3837
|
+
import yaml2 from "js-yaml";
|
|
3838
|
+
import openBrowser from "open";
|
|
3839
|
+
import ora3 from "ora";
|
|
3840
|
+
import path7 from "path";
|
|
3841
|
+
import * as vite from "vite";
|
|
3842
|
+
import commonjs from "vite-plugin-commonjs";
|
|
3843
|
+
import { nodePolyfills } from "vite-plugin-node-polyfills";
|
|
3844
|
+
import tsconfigPaths from "vite-tsconfig-paths";
|
|
3879
3845
|
var ApplicationRunner = class {
|
|
3880
3846
|
async createApplication(appName, workspace) {
|
|
3881
3847
|
await workspace.applyTemplate({
|
|
@@ -3903,34 +3869,6 @@ var ApplicationRunner = class {
|
|
|
3903
3869
|
await app.syncAssets(scanResult.akanConfig.libs);
|
|
3904
3870
|
return scanResult;
|
|
3905
3871
|
}
|
|
3906
|
-
async start(app) {
|
|
3907
|
-
const { env: frontendEnv } = await this.#prepareCommand(app, "start", "frontend");
|
|
3908
|
-
const { env: backendEnv } = await this.#prepareCommand(app, "start", "backend");
|
|
3909
|
-
Interface.Start(app, backendEnv, frontendEnv, async ({ onLog }) => {
|
|
3910
|
-
const config = await this.#getViteConfig(app, "start", {
|
|
3911
|
-
customLogger: {
|
|
3912
|
-
info: (msg) => {
|
|
3913
|
-
onLog(msg);
|
|
3914
|
-
},
|
|
3915
|
-
warn: (msg) => {
|
|
3916
|
-
},
|
|
3917
|
-
warnOnce: (msg) => {
|
|
3918
|
-
},
|
|
3919
|
-
error: (msg) => {
|
|
3920
|
-
onLog(msg);
|
|
3921
|
-
},
|
|
3922
|
-
clearScreen: (type) => {
|
|
3923
|
-
},
|
|
3924
|
-
hasErrorLogged: (error) => {
|
|
3925
|
-
return false;
|
|
3926
|
-
},
|
|
3927
|
-
hasWarned: false
|
|
3928
|
-
}
|
|
3929
|
-
});
|
|
3930
|
-
const server = await vite.createServer(config);
|
|
3931
|
-
await server.listen(4201);
|
|
3932
|
-
});
|
|
3933
|
-
}
|
|
3934
3872
|
async getScriptFilename(app) {
|
|
3935
3873
|
if (!app.exists("scripts")) {
|
|
3936
3874
|
app.mkdir("scripts");
|
|
@@ -4010,7 +3948,7 @@ var ApplicationRunner = class {
|
|
|
4010
3948
|
app.dist.writeJson("backend/package.json", appPackageJson);
|
|
4011
3949
|
app.dist.writeFile(path7.join(app.dist.cwdPath, "backend", "Dockerfile"), akanConfig.backend.docker.content);
|
|
4012
3950
|
}
|
|
4013
|
-
async startBackend(app, { open: open2 = false, onStart } = {}) {
|
|
3951
|
+
async startBackend(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4014
3952
|
const { env } = await this.#prepareCommand(app, "start", "backend");
|
|
4015
3953
|
const ctx = await esbuild2.context({
|
|
4016
3954
|
write: true,
|
|
@@ -4027,7 +3965,11 @@ var ApplicationRunner = class {
|
|
|
4027
3965
|
onStart?.();
|
|
4028
3966
|
if (open2)
|
|
4029
3967
|
setTimeout(() => openBrowser("http://localhost:8080/backend/graphql"), 3e3);
|
|
4030
|
-
|
|
3968
|
+
return app.dist.spawnSync("node", ["--watch", "main.js"], {
|
|
3969
|
+
env,
|
|
3970
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit",
|
|
3971
|
+
cwd: `${app.dist.cwdPath}/backend`
|
|
3972
|
+
});
|
|
4031
3973
|
}
|
|
4032
3974
|
async buildFrontend(app, { spawnOptions } = {}) {
|
|
4033
3975
|
const { env } = await this.#prepareCommand(app, "build", "frontend");
|
|
@@ -4061,12 +4003,20 @@ var ApplicationRunner = class {
|
|
|
4061
4003
|
]);
|
|
4062
4004
|
app.dist.writeFile("frontend/Dockerfile", akanConfig.frontend.docker.content);
|
|
4063
4005
|
}
|
|
4064
|
-
async startFrontend(app, {
|
|
4006
|
+
async startFrontend(app, {
|
|
4007
|
+
open: open2 = false,
|
|
4008
|
+
turbo = true,
|
|
4009
|
+
onStart,
|
|
4010
|
+
withInk = false
|
|
4011
|
+
} = {}) {
|
|
4065
4012
|
const { env } = await this.#prepareCommand(app, "start", "frontend");
|
|
4066
4013
|
if (open2)
|
|
4067
4014
|
setTimeout(() => openBrowser("http://localhost:4200"), 3e3);
|
|
4068
4015
|
onStart?.();
|
|
4069
|
-
|
|
4016
|
+
return app.spawnSync("npx", ["next", "dev", "-p", "4200", ...turbo ? ["--turbo"] : []], {
|
|
4017
|
+
env,
|
|
4018
|
+
stdio: withInk ? ["ignore", "pipe", "pipe"] : "inherit"
|
|
4019
|
+
});
|
|
4070
4020
|
}
|
|
4071
4021
|
async #getViteConfig(app, command, viteConfig = {}) {
|
|
4072
4022
|
const { env } = await this.#prepareCommand(app, command, "csr");
|
|
@@ -4154,38 +4104,41 @@ var ApplicationRunner = class {
|
|
|
4154
4104
|
const config = await this.#getViteConfig(app, "build");
|
|
4155
4105
|
await vite.build(config);
|
|
4156
4106
|
}
|
|
4157
|
-
startCsr(app, { open: open2 = false, onStart } = {}) {
|
|
4158
|
-
|
|
4159
|
-
|
|
4107
|
+
async startCsr(app, { open: open2 = false, onStart, withInk = false } = {}) {
|
|
4108
|
+
const eventEmitter = new EventEmitter();
|
|
4109
|
+
const config = await this.#getViteConfig(
|
|
4110
|
+
app,
|
|
4111
|
+
"start",
|
|
4112
|
+
withInk ? {
|
|
4160
4113
|
customLogger: {
|
|
4161
4114
|
info: (msg) => {
|
|
4162
|
-
|
|
4115
|
+
eventEmitter.emit("info", msg);
|
|
4163
4116
|
},
|
|
4164
4117
|
warn: (msg) => {
|
|
4165
|
-
|
|
4118
|
+
eventEmitter.emit("warn", msg);
|
|
4166
4119
|
},
|
|
4167
4120
|
warnOnce: (msg) => {
|
|
4168
|
-
|
|
4121
|
+
eventEmitter.emit("warnOnce", msg);
|
|
4169
4122
|
},
|
|
4170
4123
|
error: (msg) => {
|
|
4171
|
-
|
|
4124
|
+
eventEmitter.emit("error", msg);
|
|
4172
4125
|
},
|
|
4173
4126
|
clearScreen: (type) => {
|
|
4174
|
-
|
|
4127
|
+
eventEmitter.emit("clearScreen", type);
|
|
4175
4128
|
},
|
|
4176
4129
|
hasErrorLogged: (error) => {
|
|
4177
4130
|
return false;
|
|
4178
4131
|
},
|
|
4179
4132
|
hasWarned: false
|
|
4180
4133
|
}
|
|
4181
|
-
}
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
});
|
|
4134
|
+
} : {}
|
|
4135
|
+
);
|
|
4136
|
+
const server = await vite.createServer(config);
|
|
4137
|
+
await server.listen(4201);
|
|
4186
4138
|
onStart?.();
|
|
4187
4139
|
if (open2)
|
|
4188
4140
|
setTimeout(() => openBrowser("http://localhost:4201"), 3e3);
|
|
4141
|
+
return { server, eventEmitter };
|
|
4189
4142
|
}
|
|
4190
4143
|
async buildIos(app) {
|
|
4191
4144
|
const capacitorApp = await new CapacitorApp(app).init();
|
|
@@ -4479,7 +4432,16 @@ var ApplicationScript = class {
|
|
|
4479
4432
|
await this.syncApplication(app);
|
|
4480
4433
|
if (app.workspace.getBaseDevEnv().env === "local")
|
|
4481
4434
|
await this.dbup(app.workspace);
|
|
4482
|
-
await this
|
|
4435
|
+
const backend = await this.startBackend(app, { open: open2, withInk: true });
|
|
4436
|
+
const frontend = await this.startFrontend(app, { open: open2, withInk: true });
|
|
4437
|
+
const { server: csrServer, eventEmitter: csr } = await this.startCsr(app, { open: open2, withInk: true });
|
|
4438
|
+
Interface.Start(app.name, backend, frontend, csr, async () => {
|
|
4439
|
+
await csrServer.close();
|
|
4440
|
+
backend.kill();
|
|
4441
|
+
frontend.kill();
|
|
4442
|
+
csr.removeAllListeners();
|
|
4443
|
+
process.exit(0);
|
|
4444
|
+
});
|
|
4483
4445
|
}
|
|
4484
4446
|
async buildBackend(app, { sync = true } = {}) {
|
|
4485
4447
|
if (sync)
|
|
@@ -4488,7 +4450,12 @@ var ApplicationScript = class {
|
|
|
4488
4450
|
await this.#runner.buildBackend(app);
|
|
4489
4451
|
spinner.succeed(`Backend built in dist/apps/${app.name}/backend`);
|
|
4490
4452
|
}
|
|
4491
|
-
async startBackend(app, {
|
|
4453
|
+
async startBackend(app, {
|
|
4454
|
+
open: open2 = false,
|
|
4455
|
+
dbup = true,
|
|
4456
|
+
sync = true,
|
|
4457
|
+
withInk = false
|
|
4458
|
+
} = {}) {
|
|
4492
4459
|
if (app.getEnv() === "local" && dbup) {
|
|
4493
4460
|
await this.dbup(app.workspace);
|
|
4494
4461
|
process.on("SIGINT", async () => {
|
|
@@ -4499,12 +4466,14 @@ var ApplicationScript = class {
|
|
|
4499
4466
|
if (sync)
|
|
4500
4467
|
await this.syncApplication(app);
|
|
4501
4468
|
const spinner = app.spinning("Preparing backend...");
|
|
4502
|
-
await this.#runner.startBackend(app, {
|
|
4469
|
+
const childProcess = await this.#runner.startBackend(app, {
|
|
4503
4470
|
open: open2,
|
|
4504
4471
|
onStart: () => {
|
|
4505
4472
|
spinner.succeed(`Backend prepared, ready to start`);
|
|
4506
|
-
}
|
|
4473
|
+
},
|
|
4474
|
+
withInk
|
|
4507
4475
|
});
|
|
4476
|
+
return childProcess;
|
|
4508
4477
|
}
|
|
4509
4478
|
async buildFrontend(app, { sync = true, standalone = false } = {}) {
|
|
4510
4479
|
if (sync)
|
|
@@ -4517,17 +4486,24 @@ var ApplicationScript = class {
|
|
|
4517
4486
|
spinner.succeed(`Frontend built in dist/apps/${app.name}/frontend`);
|
|
4518
4487
|
}
|
|
4519
4488
|
}
|
|
4520
|
-
async startFrontend(app, {
|
|
4489
|
+
async startFrontend(app, {
|
|
4490
|
+
open: open2 = false,
|
|
4491
|
+
turbo = false,
|
|
4492
|
+
sync = true,
|
|
4493
|
+
withInk = false
|
|
4494
|
+
} = {}) {
|
|
4521
4495
|
if (sync)
|
|
4522
4496
|
await this.syncApplication(app);
|
|
4523
4497
|
const spinner = app.spinning("Preparing frontend...");
|
|
4524
|
-
await this.#runner.startFrontend(app, {
|
|
4498
|
+
const childProcess = await this.#runner.startFrontend(app, {
|
|
4525
4499
|
open: open2,
|
|
4526
4500
|
turbo,
|
|
4527
4501
|
onStart: () => {
|
|
4528
4502
|
spinner.succeed(`Frontend prepared, ready to start`);
|
|
4529
|
-
}
|
|
4503
|
+
},
|
|
4504
|
+
withInk
|
|
4530
4505
|
});
|
|
4506
|
+
return childProcess;
|
|
4531
4507
|
}
|
|
4532
4508
|
async buildCsr(app, { sync = true } = {}) {
|
|
4533
4509
|
if (sync)
|
|
@@ -4536,14 +4512,16 @@ var ApplicationScript = class {
|
|
|
4536
4512
|
await this.#runner.buildCsr(app);
|
|
4537
4513
|
spinner.succeed(`Successfully built in dist/apps/${app.name}/csr`);
|
|
4538
4514
|
}
|
|
4539
|
-
async startCsr(app, { open: open2 = false, sync = true } = {}) {
|
|
4515
|
+
async startCsr(app, { open: open2 = false, sync = true, withInk = false } = {}) {
|
|
4540
4516
|
if (sync)
|
|
4541
4517
|
await this.syncApplication(app);
|
|
4542
|
-
this.#runner.startCsr(app, {
|
|
4518
|
+
const { eventEmitter, server } = await this.#runner.startCsr(app, {
|
|
4543
4519
|
open: open2,
|
|
4544
4520
|
onStart: () => {
|
|
4545
|
-
}
|
|
4521
|
+
},
|
|
4522
|
+
withInk
|
|
4546
4523
|
});
|
|
4524
|
+
return { eventEmitter, server };
|
|
4547
4525
|
}
|
|
4548
4526
|
async buildIos(app, { sync = true } = {}) {
|
|
4549
4527
|
if (sync)
|