ide-assi 0.288.0 → 0.289.0

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.
@@ -193661,9 +193661,14 @@ class IdeAi
193661
193661
  };
193662
193662
 
193663
193663
 
193664
- #generateRealFile = async (srcPath) => {
193664
+ #generateRealFile_BAK = async (srcPath, apply) => {
193665
193665
 
193666
- const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
193666
+ //const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
193667
+ let files = [];
193668
+ if (apply.mybatis) files.push("mybatis.xml");
193669
+ if (apply.service) files.push("service.java");
193670
+ if (apply.controller) files.push("controller.java");
193671
+ if (apply.javascript) files.push("react.jsx");
193667
193672
 
193668
193673
  const params = await Promise.all(
193669
193674
  files.map(async (file) => ({
@@ -193675,6 +193680,31 @@ class IdeAi
193675
193680
  api.post(`/api/source/generateRealFile`, { list: params });
193676
193681
  };
193677
193682
 
193683
+ #generateRealFile = async (srcPath, apply) => {
193684
+ const fileMap = {
193685
+ mybatis: { name: "mybatis.xml", path: srcPath.mybatisPullPath },
193686
+ service: { name: "service.java", path: srcPath.servicePullPath },
193687
+ controller: { name: "controller.java", path: srcPath.controllerPullPath },
193688
+ javascript: { name: "react.jsx", path: srcPath.javascriptPullPath },
193689
+ };
193690
+
193691
+ const selectedFiles = Object.entries(fileMap)
193692
+ .filter(([key]) => apply[key])
193693
+ .map(([_, { name, path }]) => ({ name, path }));
193694
+
193695
+ const params = await Promise.all(
193696
+ selectedFiles.map(async ({ name, path }) => ({
193697
+ path,
193698
+ contents: await fetch(`/api/templates/${name}`).then(res => res.text()),
193699
+ }))
193700
+ );
193701
+
193702
+ console.log(params);
193703
+
193704
+ api.post(`/api/source/generateRealFile`, { list: params });
193705
+ };
193706
+
193707
+
193678
193708
  #generateTmplFile = async (promptFile, generateFileName, params) => {
193679
193709
 
193680
193710
  let src = await this.#invoke(promptFile, params);
@@ -193727,11 +193757,10 @@ class IdeAi
193727
193757
  };*/
193728
193758
  };
193729
193759
 
193730
- #createSource = async (userPrompt) => {
193760
+ #createSource = async (userPrompt, apply) => {
193731
193761
  const where = await this.#where(userPrompt, this.#getMenuInfo(), await this.#getTableList());
193732
193762
  this.#parent.addMessage("대상 메뉴와 테이블을 찾았습니다.");
193733
193763
 
193734
-
193735
193764
  console.log(where);
193736
193765
 
193737
193766
  const srcPath = this.#getSourcePath(where.menu.url);
@@ -193776,10 +193805,10 @@ class IdeAi
193776
193805
  });
193777
193806
  this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
193778
193807
 
193779
- await this.#generateRealFile(srcPath);
193808
+ await this.#generateRealFile(srcPath, apply);
193780
193809
  };
193781
193810
 
193782
- #modifySource = async (userPrompt) => {
193811
+ #modifySource = async (userPrompt, apply) => {
193783
193812
 
193784
193813
  const el = ninegrid.querySelector("nx-side-menu-item.active");
193785
193814
  if (!el) throw new Error("관련 메뉴를 찾을 수 없습니다.");
@@ -193831,19 +193860,74 @@ class IdeAi
193831
193860
 
193832
193861
  const columnInfo = await this.#getColumnInfo(where.table);
193833
193862
 
193834
- await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
193835
- userPrompt: userPrompt,
193836
- originSrc: src.mybatis,
193837
- resultType: srcPath.resultType,
193838
- namespace: srcPath.namespace,
193839
- tableDefinitions: columnInfo,
193840
- });
193841
- this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
193863
+ let mybatisXmlSource;
193864
+ if (apply.mybatis) {
193865
+ mybatisXmlSource = await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
193866
+ userPrompt: userPrompt,
193867
+ originSrc: src.mybatis,
193868
+ resultType: srcPath.resultType,
193869
+ namespace: srcPath.namespace,
193870
+ tableDefinitions: columnInfo,
193871
+ });
193872
+ this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
193873
+ }
193874
+ else {
193875
+ mybatisXmlSource = src.mybatis;
193876
+ }
193842
193877
 
