swallowkit 1.0.0-beta.11 → 1.0.0-beta.13

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 (68) hide show
  1. package/README.ja.md +33 -9
  2. package/README.md +33 -9
  3. package/dist/__tests__/fixtures.d.ts +8 -0
  4. package/dist/__tests__/fixtures.d.ts.map +1 -1
  5. package/dist/__tests__/fixtures.js +60 -0
  6. package/dist/__tests__/fixtures.js.map +1 -1
  7. package/dist/cli/commands/add-connector.d.ts +20 -0
  8. package/dist/cli/commands/add-connector.d.ts.map +1 -0
  9. package/dist/cli/commands/add-connector.js +161 -0
  10. package/dist/cli/commands/add-connector.js.map +1 -0
  11. package/dist/cli/commands/create-model.d.ts +1 -0
  12. package/dist/cli/commands/create-model.d.ts.map +1 -1
  13. package/dist/cli/commands/create-model.js +65 -1
  14. package/dist/cli/commands/create-model.js.map +1 -1
  15. package/dist/cli/commands/dev.d.ts.map +1 -1
  16. package/dist/cli/commands/dev.js +49 -3
  17. package/dist/cli/commands/dev.js.map +1 -1
  18. package/dist/cli/commands/scaffold.d.ts.map +1 -1
  19. package/dist/cli/commands/scaffold.js +130 -7
  20. package/dist/cli/commands/scaffold.js.map +1 -1
  21. package/dist/cli/index.js +15 -0
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/core/config.d.ts +3 -2
  24. package/dist/core/config.d.ts.map +1 -1
  25. package/dist/core/config.js +37 -0
  26. package/dist/core/config.js.map +1 -1
  27. package/dist/core/mock/connector-mock-server.d.ts +67 -0
  28. package/dist/core/mock/connector-mock-server.d.ts.map +1 -0
  29. package/dist/core/mock/connector-mock-server.js +285 -0
  30. package/dist/core/mock/connector-mock-server.js.map +1 -0
  31. package/dist/core/mock/zod-mock-generator.d.ts +14 -0
  32. package/dist/core/mock/zod-mock-generator.d.ts.map +1 -0
  33. package/dist/core/mock/zod-mock-generator.js +163 -0
  34. package/dist/core/mock/zod-mock-generator.js.map +1 -0
  35. package/dist/core/scaffold/connector-functions-generator.d.ts +41 -0
  36. package/dist/core/scaffold/connector-functions-generator.d.ts.map +1 -0
  37. package/dist/core/scaffold/connector-functions-generator.js +1009 -0
  38. package/dist/core/scaffold/connector-functions-generator.js.map +1 -0
  39. package/dist/core/scaffold/model-parser.d.ts +6 -0
  40. package/dist/core/scaffold/model-parser.d.ts.map +1 -1
  41. package/dist/core/scaffold/model-parser.js +150 -28
  42. package/dist/core/scaffold/model-parser.js.map +1 -1
  43. package/dist/core/scaffold/nextjs-generator.d.ts +8 -0
  44. package/dist/core/scaffold/nextjs-generator.d.ts.map +1 -1
  45. package/dist/core/scaffold/nextjs-generator.js +133 -0
  46. package/dist/core/scaffold/nextjs-generator.js.map +1 -1
  47. package/dist/types/index.d.ts +31 -0
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/package.json +1 -1
  50. package/src/__tests__/config.test.ts +141 -0
  51. package/src/__tests__/connector-functions-generator.test.ts +288 -0
  52. package/src/__tests__/connector-mock-server.test.ts +252 -0
  53. package/src/__tests__/connector-model-bff.test.ts +162 -0
  54. package/src/__tests__/fixtures.ts +60 -0
  55. package/src/__tests__/scaffold.test.ts +2 -2
  56. package/src/__tests__/zod-mock-generator.test.ts +132 -0
  57. package/src/cli/commands/add-connector.ts +157 -0
  58. package/src/cli/commands/create-model.ts +72 -2
  59. package/src/cli/commands/dev.ts +55 -4
  60. package/src/cli/commands/scaffold.ts +211 -12
  61. package/src/cli/index.ts +16 -0
  62. package/src/core/config.ts +42 -1
  63. package/src/core/mock/connector-mock-server.ts +307 -0
  64. package/src/core/mock/zod-mock-generator.ts +205 -0
  65. package/src/core/scaffold/connector-functions-generator.ts +1106 -0
  66. package/src/core/scaffold/model-parser.ts +172 -31
  67. package/src/core/scaffold/nextjs-generator.ts +154 -0
  68. package/src/types/index.ts +47 -0
