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,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"}
|