193843
- return;
193878
+ let serviceSrc;
193879
+ if (apply.service) {
193880
+ serviceSrc = await this.#generateTmplFile("/prompts/meta/U.BuildService.txt", "service.java", {
193881
+ userPrompt: userPrompt,
193882
+ originSrc: src.service,
193883
+ baseClass: srcPath.baseClass,
193884
+ myBatisPath: srcPath.mybatis,
193885
+ namespace: srcPath.namespace,
193886
+ package: srcPath.package + ".service",
193887
+ mybatisXmlSource: mybatisXmlSource,
193888
+ });
193889
+ this.#parent.addMessage("Java(Service) 소스파일을 생성했습니다.");
193890
+ }
193891
+ else {
193892
+ serviceSrc = src.service;
193893
+ }
193894
+
193895
+ let controllerSrc;
193896
+ if (apply.controller) {
193897
+ controllerSrc = await this.#generateTmplFile("/prompts/meta/U.BuildController.txt", "controller.java", {
193898
+ userPrompt: userPrompt,
193899
+ originSrc: src.controller,
193900
+ baseClass: srcPath.baseClass,
193901
+ menuUrl: where.menu.url,
193902
+ package: srcPath.package + ".controller",
193903
+ serviceSource: serviceSrc,
193904
+ });
193905
+ this.#parent.addMessage("Java(Controller) 소스파일을 생성했습니다.");
193906
+ }
193907
+ else {
193908
+ controllerSrc = src.controller;
193909
+ }
193910
+ if (apply.javascript) {
193911
+ await this.#generateTmplFile("/prompts/meta/U.BuildReactJsx.txt", "react.jsx", {
193912
+ userPrompt: userPrompt,
193913
+ originSrc: src.javascript,
193914
+ menuUrl: where.menu.url,
193915
+ menuName: where.menu.name,
193916
+ baseClass: srcPath.baseClass,
193917
+ controllerSource: controllerSrc,
193918
+ tableDefinitions: columnInfo,
193919
+ });
193920
+ this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
193921
+ }
193922
+ else {
193923
+ src.javascript;
193924
+ }
193925
+ //console.log(src.javascript);
193926
+
193927
+ await this.#generateRealFile(srcPath, apply);
193844
193928
  };
193845
193929
 
193846
- generateSourceClient = async (userPrompt) => {
193930
+ generateSourceClient = async (userPrompt, apply) => {
193847
193931
 
193848
193932
  this.#createModel();
193849
193933
 
@@ -193851,10 +193935,13 @@ class IdeAi
193851
193935
  this.#parent.addMessage("명령을 이해했습니다.");
193852
193936
 
193853
193937
  if (what === "1") {
193854
- await this.#createSource(userPrompt);
193938
+ if (!apply.mybatis || !apply.service || !apply.controller || !apply.javascript) {
193939
+ return "소스 생성하실려면 변경대상 소스를 모두 선택하세요.";
193940
+ }
193941
+ await this.#createSource(userPrompt, apply);
193855
193942
  }
193856
193943
  else if (what === "2") {
193857
- await this.#modifySource(userPrompt);
193944
+ await this.#modifySource(userPrompt, apply);
193858
193945
  }
193859
193946
 
193860
193947
  return "OK";
@@ -193961,6 +194048,13 @@ class IdeAssi extends HTMLElement
193961
194048
 
193962
194049
  e.preventDefault();
193963
194050
 
194051
+ const mybatis = this.shadowRoot.querySelector("#mybatis").checked;
194052
+ const service = this.shadowRoot.querySelector("#service").checked;
194053
+ const controller = this.shadowRoot.querySelector("#controller").checked;
194054
+ const javascript = this.shadowRoot.querySelector("#javascript").checked;
194055
+
194056
+ if (!mybatis && !service && !controller && !javascript) return;
194057
+
193964
194058
  const userPrompt = e.target.value.trim();
193965
194059
  if (!userPrompt) return;
193966
194060
 
@@ -193981,63 +194075,18 @@ class IdeAssi extends HTMLElement
193981
194075
  elAiChat.add("ing", "...");
193982
194076
 
193983
194077
  try {
193984
- const r = await this.#ai.generateSourceClient(userPrompt);
194078
+ const r = await this.#ai.generateSourceClient(userPrompt, {
194079
+ mybatis: mybatis,
194080
+ service: service,
194081
+ controller: controller,
194082
+ javascript: javascript,
194083
+ });
193985
194084
  elAiChat.add("ai", r);
193986
194085
  } catch (error) {
193987
-
193988
194086
  console.error(error);
193989
194087
  elAiChat.add("ai", String(error).replace("Error:", ""));
193990
194088
  }
193991
194089
 
193992
- /**
193993
- try {
193994
- const code = `
193995
- package tmpl.generated;
193996
-
193997
- public class HelloWorld {
193998
- public String sayHello() {
193999
- return "Hello from generated class!";
194000
- }
194001
- }
194002
- `;
194003
-
194004
- const js = `
194005
- const Home = () => {
194006
- const wrapStyle = {
194007
- backgroundColor: "white",
194008
- color: "black",
194009
- padding: "0px",
194010
- textAlign: "center",
194011
- fontSize: "18px",
194012
- height: "100%",
194013
- };
194014
-
194015
- return (
194016
- <div style={wrapStyle}>
194017
- 11111
194018
- </div>
194019
- );
194020
- };
194021
-
194022
- export default Home;
194023
- `;
194024
-
194025
-
194026
- await fetch("/api/files/js", {
194027
- method: "POST",
194028
- headers: { "Content-Type": "application/json" },
194029
- body: JSON.stringify({
194030
- //filename: "HelloWorld.java",
194031
- filename: "Test.jsx",
194032
- content: js
194033
- })
194034
- });
194035
- } catch (error) {
194036
- console.error(error);
194037
- //elAiChat.add("ai", error);
194038
- }
194039
- */
194040
-
194041
194090
  this.#ing = false;
194042
194091
  }
194043
194092
 
@@ -193657,9 +193657,14 @@ class IdeAi
193657
193657
  };
193658
193658
 
193659
193659
 
193660
- #generateRealFile = async (srcPath) => {
193660
+ #generateRealFile_BAK = async (srcPath, apply) => {
193661
193661
 
193662
- const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
193662
+ //const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
193663
+ let files = [];
193664
+ if (apply.mybatis) files.push("mybatis.xml");
193665
+ if (apply.service) files.push("service.java");
193666
+ if (apply.controller) files.push("controller.java");
193667
+ if (apply.javascript) files.push("react.jsx");
193663
193668
 
