swallowkit 0.1.0-alpha.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +563 -0
  3. package/dist/api/rpc-handler.d.ts +71 -0
  4. package/dist/api/rpc-handler.d.ts.map +1 -0
  5. package/dist/api/rpc-handler.js +205 -0
  6. package/dist/api/rpc-handler.js.map +1 -0
  7. package/dist/cli/commands/build.d.ts +6 -0
  8. package/dist/cli/commands/build.d.ts.map +1 -0
  9. package/dist/cli/commands/build.js +193 -0
  10. package/dist/cli/commands/build.js.map +1 -0
  11. package/dist/cli/commands/dev.d.ts +3 -0
  12. package/dist/cli/commands/dev.d.ts.map +1 -0
  13. package/dist/cli/commands/dev.js +305 -0
  14. package/dist/cli/commands/dev.js.map +1 -0
  15. package/dist/cli/commands/generate.d.ts +4 -0
  16. package/dist/cli/commands/generate.d.ts.map +1 -0
  17. package/dist/cli/commands/generate.js +238 -0
  18. package/dist/cli/commands/generate.js.map +1 -0
  19. package/dist/cli/commands/index.d.ts +9 -0
  20. package/dist/cli/commands/index.d.ts.map +1 -0
  21. package/dist/cli/commands/index.js +18 -0
  22. package/dist/cli/commands/index.js.map +1 -0
  23. package/dist/cli/commands/init.d.ts +7 -0
  24. package/dist/cli/commands/init.d.ts.map +1 -0
  25. package/dist/cli/commands/init.js +383 -0
  26. package/dist/cli/commands/init.js.map +1 -0
  27. package/dist/cli/commands/setup.d.ts +6 -0
  28. package/dist/cli/commands/setup.d.ts.map +1 -0
  29. package/dist/cli/commands/setup.js +254 -0
  30. package/dist/cli/commands/setup.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +32 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/core/config.d.ts +25 -0
  36. package/dist/core/config.d.ts.map +1 -0
  37. package/dist/core/config.js +204 -0
  38. package/dist/core/config.js.map +1 -0
  39. package/dist/database/client.d.ts +46 -0
  40. package/dist/database/client.d.ts.map +1 -0
  41. package/dist/database/client.js +156 -0
  42. package/dist/database/client.js.map +1 -0
  43. package/dist/database/repository.d.ts +71 -0
  44. package/dist/database/repository.d.ts.map +1 -0
  45. package/dist/database/repository.js +89 -0
  46. package/dist/database/repository.js.map +1 -0
  47. package/dist/generator/api-generator.d.ts +53 -0
  48. package/dist/generator/api-generator.d.ts.map +1 -0
  49. package/dist/generator/api-generator.js +284 -0
  50. package/dist/generator/api-generator.js.map +1 -0
  51. package/dist/generator/schema-parser.d.ts +45 -0
  52. package/dist/generator/schema-parser.d.ts.map +1 -0
  53. package/dist/generator/schema-parser.js +198 -0
  54. package/dist/generator/schema-parser.js.map +1 -0
  55. package/dist/generator/templates/azure-functions.d.ts +15 -0
  56. package/dist/generator/templates/azure-functions.d.ts.map +1 -0
  57. package/dist/generator/templates/azure-functions.js +274 -0
  58. package/dist/generator/templates/azure-functions.js.map +1 -0
  59. package/dist/generator/templates/default-server-functions.d.ts +2 -0
  60. package/dist/generator/templates/default-server-functions.d.ts.map +1 -0
  61. package/dist/generator/templates/default-server-functions.js +67 -0
  62. package/dist/generator/templates/default-server-functions.js.map +1 -0
  63. package/dist/hooks/server-function-registry.d.ts +67 -0
  64. package/dist/hooks/server-function-registry.d.ts.map +1 -0
  65. package/dist/hooks/server-function-registry.js +153 -0
  66. package/dist/hooks/server-function-registry.js.map +1 -0
  67. package/dist/hooks/useQuery.d.ts +61 -0
  68. package/dist/hooks/useQuery.d.ts.map +1 -0
  69. package/dist/hooks/useQuery.js +147 -0
  70. package/dist/hooks/useQuery.js.map +1 -0
  71. package/dist/hooks/useServerFn.d.ts +27 -0
  72. package/dist/hooks/useServerFn.d.ts.map +1 -0
  73. package/dist/hooks/useServerFn.js +119 -0
  74. package/dist/hooks/useServerFn.js.map +1 -0
  75. package/dist/index.d.ts +17 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +73 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/schemas/example.d.ts +657 -0
  80. package/dist/schemas/example.d.ts.map +1 -0
  81. package/dist/schemas/example.js +133 -0
  82. package/dist/schemas/example.js.map +1 -0
  83. package/dist/server/todo-functions.d.ts +21 -0
  84. package/dist/server/todo-functions.d.ts.map +1 -0
  85. package/dist/server/todo-functions.js +121 -0
  86. package/dist/server/todo-functions.js.map +1 -0
  87. package/dist/types/index.d.ts +53 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +6 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/package.json +68 -0
