next2d-development-mcp 0.0.1

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.
Files changed (145) hide show
  1. package/README.md +344 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +16 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/prompts/index.d.ts +3 -0
  7. package/dist/prompts/index.d.ts.map +1 -0
  8. package/dist/prompts/index.js +211 -0
  9. package/dist/prompts/index.js.map +1 -0
  10. package/dist/prompts/prompts.test.d.ts +2 -0
  11. package/dist/prompts/prompts.test.d.ts.map +1 -0
  12. package/dist/prompts/prompts.test.js +23 -0
  13. package/dist/prompts/prompts.test.js.map +1 -0
  14. package/dist/references/develop-specs.md +1576 -0
  15. package/dist/references/framework-specs.md +1687 -0
  16. package/dist/references/player-specs.md +3292 -0
  17. package/dist/resources/index.d.ts +3 -0
  18. package/dist/resources/index.d.ts.map +1 -0
  19. package/dist/resources/index.js +185 -0
  20. package/dist/resources/index.js.map +1 -0
  21. package/dist/resources/resources.test.d.ts +2 -0
  22. package/dist/resources/resources.test.d.ts.map +1 -0
  23. package/dist/resources/resources.test.js +32 -0
  24. package/dist/resources/resources.test.js.map +1 -0
  25. package/dist/templates/animation.d.ts +6 -0
  26. package/dist/templates/animation.d.ts.map +1 -0
  27. package/dist/templates/animation.js +65 -0
  28. package/dist/templates/animation.js.map +1 -0
  29. package/dist/templates/animation.test.d.ts +2 -0
  30. package/dist/templates/animation.test.d.ts.map +1 -0
  31. package/dist/templates/animation.test.js +30 -0
  32. package/dist/templates/animation.test.js.map +1 -0
  33. package/dist/templates/domainService.d.ts +9 -0
  34. package/dist/templates/domainService.d.ts.map +1 -0
  35. package/dist/templates/domainService.js +56 -0
  36. package/dist/templates/domainService.js.map +1 -0
  37. package/dist/templates/domainService.test.d.ts +2 -0
  38. package/dist/templates/domainService.test.d.ts.map +1 -0
  39. package/dist/templates/domainService.test.js +33 -0
  40. package/dist/templates/domainService.test.js.map +1 -0
  41. package/dist/templates/interfaceFile.d.ts +5 -0
  42. package/dist/templates/interfaceFile.d.ts.map +1 -0
  43. package/dist/templates/interfaceFile.js +16 -0
  44. package/dist/templates/interfaceFile.js.map +1 -0
  45. package/dist/templates/interfaceFile.test.d.ts +2 -0
  46. package/dist/templates/interfaceFile.test.d.ts.map +1 -0
  47. package/dist/templates/interfaceFile.test.js +30 -0
  48. package/dist/templates/interfaceFile.test.js.map +1 -0
  49. package/dist/templates/loading.d.ts +5 -0
  50. package/dist/templates/loading.d.ts.map +1 -0
  51. package/dist/templates/loading.js +62 -0
  52. package/dist/templates/loading.js.map +1 -0
  53. package/dist/templates/loading.test.d.ts +2 -0
  54. package/dist/templates/loading.test.d.ts.map +1 -0
  55. package/dist/templates/loading.test.js +31 -0
  56. package/dist/templates/loading.test.js.map +1 -0
  57. package/dist/templates/repository.d.ts +2 -0
  58. package/dist/templates/repository.d.ts.map +1 -0
  59. package/dist/templates/repository.js +42 -0
  60. package/dist/templates/repository.js.map +1 -0
  61. package/dist/templates/repository.test.d.ts +2 -0
  62. package/dist/templates/repository.test.d.ts.map +1 -0
  63. package/dist/templates/repository.test.js +44 -0
  64. package/dist/templates/repository.test.js.map +1 -0
  65. package/dist/templates/uiComponent.d.ts +4 -0
  66. package/dist/templates/uiComponent.d.ts.map +1 -0
  67. package/dist/templates/uiComponent.js +108 -0
  68. package/dist/templates/uiComponent.js.map +1 -0
  69. package/dist/templates/uiComponent.test.d.ts +2 -0
  70. package/dist/templates/uiComponent.test.d.ts.map +1 -0
  71. package/dist/templates/uiComponent.test.js +76 -0
  72. package/dist/templates/uiComponent.test.js.map +1 -0
  73. package/dist/templates/usecase.d.ts +2 -0
  74. package/dist/templates/usecase.d.ts.map +1 -0
  75. package/dist/templates/usecase.js +31 -0
  76. package/dist/templates/usecase.js.map +1 -0
  77. package/dist/templates/usecase.test.d.ts +2 -0
  78. package/dist/templates/usecase.test.d.ts.map +1 -0
  79. package/dist/templates/usecase.test.js +23 -0
  80. package/dist/templates/usecase.test.js.map +1 -0
  81. package/dist/templates/view.d.ts +3 -0
  82. package/dist/templates/view.d.ts.map +1 -0
  83. package/dist/templates/view.js +112 -0
  84. package/dist/templates/view.js.map +1 -0
  85. package/dist/templates/view.test.d.ts +2 -0
  86. package/dist/templates/view.test.d.ts.map +1 -0
  87. package/dist/templates/view.test.js +71 -0
  88. package/dist/templates/view.test.js.map +1 -0
  89. package/dist/tools/addRoute.d.ts +3 -0
  90. package/dist/tools/addRoute.d.ts.map +1 -0
  91. package/dist/tools/addRoute.js +101 -0
  92. package/dist/tools/addRoute.js.map +1 -0
  93. package/dist/tools/createAnimation.d.ts +3 -0
  94. package/dist/tools/createAnimation.d.ts.map +1 -0
  95. package/dist/tools/createAnimation.js +53 -0
  96. package/dist/tools/createAnimation.js.map +1 -0
  97. package/dist/tools/createDomainService.d.ts +3 -0
  98. package/dist/tools/createDomainService.d.ts.map +1 -0
  99. package/dist/tools/createDomainService.js +82 -0
  100. package/dist/tools/createDomainService.js.map +1 -0
  101. package/dist/tools/createInterface.d.ts +3 -0
  102. package/dist/tools/createInterface.d.ts.map +1 -0
  103. package/dist/tools/createInterface.js +59 -0
  104. package/dist/tools/createInterface.js.map +1 -0
  105. package/dist/tools/createLoading.d.ts +3 -0
  106. package/dist/tools/createLoading.d.ts.map +1 -0
  107. package/dist/tools/createLoading.js +52 -0
  108. package/dist/tools/createLoading.js.map +1 -0
  109. package/dist/tools/createRepository.d.ts +3 -0
  110. package/dist/tools/createRepository.d.ts.map +1 -0
  111. package/dist/tools/createRepository.js +55 -0
  112. package/dist/tools/createRepository.js.map +1 -0
  113. package/dist/tools/createUiComponent.d.ts +3 -0
  114. package/dist/tools/createUiComponent.d.ts.map +1 -0
  115. package/dist/tools/createUiComponent.js +80 -0
  116. package/dist/tools/createUiComponent.js.map +1 -0
  117. package/dist/tools/createUseCase.d.ts +3 -0
  118. package/dist/tools/createUseCase.d.ts.map +1 -0
  119. package/dist/tools/createUseCase.js +52 -0
  120. package/dist/tools/createUseCase.js.map +1 -0
  121. package/dist/tools/createView.d.ts +3 -0
  122. package/dist/tools/createView.d.ts.map +1 -0
  123. package/dist/tools/createView.js +59 -0
  124. package/dist/tools/createView.js.map +1 -0
  125. package/dist/tools/index.d.ts +5 -0
  126. package/dist/tools/index.d.ts.map +1 -0
  127. package/dist/tools/index.js +25 -0
  128. package/dist/tools/index.js.map +1 -0
  129. package/dist/tools/tools.test.d.ts +2 -0
  130. package/dist/tools/tools.test.d.ts.map +1 -0
  131. package/dist/tools/tools.test.js +58 -0
  132. package/dist/tools/tools.test.js.map +1 -0
  133. package/dist/tools/validateArchitecture.d.ts +3 -0
  134. package/dist/tools/validateArchitecture.d.ts.map +1 -0
  135. package/dist/tools/validateArchitecture.js +134 -0
  136. package/dist/tools/validateArchitecture.js.map +1 -0
  137. package/dist/utils.d.ts +10 -0
  138. package/dist/utils.d.ts.map +1 -0
  139. package/dist/utils.js +18 -0
  140. package/dist/utils.js.map +1 -0
  141. package/dist/utils.test.d.ts +2 -0
  142. package/dist/utils.test.d.ts.map +1 -0
  143. package/dist/utils.test.js +34 -0
  144. package/dist/utils.test.js.map +1 -0
  145. package/package.json +48 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loading.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.test.d.ts","sourceRoot":"","sources":["../../src/templates/loading.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { generateLoading } from "./loading.js";