193664
193669
  const params = await Promise.all(
193665
193670
  files.map(async (file) => ({
@@ -193671,6 +193676,31 @@ class IdeAi
193671
193676
  api.post(`/api/source/generateRealFile`, { list: params });
193672
193677
  };
193673
193678
 
193679
+ #generateRealFile = async (srcPath, apply) => {
193680
+ const fileMap = {
193681
+ mybatis: { name: "mybatis.xml", path: srcPath.mybatisPullPath },
193682
+ service: { name: "service.java", path: srcPath.servicePullPath },
193683
+ controller: { name: "controller.java", path: srcPath.controllerPullPath },
193684
+ javascript: { name: "react.jsx", path: srcPath.javascriptPullPath },
193685
+ };
193686
+
193687
+ const selectedFiles = Object.entries(fileMap)
193688
+ .filter(([key]) => apply[key])
193689
+ .map(([_, { name, path }]) => ({ name, path }));
193690
+
193691
+ const params = await Promise.all(
193692
+ selectedFiles.map(async ({ name, path }) => ({
193693
+ path,
193694
+ contents: await fetch(`/api/templates/${name}`).then(res => res.text()),
193695
+ }))
193696
+ );
193697
+
193698
+ console.log(params);
193699
+
193700
+ api.post(`/api/source/generateRealFile`, { list: params });
193701
+ };
193702
+
193703
+
193674
193704
  #generateTmplFile = async (promptFile, generateFileName, params) => {
193675
193705
 
193676
193706
  let src = await this.#invoke(promptFile, params);
@@ -193723,11 +193753,10 @@ class IdeAi
193723
193753
  };*/
193724
193754
  };
193725
193755
 
193726
- #createSource = async (userPrompt) => {
193756
+ #createSource = async (userPrompt, apply) => {
193727
193757
  const where = await this.#where(userPrompt, this.#getMenuInfo(), await this.#getTableList());
193728
193758
  this.#parent.addMessage("대상 메뉴와 테이블을 찾았습니다.");
193729
193759
 
193730
-
193731
193760
  console.log(where);
193732
193761
 
193733
193762
  const srcPath = this.#getSourcePath(where.menu.url);
@@ -193772,10 +193801,10 @@ class IdeAi
193772
193801
  });
193773
193802
  this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
193774
193803
 
193775
- await this.#generateRealFile(srcPath);
193804
+ await this.#generateRealFile(srcPath, apply);
193776
193805
  };
193777
193806
 
193778
- #modifySource = async (userPrompt) => {
193807
+ #modifySource = async (userPrompt, apply) => {
193779
193808
 
193780
193809
  const el = ninegrid.querySelector("nx-side-menu-item.active");
193781
193810
  if (!el) throw new Error("관련 메뉴를 찾을 수 없습니다.");
@@ -193827,19 +193856,74 @@ class IdeAi
193827
193856
 
193828
193857
  const columnInfo = await this.#getColumnInfo(where.table);
193829
193858
 
193830
- await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
193831
- userPrompt: userPrompt,
193832
- originSrc: src.mybatis,
193833
- resultType: srcPath.resultType,
193834
- namespace: srcPath.namespace,
193835
- tableDefinitions: columnInfo,
193836
- });
193837
- this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
193859
+ let mybatisXmlSource;
193860
+ if (apply.mybatis) {
193861
+ mybatisXmlSource = await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
193862
+ userPrompt: userPrompt,
193863
+ originSrc: src.mybatis,
193864
+ resultType: srcPath.resultType,
193865
+ namespace: srcPath.namespace,
193866
+ tableDefinitions: columnInfo,
193867
+ });
193868
+ this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
193869
+ }
193870
+ else {
193871
+ mybatisXmlSource = src.mybatis;
193872
+ }
193838
193873
 
193839
- return;
193874
+ let serviceSrc;
193875
+ if (apply.service) {
193876
+ serviceSrc = await this.#generateTmplFile("/prompts/meta/U.BuildService.txt", "service.java", {
193877
+ userPrompt: userPrompt,
193878
+ originSrc: src.service,
193879
+ baseClass: srcPath.baseClass,
193880
+ myBatisPath: srcPath.mybatis,
193881
+ namespace: srcPath.namespace,
193882
+ package: srcPath.package + ".service",
193883
+ mybatisXmlSource: mybatisXmlSource,
193884
+ });
193885
+ this.#parent.addMessage("Java(Service) 소스파일을 생성했습니다.");
193886
+ }
193887
+ else {
193888
+ serviceSrc = src.service;
193889
+ }
193890
+
193891
+ let controllerSrc;
193892
+ if (apply.controller) {
193893
+ controllerSrc = await this.#generateTmplFile("/prompts/meta/U.BuildController.txt", "controller.java", {
193894
+ userPrompt: userPrompt,
193895
+ originSrc: src.controller,
193896
+ baseClass: srcPath.baseClass,
193897
+ menuUrl: where.menu.url,
193898
+ package: srcPath.package + ".controller",
193899
+ serviceSource: serviceSrc,
193900
+ });
193901
+ this.#parent.addMessage("Java(Controller) 소스파일을 생성했습니다.");
193902
+ }
193903
+ else {
193904
+ controllerSrc = src.controller;
193905
+ }
193906
+ if (apply.javascript) {
193907
+ await this.#generateTmplFile("/prompts/meta/U.BuildReactJsx.txt", "react.jsx", {
193908
+ userPrompt: userPrompt,
193909
+ originSrc: src.javascript,
193910
+ menuUrl: where.menu.url,
193911
+ menuName: where.menu.name,
193912
+ baseClass: srcPath.baseClass,
193913
+ controllerSource: controllerSrc,
193914
+ tableDefinitions: columnInfo,
193915
+ });
193916
+ this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
193917
+ }
193918
+ else {
193919
+ src.javascript;
193920
+ }
193921
+ //console.log(src.javascript);
193922
+
193923
+ await this.#generateRealFile(srcPath, apply);
193840
193924
  };