@@ -0,0 +1,53 @@
1
+ import { SchemaDefinition, ParsedServerFunction } from './schema-parser';
2
+ export interface GenerationOptions {
3
+ projectRoot: string;
4
+ outputDir: string;
5
+ cosmosDbEndpoint?: string;
6
+ cosmosDbKey?: string;
7
+ cosmosDbDatabase?: string;
8
+ }
9
+ export declare class ApiGenerator {
10
+ private options;
11
+ constructor(options: GenerationOptions);
12
+ /**
13
+ * APIを自動生成するメイン関数(v4対応)
14
+ */
15
+ generate(): Promise<void>;
16
+ /**
17
+ * v4形式でFunctions を生成
18
+ */
19
+ private generateV4Functions;
20
+ /**
21
+ * v4 CRUD関数を生成
22
+ */
23
+ private generateV4CrudFunction;
24
+ /**
25
+ * v4 RPC関数を生成
26
+ */
27
+ private generateV4RpcFunction;
28
+ /**
29
+ * CRUD操作コードを生成(v4対応)
30
+ */
31
+ private generateV4CrudOperation;
32
+ /**
33
+ * オペレーションパラメータを生成
34
+ */
35
+ private generateOperationParams;
36
+ /**
37
+ * Azure Functions v4設定ファイルを生成
38
+ */
39
+ private generateV4ConfigFiles;
40
+ /**
41
+ * package.json v4対応を生成
42
+ */
43
+ private generateV4PackageJson;
44
+ /**
45
+ * 共有モジュールを生成(v4対応)
46
+ */
47
+ generateSharedModules(schemas: SchemaDefinition[], serverFunctions: ParsedServerFunction[], serverFunctionFiles: string[]): Promise<void>;
48
+ /**
49
+ * ディレクトリが存在しなければ作成
50
+ */
51
+ private ensureDirectoryExists;
52
+ }
53
+ //# sourceMappingURL=api-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-generator.d.ts","sourceRoot":"","sources":["../../src/generator/api-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAavF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA+D/B;;OAEG;YACW,mBAAmB;IAYjC;;OAEG;YACW,sBAAsB;IA+BpC;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;YACW,qBAAqB;IA8CnC;;OAEG;YACW,qBAAqB;IAOnC;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,eAAe,EAAE,oBAAoB,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD/I;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAK9B"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ApiGenerator = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const schema_parser_1 = require("./schema-parser");
40
+ const azure_functions_1 = require("./templates/azure-functions");
41
+ const default_server_functions_1 = require("./templates/default-server-functions");
42
+ class ApiGenerator {
43
+ constructor(options) {
44
+ this.options = options;
45
+ }
46
+ /**
47
+ * APIを自動生成するメイン関数(v4対応)
48
+ */
49
+ async generate() {
50
+ console.log('🚀 SwallowKit API自動生成を開始します(Azure Functions v4)...');
51
+ // 出力ディレクトリを作成
52
+ this.ensureDirectoryExists(this.options.outputDir);
53
+ // スキーマファイルを検出・解析
54
+ const schemaFiles = schema_parser_1.SchemaParser.findSchemaFiles(this.options.projectRoot);
55
+ console.log(`📋 検出されたスキーマファイル: ${schemaFiles.length}個`);
56
+ const schemas = [];
57
+ for (const file of schemaFiles) {
58
+ const fileSchemas = schema_parser_1.SchemaParser.parseSchemaFile(file);
59
+ schemas.push(...fileSchemas);
60
+ }
61
+ // サーバー関数ファイルを検出・解析
62
+ const serverFunctionFiles = schema_parser_1.SchemaParser.findServerFunctionFiles(this.options.projectRoot);
63
+ console.log(`⚡ 検出されたサーバー関数ファイル: ${serverFunctionFiles.length}個`);
64
+ const serverFunctions = [];
65
+ for (const file of serverFunctionFiles) {
66
+ const fileFunctions = schema_parser_1.SchemaParser.parseServerFunctions(file);
67
+ serverFunctions.push(...fileFunctions);
68
+ }
69
+ // v4形式でfunctionsディレクトリを作成
70
+ const srcDir = path.join(this.options.outputDir, 'src');
71
+ const functionsDir = path.join(srcDir, 'functions');
72
+ this.ensureDirectoryExists(functionsDir);
73
+ // 統合されたAPI関数を生成
74
+ if (schemas.length > 0 || serverFunctions.length > 0) {
75
+ await this.generateV4Functions(schemas, serverFunctions, functionsDir);
76
+ console.log(`✅ Functions生成完了: ${schemas.length}個のスキーマ、${serverFunctions.length}個の関数`);
77
+ }
78
+ // Azure Functions v4設定ファイルを生成
79
+ await this.generateV4ConfigFiles();
80
+ console.log('✅ 設定ファイル生成完了');
81
+ // package.json を生成
82
+ await this.generateV4PackageJson();
83
+ console.log('✅ package.json生成完了');
84
+ // 共有モジュールを生成
85
+ await this.generateSharedModules(schemas, serverFunctions, serverFunctionFiles);
86
+ console.log('✅ 共有モジュール生成完了');
87
+ console.log('🎉 API自動生成が完了しました!');
88
+ console.log(`📁 出力先: ${this.options.outputDir}`);
89
+ console.log(`📁 ファイル構造:`);
90
+ console.log(` ${path.relative(process.cwd(), this.options.outputDir)}/`);
91
+ console.log(` ├── src/functions/`);
92
+ console.log(` │ ├── crud.ts`);
93
+ console.log(` │ └── rpc.ts`);
94
+ console.log(` ├── host.json`);
95
+ console.log(` ├── local.settings.json`);
96
+ console.log(` ├── tsconfig.json`);
97
+ console.log(` ├── .funcignore`);
98
+ console.log(` └── package.json`);
99
+ }
100
+ /**
101
+ * v4形式でFunctions を生成
102
+ */
103
+ async generateV4Functions(schemas, serverFunctions, functionsDir) {
104
+ // CRUD関数を生成
105
+ if (schemas.length > 0) {
106
+ await this.generateV4CrudFunction(schemas, functionsDir);
107
+ }
108
+ // RPC関数を生成
109
+ if (serverFunctions.length > 0) {
110
+ await this.generateV4RpcFunction(serverFunctions, functionsDir);
111
+ }
112
+ }
113
+ /**
114
+ * v4 CRUD関数を生成
115
+ */
116
+ async generateV4CrudFunction(schemas, functionsDir) {
117
+ // スキーマインポートを生成
118
+ const schemaImports = schemas
119
+ .map(schema => `import { ${schema.name}Schema } from "../shared/schemas";\ntype ${schema.name} = z.infer<typeof ${schema.name}Schema>;`)
120
+ .join('\n');
121
+ // CRUD関数実装を生成
122
+ const functionImplementations = schemas
123
+ .map(schema => schema.operations
124
+ .map(op => this.generateV4CrudOperation(schema, op))
125
+ .join('\n\n'))
126
+ .join('\n\n');
127
+ // オペレーションケースを生成
128
+ const operationCases = schemas
129
+ .map(schema => schema.operations
130
+ .map(op => ` case '${schema.name.toLowerCase()}_${op.name}':
131
+ result = await ${op.name}(${this.generateOperationParams(op)});
132
+ break;`)
133
+ .join('\n'))
134
+ .join('\n');
135
+ // メインファイルを生成
136
+ const crudContent = azure_functions_1.AZURE_FUNCTION_V4_TEMPLATE
137
+ .replace('{{SCHEMA_IMPORTS}}', schemaImports)
138
+ .replace('{{FUNCTION_IMPLEMENTATIONS}}', functionImplementations)
139
+ .replace('{{OPERATION_CASES}}', operationCases);
140
+ fs.writeFileSync(path.join(functionsDir, 'crud.ts'), crudContent);
141
+ }
142
+ /**
143
+ * v4 RPC関数を生成
144
+ */
145
+ async generateV4RpcFunction(serverFunctions, functionsDir) {
146
+ // サーバー関数インポートを生成
147
+ const serverFunctionImports = serverFunctions
148
+ .map(fn => `import { ${fn.name} } from "../shared/server-functions";`)
149
+ .join('\n');
150
+ // 関数マッピングを生成
151
+ const functionMappings = serverFunctions
152
+ .map(fn => ` "${fn.name}": ${fn.name},`)
153
+ .join('\n');
154
+ // メインファイルを生成
155
+ const rpcContent = azure_functions_1.RPC_FUNCTION_V4_TEMPLATE
156
+ .replace('{{SERVER_FUNCTION_IMPORTS}}', serverFunctionImports)
157
+ .replace('{{FUNCTION_MAPPINGS}}', functionMappings);
158
+ fs.writeFileSync(path.join(functionsDir, 'rpc.ts'), rpcContent);
159
+ }
160
+ /**
161
+ * CRUD操作コードを生成(v4対応)
162
+ */
163
+ generateV4CrudOperation(schema, operation) {
164
+ const template = azure_functions_1.CRUD_FUNCTION_V4_TEMPLATE[operation.type];
165
+ if (!template)
166
+ return '';
167
+ return template
168
+ .replace(/{{SCHEMA_NAME}}/g, schema.name)
169
+ .replace(/{{SCHEMA_TYPE}}/g, schema.name)
170
+ .replace(/{{TABLE_NAME}}/g, schema.tableName || schema.name.toLowerCase());
171
+ }
172
+ /**
173
+ * オペレーションパラメータを生成
174
+ */
175
+ generateOperationParams(operation) {
176
+ switch (operation.type) {
177
+ case 'create':
178
+ return 'data';
179
+ case 'read':
180
+ return 'id';
181
+ case 'list':
182
+ return 'request.query';
183
+ case 'update':
184
+ return 'id, data';
185
+ case 'delete':
186
+ return 'id';
187
+ default:
188
+ return '';
189
+ }
190
+ }
191
+ /**
192
+ * Azure Functions v4設定ファイルを生成
193
+ */
194
+ async generateV4ConfigFiles() {
195
+ // host.json
196
+ fs.writeFileSync(path.join(this.options.outputDir, 'host.json'), azure_functions_1.HOST_JSON_V4_TEMPLATE);
197
+ // local.settings.json
198
+ const localSettings = azure_functions_1.LOCAL_SETTINGS_V4_TEMPLATE.replace('"COSMOS_DATABASE": "swallowkit-db"', `"COSMOS_DATABASE": "${this.options.cosmosDbDatabase || 'swallowkit-db'}"`);
199
+ fs.writeFileSync(path.join(this.options.outputDir, 'local.settings.json'), localSettings);
200
+ // tsconfig.json
201
+ fs.writeFileSync(path.join(this.options.outputDir, 'tsconfig.json'), azure_functions_1.TSCONFIG_V4_TEMPLATE);
202
+ // .funcignore
203
+ fs.writeFileSync(path.join(this.options.outputDir, '.funcignore'), azure_functions_1.FUNCIGNORE_V4_TEMPLATE);
204
+ // .gitignore
205
+ const gitignoreContent = `# Azure Functions artifacts
206
+ dist/
207
+ local.settings.json
208
+ .vscode/
209
+ *.log
210
+ node_modules/
211
+ .env
212
+ .env.local
213
+ `;
214
+ fs.writeFileSync(path.join(this.options.outputDir, '.gitignore'), gitignoreContent);
215
+ }
216
+ /**
217
+ * package.json v4対応を生成
218
+ */
219
+ async generateV4PackageJson() {
220
+ fs.writeFileSync(path.join(this.options.outputDir, 'package.json'), azure_functions_1.PACKAGE_JSON_V4_TEMPLATE);
221
+ }
222
+ /**
223
+ * 共有モジュールを生成(v4対応)
224
+ */
225
+ async generateSharedModules(schemas, serverFunctions, serverFunctionFiles) {
226
+ const srcDir = path.join(this.options.outputDir, 'src');
227
+ const sharedDir = path.join(srcDir, 'shared');
228
+ this.ensureDirectoryExists(sharedDir);
229
+ // スキーマファイルを生成
230
+ if (schemas.length > 0) {
231
+ const schemaExports = schemas
232
+ .map(schema => `export const ${schema.name}Schema = z.object({
233
+ id: z.string(),
234
+ createdAt: z.string(),
235
+ updatedAt: z.string(),
236
+ // TODO: 実際のスキーマフィールドを追加
237
+ });`)
238
+ .join('\n\n');
239
+ const schemaContent = `import { z } from 'zod';
240
+
241
+ ${schemaExports}
242
+ `;
243
+ fs.writeFileSync(path.join(sharedDir, 'schemas.ts'), schemaContent);
244
+ }
245
+ // サーバー関数ファイルを生成(ファイル全体をコピー)
246
+ if (serverFunctionFiles.length > 0) {
247
+ // 最初のサーバー関数ファイルの内容をそのままコピー
248
+ // 複数ファイルがある場合は結合する
249
+ const combinedContent = serverFunctionFiles
250
+ .map(filePath => fs.readFileSync(filePath, 'utf-8'))
251
+ .filter(content => {
252
+ // 空ファイルを除外
253
+ if (content.trim().length === 0)
254
+ return false;
255
+ // クライアントスタブ("should be called via useServerFn" を含む)を除外
256
+ if (content.includes('should be called via useServerFn'))
257
+ return false;
258
+ return true;
259
+ })
260
+ .join('\n\n');
261
+ if (combinedContent.trim().length > 0) {
262
+ fs.writeFileSync(path.join(sharedDir, 'server-functions.ts'), combinedContent);
263
+ }
264
+ else {
265
+ // 空ファイルまたはクライアントスタブしかない場合はデフォルトテンプレートを使用
266
+ fs.writeFileSync(path.join(sharedDir, 'server-functions.ts'), default_server_functions_1.DEFAULT_SERVER_FUNCTIONS_TEMPLATE);
267
+ }
268
+ }
269
+ else {
270
+ // サーバー関数ファイルがない場合もデフォルトテンプレートを使用
271
+ fs.writeFileSync(path.join(sharedDir, 'server-functions.ts'), default_server_functions_1.DEFAULT_SERVER_FUNCTIONS_TEMPLATE);
272
+ }
273
+ }
274
+ /**
275
+ * ディレクトリが存在しなければ作成
276
+ */
277
+ ensureDirectoryExists(dirPath) {
278
+ if (!fs.existsSync(dirPath)) {
279
+ fs.mkdirSync(dirPath, { recursive: true });
280
+ }
281
+ }
282
+ }
283
+ exports.ApiGenerator = ApiGenerator;
284
+ //# sourceMappingURL=api-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-generator.js","sourceRoot":"","sources":["../../src/generator/api-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ export interface SchemaDefinition {
3
+ name: string;
4
+ schema: z.ZodSchema;
5
+ operations: CRUDOperation[];
6
+ tableName?: string;
7
+ partitionKey?: string;
8
+ }
9
+ export interface CRUDOperation {
10
+ type: 'create' | 'read' | 'update' | 'delete' | 'list';
11
+ name: string;
12
+ inputSchema?: z.ZodSchema;
13
+ outputSchema?: z.ZodSchema;
14
+ customLogic?: string;
15
+ }
16
+ export interface ParsedServerFunction {
17
+ name: string;
18
+ parameters: Array<{
19
+ name: string;
20
+ type: string;
21
+ optional: boolean;
22
+ }>;
23
+ returnType: string;
24
+ sourceCode: string;
25
+ isAsync: boolean;
26
+ }
27
+ export declare class SchemaParser {
28
+ /**
29
+ * TypeScriptファイルからZodスキーマ定義を解析
30
+ */
31
+ static parseSchemaFile(filePath: string): SchemaDefinition[];
32
+ /**
33
+ * サーバー関数の解析
34
+ */
35
+ static parseServerFunctions(filePath: string): ParsedServerFunction[];
36
+ /**
37
+ * プロジェクト内のスキーマファイルを自動検出
38
+ */
39
+ static findSchemaFiles(projectRoot: string): string[];
40
+ /**
41
+ * サーバー関数ファイルを自動検出
42
+ */
43
+ static findServerFunctionFiles(projectRoot: string): string[];
44
+ }
45
+ //# sourceMappingURL=schema-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-parser.d.ts","sourceRoot":"","sources":["../../src/generator/schema-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE;IA0E5D;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE;IA4CrE;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;IA8BrD;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;CAkC9D"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SchemaParser = void 0;
37
+ const zod_1 = require("zod");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const ts = __importStar(require("typescript"));
41
+ class SchemaParser {
42
+ /**
43
+ * TypeScriptファイルからZodスキーマ定義を解析
44
+ */
45
+ static parseSchemaFile(filePath) {
46
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
47
+ const sourceFile = ts.createSourceFile(filePath, fileContent, ts.ScriptTarget.Latest, true);
48
+ const schemas = [];
49
+ const visit = (node) => {
50
+ // const XxxSchema = z.object({...}) パターンを探す
51
+ if (ts.isVariableStatement(node)) {
52
+ const declaration = node.declarationList.declarations[0];
53
+ if (ts.isVariableDeclaration(declaration) &&
54
+ declaration.name &&
55
+ ts.isIdentifier(declaration.name) &&
56
+ declaration.name.text.endsWith('Schema')) {
57
+ const schemaName = declaration.name.text.replace('Schema', '');
58
+ // 基本的なCRUD操作を自動生成
59
+ const operations = [
60
+ {
61
+ type: 'create',
62
+ name: `create${schemaName}`,
63
+ inputSchema: undefined, // 実際の実装では詳細に解析
64
+ outputSchema: undefined,
65
+ },
66
+ {
67
+ type: 'read',
68
+ name: `get${schemaName}`,
69
+ inputSchema: undefined,
70
+ outputSchema: undefined,
71
+ },
72
+ {
73
+ type: 'list',
74
+ name: `list${schemaName}s`,
75
+ inputSchema: undefined,
76
+ outputSchema: undefined,
77
+ },
78
+ {
79
+ type: 'update',
80
+ name: `update${schemaName}`,
81
+ inputSchema: undefined,
82
+ outputSchema: undefined,
83
+ },
84
+ {
85
+ type: 'delete',
86
+ name: `delete${schemaName}`,
87
+ inputSchema: undefined,
88
+ outputSchema: undefined,
89
+ },
90
+ ];
91
+ schemas.push({
92
+ name: schemaName,
93
+ schema: zod_1.z.object({}), // 実際の実装では詳細に解析
94
+ operations,
95
+ tableName: schemaName.toLowerCase(),
96
+ partitionKey: 'id',
97
+ });
98
+ }
99
+ }
100
+ ts.forEachChild(node, visit);
101
+ };
102
+ visit(sourceFile);
103
+ return schemas;
104
+ }
105
+ /**
106
+ * サーバー関数の解析
107
+ */
108
+ static parseServerFunctions(filePath) {
109
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
110
+ const sourceFile = ts.createSourceFile(filePath, fileContent, ts.ScriptTarget.Latest, true);
111
+ const functions = [];
112
+ const visit = (node) => {
113
+ // async function名前(...) または function名前(...) パターンを探す
114
+ if (ts.isFunctionDeclaration(node) && node.name) {
115
+ const functionName = node.name.text;
116
+ const isAsync = node.modifiers?.some(mod => mod.kind === ts.SyntaxKind.AsyncKeyword) || false;
117
+ const parameters = node.parameters.map(param => ({
118
+ name: ts.isIdentifier(param.name) ? param.name.text : 'unknown',
119
+ type: param.type ? param.type.getText(sourceFile) : 'any',
120
+ optional: !!param.questionToken,
121
+ }));
122
+ const returnType = node.type ? node.type.getText(sourceFile) : 'any';
123
+ const sourceCode = node.getText(sourceFile);
124
+ functions.push({
125
+ name: functionName,
126
+ parameters,
127
+ returnType,
128
+ sourceCode,
129
+ isAsync,
130
+ });
131
+ }
132
+ ts.forEachChild(node, visit);
133
+ };
134
+ visit(sourceFile);
135
+ return functions;
136
+ }
137
+ /**
138
+ * プロジェクト内のスキーマファイルを自動検出
139
+ */
140
+ static findSchemaFiles(projectRoot) {
141
+ const schemaFiles = [];
142
+ const searchDirs = [
143
+ path.join(projectRoot, 'src/schemas'),
144
+ path.join(projectRoot, 'schemas'),
145
+ path.join(projectRoot, 'src/types'),
146
+ path.join(projectRoot, 'types'),
147
+ ];
148
+ for (const dir of searchDirs) {
149
+ if (fs.existsSync(dir)) {
150
+ const files = fs.readdirSync(dir);
151
+ for (const file of files) {
152
+ if (file.endsWith('.ts') || file.endsWith('.js')) {
153
+ const fullPath = path.join(dir, file);
154
+ const content = fs.readFileSync(fullPath, 'utf-8');
155
+ // Zodスキーマが含まれているかチェック
156
+ if (content.includes('z.object') || content.includes('z.string')) {
157
+ schemaFiles.push(fullPath);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+ return schemaFiles;
164
+ }
165
+ /**
166
+ * サーバー関数ファイルを自動検出
167
+ */
168
+ static findServerFunctionFiles(projectRoot) {
169
+ const serverFiles = [];
170
+ const searchDirs = [
171
+ path.join(projectRoot, 'src/server'),
172
+ path.join(projectRoot, 'server'),
173
+ path.join(projectRoot, 'src/api'),
174
+ path.join(projectRoot, 'api'),
175
+ path.join(projectRoot, 'src'),
176
+ ];
177
+ for (const dir of searchDirs) {
178
+ if (fs.existsSync(dir)) {
179
+ const files = fs.readdirSync(dir);
180
+ for (const file of files) {
181
+ if (file.endsWith('.ts') || file.endsWith('.js')) {
182
+ const fullPath = path.join(dir, file);
183
+ const content = fs.readFileSync(fullPath, 'utf-8');
184
+ // async function や export function が含まれているかチェック
185
+ if (content.includes('async function') ||
186
+ content.includes('export function') ||
187
+ content.includes('export async function')) {
188
+ serverFiles.push(fullPath);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ return serverFiles;
195
+ }
196
+ }
197
+ exports.SchemaParser = SchemaParser;
198
+ //# sourceMappingURL=schema-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-parser.js","sourceRoot":"","sources":["../../src/generator/schema-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare const AZURE_FUNCTION_V4_TEMPLATE = "import { app, HttpRequest, HttpResponseInit, InvocationContext } from \"@azure/functions\";\nimport { CosmosClient } from \"@azure/cosmos\";\nimport { z } from \"zod\";\n\n// \u751F\u6210\u3055\u308C\u305F\u30B9\u30AD\u30FC\u30DE\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\n{{SCHEMA_IMPORTS}}\n\n// Cosmos DB \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF08Managed Identity\u4F7F\u7528\uFF09\nconst cosmosClient = new CosmosClient({\n endpoint: process.env.COSMOS_DB_ENDPOINT!,\n aadCredentials: {} // Managed Identity\u4F7F\u7528\n});\n\nconst database = cosmosClient.database(process.env.COSMOS_DB_DATABASE || \"swallowkit\");\n\n{{FUNCTION_IMPLEMENTATIONS}}\n\n// CRUD API \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\napp.http('swallowkit-crud', {\n methods: ['POST'],\n authLevel: 'anonymous',\n route: 'crud/{schema}',\n handler: async (request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> => {\n context.log('SwallowKit CRUD API function processed a request.');\n\n try {\n const schema = request.params.schema;\n const { operation, data, id } = await request.json() as any;\n\n let result;\n switch (`${schema}_${operation}`) {\n{{OPERATION_CASES}}\n default:\n return {\n status: 400,\n jsonBody: { error: `Unknown operation: ${schema}_${operation}` }\n };\n }\n\n return {\n status: 200,\n jsonBody: result\n };\n } catch (error) {\n context.error('Error processing CRUD request:', error);\n return {\n status: 500,\n jsonBody: { error: error instanceof Error ? error.message : 'Internal server error' }\n };\n }\n }\n});";
2
+ export declare const RPC_FUNCTION_V4_TEMPLATE = "import { app, HttpRequest, HttpResponseInit, InvocationContext } from \"@azure/functions\";\n\n// \u30B5\u30FC\u30D0\u30FC\u95A2\u6570\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\n{{SERVER_FUNCTION_IMPORTS}}\n\n// \u95A2\u6570\u30DE\u30C3\u30D4\u30F3\u30B0\nconst serverFunctions = {\n{{FUNCTION_MAPPINGS}}\n};\n\n// RPC API \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\napp.http('swallowkit-rpc', {\n methods: ['POST'],\n authLevel: 'anonymous',\n route: '_swallowkit',\n handler: async (request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> => {\n context.log('SwallowKit RPC handler processed a request.');\n\n try {\n const { fnName, args } = await request.json() as any;\n\n if (!fnName || !serverFunctions[fnName]) {\n return {\n status: 400,\n jsonBody: { error: `Unknown function: ${fnName}` }\n };\n }\n\n const serverFn = serverFunctions[fnName];\n const result = await serverFn(...(args || []));\n\n return {\n status: 200,\n jsonBody: result\n };\n } catch (error) {\n context.error('Error executing server function:', error);\n return {\n status: 500,\n jsonBody: { error: error instanceof Error ? error.message : 'Internal server error' }\n };\n }\n }\n});";
3
+ export declare const CRUD_FUNCTION_V4_TEMPLATE: {
4
+ create: string;
5
+ read: string;
6
+ list: string;
7
+ update: string;
8
+ delete: string;
9
+ };
10
+ export declare const HOST_JSON_V4_TEMPLATE = "{\n \"version\": \"2.0\",\n \"functionTimeout\": \"00:05:00\",\n \"extensionBundle\": {\n \"id\": \"Microsoft.Azure.Functions.ExtensionBundle\",\n \"version\": \"[4.*, 5.0.0)\"\n },\n \"extensions\": {\n \"http\": {\n \"routePrefix\": \"api\"\n }\n },\n \"logging\": {\n \"applicationInsights\": {\n \"samplingSettings\": {\n \"isEnabled\": true\n }\n }\n }\n}";
11
+ export declare const LOCAL_SETTINGS_V4_TEMPLATE = "{\n \"IsEncrypted\": false,\n \"Values\": {\n \"AzureWebJobsStorage\": \"\",\n \"FUNCTIONS_WORKER_RUNTIME\": \"node\",\n \"FUNCTIONS_WORKER_RUNTIME_VERSION\": \"~22\",\n \"languageWorkers:node:arguments\": \"--no-deprecation\",\n \"COSMOS_ENDPOINT\": \"http://localhost:8081\",\n \"COSMOS_KEY\": \"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==\",\n \"COSMOS_DATABASE\": \"swallowkit-db\",\n \"COSMOS_CONTAINER\": \"todos\"\n }\n}";
12
+ export declare const TSCONFIG_V4_TEMPLATE = "{\n \"compilerOptions\": {\n \"module\": \"commonjs\",\n \"target\": \"es6\",\n \"outDir\": \"dist\",\n \"rootDir\": \"src\",\n \"sourceMap\": true,\n \"strict\": false,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"include\": [\"src/**/*\"]\n}";
13
+ export declare const FUNCIGNORE_V4_TEMPLATE = "*.js.map\n*.ts\n.git*\n.vscode\nlocal.settings.json\ntest\ntsconfig.json\n.funcignore\n*.md\nnode_modules/@types\nsrc/\n*.log";
14
+ export declare const PACKAGE_JSON_V4_TEMPLATE = "{\n \"name\": \"swallowkit-api\",\n \"version\": \"1.0.0\",\n \"description\": \"SwallowKit Generated API Functions (v4)\",\n \"main\": \"dist/functions/*.js\",\n \"scripts\": {\n \"build\": \"tsc\",\n \"watch\": \"tsc -w\",\n \"clean\": \"rimraf dist\",\n \"prebuild\": \"npm run clean\",\n \"prestart\": \"npm run build\",\n \"start\": \"func start\",\n \"test\": \"echo \\\"No tests yet\\\"\"\n },\n \"dependencies\": {\n \"@azure/functions\": \"^4.0.0\",\n \"@azure/cosmos\": \"^4.0.0\",\n \"zod\": \"^3.22.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^20.0.0\",\n \"typescript\": \"^5.0.0\",\n \"rimraf\": \"^5.0.0\"\n }\n}";
15
+ //# sourceMappingURL=azure-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-functions.d.ts","sourceRoot":"","sources":["../../../src/generator/templates/azure-functions.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,0BAA0B,ypDAmDnC,CAAC;AAGL,eAAO,MAAM,wBAAwB,myCA2CjC,CAAC;AAGL,eAAO,MAAM,yBAAyB;;;;;;CAqFrC,CAAC;AAGF,eAAO,MAAM,qBAAqB,6ZAmBhC,CAAC;AAGH,eAAO,MAAM,0BAA0B,wfAYrC,CAAC;AAGH,eAAO,MAAM,oBAAoB,sVAa/B,CAAC;AAGH,eAAO,MAAM,sBAAsB,kIAW7B,CAAC;AAGP,eAAO,MAAM,wBAAwB,orBAwBnC,CAAC"}