@@ -38,6 +38,7 @@ exports.generateConfig = generateConfig;
38
38
  exports.loadConfigFromEnv = loadConfigFromEnv;
39
39
  exports.getBackendLanguage = getBackendLanguage;
40
40
  exports.getFullConfig = getFullConfig;
41
+ exports.getConnectorDefinition = getConnectorDefinition;
41
42
  exports.validateConfig = validateConfig;
42
43
  exports.isSwallowKitProject = isSwallowKitProject;
43
44
  exports.ensureSwallowKitProject = ensureSwallowKitProject;
@@ -116,6 +117,7 @@ function mergeConfig(defaultConfig, userConfig) {
116
117
  ...userConfig.api?.cors,
117
118
  },
118
119
  },
120
+ ...(userConfig.connectors ? { connectors: userConfig.connectors } : {}),
119
121
  };
120
122
  }
121
123
  /**
@@ -190,9 +192,19 @@ function getFullConfig(configPath) {
190
192
  const envConfig = loadConfigFromEnv();
191
193
  return mergeConfig(fileConfig, envConfig);
192
194
  }
195
+ /**
196
+ * コネクタ定義を名前で取得
197
+ */
198
+ function getConnectorDefinition(connectorName, configPath) {
199
+ const config = getFullConfig(configPath);
200
+ return config.connectors?.[connectorName];
201
+ }
193
202
  /**
194
203
  * 設定の検証
195
204
  */