193841
193925
 
193842
- generateSourceClient = async (userPrompt) => {
193926
+ generateSourceClient = async (userPrompt, apply) => {
193843
193927
 
193844
193928
  this.#createModel();
193845
193929
 
@@ -193847,10 +193931,13 @@ class IdeAi
193847
193931
  this.#parent.addMessage("명령을 이해했습니다.");
193848
193932
 
193849
193933
  if (what === "1") {
193850
- await this.#createSource(userPrompt);
193934
+ if (!apply.mybatis || !apply.service || !apply.controller || !apply.javascript) {
193935
+ return "소스 생성하실려면 변경대상 소스를 모두 선택하세요.";
193936
+ }
193937
+ await this.#createSource(userPrompt, apply);
193851
193938
  }
193852
193939
  else if (what === "2") {
193853
- await this.#modifySource(userPrompt);
193940
+ await this.#modifySource(userPrompt, apply);
193854
193941
  }
193855
193942
 
193856
193943
  return "OK";
@@ -193957,6 +194044,13 @@ class IdeAssi extends HTMLElement
193957
194044
 
193958
194045
  e.preventDefault();
193959
194046
 
194047
+ const mybatis = this.shadowRoot.querySelector("#mybatis").checked;
194048
+ const service = this.shadowRoot.querySelector("#service").checked;
194049
+ const controller = this.shadowRoot.querySelector("#controller").checked;
194050
+ const javascript = this.shadowRoot.querySelector("#javascript").checked;
194051
+
194052
+ if (!mybatis && !service && !controller && !javascript) return;
194053
+
193960
194054
  const userPrompt = e.target.value.trim();
193961
194055
  if (!userPrompt) return;
193962
194056
 
@@ -193977,63 +194071,18 @@ class IdeAssi extends HTMLElement
193977
194071
  elAiChat.add("ing", "...");
193978
194072
 
193979
194073
  try {
193980
- const r = await this.#ai.generateSourceClient(userPrompt);
194074
+ const r = await this.#ai.generateSourceClient(userPrompt, {
194075
+ mybatis: mybatis,
194076
+ service: service,
194077
+ controller: controller,
194078
+ javascript: javascript,
194079
+ });
193981
194080
  elAiChat.add("ai", r);
193982
194081
  } catch (error) {
193983
-
193984
194082
  console.error(error);
193985
194083
  elAiChat.add("ai", String(error).replace("Error:", ""));
193986
194084
  }
193987
194085
 
193988
- /**
193989
- try {
193990
- const code = `
193991
- package tmpl.generated;
193992
-
193993
- public class HelloWorld {
193994
- public String sayHello() {
193995
- return "Hello from generated class!";
193996
- }
193997
- }
193998
- `;
193999
-
194000
- const js = `
194001
- const Home = () => {
194002
- const wrapStyle = {
194003
- backgroundColor: "white",
194004
- color: "black",
194005
- padding: "0px",
194006
- textAlign: "center",
194007
- fontSize: "18px",
194008
- height: "100%",
194009
- };
194010
-
194011
- return (
194012
- <div style={wrapStyle}>
194013
- 11111
194014
- </div>
194015
- );
194016
- };
194017
-
194018
- export default Home;
194019
- `;
194020
-
194021
-
194022
- await fetch("/api/files/js", {
194023
- method: "POST",
194024
- headers: { "Content-Type": "application/json" },
194025
- body: JSON.stringify({
194026
- //filename: "HelloWorld.java",
194027
- filename: "Test.jsx",
194028
- content: js
194029
- })
194030
- });
194031
- } catch (error) {
194032
- console.error(error);
194033
- //elAiChat.add("ai", error);
194034
- }
194035
- */
194036
-
194037
194086
  this.#ing = false;
194038
194087
  }
194039
194088
 
@@ -242,9 +242,14 @@ export class IdeAi
242
242
  };
243
243
 
244
244
 
245
- #generateRealFile = async (srcPath) => {
245
+ #generateRealFile_BAK = async (srcPath, apply) => {
246
246
 
247
- const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
247
+ //const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
248
+ let files = [];
249
+ if (apply.mybatis) files.push("mybatis.xml");
250
+ if (apply.service) files.push("service.java");
251
+ if (apply.controller) files.push("controller.java");
252
+ if (apply.javascript) files.push("react.jsx");
248
253
 
