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.
- package/LICENSE +21 -0
- package/README.md +563 -0
- package/dist/api/rpc-handler.d.ts +71 -0
- package/dist/api/rpc-handler.d.ts.map +1 -0
- package/dist/api/rpc-handler.js +205 -0
- package/dist/api/rpc-handler.js.map +1 -0
- package/dist/cli/commands/build.d.ts +6 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +193 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +3 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +305 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +4 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +238 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/index.d.ts +9 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +18 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +383 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +6 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +254 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +32 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config.d.ts +25 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +204 -0
- package/dist/core/config.js.map +1 -0
- package/dist/database/client.d.ts +46 -0
- package/dist/database/client.d.ts.map +1 -0
- package/dist/database/client.js +156 -0
- package/dist/database/client.js.map +1 -0
- package/dist/database/repository.d.ts +71 -0
- package/dist/database/repository.d.ts.map +1 -0
- package/dist/database/repository.js +89 -0
- package/dist/database/repository.js.map +1 -0
- package/dist/generator/api-generator.d.ts +53 -0
- package/dist/generator/api-generator.d.ts.map +1 -0
- package/dist/generator/api-generator.js +284 -0
- package/dist/generator/api-generator.js.map +1 -0
- package/dist/generator/schema-parser.d.ts +45 -0
- package/dist/generator/schema-parser.d.ts.map +1 -0
- package/dist/generator/schema-parser.js +198 -0
- package/dist/generator/schema-parser.js.map +1 -0
- package/dist/generator/templates/azure-functions.d.ts +15 -0
- package/dist/generator/templates/azure-functions.d.ts.map +1 -0
- package/dist/generator/templates/azure-functions.js +274 -0
- package/dist/generator/templates/azure-functions.js.map +1 -0
- package/dist/generator/templates/default-server-functions.d.ts +2 -0
- package/dist/generator/templates/default-server-functions.d.ts.map +1 -0
- package/dist/generator/templates/default-server-functions.js +67 -0
- package/dist/generator/templates/default-server-functions.js.map +1 -0
- package/dist/hooks/server-function-registry.d.ts +67 -0
- package/dist/hooks/server-function-registry.d.ts.map +1 -0
- package/dist/hooks/server-function-registry.js +153 -0
- package/dist/hooks/server-function-registry.js.map +1 -0
- package/dist/hooks/useQuery.d.ts +61 -0
- package/dist/hooks/useQuery.d.ts.map +1 -0
- package/dist/hooks/useQuery.js +147 -0
- package/dist/hooks/useQuery.js.map +1 -0
- package/dist/hooks/useServerFn.d.ts +27 -0
- package/dist/hooks/useServerFn.d.ts.map +1 -0
- package/dist/hooks/useServerFn.js +119 -0
- package/dist/hooks/useServerFn.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/example.d.ts +657 -0
- package/dist/schemas/example.d.ts.map +1 -0
- package/dist/schemas/example.js +133 -0
- package/dist/schemas/example.js.map +1 -0
- package/dist/server/todo-functions.d.ts +21 -0
- package/dist/server/todo-functions.d.ts.map +1 -0
- package/dist/server/todo-functions.js +121 -0
- package/dist/server/todo-functions.js.map +1 -0
- package/dist/types/index.d.ts +53 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- 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":"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"}
|
|
@@ -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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"}
|