3
+ describe("generateLoading", () => {
4
+ it("generates Loading class with start and end methods", () => {
5
+ const code = generateLoading();
6
+ expect(code).toContain("export class Loading");
7
+ expect(code).toContain("start (): void");
8
+ expect(code).toContain("end (): void");
9
+ });
10
+ it("uses stage.addChild in start()", () => {
11
+ const code = generateLoading();
12
+ expect(code).toContain("stage.addChild(this._shape)");
13
+ });
14
+ it("uses shape.remove in end()", () => {
15
+ const code = generateLoading();
16
+ expect(code).toContain("this._shape.remove()");
17
+ });
18
+ it("imports Shape and stage from @next2d/display", () => {
19
+ const code = generateLoading();
20
+ expect(code).toContain('import { Shape, stage } from "@next2d/display"');
21
+ });
22
+ it("accepts custom class name", () => {
23
+ const code = generateLoading("CustomLoader");
24
+ expect(code).toContain("export class CustomLoader");
25
+ });
26
+ it("has constructor that initializes shape", () => {
27
+ const code = generateLoading();
28
+ expect(code).toContain("this._shape = new Shape()");
29
+ });
30
+ });
31
+ //# sourceMappingURL=loading.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.test.js","sourceRoot":"","sources":["../../src/templates/loading.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateRepository(name: string, methodName?: string): string;
2
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/templates/repository.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAc,GAAG,MAAM,CAuCnF"}
@@ -0,0 +1,42 @@
1
+ import { toPascalCase } from "../utils.js";
2
+ export function generateRepository(name, methodName = "get") {
3
+ const pascal = toPascalCase(name);
4
+ return `import type { I${pascal}Response } from "@/interface/I${pascal}Response";
5
+ import { config } from "@/config/Config";
6
+
7
+ /**
8
+ * @class
9
+ */
10
+ export class ${pascal}Repository {
11
+
12
+ /**
13
+ * @return {Promise<I${pascal}Response>}
14
+ * @method
15
+ * @static
16
+ * @public
17
+ */
18
+ static async ${methodName} (): Promise<I${pascal}Response>
19
+ {
20
+ try {
21
+
22
+ const response = await fetch(
23
+ \`\${config.api.endPoint}api/${name.toLowerCase()}.json\`
24
+ );
25
+
26
+ if (!response.ok) {
27
+ throw new Error(\`HTTP error! status: \${response.status}\`);
28
+ }
29
+
30
+ return await response.json() as I${pascal}Response;
31
+
32
+ } catch (error) {
33
+
34
+ console.error("Failed to fetch:", error);
35
+ throw error;
36
+
37
+ }
38
+ }
39
+ }
40
+ `;
41
+ }
42
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/templates/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,aAAqB,KAAK;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,kBAAkB,MAAM,iCAAiC,MAAM;;;;;;eAM3D,MAAM;;;2BAGM,MAAM;;;;;mBAKd,UAAU,iBAAiB,MAAM;;;;;+CAKL,IAAI,CAAC,WAAW,EAAE;;;;;;;+CAOlB,MAAM;;;;;;;;;;CAUpD,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.test.d.ts","sourceRoot":"","sources":["../../src/templates/repository.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { generateRepository } from "./repository.js";
3
+ describe("generateRepository", () => {
4
+ it("generates Repository class with correct name", () => {
5
+ const code = generateRepository("HomeText");
6
+ expect(code).toContain("export class HomeTextRepository");
7
+ });
8
+ it("uses default method name 'get'", () => {
9
+ const code = generateRepository("HomeText");
10
+ expect(code).toContain("static async get ()");
11
+ });
12
+ it("uses custom method name", () => {
13
+ const code = generateRepository("HomeText", "fetchAll");
14
+ expect(code).toContain("static async fetchAll ()");
15
+ });
16
+ it("includes try-catch block", () => {
17
+ const code = generateRepository("HomeText");
18
+ expect(code).toContain("try {");
19
+ expect(code).toContain("} catch (error)");
20
+ });
21
+ it("uses config for endpoint", () => {
22
+ const code = generateRepository("HomeText");
23
+ expect(code).toContain("config.api.endPoint");
24
+ });
25
+ it("imports config", () => {
26
+ const code = generateRepository("HomeText");
27
+ expect(code).toContain('import { config } from "@/config/Config"');
28
+ });
29
+ it("returns typed interface instead of unknown", () => {
30
+ const code = generateRepository("HomeText");
31
+ expect(code).toContain("Promise<IHomeTextResponse>");
32
+ expect(code).toContain('import type { IHomeTextResponse }');
33
+ expect(code).not.toContain("Promise<unknown>");
34
+ });
35
+ it("uses .json extension in API path for mock compatibility", () => {
36
+ const code = generateRepository("HomeText");
37
+ expect(code).toContain("api/hometext.json");
38
+ });
39
+ it("casts response to typed interface", () => {
40
+ const code = generateRepository("HomeText");
41
+ expect(code).toContain("as IHomeTextResponse");
42
+ });
43
+ });
44
+ //# sourceMappingURL=repository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.test.js","sourceRoot":"","sources":["../../src/templates/repository.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type AtomicLevel = "atom" | "molecule" | "organism" | "page";
2
+ export declare function generateUiComponent(name: string, level: AtomicLevel, parentClass?: string, screen?: string): string;
3
+ export declare function generateContent(name: string): string;
4
+ //# sourceMappingURL=uiComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiComponent.d.ts","sourceRoot":"","sources":["../../src/templates/uiComponent.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAEpE,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,EAClB,WAAW,GAAE,MAAiB,EAC9B,MAAM,GAAE,MAAW,GACpB,MAAM,CAkFR;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyBpD"}
@@ -0,0 +1,108 @@
1
+ import { toPascalCase } from "../utils.js";
2
+ export function generateUiComponent(name, level, parentClass = "Sprite", screen = "") {
3
+ const pascal = toPascalCase(name);
4
+ const suffix = level.charAt(0).toUpperCase() + level.slice(1);
5
+ const importDisplay = parentClass === "Sprite"
6
+ ? "import { Sprite } from \"@next2d/display\";"
7
+ : parentClass === "MovieClip"
8
+ ? "import { MovieClip } from \"@next2d/display\";"
9
+ : parentClass === "Shape"
10
+ ? "import { Shape } from \"@next2d/display\";"
11
+ : parentClass === "TextField"
12
+ ? "import { TextField } from \"@next2d/text\";"
13
+ : `// TODO: Adjust import path for ${parentClass}\nimport { ${parentClass} } from "@next2d/display";`;
14
+ // Page components receive typed ViewModel and use config for positioning
15
+ if (level === "page") {
16
+ const screenDir = screen || name.toLowerCase();
17
+ return `import type { ${pascal}ViewModel } from "@/view/${screenDir}/${pascal}ViewModel";
18
+ import { config } from "@/config/Config";
19
+ ${importDisplay}
20
+
21
+ /**
22
+ * @description ${pascal}画面のページ
23
+ * ${pascal} Screen Page
24
+ *
25
+ * @class
26
+ * @extends {${parentClass}}
27
+ */
28
+ export class ${pascal}Page extends ${parentClass} {
29
+
30
+ /**
31
+ * @description 初期起動関数
32
+ * Initializer function
33
+ *
34
+ * @param {${pascal}ViewModel} vm
35
+ * @return {void}
36
+ * @method
37
+ * @public
38
+ */
39
+ initialize (vm: ${pascal}ViewModel): void
40
+ {
41
+ // TODO: Create child components and set positions using config.stage.width/height
42
+ // TODO: Bind events to ViewModel methods via arrow functions:
43
+ // component.addEventListener(PointerEvent.POINTER_UP, async (): Promise<void> => {
44
+ // await vm.onClickSomething();
45
+ // });
46
+ }
47
+
48
+ /**
49
+ * @description ページ表示時の処理
50
+ * Processing when the page is displayed
51
+ *
52
+ * @return {Promise<void>}
53
+ * @method
54
+ * @public
55
+ */
56
+ async onEnter (): Promise<void>
57
+ {
58
+ // TODO: Start entry animations
59
+ }
60
+ }
61
+ `;
62
+ }
63
+ return `${importDisplay}
64
+
65
+ /**
66
+ * @class
67
+ * @extends {${parentClass}}
68
+ */
69
+ export class ${pascal}${suffix} extends ${parentClass} {
70
+
71
+ /**
72
+ * @constructor
73
+ * @public
74
+ */
75
+ constructor ()
76
+ {
77
+ super();
78
+ }
79
+ }
80
+ `;
81
+ }
82
+ export function generateContent(name) {
83
+ const pascal = toPascalCase(name);
84
+ return `import { MovieClipContent } from "@next2d/framework";
85
+
86
+ /**
87
+ * @see file/sample.n2d
88
+ *
89
+ * @class
90
+ * @extends {MovieClipContent}
91
+ */
92
+ export class ${pascal}Content extends MovieClipContent {
93
+
94
+ /**
95
+ * @description Animation Toolのシンボル名を返す
96
+ * Returns the Animation Tool symbol name
97
+ *
98
+ * @return {string}
99
+ * @readonly
100
+ */
101
+ get namespace (): string
102
+ {
103
+ return "${pascal}Content";
104
+ }
105
+ }
106
+ `;
107
+ }
108
+ //# sourceMappingURL=uiComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiComponent.js","sourceRoot":"","sources":["../../src/templates/uiComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,UAAU,mBAAmB,CAC/B,IAAY,EACZ,KAAkB,EAClB,cAAsB,QAAQ,EAC9B,SAAiB,EAAE;IAEnB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,aAAa,GAAG,WAAW,KAAK,QAAQ;QAC1C,CAAC,CAAC,6CAA6C;QAC/C,CAAC,CAAC,WAAW,KAAK,WAAW;YACzB,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,WAAW,KAAK,OAAO;gBACrB,CAAC,CAAC,4CAA4C;gBAC9C,CAAC,CAAC,WAAW,KAAK,WAAW;oBACzB,CAAC,CAAC,6CAA6C;oBAC/C,CAAC,CAAC,mCAAmC,WAAW,cAAc,WAAW,4BAA4B,CAAC;IAEtH,yEAAyE;IACzE,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,OAAO,iBAAiB,MAAM,4BAA4B,SAAS,IAAI,MAAM;;EAEnF,aAAa;;;kBAGG,MAAM;kBACN,MAAM;;;eAGT,WAAW;;eAEX,MAAM,gBAAgB,WAAW;;;;;;kBAM9B,MAAM;;;;;sBAKF,MAAM;;;;;;;;;;;;;;;;;;;;;;CAsB3B,CAAC;IACE,CAAC;IAED,OAAO,GAAG,aAAa;;;;eAIZ,WAAW;;eAEX,MAAM,GAAG,MAAM,YAAY,WAAW;;;;;;;;;;;CAWpD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;;;;;;;;eAQI,MAAM;;;;;;;;;;;kBAWH,MAAM;;;CAGvB,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=uiComponent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiComponent.test.d.ts","sourceRoot":"","sources":["../../src/templates/uiComponent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { generateUiComponent, generateContent } from "./uiComponent.js";
3
+ describe("generateUiComponent", () => {
4
+ it("generates Atom component", () => {
5
+ const code = generateUiComponent("Button", "atom");
6
+ expect(code).toContain("export class ButtonAtom extends Sprite");
7
+ });
8
+ it("generates Molecule component", () => {
9
+ const code = generateUiComponent("SearchBar", "molecule");
10
+ expect(code).toContain("export class SearchBarMolecule extends Sprite");
11
+ });
12
+ it("generates Organism component", () => {
13
+ const code = generateUiComponent("Header", "organism");
14
+ expect(code).toContain("export class HeaderOrganism extends Sprite");
15
+ });
16
+ it("generates Page component with typed ViewModel", () => {
17
+ const code = generateUiComponent("Home", "page");
18
+ expect(code).toContain("export class HomePage extends Sprite");
19
+ expect(code).toContain("import type { HomeViewModel }");
20
+ expect(code).toContain("initialize (vm: HomeViewModel): void");
21
+ expect(code).toContain('import { config } from "@/config/Config"');
22
+ });
23
+ it("page component has no any type", () => {
24
+ const code = generateUiComponent("Home", "page");
25
+ expect(code).not.toContain("any");
26
+ });
27
+ it("page component has onEnter method", () => {
28
+ const code = generateUiComponent("Home", "page");
29
+ expect(code).toContain("async onEnter ()");
30
+ });
31
+ it("page component has event binding hint with arrow function", () => {
32
+ const code = generateUiComponent("Home", "page");
33
+ expect(code).toContain("PointerEvent.POINTER_UP");
34
+ });
35
+ it("uses MovieClip as parent class", () => {
36
+ const code = generateUiComponent("AnimButton", "atom", "MovieClip");
37
+ expect(code).toContain("export class AnimButtonAtom extends MovieClip");
38
+ expect(code).toContain('import { MovieClip } from "@next2d/display"');
39
+ });
40
+ it("uses TextField from @next2d/text (not @next2d/display)", () => {
41
+ const code = generateUiComponent("Label", "atom", "TextField");
42
+ expect(code).toContain("export class LabelAtom extends TextField");
43
+ expect(code).toContain('import { TextField } from "@next2d/text"');
44
+ expect(code).not.toContain("@next2d/display");
45
+ });
46
+ it("adds TODO for unknown parent classes", () => {
47
+ const code = generateUiComponent("Custom", "atom", "ButtonAtom");
48
+ expect(code).toContain("TODO: Adjust import path for ButtonAtom");
49
+ });
50
+ it("atom/molecule/organism have no initialize with any type", () => {
51
+ const code = generateUiComponent("Button", "atom");
52
+ expect(code).not.toContain("any");
53
+ });
54
+ it("imports Sprite by default", () => {
55
+ const code = generateUiComponent("Button", "atom");
56
+ expect(code).toContain('import { Sprite } from "@next2d/display"');
57
+ });
58
+ });
59
+ describe("generateContent", () => {
60
+ it("generates Content class", () => {
61
+ const code = generateContent("HomeAnim");
62
+ expect(code).toContain("export class HomeAnimContent extends MovieClipContent");
63
+ });
64
+ it("uses getter for namespace (not constructor assignment)", () => {
65
+ const code = generateContent("HomeAnim");
66
+ expect(code).toContain('get namespace (): string');
67
+ expect(code).toContain('return "HomeAnimContent"');
68
+ // Must NOT use constructor assignment
69
+ expect(code).not.toContain("this.namespace =");
70
+ });
71
+ it("imports MovieClipContent from framework", () => {
72
+ const code = generateContent("HomeAnim");
73
+ expect(code).toContain('import { MovieClipContent } from "@next2d/framework"');
74
+ });
75
+ });
76
+ //# sourceMappingURL=uiComponent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiComponent.test.js","sourceRoot":"","sources":["../../src/templates/uiComponent.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function generateUseCase(name: string, _screenName: string): string;
2
+ //# sourceMappingURL=usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usecase.d.ts","sourceRoot":"","sources":["../../src/templates/usecase.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA4BzE"}
@@ -0,0 +1,31 @@
1
+ import { toPascalCase } from "../utils.js";
2
+ export function generateUseCase(name, _screenName) {
3
+ const pascal = toPascalCase(name);
4
+ const className = pascal.endsWith("UseCase") ? pascal : `${pascal}UseCase`;
5
+ return `/**
6
+ * @class
7
+ */
8
+ export class ${className} {
9
+
10
+ /**
11
+ * @constructor
12
+ * @public
13
+ */
14
+ constructor ()
15
+ {
16
+ // TODO: Inject dependencies
17
+ }
18
+
19
+ /**
20
+ * @return {void}
21
+ * @method
22
+ * @public
23
+ */
24
+ execute (): void
25
+ {
26
+ // TODO: Implement business logic
27
+ }
28
+ }
29
+ `;
30
+ }
31
+ //# sourceMappingURL=usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usecase.js","sourceRoot":"","sources":["../../src/templates/usecase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,WAAmB;IAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC;IAC3E,OAAO;;;eAGI,SAAS;;;;;;;;;;;;;;;;;;;;;CAqBvB,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=usecase.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usecase.test.d.ts","sourceRoot":"","sources":["../../src/templates/usecase.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { generateUseCase } from "./usecase.js";
3
+ describe("generateUseCase", () => {
4
+ it("generates UseCase class with correct name", () => {
5
+ const code = generateUseCase("StartDrag", "home");
6
+ expect(code).toContain("export class StartDragUseCase");
7
+ });
8
+ it("includes execute method", () => {
9
+ const code = generateUseCase("StartDrag", "home");
10
+ expect(code).toContain("execute (): void");
11
+ });
12
+ it("includes constructor", () => {
13
+ const code = generateUseCase("StartDrag", "home");
14
+ expect(code).toContain("constructor ()");
15
+ });
16
+ it("handles name already ending with UseCase", () => {
17
+ const code = generateUseCase("StartDragUseCase", "home");
18
+ expect(code).toContain("export class StartDragUseCase");
19
+ // Should NOT produce "StartDragUseCaseUseCase"
20
+ expect(code).not.toContain("UseCaseUseCase");
21
+ });
22
+ });
23
+ //# sourceMappingURL=usecase.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usecase.test.js","sourceRoot":"","sources":["../../src/templates/usecase.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,eAAe,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACxD,+CAA+C;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function generateView(name: string): string;
2
+ export declare function generateViewModel(name: string): string;
3
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/templates/view.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoEjD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwCtD"}
@@ -0,0 +1,112 @@
1
+ import { toPascalCase, toCamelCase } from "../utils.js";
2
+ export function generateView(name) {
3
+ const pascal = toPascalCase(name);
4
+ const camel = toCamelCase(name);
5
+ // Screen directory is the first segment for slash-separated routes (e.g. "quest/list" → "quest")
6
+ const screenDir = name.includes("/") ? name.split("/")[0].toLowerCase() : name.toLowerCase();
7
+ return `import type { ${pascal}ViewModel } from "./${pascal}ViewModel";
8
+ import { View } from "@next2d/framework";
9
+ import { ${pascal}Page } from "@/ui/component/page/${screenDir}/${pascal}Page";
10
+
11
+ /**
12
+ * @class
13
+ * @extends {View}
14
+ */
15
+ export class ${pascal}View extends View<${pascal}ViewModel> {
16
+
17
+ /**
18
+ * @private
19
+ * @readonly
20
+ */
21
+ private readonly _${camel}Page: ${pascal}Page;
22
+
23
+ /**
24
+ * @param {${pascal}ViewModel} vm
25
+ * @constructor
26
+ * @public
27
+ */
28
+ constructor (vm: ${pascal}ViewModel)
29
+ {
30
+ super(vm);
31
+
32
+ this._${camel}Page = new ${pascal}Page();
33
+ this.addChild(this._${camel}Page);
34
+ }
35
+
36
+ /**
37
+ * @return {Promise<void>}
38
+ * @method
39
+ * @override
40
+ * @public
41
+ */
42
+ async initialize (): Promise<void>
43
+ {
44
+ this._${camel}Page.initialize(this.vm);
45
+ }
46
+
47
+ /**
48
+ * @return {Promise<void>}
49
+ * @method
50
+ * @override
51
+ * @public
52
+ */
53
+ async onEnter (): Promise<void>
54
+ {
55
+ await this._${camel}Page.onEnter();
56
+ }
57
+
58
+ /**
59
+ * @return {Promise<void>}
60
+ * @method
61
+ * @override
62
+ * @public
63
+ */
64
+ async onExit (): Promise<void>
65
+ {
66
+ return void 0;
67
+ }
68
+ }
69
+ `;
70
+ }
71
+ export function generateViewModel(name) {
72
+ const pascal = toPascalCase(name);
73
+ return `import { ViewModel, app } from "@next2d/framework";
74
+
75
+ /**
76
+ * @class
77
+ * @extends {ViewModel}
78
+ */
79
+ export class ${pascal}ViewModel extends ViewModel {
80
+
81
+ /**
82
+ * @constructor
83
+ * @public
84
+ */
85
+ constructor ()
86
+ {
87
+ super();
88
+ // TODO: Initialize UseCases
89
+ // this.yourUseCase = new YourUseCase();
90
+ }
91
+
92
+ /**
93
+ * @description ViewModelの初期化 (Viewのinitialize()より前に呼ばれる)
94
+ * Initialize ViewModel (called before View's initialize())
95
+ *
96
+ * @return {Promise<void>}
97
+ * @method
98
+ * @override
99
+ * @public
100
+ */
101
+ async initialize (): Promise<void>
102
+ {
103
+ // routing.json の requests で取得したデータを受け取る
104
+ // const response = app.getResponse();
105
+ // if (response.has("YourData")) {
106
+ // this.data = response.get("YourData") as IYourResponse;
107
+ // }
108
+ }
109
+ }
110
+ `;
111
+ }
112
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/templates/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,YAAY,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,iGAAiG;IACjG,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7F,OAAO,iBAAiB,MAAM,uBAAuB,MAAM;;WAEpD,MAAM,oCAAoC,SAAS,IAAI,MAAM;;;;;;eAMzD,MAAM,qBAAqB,MAAM;;;;;;wBAMxB,KAAK,SAAS,MAAM;;;iBAG3B,MAAM;;;;uBAIA,MAAM;;;;gBAIb,KAAK,cAAc,MAAM;8BACX,KAAK;;;;;;;;;;;gBAWnB,KAAK;;;;;;;;;;;sBAWC,KAAK;;;;;;;;;;;;;;CAc1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;;;;;;eAMI,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BpB,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=view.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.test.d.ts","sourceRoot":"","sources":["../../src/templates/view.test.ts"],"names":[],"mappings":""}