249
254
  const params = await Promise.all(
250
255
  files.map(async (file) => ({
@@ -256,6 +261,31 @@ export class IdeAi
256
261
  api.post(`/api/source/generateRealFile`, { list: params });
257
262
  };
258
263
 
264
+ #generateRealFile = async (srcPath, apply) => {
265
+ const fileMap = {
266
+ mybatis: { name: "mybatis.xml", path: srcPath.mybatisPullPath },
267
+ service: { name: "service.java", path: srcPath.servicePullPath },
268
+ controller: { name: "controller.java", path: srcPath.controllerPullPath },
269
+ javascript: { name: "react.jsx", path: srcPath.javascriptPullPath },
270
+ };
271
+
272
+ const selectedFiles = Object.entries(fileMap)
273
+ .filter(([key]) => apply[key])
274
+ .map(([_, { name, path }]) => ({ name, path }));
275
+
276
+ const params = await Promise.all(
277
+ selectedFiles.map(async ({ name, path }) => ({
278
+ path,
279
+ contents: await fetch(`/api/templates/${name}`).then(res => res.text()),
280
+ }))
281
+ );
282
+
283
+ console.log(params);
284
+
285
+ api.post(`/api/source/generateRealFile`, { list: params });
286
+ };
287
+
288
+
259
289
  #generateTmplFile = async (promptFile, generateFileName, params) => {
260
290
 
261
291
  let src = await this.#invoke(promptFile, params);
@@ -308,11 +338,10 @@ export class IdeAi
308
338
  };*/
309
339
  };
310
340
 
311
- #createSource = async (userPrompt) => {
341
+ #createSource = async (userPrompt, apply) => {
312
342
  const where = await this.#where(userPrompt, this.#getMenuInfo(), await this.#getTableList());
313
343
  this.#parent.addMessage("대상 메뉴와 테이블을 찾았습니다.")
314
344
 
315
-
316
345
  console.log(where);
317
346
 
318
347
  const srcPath = this.#getSourcePath(where.menu.url);
@@ -357,10 +386,10 @@ export class IdeAi
357
386
  });
358
387
  this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
359
388
 
360
- await this.#generateRealFile(srcPath);
389
+ await this.#generateRealFile(srcPath, apply);
361
390
  };
362
391
 
363
- #modifySource = async (userPrompt) => {
392
+ #modifySource = async (userPrompt, apply) => {
364
393
 
365
394
  const el = ninegrid.querySelector("nx-side-menu-item.active");
366
395
  if (!el) throw new Error("관련 메뉴를 찾을 수 없습니다.");
@@ -412,57 +441,76 @@ export class IdeAi
412
441
 
413
442
  const columnInfo = await this.#getColumnInfo(where.table);
414
443
 
415
- const mybatisXmlSource = await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
416
- userPrompt: userPrompt,
417
- originSrc: src.mybatis,
418
- resultType: srcPath.resultType,
419
- namespace: srcPath.namespace,
420
- tableDefinitions: columnInfo,
421
- });
422
- this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
423
-
424
- return;
425
-
426
- const serviceSrc = await this.#generateTmplFile("/prompts/meta/U.BuildService.txt", "service.java", {
427
- userPrompt: userPrompt,
428
- originSrc: src.service,
429
- baseClass: srcPath.baseClass,
430
- myBatisPath: srcPath.mybatis,
431
- namespace: srcPath.namespace,
432
- package: srcPath.package + ".service",
433
- mybatisXmlSource: mybatisXmlSource,
434
- });
435
- this.#parent.addMessage("Java(Service) 소스파일을 생성했습니다.");
436
-
437
-
438
- const controllerSrc = await this.#generateTmplFile("/prompts/meta/U.BuildController.txt", "controller.java", {
439
- userPrompt: userPrompt,
440
- originSrc: src.controller,
441
- baseClass: srcPath.baseClass,
442
- menuUrl: where.menu.url,
443
- package: srcPath.package + ".controller",
444
- serviceSource: serviceSrc,
445
- });
446
- this.#parent.addMessage("Java(Controller) 소스파일을 생성했습니다.");
444
+ let mybatisXmlSource;
445
+ if (apply.mybatis) {
446
+ mybatisXmlSource = await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
447
+ userPrompt: userPrompt,
448
+ originSrc: src.mybatis,
449
+ resultType: srcPath.resultType,
450
+ namespace: srcPath.namespace,
451
+ tableDefinitions: columnInfo,
452
+ });
453
+ this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
454
+ }
455
+ else {
456
+ mybatisXmlSource = src.mybatis;
457
+ }
447
458
 
459
+ let serviceSrc;
460
+ if (apply.service) {
461
+ serviceSrc = await this.#generateTmplFile("/prompts/meta/U.BuildService.txt", "service.java", {
462
+ userPrompt: userPrompt,
463
+ originSrc: src.service,
464
+ baseClass: srcPath.baseClass,
465
+ myBatisPath: srcPath.mybatis,
466
+ namespace: srcPath.namespace,
467
+ package: srcPath.package + ".service",
468
+ mybatisXmlSource: mybatisXmlSource,
469
+ });
470
+ this.#parent.addMessage("Java(Service) 소스파일을 생성했습니다.");
471
+ }
472
+ else {
473
+ serviceSrc = src.service;
474
+ }
448
475
 
449
- const jsSrc = await this.#generateTmplFile("/prompts/meta/U.BuildReactJsx.txt", "react.jsx", {
450
- userPrompt: userPrompt,
451
- originSrc: src.javascript,
452
- menuUrl: where.menu.url,
453
- menuName: where.menu.name,
454
- baseClass: srcPath.baseClass,
455
- controllerSource: controllerSrc,
456
- tableDefinitions: columnInfo,
457
- });
458
- this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
476
+ let controllerSrc;
477
+ if (apply.controller) {
478
+ controllerSrc = await this.#generateTmplFile("/prompts/meta/U.BuildController.txt", "controller.java", {
479
+ userPrompt: userPrompt,
480
+ originSrc: src.controller,
481
+ baseClass: srcPath.baseClass,
482
+ menuUrl: where.menu.url,
483
+ package: srcPath.package + ".controller",
484
+ serviceSource: serviceSrc,
485
+ });
486
+ this.#parent.addMessage("Java(Controller) 소스파일을 생성했습니다.");
487
+ }
488
+ else {
489
+ controllerSrc = src.controller;
490
+ }
459
491
 