205
+ const VALID_CONNECTOR_TYPES = ["rdb", "api"];
206
+ const VALID_RDB_PROVIDERS = ["mysql", "postgres", "sqlserver"];
207
+ const VALID_API_AUTH_TYPES = ["apiKey", "bearer", "oauth2"];
196
208
  function validateConfig(config) {
197
209
  const errors = [];
198
210
  // データベース設定の検証
@@ -206,6 +218,31 @@ function validateConfig(config) {
206
218
  if (config.backend?.language && !VALID_BACKEND_LANGUAGES.includes(config.backend.language)) {
207
219
  errors.push("Backend language must be one of: typescript, csharp, python");
208
220
  }
221
+ // コネクタ設定の検証
222
+ if (config.connectors) {
223
+ for (const [name, connector] of Object.entries(config.connectors)) {
224
+ if (!VALID_CONNECTOR_TYPES.includes(connector.type)) {
225
+ errors.push(`Connector '${name}': type must be one of: ${VALID_CONNECTOR_TYPES.join(", ")}`);
226
+ continue;
227
+ }
228
+ if (connector.type === "rdb") {
229
+ if (!connector.provider || !VALID_RDB_PROVIDERS.includes(connector.provider)) {
230
+ errors.push(`Connector '${name}': provider must be one of: ${VALID_RDB_PROVIDERS.join(", ")}`);
231
+ }
232
+ if (!connector.connectionEnvVar) {
233
+ errors.push(`Connector '${name}': connectionEnvVar is required`);
234
+ }
235
+ }
236
+ if (connector.type === "api") {
237
+ if (!connector.baseUrlEnvVar) {
238
+ errors.push(`Connector '${name}': baseUrlEnvVar is required`);
239
+ }
240
+ if (connector.auth && !VALID_API_AUTH_TYPES.includes(connector.auth.type)) {
241
+ errors.push(`Connector '${name}': auth.type must be one of: ${VALID_API_AUTH_TYPES.join(", ")}`);
242
+ }
243
+ }
244
+ }
245
+ }
209
246
  return {
210
247
  valid: errors.length === 0,
211
248
  errors,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * コネクタモデル用モックサーバー
3
+ * - コネクタモデルへのリクエスト → Zodベースのインメモリ CRUD で応答
4
+ * - その他のリクエスト → 実Azure Functions へプロキシ
5
+ */
6
+ import { ModelInfo } from "../scaffold/model-parser";
7
+ export interface ConnectorMockServerOptions {
8
+ /** モックサーバーのリッスンポート */
9
+ port: number;
10
+ /** Azure Functions の転送先ホスト:ポート(例: "localhost:7071") */
11
+ functionsTarget: string;
12
+ /** コネクタモデル一覧 */
13
+ connectorModels: ModelInfo[];
14
+ /** 全モデル一覧(dev-seeds 読み込み用) */
15
+ allModels?: ModelInfo[];
16
+ /** dev-seeds 環境名(指定時はシードデータを初期データとして読み込む) */
17
+ seedEnv?: string;
18
+ /** dev-seeds ディレクトリ */
19
+ seedsDir?: string;
20
+ /** 各モデルの初期生成レコード数(デフォルト: 5) */
21
+ mockCount?: number;
22
+ /** ホスト名 */
23
+ host?: string;
24
+ }
25
+ type MockDocument = Record<string, unknown>;
26
+ /**
27
+ * コネクタモデル用モックサーバー
28
+ */
29
+ export declare class ConnectorMockServer {
30
+ private server;
31
+ private stores;
32
+ private routeMap;
33
+ private options;
34
+ constructor(options: ConnectorMockServerOptions);
35
+ /**
36
+ * モックデータを初期化し、サーバーを起動
37
+ */
38
+ start(): Promise<void>;
39
+ /**
40
+ * サーバーを停止
41
+ */
42
+ stop(): Promise<void>;
43
+ /**
44
+ * 特定モデルの現在のストアデータを取得(テスト用)
45
+ */
46
+ getStore(modelName: string): MockDocument[];
47
+ private initializeStores;
48
+ private handleRequest;
49
+ /**
50
+ * URL パス解析: /api/backlogIssue/123 → { route: "backlogIssue", id: "123" }
51
+ */
52
+ private parseRoute;
53
+ private handleMockCrud;
54
+ /**
55
+ * コネクタモデル以外のリクエストをAzure Functionsへプロキシ
56
+ */
57
+ private proxyToFunctions;
58
+ private readBody;
59
+ private sendJson;
60
+ /**
61
+ * リクエストボディを完全に読み捨ててからレスポンスを送信
62
+ * POST/PUT の 405 等で未読ボディがある場合に Linux で RST を防ぐ
63
+ */
64
+ private drainAndRespond;
65
+ }
66
+ export {};
67
+ //# sourceMappingURL=connector-mock-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-mock-server.d.ts","sourceRoot":"","sources":["../../../src/core/mock/connector-mock-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAIlE,MAAM,WAAW,0BAA0B;IACzC,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB;IAChB,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,EAAE,0BAA0B;IAU/C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;YAO7B,gBAAgB;IA+B9B,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,cAAc;IA0EtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,QAAQ;IAahB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ /**
3
+ * コネクタモデル用モックサーバー
4
+ * - コネクタモデルへのリクエスト → Zodベースのインメモリ CRUD で応答
5
+ * - その他のリクエスト → 実Azure Functions へプロキシ
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.ConnectorMockServer = void 0;
42
+ const http = __importStar(require("http"));
43
+ const model_parser_1 = require("../scaffold/model-parser");
44
+ const zod_mock_generator_1 = require("./zod-mock-generator");
45
+ const dev_seeds_1 = require("../../cli/commands/dev-seeds");
46
+ /**
47
+ * コネクタモデル用モックサーバー
48
+ */
49
+ class ConnectorMockServer {
50
+ constructor(options) {
51
+ this.server = null;
52
+ this.stores = new Map();
53
+ this.routeMap = new Map(); // route → model
54
+ this.options = options;
55
+ // ルートマップを構築: モデル名(camelCase) → ModelInfo
56
+ for (const model of options.connectorModels) {
57
+ const route = (0, model_parser_1.toCamelCase)(model.name);
58
+ this.routeMap.set(route, model);
59
+ }
60
+ }
61
+ /**
62
+ * モックデータを初期化し、サーバーを起動
63
+ */
64
+ async start() {
65
+ await this.initializeStores();
66
+ return new Promise((resolve, reject) => {
67
+ this.server = http.createServer((req, res) => {
68
+ this.handleRequest(req, res);
69
+ });
70
+ this.server.on("error", reject);
71
+ this.server.listen(this.options.port, this.options.host || "localhost", () => {
72
+ resolve();
73
+ });
74
+ });
75
+ }
76
+ /**
77
+ * サーバーを停止
78
+ */
79
+ stop() {
80
+ return new Promise((resolve) => {
81
+ if (this.server) {
82
+ // Force close keep-alive connections (Node.js 18.2+)
83
+ if (typeof this.server.closeAllConnections === "function") {
84
+ this.server.closeAllConnections();
85
+ }
86
+ this.server.close(() => resolve());
87
+ }
88
+ else {
89
+ resolve();
90
+ }
91
+ });
92
+ }
93
+ /**
94
+ * 特定モデルの現在のストアデータを取得(テスト用)
95
+ */
96
+ getStore(modelName) {
97
+ const route = (0, model_parser_1.toCamelCase)(modelName);
98
+ return this.stores.get(route) || [];
99
+ }
100
+ // ─── Internal ─────────────────────────────────────────────
101
+ async initializeStores() {
102
+ const allModels = this.options.allModels || this.options.connectorModels;
103
+ const mockCount = this.options.mockCount ?? 5;
104
+ // まず Zod ベースのモックデータで初期化
105
+ for (const model of this.options.connectorModels) {
106
+ const route = (0, model_parser_1.toCamelCase)(model.name);
107
+ this.stores.set(route, (0, zod_mock_generator_1.generateMockDocuments)(model, mockCount, allModels));
108
+ }
109
+ // dev-seeds があれば上書き
110
+ if (this.options.seedEnv) {
111
+ try {
112
+ const seedFiles = await (0, dev_seeds_1.loadDevSeedFiles)(this.options.seedEnv, this.options.connectorModels, this.options.seedsDir);
113
+ for (const seedFile of seedFiles) {
114
+ const route = (0, model_parser_1.toCamelCase)(seedFile.model.name);
115
+ if (this.stores.has(route)) {
116
+ this.stores.set(route, seedFile.documents);
117
+ console.log(` 📂 Loaded ${seedFile.documents.length} seed doc(s) for ${seedFile.model.name}`);
118
+ }
119
+ }
120
+ }
121
+ catch (err) {
122
+ console.warn(`⚠️ Failed to load dev-seeds for connectors: ${err.message}`);
123
+ }
124
+ }
125
+ }
126
+ handleRequest(req, res) {
127
+ const { route, id } = this.parseRoute(req.url || "");
128
+ // コネクタモデルのルートか判定
129
+ if (route && this.routeMap.has(route)) {
130
+ this.handleMockCrud(req, res, route, id);
131
+ }
132
+ else {
133
+ this.proxyToFunctions(req, res);
134
+ }
135
+ }
136
+ /**
137
+ * URL パス解析: /api/backlogIssue/123 → { route: "backlogIssue", id: "123" }
138
+ */
139
+ parseRoute(url) {
140
+ const parsed = new URL(url, "http://localhost");
141
+ const segments = parsed.pathname.split("/").filter(Boolean);
142
+ // /api/<route> or /api/<route>/<id>
143
+ if (segments.length >= 2 && segments[0] === "api") {
144
+ return {
145
+ route: segments[1],
146
+ id: segments.length >= 3 ? segments[2] : null,
147
+ };
148
+ }
149
+ return { route: null, id: null };
150
+ }
151
+ handleMockCrud(req, res, route, id) {
152
+ const method = (req.method || "GET").toUpperCase();
153
+ const store = this.stores.get(route) || [];
154
+ const model = this.routeMap.get(route);
155
+ const ops = model.connectorConfig?.operations || [];
156
+ switch (method) {
157
+ case "GET":
158
+ req.resume();
159
+ if (id) {
160
+ if (!ops.includes("getById")) {
161
+ return this.sendJson(res, 405, { error: "getById not supported" });
162
+ }
163
+ const item = store.find((doc) => doc.id === id);
164
+ return item
165
+ ? this.sendJson(res, 200, item)
166
+ : this.sendJson(res, 404, { error: "Item not found" });
167
+ }
168
+ if (!ops.includes("getAll")) {
169
+ return this.sendJson(res, 405, { error: "getAll not supported" });
170
+ }
171
+ return this.sendJson(res, 200, store);
172
+ case "POST":
173
+ if (!ops.includes("create")) {
174
+ return this.drainAndRespond(req, res, 405, { error: "create not supported" });
175
+ }
176
+ this.readBody(req, (body) => {
177
+ if (!body.id) {
178
+ body.id = `${route}-${Date.now()}`;
179
+ }
180
+ body.createdAt = body.createdAt || new Date().toISOString();
181
+ body.updatedAt = body.updatedAt || new Date().toISOString();
182
+ store.push(body);
183
+ this.sendJson(res, 201, body);
184
+ });
185
+ return;
186
+ case "PUT":
187
+ if (!ops.includes("update")) {
188
+ return this.drainAndRespond(req, res, 405, { error: "update not supported" });
189
+ }
190
+ if (!id)
191
+ return this.drainAndRespond(req, res, 400, { error: "id required" });
192
+ this.readBody(req, (body) => {
193
+ const idx = store.findIndex((doc) => doc.id === id);
194
+ if (idx === -1)
195
+ return this.sendJson(res, 404, { error: "Item not found" });
196
+ body.updatedAt = new Date().toISOString();
197
+ store[idx] = { ...store[idx], ...body, id };
198
+ this.sendJson(res, 200, store[idx]);
199
+ });
200
+ return;
201
+ case "DELETE":
202
+ req.resume();
203
+ if (!ops.includes("delete")) {
204
+ return this.sendJson(res, 405, { error: "delete not supported" });
205
+ }
206
+ if (!id)
207
+ return this.sendJson(res, 400, { error: "id required" });
208
+ const deleteIdx = store.findIndex((doc) => doc.id === id);
209
+ if (deleteIdx === -1)
210
+ return this.sendJson(res, 404, { error: "Item not found" });
211
+ store.splice(deleteIdx, 1);
212
+ return this.sendJson(res, 204, null);
213
+ default:
214
+ req.resume();
215
+ return this.sendJson(res, 405, { error: `Method ${method} not allowed` });
216
+ }
217
+ }
218
+ /**
219
+ * コネクタモデル以外のリクエストをAzure Functionsへプロキシ
220
+ */
221
+ proxyToFunctions(req, res) {
222
+ const [targetHost, targetPort] = this.options.functionsTarget.split(":");
223
+ const proxyOpts = {
224
+ hostname: targetHost,
225
+ port: parseInt(targetPort, 10),
226
+ path: req.url,
227
+ method: req.method,
228
+ headers: { ...req.headers, host: this.options.functionsTarget },
229
+ };
230
+ const proxyReq = http.request(proxyOpts, (proxyRes) => {
231
+ res.writeHead(proxyRes.statusCode || 502, proxyRes.headers);
232
+ proxyRes.pipe(res, { end: true });
233
+ });
234
+ proxyReq.on("error", (err) => {
235
+ // Functions がまだ起動していない場合
236
+ this.sendJson(res, 502, {
237
+ error: "Azure Functions not available",
238
+ detail: err.message,
239
+ });
240
+ });
241
+ req.pipe(proxyReq, { end: true });
242
+ }
243
+ // ─── Utilities ────────────────────────────────────────────
244
+ readBody(req, callback) {
245
+ let data = "";
246
+ req.on("data", (chunk) => (data += chunk));
247
+ req.on("end", () => {
248
+ try {
249
+ callback(JSON.parse(data));
250
+ }
251
+ catch {
252
+ callback({});
253
+ }
254
+ });
255
+ }
256
+ sendJson(res, status, body) {
257
+ res.writeHead(status, {
258
+ "Content-Type": "application/json",
259
+ "Access-Control-Allow-Origin": "*",
260
+ "Connection": "close",
261
+ });
262
+ if (body !== null && body !== undefined) {
263
+ res.end(JSON.stringify(body));
264
+ }
265
+ else {
266
+ res.end();
267
+ }
268
+ }
269
+ /**
270
+ * リクエストボディを完全に読み捨ててからレスポンスを送信
271
+ * POST/PUT の 405 等で未読ボディがある場合に Linux で RST を防ぐ
272
+ */
273
+ drainAndRespond(req, res, status, body) {
274
+ if (req.readableEnded) {
275
+ this.sendJson(res, status, body);
276
+ return;
277
+ }
278
+ req.resume();
279
+ req.on("end", () => {
280
+ this.sendJson(res, status, body);
281
+ });
282
+ }
283
+ }
284
+ exports.ConnectorMockServer = ConnectorMockServer;
285
+ //# sourceMappingURL=connector-mock-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-mock-server.js","sourceRoot":"","sources":["../../../src/core/mock/connector-mock-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Zod スキーマ(ModelInfo)からモックデータを自動生成する
3
+ * フィールド名・型のヒューリスティクスで現実的な値を生成
4
+ */
5
+ import { ModelInfo } from "../scaffold/model-parser";
6
+ /**
7
+ * 単一のモックドキュメントを生成
8
+ */
9
+ export declare function generateMockDocument(model: ModelInfo, index: number, allModels?: ModelInfo[], seenModels?: Set<string>): Record<string, unknown>;
10
+ /**
11
+ * 複数のモックドキュメントを生成
12
+ */
13
+ export declare function generateMockDocuments(model: ModelInfo, count?: number, allModels?: ModelInfo[]): Record<string, unknown>[];
14
+ //# sourceMappingURL=zod-mock-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-mock-generator.d.ts","sourceRoot":"","sources":["../../../src/core/mock/zod-mock-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAuC,MAAM,0BAA0B,CAAC;AAE1F;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,SAAS,EAAY,EAChC,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,KAAK,GAAE,MAAU,EACjB,SAAS,GAAE,SAAS,EAAY,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAM3B"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ /**
3
+ * Zod スキーマ(ModelInfo)からモックデータを自動生成する
4
+ * フィールド名・型のヒューリスティクスで現実的な値を生成
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.generateMockDocument = generateMockDocument;
8
+ exports.generateMockDocuments = generateMockDocuments;
9
+ const model_parser_1 = require("../scaffold/model-parser");
10
+ /**
11
+ * 単一のモックドキュメントを生成
12
+ */
13
+ function generateMockDocument(model, index, allModels = [model], seenModels = new Set()) {
14
+ const nextSeen = new Set(seenModels);
15
+ nextSeen.add(model.name);
16
+ const doc = {};
17
+ for (const field of model.fields) {
18
+ doc[field.name] = generateFieldValue(model, field, index, allModels, nextSeen);
19
+ }
20
+ return doc;
21
+ }
22
+ /**
23
+ * 複数のモックドキュメントを生成
24
+ */
25
+ function generateMockDocuments(model, count = 5, allModels = [model]) {
26
+ const docs = [];
27
+ for (let i = 0; i < count; i++) {
28
+ docs.push(generateMockDocument(model, i + 1, allModels));
29
+ }
30
+ return docs;
31
+ }
32
+ // ─── Field Value Generation ─────────────────────────────────
33
+ function generateFieldValue(model, field, index, allModels, seenModels) {
34
+ // ネストされたスキーマ
35
+ if (field.isNestedSchema && field.nestedModelName) {
36
+ const nestedModel = allModels.find((m) => m.name === field.nestedModelName);
37
+ if (nestedModel && !seenModels.has(nestedModel.name)) {
38
+ const nested = generateMockDocument(nestedModel, index, allModels, seenModels);
39
+ return field.isArray ? [nested] : nested;
40
+ }
41
+ const fallback = { id: `${(0, model_parser_1.toKebabCase)(field.nestedModelName)}-${padIndex(index)}` };
42
+ return field.isArray ? [fallback] : fallback;
43
+ }
44
+ if (field.isArray) {
45
+ return [generateScalarValue(model, field, index)];
46
+ }
47
+ return generateScalarValue(model, field, index);
48
+ }
49
+ function generateScalarValue(model, field, index) {
50
+ const name = field.name.toLowerCase();
51
+ const modelKebab = (0, model_parser_1.toKebabCase)(model.name);
52
+ // id フィールド
53
+ if (field.name === "id") {
54
+ return `${modelKebab}-${padIndex(index)}`;
55
+ }
56
+ // enum フィールド — ラウンドロビン
57
+ if (field.enumValues && field.enumValues.length > 0) {
58
+ return field.enumValues[(index - 1) % field.enumValues.length];
59
+ }
60
+ // boolean フィールド
61
+ if (field.type === "boolean") {
62
+ return index % 2 === 0;
63
+ }
64
+ // number フィールド
65
+ if (field.type === "number") {
66
+ return generateNumberValue(name, index);
67
+ }
68
+ // date フィールド / *At パターン
69
+ if (field.type === "date" || name.endsWith("at")) {
70
+ return generateDateValue(index);
71
+ }
72
+ // object フィールド
73
+ if (field.type === "object") {
74
+ return {};
75
+ }
76
+ // string フィールド — 名前パターンで分岐
77
+ return generateStringValue(model, field, index);
78
+ }
79
+ function generateStringValue(model, field, index) {
80
+ const name = field.name.toLowerCase();
81
+ const modelKebab = (0, model_parser_1.toKebabCase)(model.name);
82
+ // email
83
+ if (name.includes("email") || name.includes("mail")) {
84
+ return `${modelKebab}-${padIndex(index)}@example.com`;
85
+ }
86
+ // URL / ウェブサイト
87
+ if (name.includes("url") || name.includes("website") || name.includes("link") || name === "href") {
88
+ return `https://example.com/${modelKebab}/${padIndex(index)}`;
89
+ }
90
+ // 電話番号
91
+ if (name.includes("phone") || name.includes("tel")) {
92
+ return `090-0000-${String(index).padStart(4, "0")}`;
93
+ }
94
+ // 名前系
95
+ if (name === "name" || name === "displayname" || name === "fullname" || name === "username") {
96
+ return `${model.name} ${index}`;
97
+ }
98
+ if (name === "firstname" || name === "givenname") {
99
+ return `FirstName${index}`;
100
+ }
101
+ if (name === "lastname" || name === "familyname" || name === "surname") {
102
+ return `LastName${index}`;
103
+ }
104
+ // タイトル / 件名
105
+ if (name === "title" || name === "subject" || name === "summary") {
106
+ return `Sample ${model.displayName || model.name} ${index}`;
107
+ }
108
+ // 説明 / 本文
109
+ if (name === "description" || name === "body" || name === "content" || name === "text") {
110
+ return `This is a sample ${(0, model_parser_1.toCamelCase)(model.name)} description for item ${index}.`;
111
+ }
112
+ // コード / キー
113
+ if (name.includes("code") || name.includes("key") && !name.includes("api")) {
114
+ return `${modelKebab.toUpperCase().replace(/-/g, "_")}-${String(index).padStart(3, "0")}`;
115
+ }
116
+ // ステータス
117
+ if (name === "status") {
118
+ const statuses = ["active", "inactive", "pending"];
119
+ return statuses[(index - 1) % statuses.length];
120
+ }
121
+ // タイプ / カテゴリ
122
+ if (name === "type" || name === "category") {
123
+ return `type-${((index - 1) % 3) + 1}`;
124
+ }
125
+ // 住所
126
+ if (name.includes("address") || name.includes("city") || name.includes("country")) {
127
+ return `Address ${index}`;
128
+ }
129
+ // 部署
130
+ if (name === "department" || name === "team" || name === "group") {
131
+ const depts = ["Engineering", "Sales", "Marketing", "Support", "HR"];
132
+ return depts[(index - 1) % depts.length];
133
+ }
134
+ // *Id パターン(外部キー)
135
+ if (name.endsWith("id") && name !== "id") {
136
+ const refName = field.name.replace(/Id$/, "");
137
+ return `${(0, model_parser_1.toKebabCase)(refName)}-${padIndex(((index - 1) % 3) + 1)}`;
138
+ }
139
+ // デフォルト
140
+ return `${modelKebab}-${(0, model_parser_1.toKebabCase)(field.name)}-${index}`;
141
+ }
142
+ function generateNumberValue(name, index) {
143
+ if (name.includes("age"))
144
+ return 20 + index;
145
+ if (name.includes("price") || name.includes("cost") || name.includes("amount"))
146
+ return index * 1000;
147
+ if (name.includes("count") || name.includes("quantity") || name.includes("qty"))
148
+ return index * 5;
149
+ if (name.includes("priority") || name.includes("order") || name.includes("sort"))
150
+ return index;
151
+ if (name.includes("rating") || name.includes("score"))
152
+ return Math.min(index, 5);
153
+ return index;
154
+ }
155
+ function generateDateValue(index) {
156
+ const baseDate = new Date("2026-01-01T00:00:00.000Z");
157
+ baseDate.setDate(baseDate.getDate() + index);
158
+ return baseDate.toISOString();
159
+ }
160
+ function padIndex(index) {
161
+ return String(index).padStart(3, "0");
162
+ }
163
+ //# sourceMappingURL=zod-mock-generator.js.map