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,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PACKAGE_JSON_V4_TEMPLATE = exports.FUNCIGNORE_V4_TEMPLATE = exports.TSCONFIG_V4_TEMPLATE = exports.LOCAL_SETTINGS_V4_TEMPLATE = exports.HOST_JSON_V4_TEMPLATE = exports.CRUD_FUNCTION_V4_TEMPLATE = exports.RPC_FUNCTION_V4_TEMPLATE = exports.AZURE_FUNCTION_V4_TEMPLATE = void 0;
4
+ // Azure Functions v4 プログラミングモデルのテンプレート
5
+ exports.AZURE_FUNCTION_V4_TEMPLATE = `import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
6
+ import { CosmosClient } from "@azure/cosmos";
7
+ import { z } from "zod";
8
+
9
+ // 生成されたスキーマのインポート
10
+ {{SCHEMA_IMPORTS}}
11
+
12
+ // Cosmos DB クライアント(Managed Identity使用)
13
+ const cosmosClient = new CosmosClient({
14
+ endpoint: process.env.COSMOS_DB_ENDPOINT!,
15
+ aadCredentials: {} // Managed Identity使用
16
+ });
17
+
18
+ const database = cosmosClient.database(process.env.COSMOS_DB_DATABASE || "swallowkit");
19
+
20
+ {{FUNCTION_IMPLEMENTATIONS}}
21
+
22
+ // CRUD API エンドポイント
23
+ app.http('swallowkit-crud', {
24
+ methods: ['POST'],
25
+ authLevel: 'anonymous',
26
+ route: 'crud/{schema}',
27
+ handler: async (request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> => {
28
+ context.log('SwallowKit CRUD API function processed a request.');
29
+
30
+ try {
31
+ const schema = request.params.schema;
32
+ const { operation, data, id } = await request.json() as any;
33
+
34
+ let result;
35
+ switch (\`\${schema}_\${operation}\`) {
36
+ {{OPERATION_CASES}}
37
+ default:
38
+ return {
39
+ status: 400,
40
+ jsonBody: { error: \`Unknown operation: \${schema}_\${operation}\` }
41
+ };
42
+ }
43
+
44
+ return {
45
+ status: 200,
46
+ jsonBody: result
47
+ };
48
+ } catch (error) {
49
+ context.error('Error processing CRUD request:', error);
50
+ return {
51
+ status: 500,
52
+ jsonBody: { error: error instanceof Error ? error.message : 'Internal server error' }
53
+ };
54
+ }
55
+ }
56
+ });`;
57
+ // RPC関数のテンプレート(v4対応)
58
+ exports.RPC_FUNCTION_V4_TEMPLATE = `import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
59
+
60
+ // サーバー関数のインポート
61
+ {{SERVER_FUNCTION_IMPORTS}}
62
+
63
+ // 関数マッピング
64
+ const serverFunctions = {
65
+ {{FUNCTION_MAPPINGS}}
66
+ };
67
+
68
+ // RPC API エンドポイント
69
+ app.http('swallowkit-rpc', {
70
+ methods: ['POST'],
71
+ authLevel: 'anonymous',
72
+ route: '_swallowkit',
73
+ handler: async (request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> => {
74
+ context.log('SwallowKit RPC handler processed a request.');
75
+
76
+ try {
77
+ const { fnName, args } = await request.json() as any;
78
+
79
+ if (!fnName || !serverFunctions[fnName]) {
80
+ return {
81
+ status: 400,
82
+ jsonBody: { error: \`Unknown function: \${fnName}\` }
83
+ };
84
+ }
85
+
86
+ const serverFn = serverFunctions[fnName];
87
+ const result = await serverFn(...(args || []));
88
+
89
+ return {
90
+ status: 200,
91
+ jsonBody: result
92
+ };
93
+ } catch (error) {
94
+ context.error('Error executing server function:', error);
95
+ return {
96
+ status: 500,
97
+ jsonBody: { error: error instanceof Error ? error.message : 'Internal server error' }
98
+ };
99
+ }
100
+ }
101
+ });`;
102
+ // CRUD操作のテンプレート(v4対応)
103
+ exports.CRUD_FUNCTION_V4_TEMPLATE = {
104
+ create: `async function create{{SCHEMA_NAME}}(data: {{SCHEMA_TYPE}}) {
105
+ const schema = {{SCHEMA_NAME}}Schema;
106
+ const validatedData = schema.parse(data);
107
+
108
+ const container = database.container("{{TABLE_NAME}}");
109
+ const { resource } = await container.items.create({
110
+ ...validatedData,
111
+ id: validatedData.id || Date.now().toString(),
112
+ createdAt: new Date().toISOString(),
113
+ updatedAt: new Date().toISOString(),
114
+ });
115
+
116
+ return resource;
117
+ }`,
118
+ read: `async function get{{SCHEMA_NAME}}(id: string) {
119
+ const container = database.container("{{TABLE_NAME}}");
120
+
121
+ try {
122
+ const { resource } = await container.item(id, id).read();
123
+ return resource;
124
+ } catch (error: any) {
125
+ if (error.code === 404) {
126
+ return null;
127
+ }
128
+ throw error;
129
+ }
130
+ }`,
131
+ list: `async function list{{SCHEMA_NAME}}s(options?: { limit?: number; continuationToken?: string }) {
132
+ const container = database.container("{{TABLE_NAME}}");
133
+ const { limit = 50, continuationToken } = options || {};
134
+
135
+ const querySpec = {
136
+ query: "SELECT * FROM c ORDER BY c.createdAt DESC",
137
+ };
138
+
139
+ const { resources, continuationToken: nextToken } = await container.items
140
+ .query(querySpec, { maxItemCount: limit, continuationToken })
141
+ .fetchNext();
142
+
143
+ return {
144
+ items: resources,
145
+ continuationToken: nextToken,
146
+ };
147
+ }`,
148
+ update: `async function update{{SCHEMA_NAME}}(id: string, data: Partial<{{SCHEMA_TYPE}}>) {
149
+ const container = database.container("{{TABLE_NAME}}");
150
+
151
+ // 既存アイテムを取得
152
+ const { resource: existingItem } = await container.item(id, id).read();
153
+ if (!existingItem) {
154
+ throw new Error("Item not found");
155
+ }
156
+
157
+ // 部分更新データをマージ
158
+ const updatedItem = {
159
+ ...existingItem,
160
+ ...data,
161
+ updatedAt: new Date().toISOString(),
162
+ };
163
+
164
+ // スキーマで検証
165
+ const schema = {{SCHEMA_NAME}}Schema;
166
+ const validatedData = schema.parse(updatedItem);
167
+
168
+ const { resource } = await container.item(id, id).replace(validatedData);
169
+ return resource;
170
+ }`,
171
+ delete: `async function delete{{SCHEMA_NAME}}(id: string) {
172
+ const container = database.container("{{TABLE_NAME}}");
173
+
174
+ try {
175
+ await container.item(id, id).delete();
176
+ return { success: true };
177
+ } catch (error: any) {
178
+ if (error.code === 404) {
179
+ throw new Error("Item not found");
180
+ }
181
+ throw error;
182
+ }
183
+ }`,
184
+ };
185
+ // host.json v4対応
186
+ exports.HOST_JSON_V4_TEMPLATE = `{
187
+ "version": "2.0",
188
+ "functionTimeout": "00:05:00",
189
+ "extensionBundle": {
190
+ "id": "Microsoft.Azure.Functions.ExtensionBundle",
191
+ "version": "[4.*, 5.0.0)"
192
+ },
193
+ "extensions": {
194
+ "http": {
195
+ "routePrefix": "api"
196
+ }
197
+ },
198
+ "logging": {
199
+ "applicationInsights": {
200
+ "samplingSettings": {
201
+ "isEnabled": true
202
+ }
203
+ }
204
+ }
205
+ }`;
206
+ // local.settings.json v4対応(Managed Identity用)
207
+ exports.LOCAL_SETTINGS_V4_TEMPLATE = `{
208
+ "IsEncrypted": false,
209
+ "Values": {
210
+ "AzureWebJobsStorage": "",
211
+ "FUNCTIONS_WORKER_RUNTIME": "node",
212
+ "FUNCTIONS_WORKER_RUNTIME_VERSION": "~22",
213
+ "languageWorkers:node:arguments": "--no-deprecation",
214
+ "COSMOS_ENDPOINT": "http://localhost:8081",
215
+ "COSMOS_KEY": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
216
+ "COSMOS_DATABASE": "swallowkit-db",
217
+ "COSMOS_CONTAINER": "todos"
218
+ }
219
+ }`;
220
+ // tsconfig.json v4対応
221
+ exports.TSCONFIG_V4_TEMPLATE = `{
222
+ "compilerOptions": {
223
+ "module": "commonjs",
224
+ "target": "es6",
225
+ "outDir": "dist",
226
+ "rootDir": "src",
227
+ "sourceMap": true,
228
+ "strict": false,
229
+ "esModuleInterop": true,
230
+ "skipLibCheck": true,
231
+ "forceConsistentCasingInFileNames": true
232
+ },
233
+ "include": ["src/**/*"]
234
+ }`;
235
+ // .funcignore v4対応
236
+ exports.FUNCIGNORE_V4_TEMPLATE = `*.js.map
237
+ *.ts
238
+ .git*
239
+ .vscode
240
+ local.settings.json
241
+ test
242
+ tsconfig.json
243
+ .funcignore
244
+ *.md
245
+ node_modules/@types
246
+ src/
247
+ *.log`;
248
+ // package.json v4対応
249
+ exports.PACKAGE_JSON_V4_TEMPLATE = `{
250
+ "name": "swallowkit-api",
251
+ "version": "1.0.0",
252
+ "description": "SwallowKit Generated API Functions (v4)",
253
+ "main": "dist/functions/*.js",
254
+ "scripts": {
255
+ "build": "tsc",
256
+ "watch": "tsc -w",
257
+ "clean": "rimraf dist",
258
+ "prebuild": "npm run clean",
259
+ "prestart": "npm run build",
260
+ "start": "func start",
261
+ "test": "echo \\"No tests yet\\""
262
+ },
263
+ "dependencies": {
264
+ "@azure/functions": "^4.0.0",
265
+ "@azure/cosmos": "^4.0.0",
266
+ "zod": "^3.22.0"
267
+ },
268
+ "devDependencies": {
269
+ "@types/node": "^20.0.0",
270
+ "typescript": "^5.0.0",
271
+ "rimraf": "^5.0.0"
272
+ }
273
+ }`;
274
+ //# sourceMappingURL=azure-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-functions.js","sourceRoot":"","sources":["../../../src/generator/templates/azure-functions.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AAC1B,QAAA,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmDtC,CAAC;AAEL,qBAAqB;AACR,QAAA,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2CpC,CAAC;AAEL,sBAAsB;AACT,QAAA,yBAAyB,GAAG;IACvC,MAAM,EAAE;;;;;;;;;;;;;EAaR;IAEA,IAAI,EAAE;;;;;;;;;;;;EAYN;IAEA,IAAI,EAAE;;;;;;;;;;;;;;;;EAgBN;IAEA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBR;IAEA,MAAM,EAAE;;;;;;;;;;;;EAYR;CACD,CAAC;AAEF,iBAAiB;AACJ,QAAA,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;EAmBnC,CAAC;AAEH,8CAA8C;AACjC,QAAA,0BAA0B,GAAG;;;;;;;;;;;;EAYxC,CAAC;AAEH,qBAAqB;AACR,QAAA,oBAAoB,GAAG;;;;;;;;;;;;;EAalC,CAAC;AAEH,mBAAmB;AACN,QAAA,sBAAsB,GAAG;;;;;;;;;;;MAWhC,CAAC;AAEP,oBAAoB;AACP,QAAA,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;EAwBtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_SERVER_FUNCTIONS_TEMPLATE = "// \u30B5\u30FC\u30D0\u30FC\u5074\u3067\u5B9F\u884C\u3055\u308C\u308B\u95A2\u6570\uFF08Cosmos DB\u4F7F\u7528\uFF09\n// SwallowKit \u306F Cosmos DB \u3092\u6A19\u6E96\u30C7\u30FC\u30BF\u30B9\u30C8\u30A2\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\n// \n// \u3010\u91CD\u8981\u3011\u4E8B\u524D\u306B\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3068\u30B3\u30F3\u30C6\u30CA\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044:\n// 1. Cosmos DB Emulator \u3092\u8D77\u52D5\n// 2. Data Explorer \u3067\u4EE5\u4E0B\u3092\u4F5C\u6210:\n// - Database: swallowkit-db (\u307E\u305F\u306F\u74B0\u5883\u5909\u6570 COSMOS_DATABASE)\n// - Container: todos (\u307E\u305F\u306F\u74B0\u5883\u5909\u6570 COSMOS_CONTAINER)\n// - Partition Key: /id\n\nimport { CosmosClient } from '@azure/cosmos';\n\ninterface Todo {\n id: string;\n text: string;\n completed: boolean;\n}\n\n// Cosmos DB \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\nconst cosmosClient = new CosmosClient({\n endpoint: process.env.COSMOS_ENDPOINT || 'http://localhost:8081',\n key: process.env.COSMOS_KEY || 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==',\n});\n\nconst databaseId = process.env.COSMOS_DATABASE || 'swallowkit-db';\nconst containerId = process.env.COSMOS_CONTAINER || 'todos';\n\nconst database = cosmosClient.database(databaseId);\nconst container = database.container(containerId);\n\nexport async function getTodos(): Promise<Todo[]> {\n const { resources } = await container.items\n .readAll<Todo>()\n .fetchAll();\n return resources;\n}\n\nexport async function addTodo({ text }: { text: string }): Promise<Todo> {\n const newTodo: Todo = {\n id: Date.now().toString(),\n text,\n completed: false,\n };\n const { resource } = await container.items.create(newTodo);\n return resource as Todo;\n}\n\nexport async function deleteTodo({ id }: { id: string }): Promise<{ success: boolean }> {\n await container.item(id, id).delete();\n return { success: true };\n}\n\nexport async function toggleTodo({ id }: { id: string }): Promise<Todo | null> {\n const { resource: todo } = await container.item(id, id).read<Todo>();\n if (todo) {\n todo.completed = !todo.completed;\n const { resource } = await container.item(id, id).replace(todo);\n return resource as Todo;\n }\n return null;\n}\n";
2
+ //# sourceMappingURL=default-server-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-server-functions.d.ts","sourceRoot":"","sources":["../../../src/generator/templates/default-server-functions.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,iCAAiC,syEA6D7C,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SERVER_FUNCTIONS_TEMPLATE = void 0;
4
+ // デフォルトのサーバー関数テンプレート(Cosmos DB使用)
5
+ exports.DEFAULT_SERVER_FUNCTIONS_TEMPLATE = `// サーバー側で実行される関数(Cosmos DB使用)
6
+ // SwallowKit は Cosmos DB を標準データストアとして使用します
7
+ //
8
+ // 【重要】事前にデータベースとコンテナを作成してください:
9
+ // 1. Cosmos DB Emulator を起動
10
+ // 2. Data Explorer で以下を作成:
11
+ // - Database: swallowkit-db (または環境変数 COSMOS_DATABASE)
12
+ // - Container: todos (または環境変数 COSMOS_CONTAINER)
13
+ // - Partition Key: /id
14
+
15
+ import { CosmosClient } from '@azure/cosmos';
16
+
17
+ interface Todo {
18
+ id: string;
19
+ text: string;
20
+ completed: boolean;
21
+ }
22
+
23
+ // Cosmos DB クライアント
24
+ const cosmosClient = new CosmosClient({
25
+ endpoint: process.env.COSMOS_ENDPOINT || 'http://localhost:8081',
26
+ key: process.env.COSMOS_KEY || 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==',
27
+ });
28
+
29
+ const databaseId = process.env.COSMOS_DATABASE || 'swallowkit-db';
30
+ const containerId = process.env.COSMOS_CONTAINER || 'todos';
31
+
32
+ const database = cosmosClient.database(databaseId);
33
+ const container = database.container(containerId);
34
+
35
+ export async function getTodos(): Promise<Todo[]> {
36
+ const { resources } = await container.items
37
+ .readAll<Todo>()
38
+ .fetchAll();
39
+ return resources;
40
+ }
41
+
42
+ export async function addTodo({ text }: { text: string }): Promise<Todo> {
43
+ const newTodo: Todo = {
44
+ id: Date.now().toString(),
45
+ text,
46
+ completed: false,
47
+ };
48
+ const { resource } = await container.items.create(newTodo);
49
+ return resource as Todo;
50
+ }
51
+
52
+ export async function deleteTodo({ id }: { id: string }): Promise<{ success: boolean }> {
53
+ await container.item(id, id).delete();
54
+ return { success: true };
55
+ }
56
+
57
+ export async function toggleTodo({ id }: { id: string }): Promise<Todo | null> {
58
+ const { resource: todo } = await container.item(id, id).read<Todo>();
59
+ if (todo) {
60
+ todo.completed = !todo.completed;
61
+ const { resource } = await container.item(id, id).replace(todo);
62
+ return resource as Todo;
63
+ }
64
+ return null;
65
+ }
66
+ `;
67
+ //# sourceMappingURL=default-server-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-server-functions.js","sourceRoot":"","sources":["../../../src/generator/templates/default-server-functions.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AACrB,QAAA,iCAAiC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DhD,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * SwallowKit サーバー関数レジストリ
3
+ * 関数名の動的取得とRPC呼び出しを管理
4
+ * 型安全性とminify対応を強化
5
+ */
6
+ import { ServerFunctionDefinition, ServerFnFactory } from "../types";
7
+ /**
8
+ * サーバー関数を登録(基本版)
9
+ */
10
+ export declare function registerServerFunction(fn: Function, name: string, id?: string): void;
11
+ /**
12
+ * 型安全なサーバー関数ファクトリを作成
13
+ */
14
+ export declare function defineServerFunction<TArgs extends any[], TResult>(name: string, implementation: (...args: TArgs) => Promise<TResult> | TResult): ServerFnFactory<TArgs, TResult>;
15
+ /**
16
+ * 複数のサーバー関数を一括登録
17
+ */
18
+ export declare function registerServerFunctions(functions: Record<string, Function>): void;
19
+ /**
20
+ * サーバー関数の登録情報を取得
21
+ */
22
+ export declare function getServerFunctionDefinition(fn: Function): ServerFunctionDefinition | undefined;
23
+ /**
24
+ * サーバー関数の登録名を取得
25
+ */
26
+ export declare function getServerFunctionName(fn: Function): string;
27
+ /**
28
+ * サーバー関数が登録されているかチェック
29
+ */
30
+ export declare function isServerFunctionRegistered(fn: Function): boolean;
31
+ /**
32
+ * 登録された関数の一覧を取得
33
+ */
34
+ export declare function getRegisteredFunctions(): Array<{
35
+ name: string;
36
+ function: Function;
37
+ id: string;
38
+ }>;
39
+ /**
40
+ * すべての関数登録をクリア
41
+ */
42
+ export declare function clearServerFunctionRegistry(): void;
43
+ /**
44
+ * 自動登録ヘルパー: オブジェクトからサーバー関数を自動検出して登録
45
+ */
46
+ export declare function autoRegisterServerFunctions(moduleExports: Record<string, any>): void;
47
+ /**
48
+ * IDによってサーバー関数を取得
49
+ */
50
+ export declare function getServerFunctionById(id: string): Function | undefined;
51
+ /**
52
+ * サーバー関数のIDを取得
53
+ */
54
+ export declare function getServerFunctionId(fn: Function): string | undefined;
55
+ /**
56
+ * 開発時のデバッグ情報を取得
57
+ */
58
+ export declare function getRegistryDebugInfo(): {
59
+ registeredCount: number;
60
+ functions: Array<{
61
+ name: string;
62
+ id: string;
63
+ hasId: boolean;
64
+ hasName: boolean;
65
+ }>;
66
+ };
67
+ //# sourceMappingURL=server-function-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-function-registry.d.ts","sourceRoot":"","sources":["../../src/hooks/server-function-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKrE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAUpF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EAC/D,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAC7D,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAcjC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAIjF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,GAAG,wBAAwB,GAAG,SAAS,CAE9F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAwB1D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAGhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAMhG;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAMpF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAYpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClF,CAYA"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * SwallowKit サーバー関数レジストリ
4
+ * 関数名の動的取得とRPC呼び出しを管理
5
+ * 型安全性とminify対応を強化
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.registerServerFunction = registerServerFunction;
9
+ exports.defineServerFunction = defineServerFunction;
10
+ exports.registerServerFunctions = registerServerFunctions;
11
+ exports.getServerFunctionDefinition = getServerFunctionDefinition;
12
+ exports.getServerFunctionName = getServerFunctionName;
13
+ exports.isServerFunctionRegistered = isServerFunctionRegistered;
14
+ exports.getRegisteredFunctions = getRegisteredFunctions;
15
+ exports.clearServerFunctionRegistry = clearServerFunctionRegistry;
16
+ exports.autoRegisterServerFunctions = autoRegisterServerFunctions;
17
+ exports.getServerFunctionById = getServerFunctionById;
18
+ exports.getServerFunctionId = getServerFunctionId;
19
+ exports.getRegistryDebugInfo = getRegistryDebugInfo;
20
+ const serverFunctionRegistry = new Map();
21
+ const serverFunctionIdMap = new Map();
22
+ /**
23
+ * サーバー関数を登録(基本版)
24
+ */
25
+ function registerServerFunction(fn, name, id) {
26
+ const functionId = id || `${name}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
27
+ const definition = {
28
+ fn: fn,
29
+ name,
30
+ id: functionId,
31
+ };
32
+ serverFunctionRegistry.set(fn, definition);
33
+ serverFunctionIdMap.set(functionId, fn);
34
+ }
35
+ /**
36
+ * 型安全なサーバー関数ファクトリを作成
37
+ */
38
+ function defineServerFunction(name, implementation) {
39
+ const id = `swk_${name}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
40
+ const factory = (async (...args) => {
41
+ return await implementation(...args);
42
+ });
43
+ factory.__swallowkit_id = id;
44
+ factory.__swallowkit_name = name;
45
+ // 自動登録
46
+ registerServerFunction(factory, name, id);
47
+ return factory;
48
+ }
49
+ /**
50
+ * 複数のサーバー関数を一括登録
51
+ */
52
+ function registerServerFunctions(functions) {
53
+ Object.entries(functions).forEach(([name, fn]) => {
54
+ registerServerFunction(fn, name);
55
+ });
56
+ }
57
+ /**
58
+ * サーバー関数の登録情報を取得
59
+ */
60
+ function getServerFunctionDefinition(fn) {
61
+ return serverFunctionRegistry.get(fn);
62
+ }
63
+ /**
64
+ * サーバー関数の登録名を取得
65
+ */
66
+ function getServerFunctionName(fn) {
67
+ const definition = serverFunctionRegistry.get(fn);
68
+ if (definition) {
69
+ return definition.name;
70
+ }
71
+ // SwallowKit ファクトリ関数の場合
72
+ if (typeof fn === 'function' && '__swallowkit_name' in fn) {
73
+ return fn.__swallowkit_name;
74
+ }
75
+ // フォールバック: 関数の name プロパティを使用
76
+ if (fn.name) {
77
+ console.warn(`SwallowKit: Using function.name "${fn.name}" as fallback. ` +
78
+ `Consider using defineServerFunction() or registerServerFunction() for better reliability.`);
79
+ return fn.name;
80
+ }
81
+ throw new Error("Server function name could not be determined. " +
82
+ "Please use defineServerFunction() or registerServerFunction() to ensure reliable function identification.");
83
+ }
84
+ /**
85
+ * サーバー関数が登録されているかチェック
86
+ */
87
+ function isServerFunctionRegistered(fn) {
88
+ return serverFunctionRegistry.has(fn) ||
89
+ (typeof fn === 'function' && '__swallowkit_id' in fn);
90
+ }
91
+ /**
92
+ * 登録された関数の一覧を取得
93
+ */
94
+ function getRegisteredFunctions() {
95
+ return Array.from(serverFunctionRegistry.entries()).map(([fn, definition]) => ({
96
+ name: definition.name,
97
+ function: fn,
98
+ id: definition.id,
99
+ }));
100
+ }
101
+ /**
102
+ * すべての関数登録をクリア
103
+ */
104
+ function clearServerFunctionRegistry() {
105
+ serverFunctionRegistry.clear();
106
+ serverFunctionIdMap.clear();
107
+ }
108
+ /**
109
+ * 自動登録ヘルパー: オブジェクトからサーバー関数を自動検出して登録
110
+ */
111
+ function autoRegisterServerFunctions(moduleExports) {
112
+ Object.entries(moduleExports).forEach(([name, value]) => {
113
+ if (typeof value === 'function') {
114
+ registerServerFunction(value, name);
115
+ }
116
+ });
117
+ }
118
+ /**
119
+ * IDによってサーバー関数を取得
120
+ */
121
+ function getServerFunctionById(id) {
122
+ return serverFunctionIdMap.get(id);
123
+ }
124
+ /**
125
+ * サーバー関数のIDを取得
126
+ */
127
+ function getServerFunctionId(fn) {
128
+ const definition = serverFunctionRegistry.get(fn);
129
+ if (definition) {
130
+ return definition.id;
131
+ }
132
+ // SwallowKit ファクトリ関数の場合
133
+ if (typeof fn === 'function' && '__swallowkit_id' in fn) {
134
+ return fn.__swallowkit_id;
135
+ }
136
+ return undefined;
137
+ }
138
+ /**
139
+ * 開発時のデバッグ情報を取得
140
+ */
141
+ function getRegistryDebugInfo() {
142
+ const functions = Array.from(serverFunctionRegistry.entries()).map(([fn, definition]) => ({
143
+ name: definition.name,
144
+ id: definition.id,
145
+ hasId: '__swallowkit_id' in fn,
146
+ hasName: '__swallowkit_name' in fn,
147
+ }));
148
+ return {
149
+ registeredCount: serverFunctionRegistry.size,
150
+ functions,
151
+ };
152
+ }
153
+ //# sourceMappingURL=server-function-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-function-registry.js","sourceRoot":"","sources":["../../src/hooks/server-function-registry.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAUH,wDAUC;AAKD,oDAiBC;AAKD,0DAIC;AAKD,kEAEC;AAKD,sDAwBC;AAKD,gEAGC;AAKD,wDAMC;AAKD,kEAGC;AAKD,kEAMC;AAKD,sDAEC;AAKD,kDAYC;AAKD,oDAeC;AArKD,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAsC,CAAC;AAC7E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAoB,CAAC;AAExD;;GAEG;AACH,SAAgB,sBAAsB,CAAC,EAAY,EAAE,IAAY,EAAE,EAAW;IAC5E,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,UAAU,GAA6B;QAC3C,EAAE,EAAE,EAAS;QACb,IAAI;QACJ,EAAE,EAAE,UAAU;KACf,CAAC;IAEF,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC3C,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,IAAY,EACZ,cAA8D;IAE9D,MAAM,EAAE,GAAG,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAElF,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QACxC,OAAO,MAAM,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC,CAAoC,CAAC;IAEtC,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC;IAC7B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAEjC,OAAO;IACP,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAE1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,SAAmC;IACzE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QAC/C,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,EAAY;IACtD,OAAO,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,EAAY;IAChD,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,EAAE,KAAK,UAAU,IAAI,mBAAmB,IAAI,EAAE,EAAE,CAAC;QAC1D,OAAQ,EAAU,CAAC,iBAAiB,CAAC;IACvC,CAAC;IAED,6BAA6B;IAC7B,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CACV,oCAAoC,EAAE,CAAC,IAAI,iBAAiB;YAC5D,2FAA2F,CAC5F,CAAC;QACF,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,gDAAgD;QAChD,2GAA2G,CAC5G,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,EAAY;IACrD,OAAO,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,CAAC,OAAO,EAAE,KAAK,UAAU,IAAI,iBAAiB,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,EAAE;QACZ,EAAE,EAAE,UAAU,CAAC,EAAE;KAClB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B;IACzC,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAC/B,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,aAAkC;IAC5E,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACtD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,EAAU;IAC9C,OAAO,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,EAAY;IAC9C,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,EAAE,CAAC;IACvB,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,EAAE,KAAK,UAAU,IAAI,iBAAiB,IAAI,EAAE,EAAE,CAAC;QACxD,OAAQ,EAAU,CAAC,eAAe,CAAC;IACrC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAIlC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,KAAK,EAAE,iBAAiB,IAAI,EAAE;QAC9B,OAAO,EAAE,mBAAmB,IAAI,EAAE;KACnC,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,eAAe,EAAE,sBAAsB,CAAC,IAAI;QAC5C,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * 高度なクエリフックのオプション
4
+ */
5
+ export interface UseQueryOptions<T> {
6
+ enabled?: boolean;
7
+ refetchOnMount?: boolean;
8
+ refetchInterval?: number;
9
+ staleTime?: number;
10
+ cacheTime?: number;
11
+ retry?: number;
12
+ onSuccess?: (data: T) => void;
13
+ onError?: (error: any) => void;
14
+ }
15
+ /**
16
+ * クエリの状態
17
+ */
18
+ export interface UseQueryResult<T> {
19
+ data: T | undefined;
20
+ loading: boolean;
21
+ error: any;
22
+ refetch: () => void;
23
+ isStale: boolean;
24
+ isFetching: boolean;
25
+ }
26
+ /**
27
+ * 高度なデータ取得フック
28
+ */
29
+ export declare function useQuery<T>(queryKey: string[], queryFn: () => Promise<T>, options?: UseQueryOptions<T>): UseQueryResult<T>;
30
+ /**
31
+ * ミューテーションのオプション
32
+ */
33
+ export interface UseMutationOptions<TVariables, TData> {
34
+ onSuccess?: (data: TData, variables: TVariables) => void;
35
+ onError?: (error: any, variables: TVariables) => void;
36
+ onMutate?: (variables: TVariables) => void;
37
+ }
38
+ /**
39
+ * ミューテーションの状態
40
+ */
41
+ export interface UseMutationResult<TVariables, TData> {
42
+ mutate: (variables: TVariables) => Promise<TData>;
43
+ mutateAsync: (variables: TVariables) => Promise<TData>;
44
+ loading: boolean;
45
+ error: any;
46
+ data: TData | undefined;
47
+ reset: () => void;
48
+ }
49
+ /**
50
+ * データ変更フック
51
+ */
52
+ export declare function useMutation<TVariables, TData>(mutationFn: (variables: TVariables) => Promise<TData>, options?: UseMutationOptions<TVariables, TData>): UseMutationResult<TVariables, TData>;
53
+ /**
54
+ * Zodスキーマ付きのクエリフック
55
+ */
56
+ export declare function useSchemaQuery<T>(queryKey: string[], queryFn: () => Promise<unknown>, schema: z.ZodSchema<T>, options?: UseQueryOptions<T>): UseQueryResult<T>;
57
+ /**
58
+ * Zodスキーマ付きのミューテーションフック
59
+ */
60
+ export declare function useSchemaMutation<TVariables, TData>(mutationFn: (variables: TVariables) => Promise<unknown>, responseSchema: z.ZodSchema<TData>, options?: UseMutationOptions<TVariables, TData>): UseMutationResult<TVariables, TData>;
61
+ //# sourceMappingURL=useQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useQuery.ts"],"names":[],"mappings":"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"}