460
- console.log(src.javascript);
492
+ let jsSrc;
493
+ if (apply.javascript) {
494
+ jsSrc = await this.#generateTmplFile("/prompts/meta/U.BuildReactJsx.txt", "react.jsx", {
495
+ userPrompt: userPrompt,
496
+ originSrc: src.javascript,
497
+ menuUrl: where.menu.url,
498
+ menuName: where.menu.name,
499
+ baseClass: srcPath.baseClass,
500
+ controllerSource: controllerSrc,
501
+ tableDefinitions: columnInfo,
502
+ });
503
+ this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
504
+ }
505
+ else {
506
+ jsSrc = src.javascript;
507
+ }
508
+ //console.log(src.javascript);
461
509
 
462
- await this.#generateRealFile(srcPath);
510
+ await this.#generateRealFile(srcPath, apply);
463
511
  };
464
512
 
465
- generateSourceClient = async (userPrompt) => {
513
+ generateSourceClient = async (userPrompt, apply) => {
466
514
 
467
515
  this.#createModel();
468
516
 
@@ -470,10 +518,13 @@ export class IdeAi
470
518
  this.#parent.addMessage("명령을 이해했습니다.");
471
519
 
472
520
  if (what === "1") {
473
- await this.#createSource(userPrompt);
521
+ if (!apply.mybatis || !apply.service || !apply.controller || !apply.javascript) {
522
+ return "소스 생성하실려면 변경대상 소스를 모두 선택하세요.";
523
+ }
524
+ await this.#createSource(userPrompt, apply);
474
525
  }
475
526
  else if (what === "2") {
476
- await this.#modifySource(userPrompt);
527
+ await this.#modifySource(userPrompt, apply);
477
528
  }
478
529
 
479
530
  return "OK";
@@ -102,6 +102,13 @@ export class IdeAssi extends HTMLElement
102
102
 
103
103
  e.preventDefault();
104
104
 
105
+ const mybatis = this.shadowRoot.querySelector("#mybatis").checked;
106
+ const service = this.shadowRoot.querySelector("#service").checked;
107
+ const controller = this.shadowRoot.querySelector("#controller").checked;
108
+ const javascript = this.shadowRoot.querySelector("#javascript").checked;
109
+
110
+ if (!mybatis && !service && !controller && !javascript) return;
111
+
105
112
  const userPrompt = e.target.value.trim();
106
113
  if (!userPrompt) return;
107
114
 
@@ -122,63 +129,18 @@ export class IdeAssi extends HTMLElement
122
129
  elAiChat.add("ing", "...");
123
130
 
124
131
  try {
125
- const r = await this.#ai.generateSourceClient(userPrompt);
132
+ const r = await this.#ai.generateSourceClient(userPrompt, {
133
+ mybatis: mybatis,
134
+ service: service,
135
+ controller: controller,
136
+ javascript: javascript,
137
+ });
126
138
  elAiChat.add("ai", r);
127
139
  } catch (error) {
128
-
129
140
  console.error(error);
130
141
  elAiChat.add("ai", String(error).replace("Error:", ""));
131
142
  }
132
143
 
133
- /**
134
- try {
135
- const code = `
136
- package tmpl.generated;
137
-
138
- public class HelloWorld {
139
- public String sayHello() {
140
- return "Hello from generated class!";
141
- }
142
- }
143
- `;
144
-
145
- const js = `
146
- const Home = () => {
147
- const wrapStyle = {
148
- backgroundColor: "white",
149
- color: "black",
150
- padding: "0px",
151
- textAlign: "center",
152
- fontSize: "18px",
153
- height: "100%",
154
- };
155
-
156
- return (
157
- <div style={wrapStyle}>
158
- 11111
159
- </div>
160
- );
161
- };
162
-
163
- export default Home;
164
- `;
165
-
166
-
167
- await fetch("/api/files/js", {
168
- method: "POST",
169
- headers: { "Content-Type": "application/json" },
170
- body: JSON.stringify({
171
- //filename: "HelloWorld.java",
172
- filename: "Test.jsx",
173
- content: js
174
- })
175
- });
176
- } catch (error) {
177
- console.error(error);
178
- //elAiChat.add("ai", error);
179
- }
180
- */
181
-
182
144
  this.#ing = false;
183
145
  }
184
146
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ide-assi",
3
3
  "type": "module",
4
- "version": "0.288.0",
4
+ "version": "0.289.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -242,9 +242,14 @@ export class IdeAi
242
242
  };
243
243
 
244
244
 
245
- #generateRealFile = async (srcPath) => {
245
+ #generateRealFile_BAK = async (srcPath, apply) => {
246
246
 
247
- const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
247
+ //const files = ["mybatis.xml", "service.java", "controller.java", "react.jsx"];
248
+ let files = [];
249
+ if (apply.mybatis) files.push("mybatis.xml");
250
+ if (apply.service) files.push("service.java");
251
+ if (apply.controller) files.push("controller.java");
252
+ if (apply.javascript) files.push("react.jsx");
248
253
 
