vite-code-generator 0.1.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.
Files changed (47) hide show
  1. package/README.md +95 -0
  2. package/bin/vite-gen.js +4 -0
  3. package/dist/cli/index.d.ts +4 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +124 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/generator/crud.d.ts +8 -0
  8. package/dist/generator/crud.d.ts.map +1 -0
  9. package/dist/generator/crud.js +33 -0
  10. package/dist/generator/crud.js.map +1 -0
  11. package/dist/generator/hello-world.d.ts +3 -0
  12. package/dist/generator/hello-world.d.ts.map +1 -0
  13. package/dist/generator/hello-world.js +162 -0
  14. package/dist/generator/hello-world.js.map +1 -0
  15. package/dist/generator/index.d.ts +9 -0
  16. package/dist/generator/index.d.ts.map +1 -0
  17. package/dist/generator/index.js +26 -0
  18. package/dist/generator/index.js.map +1 -0
  19. package/dist/generator/naming.d.ts +20 -0
  20. package/dist/generator/naming.d.ts.map +1 -0
  21. package/dist/generator/naming.js +42 -0
  22. package/dist/generator/naming.js.map +1 -0
  23. package/dist/generator/registry.d.ts +5 -0
  24. package/dist/generator/registry.d.ts.map +1 -0
  25. package/dist/generator/registry.js +20 -0
  26. package/dist/generator/registry.js.map +1 -0
  27. package/dist/generator/resource-api.d.ts +3 -0
  28. package/dist/generator/resource-api.d.ts.map +1 -0
  29. package/dist/generator/resource-api.js +143 -0
  30. package/dist/generator/resource-api.js.map +1 -0
  31. package/dist/generator/resource-hooks.d.ts +7 -0
  32. package/dist/generator/resource-hooks.d.ts.map +1 -0
  33. package/dist/generator/resource-hooks.js +248 -0
  34. package/dist/generator/resource-hooks.js.map +1 -0
  35. package/dist/generator/resource-page.d.ts +3 -0
  36. package/dist/generator/resource-page.d.ts.map +1 -0
  37. package/dist/generator/resource-page.js +280 -0
  38. package/dist/generator/resource-page.js.map +1 -0
  39. package/dist/index.d.ts +11 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +6 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types.d.ts +28 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +45 -0