249
254
  const params = await Promise.all(
250
255
  files.map(async (file) => ({
@@ -256,6 +261,31 @@ export class IdeAi
256
261
  api.post(`/api/source/generateRealFile`, { list: params });
257
262
  };
258
263
 
264
+ #generateRealFile = async (srcPath, apply) => {
265
+ const fileMap = {
266
+ mybatis: { name: "mybatis.xml", path: srcPath.mybatisPullPath },
267
+ service: { name: "service.java", path: srcPath.servicePullPath },
268
+ controller: { name: "controller.java", path: srcPath.controllerPullPath },
269
+ javascript: { name: "react.jsx", path: srcPath.javascriptPullPath },
270
+ };
271
+
272
+ const selectedFiles = Object.entries(fileMap)
273
+ .filter(([key]) => apply[key])
274
+ .map(([_, { name, path }]) => ({ name, path }));
275
+
276
+ const params = await Promise.all(
277
+ selectedFiles.map(async ({ name, path }) => ({
278
+ path,
279
+ contents: await fetch(`/api/templates/${name}`).then(res => res.text()),
280
+ }))
281
+ );
282
+
283
+ console.log(params);
284
+
285
+ api.post(`/api/source/generateRealFile`, { list: params });
286
+ };
287
+
288
+
259
289
  #generateTmplFile = async (promptFile, generateFileName, params) => {
260
290
 
261
291
  let src = await this.#invoke(promptFile, params);
@@ -308,11 +338,10 @@ export class IdeAi
308
338
  };*/
309
339
  };
310
340
 
311
- #createSource = async (userPrompt) => {
341
+ #createSource = async (userPrompt, apply) => {
312
342
  const where = await this.#where(userPrompt, this.#getMenuInfo(), await this.#getTableList());
313
343
  this.#parent.addMessage("대상 메뉴와 테이블을 찾았습니다.")
314
344
 
315
-
316
345
  console.log(where);
317
346
 
318
347
  const srcPath = this.#getSourcePath(where.menu.url);
@@ -357,10 +386,10 @@ export class IdeAi
357
386
  });
358
387
  this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
359
388
 
360
- await this.#generateRealFile(srcPath);
389
+ await this.#generateRealFile(srcPath, apply);
361
390
  };
362
391
 
363
- #modifySource = async (userPrompt) => {
392
+ #modifySource = async (userPrompt, apply) => {
364
393
 
365
394
  const el = ninegrid.querySelector("nx-side-menu-item.active");
366
395
  if (!el) throw new Error("관련 메뉴를 찾을 수 없습니다.");
@@ -412,57 +441,76 @@ export class IdeAi
412
441
 
413
442
  const columnInfo = await this.#getColumnInfo(where.table);
414
443
 
415
- const mybatisXmlSource = await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
416
- userPrompt: userPrompt,
417
- originSrc: src.mybatis,
418
- resultType: srcPath.resultType,
419
- namespace: srcPath.namespace,
420
- tableDefinitions: columnInfo,
421
- });
422
- this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
423
-
424
- return;
425
-
426
- const serviceSrc = await this.#generateTmplFile("/prompts/meta/U.BuildService.txt", "service.java", {
427
- userPrompt: userPrompt,
428
- originSrc: src.service,
429
- baseClass: srcPath.baseClass,
430
- myBatisPath: srcPath.mybatis,
431
- namespace: srcPath.namespace,
432
- package: srcPath.package + ".service",
433
- mybatisXmlSource: mybatisXmlSource,
434
- });
435
- this.#parent.addMessage("Java(Service) 소스파일을 생성했습니다.");
436
-
437
-
438
- const controllerSrc = await this.#generateTmplFile("/prompts/meta/U.BuildController.txt", "controller.java", {
439
- userPrompt: userPrompt,
440
- originSrc: src.controller,
441
- baseClass: srcPath.baseClass,
442
- menuUrl: where.menu.url,
443
- package: srcPath.package + ".controller",
444
- serviceSource: serviceSrc,
445
- });
446
- this.#parent.addMessage("Java(Controller) 소스파일을 생성했습니다.");
444
+ let mybatisXmlSource;
445
+ if (apply.mybatis) {
446
+ mybatisXmlSource = await this.#generateTmplFile("/prompts/meta/U.BuildMyBatisMapper.txt", "mybatis.xml", {
447
+ userPrompt: userPrompt,
448
+ originSrc: src.mybatis,
449
+ resultType: srcPath.resultType,
450
+ namespace: srcPath.namespace,
451
+ tableDefinitions: columnInfo,
452
+ });
453
+ this.#parent.addMessage("MyBatis 소스파일을 생성했습니다.");
454
+ }
455
+ else {
456
+ mybatisXmlSource = src.mybatis;
457
+ }
447
458
 
459
+ let serviceSrc;
460
+ if (apply.service) {
461
+ serviceSrc = await this.#generateTmplFile("/prompts/meta/U.BuildService.txt", "service.java", {
462
+ userPrompt: userPrompt,
463
+ originSrc: src.service,
464
+ baseClass: srcPath.baseClass,
465
+ myBatisPath: srcPath.mybatis,
466
+ namespace: srcPath.namespace,
467
+ package: srcPath.package + ".service",
468
+ mybatisXmlSource: mybatisXmlSource,
469
+ });
470
+ this.#parent.addMessage("Java(Service) 소스파일을 생성했습니다.");
471
+ }
472
+ else {
473
+ serviceSrc = src.service;
474
+ }
448
475
 
449
- const jsSrc = await this.#generateTmplFile("/prompts/meta/U.BuildReactJsx.txt", "react.jsx", {
450
- userPrompt: userPrompt,
451
- originSrc: src.javascript,
452
- menuUrl: where.menu.url,
453
- menuName: where.menu.name,
454
- baseClass: srcPath.baseClass,
455
- controllerSource: controllerSrc,
456
- tableDefinitions: columnInfo,
457
- });
458
- this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
476
+ let controllerSrc;
477
+ if (apply.controller) {
478
+ controllerSrc = await this.#generateTmplFile("/prompts/meta/U.BuildController.txt", "controller.java", {
479
+ userPrompt: userPrompt,
480
+ originSrc: src.controller,
481
+ baseClass: srcPath.baseClass,
482
+ menuUrl: where.menu.url,
483
+ package: srcPath.package + ".controller",
484
+ serviceSource: serviceSrc,
485
+ });
486
+ this.#parent.addMessage("Java(Controller) 소스파일을 생성했습니다.");
487
+ }
488
+ else {
489
+ controllerSrc = src.controller;
490
+ }
459
491
 
460
- console.log(src.javascript);
492
+ let jsSrc;
493
+ if (apply.javascript) {
494
+ jsSrc = await this.#generateTmplFile("/prompts/meta/U.BuildReactJsx.txt", "react.jsx", {
495
+ userPrompt: userPrompt,
496
+ originSrc: src.javascript,
497
+ menuUrl: where.menu.url,
498
+ menuName: where.menu.name,
499
+ baseClass: srcPath.baseClass,
500
+ controllerSource: controllerSrc,
501
+ tableDefinitions: columnInfo,
502
+ });
503
+ this.#parent.addMessage("Jsx(React) 소스파일을 생성했습니다.");
504
+ }
505
+ else {
506
+ jsSrc = src.javascript;
507
+ }
508
+ //console.log(src.javascript);
461
509
 
462
- await this.#generateRealFile(srcPath);
510
+ await this.#generateRealFile(srcPath, apply);
463
511
  };
464
512
 
465
- generateSourceClient = async (userPrompt) => {
513
+ generateSourceClient = async (userPrompt, apply) => {
466
514
 
467
515
  this.#createModel();
468
516
 
@@ -470,10 +518,13 @@ export class IdeAi
470
518
  this.#parent.addMessage("명령을 이해했습니다.");
471
519
 
472
520
  if (what === "1") {
473
- await this.#createSource(userPrompt);
521
+ if (!apply.mybatis || !apply.service || !apply.controller || !apply.javascript) {
522
+ return "소스 생성하실려면 변경대상 소스를 모두 선택하세요.";
523
+ }
524
+ await this.#createSource(userPrompt, apply);
474
525
  }
475
526
  else if (what === "2") {
476
- await this.#modifySource(userPrompt);
527
+ await this.#modifySource(userPrompt, apply);
477
528
  }
478
529
 
479
530
  return "OK";
@@ -102,6 +102,13 @@ export class IdeAssi extends HTMLElement
102
102
 
103
103
  e.preventDefault();
104
104
 
105
+ const mybatis = this.shadowRoot.querySelector("#mybatis").checked;
106
+ const service = this.shadowRoot.querySelector("#service").checked;
107
+ const controller = this.shadowRoot.querySelector("#controller").checked;
108
+ const javascript = this.shadowRoot.querySelector("#javascript").checked;
109
+
110
+ if (!mybatis && !service && !controller && !javascript) return;
111
+
105
112
  const userPrompt = e.target.value.trim();
106
113
  if (!userPrompt) return;
107
114
 
@@ -122,63 +129,18 @@ export class IdeAssi extends HTMLElement
122
129
  elAiChat.add("ing", "...");
123
130
 
124
131
  try {
125
- const r = await this.#ai.generateSourceClient(userPrompt);
132
+ const r = await this.#ai.generateSourceClient(userPrompt, {
133
+ mybatis: mybatis,
134
+ service: service,
135
+ controller: controller,
136
+ javascript: javascript,
137
+ });
126
138
  elAiChat.add("ai", r);
127
139
  } catch (error) {
128
-
129
140
  console.error(error);
130
141
  elAiChat.add("ai", String(error).replace("Error:", ""));
131
142
  }
132
143
 
133
- /**
134
- try {
135
- const code = `
136
- package tmpl.generated;
137
-
138
- public class HelloWorld {
139
- public String sayHello() {
140
- return "Hello from generated class!";
141
- }
142
- }
143
- `;
144
-
145
- const js = `
146
- const Home = () => {
147
- const wrapStyle = {
148
- backgroundColor: "white",
149
- color: "black",
150
- padding: "0px",
151
- textAlign: "center",
152
- fontSize: "18px",
153
- height: "100%",
154
- };
155
-
156
- return (
157
- <div style={wrapStyle}>
158
- 11111
159
- </div>
160
- );
161
- };
162
-
163
- export default Home;
164
- `;
165
-
166
-
167
- await fetch("/api/files/js", {
168
- method: "POST",
169
- headers: { "Content-Type": "application/json" },
170
- body: JSON.stringify({
171
- //filename: "HelloWorld.java",
172
- filename: "Test.jsx",
173
- content: js
174
- })
175
- });
176
- } catch (error) {
177
- console.error(error);
178
- //elAiChat.add("ai", error);
179
- }
180
- */
181
-
182
144
  this.#ing = false;
183
145
  }
184
146