@@ -0,0 +1,280 @@
1
+ import { deriveResourceNames } from './naming.js';
2
+ function normalizeDir(raw) {
3
+ return raw.replace(/\\/g, '/').replace(/^\/+|\/+$/g, '');
4
+ }
5
+ function pageTsx(names) {
6
+ return `import { useDocumentTitle } from "@/hooks";
7
+ import { Layout, LayoutCard } from "../components";
8
+ import { use${names.plural} } from "@/hooks/query-hooks";
9
+ import {
10
+ Button,
11
+ Table,
12
+ useTableData,
13
+ useTableSearch,
14
+ useModal,
15
+ } from "@/components";
16
+ import { Space } from "antd";
17
+ import { BiEdit, BiPlus } from "react-icons/bi";
18
+ import type { ${names.singular} } from "@/types";
19
+ import { useState } from "react";
20
+ import ${names.singular}Form from "./components/${names.singular}Form";
21
+
22
+ export function ${names.plural}Page() {
23
+ useDocumentTitle("${names.plural}");
24
+ const { data: ${names.pluralCamel} } = use${names.plural}();
25
+ const modal = useModal();
26
+ const [selected${names.singular}, setSelected${names.singular}] = useState<${names.singular} | null>(null);
27
+
28
+ const handleOpenCreateModal = () => {
29
+ setSelected${names.singular}(null);
30
+ modal.toggleModal();
31
+ };
32
+
33
+ const handleOpenEditModal = (${names.singularCamel}: ${names.singular}) => {
34
+ setSelected${names.singular}(${names.singularCamel});
35
+ modal.toggleModal();
36
+ };
37
+
38
+ const handleCloseModal = () => {
39
+ setSelected${names.singular}(null);
40
+ modal.toggleModal();
41
+ };
42
+
43
+ const tableSearch = useTableSearch();
44
+ const tableData = useTableData(
45
+ ${names.pluralCamel} || [],
46
+ [
47
+ {
48
+ title: "Display Name",
49
+ key: "display_name",
50
+ render: (${names.singularCamel}: ${names.singular}) => (
51
+ <div className="date-container">
52
+ <p>{${names.singularCamel}.display_name}</p>
53
+ </div>
54
+ ),
55
+ },
56
+ {
57
+ title: "Name",
58
+ key: "name",
59
+ render: (${names.singularCamel}: ${names.singular}) => (
60
+ <div className="date-container">
61
+ <p>{${names.singularCamel}.name}</p>
62
+ </div>
63
+ ),
64
+ },
65
+ {
66
+ title: "Action",
67
+ key: "action",
68
+ render: (${names.singularCamel}: ${names.singular}) => (
69
+ <Space size="small">
70
+ <Button
71
+ variant="filled"
72
+ icon={<BiEdit />}
73
+ onClick={() => handleOpenEditModal(${names.singularCamel})}
74
+ >
75
+ Edit
76
+ </Button>
77
+ </Space>
78
+ ),
79
+ },
80
+ ],
81
+ {
82
+ search: tableSearch,
83
+ enableLiveFiltering: true,
84
+ }
85
+ );
86
+
87
+ return (
88
+ <Layout>
89
+ <${names.singular}Form
90
+ open={modal.isOpen}
91
+ onCancel={handleCloseModal}
92
+ selected${names.singular}={selected${names.singular}}
93
+ />
94
+ <LayoutCard
95
+ title="${names.plural}"
96
+ header={
97
+ <Button icon={<BiPlus />} onClick={handleOpenCreateModal}>
98
+ Add ${names.singular}
99
+ </Button>
100
+ }
101
+ >
102
+ <Table id="${names.pluralCamel}" data={tableData} />
103
+ </LayoutCard>
104
+ </Layout>
105
+ );
106
+ }
107
+ `;
108
+ }
109
+ function pageCss() {
110
+ return `.modal-header {
111
+ display: flex;
112
+ flex-direction: column;
113
+ align-items: flex-start;
114
+ gap: 0.25rem;
115
+ margin-top: 0.25rem;
116
+ font-size: 0.8rem;
117
+ }
118
+ `;
119
+ }
120
+ function formTsx(names) {
121
+ return `import {
122
+ useCreate${names.singular},
123
+ useUpdate${names.singular},
124
+ } from "@/hooks/query-hooks";
125
+ import { type ${names.singular} } from "@/types";
126
+ import { Input, Modal } from "antd";
127
+ import { useEffect, useState } from "react";
128
+ import { toSnakeCase } from "@/utils";
129
+ import styles from "../${names.plural}Page.module.css";
130
+
131
+ type ${names.singular}FormProps = {
132
+ open: boolean;
133
+ onCancel: () => void;
134
+ selected${names.singular}: ${names.singular} | null;
135
+ };
136
+
137
+ export default function ${names.singular}Form({
138
+ open,
139
+ onCancel,
140
+ selected${names.singular},
141
+ }: ${names.singular}FormProps) {
142
+ const [formData, setFormData] = useState<${names.singular}>({
143
+ display_name: "",
144
+ name: "",
145
+ });
146
+
147
+ const { mutate: create${names.singular}, isPending: isCreating } = useCreate${names.singular}();
148
+ const { mutate: update${names.singular}, isPending: isUpdating } = useUpdate${names.singular}();
149
+
150
+ const isLoading = isCreating || isUpdating;
151
+ const isEditMode = !!selected${names.singular};
152
+
153
+ useEffect(() => {
154
+ if (selected${names.singular}) {
155
+ setFormData(selected${names.singular});
156
+ } else {
157
+ setFormData({ display_name: "", name: "" });
158
+ }
159
+ }, [selected${names.singular}]);
160
+
161
+ const onFormChange = (field: string, value: string) => {
162
+ setFormData((prev) => {
163
+ if (!isEditMode && field === "display_name") {
164
+ return { display_name: value, name: toSnakeCase(value) };
165
+ }
166
+ return { ...prev, [field]: value };
167
+ });
168
+ };
169
+
170
+ const handleSave = () => {
171
+ if (!formData.display_name || !formData.name) {
172
+ return;
173
+ }
174
+
175
+ if (isEditMode && selected${names.singular}?.id) {
176
+ update${names.singular}(
177
+ { id: selected${names.singular}.id, ${names.singularCamel}: formData },
178
+ {
179
+ onSuccess: () => onCancel(),
180
+ }
181
+ );
182
+ } else {
183
+ create${names.singular}(formData, {
184
+ onSuccess: () => onCancel(),
185
+ });
186
+ }
187
+ };
188
+
189
+ return (
190
+ <Modal
191
+ open={open}
192
+ onCancel={onCancel}
193
+ width={800}
194
+ centered
195
+ okText="Save"
196
+ onOk={handleSave}
197
+ okButtonProps={{
198
+ disabled: !formData.display_name || !formData.name,
199
+ loading: isLoading,
200
+ }}
201
+ >
202
+ <div className={styles["modal-header"]}>
203
+ <h1>{isEditMode ? "Edit ${names.singular}" : "Add ${names.singular}"}</h1>
204
+ </div>
205
+ <div className={"modal-section"}>
206
+ <div className={"modal-section-header"}>
207
+ <h3>${names.singular} Info</h3>
208
+ </div>
209
+ <div className={"modal-section-row"}>
210
+ <div className={"modal-section-row-item"}>
211
+ <p>Display Name</p>
212
+ <Input
213
+ name="display_name"
214
+ type="text"
215
+ value={formData.display_name || ""}
216
+ onChange={(e) => onFormChange("display_name", e.target.value)}
217
+ disabled={isLoading}
218
+ />
219
+ </div>
220
+ <div className={"modal-section-row-item"}>
221
+ <p>Name</p>
222
+ <Input
223
+ name="name"
224
+ type="text"
225
+ value={formData.name || ""}
226
+ onChange={(e) => onFormChange("name", e.target.value)}
227
+ disabled={isLoading || !!selected${names.singular}}
228
+ />
229
+ </div>
230
+ </div>
231
+ </div>
232
+ </Modal>
233
+ );
234
+ }
235
+ `;
236
+ }
237
+ export const resourcePageTemplate = {
238
+ name: 'resource-page',
239
+ description: 'Resource list page with form modal (plural folder). Pass PascalCase singular name and --dir.',
240
+ kind: 'file',
241
+ flags: [
242
+ {
243
+ name: 'dir',
244
+ description: 'Relative parent path for the new resource folder (required)',
245
+ defaultValue: '',
246
+ },
247
+ {
248
+ name: 'plural',
249
+ description: 'Optional PascalCase plural override (default: singular + s)',
250
+ defaultValue: '',
251
+ },
252
+ ],
253
+ resolveFiles(context) {
254
+ const dirRaw = typeof context.flags.dir === 'string' ? context.flags.dir.trim() : '';
255
+ if (!dirRaw) {
256
+ throw new Error('resource-page requires --dir <relative-path> (e.g. --dir src/pages)');
257
+ }
258
+ const pluralFlag = typeof context.flags.plural === 'string' && context.flags.plural.length > 0
259
+ ? context.flags.plural
260
+ : undefined;
261
+ const names = deriveResourceNames(context.projectName, pluralFlag);
262
+ const dir = normalizeDir(dirRaw);
263
+ const base = `${dir}/${names.plural}`;
264
+ return [
265
+ {
266
+ path: `${base}/${names.plural}Page.tsx`,
267
+ content: pageTsx(names),
268
+ },
269
+ {
270
+ path: `${base}/${names.plural}Page.module.css`,
271
+ content: pageCss(),
272
+ },
273
+ {
274
+ path: `${base}/components/${names.singular}Form.tsx`,
275
+ content: formTsx(names),
276
+ },
277
+ ];
278
+ },
279
+ };
280
+ //# sourceMappingURL=resource-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-page.js","sourceRoot":"","sources":["../../src/generator/resource-page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { generateProject, getTemplate, listTemplates, registerTemplate, } from './generator/index.js';
2
+ export type { GenerateOptions } from './generator/index.js';
3
+ export type { TemplateContext, TemplateDefinition, TemplateFile, TemplateKind, } from './types.js';
4
+ export { createCli, runCli } from './cli/index.js';
5
+ export { deriveResourceNames } from './generator/naming.js';
6
+ export type { ResourceNames } from './generator/naming.js';
7
+ export { CRUD_KINDS } from './generator/crud.js';
8
+ export type { CrudKind, ResourceVariant } from './generator/crud.js';
9
+ export { HOOK_KINDS } from './generator/resource-hooks.js';
10
+ export type { HookKind, ResourceHooksVariant } from './generator/resource-hooks.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { generateProject, getTemplate, listTemplates, registerTemplate, } from './generator/index.js';
2
+ export { createCli, runCli } from './cli/index.js';
3
+ export { deriveResourceNames } from './generator/naming.js';
4
+ export { CRUD_KINDS } from './generator/crud.js';
5
+ export { HOOK_KINDS } from './generator/resource-hooks.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type TemplateContext = {
2
+ /** Project directory name, or PascalCase resource name for file templates. */
3
+ projectName: string;
4
+ flags: Record<string, string | boolean | undefined>;
5
+ };
6
+ export type TemplateKind = 'project' | 'file';
7
+ export type TemplateDefinition = {
8
+ name: string;
9
+ description: string;
10
+ /**
11
+ * project: scaffolds a directory named after the argument (default).
12
+ * file: writes into cwd / --out-dir; argument is the resource/type name.
13
+ */
14
+ kind?: TemplateKind;
15
+ /** Extra CLI flags this template accepts (beyond shared ones). */
16
+ flags?: Array<{
17
+ name: string;
18
+ description: string;
19
+ defaultValue?: string | boolean;
20
+ }>;
21
+ resolveFiles: (context: TemplateContext) => TemplateFile[];
22
+ };
23
+ export type TemplateFile = {
24
+ /** Path relative to the output project root. */
25
+ path: string;
26
+ content: string;
27
+ };
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACjC,CAAC,CAAC;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,YAAY,EAAE,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "vite-code-generator",
3
+ "version": "0.1.0",
4
+ "description": "CLI code generator for Vite TypeScript projects",
5
+ "type": "module",
6
+ "bin": {
7
+ "vite-gen": "./bin/vite-gen.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "bin",
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "tsc --watch",
24
+ "start": "node ./bin/vite-gen.js",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "keywords": [
28
+ "vite",
29
+ "typescript",
30
+ "generator",
31
+ "scaffold",
32
+ "cli"
33
+ ],
34
+ "license": "MIT",
35
+ "engines": {
36
+ "node": ">=18"
37
+ },
38
+ "dependencies": {
39
+ "commander": "^13.1.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^22.13.10",
43
+ "typescript": "^5.8.2"
44
+ }
45
+ }